LAPTOP-KB9HII50\70708 преди 5 месеца
родител
ревизия
c8954f13df

+ 4 - 2
src/server/endpoints/v2/topic.endpoint.js

@ -67,10 +67,11 @@ router.get(APIv2.Sessions.HealthTopicList, function (req, res) {
    let page = req.query.page;
    let pagesize = req.query.pagesize;
    let patientName = req.query.patientName;
    let patient = req.query.patient;
    let topic = new Topics();
    ControllerUtil.regModelEventHandler(topic, res);
    let users = user.split(",");
    topic.findAllByUserAndReplyAndStatusHealthTopic(users,reply,status,page,pagesize,patientName);
    topic.findAllByUserAndReplyAndStatusHealthTopic(users,reply,status,page,pagesize,patient,patientName);
});
/**
@ -83,13 +84,14 @@ router.get(APIv2.Sessions.TopicListByType,function (req,res) {
    let reply = req.query.reply;//SESSION_TYPES
    let page = req.query.page;
    let pagesize = req.query.pagesize;
    let patient = req.query.patient;
    let patientName = req.query.patientName;
    let startTime = req.query.startTime;
    let endTime = req.query.endTime;
    let topic = new Topics();
    ControllerUtil.regModelEventHandler(topic, res);
    let users = user.split(",");
    topic.findAllTopicByType(users,reply,status,type,patientName,startTime,endTime,page,pagesize);
    topic.findAllTopicByType(users,reply,status,type,patient,patientName,startTime,endTime,page,pagesize);
});

+ 7 - 4
src/server/include/commons.js

@ -35,6 +35,8 @@ const SESSION_TYPES = {
    GROUP: 3,           // 固定组
    DISCUSSION: 4,       // 临时讨论组
    SPECIALISTGROUP: 5,       // 专科医生和家庭医生的固定组
    BED: 6,       // 家庭病床居民发起咨询
    DOCTOR_BED: 7,       // 家庭病床医生发起咨询
    PRESCRIPTION: 8,   // 续方
    KANGFU: 18,   // 续方
    PRESCRIPTION_HOSPITAL:9, //医院在线复诊
@ -107,6 +109,7 @@ const CONTENT_TYPES = {
    VideoCancel:45,// 视频通讯-居民取消视频
    InviteDoctor:46,// 邀请专科医生-居民端和家庭医生端
    InviteSpecialist:47,// 邀请专科医生-专科医生端
    XxAscvd:32,// 厦心筛查风险评估
    ReservationDoorCardInfo: 2101,//上门服务-预约工单卡片信息
    ChangeDoorCardInfo: 2102,//上门服务-修改工单卡片信息
    ChangeDoorDoctor: 2103,//上门服务-变更工单医生信息
@ -256,6 +259,10 @@ const DB_TABLES = {
            return DB_TABLES.GroupMessages;
        else if (sessionType == SESSION_TYPES.PRESCRIPTION)
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.BED)
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.DOCTOR_BED)
            return DB_TABLES.GroupMessages;
        else if (sessionType == SESSION_TYPES.KANGFU)
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.PRESCRIPTION_HOSPITAL)
@ -264,10 +271,6 @@ const DB_TABLES = {
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.SPECIALISTGROUP)
            return DB_TABLES.GroupMessages;
        else if (sessionType == SESSION_TYPES.PRESCRIPTION_HOSPITAL)
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.ONDOOR_NURSING)
            return DB_TABLES.MucMessages;
        else throw {message: "Unknown session type"};
    }
};

+ 2 - 0
src/server/models/client/app.client.js

@ -179,6 +179,8 @@ class AppClient extends RedisModel {
                    session_type==SESSION_TYPES.DISCUSSION||
                    session_type==SESSION_TYPES.SPECIALISTGROUP||
                    session_type==SESSION_TYPES.PRESCRIPTION||
                    session_type==SESSION_TYPES.BED||
                    session_type==SESSION_TYPES.DOCTOR_BED||
                    session_type==SESSION_TYPES.KANGFU||
                    session_type==SESSION_TYPES.PRESCRIPTION_HOSPITAL||
                    session_type==SESSION_TYPES.ONDOOR_NURSING||

+ 1 - 1
src/server/models/push/pusher.js

@ -58,7 +58,7 @@ class Pusher extends RedisModel {
            singleMessage.setData(template);
            this.gt.pushAPNMessageToSingle(this.getuiConfig.APPID, deviceToken, singleMessage, function (err, res) {
                if (err) {
                    log.error('Push via APN failed:' + e);
                    log.error('Push via APN failed:' + err);
                } else {
                    handler(null, res);
                }

+ 26 - 9
src/server/models/sessions/sessions.js

@ -132,9 +132,10 @@ class Sessions extends RedisModel {
        }
        function callBusinessType(sessionId) {
            if(type == SESSION_TYPES.MUC||type == SESSION_TYPES.PRESCRIPTION|| type == SESSION_TYPES.KANGFU || type ==SESSION_TYPES.PRESCRIPTION_HOSPITAL || type ==SESSION_TYPES.ONDOOR_NURSING){
            if(type == SESSION_TYPES.MUC||type == SESSION_TYPES.PRESCRIPTION|| type == SESSION_TYPES.KANGFU || type == SESSION_TYPES.BED
                 || type ==SESSION_TYPES.PRESCRIPTION_HOSPITAL || type ==SESSION_TYPES.ONDOOR_NURSING){
                callCreate(sessionId, SESSION_BUSINESS_TYPE.PATIENT);
            }else if(type==SESSION_TYPES.DISCUSSION||type==SESSION_TYPES.GROUP){
            }else if(type==SESSION_TYPES.DISCUSSION||type==SESSION_TYPES.GROUP || type == SESSION_TYPES.DOCTOR_BED){
                callCreate(sessionId, SESSION_BUSINESS_TYPE.DOCTOR);
            }else {
                ParticipantRepo.getBusinessType(participantIdArray, function (err, businessType) {
@ -147,7 +148,8 @@ class Sessions extends RedisModel {
            let createDate = new Date();
            Participants.saveParticipantsToRedis(sessionId, participantArray, createDate, function (res) {
                let sessionKey = RedisModel.makeRedisKey(REDIS_KEYS.Session, sessionId);
                if (type == SESSION_TYPES.MUC||type == SESSION_TYPES.PRESCRIPTION || type == SESSION_TYPES.KANGFU || type ==SESSION_TYPES.PRESCRIPTION_HOSPITAL || type ==SESSION_TYPES.ONDOOR_NURSING) {
                if (type == SESSION_TYPES.MUC||type == SESSION_TYPES.PRESCRIPTION || type == SESSION_TYPES.KANGFU || type == SESSION_TYPES.BED
                    || type ==SESSION_TYPES.PRESCRIPTION_HOSPITAL || type ==SESSION_TYPES.ONDOOR_NURSING) {
                    businessType = 2;
                }
                let session = {
@ -204,10 +206,10 @@ class Sessions extends RedisModel {
        //流程2-判断session的业务类型;
        function callBusinessType() {
            if(type==SESSION_TYPES.MUC||type==SESSION_TYPES.PRESCRIPTION || type == SESSION_TYPES.KANGFU
            if(type==SESSION_TYPES.MUC||type==SESSION_TYPES.PRESCRIPTION || type == SESSION_TYPES.KANGFU || type == SESSION_TYPES.BED
                || type==SESSION_TYPES.PRESCRIPTION_HOSPITAL || type==SESSION_TYPES.ONDOOR_NURSING){
                callCreateSession(SESSION_BUSINESS_TYPE.PATIENT);
            }else if(type==SESSION_TYPES.SPECIALISTGROUP||type==SESSION_TYPES.DISCUSSION){
            }else if(type==SESSION_TYPES.SPECIALISTGROUP||type==SESSION_TYPES.DISCUSSION|| type == SESSION_TYPES.DOCTOR_BED){
                callCreateSession(SESSION_BUSINESS_TYPE.DOCTOR);
            }else{
                ParticipantRepo.getBusinessType(participantIdArray, function (err, businessType) {
@ -1190,7 +1192,8 @@ class Sessions extends RedisModel {
                                                if(users[j]==userId)continue;
                                                 WechatClient.sendAllRead(users[j],sessionId);
                                            }
                                        }else if(session.type == SESSION_TYPES.MUC || session.type == SESSION_TYPES.PRESCRIPTION || session.type == SESSION_TYPES.KANGFU || SESSION_TYPES.PRESCRIPTION_HOSPITAL || SESSION_TYPES.ONDOOR_NURSING){
                                        }else if(session.type == SESSION_TYPES.MUC || session.type == SESSION_TYPES.PRESCRIPTION || session.type == SESSION_TYPES.BED
                                            || session.type == SESSION_TYPES.KANGFU || SESSION_TYPES.PRESCRIPTION_HOSPITAL || SESSION_TYPES.ONDOOR_NURSING){
                                            for(var j in users){
                                                if(users[j]==userId)continue;
                                                WechatClient.sendMucAllRead(users[j],userId,sessionId);
@ -1223,7 +1226,8 @@ class Sessions extends RedisModel {
                                                //通知对方自己已经读取数据
                                                WechatClient.sendAllRead(users[j],sessionId);
                                            }
                                        }else if(session.type == SESSION_TYPES.MUC || session.type == SESSION_TYPES.PRESCRIPTION || session.type == SESSION_TYPES.KANGFU || SESSION_TYPES.PRESCRIPTION_HOSPITAL || SESSION_TYPES.ONDOOR_NURSING){
                                        }else if(session.type == SESSION_TYPES.MUC || session.type == SESSION_TYPES.PRESCRIPTION || session.type == SESSION_TYPES.BED
                                            || session.type == SESSION_TYPES.KANGFU || SESSION_TYPES.PRESCRIPTION_HOSPITAL || SESSION_TYPES.ONDOOR_NURSING){
                                            for(var j in users){
                                                if(users[j]==userId)continue;
                                                //如果是患者拉取数据告诉在线的医生患者已经读取数据
@ -1569,7 +1573,9 @@ class Sessions extends RedisModel {
                            });
                        });
                    }
                    if(sessionType == SESSION_TYPES.MUC || sessionType == SESSION_TYPES.PRESCRIPTION || sessionType == SESSION_TYPES.KANGFU || sessionType == SESSION_TYPES.PRESCRIPTION_HOSPITAL || sessionType == SESSION_TYPES.ONDOOR_NURSING){
                    if(sessionType == SESSION_TYPES.MUC || sessionType == SESSION_TYPES.PRESCRIPTION || sessionType == SESSION_TYPES.BED
                        || sessionType == SESSION_TYPES.KANGFU || sessionType == SESSION_TYPES.PRESCRIPTION_HOSPITAL
                        || sessionType == SESSION_TYPES.ONDOOR_NURSING){
                        if(message.content_type == CONTENT_TYPES.PlainText ||
                           message.content_type == CONTENT_TYPES.Image ||
                           message.content_type == CONTENT_TYPES.Audio||
@ -1595,7 +1601,18 @@ class Sessions extends RedisModel {
                                        }
                                    });
                                }
                            })
                            });
                            TopicRepo.findBedBySessionId(sessionId,function(err,res){
                                if(res){
                                    TopicRepo.specialistReplyTopic(message.sender_id,res[0].id,function(err,res){
                                        if(err){
                                            logger.error("update consult_help reply error");
                                        }else{
                                            logger.warn("update consult_help reply success");
                                        }
                                    });
                                }
                            });
                        }
                    }

+ 14 - 7
src/server/models/sessions/topics.js

@ -127,13 +127,15 @@ class Topics extends RedisModel {
     * @param status
     * @param page
     * @param pagesize
     * @param patient
     * @param patientName
     */
    findAllByUserAndReplyAndStatusHealthTopic(users,reply, status, page, pagesize,patientName) {
    findAllByUserAndReplyAndStatusHealthTopic(users,reply, status, page, pagesize,patient,patientName) {
        let self = this;
        page = (page - 1 < 0 ? 0 : page - 1) * pagesize;
        if (!pagesize) pagesize = 10;
        pagesize = parseInt(pagesize);
        TopicsRepo.findAllByUserAndReplyAndStatusHealthTopic(users,reply,status, page, pagesize, function (err, res) {
        TopicsRepo.findAllByUserAndReplyAndStatusHealthTopic(users,reply,status, page, pagesize,patient,patientName, function (err, res) {
            if (err) {
                ModelUtil.emitError(self.eventEmitter, "获取列表失败" + err);
            }
@ -167,16 +169,20 @@ class Topics extends RedisModel {
     * @param users
     * @param reply
     * @param status
     * @param adminTeamCode
     * @param type
     * @param patient
     * @param patientName
     * @param startTime
     * @param endTime
     * @param page
     * @param pagesize
     */
    findAllTopicByType(users,reply, status,type,patientName,startTime,endTime, page, pagesize) {
    findAllTopicByType(users,reply, status,type,patient,patientName,startTime,endTime, page, pagesize) {
        let self = this;
        page = (page - 1 < 0 ? 0 : page - 1) * pagesize;
        if (!pagesize) pagesize = 10;
        pagesize = parseInt(pagesize);
        TopicsRepo.findAllTopicByType(users,reply,status,type,patientName,startTime,endTime, page, pagesize, function (err, res) {
        TopicsRepo.findAllTopicByType(users,reply,status,type,patient,patientName,startTime,endTime, page, pagesize, function (err, res) {
            if (err) {
                ModelUtil.emitError(self.eventEmitter, "获取列表失败" + err);
            }
@ -265,8 +271,9 @@ class Topics extends RedisModel {
     */
    createTopic(topicName, topicId, sessionId, users, messages, sessionType) {
        let self = this;
        if (!sessionId && (sessionType == SESSION_TYPES.MUC|| sessionType == SESSION_TYPES.PRESCRIPTION
            || sessionType == SESSION_TYPES.KANGFU || sessionType == SESSION_TYPES.PRESCRIPTION_HOSPITAL || sessionType == SESSION_TYPES.ONDOOR_NURSING)) {
        if (!sessionId && (sessionType == SESSION_TYPES.MUC|| sessionType == SESSION_TYPES.PRESCRIPTION || sessionType == SESSION_TYPES.BED
            || sessionType == SESSION_TYPES.KANGFU || sessionType == SESSION_TYPES.PRESCRIPTION_HOSPITAL
            || sessionType == SESSION_TYPES.ONDOOR_NURSING)) {
            ModelUtil.emitOK(self.eventEmitter, {status: -1, message: "会话ID为空,请先生成会话ID"});
            return;
        }

+ 30 - 7
src/server/repository/mysql/topics.repo.js

@ -57,6 +57,18 @@ class TopicRepo {
        });
    }
    //查找家庭病床医生发起的咨询
    static findBedBySessionId(sessionId, handler) {
        let sql = "select * from " + DB_TABLES.Sessions + " where session_id = ? and type=7 ";
        ImDb.execQuery({
            sql: sql,
            args: [sessionId],
            handler: function (err, res) {
                handler(err, res);
            }
        });
    }
    static findAllByUserAndReplyAndStatus(userId,reply,status,page,size,handler){
        let sql = "";
@ -90,29 +102,34 @@ class TopicRepo {
     * @param status
     * @param page
     * @param size
     * @param patient
     * @param patientName
     * @param handler
     */
    static findAllByUserAndReplyAndStatusHealthTopic(userId,reply,status,page,size,handler,patientName){
    static findAllByUserAndReplyAndStatusHealthTopic(userId,reply,status,page,size,patient,patientName,handler){
        let sql = "";
        var args =[];
        var tempParms = "";
        if (patient){
            tempParms += " and s.id='"+patient+"' ";
        }
        if (patientName){
            tempParms += " and s.name like '%"+patientName+"%' ";
        }
        if(status==10){
            args.push(userId,status,page,size,patientName);
            args.push(userId,status,page,size);
            sql =  "SELECT t.*, s.avatar,s.sex,s.birthdate, s.`name` AS patient_name,c.doctor FROM "+
                DB_TABLES.Topics+" t,"+DB_TABLES.Participants+" p,"+DB_TABLES.Doctors+" d,"+DB_TABLES.WlyyConsult+" c,"+DB_TABLES.Patients+" s "+
                "WHERE d.id = p.participant_id AND c.id = t.id AND c.patient = s.id AND p.session_id = t.session_id "+
                "AND d.id in (?) AND t. STATUS = ? AND c.type not in ('6','8')"+tempParms+" ORDER BY create_time DESC limit ?,?";
                "AND d.id in (?) AND t. STATUS = ? AND c.type not in ('3','6','8')"+tempParms+" ORDER BY create_time DESC limit ?,?";
        }else{
            args.push(userId,status,reply,page,size,patientName);
            args.push(userId,status,reply,page,size);
            sql =  "SELECT t.*, s.avatar,s.sex,s.birthdate, s.`name` AS patient_name,c.doctor FROM "+
                DB_TABLES.Topics+" t,"+DB_TABLES.Participants+" p,"+DB_TABLES.Doctors+" d,"+DB_TABLES.WlyyConsult+" c,"+DB_TABLES.Patients+" s "+
                "WHERE d.id = p.participant_id AND c.id = t.id AND c.patient = s.id AND p.session_id = t.session_id "+
                "AND d.id in (?) AND t. STATUS = ? and t.reply=? AND c.type not in ('6','8')"+tempParms+" ORDER BY create_time DESC limit ?,?";
                "AND d.id in (?) AND t. STATUS = ? and t.reply=? AND c.type not in ('3','6','8')"+tempParms+" ORDER BY create_time DESC limit ?,?";
        }
        ImDb.execQuery({
            sql: sql,
@ -129,14 +146,21 @@ class TopicRepo {
     * @param reply
     * @param status
     * @param type
     * @param patient
     * @param patientName
     * @param startTime
     * @param endTime
     * @param page
     * @param size
     * @param handler
     */
    static findAllTopicByType(userId,reply,status,type,patientName,startTime,endTime,page,size,handler){
    static findAllTopicByType(userId,reply,status,type,patient,patientName,startTime,endTime,page,size,handler){
        let sql = "";
        var args =[];
        var tempParms = "";
        if(patient){
            tempParms += " and s.id = '"+patient+"' ";
        }
        if(patientName){
            tempParms += " and s.name like '%"+patientName+"%' ";
        }
@ -145,7 +169,6 @@ class TopicRepo {
        }
        if(endTime){
            tempParms += " and t.create_time <= '"+endTime+"' ";
        }
        if(type){
            if(status==10){