| 
					
				 | 
			
			
				@ -4,21 +4,22 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				"use strict"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let RedisClient = require('../../repository/redis/redis.client.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let redisClient = RedisClient.redisClient(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let redis = redisClient.connection; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let RedisModel = require('./../redis.model.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let modelUtil = require('../../util/model.util'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let ModelUtil = require('../../util/model.util'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let Messages = require('../messages/messages'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let Participants = require('./Participants'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let log = require('../../util/log.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				const RedisKeys = require('../../include/commons').REDIS_KEYS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				const Commons = require('../../include/commons'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let configFile = require('../../include/commons').CONFIG_FILE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let config = require('../../resources/config/' + configFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let SessionRepo = require('../../repository/mysql/session.repo'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let ParticipantRepo = require('../../repository/mysql/participant.repo'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let configFile = require('../../include/commons').CONFIG_FILE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let config = require('../../resources/config/' + configFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let redis = RedisClient.redisClient().connection; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let log = require('../../util/log.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let mongoose = require('mongoose'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				const RedisKeys = require('../../include/commons').REDIS_KEYS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				const Commons = require('../../include/commons'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    constructor() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        super(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -45,13 +46,13 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                userArray.push(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(userArray.length>2){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                modelUtil.emitData(self.eventEmitter, {"status": -1, "msg": "会话人数超过2个无法创建P2P会话!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                ModelUtil.emitData(self.eventEmitter, {"status": -1, "msg": "会话人数超过2个无法创建P2P会话!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ParticipantRepo.findSessionIdByParticipantIds(userArray[0],userArray[0],function(err,res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sessionId = res; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                callcreate(sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            callcreate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -63,7 +64,7 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            // 将session加入redis 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            participants.saveParticipantsToRedis(sessionId, users, createDate, function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (!res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    modelUtil.emitData(self.eventEmitter, {"status": -1, "msg": res}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    ModelUtil.emitData(self.eventEmitter, {"status": -1, "msg": res}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    let messages = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    messages.senderId = "system"; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -72,7 +73,7 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    messages.content = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    messages.contentType = "1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    self.updateLastContent(session_key, type, name, messages); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    modelUtil.emitData(self.eventEmitter, {"status": 200, "msg": "session create success!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    ModelUtil.emitData(self.eventEmitter, {"status": 200, "msg": "session create success!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    self.saveSessionToMysql(sessionId, name, type, createDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    participants.saveParticipantsToMysql(sessionId, users); //创建session成员到数据库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -128,7 +129,7 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        redis.zrevrangeAsync(user_session_key, page, pagesize).then(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            let sessionlist = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (res.length == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                modelUtil.emitData(self.eventEmitter, {"status": 200, "data": res}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                ModelUtil.emitData(self.eventEmitter, {"status": 200, "data": res}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                for (var j in res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    calllist(res[j], j, res.length); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -189,11 +190,11 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            function callback(res, j, _len) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sessionlist.push(res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (j == (_len - 1)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    modelUtil.emitData(self.eventEmitter, {"status": 200, "data": sessionlist}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    ModelUtil.emitData(self.eventEmitter, {"status": 200, "data": sessionlist}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }).catch(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            modelUtil.emitData(self.eventEmitter, "get list error " + res + ",user:" + userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ModelUtil.emitData(self.eventEmitter, "get list error " + res + ",user:" + userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -212,12 +213,11 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let participants_key = super.makeRedisKey(RedisKeys.Participants, sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //超过最大限制后从mysql获取数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (page * pagesize >= config.sessionConfig.maxMessageCount) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            let message = new Messages(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            message.getMessageByPage(sessionId, page, pagesize, function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            self.getMessageFromMySQL(sessionId, page, pagesize, function (err, res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (!err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    modelUtil.emitData(self.eventEmitter, {"status": 200, "data": res}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    ModelUtil.emitData(self.eventEmitter, {"status": 200, "data": res}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    modelUtil.emitData(self.eventEmitter, {"status": -1, "data": err}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    ModelUtil.emitData(self.eventEmitter, {"status": -1, "data": err}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -228,19 +228,19 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            let participants = new Participants(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            participants.existsParticipant(sessionId, user, function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (!res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    modelUtil.emitData(self.eventEmitter, {"status": -1, "msg": "用户不在此会话中!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    ModelUtil.emitData(self.eventEmitter, {"status": -1, "msg": "用户不在此会话中!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //倒序取出最后N条消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    redis.zrevrangeAsync(message_timestamp_key, page, pagesize).then(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        //取出消息实体 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        if (res.length == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            modelUtil.emitData(self.eventEmitter, {"status": 200, "data": []}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            ModelUtil.emitData(self.eventEmitter, {"status": 200, "data": []}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        redis.hmgetAsync(message_key, res).then(function (messages) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            console.log(messages) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            //将取到的消息返回给前端 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            modelUtil.emitData(self.eventEmitter, {"status": 200, "data": messages}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            ModelUtil.emitData(self.eventEmitter, {"status": 200, "data": messages}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        }).then(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            //更新患者最后一次获取消息的日期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            redis.zaddAsync(participants_key, (new Date().getTime()), user).then(function (res) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -250,7 +250,7 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }).catch(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        modelUtil.emitData(self.eventEmitter, {"status": -1, "msg": res}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        ModelUtil.emitData(self.eventEmitter, {"status": -1, "msg": res}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -304,7 +304,7 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }).then(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //更新消息相关 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    return messages.saveMessageForRedis(message_id, sessionId, message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    return messages.saveMessageToRedis(message_id, sessionId, message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }).then(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //更新session的最后一条聊天记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    return self.updateLastContent(session_key, session_type, name, message); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -312,13 +312,13 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //操作mysql数据库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    messages.saveMessageToMysql(message, session_type, message_id, sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //返回数据给前端。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    modelUtil.emitData(self.eventEmitter, {"status": 200, "msg": "发送成功!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    ModelUtil.emitData(self.eventEmitter, {"status": 200, "msg": "发送成功!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //消息推送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }).catch(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    modelUtil.emitData(self.eventEmitter, {"status": -1, "msg": res}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    ModelUtil.emitData(self.eventEmitter, {"status": -1, "msg": res}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                modelUtil.emitData(self.eventEmitter, {"status": -1, "msg": "用户不在此会话当中!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                ModelUtil.emitData(self.eventEmitter, {"status": -1, "msg": "用户不在此会话当中!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -339,7 +339,7 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //初始化置顶 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    redis.zaddAsync(user_session_key, Commons.STICKY_SESSION_BASE_SCORE, sessionId).then(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        log.info("stickSession:" + sessionId + ",res:" + res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        modelUtil.emitData(self.eventEmitter, {"status": 200, "msg": "置顶成功!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        ModelUtil.emitData(self.eventEmitter, {"status": 200, "msg": "置顶成功!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }).then(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        SessionRepo.saveStickySession(sessionId, user, Commons.STICKY_SESSION_BASE_SCORE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -348,7 +348,7 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    scoreres = Number(scoreres) + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    redis.zaddAsync(user_session_key, scoreres, sessionId).then(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        log.info("stickSession:" + sessionId + ",res:" + res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        modelUtil.emitData(self.eventEmitter, {"status": 200, "msg": "置顶成功!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        ModelUtil.emitData(self.eventEmitter, {"status": 200, "msg": "置顶成功!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }).then(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        SessionRepo.saveStickySession(sessionId, user, scoreres); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -370,7 +370,7 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            redis.zaddAsync(user_session_key, res, sessionId).then(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                log.info("cancelStickSession:" + sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                modelUtil.emitData(self.eventEmitter, {"status": 200, "msg": "取消置顶成功!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                ModelUtil.emitData(self.eventEmitter, {"status": 200, "msg": "取消置顶成功!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }).then(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                SessionRepo.unstickSession(sessionId, user); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }); 
			 |