Explorar o código

成员变化的时候时间更新为空问题处理

%!s(int64=8) %!d(string=hai) anos
pai
achega
7c07e88425

+ 6 - 1
src/server/endpoints/v2/session.endpoint.js

@ -251,7 +251,9 @@ router.post(APIv2.Sessions.Messages, function (req, res) {
    if (!testing.pass) {
        throw {httpStatus: 406, message: testing.message}
    }
    if(payload.view&&payload.view==1){
        throw {httpStatus: 406, message: "观察者模式,不能发送消息!"};
    }
    // 消息的发送时间由服务端决定
    payload.timestamp = new Date((new Date().getTime()));
@ -267,6 +269,9 @@ router.post(APIv2.Sessions.TopicMessages, function (req, res) {
    if (!testing.pass) {
        throw {httpStatus: 406, message: testing.message}
    }
    if(payload.view&&payload.view==1){
        throw {httpStatus: 406, message: "观察者模式,不能发送消息!"};
    }
    let sessions = new Sessions();
    ControllerUtil.regModelEventHandler(sessions, res);
    payload.timestamp = new Date((new Date().getTime()));

+ 2 - 5
src/server/models/migration/migration.redis.js

@ -120,12 +120,9 @@ class MigrateRedis extends RedisModel{
                                (function (sessionId, userId) {
                                    let business_type = session.business_type;
                                    if (!session.business_type && session.type == SESSION_TYPE.MUC) {
                                        business_type = 2
                                    } else if (!session.business_type && session.type != SESSION_TYPE.MUC) {
                                        business_type = 1
                                    if (session.type == SESSION_TYPE.MUC) {
                                        business_type = 2;
                                    }
                                    let redisSession = [
                                        "id", session.id,
                                        "name", session.name,

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

@ -71,8 +71,6 @@ class Sessions extends RedisModel {
                        }
                        ModelUtil.emitError(self.eventEmitter, {message: err, status: -1}, null);
                    } else {
                        //更新成为进行中的会话
                       // self.updateSessionStatus(sessionId,0);
                        if (handler) {
                            handler(null, res);
                            return;
@ -101,7 +99,6 @@ class Sessions extends RedisModel {
        for (let i in participantArray) {
            participantIdArray.push(participantArray[i].split(":")[0]);
        }
        if (type == SESSION_TYPES.P2P || type == SESSION_TYPES.SYSTEM) {
            if (sessionId) {
                callBusinessType(sessionId);
@ -160,7 +157,6 @@ class Sessions extends RedisModel {
            redis.hmsetAsync(sessionKey, session).then(function () {
                Participants.saveParticipantsToRedis(sessionId, participantArray, createDate, function (res) {
                    handler(null, session);
                    //messages.saveMessageToRedisFromCreateSession(sessionId, messageId, message);
                });
            })
        }
@ -411,7 +407,7 @@ class Sessions extends RedisModel {
                                            if (res.length != 0 && res[0].sex) {
                                                sex = res[0].sex;
                                            }
                                            //end
                                            sessionList.push({
                                                id: sessionId,
                                                name: sessionName,
@ -446,7 +442,6 @@ class Sessions extends RedisModel {
                    functionList.push(fun);
                }
                async.waterfall(functionList);
            }
        ]);
@ -839,7 +834,7 @@ class Sessions extends RedisModel {
            if (err) {
                if(handler)
                {
                    handler(err,res)
                    handler(err,res);
                    return;
                }
                ModelUtil.logError("getAllSessionsUnreadMessageCount is failed", err);
@ -849,7 +844,7 @@ class Sessions extends RedisModel {
            if (res.length == 0) {
                if(handler)
                {
                    handler(err,count)
                    handler(err,count);
                    return;
                }
                ModelUtil.emitOK(self.eventEmitter, {count: count});
@ -859,9 +854,8 @@ class Sessions extends RedisModel {
            for (let j in res) {
                if (res[j].type == SESSION_TYPES.SYSTEM) {
                    if (j == res.length - 1) {
                        if(handler)
                        {
                            handler(err,count)
                        if(handler){
                            handler(err,count);
                            return;
                        }
                        ModelUtil.emitOK(self.eventEmitter, {count: count, patient: patientCount, doctor: doctorCount});
@ -877,7 +871,7 @@ class Sessions extends RedisModel {
                if (err) {
                    if(handler)
                    {
                        handler(err,count)
                        handler(err,count);
                        return;
                    }
                    ModelUtil.logError("getAllSessionsUnreadMessageCount is failed", err);
@ -1133,7 +1127,9 @@ class Sessions extends RedisModel {
        let sessionType = 0;
        let sessionName = "";
        message.id = messageId;
        if(!message.timestamp){
            message.timestamp = new Date();
        }
        // 发送成员必须处于会话中
        participants.existsParticipant(sessionId, message.sender_id, function (err, res) {
            if (res) {
@ -1142,19 +1138,22 @@ class Sessions extends RedisModel {
                    sessionName = res[1];
                    if (!sessionType || !sessionName) {
                        logger.error("Unknown session key " + session_key);
                        if (handler) {handler(new Error("Unknown session key " + session_key));return;} ;
                        if (handler) {
                            handler(new Error("Unknown session key " + session_key));return;
                        };
                    }
                }).then(function (res) {
                    // 消息数据双写,并更新用户最后消息获取时间,会话新状态等
                    messages.saveMessageToRedis(sessionId, sessionType, messageId, message);
                    messages.saveMessageToMysql(sessionId, sessionType, messageId, message);
                    // 更新会话最新状态及成员最后一次消息获取时间
                    Sessions.updateParticipantLastFetchTime(sessionId, message.sender_id, message.timestamp.getTime());
                    Messages.updateLastContent(session_key, sessionType, sessionName, message);
                    SessionRepo.updateSessionLastStatus(message.sender_id, message.sender_name, message.timestamp, message.content, message.content_type, sessionId);
                    if (handler) {handler(null, messageId);return;}
                    if (handler) {
                        handler(null, messageId);
                        return;
                    }
                }).then(function (res) {
                    // 推送消息
                    ParticipantRepo.findIds(sessionId, function (err, res) {
@ -1171,7 +1170,8 @@ class Sessions extends RedisModel {
                        }
                    })
                }).catch(function (err) {
                    if (handler) { handler(err, messageId);return;}
                    log.error(err);
                    return;
                })
            } else {
                if (handler){ handler("用户不在此会话当中!", messageId);return;}
@ -1255,7 +1255,7 @@ class Sessions extends RedisModel {
                ParticipantRepo.updateLastFetchTime(new Date(score), sessionId, userId, function (err, res) {
                    if (err) {
                        logger.error("Update participant last fetch time failed: ", err);
                    }
                }
                });
            })
            .catch(function (err) {

+ 7 - 7
src/server/models/sessions/topics.js

@ -163,18 +163,18 @@ class Topics extends RedisModel {
        }
        let sessions = new Sessions();
        let date = new Date();
        sessions.createSession(sessionId, messages.sender_name, sessionType, pars, function (err, res) {
            sessionId = res.id;
            self.saveTopicToRedis(topicName, topicId, sessionId, messages, date, function (err, res) {
        sessions.createSession(sessionId, messages.sender_name, sessionType, pars, function (err, session) {
            sessionId = session.id;
            self.saveTopicToRedis(topicName, topicId, sessionId, messages, date, function (err, startMsgId) {
                if (err) {
                    ModelUtil.emitOK(self.eventEmitter, {status: -1, message: "议题创建失败!"});
                    return;
                }
                //返回给前端
                ModelUtil.emitOK(self.eventEmitter, {status: 200, message: "议题创建成功!", start_msg_id: res});
                ModelUtil.emitOK(self.eventEmitter, {status: 200, message: "议题创建成功!", start_msg_id: startMsgId});
                sessions.updateSessionStatus(sessionId,0);
                //执行数据库操作
                self.saveTopicToMySQL(topicName, topicId, sessionId, res, date, messages.description, TOPIC_STATUS.NEW, function (err, res) {
                self.saveTopicToMySQL(topicName, topicId, sessionId, startMsgId, date, messages.description, TOPIC_STATUS.NEW, function (err, res) {
                    if (err) {
                        ModelUtil.logError("Save topic to mysql failed", err);
                    }
@ -231,7 +231,7 @@ class Topics extends RedisModel {
            msg.sender_name = messages.sender_name;
            msg.content_type = 6;
            msg.content = messages.description;
            msg.timestamp = new Date(new Date().getTime());
            msg.timestamp = new Date();
            sessions.saveMessageByTopic(msg, sessionId, function (err, msgId) {
                if (messages.img) {
                    setTimeout(function(){
@ -252,7 +252,7 @@ class Topics extends RedisModel {
                msgimg.sender_name = messages.sender_name;
                msgimg.content_type = 2;
                msgimg.content = imgs[j];
                msgimg.timestamp = new Date(new Date().getTime());
                msgimg.timestamp = new Date();
                sessions.saveMessageByTopic(msgimg, sessionId, function (err, msgId) {
                    if (err) {
                        log.info("send create img error " + imgs[j]);

+ 1 - 9
src/server/models/user/users.js

@ -155,18 +155,11 @@ class Users extends RedisModel {
                            redisConn.zscore(REDIS_KEYS.Sessions, session.id, function (err, res) {
                                if (res != null) return;    // 已经缓存过的会话不再缓存
                                (function (sessionId, userId) {
                                    let business_type = session.business_type;
                                    if (!session.business_type && session.type == SESSION_TYPE.MUC) {
                                        business_type = 2
                                    } else if (!session.business_type && session.type != SESSION_TYPE.MUC) {
                                        business_type = 1
                                    }
                                    let redisSession = [
                                        "id", session.id,
                                        "name", session.name,
                                        "type", session.type,
                                        "business_type", business_type,
                                        "business_type", session.business_type,
                                        "last_sender_id", session.last_sender_id||"",
                                        "last_sender_name", session.last_sender_name||"",
                                        "last_content_type", session.last_content_type||"",
@ -175,7 +168,6 @@ class Users extends RedisModel {
                                        "create_date", ObjectUtil.timestampToLong(session.create_date),
                                        "status",session.status==null?0:session.status
                                    ];
                                    // cache sessions
                                    redisConn.multi()
                                        .zadd(REDIS_KEYS.Sessions, lastLoginTime.getTime(), sessionId)                                           // 会话的最后活动时间设置为此用户的登录时间

+ 1 - 1
src/server/repository/mysql/session.repo.js

@ -39,7 +39,7 @@ class SessionRepo {
    static findAll(userId, handler) {
        let sql = "select session_id from " + DB_TABLES.Participants + " w where w.participant_id = ? and participant_role =0  group by w.session_id";
        let sys_session = "select session_id from " + DB_TABLES.Participants + " w where w.participant_id = 'system' and participant_role =0  group by w.session_id";
        let sessionSQL = "select id, name, type, create_date, last_sender_id, last_sender_name, last_content_type, last_content, last_message_time,status from "
        let sessionSQL = "select id, name, type, create_date,business_type, last_sender_id, last_sender_name, last_content_type, last_content, last_message_time,status from "
            + DB_TABLES.Sessions + " s where s.id in(" + sql + ") and s.id not in ("+sys_session+")";
        ImDb.execQuery({
            "sql": sessionSQL,