| 
					
				 | 
			
			
				@ -0,0 +1,128 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 会话模型。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				"use strict"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let RedisClient = require('../../repository/redis/redis.client.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let redisClient = RedisClient.redisClient(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let redis = redisClient.connection; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let BaseModel = require('./../base.model.js'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let modelUtil = require('../../util/modelUtil'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let Messages = require('../messages/messages'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				const RedisKeys = require('../../include/commons').REDIS_KEYS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				let mongoose = require('mongoose'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				class Sessions extends BaseModel { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    constructor() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        super(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this._sessions_key = RedisKeys.Sessions; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this._session_key = RedisKeys.Session; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this._msg_key = RedisKeys.Messages; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this._ms_key_timestamp = RedisKeys.MessagesTimestamp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 根据sessionId获取对应的Session 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param sessionId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    getSessionsById(sessionId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 根据用户ID获取用户的session列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param userId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    getUserSessions(userId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 根据sessionId获取对应的消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param sessionId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    getSessionMessages(sessionId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let key = this._msg_key.replace("{key}",sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        console.log(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        redis.zsetAsync(key,{ id: 'kris', password: 'password' }).then(function(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            console.log(res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            redis.hgetallAsync(key).then(function(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                console.log(res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 更新最后一条消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param session_key rediskey 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param create_date 创建时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param last_content 最后一条消息内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param last_content_type 消息类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param type 会话类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param sender 发送者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param sendername 发送者名字 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param name 议题名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @returns {*} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     updateLastContent(session_key,session_type,name,message){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return redis.hmsetAsync(session_key, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "create_date", message.timestamp, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "last_content", message.content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "last_content_type", message.contentType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "type", session_type, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "senderId",message.senderId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "senderName",message.senderName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "name",name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    saveMessageBySession(message,sessionId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let self = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let message_key = super._getKey(this._msg_key,sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let message_timestamp_key = super._getKey(this._ms_key_timestamp,sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let session_key = super._getKey(this._session_key,sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let message_id = mongoose.Types.ObjectId().toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let session_type = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        let name = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        redis.hmgetAsync(session_key, ["type","name"]).then(function(res){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            session_type = res[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            name  = res[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }).then( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            redis.hsetAsync(message_key, message_id, JSON.stringify(message))).then(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //保存message_timestamp_key redis 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return redis.zaddAsync(message_timestamp_key, message.timestamp.getTime(), message_id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }).then(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //更新session的最后一条聊天记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return self.updateLastContent(session_key,session_type,name,message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }).then(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //操作mysql数据库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            let messages = new Messages(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            messages.saveMessageForMysql(message,session_type,message_id,sessionId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //返回数据给前端。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            modelUtil.emitData(self.eventEmitter, "发送成功!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }).catch(function (res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            console.log(res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 根据sessionId获取对应的消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param sessionId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    getSessionMessagesByPage(sessionId,page,pageSize){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				// Expose class 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				module.exports = Sessions; 
			 |