|
@ -236,58 +236,114 @@ class Sessions extends RedisModel {
|
|
|
* @param page 第几页
|
|
|
* @param pagesize 分页数量
|
|
|
*/
|
|
|
getMessages(sessionId, user, page, pagesize) {
|
|
|
getMessages(sessionId, user, start_msg_id, end_msg_id, page, pagesize) {
|
|
|
let self = this;
|
|
|
let message_timestamp_key = RedisModel.makeRedisKey(REDIS_KEYS.MessagesByTimestamp, sessionId);
|
|
|
let message_key = RedisModel.makeRedisKey(REDIS_KEYS.Messages, sessionId);
|
|
|
let participants_key = RedisModel.makeRedisKey(REDIS_KEYS.SessionParticipants, sessionId);
|
|
|
//超过最大限制后从mysql获取数据
|
|
|
if (page * pagesize >= config.sessionConfig.maxMessageCount) {
|
|
|
self.getMessageFromMySQL(sessionId, page, pagesize, function (err, res) {
|
|
|
if (!err) {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {"status": 200, "data": res});
|
|
|
} else {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {"status": -1, "data": err});
|
|
|
}
|
|
|
if (!start_msg_id && !end_msg_id) {
|
|
|
redis.zrevrangeAsync(message_timestamp_key, 0, 0).then(function (res) {
|
|
|
start_msg_id = res[0];
|
|
|
redis.zrangeAsync(message_timestamp_key, 0, 0).then(function (res) {
|
|
|
end_msg_id = res[0];
|
|
|
self.getMessagesByPage(sessionId, user, start_msg_id, end_msg_id, page, pagesize, function (err, res) {
|
|
|
if (err) {
|
|
|
logger.error("getMessagesByPage error" + err);
|
|
|
ModelUtil.emitError(self.eventEmitter,err,err);
|
|
|
} else {
|
|
|
ModelUtil.emitOK(self.eventEmitter, res);
|
|
|
}
|
|
|
})
|
|
|
})
|
|
|
})
|
|
|
} else if (!start_msg_id) {
|
|
|
redis.zrevrangeAsync(message_timestamp_key, 0, 0).then(function (res) {
|
|
|
start_msg_id = res[0];
|
|
|
self.getMessagesByPage(sessionId, user, startMsgId, endMsgId, page, pagesize, function (err, res) {
|
|
|
if (err) {
|
|
|
logger.error("getMessagesByPage error" + err);
|
|
|
ModelUtil.emitError(self.eventEmitter,err,err);
|
|
|
} else {
|
|
|
ModelUtil.emitOK(self.eventEmitter, res);
|
|
|
}
|
|
|
})
|
|
|
})
|
|
|
} else if (!end_msg_id) {
|
|
|
redis.zrangeAsync(message_timestamp_key, 0, 0).then(function (res) {
|
|
|
end_msg_id = res[0];
|
|
|
self.getMessagesByPage(sessionId, user, start_msg_id, end_msg_id, page, pagesize, function (err, res) {
|
|
|
if (err) {
|
|
|
logger.error("getMessagesByPage error" + err);
|
|
|
ModelUtil.emitError(self.eventEmitter,err,err);
|
|
|
} else {
|
|
|
ModelUtil.emitOK(self.eventEmitter, res);
|
|
|
}
|
|
|
})
|
|
|
})
|
|
|
} else {
|
|
|
if (page > 0) {
|
|
|
page = page * pagesize;
|
|
|
pagesize = pagesize + page;
|
|
|
}
|
|
|
let participants = new Participants();
|
|
|
participants.existsParticipant(sessionId, user, function (res) {
|
|
|
if (!res) {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {"status": -1, "msg": "用户不在此会话中!"});
|
|
|
self.getMessagesByPage(sessionId, user, start_msg_id, end_msg_id, page, pagesize, function (err, res) {
|
|
|
if (err) {
|
|
|
logger.error("getMessagesByPage error" + err);
|
|
|
ModelUtil.emitError(self.eventEmitter,err,err);
|
|
|
} else {
|
|
|
//倒序取出最后N条消息
|
|
|
redis.zrevrangeAsync(message_timestamp_key, page, pagesize).then(function (res) {
|
|
|
//取出消息实体
|
|
|
if (res.length == 0) {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {"status": 200, "data": []});
|
|
|
return;
|
|
|
}
|
|
|
redis.hmgetAsync(message_key, res).then(function (messages) {
|
|
|
console.log(messages)
|
|
|
//将取到的消息返回给前端
|
|
|
ModelUtil.emitOK(self.eventEmitter, {"status": 200, "data": messages});
|
|
|
}).then(function () {
|
|
|
//更新患者最后一次获取消息的日期
|
|
|
redis.zaddAsync(participants_key, (new Date().getTime()), user).then(function (res) {
|
|
|
console.log(res);
|
|
|
}).catch(function (res) {
|
|
|
throw res;
|
|
|
})
|
|
|
})
|
|
|
}).catch(function (res) {
|
|
|
ModelUtil.emitOK(self.eventEmitter, {"status": -1, "msg": res});
|
|
|
})
|
|
|
ModelUtil.emitOK(self.eventEmitter, res);
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
getAllSessionsUnreadMessageCount(){}
|
|
|
getMessagesByPage(sessionId, user, startMsgId, endMsgId, page, pagesize, handler) {
|
|
|
let self = this;
|
|
|
let message_timestamp_key = RedisModel.makeRedisKey(REDIS_KEYS.MessagesByTimestamp, sessionId);
|
|
|
let message_key = RedisModel.makeRedisKey(REDIS_KEYS.Messages, sessionId);
|
|
|
let participants_key = RedisModel.makeRedisKey(REDIS_KEYS.SessionParticipants, sessionId);
|
|
|
let participants = new Participants();
|
|
|
page = page - 1;
|
|
|
if (page < 0) {
|
|
|
page = 0;
|
|
|
}
|
|
|
if (page > 0) {
|
|
|
page = page * pagesize;
|
|
|
pagesize = pagesize + page;
|
|
|
}
|
|
|
participants.existsParticipant(sessionId, user, function (err,res) {
|
|
|
if (!res) {
|
|
|
handler("用户不在此会话中!", false);
|
|
|
} else {
|
|
|
//将消息ID转换成分值
|
|
|
redis.zscoreAsync(message_timestamp_key, startMsgId).then(function (res) {
|
|
|
let startMsgScore = res;
|
|
|
redis.zscoreAsync(message_timestamp_key, endMsgId).then(function (res) {
|
|
|
let endMsgScore = res;
|
|
|
//倒序取出最后N条消息
|
|
|
redis.zrevrangebyscoreAsync(message_timestamp_key, startMsgScore, endMsgScore, "limit", page, pagesize).then(function (res) {
|
|
|
//取出消息实体
|
|
|
if (res.length == 0) {
|
|
|
handler(null, res);
|
|
|
return;
|
|
|
}
|
|
|
redis.hmgetAsync(message_key, res).then(function (messages) {
|
|
|
console.log(messages)
|
|
|
//将取到的消息返回给前端
|
|
|
handler(null, messages);
|
|
|
}).then(function () {
|
|
|
//更新患者最后一次获取消息的日期
|
|
|
redis.zaddAsync(participants_key, (new Date().getTime()), user).then(function (res) {
|
|
|
console.log(res);
|
|
|
}).catch(function (res) {
|
|
|
throw res;
|
|
|
})
|
|
|
})
|
|
|
}).catch(function (res) {
|
|
|
handler(res, false);
|
|
|
})
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
|
|
|
|
|
|
getAllSessionsUnreadMessageCount() {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取会话的未读消息数。
|
|
@ -295,7 +351,7 @@ class Sessions extends RedisModel {
|
|
|
* @param sessionId
|
|
|
* @param userId
|
|
|
*/
|
|
|
getSessionUnreadMessageCount(sessionId, userId){
|
|
|
getSessionUnreadMessageCount(sessionId, userId) {
|
|
|
|
|
|
}
|
|
|
|
|
@ -372,13 +428,13 @@ class Sessions extends RedisModel {
|
|
|
}
|
|
|
}).then(function (res) {
|
|
|
//更新消息相关
|
|
|
return messages.saveMessageToRedis(sessionId,sessionType,messageId, message);
|
|
|
return messages.saveMessageToRedis(sessionId, sessionType, messageId, message);
|
|
|
}).then(function (res) {
|
|
|
//更新session的最后一条聊天记录
|
|
|
return Messages.updateLastContent(session_key, sessionType, name, message);
|
|
|
}).then(function (res) {
|
|
|
//操作mysql数据库
|
|
|
messages.saveMessageToMysql(sessionId, sessionType, messageId, message,function(err,res){
|
|
|
messages.saveMessageToMysql(sessionId, sessionType, messageId, message, function (err, res) {
|
|
|
//返回数据给前端。
|
|
|
handler(null, messageId)
|
|
|
});
|