LAPTOP-KB9HII50\70708 4 months ago
parent
commit
4580e700f2

+ 19 - 0
src/server/endpoints/v2/message.endpoint.js

@ -50,6 +50,25 @@ router.post(APIv2.Message.DoctorSystemMessage, function (req, res) {
    wechatClient.sendSystemSocketMessage(targetUserId,JSON.parse(message));
});
/**
 * 发送医生外层socket消息
 */
router.post(APIv2.Message.DoctorSystemMessageD, function (req, res) {
    let targetUserId = req.body.targetUserId;
    let message = req.body.message;
    let wechatClient = new WechatClient();
    if (!targetUserId) {
        throw {httpStatus: 406, message: 'Missing targetUserId.'};
    }
    if (!message) {
        throw {httpStatus: 406, message: 'Missing message.'};
    }
    ControllerUtil.regModelEventHandler(wechatClient, res);
    //告知医生新消息
    wechatClient.sendSystemSocketMessageD(targetUserId,JSON.parse(message));
});
router.get(APIv2.Message.DataMessage, function (req, res) {
    let sessionId = req.query.sessionId;
    let messages = new Messages();

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

@ -37,6 +37,7 @@ const SESSION_TYPES = {
    SPECIALISTGROUP: 5,       // 专科医生和家庭医生的固定组
    BED: 6,       // 家庭病床居民发起咨询
    DOCTOR_BED: 7,       // 家庭病床医生发起咨询
    VIDEO_BED: 10,       // 家庭病床医生发起查床会诊-视频
    PRESCRIPTION: 8,   // 续方
    KANGFU: 18,   // 续方
    PRESCRIPTION_HOSPITAL:9, //医院在线复诊
@ -101,6 +102,9 @@ const CONTENT_TYPES = {
    PrescriptionBloodStatus:16,//续方咨询血糖血压咨询消息
    PrescriptionFollowupContent:17,//续方咨询随访问卷消息
    Rehabilitation: 20, //康复计划发送
    BedVideoStart: 29, //查床会诊-发起视频系统消息
    BedVideoEnd: 30, //查床会诊-拒绝视频系统消息
    BedVideoHangUp: 31, //查床会诊-挂断视频系统消息
    VideoStart:40,// 视频通讯-发起视频
    VideoHangUp:41,// 视频通讯-医生主动挂断视频
    VideoAutoHangUp:42,// 视频通讯-自动挂断视频
@ -261,7 +265,7 @@ const DB_TABLES = {
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.BED)
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.DOCTOR_BED)
        else if (sessionType == SESSION_TYPES.DOCTOR_BED||sessionType == SESSION_TYPES.VIDEO_BED)
            return DB_TABLES.GroupMessages;
        else if (sessionType == SESSION_TYPES.KANGFU)
            return DB_TABLES.MucMessages;

+ 1 - 0
src/server/include/endpoints.js

@ -20,6 +20,7 @@ const APIv2 = {
        DataMessage: '/dataMessage',
        CleanMessageToRedis: '/cleanMessageToRedis',
        DoctorSystemMessage: '/doctorSystemMessage',
        DoctorSystemMessageD: '/doctorSystemMessageD',
        CleanMessageLastFetchTimeToRedis: '/cleanMessageLastFetchTimeToRedis'
    },
    Users: {

+ 7 - 6
src/server/models/client/app.client.js

@ -158,12 +158,12 @@ class AppClient extends RedisModel {
     * @param sessionType
     */
    static sendNotification(targetId, message, sessionType,badge) {
        if (message.content_type == CONTENT_TYPES.PlainText ||
            message.content_type == CONTENT_TYPES.Image ||
            message.content_type == CONTENT_TYPES.Audio||
            message.content_type == CONTENT_TYPES.Video||
            message.content_type == CONTENT_TYPES.GoTo||
            sessionType==SESSION_TYPES.SYSTEM) {
        if (message.content_type === CONTENT_TYPES.PlainText ||
            message.content_type === CONTENT_TYPES.Image ||
            message.content_type === CONTENT_TYPES.Audio||
            message.content_type === CONTENT_TYPES.Video||
            message.content_type === CONTENT_TYPES.GoTo||
            sessionType===SESSION_TYPES.SYSTEM) {
            AppClient.getAppStatus(targetId, function (err, userStatus) {
                if (err) {
@ -181,6 +181,7 @@ class AppClient extends RedisModel {
                    session_type==SESSION_TYPES.PRESCRIPTION||
                    session_type==SESSION_TYPES.BED||
                    session_type==SESSION_TYPES.DOCTOR_BED||
                    session_type==SESSION_TYPES.VIDEO_BED||
                    session_type==SESSION_TYPES.KANGFU||
                    session_type==SESSION_TYPES.PRESCRIPTION_HOSPITAL||
                    session_type==SESSION_TYPES.ONDOOR_NURSING||

+ 47 - 0
src/server/models/client/wechat.client.js

@ -349,6 +349,53 @@ class WechatClient extends RedisModel {
        }
    }
    //医生、医生PC外层推送
    sendSystemSocketMessageD(targetUserId, message,handler) {
        let self = this;
        //医生外层消息推送
        let doctorClient = clientCache.findByIdAndType("doctor_system_"+targetUserId,SOCKET_TYPES.DOCTOR_SYSTEM);
        let pc_doctorClient = clientCache.findByIdAndType("pc_"+targetUserId,SOCKET_TYPES.PC_DOCTOR);
        if(!doctorClient&&!pc_doctorClient){
            log.warn("target doctor system is not online!");
            ModelUtil.emitOK(self.eventEmitter, {status: 1,message:"doctor_not_online"});
            return;
        }
        if(doctorClient&&message.session_id===doctorClient.sessionId){
            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,
            });
            ModelUtil.emitOK(self.eventEmitter, {status: 200});
            return;
        }else if(pc_doctorClient&&message.session_id===pc_doctorClient.sessionId){
            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,
            });
            ModelUtil.emitOK(self.eventEmitter, {status: 200});
            return;
        }else{
            ModelUtil.emitOK(self.eventEmitter, {status: 2,message:"sessionId is error"});
            return;
        }
    }
    //推送居民、居民PC、医生、医生PC外层推送
    sendSystemSocketMessage(targetUserId, message,handler) {
        let self = this;

+ 4 - 2
src/server/models/sessions/sessions.js

@ -135,7 +135,8 @@ class Sessions extends RedisModel {
            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 || type == SESSION_TYPES.DOCTOR_BED){
            }else if(type==SESSION_TYPES.DISCUSSION||type==SESSION_TYPES.GROUP
            || type == SESSION_TYPES.DOCTOR_BED || type == SESSION_TYPES.VIDEO_BED){
                callCreate(sessionId, SESSION_BUSINESS_TYPE.DOCTOR);
            }else {
                ParticipantRepo.getBusinessType(participantIdArray, function (err, businessType) {
@ -209,7 +210,8 @@ class Sessions extends RedisModel {
            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|| type == SESSION_TYPES.DOCTOR_BED){
            }else if(type==SESSION_TYPES.SPECIALISTGROUP||type==SESSION_TYPES.DISCUSSION
                || type == SESSION_TYPES.DOCTOR_BED || type == SESSION_TYPES.VIDEO_BED){
                callCreateSession(SESSION_BUSINESS_TYPE.DOCTOR);
            }else{
                ParticipantRepo.getBusinessType(participantIdArray, function (err, businessType) {