|
@ -25,68 +25,69 @@ class Topics extends RedisModel {
|
|
|
super();
|
|
|
}
|
|
|
|
|
|
getTopics(user,status,page,pagesize,sessionType){
|
|
|
getTopics(user, status, page, pagesize, sessionType) {
|
|
|
let self = this;
|
|
|
let session = new Sessions();
|
|
|
page = (page - 1 < 0 ? 0 : page - 1) * pagesize;
|
|
|
if(!pagesize)pagesize =10;
|
|
|
if (!pagesize) pagesize = 10;
|
|
|
pagesize = parseInt(pagesize);
|
|
|
if(!sessionType) sessionType = SESSION_TYPES.MUC;
|
|
|
SessionRepo.findAllByType(user,sessionType,function(err,res){
|
|
|
if(err){
|
|
|
ModelUtil.emitError(self.eventEmitter, "获取列表失败"+err);
|
|
|
}else if(res&&res.length==0){
|
|
|
if (!sessionType) sessionType = SESSION_TYPES.MUC;
|
|
|
SessionRepo.findAllByType(user, sessionType, function (err, res) {
|
|
|
if (err) {
|
|
|
ModelUtil.emitError(self.eventEmitter, "获取列表失败" + err);
|
|
|
} else if (res && res.length == 0) {
|
|
|
ModelUtil.emitOK(self.eventEmitter, []);
|
|
|
}
|
|
|
var sessionIds=[];
|
|
|
for(var j in res){
|
|
|
var sessionIds = [];
|
|
|
for (var j in res) {
|
|
|
sessionIds.push(res[j].id);
|
|
|
}
|
|
|
TopicsRepo.findAllBySessionIdsAndStatus(sessionIds,status,page,pagesize,function(err,res){
|
|
|
if(err){
|
|
|
ModelUtil.emitError(self.eventEmitter, "获取列表失败"+err);
|
|
|
TopicsRepo.findAllBySessionIdsAndStatus(sessionIds, status, page, pagesize, function (err, res) {
|
|
|
if (err) {
|
|
|
ModelUtil.emitError(self.eventEmitter, "获取列表失败" + err);
|
|
|
}
|
|
|
else if(res&&res.length==0){
|
|
|
else if (res && res.length == 0) {
|
|
|
ModelUtil.emitOK(self.eventEmitter, []);
|
|
|
|
|
|
}else{
|
|
|
for(var j = 0;j<res.length;j++){
|
|
|
callAmount(j,res,res[j]);
|
|
|
} else {
|
|
|
for (var j = 0; j < res.length; j++) {
|
|
|
callAmount(j, res, res[j]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function callAmount(i,res,r){
|
|
|
session.getSessionUnreadMessageCount(res[i].session_id,user,function(err,msgcount){
|
|
|
if(err){
|
|
|
log.error("getSessionUnreadMessageCount is error:"+err);
|
|
|
ModelUtil.emitError(self.eventEmitter, "获取未读消息失败!"+err);
|
|
|
}else{
|
|
|
callGetImg(i,res,r,msgcount);
|
|
|
function callAmount(i, res, r) {
|
|
|
session.getSessionUnreadMessageCount(res[i].session_id, user, function (err, msgcount) {
|
|
|
if (err) {
|
|
|
log.error("getSessionUnreadMessageCount is error:" + err);
|
|
|
ModelUtil.emitError(self.eventEmitter, "获取未读消息失败!" + err);
|
|
|
} else {
|
|
|
callGetImg(i, res, r, msgcount);
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
|
|
|
var result =[];
|
|
|
function callGetImg(i,res,r,msgcount){
|
|
|
ParticipantRepo.findAll(res[i].session_id,function(err,p){
|
|
|
if(err){
|
|
|
log.error("获取头像失败:"+err);
|
|
|
}else{
|
|
|
r.create_time = r.create_time.getTime();
|
|
|
for(var j in p){
|
|
|
if(p[j].is_patient){
|
|
|
var result = [];
|
|
|
|
|
|
function callGetImg(i, res, r, msgcount) {
|
|
|
ParticipantRepo.findAll(res[i].session_id, function (err, p) {
|
|
|
if (err) {
|
|
|
log.error("获取头像失败:" + err);
|
|
|
} else {
|
|
|
r.create_time = r.create_time.getTime();
|
|
|
for (var j in p) {
|
|
|
if (p[j].is_patient) {
|
|
|
r.avatar = p[j].avatar;
|
|
|
r.patient = p[j].id;
|
|
|
r.patient_name = p[j].name;
|
|
|
r.sex = p[j].sex;
|
|
|
r.birthdate = p[j].birthdate.getTime();
|
|
|
if(r.status!=TOPIC_STATUS.ENDED){
|
|
|
if (r.status != TOPIC_STATUS.ENDED) {
|
|
|
r.msg_count = msgcount;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
result.push(r);
|
|
|
if(result.length==res.length){
|
|
|
if (result.length == res.length) {
|
|
|
ModelUtil.emitOK(self.eventEmitter, res);
|
|
|
}
|
|
|
}
|
|
@ -99,28 +100,34 @@ class Topics extends RedisModel {
|
|
|
/**
|
|
|
* 根据topicId获取对应的消息
|
|
|
* @param topicId
|
|
|
* @param user
|
|
|
* @param startMsgId
|
|
|
* @param endMsgId
|
|
|
* @param page
|
|
|
* @param pagesize
|
|
|
*/
|
|
|
getTopicMessages(topicId,user,startMsgId,endMsgId,page,pagesize) {
|
|
|
getTopicMessages(topicId, user, startMsgId, endMsgId, page, pagesize) {
|
|
|
let self = this;
|
|
|
TopicsRepo.findAllByTopicId(topicId,function(err,res){
|
|
|
if(err||res.length==0){
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status:-1,message:"找不到对应的会话记录!"});
|
|
|
TopicsRepo.findAllByTopicId(topicId, function (err, res) {
|
|
|
if (err || res.length == 0) {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status: -1, message: "找不到对应的会话记录!"});
|
|
|
}
|
|
|
|
|
|
let sessions = new Sessions();
|
|
|
sessions.getMessages(res[0].session_id,user,startMsgId,endMsgId,page,pagesize,0,function(err,messages){
|
|
|
if(err){
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status:-1,message:err});
|
|
|
}else{
|
|
|
if(messages&&messages.length>0){
|
|
|
ParticipantRepo.findAll(res[0].session_id,function (err,users) {
|
|
|
if(err){
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status:-1,message:err});
|
|
|
}else{
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status:200,data:{"list":messages,"users":users}});
|
|
|
sessions.getMessages(res[0].session_id, user, startMsgId, endMsgId, page, pagesize, 0, function (err, messages) {
|
|
|
if (err) {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status: -1, message: err});
|
|
|
} else {
|
|
|
if (messages && messages.length > 0) {
|
|
|
ParticipantRepo.findAll(res[0].session_id, function (err, users) {
|
|
|
if (err) {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status: -1, message: err});
|
|
|
} else {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status: 200, data: {"list": messages, "users": users}});
|
|
|
}
|
|
|
})
|
|
|
}else{
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status:200,data:[]});
|
|
|
} else {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status: 200, data: []});
|
|
|
}
|
|
|
|
|
|
}
|
|
@ -137,14 +144,14 @@ class Topics extends RedisModel {
|
|
|
* @param users 发起议题的患者,格式:{"userId1:role", "userId2:role"}
|
|
|
* @param messages 发送的消息对象,格式:{description:"",title:"",img:"image1,image2",sender_id:"",sender_name:""},多个图片用逗号隔开
|
|
|
*/
|
|
|
createTopic(topicName, topicId, sessionId, users, messages,sessionType) {
|
|
|
createTopic(topicName, topicId, sessionId, users, messages, sessionType) {
|
|
|
let self = this;
|
|
|
if(!sessionId&&sessionType==SESSION_TYPES.MUC) {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status:-1,message:"会话ID为空,请先生成会话ID"});
|
|
|
if (!sessionId && sessionType == SESSION_TYPES.MUC) {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status: -1, message: "会话ID为空,请先生成会话ID"});
|
|
|
return;
|
|
|
}
|
|
|
if(!topicId) {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status:-1,message:"议题ID为空,请先生成议题ID"});
|
|
|
if (!topicId) {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status: -1, message: "议题ID为空,请先生成议题ID"});
|
|
|
return;
|
|
|
}
|
|
|
var pars = [];
|
|
@ -155,18 +162,18 @@ class Topics extends RedisModel {
|
|
|
let date = new Date();
|
|
|
sessions.createSession(sessionId, messages.sender_name, sessionType, pars, function (err, res) {
|
|
|
sessionId = res.id;
|
|
|
self.saveTopicToRedis(topicName,topicId,sessionId,messages,date,function(err,res){
|
|
|
if(err){
|
|
|
ModelUtil.emitOK(self.eventEmitter,{status:-1,message:"议题创建失败!"});
|
|
|
self.saveTopicToRedis(topicName, topicId, sessionId, messages, date, function (err, res) {
|
|
|
if (err) {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status: -1, message: "议题创建失败!"});
|
|
|
return;
|
|
|
}
|
|
|
//返回给前端
|
|
|
ModelUtil.emitOK(self.eventEmitter,{status:200,message:"议题创建成功!",start_msg_id:res});
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status: 200, message: "议题创建成功!", start_msg_id: res});
|
|
|
|
|
|
//执行数据库操作
|
|
|
self.saveTopicToMySQL(topicName,topicId,sessionId,res,date,messages.description,TOPIC_STATUS.NEW,function(err,res){
|
|
|
if(err){
|
|
|
log.info("save topic to mysql is error : "+err);
|
|
|
return;
|
|
|
self.saveTopicToMySQL(topicName, topicId, sessionId, res, date, messages.description, TOPIC_STATUS.NEW, function (err, res) {
|
|
|
if (err) {
|
|
|
ModelUtil.logError("Save topic to mysql failed", err);
|
|
|
}
|
|
|
})
|
|
|
})
|
|
@ -174,7 +181,7 @@ class Topics extends RedisModel {
|
|
|
}
|
|
|
|
|
|
|
|
|
saveTopicToRedis(topicName, topicId, sessionId, messages,date,handler){
|
|
|
saveTopicToRedis(topicName, topicId, sessionId, messages, date, handler) {
|
|
|
let topics_key = RedisModel.makeRedisKey(REDIS_KEYS.Topics, sessionId);
|
|
|
let topic_key = RedisModel.makeRedisKey(REDIS_KEYS.Topic, topicId);
|
|
|
let sessions = new Sessions();
|
|
@ -182,17 +189,17 @@ class Topics extends RedisModel {
|
|
|
//step1:创建topic到redis
|
|
|
redis.zaddAsync(topics_key, date.getTime(), topicId).then(function (res) {
|
|
|
redis.hmsetAsync(topic_key, "name", topicName,
|
|
|
"session_id", sessionId,"create_time", date.getTime(),
|
|
|
"description", messages.description,"status", TOPIC_STATUS.NEW,
|
|
|
"session_id", sessionId, "create_time", date.getTime(),
|
|
|
"description", messages.description, "status", TOPIC_STATUS.NEW,
|
|
|
"end_time", "", "end_by", ""
|
|
|
).then(function (res) {
|
|
|
sendBeginMsg();
|
|
|
}).catch(function(err){
|
|
|
handler(err,null);
|
|
|
sendBeginMsg();
|
|
|
}).catch(function (err) {
|
|
|
handler(err, null);
|
|
|
return;
|
|
|
});
|
|
|
}).catch(function(err){
|
|
|
handler(err,null);
|
|
|
}).catch(function (err) {
|
|
|
handler(err, null);
|
|
|
return;
|
|
|
});
|
|
|
|
|
@ -202,14 +209,14 @@ class Topics extends RedisModel {
|
|
|
msg.sender_id = messages.sender_id;
|
|
|
msg.sender_name = messages.sender_name;
|
|
|
msg.content_type = 10;
|
|
|
msg.content = messages.sender_name+"发起了咨询";
|
|
|
msg.content = messages.sender_name + "发起了咨询";
|
|
|
msg.timestamp = date;
|
|
|
sessions.saveMessageByTopic(msg, sessionId, function (err, msgId) {
|
|
|
if (err) {
|
|
|
handler(err,null);
|
|
|
handler(err, null);
|
|
|
} else {
|
|
|
sendQuesionMsg(msgId);
|
|
|
handler(null,msgId);
|
|
|
handler(null, msgId);
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@ -226,13 +233,14 @@ class Topics extends RedisModel {
|
|
|
if (messages.img) {
|
|
|
sendQuesionImg(startMsgId);
|
|
|
}
|
|
|
if(err){
|
|
|
log.info("send create message error "+msg);
|
|
|
if (err) {
|
|
|
log.info("send create message error " + msg);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
//step4:发送求助内容的图片
|
|
|
function sendQuesionImg(startMsgId){
|
|
|
function sendQuesionImg(startMsgId) {
|
|
|
let imgs = messages.img.split(",");
|
|
|
for (var j in imgs) {
|
|
|
let msgimg = {};
|
|
@ -242,8 +250,8 @@ class Topics extends RedisModel {
|
|
|
msgimg.content = imgs[j];
|
|
|
msgimg.timestamp = new Date();
|
|
|
sessions.saveMessageByTopic(msgimg, sessionId, function (err, msgId) {
|
|
|
if(err){
|
|
|
log.info("send create img error "+imgs[j]);
|
|
|
if (err) {
|
|
|
log.info("send create img error " + imgs[j]);
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@ -251,8 +259,8 @@ class Topics extends RedisModel {
|
|
|
}
|
|
|
|
|
|
|
|
|
saveTopicToMySQL(topicName, topicId, sessionId, messageId, date, description,status,handler) {
|
|
|
TopicsRepo.saveTopic(topicName, topicId, sessionId, messageId, date, description,status,handler);
|
|
|
saveTopicToMySQL(topicName, topicId, sessionId, messageId, date, description, status, handler) {
|
|
|
TopicsRepo.saveTopic(topicName, topicId, sessionId, messageId, date, description, status, handler);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@ -276,7 +284,7 @@ class Topics extends RedisModel {
|
|
|
handler != null ? handler(err, res) : ModelUtil.emitError(self.eventEmitter, err);
|
|
|
} else {
|
|
|
if (null == res) {
|
|
|
handler != null ? handler(err, res) : ModelUtil.emitOK(self.eventEmitter,{});
|
|
|
handler != null ? handler(err, res) : ModelUtil.emitOK(self.eventEmitter, {});
|
|
|
} else {
|
|
|
let ended = res[0].status == TOPIC_STATUS.ENDED;
|
|
|
handler != null ? handler(err, res) : ModelUtil.emitOK(self.eventEmitter, res[0]);
|
|
@ -316,17 +324,17 @@ class Topics extends RedisModel {
|
|
|
let sessions = new Sessions();
|
|
|
sessions.saveMessageByTopic(msg, sessionId, function (err, msgId) {
|
|
|
if (err) {
|
|
|
ModelUtil.emitOK(self.eventEmitter,{status:-1,"message": err} );
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status: -1, "message": err});
|
|
|
} else {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status:200,"id": msgId,"message":"结束成功!"});
|
|
|
TopicsRepo.endTopic(topicId, endUser, msg.date, msgId,TOPIC_STATUS.ENDED);
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status: 200, "id": msgId, "message": "结束成功!"});
|
|
|
TopicsRepo.endTopic(topicId, endUser, msg.date, msgId, TOPIC_STATUS.ENDED);
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
updateTopic(topicId, valueJson) {
|
|
|
let self = this;
|
|
|
let self = this;
|
|
|
let topickey = RedisModel.makeRedisKey(REDIS_KEYS.Topic, topicId);
|
|
|
var dataArray = [];
|
|
|
for (var j in valueJson) {
|
|
@ -335,10 +343,10 @@ class Topics extends RedisModel {
|
|
|
}
|
|
|
|
|
|
redis.hmsetAsync(topickey, dataArray).then(function (res) {
|
|
|
TopicsRepo.updateTopics(topicId, valueJson,function (err,res) {
|
|
|
if(!err){
|
|
|
TopicsRepo.updateTopics(topicId, valueJson, function (err, res) {
|
|
|
if (!err) {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {"status": 200});
|
|
|
}else{
|
|
|
} else {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {"status": -1});
|
|
|
}
|
|
|
});
|