| 
					
				 | 
			
			
				@ -14,6 +14,7 @@ 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') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let mongoose = require('mongoose'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				class Sessions extends RedisModel { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -22,13 +23,48 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 根据sessionId获取对应的Session 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param sessionId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 获取某个用户的全部session列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param userId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param handler 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    getSessionsById(sessionId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    getMysqlUserSessions(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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 获取session单个对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param sessionId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 根据用户ID获取用户的session列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param userId 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -51,7 +87,6 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    calllist(res[j],j,res.length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            function calllist(session,j,_len){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                let session_key =_super(RedisKeys.Session,session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                redis.hgetallAsync(session_key).then(function(res){ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -113,34 +148,42 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let self = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let message_timestamp_key = super.makeRedisKey(RedisKeys.MessagesTimestamp,sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let message_key = super.makeRedisKey(RedisKeys.Messages,sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let participants = super.makeRedisKey(RedisKeys.Participants,sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let participants_key = super.makeRedisKey(RedisKeys.Participants,sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(page>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            page = page*pagesize; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            pagesize = pagesize+page; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //倒序取出最后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, (new Date().getTime()),user).then(function(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    console.log(res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        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){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    throw res; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    modelUtil.emitData(self.eventEmitter,{"status":-1,"msg":res}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }).catch(function(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            modelUtil.emitData(self.eventEmitter,{"status":-1,"msg":res}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 更新最后一条消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param session_key rediskey 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -149,7 +192,7 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @returns {*} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     updateLastContent(session_key,session_type,name,message){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    updateLastContent(session_key,session_type,name,message){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return redis.hmsetAsync(session_key, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "create_date", message.timestamp, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "last_content", message.content, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -161,52 +204,50 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 保存消息,用于消息发送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param sessionId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    saveMessageBySession(message,sessionId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let self = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let messages = new Messages(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let participants = new Participants(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let session_key = super.makeRedisKey(RedisKeys.Session,sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let message_id = mongoose.Types.ObjectId().toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let session_type = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let name = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let messages = new Messages(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        redis.hmgetAsync(session_key, ["type","name"]).then(function(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            session_type = res[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            name  = res[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(!session_type||!name){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                log.error("session is error for key "+session_key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                throw "session is not found"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        participants.existsUser(sessionId,messages.senderId,function(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //校验发送成员是都在讨论组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                redis.hmgetAsync(session_key, ["type","name"]).then(function(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    session_type = res[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    name  = res[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if(!session_type||!name){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        log.error("session is error for key "+session_key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        throw "session is not found"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }).then(function(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //更新消息相关 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    return  messages.saveMessageForRedis(message_id,sessionId,message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }).then(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //更新session的最后一条聊天记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    return self.updateLastContent(session_key,session_type,name,message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }).then(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //操作mysql数据库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    messages.saveMessageForMysql(message,session_type,message_id,sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //返回数据给前端。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    modelUtil.emitData(self.eventEmitter, {"status":200,"msg":"发送成功!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //消息推送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }).catch(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    modelUtil.emitData(self.eventEmitter,{"status":-1,"msg":res}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                modelUtil.emitData(self.eventEmitter,{"status":-1,"msg":"用户不在此会话当中!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }).then(function(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //更新消息相关 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return  messages.saveMessageForRedis(message_id,sessionId,message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }).then(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //更新session的最后一条聊天记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return self.updateLastContent(session_key,session_type,name,message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }).then(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //操作mysql数据库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            messages.saveMessageForMysql(message,session_type,message_id,sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //返回数据给前端。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            modelUtil.emitData(self.eventEmitter, {"status":200,"msg":"发送成功!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //消息推送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }).catch(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            modelUtil.emitData(self.eventEmitter,{"status":-1,"msg":res}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 根据sessionId获取对应的消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param sessionId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    getSessionMessagesByPage(sessionId,page,pageSize){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 非MUC模式创建会话 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param sessionId 会话ID 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -261,7 +302,53 @@ class Sessions extends RedisModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     *置顶操作 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    stickSession(sessionId,user){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let user_session_key = super.makeRedisKey(RedisKeys.UsersSessions,user); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let self = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //取出最大的session 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        redis.zrevrangeAsync(user_session_key,0,0).then(function(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //获取该session的时间搓 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            redis.zscoreAsync(user_session_key,res).then(function(scoreres){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                let nowtime = new Date().getTime(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //当前时间搓比redis的时间搓更早证明没有置顶过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if(scoreres<=nowtime){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //初始化置顶 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   redis.zaddAsync(user_session_key, Commons.STICK_NUM,sessionId).then(function(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       log.info("stickSession:"+sessionId+",res:"+res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       modelUtil.emitData(self.eventEmitter,{"status":200,"msg":"置顶成功!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //已有置顶的数据,取出来加1保存回去 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    scoreres =  scoreres+1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    redis.zaddAsync(user_session_key, scoreres,sessionId).then(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        log.info("stickSession:"+sessionId+",res:"+res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        modelUtil.emitData(self.eventEmitter,{"status":200,"msg":"置顶成功!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     *取消置顶操作 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    cancelStickSession(sessionId,user){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let user_session_key = super.makeRedisKey(RedisKeys.UsersSessions,user); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let participants_key = super.makeRedisKey(RedisKeys.Participants,sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let self = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        redis.zscoreAsync(participants_key,user).then(function(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(!res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                res = new Date().getTime(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            redis.zaddAsync(user_session_key, res,sessionId).then(function(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                log.info("cancelStickSession:"+sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                modelUtil.emitData(self.eventEmitter,{"status":200,"msg":"取消置顶成功!"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 |