|  | @ -13,8 +13,10 @@ let Participants = require('./Participants');
 | 
												
													
														
															|  | let imDb = require('../../repository/mysql/db/im.db');
 |  | let imDb = require('../../repository/mysql/db/im.db');
 | 
												
													
														
															|  | let log = require('../../util/log.js');
 |  | let log = require('../../util/log.js');
 | 
												
													
														
															|  | const RedisKeys = require('../../include/commons').REDIS_KEYS;
 |  | 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');
 |  | let mongoose = require('mongoose');
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | class Sessions extends RedisModel {
 |  | class Sessions extends RedisModel {
 | 
												
											
												
													
														
															|  | @ -28,20 +30,7 @@ class Sessions extends RedisModel {
 | 
												
													
														
															|  |      * @param handler
 |  |      * @param handler
 | 
												
													
														
															|  |      */
 |  |      */
 | 
												
													
														
															|  |     getUserSessionsFromMysql(userId,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
 |  |      * @param handler
 | 
												
													
														
															|  |      */
 |  |      */
 | 
												
													
														
															|  |     getSessions(sessionId,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_timestamp_key = super.makeRedisKey(RedisKeys.MessagesTimestamp,sessionId);
 | 
												
													
														
															|  |         let message_key = super.makeRedisKey(RedisKeys.Messages,sessionId);
 |  |         let message_key = super.makeRedisKey(RedisKeys.Messages,sessionId);
 | 
												
													
														
															|  |         let participants_key = super.makeRedisKey(RedisKeys.Participants,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
 |  |      * @param createDate
 | 
												
													
														
															|  |      */
 |  |      */
 | 
												
													
														
															|  |     saveSessionToMysql(sessionId,name,type,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);
 | 
												
													
														
															|  |     }
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |     /**
 |  |     /**
 |