|  | @ -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);
 | 
	
		
			
				|  |  |             });
 |