Browse Source

MDT消息推送

huangwenjie 5 years ago
parent
commit
29dd76c52a

+ 98 - 1
src/server/models/client/wechat.client.js

@ -356,6 +356,58 @@ class WechatClient extends RedisModel {
        }
    }
    /**
     * 推送MDT,医生外层新消息
     * @param doctorId
     * @param message
     */
    static sendMDTSocketMessageToDoctor(doctorId, message) {
        // let doctorMDTClient = clientCache.findByIdAndType("pcim_"+doctorId,SOCKET_TYPES.PCIM_DOCTOR);
        let doctorSYSTEMClient = clientCache.findByIdAndType("pc_system_"+doctorId,SOCKET_TYPES.PC_DOCTOR_SYSTEM);
        let doctorAPPSYSTEMClient = clientCache.findByIdAndType("doctor_system_"+doctorId,SOCKET_TYPES.DOCTOR_SYSTEM);
        //外层
        if(!doctorSYSTEMClient){
            log.warn("target system doctor is not online!");
        }else{
            doctorSYSTEMClient.socket.emit('message', {
                id: message.id,
                session_id: message.session_id,
                sender_id: message.sender_id,
                sender_name: message.sender_name,
                content_type: 1,
                content: {"socket_sms_type":4},
                timestamp: ObjectUtil.timestampToLong(message.timestamp),
                type: message.content_type,          // legacy support
                name: message.sender_name,
                patient_name:message.patient_name,
                patient_age:message.patient_age,
                patient_sex:message.patient_sex
            });
        }
        if(!doctorAPPSYSTEMClient){
            log.warn("target system app doctor is not online!");
        }else{
            doctorAPPSYSTEMClient.socket.emit('message', {
                id: message.id,
                session_id: message.session_id,
                sender_id: message.sender_id,
                sender_name: message.sender_name,
                content_type: 1,
                content: {"socket_sms_type":4},
                timestamp: ObjectUtil.timestampToLong(message.timestamp),
                type: message.content_type,          // legacy support
                name: message.sender_name,
                patient_name:message.patient_name,
                patient_age:message.patient_age,
                patient_sex:message.patient_sex
            });
        }
    }
    static sendPcImSocket(targetId, message, sessionType) {
        if (message.content_type == CONTENT_TYPES.PlainText ||
            message.content_type == CONTENT_TYPES.Image ||
@ -378,9 +430,19 @@ class WechatClient extends RedisModel {
                    session_type: sessionType,
                    from: message.sender_id|| '',
                    data: message.content,
                    business_type: message.business_type || 1
                    business_type: message.business_type || 1,
                    sender_name: message.sender_name,
                    content_type: message.content_type,
                    content: message.content,
                    timestamp: ObjectUtil.timestampToLong(message.timestamp),
                    type: message.content_type,          // legacy support
                    name: message.sender_name,
                    patient_name:message.patient_name,
                    patient_age:message.patient_age,
                    patient_sex:message.patient_sex
                });
            }
        }
    }
@ -548,6 +610,41 @@ class WechatClient extends RedisModel {
        }
    }
    //推送托盘消息
    static sendMDTSystemSocketMessage(targetUserId, message) {
        //居民外层消息推送
        let mdtDcotorClient = clientCache.findByIdAndType("pcim_"+targetUserId,SOCKET_TYPES.PCIM_DOCTOR);
        if(!mdtDcotorClient){
            log.warn("target  mdt doctor is not online!");
        }
        var mdtDoctorCount = 0;
        if(mdtDcotorClient&&message.session_id==mdtDcotorClient.sessionId){
            WechatClient.updateParticipantLastFetchTime(mdtDcotorClient.sessionId, targetUserId, ObjectUtil.timestampToLong(message.timestamp));
            mdtDcotorClient.socket.emit('message', {
                id: message.id,
                session_id: message.session_id,
                sender_id: message.sender_id,
                sender_name: message.sender_name,
                content_type: message.content_type,
                content: message.content,
                timestamp: ObjectUtil.timestampToLong(message.timestamp),
                type: message.content_type,          // legacy support
                name: message.sender_name,
            });
        }else{
            mdtDoctorCount++;
        }
        if(mdtDoctorCount==2){
            log.warn("doctor system is not in the same session or is not online");
        }
    }
    /**
     *
     * 发送微信模板消息给居民

+ 4 - 1
src/server/models/messages/messages.js

@ -192,7 +192,10 @@ class Messages extends RedisModel {
                WechatClient.sendSocketMessageToPatient(targetUserId,message,sessionType);
                //推送居民、居民PC、医生、医生PC外层推送
                WechatClient.sendSystemSocketMessage(targetUserId,message,sessionType)
                WechatClient.sendSystemSocketMessage(targetUserId,message,sessionType);
                //推送托盘消息
                // WechatClient.sendMDTSystemSocketMessage(targetUserId,message,sessionType);
                //redis发布消息
                if(config.pubSubSwitch) {//接收订阅消息处理开关,本地运行和测试库单独运行时防止用户接收消息2次

+ 3 - 0
src/server/models/sessions/sessions.js

@ -1985,6 +1985,9 @@ class Sessions extends RedisModel {
                message.targetUserName = targetUserName;
                message.sessionType = sessionType;
                message.targetType = 'doctor';
                //推送MDT,医生外层新消息
                WechatClient.sendMDTSocketMessageToDoctor(targetUserId,message);
            }
            //redis发布消息
            if(config.pubSubSwitch) {//接收订阅消息处理开关,本地运行和测试库单独运行时防止用户接收消息2次

+ 2 - 2
src/server/repository/mysql/participant.repo.js

@ -23,9 +23,9 @@ class ParticipantRepo {
     * @param handler
     */
    static findAll(sessionId, handler) {
        let sql = "SELECT u.id, u.name, u.sex, u.birthdate, u.avatar,u.hospital_name, p.participant_role role, false is_patient,p.last_fetch_time,u.level FROM sessions s, participants p, doctors u " +
        let sql = "SELECT u.id, u.name, u.sex, u.birthdate, u.avatar,u.hospital_name, p.participant_role role, false is_patient,p.last_fetch_time,u.level,u.mobile FROM sessions s, participants p, doctors u " +
            "WHERE s.id = ? AND s.id = p.session_id AND p.participant_id = u.id union " +
            "SELECT u.id, u.name, u.sex, u.birthdate, u.avatar,u.hospital_name, p.participant_role role, true is_patient,p.last_fetch_time,0 as level FROM sessions s, participants p, patients u " +
            "SELECT u.id, u.name, u.sex, u.birthdate, u.avatar,u.hospital_name, p.participant_role role, true is_patient,p.last_fetch_time,0 as level,u.mobile FROM sessions s, participants p, patients u " +
            "WHERE s.id = ? AND s.id = p.session_id AND p.participant_id = u.id";
        ImDb.execQuery({