| 
					
				 | 
			
			
				@ -5,13 +5,15 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let RedisClient = require('../../repository/redis/redis.client'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let RedisModel = require('./../redis.model'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let AppStatusRepo = require('../../repository/mysql/app.status.repo'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let MessageNoticeSettingRepo = require('../../repository/mysql/message.noticeSetting.repo'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let SignFamilyRepo = require('../../repository/mysql/sign.family.repo'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let AppStatusRepo = require('../../repository/oracle/app.status.repo'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let MessageNoticeSettingRepo = require('../../repository/oracle/message.noticeSetting.repo'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let SignFamilyRepo = require('../../repository/oracle/sign.family.repo'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let ModelUtil = require('../../util/model.util'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let clientCache = require('../socket.io/client.cache').clientCache(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let WlyyAssistantSDK = require("../../util/wlyyAssistant.sdk"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let HlwyyAssistantSDK = require("../../util/hlwyyAssistant.sdk"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let WlyySDK = require("../../util/wlyy.sdk"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let DoctorRepo = require('../../repository/oracle/doctor.repo'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let log = require("../../util/log.js"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let pusher = require('../push/pusher'); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -23,6 +25,9 @@ const MESSAGE_BUSSINESS_TYPE = require('../../include/commons').MESSAGE_BUSSINES 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				const REDIS_KEYS = require('../../include/commons').REDIS_KEYS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				const PLATFORMS = require('../../include/commons').PLATFORM; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let configFile = require('../../include/commons').CONFIG_FILE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let config = require('../../resources/config/' + configFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				class AppClient extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    constructor() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        super(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -95,58 +100,64 @@ class AppClient extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    static sendNotice(targetId, message, sessionType,badge,userStatus){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //调用接口推送医生助手微信模板 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sessionId:message.session_id||'', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sessionType:sessionType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            from:message.sender_id|| '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            content:message.content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            contentType:message.content_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            businessType:message.businessType || 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            doctorCode:targetId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // let params = 'sessionId='+(message.session_id||'')+'&sessionType='+sessionType+"&from="+(message.sender_id|| '')+'&content='+message.content+'&businessType='+(message.business_type || 1)+'&doctorCode='+targetId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 医生助手有自己的模板消息,不需要通过im发送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // WlyyAssistantSDK.request('admin', '0a5c5258-8863-4b07-a3f9-88c768528ab4', '', 'admin_imei', '/doctor/feldsher/sendDoctorTemplate', param, function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //     // WlyySDK.request('admin', '0a5c5258-8863-4b07-a3f9-88c768528ab4', '', 'admin_imei', '/doctor/feldsher/sendDoctorTemplate?' + params, 'GET', function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //     if(err){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //         log.error(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //     }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //         log.info(res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (!userStatus) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.warn("User's app status is not found, user id: " + targetId + ", maybe user never login yet or logout?"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let tipMessage = CONTENT_TYPES.typeToDescription(parseInt(message.content_type), "您有一条新消息") || message.content; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let customData = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            session_id: message.session_id||'', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            session_type: sessionType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            from: message.sender_id|| '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            data: message.content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            business_type: message.business_type || 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (userStatus.platform == PLATFORMS.iOS) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            pusher.pushToSingleViaAPN(tipMessage, customData, message.content_type, userStatus.device_token,badge, function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    ModelUtil.logError("Send notification via APN failed:"+userStatus.device_token, err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    log.info("Send notification via APN succeed: ", JSON.stringify(res)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else if (userStatus.platform == PLATFORMS.Android) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            let title = '新消息'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            pusher.pushToSingleViaAndroid(title, tipMessage, customData, userStatus.client_id, userStatus.app_in_bg, function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    ModelUtil.logError("Send notification via Android failed", err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    log.info("Send notification via Android succeed: ", JSON.stringify(res)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let url = config.imClientType.url+"/hlwyy/ims-app-web/#/onlineChat/chatroom?rstitle="+message.sender_name+"%20专家咨询&type=1&sessionId="+message.session_id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let messageContent = tipMessage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        log.info("发送提醒消息给医生--START") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if("xmijk" == config.imClientType.id){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.info("发送提醒消息给医生--xmijk") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //区域互联网医院 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            DoctorRepo.findOne(targetId, function (err, res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                res.forEach(function (doctorObj) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    log.info("doctoridcar:"+doctorObj.idcard) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    let params = 'sessionId='+(message.session_id||'')+'&sessionType='+sessionType+"&from="+(message.sender_id|| '')+'&content='+encodeURIComponent(message.content)+'&businessType='+(message.business_type || 1)+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        '&doctor_idcard='+doctorObj.idcard+'&patientName='+encodeURIComponent(message.sender_name)+"&url="+url; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //医生助手有自己的模板消息,不需要通过im发送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    log.info("params"+params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    // WlyyAssistantSDK.request('admin', '0a5c5258-8863-4b07-a3f9-88c768528ab4', '', 'admin_imei', '/doctor/feldsher/sendDoctorTemplate', param, function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    WlyySDK.request('admin', '0a5c5258-8863-4b07-a3f9-88c768528ab4', '', 'admin_imei', '/im/common/message/sendDoctorTemplateByDoctorIdcard?' + params, 'GET', function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        if(err){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            log.error(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            log.info(res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else if("zsyy" == config.imClientType.id){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.info("发送提醒消息给医生--zsyy") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //中山医院 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //调用接口推送医生助手微信模板 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            let param = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sessionId:message.session_id||'', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sessionType:sessionType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                from:message.sender_id|| '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                content:message.content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                contentType:message.content_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                businessType:message.businessType || 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                doctorCode:targetId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            let params = 'enterpriseId=zsyy&doctor='+targetId+'&content='+encodeURIComponent(messageContent+'[查看详情]('+url+')'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(message.type ==1 && message.content.indexOf("relation") >0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                log.info("该消息是系统提醒消息,不做推送,:消息内容"+message.content) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                HlwyyAssistantSDK.request("zsyy",tipMessage,targetId,message.content,url,params, function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    // WlyyAssistantSDK.request('admin', '0a5c5258-8863-4b07-a3f9-88c768528ab4', '', 'admin_imei', '/doctor/feldsher/sendDoctorTemplate', param, function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    // WlyySDK.request('admin', '0a5c5258-8863-4b07-a3f9-88c768528ab4', '', 'admin_imei', '/doctor/feldsher/sendDoctorTemplate?' + params, 'GET', function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if(err){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        log.error(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        log.info(res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -192,31 +203,33 @@ class AppClient extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    message.business_type == MESSAGE_BUSSINESS_TYPE.D_CT_06|| 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    message.business_type == MESSAGE_BUSSINESS_TYPE.D_CT_07){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //是否发送消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    MessageNoticeSettingRepo.findOne(targetId,'1',function (err,res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        if(res&&res.length>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            let master_switch = res[0].master_switch; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            let im_switch = res[0].im_switch; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            let family_topic_switch = res[0].family_topic_switch; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            if(master_switch==0||im_switch==0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                ModelUtil.logError(targetId+"-关闭im消息,消息id", message.id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            // else if(session_type==SESSION_TYPES.MUC&&family_topic_switch==1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            //     SignFamilyRepo.isHealthDoctor(message.session_id,targetId,function (err,res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            //         if(res&&res.length==0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            //             ModelUtil.logError("全科医生:"+targetId+"-关闭im消息,消息id", message.id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            //         }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            //             AppClient.sendNotice(targetId, message, sessionType,badge,userStatus) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            //         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            //     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                AppClient.sendNotice(targetId, message, sessionType,badge,userStatus) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    // MessageNoticeSettingRepo.findOne(targetId,'1',function (err,res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //     if(res&&res.length>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //         let master_switch = res[0].master_switch; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //         let im_switch = res[0].im_switch; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //         let family_topic_switch = res[0].family_topic_switch; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //         if(master_switch==0||im_switch==0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //             ModelUtil.logError(targetId+"-关闭im消息,消息id", message.id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //         // else if(session_type==SESSION_TYPES.MUC&&family_topic_switch==1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //         //     SignFamilyRepo.isHealthDoctor(message.session_id,targetId,function (err,res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //         //         if(res&&res.length==0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //         //             ModelUtil.logError("全科医生:"+targetId+"-关闭im消息,消息id", message.id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //         //         }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //         //             AppClient.sendNotice(targetId, message, sessionType,badge,userStatus) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //         //         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //         //     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //         // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //         else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //             AppClient.sendNotice(targetId, message, sessionType,badge,userStatus) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    // }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    AppClient.sendNotice(targetId, message, sessionType,badge,userStatus) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                // else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //     AppClient.sendNotice(targetId, message, sessionType,badge,userStatus) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                // } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 |