|
@ -121,8 +121,12 @@ class Sessions extends RedisModel {
|
|
|
}
|
|
|
} else {
|
|
|
if (!sessionId) {
|
|
|
handler("MUC OR GROUP session sessionId is not allow null .", null);
|
|
|
return;
|
|
|
if(type == SESSION_TYPES.DISCUSSION){
|
|
|
sessionId = messageId;
|
|
|
}else {
|
|
|
handler("MUC OR GROUP session sessionId is not allow null .", null);
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
callBusinessType(sessionId);
|
|
|
}
|
|
@ -188,6 +192,9 @@ class Sessions extends RedisModel {
|
|
|
sessionId = res;
|
|
|
callBusinessType();
|
|
|
});
|
|
|
} else if(type == SESSION_TYPES.DISCUSSION){
|
|
|
sessionId = messageId;
|
|
|
callBusinessType();
|
|
|
} else {
|
|
|
return handler("MUC模式和团队模式,不允许sessionId为空!", null);
|
|
|
}
|
|
@ -197,9 +204,9 @@ class Sessions extends RedisModel {
|
|
|
|
|
|
//流程2-判断session的业务类型;
|
|
|
function callBusinessType() {
|
|
|
if(type==SESSION_TYPES.MUC||type==SESSION_TYPES.PRESCRIPTION || type==SESSION_TYPES.ONDOOR_NURSING){
|
|
|
if(type==SESSION_TYPES.MUC||type==SESSION_TYPES.PRESCRIPTION || SESSION_TYPES.PRESCRIPTION_HOSPITAL || SESSION_TYPES.ONDOOR_NURSING){
|
|
|
callCreateSession(SESSION_BUSINESS_TYPE.PATIENT);
|
|
|
}else if(type==SESSION_TYPES.SPECIALISTGROUP){
|
|
|
}else if(type==SESSION_TYPES.SPECIALISTGROUP||type==SESSION_TYPES.DISCUSSION){
|
|
|
callCreateSession(SESSION_BUSINESS_TYPE.DOCTOR);
|
|
|
}else{
|
|
|
ParticipantRepo.getBusinessType(participantIdArray, function (err, businessType) {
|
|
@ -1141,7 +1148,10 @@ class Sessions extends RedisModel {
|
|
|
}
|
|
|
|
|
|
participants.existsParticipant(sessionId, userId, function (err, res) {
|
|
|
if (! res[0].exist || userId != "system") {
|
|
|
log.info("1151-userId=" + userId);
|
|
|
log.info(" res[0].exist=" + res[0].exist);
|
|
|
log.info(!res[0].exist && userId != "system");
|
|
|
if (! res[0].exist && userId != "system") {
|
|
|
handler(Error("User not found in session " + sessionId), null);
|
|
|
} else {
|
|
|
//将消息ID转换成分值
|
|
@ -1420,6 +1430,7 @@ class Sessions extends RedisModel {
|
|
|
let sessionKey = RedisModel.makeRedisKey(REDIS_KEYS.Session, sessionId);
|
|
|
let messageId = mongoose.Types.ObjectId().toString();
|
|
|
let sessionType =0;
|
|
|
let sessionName;
|
|
|
message.id = messageId;
|
|
|
|
|
|
// 检查会话中是否存在此成员
|
|
@ -1428,14 +1439,56 @@ class Sessions extends RedisModel {
|
|
|
ModelUtil.emitError(self.eventEmitter, "Check session participant failed: ", err);
|
|
|
return;
|
|
|
}
|
|
|
logger.info("session.js--1285--res[0].exist" + res[0].exist);
|
|
|
logger.info("session.js--1443--res[0].exist" + res[0].exist);
|
|
|
log.info("message.sender_id=" + message.sender_id);
|
|
|
if ( res[0].exist || message.sender_id == "system") {
|
|
|
redis.hmgetAsync(sessionKey, ["type", "name"]).then(function (res) {
|
|
|
sessionType = res[0];
|
|
|
let sessionName = res[1];
|
|
|
if (sessionType == null) {
|
|
|
ModelUtil.emitError(self.eventEmitter, "Session " + sessionId + " is not found.");
|
|
|
return;
|
|
|
self.getSessions(sessionId,function(err,res){
|
|
|
if (err){
|
|
|
logger.error("session data is error");
|
|
|
} else {
|
|
|
sessionName=res[0].name;
|
|
|
sessionType = res[0].type;
|
|
|
}
|
|
|
});
|
|
|
let participantArray = [];
|
|
|
let participantsStr="{";
|
|
|
ParticipantRepo.findAll(sessionId, function (err, participants) {
|
|
|
if (err) {
|
|
|
ModelUtil.emitError(self.eventEmitter, err.message);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
participants.forEach(function (participant) {
|
|
|
let participantId = participant.id;
|
|
|
let participantRole = participant.role;
|
|
|
let score = ObjectUtil.timestampToLong(participant.last_fetch_time||(new Date()));
|
|
|
participantsStr +="\""+participantId+"\":\""+participantRole+"\",";
|
|
|
});
|
|
|
|
|
|
participantsStr = participantsStr.substring(0,participantsStr.length-1)+'}';
|
|
|
participantsStr = JSON.parse(participantsStr);
|
|
|
for (let j in participantsStr) {
|
|
|
participantArray.push(j + ":" + participantsStr[j]);
|
|
|
}
|
|
|
//创建session到redis
|
|
|
self.createSessionToRedis(sessionId, sessionName, sessionType, participantArray, messageId, function (err, res) {
|
|
|
if (err) {
|
|
|
if (handler) {
|
|
|
handler(err, null);
|
|
|
}
|
|
|
ModelUtil.emitError(self.eventEmitter, {message: err, status: -1}, null);
|
|
|
} else {
|
|
|
if (handler) {
|
|
|
handler(null, res);
|
|
|
}
|
|
|
ModelUtil.emitOK(self.eventEmitter, {status: 200, data: res});
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
if(sessionType == SESSION_TYPES.MUC || sessionType == SESSION_TYPES.PRESCRIPTION || SESSION_TYPES.PRESCRIPTION_HOSPITAL || SESSION_TYPES.ONDOOR_NURSING){
|
|
|
if(message.content_type == CONTENT_TYPES.PlainText ||
|
|
@ -1455,6 +1508,7 @@ class Sessions extends RedisModel {
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 消息保存到Redis,并更新会话最后状态、用户最后消息获取时间
|
|
|
messages.saveMessageToRedis(sessionId, sessionType, messageId, message);
|
|
|
Messages.updateLastContent(sessionKey, sessionType, sessionName, message);
|
|
@ -1501,6 +1555,7 @@ class Sessions extends RedisModel {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
sendTopicMessages(topicId, message) {
|
|
|
let self = this;
|
|
|
TopicRepo.findAllByTopicId(topicId, function (err, res) {
|
|
@ -1541,6 +1596,8 @@ class Sessions extends RedisModel {
|
|
|
}
|
|
|
// 发送成员必须处于会话中
|
|
|
participants.existsParticipant(sessionId, message.sender_id, function (err, res) {
|
|
|
log.info("1599-message.sender_id=" + message.sender_id);
|
|
|
log.info("res[0].exist=" + res[0].exist);
|
|
|
if ( res[0].exist || message.sender_id == "system") {
|
|
|
redis.hmgetAsync(session_key, ["type", "name"]).then(function (res) {
|
|
|
sessionType = res[0];
|
|
@ -1621,6 +1678,7 @@ class Sessions extends RedisModel {
|
|
|
// 发送成员必须处于会话中
|
|
|
participants.existsParticipant(sessionId, message.sender_id, function (err, res) {
|
|
|
log.info("session.js--1477--res[0].exist" + res[0].exist);
|
|
|
log.info("message.sender_id=" + message.sender_id);
|
|
|
if (res[0].exist || message.sender_id == "system") {
|
|
|
redis.hmgetAsync(session_key, ["type", "name"]).then(function (res) {
|
|
|
sessionType = res[0];
|
|
@ -1782,20 +1840,46 @@ class Sessions extends RedisModel {
|
|
|
//告知医生新消息
|
|
|
WechatClient.sendSocketMessageToDoctor(targetUserId,message);
|
|
|
|
|
|
WlyySDK.request(targetUserId, '', '', '', '/im/common/message/messages', 'POST', function (err, res) {
|
|
|
let count = 0;
|
|
|
res = JSON.parse(res)
|
|
|
if (res.status == 200) {
|
|
|
let data = res.data;
|
|
|
count = parseInt(JSON.parse(data.imMsgCount).count) + parseInt(data.system.amount) + parseInt(data.healthIndex.amount) + parseInt(data.sign.amount);
|
|
|
let count = 0;
|
|
|
//系统消息
|
|
|
MessageRepo.getWlyyMessageCount(targetUserId,function (err,res) {
|
|
|
if(res){
|
|
|
count = res[0].count;
|
|
|
}
|
|
|
if(config.environment!='local'){//pc版不推送个推,通过redis的publish
|
|
|
AppClient.sendNotification(targetUserId, message,sessionType,count);
|
|
|
});
|
|
|
//im消息
|
|
|
let sessions = new Sessions();
|
|
|
sessions.getAllSessionsUnreadMessageCount(targetUserId,function (err,res) {
|
|
|
if(res){
|
|
|
count += res;
|
|
|
}
|
|
|
//外网pcim通过socket推送
|
|
|
WechatClient.sendPcImSocket(targetUserId,message,sessionType);
|
|
|
});
|
|
|
|
|
|
if(config.environment!='local'){//pc版不推送个推,通过redis的publish
|
|
|
AppClient.sendNotification(targetUserId, message,sessionType,count);
|
|
|
}
|
|
|
//外网pcim通过socket推送
|
|
|
WechatClient.sendPcImSocket(targetUserId,message,sessionType);
|
|
|
|
|
|
// WlyySDK.request(targetUserId, '', '', '', '/im/common/message/messages', 'POST', function (err, res) {
|
|
|
// let count = 0;
|
|
|
// if(err){
|
|
|
// logger.error(err);
|
|
|
// }else {
|
|
|
// logger.error(res);
|
|
|
// res = JSON.parse(res)
|
|
|
// if (res.status == 200) {
|
|
|
// let data = res.data;
|
|
|
// count = parseInt(JSON.parse(data.imMsgCount).count) + parseInt(data.system.amount) + parseInt(data.healthIndex.amount) + parseInt(data.sign.amount);
|
|
|
// }
|
|
|
// }
|
|
|
// if(config.environment!='local'){//pc版不推送个推,通过redis的publish
|
|
|
// AppClient.sendNotification(targetUserId, message,sessionType,count);
|
|
|
// }
|
|
|
// //外网pcim通过socket推送
|
|
|
// WechatClient.sendPcImSocket(targetUserId,message,sessionType);
|
|
|
// });
|
|
|
|
|
|
message.targetUserId = targetUserId;
|
|
|
message.targetUserName = targetUserName;
|
|
|
message.sessionType = sessionType;
|