Browse Source

Merge branch 'im-internet-hospital' of huangwenjie/im.doctor into im-internet-hospital

huangwenjie 5 years ago
parent
commit
745570e475

+ 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 消息通知
                            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;

+ 9 - 5
src/server/include/commons.js

@ -122,11 +122,15 @@ const CONTENT_TYPES = {
exports.CONTENT_TYPES = CONTENT_TYPES;
exports.SOCKET_TYPES={
    PATIENT:"patient",
    PC_PATIENT:"pc_patient",
    DOCTOR:"doctor",
    PC_DOCTOR:"pc_doctor",
    PCIM_DOCTOR:"pcim_doctor",
    PATIENT:"patient",//居民微信
    PATIENT_SYSTEM:"patient_system",//居民微信外层
    PC_PATIENT:"pc_patient",//居民PC
    PC_PATIENT_SYSTEM:"pc_patient_system",//居民PC外层
    DOCTOR:"doctor",//医生APP
    DOCTOR_SYSTEM:"doctor_system",//医生APP外层
    PC_DOCTOR:"pc_doctor",//医生PC
    PC_DOCTOR_SYSTEM:"pc_doctor_system",//医生PC外层
    PCIM_DOCTOR:"pcim_doctor",//中山医院医生MDT
    DEMO:"demo"
}

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

@ -108,7 +108,7 @@ class WechatClient extends RedisModel {
                    count++;
                }
                if(pc_doctorClient){
                    log.error("doctor sessionid "+pc_doctorClient.sessionId);
                    log.error("pc_doctor sessionid "+pc_doctorClient.sessionId);
                    if(patientClient){
                        log.error("patient sessionid "+patientClient.sessionId);
@ -332,8 +332,9 @@ class WechatClient extends RedisModel {
        }
        //发送pc端
        if(pc_doctorClient&&message.session_id==pc_doctorClient.sessionId){
        //发送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));
            pc_doctorClient.socket.emit('message', {
                id: message.id,
@ -442,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));

+ 4 - 2
src/server/start.sh

@ -11,5 +11,7 @@ ps -ef | grep node | grep -v grep | awk '{print $2}' | xargs kill -9
#./push_server/msgsvr/msg_svr -d
#cd im_server
#nohup /usr/local/ssgg_im/im_server/node server.js > log.txt &
#cd doctor
nohup /usr/local/ichat/src/server/node app.armour.js > log.txt &
#互联网医院测试环境
#nohup /data/ichat/src/server/node app.armour.js > log.txt &
#互联网医院正式环境
#nohup /usr/local/ichat/src/server/node app.armour.js > log.txt &