Selaa lähdekoodia

查询接口修改

8 vuotta sitten
vanhempi
commit
bf8ec2b526

+ 13 - 2
src/server/endpoints/v2/topic.endpoint.js

@ -46,12 +46,23 @@ router.get(APIv2.Sessions.Topic, function (req, res) {
router.get(APIv2.Sessions.TopicList, function (req, res) {
    let user = req.query.user;
    let status = req.query.status;
    let type = req.query.type;//SESSION_TYPES
    let reply = req.query.reply;//SESSION_TYPES
    let page = req.query.page;
    let pagesize = req.query.pagesize;
    let topic = new Topics();
    ControllerUtil.regModelEventHandler(topic, res);
    topic.getTopics(user,status,page,pagesize,type);
    let users = user.split(",");
    topic.findAllByUserAndReplyAndStatus(users,reply,status,page,pagesize);
});
router.get(APIv2.Sessions.TopicReplyCount, function (req, res) {
    let user = req.query.user;
    let status = req.query.status;
    let reply = req.query.reply;
    let topic = new Topics();
    ControllerUtil.regModelEventHandler(topic, res);
    let users = user.split(",");
    topic.findReplyCount(users,reply,status);
});

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

@ -196,6 +196,7 @@ const DB_TABLES = {
    Sessions: "sessions",
    Topics: "topics",
    StickySessions: "sticky_sessions",
    WlyyConsult:"wlyy_consults",
    sessionTypeToTableName: function (sessionType) {
        if (sessionType == SESSION_TYPES.SYSTEM)

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

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

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

@ -98,6 +98,40 @@ class Topics extends RedisModel {
        })
    }
    /**
     * 根据状态和回复获取列表,已结束的不关心是否回复,所以传入status=10不reply无效
     * @param user
     * @param reply
     * @param status
     * @param page
     * @param pagesize
     */
    findAllByUserAndReplyAndStatus(users,reply, status, page, pagesize) {
        let self = this;
        page = (page - 1 < 0 ? 0 : page - 1) * pagesize;
        if (!pagesize) pagesize = 10;
        pagesize = parseInt(pagesize);
        TopicsRepo.findAllByUserAndReplyAndStatus(users,reply,status, page, pagesize, function (err, res) {
            if (err) {
                ModelUtil.emitError(self.eventEmitter, "获取列表失败" + err);
            }
            ModelUtil.emitOK(self.eventEmitter, res);
        })
    }
    findReplyCount(users,reply, status) {
        let self = this;
        TopicsRepo.findReplyCount(users,reply,status, function (err, res) {
            if (err) {
                ModelUtil.emitError(self.eventEmitter, "获取列表失败" + err);
            }
            ModelUtil.emitOK(self.eventEmitter, res);
        })
    }
    /**
     * 根据topicId获取对应的消息
     * @param topicId

+ 61 - 0
src/server/repository/mysql/topics.repo.js

@ -58,6 +58,67 @@ class TopicRepo {
    }
    static findAllByUserAndReplyAndStatus(userId,reply,status,page,size,handler){
        let sql = "";
        var args =[];
        if(status==10){
            args.push(userId,status,page,size);
            sql =  "SELECT t.*, s.avatar,s.sex,s.birthdate, s.`name` AS patient_name FROM "+
                  DB_TABLES.Topics+" t,"+DB_TABLES.Participants+" p,"+DB_TABLES.Doctors+" d,"+DB_TABLES.WlyyConsult+" c,"+DB_TABLES.Patients+" s "+
                  "WHERE d.id = p.participant_id AND c.id = t.id AND c.patient = s.id AND p.session_id = t.session_id "+
                  "AND d.id in (?) AND t. STATUS = ? ORDER BY create_time DESC limit ?,?";
        }else{
            args.push(userId,status,reply,page,size);
            sql =  "SELECT t.*, s.avatar,s.sex,s.birthdate, s.`name` AS patient_name FROM "+
                DB_TABLES.Topics+" t,"+DB_TABLES.Participants+" p,"+DB_TABLES.Doctors+" d,"+DB_TABLES.WlyyConsult+" c,"+DB_TABLES.Patients+" s "+
                "WHERE d.id = p.participant_id AND c.id = t.id AND c.patient = s.id AND p.session_id = t.session_id "+
                "AND d.id in (?) AND t. STATUS = ? and t.reply=? ORDER BY create_time DESC limit ?,?";
        }
        ImDb.execQuery({
            sql: sql,
            args: args,
            handler: function (err, res) {
                handler(err, res);
            }
        });
    }
    static findReplyCount(userId,reply,status,handler){
        let sql = "";
        var args =[];
        if(status==10){
            args.push(userId,status);
            sql =  "SELECT count(1)  as count FROM "+
                DB_TABLES.Topics+" t,"+DB_TABLES.Participants+" p,"+DB_TABLES.Doctors+" d,"+DB_TABLES.WlyyConsult+" c,"+DB_TABLES.Patients+" s "+
                "WHERE d.id = p.participant_id AND c.id = t.id AND c.patient = s.id AND p.session_id = t.session_id "+
                "AND d.id in (?) AND t. STATUS = ? ";
        }else if(status){
            args.push(userId,status,reply);
            sql =  "SELECT count(1) as count FROM "+
                DB_TABLES.Topics+" t,"+DB_TABLES.Participants+" p,"+DB_TABLES.Doctors+" d,"+DB_TABLES.WlyyConsult+" c,"+DB_TABLES.Patients+" s "+
                "WHERE d.id = p.participant_id AND c.id = t.id AND c.patient = s.id AND p.session_id = t.session_id "+
                "AND d.id in (?) AND t. STATUS = ? and t.reply=? ";
        }else{
            args.push(userId);
            sql =  "SELECT count(1) as count FROM "+
                DB_TABLES.Topics+" t,"+DB_TABLES.Participants+" p,"+DB_TABLES.Doctors+" d,"+DB_TABLES.WlyyConsult+" c,"+DB_TABLES.Patients+" s "+
                "WHERE d.id = p.participant_id AND c.id = t.id AND c.patient = s.id AND p.session_id = t.session_id "+
                "AND d.id in (?)";
        }
        ImDb.execQuery({
            sql: sql,
            args: args,
            handler: function (err, res) {
                if(err){
                    log.error("get topic count error");
                    handler(err,0);
                    return;
                }
                handler(err, res[0].count);
            }
        });
    }
    static findTopicStatus(topicId, handler) {
        let sql = "select id, name, description, status from " + DB_TABLES.Topics + " where id = ?";