|  | @ -27,26 +27,22 @@ class Topics extends RedisModel {
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 根据topicId获取对应的消息
 | 
	
		
			
				|  |  |      * @param topicId
 | 
	
		
			
				|  |  |      * @param page
 | 
	
		
			
				|  |  |      * @param size
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     getTopicMessages(topicId) {
 | 
	
		
			
				|  |  |         let self = this;
 | 
	
		
			
				|  |  |         let topic_key = RedisModel.makeRedisKey(REDIS_KEYS.Topic, topicId);
 | 
	
		
			
				|  |  |         let _super = RedisModel.makeRedisKey;
 | 
	
		
			
				|  |  |         redis.hgetallAsync(topic_key).then(function (topic) {
 | 
	
		
			
				|  |  |             let message_time_key = _super(REDIS_KEYS.MessagesByTimestamp, topic.session_id);
 | 
	
		
			
				|  |  |             let message_key = _super(REDIS_KEYS.Messages, topic.session_id);
 | 
	
		
			
				|  |  |         let topicKey = RedisModel.makeRedisKey(REDIS_KEYS.Topic, topicId);
 | 
	
		
			
				|  |  |         redis.hgetallAsync(topicKey).then(function (topic) {
 | 
	
		
			
				|  |  |             let message_time_key = RedisModel.makeRedisKey(REDIS_KEYS.MessagesByTimestamp, topic.session_id);
 | 
	
		
			
				|  |  |             let message_key = RedisModel.makeRedisKey(REDIS_KEYS.Messages, topic.session_id);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //倒序取出所有的消息ID
 | 
	
		
			
				|  |  |             let create_time = topic.create_time;
 | 
	
		
			
				|  |  |             let end_time = topic.end_time;
 | 
	
		
			
				|  |  |             if (!end_time) {
 | 
	
		
			
				|  |  |                 end_time = new Date().getTime();
 | 
	
		
			
				|  |  |             let createTime = topic.create_time;
 | 
	
		
			
				|  |  |             let endTime = topic.end_time;
 | 
	
		
			
				|  |  |             if (!endTime) {
 | 
	
		
			
				|  |  |                 endTime = new Date().getTime();
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             redis.zrevrangebyscoreAsync(message_time_key, end_time, create_time).then(function (messages) {
 | 
	
		
			
				|  |  |                 //取出消息实例
 | 
	
		
			
				|  |  |             redis.zrevrangebyscoreAsync(message_time_key, endTime, createTime).then(function (messages) {
 | 
	
		
			
				|  |  |                 redis.hmgetAsync(message_key, messages).then(function (res) {
 | 
	
		
			
				|  |  |                     ModelUtil.emitOK(self.eventEmitter, res);
 | 
	
		
			
				|  |  |                 });
 | 
	
	
		
			
				|  | @ -55,49 +51,59 @@ class Topics extends RedisModel {
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 创建议题。
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param topicName 发起议题的名称
 | 
	
		
			
				|  |  |      * @param topicId
 | 
	
		
			
				|  |  |      * @param users 发起议题的患者{"userId1:role", "userId2:role"}
 | 
	
		
			
				|  |  |      * @param messages 发送的消息对象{description:"",title:"",img:"",senderId:"",senderName:""}图片多个用逗号隔开
 | 
	
		
			
				|  |  |      * @param sessionId
 | 
	
		
			
				|  |  |      * @param users 发起议题的患者,格式:{"userId1:role", "userId2:role"}
 | 
	
		
			
				|  |  |      * @param messages 发送的消息对象,格式:{description:"",title:"",img:"image1,image2",senderId:"",senderName:""},多个图片用逗号隔开
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     createTopics(topicName, topicId,sessionId,users, messages) {
 | 
	
		
			
				|  |  |     createTopic(topicName, topicId, sessionId, users, messages) {
 | 
	
		
			
				|  |  |         let self = this;
 | 
	
		
			
				|  |  |         
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //MUC模式中sessionID就是患者ID
 | 
	
		
			
				|  |  |         let topics_key = RedisModel.makeRedisKey(REDIS_KEYS.Topics, sessionId);
 | 
	
		
			
				|  |  |         let topic_key = RedisModel.makeRedisKey(REDIS_KEYS.Topic, topicId);
 | 
	
		
			
				|  |  |         let sessions = new Sessions();
 | 
	
		
			
				|  |  |         let participants = new Participants();
 | 
	
		
			
				|  |  |         
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //从数据库中获取sessionId
 | 
	
		
			
				|  |  |         let date = new Date();
 | 
	
		
			
				|  |  |         var pars=[];
 | 
	
		
			
				|  |  |         var pars = [];
 | 
	
		
			
				|  |  |         redis.zaddAsync(topics_key, date.getTime(), topicId).then(function (res) {
 | 
	
		
			
				|  |  |             redis.hmsetAsync(topic_key, "name", topicName, "end_by", "", "session_id", sessionId, "create_time", date.getTime(), "end_time", "", "description", messages.description, "status", TOPIC_STATUS.NEW).then(function (res) {
 | 
	
		
			
				|  |  |                 sessions.getSessions(sessionId, function (err, res) {
 | 
	
		
			
				|  |  |                     //已经存在对应的会话更新全科为旁听
 | 
	
		
			
				|  |  |                     if (res && res.length > 0) {
 | 
	
		
			
				|  |  |                         for(var j in users){
 | 
	
		
			
				|  |  |                            participants.updateUser(sessionId, j, users[j]);
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         callbegin();
 | 
	
		
			
				|  |  |                     } else {//不存在创建SESSION
 | 
	
		
			
				|  |  |                         for(var j in users){
 | 
	
		
			
				|  |  |                             pars.push(j+":"+users[j]);
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         sessions.createSession(sessionId, messages.senderName, SESSION_TYPES.MUC, pars, function (res) {
 | 
	
		
			
				|  |  |                             if (res) {
 | 
	
		
			
				|  |  |                                 callbegin();
 | 
	
		
			
				|  |  |             redis.hmsetAsync(topic_key,
 | 
	
		
			
				|  |  |                 "name", topicName,
 | 
	
		
			
				|  |  |                 "end_by", "",
 | 
	
		
			
				|  |  |                 "session_id", sessionId,
 | 
	
		
			
				|  |  |                 "create_time", date.getTime(),
 | 
	
		
			
				|  |  |                 "end_time", "",
 | 
	
		
			
				|  |  |                 "description", messages.description,
 | 
	
		
			
				|  |  |                 "status", TOPIC_STATUS.NEW)
 | 
	
		
			
				|  |  |                 .then(function (res) {
 | 
	
		
			
				|  |  |                     sessions.getSessions(sessionId, function (err, res) {
 | 
	
		
			
				|  |  |                         // 已经存在对应的会话更新全科为旁听
 | 
	
		
			
				|  |  |                         if (res && res.length > 0) {
 | 
	
		
			
				|  |  |                             for (var j in users) {
 | 
	
		
			
				|  |  |                                 participants.updateUser(sessionId, j, users[j]);
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                         });
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                             callbegin();
 | 
	
		
			
				|  |  |                         } else {
 | 
	
		
			
				|  |  |                             // 不存在创建SESSION
 | 
	
		
			
				|  |  |                             for (var j in users) {
 | 
	
		
			
				|  |  |                                 pars.push(j + ":" + users[j]);
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                             sessions.createSession(sessionId, messages.senderName, SESSION_TYPES.MUC, pars, function (res) {
 | 
	
		
			
				|  |  |                                 if (res) {
 | 
	
		
			
				|  |  |                                     callbegin();
 | 
	
		
			
				|  |  |                                 }
 | 
	
		
			
				|  |  |                             });
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                     })
 | 
	
		
			
				|  |  |                 })
 | 
	
		
			
				|  |  |             })
 | 
	
		
			
				|  |  |         }).catch(function(e){
 | 
	
		
			
				|  |  |             log.info("line 7")
 | 
	
		
			
				|  |  |         });
 | 
	
		
			
				|  |  |         
 | 
	
		
			
				|  |  |         }).catch();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         /**
 | 
	
		
			
				|  |  |          * 开始消息发送
 | 
	
		
			
				|  |  |          */
 | 
	
	
		
			
				|  | @ -112,7 +118,7 @@ class Topics extends RedisModel {
 | 
	
		
			
				|  |  |                 if (err) {
 | 
	
		
			
				|  |  |                     ModelUtil.emitOK(self.eventEmitter, err);
 | 
	
		
			
				|  |  |                 } else {
 | 
	
		
			
				|  |  |                     self.saveTopicsToSql(topicName, topicId, sessionId, msgId, date,messages.description,TOPIC_STATUS.NEW);
 | 
	
		
			
				|  |  |                     self.saveTopicToMySQL(topicName, topicId, sessionId, msgId, date, messages.description, TOPIC_STATUS.NEW);
 | 
	
		
			
				|  |  |                     callBeginMsg(msgId);
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             })
 | 
	
	
		
			
				|  | @ -128,10 +134,10 @@ class Topics extends RedisModel {
 | 
	
		
			
				|  |  |             msg.content_type = 1;
 | 
	
		
			
				|  |  |             msg.content = messages.description;
 | 
	
		
			
				|  |  |             msg.timestamp = new Date();
 | 
	
		
			
				|  |  |             sessions.saveMessageByTopic(msg,  sessionId, function (err, msgId) {
 | 
	
		
			
				|  |  |             sessions.saveMessageByTopic(msg, sessionId, function (err, msgId) {
 | 
	
		
			
				|  |  |                 log.info("begin send" + messages.description);
 | 
	
		
			
				|  |  |             });
 | 
	
		
			
				|  |  |             
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             if (messages.img) {
 | 
	
		
			
				|  |  |                 let imgs = messages.img.split(",");
 | 
	
		
			
				|  |  |                 for (var j in imgs) {
 | 
	
	
		
			
				|  | @ -146,62 +152,94 @@ class Topics extends RedisModel {
 | 
	
		
			
				|  |  |                     })
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             ModelUtil.emitOK(self.eventEmitter, {"id":startMsgId});
 | 
	
		
			
				|  |  |             ModelUtil.emitOK(self.eventEmitter, {"id": startMsgId});
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     saveTopicsToSql(topicName, topicId, sessionId, messageId, date,description) {
 | 
	
		
			
				|  |  |         TopicsRepo.saveTopic(topicName, topicId, sessionId, messageId, date,description);
 | 
	
		
			
				|  |  |     saveTopicToMySQL(topicName, topicId, sessionId, messageId, date, description) {
 | 
	
		
			
				|  |  |         TopicsRepo.saveTopic(topicName, topicId, sessionId, messageId, date, description);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 议题是否已结束。
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param sessionId
 | 
	
		
			
				|  |  |      * @param topicId
 | 
	
		
			
				|  |  |      * @param handler
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     isTopicEnded(sessionId, topicId, handler) {
 | 
	
		
			
				|  |  |         let self = this;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         if (topicId === "current") {
 | 
	
		
			
				|  |  |             TopicsRepo.findLastTopicStatus(sessionId, callback);
 | 
	
		
			
				|  |  |         } else {
 | 
	
		
			
				|  |  |             TopicsRepo.findTopicStatus(topicId, callback);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         function callback(err, res) {
 | 
	
		
			
				|  |  |             if (err) {
 | 
	
		
			
				|  |  |                 handler != null ? handler(err, res) : ModelUtil.emitError(self.eventEmitter, err);
 | 
	
		
			
				|  |  |             } else {
 | 
	
		
			
				|  |  |                 if (null == res) {
 | 
	
		
			
				|  |  |                     handler != null ? handler(err, res) : ModelUtil.emitDataNotFound(self.eventEmitter, "Topic not found.");
 | 
	
		
			
				|  |  |                 } else {
 | 
	
		
			
				|  |  |                     let ended = res[0].status == TOPIC_STATUS.ENDED;
 | 
	
		
			
				|  |  |                     handler != null ? handler(err, res) : ModelUtil.emitOK(self.eventEmitter, ended);
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 结束议题
 | 
	
		
			
				|  |  |      * @param topicId
 | 
	
		
			
				|  |  |      * @param endUser
 | 
	
		
			
				|  |  |      * @param endUserName
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     endTopic(topicId, endUser, endUserName) {
 | 
	
		
			
				|  |  |         let endDate = new Date();
 | 
	
		
			
				|  |  |         let self = this;
 | 
	
		
			
				|  |  |         let topic_key = RedisModel.makeRedisKey(REDIS_KEYS.Topic, topicId);
 | 
	
		
			
				|  |  |         redis.hmsetAsync(topic_key, "end_time", endDate.getTime(), "end_by", endUser,"status",TOPIC_STATUS.FINISHED).then(function (res) {
 | 
	
		
			
				|  |  |         redis.hmsetAsync(topic_key, "end_time", endDate.getTime(), "end_by", endUser, "status", TOPIC_STATUS.ENDED).then(function (res) {
 | 
	
		
			
				|  |  |             redis.hgetallAsync(topic_key).then(function (topic) {
 | 
	
		
			
				|  |  |                 callEnd(topic.session_id);
 | 
	
		
			
				|  |  |             })
 | 
	
		
			
				|  |  |         });
 | 
	
		
			
				|  |  |         
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         /**
 | 
	
		
			
				|  |  |          * 结束消息发送
 | 
	
		
			
				|  |  |          */
 | 
	
		
			
				|  |  |         function callEnd(sessionId) {
 | 
	
		
			
				|  |  |             let msg = {};
 | 
	
		
			
				|  |  |             msg.sender_id = endUser;
 | 
	
		
			
				|  |  |             msg.sender_name = endUserName;
 | 
	
		
			
				|  |  |             msg.content_type = 7;
 | 
	
		
			
				|  |  |             msg.content = endUserName + "结束了咨询"
 | 
	
		
			
				|  |  |             msg.timestamp = new Date();
 | 
	
		
			
				|  |  |             let msg = {
 | 
	
		
			
				|  |  |                 sender_id: endUser,
 | 
	
		
			
				|  |  |                 sender_name: endUserName,
 | 
	
		
			
				|  |  |                 content_type: 7,
 | 
	
		
			
				|  |  |                 content: endUserName + "结束了咨询",
 | 
	
		
			
				|  |  |                 timestamp: new Date()
 | 
	
		
			
				|  |  |             };
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             let sessions = new Sessions();
 | 
	
		
			
				|  |  |             sessions.saveMessageByTopic(msg, sessionId, function (err, msgId) {
 | 
	
		
			
				|  |  |                 if (err) {
 | 
	
		
			
				|  |  |                     ModelUtil.emitOK(self.eventEmitter, err);
 | 
	
		
			
				|  |  |                 } else {
 | 
	
		
			
				|  |  |                     ModelUtil.emitOK(self.eventEmitter,  {"id":msgId});
 | 
	
		
			
				|  |  |                     ModelUtil.emitOK(self.eventEmitter, {"id": msgId});
 | 
	
		
			
				|  |  |                     TopicsRepo.endTopic(topicId, endUser, msg.date, msgId);
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             })
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     updateTopic(topicId,valueJson){
 | 
	
		
			
				|  |  |         let self = this;
 | 
	
		
			
				|  |  |         let topic_key = RedisModel.makeRedisKey(REDIS_KEYS.Topic, topicId);
 | 
	
		
			
				|  |  |     updateTopic(topicId, valueJson) {
 | 
	
		
			
				|  |  |         let topickey = RedisModel.makeRedisKey(REDIS_KEYS.Topic, topicId);
 | 
	
		
			
				|  |  |         var dataArray = [];
 | 
	
		
			
				|  |  |         for(var j in valueJson){
 | 
	
		
			
				|  |  |         for (var j in valueJson) {
 | 
	
		
			
				|  |  |             dataArray.push(j);
 | 
	
		
			
				|  |  |             dataArray.push(valueJson[j]);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         redis.hmsetAsync(topic_key, dataArray).then(function (res) {
 | 
	
		
			
				|  |  |             TopicsRepo.updateTopis(topicId,valueJson);
 | 
	
		
			
				|  |  |         redis.hmsetAsync(topickey, dataArray).then(function (res) {
 | 
	
		
			
				|  |  |         });
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         TopicsRepo.updateTopics(topicId, valueJson);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | }
 | 
	
		
			
				|  |  | 
 |