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