Browse Source

修改添加会话成员方法以及添加会话,消息类型,纠正无会话就聊天的bug

LiTaohong 6 years ago
parent
commit
7a819fa27b

+ 13 - 3
src/server/include/commons.js

@ -33,7 +33,9 @@ const SESSION_TYPES = {
    GROUP: 3,           // 固定组
    DISCUSSION: 4,       // 临时讨论组
    SPECIALISTGROUP: 5,       // 专科医生和家庭医生的固定组
    PRESCRIPTION: 8       // 续方
    PRESCRIPTION: 8,   // 续方
    PRESCRIPTION_HOSPITAL:9, //医院在线复诊
    ONDOOR_NURSING:11   //上门护理
};
exports.SESSION_TYPES = SESSION_TYPES;
@ -77,7 +79,7 @@ exports.PARTICIPANT_ROLES = PARTICIPANT_ROLES;
 *  消息内容类型。
 */
const CONTENT_TYPES = {
    PlainText: 1,   // 信息
    PlainText: 1,   // 文本信息
    Image: 2,       // 图片信息
    Audio: 3,       // 语音信息
    Article: 4,     // 文章信息
@ -90,6 +92,8 @@ const CONTENT_TYPES = {
    PrescriptionCheck:15,//续方审核消息消息
    PrescriptionBloodStatus:16,//续方咨询血糖血压咨询消息
    PrescriptionFollowupContent:17,//续方咨询随访问卷消息
    MapMsg:18,//地图消息
    DoorOrderBriefMsg:19,//服务工单格式化消息
    typeToDescription: function (type, defaultDescription) {
        if (CONTENT_TYPES.Image == type) {
            return '[图片]';
@ -229,6 +233,10 @@ const DB_TABLES = {
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.SPECIALISTGROUP)
            return DB_TABLES.GroupMessages;
        else if (sessionType == SESSION_TYPES.PRESCRIPTION_HOSPITAL)
            return DB_TABLES.MucMessages;
        else if (sessionType == SESSION_TYPES.ONDOOR_NURSING)
            return DB_TABLES.MucMessages;
        else throw {message: "Unknown session type"};
    }
};
@ -240,7 +248,9 @@ const MESSAGE_BUSSINESS_TYPE = {
    D_CT_02: "D_CT_02",//指定咨询, 您有新的消息
    D_CT_03: "D_CT_03",//名医咨询, 您有新的名医咨询
    D_CT_04: "D_CT_04",//名医咨询, 您有新的名医咨询
    D_CT_05: "D_CT_05"//续方咨询, 您有新的续方咨询
    D_CT_05: "D_CT_05",//续方咨询, 您有新的续方咨询
    D_CT_06: "D_CT_06",//在线复诊咨询, 您有新的复诊咨询
    D_CT_07: "D_CT_07"//上门服务咨询, 您有新的上门服务咨询回复
};
exports.MESSAGE_BUSSINESS_TYPE = MESSAGE_BUSSINESS_TYPE;

+ 6 - 1
src/server/models/client/app.client.js

@ -178,10 +178,15 @@ class AppClient extends RedisModel {
                    session_type==SESSION_TYPES.DISCUSSION||
                    session_type==SESSION_TYPES.SPECIALISTGROUP||
                    session_type==SESSION_TYPES.PRESCRIPTION||
                    session_type==SESSION_TYPES.PRESCRIPTION_HOSPITAL||
                    session_type==SESSION_TYPES.ONDOOR_NURSING||
                    message.business_type == MESSAGE_BUSSINESS_TYPE.D_CT_01||
                    message.business_type == MESSAGE_BUSSINESS_TYPE.D_CT_02||
                    message.business_type == MESSAGE_BUSSINESS_TYPE.D_CT_03||
                    message.business_type == MESSAGE_BUSSINESS_TYPE.D_CT_04){
                    message.business_type == MESSAGE_BUSSINESS_TYPE.D_CT_04||
                    message.business_type == MESSAGE_BUSSINESS_TYPE.D_CT_05||
                    message.business_type == MESSAGE_BUSSINESS_TYPE.D_CT_06||
                    message.business_type == MESSAGE_BUSSINESS_TYPE.D_CT_07){
                    //是否发送消息
                    MessageNoticeSettingRepo.findOne(targetId,'1',function (err,res) {
                        if(res&&res.length>0){

+ 1 - 0
src/server/models/client/wechat.client.js

@ -327,6 +327,7 @@ class WechatClient extends RedisModel {
    }
    /**
     *
     * 发送微信模板消息给居民
     *
     * @param targetUserId

+ 1 - 1
src/server/models/redis/redisPubClient.js

@ -62,7 +62,7 @@ function uncaughtExceptionHandler(err){
    if(err && err.code == 'ECONNREFUSED'){
        //do someting
    }else{
        log.error(err+"exit in pub Redis");
        log.error(err+" exit in pub Redis");
    }
}
process.on('uncaughtException', uncaughtExceptionHandler);

+ 1 - 1
src/server/models/redis/redisSubClient.js

@ -62,7 +62,7 @@ function uncaughtExceptionHandler(err){
    if(err && err.code == 'ECONNREFUSED'){
        //do someting
    }else{
        log.error(err+"exit in sub Redis");
        log.error(err+" exit in sub Redis");
    }
}
process.on('uncaughtException', uncaughtExceptionHandler);

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

@ -195,7 +195,7 @@ class Sessions extends RedisModel {
        //流程2-判断session的业务类型;
        function callBusinessType() {
            if(type==SESSION_TYPES.MUC||type==SESSION_TYPES.PRESCRIPTION){
            if(type==SESSION_TYPES.MUC||type==SESSION_TYPES.PRESCRIPTION || type==SESSION_TYPES.ONDOOR_NURSING){
                callCreateSession(SESSION_BUSINESS_TYPE.PATIENT);
            }else if(type==SESSION_TYPES.SPECIALISTGROUP){
                callCreateSession(SESSION_BUSINESS_TYPE.DOCTOR);
@ -384,6 +384,7 @@ class Sessions extends RedisModel {
     */
    getUserSessions(userId, page, size, businessType) {
        let userSessionKey = RedisModel.makeRedisKey(REDIS_KEYS.UserSessions, userId);
        logger.info(userId);
        let self = this;
        if (page > 0) {
            if (page == 1) {
@ -421,6 +422,7 @@ class Sessions extends RedisModel {
                let sessionList = [];
                let functionList = [];
                for (let j = 0; j < sessionIds.length; j++) {
                    log.info("遍历会话 :" + sessionIds);
                    let fun = function (index, callback) {
                        if (!callback) {
                            callback = index, index = 0
@ -670,6 +672,7 @@ class Sessions extends RedisModel {
     */
    getUserStatusSessions(userId,status,businessType,page, size) {
        let userSessionKey = RedisModel.makeRedisKey(REDIS_KEYS.UserSessions, userId);
        log.info(userId);
        let self = this;
        async.waterfall([
            // 获取会话ID列表
@ -1455,6 +1458,7 @@ class Sessions extends RedisModel {
     * @param handler
     */
    saveIntoMessageByTopic(message, sessionId, handler) {
        log.info("2--保存代理人进入的消息:");
        let messages = new Messages();
        let participants = new Participants();
        let session_key = RedisModel.makeRedisKey(REDIS_KEYS.Session, sessionId);
@ -1469,7 +1473,7 @@ class Sessions extends RedisModel {
        }
        // 发送成员必须处于会话中
        participants.existsParticipant(sessionId, message.sender_id, function (err, res) {
            if (res) {
            if (res.exist) {
                redis.hmgetAsync(session_key, ["type", "name"]).then(function (res) {
                    sessionType = res[0];
                    sessionName = res[1];
@ -1524,6 +1528,7 @@ class Sessions extends RedisModel {
                    return;
                })
            } else {
                log.info("4--用户不在此会话当中!");
                if (handler){ handler("用户不在此会话当中!", messageId);return;}
            }
        });

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

@ -483,6 +483,7 @@ class Topics extends RedisModel {
     * @param intoUserName
     */
    intoTopic(topicId,intoUser,intoUserName,senderId,content){
        log.info("1--进入议题:" + senderId);
        let intoDate = new Date();
        let self = this;
        let topic_key = RedisModel.makeRedisKey(REDIS_KEYS.Topic, topicId);
@ -513,6 +514,7 @@ class Topics extends RedisModel {
            let sessions = new Sessions();
            sessions.saveIntoMessageByTopic(msg, sessionId, function (err, msgId) {
                log.info("3--sessions.saveIntoMessageByTopic: sessionId:" + sessionId);
                if (err) {
                    ModelUtil.emitOK(self.eventEmitter, {status: -1, "message": err});
                } else {

+ 2 - 1
src/server/repository/mysql/message.repo.js

@ -109,7 +109,8 @@ class MessageRepo {
        let sql =
            "SELECT s.content_type, s.content,s.agent FROM " + DB_TABLES.sessionTypeToTableName(sessionType) + " s " +
            "WHERE s.session_id = ? order by s.timestamp desc limit 1 ";
        log.info("获取会话医生的id sql : " + sql);
        log.info("获取会话医生的id args : " + [sessionId]);
        ImDb.execQuery({
            "sql": sql,
            "args": [sessionId],

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

@ -245,6 +245,8 @@ class ParticipantRepo {
     */
    static existsParticipant(sessionId, userId, handler) {
        let sql = "SELECT case when count(*) > 0 then true else false end exist FROM participants w WHERE w.session_id =? AND w.participant_id = ? ";
        log.info("用户是否在指定Session中:sql:" + sql);
        log.info("用户是否在指定Session中:args:" + [sessionId, userId]);
        ImDb.execQuery({
            "sql": sql,
            "args": [sessionId, userId],
@ -263,6 +265,8 @@ class ParticipantRepo {
        let sql = "INSERT INTO " + DB_TABLES.Participants + " (session_id,participant_id,participant_role,last_fetch_time) VALUES ";
        let args = [];
        let nowDate = new Date();
        log.info("saveParticipantsToMysql:[sql] = " + sql);
        log.info("saveParticipantsToMysql:[users.length] = " + users.length);
        for (let j in users) {
            let tokens = users[j].split(":");
            sql += "(?,?,?,?)";
@ -271,6 +275,7 @@ class ParticipantRepo {
            args.push(tokens.length > 1 ? tokens[1] : '0');
            args.push(nowDate);
            if (j != users.length - 1) sql += ", ";
            log.info("saveParticipantsToMysql:[args] = " + args);
        }
        sql += " ON DUPLICATE KEY UPDATE participant_role = VALUES(participant_role)";
        ImDb.execQuery({

+ 6 - 0
src/server/repository/mysql/session.repo.js

@ -102,6 +102,8 @@ class SessionRepo {
        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 + ") ";
        log.info("获取用户全部会话: sql :" + sql);
        log.info("获取用户全部会话: args :" + args);
        ImDb.execQuery({
            "sql": sessionSQL,
            "args": [userId, type],
@ -145,6 +147,8 @@ class SessionRepo {
                let sql1 = ("select session_id from " + DB_TABLES.Participants + " w where w.participant_id = ? and participant_role ="+PARTICIPANT_ROLES.REGULAR+" group by w.session_id")
                sessionSQL =  "select * from "
                    + DB_TABLES.Sessions + " s where (s.id in(" + sql + ") and s.business_type = ? and s.status = 1) or (s.id in(" + sql1 + ") and s.business_type = ? and s.status = 0) limit "+page+","+pagesize;
                log.info("findAllByTypeAndStatus: sql " + sessionSQL);
                log.info("findAllByTypeAndStatus: args " + [userId, businessType,userId,businessType]);
                ImDb.execQuery({
                    "sql": sessionSQL,
                    "args": [userId, businessType,userId,businessType],
@ -159,6 +163,8 @@ class SessionRepo {
            sql = "select session_id from " + DB_TABLES.Participants + " w where w.participant_id = ? and participant_role ="+PARTICIPANT_ROLES.HOST+" group by w.session_id";
            sessionSQL =  "select * from "
                + DB_TABLES.Sessions + " s where s.id in(" + sql + ") and s.business_type = ? and s.status = ? limit "+page+","+pagesize;
            log.info("findAllByTypeAndStatus: sql : "+sessionSQL);
            log.info("findAllByTypeAndStatus: args : "+[userId, businessType,status]);
            ImDb.execQuery({
                "sql": sessionSQL,
                "args": [userId, businessType,status],

+ 1 - 1
src/server/repository/redis/redis.client.js

@ -66,7 +66,7 @@ function uncaughtExceptionHandler(err){
    if(err && err.code == 'ECONNREFUSED'){
        //do someting
    }else{
        log.error(err+"exit in redis");
        log.error(err+" exit in redis");
    }
}
process.on('uncaughtException', uncaughtExceptionHandler);

+ 9 - 9
src/server/resources/config/config.test.js

@ -1,9 +1,9 @@
"use strict";
let imDbConfig = {
    host: '172.19.103.85',
    user: 'linzhou',
    password: 'linzhou',
    host: '172.26.0.104',
    user: 'ssgg',
    password: 'ssgg@jkzl2019',
    database: 'im_new',
    connectionLimit: '50',
    charset: 'utf8mb4'
@ -11,7 +11,7 @@ let imDbConfig = {
// Redis
let redisConfig = {
    host: '172.19.103.88',
    host: '172.26.0.253',
    port: 6379,
    db: 1
};
@ -22,21 +22,21 @@ let redisConfig = {
// };
// 内网Redis
let innerRedisConfig = {
    host: '172.19.103.88',
    host: '172.26.0.253',
    port: 6379,
    db: 1
};
// 三师后台
let wlyyServerConfig = {
    host: '172.19.103.88',
    port: 9092,
    host: '172.26.0.104',
    port: 8080,
    model:"/wlyy"
};
//医生助手配置
let wlyyDAServerConfig = {
    host: '172.19.103.88',
    port: 9092,
    host: '172.26.0.104',
    port: 8080,
    model:"/wlyy"
};