Browse Source

消息发送整改

8 years ago
parent
commit
1337866c81

+ 21 - 0
src/server/endpoints/v2/session.endpoint.js

@ -185,6 +185,27 @@ router.put(APIv2.Sessions.Participant, function (req, res) {
    participants.addUser(sessionId, user);
});
/**
 * 增加成员
 * user_id:增加的人员
 * old_user_id:删除的人员
 * session_id 会话ID
 */
router.post(APIv2.Sessions.ParticipantUpdate, function (req, res) {
    let payload = req.body;
    let testing = ObjectUtil.fieldsCheck(payload, 'user_id', 'old_user_id', 'session_id');
    if (!testing.pass) {
        throw testing.message;
    }
    let participants = new Participants();
    ControllerUtil.regModelEventHandler(participants, res);
    participants.updateSessionUser(payload.user_id,payload.old_user_id,payload.session_id);
});
/**
 * 移除成员
 * user:移除的人员

+ 1 - 0
src/server/include/endpoints.js

@ -43,6 +43,7 @@ const APIv2 = {
        SessionUnreadMessageCount: '/:session_id/unread_message_count', // 指定会话的未读消息数
        SessionUnreadMessages: '/:session_id/messages/unread',           // 会话未读消息
        ParticipantUpdate:'/:session_id/participant/update',//更新成员=删除旧成员,新增新成员
        Participants: '/:session_id/participants',                      // 会话所有成员
        ParticipantsAvatar: '/:session_id/participants/avatars',        // 会话所有成员头像
        Participant: '/:session_id/participants/:participant_id',       // 会话单个成员

+ 1 - 2
src/server/models/messages/messages.js

@ -175,7 +175,7 @@ class Messages extends RedisModel {
     * @param businessType
     * @returns {*}
     */
    static updateLastContent(sessionKey, sessionType, name, message, businessType) {
    static updateLastContent(sessionKey, sessionType, name, message) {
        redis.hmsetAsync(sessionKey,
            "create_date", message.timestamp.getTime(),
            "last_content", message.content,
@ -198,7 +198,6 @@ class Messages extends RedisModel {
        if (name != null) redis.hsetAsync(sessionKey, "name", name);
        if (sessionType != null) redis.hsetAsync(sessionKey, "type", sessionType);
        if (businessType != null) redis.hsetAsync(sessionKey, "business_type", businessType);
    }
    /**

+ 53 - 4
src/server/models/sessions/participants.js

@ -7,7 +7,7 @@ let RedisModel = require('./../redis.model.js');
let ModelUtil = require('../../util/model.util');
let RedisClient = require('../../repository/redis/redis.client.js');
let ParticipantRepo = require('../../repository/mysql/participant.repo');
let SessionRepo = require('../../repository/mysql/session.repo');
let log = require('../../util/log.js');
let redis = RedisClient.redisClient().connection;
@ -126,6 +126,7 @@ class Participants extends RedisModel {
                handler(true);
            })
            .catch(function (ex) {
                handler(false);
                log.error("Save participants to redis failed: ", ex);
            });
    }
@ -147,7 +148,7 @@ class Participants extends RedisModel {
     * @param sessionId
     * @param userId
     */
    removeUser(sessionId, userId) {
    removeUser(sessionId, userId,handler) {
        let self = this;
        let participants_key = RedisModel.makeRedisKey(REDIS_KEYS.SessionParticipants, sessionId);
        let user_session_key = RedisModel.makeRedisKey(REDIS_KEYS.UsersSessions, userId);
@ -159,9 +160,15 @@ class Participants extends RedisModel {
            .execAsync()
            .then(function (res) {
                self.deleteUserFromMysql(sessionId, userId);
                if(handler){
                    handler(null,true);return;
                }
                ModelUtil.emitOK(self.eventEmitter, {status:200,message:"成员删除成功!"});
            })
            .catch(function (err) {
                if(handler){
                    handler(err,false);return;
                }
                log.error("成员删除失败: ", err);
                ModelUtil.emitError(self.eventEmitter, {status:-1,message: "成员删除失败: " + err});
            });
@ -187,19 +194,28 @@ class Participants extends RedisModel {
     * @param sessionId
     * @param user
     */
    addUser(sessionId, user) {
    addUser(sessionId, user,role,handler) {
        let self = this;
        let users = [user+":"+0];
        let users = [user+":"+role||0];
        Participants.saveParticipantsToRedis(sessionId, users, new Date(), function (res) {
            if (res) {
                Participants.saveParticipantsToMysql(sessionId, users,function(err,res){
                    if(err){
                        if(handler){
                            handler(err,false);return;
                        }
                        ModelUtil.emitOK(self.eventEmitter, {status:-1,message: "成员添加失败"});
                    }else{
                        if(handler){
                            handler(null,true);return;
                        }
                         ModelUtil.emitOK(self.eventEmitter, {status:200,message: "成员添加成功!"});
                    }
                });
            } else {
                if(handler){
                    handler(null,true);return;
                }
                ModelUtil.emitOK(self.eventEmitter, {status:-1,message: "成员添加失败"});
            }
        })
@ -213,6 +229,39 @@ class Participants extends RedisModel {
    deleteUserFromMysql(sessionId, user) {
        ParticipantRepo.deleteUserFromMysql(sessionId, user);
    }
    updateSessionUser(userId,oldUserId,sessionId){
        let self = this;
        let participantsRoleKey = RedisModel.makeRedisKey(REDIS_KEYS.SessionParticipantsRole, sessionId);
        SessionRepo.findOne(sessionId,function(err,res){
            if(err){
                ModelUtil.emitOK(self.eventEmitter, {status:-1,message: "会话查询失败!"});
                return;
            }
            if(res.length!=1){
                ModelUtil.emitOK(self.eventEmitter, {status:200,message: "用户未创建咨询!"});
                return;
            }else{
                let session = res[0];
                redis.hgetAsync(oldUserId).then(function(role){
                    self.addUser(sessionId.userId,role,function(err,addResult){
                        if(err){
                            ModelUtil.emitOK(self.eventEmitter, {status:-1,message: "会话成员添加失败!"});
                            return;
                        }
                        self.removeUser(sessionId,oldUserId,function(err,res){
                            if(err){
                                ModelUtil.emitOK(self.eventEmitter, {status:-1,message: "会话成员移除失败!"});
                                return;
                            }else{
                                ModelUtil.emitOK(self.eventEmitter, {status:200,message: "成员变更成功!"});
                            }
                        })
                    });
                })
            }
        })
    }
}
// Expose class