|
@ -5,11 +5,17 @@
|
|
|
|
|
|
let RedisClient = require('../../repository/redis/redis.client.js');
|
|
let RedisClient = require('../../repository/redis/redis.client.js');
|
|
let redisClient = RedisClient.redisClient();
|
|
let redisClient = RedisClient.redisClient();
|
|
|
|
let redis = redisClient.connection;
|
|
let RedisModel = require('./../redis.model.js');
|
|
let RedisModel = require('./../redis.model.js');
|
|
let modelUtil = require('../../util/modelUtil');
|
|
|
|
|
|
let modelUtil = require('../../util/model.util');
|
|
let Participants = require("./participants");
|
|
let Participants = require("./participants");
|
|
let Sessions = require("./sessions");
|
|
let Sessions = require("./sessions");
|
|
const RedisKey = require('../../include/commons').RedisKey;
|
|
|
|
|
|
let log = require('../../util/log.js');
|
|
|
|
let TopicsRepo = require('../../repository/mysql/topics.repo');
|
|
|
|
let configFile = require('../../include/commons').CONFIG_FILE;
|
|
|
|
let config = require('../../resources/config/' + configFile);
|
|
|
|
const RedisKey = require('../../include/commons').REDIS_KEYS;
|
|
|
|
const UserStatus = require('../../include/commons').SESSION_USER_STATUS;
|
|
|
|
|
|
|
|
|
|
class Topics extends RedisModel {
|
|
class Topics extends RedisModel {
|
|
@ -17,59 +23,159 @@ class Topics extends RedisModel {
|
|
super();
|
|
super();
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
|
|
* 根据topicId获取对应的Topics
|
|
|
|
* @param topicId
|
|
|
|
*/
|
|
|
|
getTopicsById(topicId){
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 根据用户ID获取用户的Topics列表
|
|
|
|
* @param UserId
|
|
|
|
*/
|
|
|
|
getUserTopics(UserId){
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
* 根据topicId获取对应的消息
|
|
* 根据topicId获取对应的消息
|
|
* @param topicId
|
|
* @param topicId
|
|
*/
|
|
*/
|
|
getTopicMessages(topicId){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
getTopicMessages(topicId,page,pagesize) {
|
|
|
|
let self = this;
|
|
|
|
let topic_key = super.makeRedisKey(RedisKey.Topic, topicId);
|
|
|
|
let _super = super.makeRedisKey;
|
|
|
|
redis.hgetallAsync(topic_key).then(function (topic) {
|
|
|
|
let message_time_key = _super(RedisKey.MessagesByTimestamp, topic.session_id);
|
|
|
|
let message_key = _super(RedisKey.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();
|
|
|
|
}
|
|
|
|
redis.zrevrangebyscoreAsync(message_time_key,end_time,create_time).then(function (messages) {
|
|
|
|
//取出消息实例
|
|
|
|
redis.hmgetAsync(message_key,messages).then(function(res){
|
|
|
|
modelUtil.emitData(self.eventEmitter,res);
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
*
|
|
*
|
|
* @param topicName 发起议题的名称
|
|
* @param topicName 发起议题的名称
|
|
* @param patient 发起议题的患者
|
|
* @param patient 发起议题的患者
|
|
* @param doctor 参与的医生
|
|
* @param doctor 参与的医生
|
|
* @param messages 发送的消息对象{quesion:"",img:""}图片多个用逗号隔开
|
|
|
|
|
|
* @param messages 发送的消息对象{description:"",title:"",img:"",patient:"",patientName:""}图片多个用逗号隔开
|
|
*/
|
|
*/
|
|
createTopics(topicName,patient,healthDoctor,doctor,messages){
|
|
|
|
|
|
createTopics(topicName,topicId,patient,healthDoctor,doctor,messages){
|
|
let self = this;
|
|
let self = this;
|
|
let participants = new Participants();
|
|
|
|
|
|
//MUC模式中sessionID就是患者ID
|
|
|
|
let topics_key = super.makeRedisKey(RedisKey.Topics,patient);
|
|
|
|
let topic_key = super.makeRedisKey(RedisKey.Topic,topicId);
|
|
let sessions = new Sessions();
|
|
let sessions = new Sessions();
|
|
|
|
let participants = new Participants();
|
|
//从数据库中获取sessionId
|
|
//从数据库中获取sessionId
|
|
participants.getSessionIdByParticipants(patient,healthDoctor,function(err,res){
|
|
|
|
if (err) {
|
|
|
|
modelUtil.emitDbError(self.eventEmitter, "Get group member's avatar list failed", err);
|
|
|
|
return;
|
|
|
|
|
|
let date = new Date();
|
|
|
|
redis.zaddAsync(topics_key, date.getTime(), topicId).then(function(res){
|
|
|
|
redis.hmsetAsync(topic_key,"name",topicName,"end_by","","session_id",patient,"create_time",date.getTime(),"end_time","","description",messages.description).then(function(res){
|
|
|
|
sessions.getSessions(patient,function(err,res){
|
|
|
|
//已经存在对应的会话更新全科为旁听
|
|
|
|
if(res&&res.length>0){
|
|
|
|
participants.updateUser(patient,doctor,UserStatus.OTHER);
|
|
|
|
callbegin();
|
|
|
|
}else{//不存在创建SESSION
|
|
|
|
var users={};
|
|
|
|
users[patient]=UserStatus.ONLINE;
|
|
|
|
users[healthDoctor]=UserStatus.ONLINE;
|
|
|
|
users[doctor]=UserStatus.OTHER;
|
|
|
|
sessions.createSession(patient,messages.patientName,config.sessionConfig.MUC,JSON.stringify(users),function(res){
|
|
|
|
if(res){
|
|
|
|
callbegin();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
/**
|
|
|
|
* 开始消息发送
|
|
|
|
*/
|
|
|
|
function callbegin(){
|
|
|
|
let msg ={};
|
|
|
|
msg.senderId = messages.patient;
|
|
|
|
msg.senderName = messages.patientName;
|
|
|
|
msg.contentType = 6;
|
|
|
|
msg.content ="开始咨询"
|
|
|
|
msg.timestamp=date;
|
|
|
|
sessions.saveMessageByTopic(msg,patient,function(err,msgId){
|
|
|
|
if(err){
|
|
|
|
modelUtil.emitData(self.eventEmitter,err);
|
|
|
|
}else{
|
|
|
|
self.saveTopicsToSql(topicName,topicId,patient,msgId,date);
|
|
|
|
callBeginMsg();
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 发送求助内容
|
|
|
|
*/
|
|
|
|
function callBeginMsg(){
|
|
|
|
let msg ={};
|
|
|
|
msg.senderId = messages.patient;
|
|
|
|
msg.senderName = messages.patientName;
|
|
|
|
msg.contentType = 1;
|
|
|
|
msg.content =messages.description;
|
|
|
|
msg.timestamp = new Date();
|
|
|
|
sessions.saveMessageByTopic(msg,patient,function(err,msgId){
|
|
|
|
log.info("begin send"+messages.description);
|
|
|
|
})
|
|
|
|
if(messages.img){
|
|
|
|
let imgs = messages.img.split(",");
|
|
|
|
for(var j in imgs){
|
|
|
|
let msgimg ={};
|
|
|
|
msgimg.senderId = messages.patient;
|
|
|
|
msgimg.senderName = messages.patientName;
|
|
|
|
msgimg.contentType =2;
|
|
|
|
msgimg.content =imgs[j];
|
|
|
|
msgimg.timestamp = new Date();
|
|
|
|
sessions.saveMessageByTopic(msgimg,patient,function(err,msgId){
|
|
|
|
log.info("begin send"+imgs[j]);
|
|
|
|
})
|
|
|
|
}
|
|
}
|
|
}
|
|
//如果存在的情况直接返回
|
|
|
|
if(res){
|
|
|
|
return res;
|
|
|
|
}else{
|
|
|
|
//不存在则去创建一个session
|
|
|
|
|
|
modelUtil.emitData(self.eventEmitter,"创建成功!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
saveTopicsToSql(topicName,topicId,sessionId,messageId,date){
|
|
|
|
TopicsRepo.saveTopic(topicName,topicId,sessionId,messageId,date);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 结束议题
|
|
|
|
* @param topicId
|
|
|
|
* @param endUser
|
|
|
|
*/
|
|
|
|
endTopic(topicId,endUser,endUserName){
|
|
|
|
let endDate = new Date();
|
|
|
|
let self = this;
|
|
|
|
let topic_key = super.makeRedisKey(RedisKey.Topic,topicId);
|
|
|
|
redis.hmsetAsync(topic_key,"end_time",endDate.getTime(),"end_by",endUser).then(function (res) {
|
|
|
|
redis.hgetallAsync(topic_key).then(function(topic){
|
|
|
|
callEnd(topic.session_id);
|
|
|
|
})
|
|
})
|
|
})
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 结束消息发送
|
|
|
|
*/
|
|
|
|
function callEnd(sessionId){
|
|
|
|
let msg ={};
|
|
|
|
msg.senderId = endUser;
|
|
|
|
msg.senderName = endUserName;
|
|
|
|
msg.contentType = 7;
|
|
|
|
msg.content =endUserName+"结束了咨询"
|
|
|
|
msg.timestamp = new Date();
|
|
|
|
let sessions = new Sessions();
|
|
|
|
sessions.saveMessageByTopic(msg,sessionId,function(err,msgId){
|
|
|
|
if(err){
|
|
|
|
modelUtil.emitData(self.eventEmitter,err);
|
|
|
|
}else{
|
|
|
|
modelUtil.emitData(self.eventEmitter,"结束成功!");
|
|
|
|
TopicsRepo.endTopic(topicId,endUser,msg.date,msgId);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|