| 
					
				 | 
			
			
				@ -121,8 +121,12 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (!sessionId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                handler("MUC OR GROUP session sessionId is not  allow null .", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if(type == SESSION_TYPES.DISCUSSION){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    sessionId = messageId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    handler("MUC OR GROUP session sessionId is not  allow null .", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            callBusinessType(sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -188,6 +192,9 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    sessionId = res; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    callBusinessType(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else if(type == SESSION_TYPES.DISCUSSION){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sessionId = messageId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                callBusinessType(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return handler("MUC模式和团队模式,不允许sessionId为空!", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -197,9 +204,9 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //流程2-判断session的业务类型; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        function callBusinessType() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(type==SESSION_TYPES.MUC||type==SESSION_TYPES.PRESCRIPTION || type==SESSION_TYPES.ONDOOR_NURSING){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(type==SESSION_TYPES.MUC||type==SESSION_TYPES.PRESCRIPTION || SESSION_TYPES.PRESCRIPTION_HOSPITAL || SESSION_TYPES.ONDOOR_NURSING){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                callCreateSession(SESSION_BUSINESS_TYPE.PATIENT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }else if(type==SESSION_TYPES.SPECIALISTGROUP){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }else if(type==SESSION_TYPES.SPECIALISTGROUP||type==SESSION_TYPES.DISCUSSION){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                callCreateSession(SESSION_BUSINESS_TYPE.DOCTOR); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                ParticipantRepo.getBusinessType(participantIdArray, function (err, businessType) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -1141,7 +1148,10 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        participants.existsParticipant(sessionId, userId, function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (! res[0].exist || userId != "system") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.info("1151-userId=" + userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.info(" res[0].exist=" + res[0].exist); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.info(!res[0].exist && userId != "system"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (! res[0].exist && userId != "system") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                handler(Error("User not found in session " + sessionId), null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //将消息ID转换成分值 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -1420,6 +1430,7 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let sessionKey = RedisModel.makeRedisKey(REDIS_KEYS.Session, sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let messageId = mongoose.Types.ObjectId().toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let sessionType =0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let sessionName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        message.id = messageId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 检查会话中是否存在此成员 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -1428,14 +1439,56 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                ModelUtil.emitError(self.eventEmitter, "Check session participant failed: ", err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            logger.info("session.js--1285--res[0].exist" + res[0].exist); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            logger.info("session.js--1443--res[0].exist" + res[0].exist); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.info("message.sender_id=" + message.sender_id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if ( res[0].exist || message.sender_id == "system") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                redis.hmgetAsync(sessionKey, ["type", "name"]).then(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    sessionType = res[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    let sessionName = res[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if (sessionType == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        ModelUtil.emitError(self.eventEmitter, "Session " + sessionId + " is not found."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        self.getSessions(sessionId,function(err,res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            if (err){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                logger.error("session data is error"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                sessionName=res[0].name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                sessionType = res[0].type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        let participantArray = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        let participantsStr="{"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        ParticipantRepo.findAll(sessionId, function (err, participants) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                ModelUtil.emitError(self.eventEmitter, err.message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            participants.forEach(function (participant) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                let participantId = participant.id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                let participantRole = participant.role; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                let score = ObjectUtil.timestampToLong(participant.last_fetch_time||(new Date())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                participantsStr +="\""+participantId+"\":\""+participantRole+"\","; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            participantsStr = participantsStr.substring(0,participantsStr.length-1)+'}'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            participantsStr = JSON.parse(participantsStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            for (let j in participantsStr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                participantArray.push(j + ":" + participantsStr[j]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            //创建session到redis 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            self.createSessionToRedis(sessionId, sessionName, sessionType, participantArray, messageId, function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                if (err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    if (handler) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        handler(err, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    ModelUtil.emitError(self.eventEmitter, {message: err, status: -1}, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    if (handler) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                        handler(null, res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    ModelUtil.emitOK(self.eventEmitter, {status: 200, data: res}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if(sessionType == SESSION_TYPES.MUC || sessionType == SESSION_TYPES.PRESCRIPTION || SESSION_TYPES.PRESCRIPTION_HOSPITAL || SESSION_TYPES.ONDOOR_NURSING){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        if(message.content_type == CONTENT_TYPES.PlainText || 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -1455,6 +1508,7 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    // 消息保存到Redis,并更新会话最后状态、用户最后消息获取时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    messages.saveMessageToRedis(sessionId, sessionType, messageId, message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    Messages.updateLastContent(sessionKey, sessionType, sessionName, message); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -1501,6 +1555,7 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    sendTopicMessages(topicId, message) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let self = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        TopicRepo.findAllByTopicId(topicId, function (err, res) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -1541,6 +1596,8 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 发送成员必须处于会话中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        participants.existsParticipant(sessionId, message.sender_id, function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.info("1599-message.sender_id=" + message.sender_id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.info("res[0].exist=" + res[0].exist); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if ( res[0].exist || message.sender_id == "system") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                redis.hmgetAsync(session_key, ["type", "name"]).then(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    sessionType = res[0]; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -1621,6 +1678,7 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 发送成员必须处于会话中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        participants.existsParticipant(sessionId, message.sender_id, function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.info("session.js--1477--res[0].exist" + res[0].exist); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.info("message.sender_id=" + message.sender_id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (res[0].exist || message.sender_id == "system") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                redis.hmgetAsync(session_key, ["type", "name"]).then(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    sessionType = res[0]; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -1782,20 +1840,46 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //告知医生新消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                WechatClient.sendSocketMessageToDoctor(targetUserId,message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                WlyySDK.request(targetUserId, '', '', '', '/im/common/message/messages', 'POST', function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    let count = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    res =  JSON.parse(res) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if (res.status == 200) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        let data = res.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        count = parseInt(JSON.parse(data.imMsgCount).count) + parseInt(data.system.amount) + parseInt(data.healthIndex.amount) + parseInt(data.sign.amount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                let count = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //系统消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                MessageRepo.getWlyyMessageCount(targetUserId,function (err,res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        count = res[0].count; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if(config.environment!='local'){//pc版不推送个推,通过redis的publish 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        AppClient.sendNotification(targetUserId, message,sessionType,count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //im消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                let sessions = new Sessions(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sessions.getAllSessionsUnreadMessageCount(targetUserId,function (err,res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        count += res; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //外网pcim通过socket推送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    WechatClient.sendPcImSocket(targetUserId,message,sessionType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if(config.environment!='local'){//pc版不推送个推,通过redis的publish 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    AppClient.sendNotification(targetUserId, message,sessionType,count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //外网pcim通过socket推送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                WechatClient.sendPcImSocket(targetUserId,message,sessionType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                // WlyySDK.request(targetUserId, '', '', '', '/im/common/message/messages', 'POST', function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //     let count = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //     if(err){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //         logger.error(err); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //     }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //         logger.error(res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //         res =  JSON.parse(res) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //         if (res.status == 200) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //             let data = res.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //             count = parseInt(JSON.parse(data.imMsgCount).count) + parseInt(data.system.amount) + parseInt(data.healthIndex.amount) + parseInt(data.sign.amount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //     if(config.environment!='local'){//pc版不推送个推,通过redis的publish 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //         AppClient.sendNotification(targetUserId, message,sessionType,count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //     //外网pcim通过socket推送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //     WechatClient.sendPcImSocket(targetUserId,message,sessionType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                // }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                message.targetUserId = targetUserId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                message.targetUserName = targetUserName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                message.sessionType = sessionType; 
			 |