|
@ -13,8 +13,10 @@ let Participants = require('./Participants');
|
|
|
let imDb = require('../../repository/mysql/db/im.db');
|
|
|
let log = require('../../util/log.js');
|
|
|
const RedisKeys = require('../../include/commons').REDIS_KEYS;
|
|
|
const IMTABLE = require('../../include/commons').IM_DB;
|
|
|
const Commons = require('../../include/commons')
|
|
|
const Commons = require('../../include/commons');
|
|
|
let configFile = require('../../include/commons').CONFIG_FILE;
|
|
|
let config = require('../../resources/config/' + configFile);
|
|
|
let SessionRepo = require('../repository/mysql/session.repo');
|
|
|
let mongoose = require('mongoose');
|
|
|
|
|
|
class Sessions extends RedisModel {
|
|
@ -28,20 +30,7 @@ class Sessions extends RedisModel {
|
|
|
* @param handler
|
|
|
*/
|
|
|
getUserSessionsFromMysql(userId,handler){
|
|
|
let sql ="select select session_id from participants w where w.participaint_id = ? group by w.session_id";
|
|
|
let sessionsql = "select id,name,type,create_date from session s where s.id in("+sql+")";
|
|
|
imDb.execQuery({
|
|
|
"sql": sessionsql,
|
|
|
"args": [userId],
|
|
|
"handler": function (err, res) {
|
|
|
if(err) {
|
|
|
log.error("sql:"+sessionsql+"data:userId:"+userId);
|
|
|
}else{
|
|
|
log.info("getMysqlUserSessions success by userId :"+userId);
|
|
|
}
|
|
|
handler(err,res);
|
|
|
}
|
|
|
});
|
|
|
SessionRepo.getUserSessionsFromMysql(userId,handler);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@ -50,19 +39,7 @@ class Sessions extends RedisModel {
|
|
|
* @param handler
|
|
|
*/
|
|
|
getSessions(sessionId,handler){
|
|
|
let sessionsql = "select id,name,type,create_date from session s where s.id=?";
|
|
|
imDb.execQuery({
|
|
|
"sql": sessionsql,
|
|
|
"args": [sessionId],
|
|
|
"handler": function (err, res) {
|
|
|
if(err) {
|
|
|
log.error("sql:"+sessionsql+"data:sessionId:"+sessionId);
|
|
|
}else{
|
|
|
log.info("getSessions success by sessionId :"+sessionId);
|
|
|
}
|
|
|
handler(err,res);
|
|
|
}
|
|
|
});
|
|
|
SessionRepo.getSessions(sessionId,handler);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@ -149,39 +126,51 @@ class Sessions extends RedisModel {
|
|
|
let message_timestamp_key = super.makeRedisKey(RedisKeys.MessagesTimestamp,sessionId);
|
|
|
let message_key = super.makeRedisKey(RedisKeys.Messages,sessionId);
|
|
|
let participants_key = super.makeRedisKey(RedisKeys.Participants,sessionId);
|
|
|
if(page>0){
|
|
|
page = page*pagesize;
|
|
|
pagesize = pagesize+page;
|
|
|
}
|
|
|
let participants = new Participants();
|
|
|
participants.existsUser(sessionId,user,function(res){
|
|
|
if(!res){
|
|
|
modelUtil.emitData(self.eventEmitter,{"status":-1,"msg":"用户不在此会话中!"});
|
|
|
}else{
|
|
|
//倒序取出最后N条消息
|
|
|
redis.zrevrangeAsync(message_timestamp_key,page,pagesize).then(function(res){
|
|
|
//取出消息实体
|
|
|
if(res.length==0){
|
|
|
modelUtil.emitData(self.eventEmitter,{"status":200,"data":[]});
|
|
|
return;
|
|
|
}
|
|
|
redis.hmgetAsync(message_key,res).then(function(messages) {
|
|
|
console.log(messages)
|
|
|
//将取到的消息返回给前端
|
|
|
modelUtil.emitData(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;
|
|
|
//超过最大限制后从mysql获取数据
|
|
|
if(page*pagesize>=config.sessionConfig.maxMessageCount){
|
|
|
let message = new Messages();
|
|
|
message.getMessageByPage(sessionId,page,pagesize,function(err,res){
|
|
|
if(!err){
|
|
|
modelUtil.emitData(self.eventEmitter,{"status":200,"data":res});
|
|
|
}else{
|
|
|
modelUtil.emitData(self.eventEmitter,{"status":-1,"data":err});
|
|
|
}
|
|
|
})
|
|
|
}else{
|
|
|
if(page>0){
|
|
|
page = page*pagesize;
|
|
|
pagesize = pagesize+page;
|
|
|
}
|
|
|
let participants = new Participants();
|
|
|
participants.existsUser(sessionId,user,function(res){
|
|
|
if(!res){
|
|
|
modelUtil.emitData(self.eventEmitter,{"status":-1,"msg":"用户不在此会话中!"});
|
|
|
}else{
|
|
|
//倒序取出最后N条消息
|
|
|
redis.zrevrangeAsync(message_timestamp_key,page,pagesize).then(function(res){
|
|
|
//取出消息实体
|
|
|
if(res.length==0){
|
|
|
modelUtil.emitData(self.eventEmitter,{"status":200,"data":[]});
|
|
|
return;
|
|
|
}
|
|
|
redis.hmgetAsync(message_key,res).then(function(messages) {
|
|
|
console.log(messages)
|
|
|
//将取到的消息返回给前端
|
|
|
modelUtil.emitData(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.emitData(self.eventEmitter,{"status":-1,"msg":res});
|
|
|
})
|
|
|
}).catch(function(res){
|
|
|
modelUtil.emitData(self.eventEmitter,{"status":-1,"msg":res});
|
|
|
})
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
@ -295,18 +284,7 @@ class Sessions extends RedisModel {
|
|
|
* @param createDate
|
|
|
*/
|
|
|
saveSessionToMysql(sessionId,name,type,createDate){
|
|
|
let sql ="insert into "+IMTABLE.SESSIONS+" (id,name,type,create_date) VALUES (?,?,?,?) ";
|
|
|
imDb.execQuery({
|
|
|
"sql": sql,
|
|
|
"args": [sessionId,name,type,createDate],
|
|
|
"handler": function (err, res) {
|
|
|
if(err) {
|
|
|
log.error("sql:"+sql+"data:sessionId:"+sessionId+",name:"+name+",type:"+type+",createDate:"+createDate);
|
|
|
}else{
|
|
|
log.info("save session to mysql is success by session :"+sessionId);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
SessionRepo.saveSessionToMysql(sessionId,name,type,createDate);
|
|
|
}
|
|
|
|
|
|
/**
|