瀏覽代碼

Merge branch 'feature-refactor' of http://192.168.1.220:10080/Amoy/im.doctor into feature-refactor

Conflicts:
	src/server/models/sessions/sessions.js
8 年之前
父節點
當前提交
c8a3d7eb44

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

@ -220,6 +220,18 @@ router.post(APIv2.Sessions.Messages, function (req, res) {
    sessions.saveMessageBySession(req.params.session_id, payload);
});
router.post(APIv2.Sessions.TopicMessages,function(req,res){
    let payload = req.body;
    let testing = ObjectUtil.fieldsCheck(payload, "sender_id", "sender_name", "content_type", "content");
    if (!testing.pass) {
        throw {httpStatus: 406, message: testing.message}
    }
    let sessions = new Sessions();
    ControllerUtil.regModelEventHandler(sessions, res);
    payload.timestamp = new Date();
    sessions.sendTopicMessages(req.params.topic_id, payload);
})
/**
 * 获取消息
 *

+ 5 - 5
src/server/endpoints/v2/topic.endpoint.js

@ -19,8 +19,8 @@ const APIv2 = require('../../include/endpoints').APIv2;
/**
 * 获取用户的聊天列表
 */
router.get(APIv2.Sessions.Topics, function (req, res) {
    let topicId = req.query.topicId;
router.get(APIv2.Sessions.TopicMessages, function (req, res) {
    let topicId = req.query.topic_id;
    let topic = new Topics();
    ControllerUtil.regModelEventHandler(topic, res);
@ -61,12 +61,12 @@ router.put(APIv2.Sessions.Topics, function (req, res) {
    let topic = new Topics();
    ControllerUtil.regModelEventHandler(topic, res);
    topic.updateTopic(topicId, jsonValue);
    topic.updateTopic(topicId, JSON.parse(jsonValue));
});
router.get(APIv2.Sessions.TopicEnded, function (req, res) {
    let sessionId = req.session_id;
    let topicId = req.topic_id;
    let sessionId = req.params.session_id;
    let topicId = req.params.topic_id;
    let topic = new Topics();

+ 2 - 2
src/server/include/endpoints.js

@ -34,8 +34,8 @@ const APIv2 = {
        Topic: '/:session_id/topics/:topic_id',                          // 议题,指定ID的议题将返回其信息
        TopicEnded: '/:session_id/topics/:topic_id/ended',              // 议题是否已结束,若top_id为current,则检查最后一个议题的状态
        TopicList:'/topics',
        Messages: '/:session_id/messages',                              // 会话消息
        TopicMessages:'/topic/:topic_id/messages',
        Messages: '/:session_id/messages',                             // 会话消息
        MessagesByTopic: '/:session_id/topics/:topic_id/messages',      // 议题消息
        Message: '/:session_id/messages/:message_id',                   // 单条消息

+ 14 - 9
src/server/models/sessions/sessions.js

@ -203,9 +203,9 @@ class Sessions extends RedisModel {
                            let session = res[0];
                            let role = res[1];
                            let lastFetchTime = res[2];
                            if (businessType && businessType != session.business_type) {
                                logger.info("businessType:" + businessType + "<>" + session.business_type);
                            } else {
                            if(!role)role =0;
                            if(!lastFetchTime)lastFetchTime=new Date().getTime();
                            console.log(lastFetchTime+":"+sessionId);
                                // 计算未读消息数
                                let messagesByTimestampKey = RedisModel.makeRedisKey(REDIS_KEYS.MessagesByTimestamp, sessionId);
                                redis.zcountAsync(messagesByTimestampKey, lastFetchTime, new Date().getTime())
@ -228,12 +228,11 @@ class Sessions extends RedisModel {
                                            ModelUtil.emitOK(self.eventEmitter, sessionList);
                                        }
                                    })
                        })
                        .catch(function (err) {
                            logger.error("Get sessions failed: ", ex);
                                }).catch(function (err) {
                                    logger.error("Get sessions failed: ", ex);
                            ModelUtil.emitError(self.eventEmitter, "Get sessions failed: " + err);
                        });
                                    ModelUtil.emitError(self.eventEmitter, "Get sessions failed: " + err);
                                });
                });
            }
        ]);
@ -549,7 +548,13 @@ class Sessions extends RedisModel {
            }
        });
    }
    sendTopicMessages(topicId,message){
        let self = this;
        let topicKey = RedisModel.makeRedisKey(REDIS_KEYS.Topic, topicId);
        redis.hgetallAsync(topicKey).then(function (topic) {
            self.saveMessageBySession(topic.session_id,message);
        })
    }
    /**
     * 保存消息
     *

+ 15 - 6
src/server/models/sessions/topics.js

@ -33,7 +33,7 @@ class Topics extends RedisModel {
        if(!pagesize)pagesize =10;
        pagesize = parseInt(pagesize);
        if(!sessionType) sessionType = SESSION_TYPES.MUC;
        SessionRepo.findAllByType(user,sessionType,page,pagesize,function(err,res){
        SessionRepo.findAllByType(user,sessionType,function(err,res){
            if(err){
                ModelUtil.emitError(self.eventEmitter, "获取列表失败"+err);
            }else if(res&&res.length==0){
@ -44,12 +44,13 @@ class Topics extends RedisModel {
                sessionIds.push(res[j].id);
            }
            var test = new Map();
            TopicsRepo.findAllBySessionIdsAndStatus(sessionIds,status,function(err,res){
            TopicsRepo.findAllBySessionIdsAndStatus(sessionIds,status,page,pagesize,function(err,res){
                if(err){
                    ModelUtil.emitError(self.eventEmitter, "获取列表失败"+err);
                }
                else if(res&&res.length==0){
                    ModelUtil.emitOK(self.eventEmitter, []);
                }else{
                    for(var j = 0;j<res.length;j++){
                        callAmount(j,res,res[j]);
@ -247,7 +248,7 @@ class Topics extends RedisModel {
    isTopicEnded(sessionId, topicId, handler) {
        let self = this;
        if (topicId === "current") {
        if (topicId == "current") {
            TopicsRepo.findLastTopicStatus(sessionId, callback);
        } else {
            TopicsRepo.findTopicStatus(topicId, callback);
@ -258,10 +259,10 @@ class Topics extends RedisModel {
                handler != null ? handler(err, res) : ModelUtil.emitError(self.eventEmitter, err);
            } else {
                if (null == res) {
                    handler != null ? handler(err, res) : ModelUtil.emitDataNotFound(self.eventEmitter, "Topic not found.");
                    handler != null ? handler(err, res) : ModelUtil.emitOK(self.eventEmitter,{});
                } else {
                    let ended = res[0].status == TOPIC_STATUS.ENDED;
                    handler != null ? handler(err, res) : ModelUtil.emitOK(self.eventEmitter, ended);
                    handler != null ? handler(err, res) : ModelUtil.emitOK(self.eventEmitter, res[0]);
                }
            }
        }
@ -308,6 +309,7 @@ class Topics extends RedisModel {
    }
    updateTopic(topicId, valueJson) {
        let  self = this;
        let topickey = RedisModel.makeRedisKey(REDIS_KEYS.Topic, topicId);
        var dataArray = [];
        for (var j in valueJson) {
@ -316,9 +318,16 @@ class Topics extends RedisModel {
        }
        redis.hmsetAsync(topickey, dataArray).then(function (res) {
            TopicsRepo.updateTopics(topicId, valueJson,function (err,res) {
                if(!err){
                    ModelUtil.emitOK(self.eventEmitter, {"status": 200});
                }else{
                    ModelUtil.emitOK(self.eventEmitter, {"status": -1});
                }
            });
        });
        TopicsRepo.updateTopics(topicId, valueJson);
    }
}

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

@ -50,13 +50,13 @@ class SessionRepo {
     * @param userId
     * @param handler
     */
    static findAllByType(userId,type,page,pagesize, handler) {
    static findAllByType(userId,type, handler) {
        let sql = "select session_id from " + DB_TABLES.Participants + " w where w.participant_id = ? and type=? 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 from "
            + DB_TABLES.Sessions + " s where s.id in(" + sql + ") limit ?,?";
            + DB_TABLES.Sessions + " s where s.id in(" + sql + ") ";
        ImDb.execQuery({
            "sql": sessionSQL,
            "args": [userId,type,page,pagesize],
            "args": [userId,type],
            "handler": handler
        });
    }

+ 8 - 5
src/server/repository/mysql/topics.repo.js

@ -30,7 +30,7 @@ class TopicRepo {
    }
    static findLastTopicStatus(sessionId, handler) {
        let sql = "select id from " + DB_TABLES.Topics + " where session_id = ? order by id desc limit 0, 1";
        let sql = "select id from " + DB_TABLES.Topics + " where  session_id = ? order by create_time desc limit 0, 1";
        ImDb.execQuery({
            sql: sql,
            args: [sessionId],
@ -71,12 +71,12 @@ class TopicRepo {
        });
    }
    static findAllBySessionIdsAndStatus(sessionIds,status,handler){
    static findAllBySessionIdsAndStatus(sessionIds,status,page,pagesize,handler){
        let sql = "select id, session_id, name, create_time, end_by, end_time," +
            " start_message_id, end_message_id, description, status from " + DB_TABLES.Topics + " where session_id in ('"+sessionIds+"') and status in ("+status+") order by status desc";
            " start_message_id, end_message_id, description, status from " + DB_TABLES.Topics + " where session_id in ('"+sessionIds+"') and status in ("+status+") order by status desc limit ?,? ";
        ImDb.execQuery({
            sql: sql,
            args: [],
            args: [page,pagesize],
            handler: handler
        });
@ -141,7 +141,7 @@ class TopicRepo {
     * @param topicId
     * @param jsonValue
     */
    static updateTopics(topicId, jsonValue) {
    static updateTopics(topicId, jsonValue,handler) {
        var values = [];
        let sql = "update topics set ";
        var key =[];
@ -160,6 +160,9 @@ class TopicRepo {
                    log.error("updateTopis is fail error: " + err);
                } else {
                    log.info("updateTopis is success");
                    if(handler){
                        handler(err,res);
                    }
                }
            }
        });