Przeglądaj źródła

增加居民PC外层,居民微信外层,医生APP外层,医生PC外层消息

huangwenjie 5 lat temu
rodzic
commit
ffa9dab16b

+ 13 - 0
readme.md

@ -385,4 +385,17 @@ post请求
 
 ###备注
 topic的id=wlyy_consult的code
 
 
 ###SOCKET客户端登陆类型
 居民微信:patient
 居民微信外层:patient_system
 居民PC: pc_patient
 居民PC外层: pc_patient_system
 
 医生App: doctor
 医生App外层:doctor_system
 医生PC:pc_doctor
 医生PC外层:pc_doctor_system
 
 

+ 22 - 13
src/server/handlers/socket.handler.js

@ -68,10 +68,18 @@ class SocketHandler {
                    }else{
                        if("pc_doctor"===data.clientType){//新增pc端医生登录
                            data.userId = "pc_"+data.userId;
                        }else if("pcim_doctor"===data.clientType){//用于pcim 消息通知 MDT
                            data.userId = "pcim_"+data.userId;
                        }else if("pc_doctor_system"===data.clientType){//新增pc端医生外层-登录类型-20191012-huangnwenjie
                            data.userId= "pc_system_"+data.userId;
                        // }else if("pcim_doctor"===data.clientType){//用于pcim 消息通知 MDT-登陆类型已迁移到上面的分支-20191012-huangnwenjie
                        //     data.userId = "pcim_"+data.userId;
                        }else if("pc_patient"===data.clientType){//新增居民PC登陆类型
                            data.userId= "pcpatient_"+data.userId;
                        }else if("pc_patient_system"===data.clientType){//新增居民PC外层-登陆类型-20191012-huangnwenjie
                            data.userId= "pcpatient_system_"+data.userId;
                        }else if("patient_system"===data.clientType){//新增居民微信端外层-登陆类型-20191012-huangnwenjie
                            data.userId= "patient_system_"+data.userId;
                        }else if("doctor_system"===data.clientType){//新增医生APP外层-登陆类型-20191012-huangnwenjie
                            data.userId= "doctor_system_"+data.userId;
                        }
                        if(clientCache.removeByUserId(data.userId)){
@ -80,7 +88,7 @@ class SocketHandler {
                        }
                        log.info('User ' + data.userId + ' login');
                        if(!data.clientType||data.clientType=="patient"){
                        if(!data.clientType||data.clientType=="patient"||data.clientType=="patient_system"){//新增居民微信端外层-登陆类型-20191012-huangnwenjie
                            let patientClient = new PatientClient(socket, socketServer);
                            patientClient.userId = data.userId;
                            patientClient.password = data.password;
@ -89,7 +97,7 @@ class SocketHandler {
                            clientCache.addClient(patientClient);
                            users.login(data.userId, 10, '', '');
                            socket.emit('ack', {});
                        }else if("pc_patient"===data.clientType){
                        }else if("pc_patient"===data.clientType || "pc_patient_system"===data.clientType){////新增居民PC外层-登陆类型-20191012-huangnwenjie
                            //用于pcpatient 消息通知
                            let pcpatientClient = new PcPatientClient(socket, socketServer);
                            pcpatientClient.userId = data.userId;
@ -99,15 +107,16 @@ class SocketHandler {
                            clientCache.addClient(pcpatientClient);
                            users.login(data.userId, 10, '', '');
                            socket.emit('ack', {});
                        }else if("pcim_doctor"===data.clientType){
                            //用于pcim 消息通知
                            let pcdoctorClient = new PcDoctorClient(socket, socketServer);
                            pcdoctorClient.userId = data.userId;
                            pcdoctorClient.password = data.password;
                            pcdoctorClient.clientType = data.clientType;
                            pcdoctorClient.sessionId =  "";
                            clientCache.addClient(pcdoctorClient);
                            socket.emit('ack', {});
                        //MDT 登陆类型已迁移到上面的分支-20191012-huangnwenjie
                        // }else if("pcim_doctor"===data.clientType){   登
                        //     //用于pcim 消息通知
                        //     let pcdoctorClient = new PcDoctorClient(socket, socketServer);
                        //     pcdoctorClient.userId = data.userId;
                        //     pcdoctorClient.password = data.password;
                        //     pcdoctorClient.clientType = data.clientType;
                        //     pcdoctorClient.sessionId =  "";
                        //     clientCache.addClient(pcdoctorClient);
                        //     socket.emit('ack', {});
                        }else{
                            let doctorClient = new DoctorClient(socket, socketServer);
                            doctorClient.userId = data.userId;

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

@ -123,9 +123,13 @@ exports.CONTENT_TYPES = CONTENT_TYPES;
exports.SOCKET_TYPES={
    PATIENT:"patient",
    PATIENT_SYSTEM:"patient_system",
    PC_PATIENT:"pc_patient",
    PC_PATIENT_SYSTEM:"pc_patient_system",
    DOCTOR:"doctor",
    DOCTOR_SYSTEM:"doctor_system",
    PC_DOCTOR:"pc_doctor",
    PC_DOCTOR_SYSTEM:"pc_doctor_system",
    PCIM_DOCTOR:"pcim_doctor",
    DEMO:"demo"
}

+ 107 - 3
src/server/models/client/wechat.client.js

@ -314,8 +314,7 @@ class WechatClient extends RedisModel {
        // }
        var count = 0;
        // if(doctorClient&&message.session_id==doctorClient.sessionId){
        if(doctorClient){
        if(doctorClient&&message.session_id==doctorClient.sessionId){
            WechatClient.updateParticipantLastFetchTime(doctorClient.sessionId, doctorId, ObjectUtil.timestampToLong(message.timestamp));
            doctorClient.socket.emit('message', {
                id: message.id,
@ -333,7 +332,7 @@ class WechatClient extends RedisModel {
        }
        //发送pc端
        //发送pc端 - PC端消息不做sessionid的判断,前端自己判断消息归属于哪个会话,自行渲染--20191012-huangwenjie
        // if(pc_doctorClient&&message.session_id==pc_doctorClient.sessionId){
        if(pc_doctorClient){
            WechatClient.updateParticipantLastFetchTime(pc_doctorClient.sessionId, doctorId, ObjectUtil.timestampToLong(message.timestamp));
@ -444,6 +443,111 @@ class WechatClient extends RedisModel {
        }
    }
    //推送居民、居民PC、医生、医生PC外层推送
    static sendSystemSocketMessage(targetUserId, message) {
        //居民外层消息推送
        let patientClient = clientCache.findByIdAndType("patient_system_"+targetUserId,SOCKET_TYPES.PATIENT_SYSTEM);
        let pc_patientClient = clientCache.findByIdAndType("pcpatient_system_"+targetUserId,SOCKET_TYPES.PC_PATIENT_SYSTEM);
        if(!patientClient&&!pc_patientClient){
            log.warn("target  patient systemt is not online!");
            return;
        }
        var patientcount = 0;
        if(patientClient&&message.session_id==patientClient.sessionId){
            WechatClient.updateParticipantLastFetchTime(patientClient.sessionId, targetUserId, ObjectUtil.timestampToLong(message.timestamp));
            patientClient.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{
            patientcount++;
        }
        //发送pc端
        if(pc_patientClient&&message.session_id==pc_patientClient.sessionId){
            WechatClient.updateParticipantLastFetchTime(pc_patientClient.sessionId, targetUserId, ObjectUtil.timestampToLong(message.timestamp));
            pc_patientClient.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{
            count++;
        }
        if(patientcount==2){
            log.warn("patient system is not in the same session or is not online");
        }
        //医生外层消息推送
        let doctorClient = clientCache.findByIdAndType("doctor_system_"+targetUserId,SOCKET_TYPES.DOCTOR_SYSTEM);
        let pc_doctorClient = clientCache.findByIdAndType("pc_system_"+targetUserId,SOCKET_TYPES.PC_DOCTOR_SYSTEM);
        if(!doctorClient&&!pc_doctorClient){
            log.warn("target doctor system is not online!");
            return;
        }
        var doctorcount = 0;
        if(doctorClient&&message.session_id==doctorClient.sessionId){
            WechatClient.updateParticipantLastFetchTime(doctorClient.sessionId, targetUserId, ObjectUtil.timestampToLong(message.timestamp));
            doctorClient.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{
            doctorcount++;
        }
        //发送pc端 - PC端消息不做sessionid的判断,前端自己判断消息归属于哪个会话,自行渲染--20191012-huangwenjie
        // if(pc_doctorClient&&message.session_id==pc_doctorClient.sessionId){
        if(pc_doctorClient){
            WechatClient.updateParticipantLastFetchTime(pc_doctorClient.sessionId, targetUserId, ObjectUtil.timestampToLong(message.timestamp));
            pc_doctorClient.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{
            doctorcount++;
        }
        if(doctorcount==2){
            log.warn("doctor system is not in the same session or is not online");
        }
    }
    /**
     *
     * 发送微信模板消息给居民

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

@ -191,6 +191,9 @@ class Messages extends RedisModel {
                //告知居民新消息
                WechatClient.sendSocketMessageToPatient(targetUserId,message,sessionType);
                //推送居民、居民PC、医生、医生PC外层推送
                WechatClient.sendSystemSocketMessage(targetUserId,message,sessionType)
                //redis发布消息
                if(config.pubSubSwitch) {//接收订阅消息处理开关,本地运行和测试库单独运行时防止用户接收消息2次
                    pubSub.publish(config.pubChannel,JSON.stringify(message));