Explorar o código

成员替换,创建会话,人员先删除后写入

%!s(int64=8) %!d(string=hai) anos
pai
achega
77879d7b73

+ 39 - 16
src/server/models/sessions/participants.js

@ -102,10 +102,8 @@ class Participants extends RedisModel {
        participantsArray.forEach(function (item) {
            let tokens = item.split(":");
            userSessions[RedisModel.makeRedisKey(REDIS_KEYS.UserSessions, tokens[0])] = [createDate.getTime(), sessionId];
            sessionParticipants.push(createDate.getTime());
            sessionParticipants.push(tokens[0]);
            sessionParticipantsRoles.push(tokens[0], tokens[1]);
        });
@ -142,6 +140,22 @@ class Participants extends RedisModel {
        return ParticipantRepo.saveParticipantsToMysql(sessionId, users, handler);
    }
    static removeUserFromRedis(sessionId,userId,handler){
        let self = this;
        let participants_key = RedisModel.makeRedisKey(REDIS_KEYS.SessionParticipants, sessionId);
        let user_session_key = RedisModel.makeRedisKey(REDIS_KEYS.UserSessions, userId);
        let participants_role_key = RedisModel.makeRedisKey(REDIS_KEYS.SessionParticipantsRole, sessionId);
        redis.multi()
            .zrem(participants_key, userId)
            .zrem(user_session_key, sessionId)
            .hdel(participants_role_key,userId)
            .execAsync()
            .then(function (res) {
                handler(null,true);return;
            }).catch(function(err){
               handler(err,false);return;
            })
    }
    /**
     * 移除成员
@ -243,25 +257,34 @@ class Participants extends RedisModel {
                ModelUtil.emitOK(self.eventEmitter, {status:200,message: "用户未创建咨询!"});
                return;
            }else{
                let session = res[0];
                redis.hgetAsync(participantsRoleKey,oldUserId).then(function(role){
                    if(!role)role = 0;
                    self.addUser(session.id,userId,role,function(err,addResult){
                if(oldUserId){
                    let session = res[0];
                    redis.hgetAsync(participantsRoleKey,oldUserId).then(function(role){
                        if(!role)role = 0;
                        self.addUser(session.id,userId,role,function(err,addResult){
                            if(err){
                                ModelUtil.emitOK(self.eventEmitter, {status:-1,message: "会话成员添加失败!"});
                                return;
                            }
                            self.removeUser(session.id,oldUserId,function(err,res){
                                if(err){
                                    ModelUtil.emitOK(self.eventEmitter, {status:-1,message: "会话成员移除失败!"});
                                    return;
                                }else{
                                    ModelUtil.emitOK(self.eventEmitter, {status:200,message: "成员变更成功!"});
                                    return;
                                }
                            })
                        });
                    })
                }else{
                    self.addUser(session.id,userId,"0",function(err,addResult){
                        if(err){
                            ModelUtil.emitOK(self.eventEmitter, {status:-1,message: "会话成员添加失败!"});
                            return;
                        }
                        self.removeUser(session.id,oldUserId,function(err,res){
                            if(err){
                                ModelUtil.emitOK(self.eventEmitter, {status:-1,message: "会话成员移除失败!"});
                                return;
                            }else{
                                ModelUtil.emitOK(self.eventEmitter, {status:200,message: "成员变更成功!"});
                                return;
                            }
                        })
                    });
                })
                }
            }
        })
    }

+ 5 - 6
src/server/models/sessions/sessions.js

@ -200,12 +200,11 @@ class Sessions extends RedisModel {
            SessionRepo.findOne(sessionId, function (err, res) {
                if (res.length > 0) {//已经存在
                    for (let i in participantArray) {
                        ParticipantRepo.updateParticipant(sessionId,participantArray[i].split(":")[0],participantArray[i].split(":")[1],function(err,ures){
                            if(err){
                                logger.error("updateParticipant error"+err);
                                return;
                            }
                            handler(null, res[0]);
                        //更新成员
                        Participants.deleteAllUser(sessionId,function(err,res){
                            Participants.saveParticipantsToMysql(sessionId, participantArray, function (err, update) {
                                handler(null, res[0]);
                            })
                        })
                    }
                } else {

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

@ -231,6 +231,17 @@ class ParticipantRepo {
            }
        });
    }
    static deleteAllUser(sessionId,handler) {
        let sql = "delete from " + DB_TABLES.Participants + " where session_id=? ";
        ImDb.execQuery({
            "sql": sql,
            "args": [sessionId],
            "handler": handler||function(err,res){
                log.info("deleteUserFromMysql");
            }
        });
    }
}
module.exports = ParticipantRepo;