Browse Source

会话相关修改

8 years ago
parent
commit
0e857e23e6
1 changed files with 50 additions and 72 deletions
  1. 50 72
      src/server/models/sessions/sessions.js

+ 50 - 72
src/server/models/sessions/sessions.js

@ -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);
    }
    /**