преди 8 години
родител
ревизия
64e6c05737
променени са 3 файла, в които са добавени 53 реда и са изтрити 19 реда
  1. 36 19
      src/server/models/sessions/sessions.js
  2. 1 0
      src/server/models/sessions/topics.js
  3. 16 0
      src/server/repository/mysql/participant.repo.js

+ 36 - 19
src/server/models/sessions/sessions.js

@ -316,40 +316,57 @@ class Sessions extends RedisModel {
                    let sessionKey = RedisModel.makeRedisKey(REDIS_KEYS.Session, sessionId);
                    let sessionKey = RedisModel.makeRedisKey(REDIS_KEYS.Session, sessionId);
                    let participantsRoleKey = RedisModel.makeRedisKey(REDIS_KEYS.SessionParticipantsRole, sessionId);
                    let participantsRoleKey = RedisModel.makeRedisKey(REDIS_KEYS.SessionParticipantsRole, sessionId);
                    let sessionParticipantsKey = RedisModel.makeRedisKey(REDIS_KEYS.SessionParticipants, sessionId);
                    let sessionParticipantsKey = RedisModel.makeRedisKey(REDIS_KEYS.SessionParticipants, sessionId);
                    let participantsKey = RedisModel.makeRedisKey(REDIS_KEYS.SessionParticipants,sessionId);
                    redis.multi()
                    redis.multi()
                        .hgetall(sessionKey)                       // 会话实体
                        .hgetall(sessionKey)                       // 会话实体
                        .hget(participantsRoleKey, userId)         // 用户在此会话中的角色
                        .hget(participantsRoleKey, userId)         // 用户在此会话中的角色
                        .zscore(sessionParticipantsKey, userId)    // 用户在此会话中最后一次获取未读消息的时间
                        .zscore(sessionParticipantsKey, userId)    // 用户在此会话中最后一次获取未读消息的时间
                        .zrange(participantsKey,0,-1)
                        .execAsync()
                        .execAsync()
                        .then(function (res) {
                        .then(function (res) {
                            let session = res[0];
                            let session = res[0];
                            let role = res[1];
                            let role = res[1];
                            let lastFetchTime = res[2];
                            let lastFetchTime = res[2];
                            let users = res[3];
                            let sessionName="";
                            let otheruserId ="";
                            if(session.type==SESSION_TYPES.P2P){
                                for(var j in users){
                                    if(users[j]!=userId){
                                        otheruserId = users[j];
                                    }
                                }
                            }
                            if(!role)role =0;
                            if(!role)role =0;
                            if(!lastFetchTime)lastFetchTime=new Date().getTime();
                            if(!lastFetchTime)lastFetchTime=new Date().getTime();
                            console.log(lastFetchTime+":"+sessionId);
                                // 计算未读消息数
                                // 计算未读消息数
                                let messagesByTimestampKey = RedisModel.makeRedisKey(REDIS_KEYS.MessagesByTimestamp, sessionId);
                                let messagesByTimestampKey = RedisModel.makeRedisKey(REDIS_KEYS.MessagesByTimestamp, sessionId);
                                redis.zcountAsync(messagesByTimestampKey, lastFetchTime, new Date().getTime())
                                redis.zcountAsync(messagesByTimestampKey, lastFetchTime, new Date().getTime())
                                    .then(function (count) {
                                    .then(function (count) {
                                        sessionList.push({
                                            id: sessionId,
                                            name: session.name,
                                            create_date: session.create_date,
                                            last_content_type: session.last_content_type,
                                            last_content: session.last_content,
                                            sender_id: session.sender_id,
                                            type: session.type,
                                            sender_name: session.sender_name,
                                            unread_count: count,
                                            business_type: session.business_type,
                                            my_role: role
                                        });
                                        if (sessionId === sessionIds[sessionIds.length - 1]) {
                                            ModelUtil.emitOK(self.eventEmitter, sessionList);
                                        }
                                        if(!otheruserId)otheruserId=userId;
                                        ParticipantRepo.findNameById(otheruserId, function (err, res) {
                                            if((res&&res.length==0)||session.type!=SESSION_TYPES.P2P){
                                                sessionName = session.name;
                                            }else{
                                                sessionName = res[0].name;
                                            }
                                            sessionList.push({
                                                id: sessionId,
                                                name: sessionName,
                                                create_date: session.create_date,
                                                last_content_type: session.last_content_type,
                                                last_content: session.last_content,
                                                sender_id: session.sender_id,
                                                type: session.type,
                                                sender_name: session.sender_name,
                                                unread_count: count,
                                                business_type: session.business_type,
                                                my_role: role
                                            });
                                            if (sessionId === sessionIds[sessionIds.length - 1]) {
                                                ModelUtil.emitOK(self.eventEmitter, sessionList);
                                            }
                                        })
                                    })
                                    })
                                }).catch(function (err) {
                                }).catch(function (err) {
                                    logger.error("Get sessions failed: ", ex);
                                    logger.error("Get sessions failed: ", ex);

+ 1 - 0
src/server/models/sessions/topics.js

@ -145,6 +145,7 @@ class Topics extends RedisModel {
        let sessions = new Sessions();
        let sessions = new Sessions();
        let date = new Date();
        let date = new Date();
        sessions.createSession(sessionId, messages.sender_name, sessionType, pars, function (err, res) {
        sessions.createSession(sessionId, messages.sender_name, sessionType, pars, function (err, res) {
            sessionId = res.id;
            self.saveTopicToRedis(topicName,topicId,sessionId,messages,date,function(err,res){
            self.saveTopicToRedis(topicName,topicId,sessionId,messages,date,function(err,res){
                if(err){
                if(err){
                    ModelUtil.emitOK(self.eventEmitter,{status:-1,message:"议题创建失败!"});
                    ModelUtil.emitOK(self.eventEmitter,{status:-1,message:"议题创建失败!"});

+ 16 - 0
src/server/repository/mysql/participant.repo.js

@ -121,6 +121,22 @@ class ParticipantRepo {
    }
    }
    static findNameById(userId,handler){
        let sql ="select p.name  from patients p where p.id =? union select d.name  from doctors d where d.id =?";
        ImDb.execQuery({
            "sql": sql,
            "args": [userId,userId],
            "handler": function(err,res){
                if(err){
                    console.log("err businessType  : "+err);
                }else{
                    handler(null,res);
                }
            }
        });
    }
    static findMucSessionIdByUser(users,handler){
    static findMucSessionIdByUser(users,handler){
        var userTemp = [];//先匹配出在线用户
        var userTemp = [];//先匹配出在线用户
        for(var j in users){
        for(var j in users){