瀏覽代碼

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 年之前
父節點
當前提交
a59fa1d8da

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

@ -46,20 +46,15 @@ router.post("/", function (req, res) {
    let participants = payload.participants;
    let sessionName = payload.session_name;
    let sessionType = payload.session_type;
    let sessionId = null;
    if (payload.session_type == SESSION_TYPES.GROUP||payload.session_type == SESSION_TYPES.MUC) {
        if(!payload.hasOwnProperty('session_id') && payload.session_id.trim().length > 0){
            throw {httpStatus: 406, message: 'Field "session_id" is necessary and cannot be empty for GROUP session.'};
        }
        sessionId = payload.session_id;
    }
    let sessionId = payload.session_id;
    let sessions = new Sessions();
    let participantArray = [];
    participants = JSON.parse(participants);
    for(var j in participants){
        participantArray.push(j+":"+participants[j]);
    }
    ControllerUtil.regModelEventHandler(sessions, res);
    sessions.createSession(sessionId, sessionName, sessionType, participants);
    sessions.createSession(sessionId, sessionName, sessionType, participantArray);
});
/**

+ 0 - 1
src/server/endpoints/v2/topic.endpoint.js

@ -47,7 +47,6 @@ router.post(APIv2.Sessions.Topics, function (req, res) {
    if (!testing.pass) {
        throw {httpStatus: 406, message: testing.message}
    }
    let topic = new Topics();
    ControllerUtil.regModelEventHandler(topic, res);
    topic.createTopic(payload.topic_name, payload.topic_id, payload.session_id, JSON.parse(payload.participants), JSON.parse(payload.messages),payload.session_type);

+ 47 - 10
src/server/models/messages/messages.js

@ -110,6 +110,7 @@ class Messages extends RedisModel {
            .execAsync()
            .then(function (res) {
                Messages.updateLastContent(sessionKey, sessionType, null, message);
                SessionRepo.updateSessionLastStatus(message.sender_id,message.sender_name,message.timestamp,message.content,message.content_type,sessionId);
                Messages.cleanOutRangeMessage(sessionId); // clean out range messages
            })
            .catch(function (ex) {
@ -117,6 +118,40 @@ class Messages extends RedisModel {
            });
    }
    /**
     *创建session发送session成功
     * @param messageId
     * @param sessionId
     * @param sessionType
     * @param message
     */
    saveMessageToRedisFromCreateSession(sessionId, messageId, message) {
        let messageKey = RedisModel.makeRedisKey(REDIS_KEYS.Messages, sessionId);
        let messageTimestampKey = RedisModel.makeRedisKey(REDIS_KEYS.MessagesByTimestamp, sessionId);
        let msgJson = {
            id: message.id,
            sender_id: message.sender_id,
            sender_name: message.sender_name,
            timestamp: message.timestamp.getTime(),
            content_type: message.content_type,
            content: message.content,
            business_type:message.business_type||1
        };
        redis.multi()
            .hset(messageKey, messageId, JSON.stringify(msgJson))               // 保存消息
            .zadd(messageTimestampKey, message.timestamp.getTime(), messageId)  // 保存消息时间
            .execAsync()
            .then(function (res) {
                Messages.cleanOutRangeMessage(sessionId); // clean out range messages
            })
            .catch(function (ex) {
                log.error("Save message to redis failed: ", ex);
            });
    }
    /**
     * 保存Message 到mysql
     * @param message 消息对象
@ -148,16 +183,18 @@ class Messages extends RedisModel {
            "sender_id", message.sender_id,
            "sender_name", message.sender_name
        );
        let sessionid = sessionKey.replace("sessions:", "");
        SessionRepo.updateSessionLastStatus(message.sender_id,
            message.sender_name,
            message.timestamp,
            message.content,
            message.content_type,
            sessionid, function (err, res) {
                if (err) logger.error("Update session last status failed: ", err);
            });
        /**
         * mysql操作分离
         */
        // let sessionid = sessionKey.replace("sessions:", "");
        // SessionRepo.updateSessionLastStatus(message.sender_id,
        //     message.sender_name,
        //     message.timestamp,
        //     message.content,
        //     message.content_type,
        //     sessionid, function (err, res) {
        //         if (err) logger.error("Update session last status failed: ", err);
        //     });
        if (name != null) redis.hsetAsync(sessionKey, "name", name);
        if (sessionType != null) redis.hsetAsync(sessionKey, "type", sessionType);

+ 8 - 2
src/server/models/sessions/participants.js

@ -193,9 +193,15 @@ class Participants extends RedisModel {
        let users = [user+":"+0];
        Participants.saveParticipantsToRedis(sessionId, users, new Date(), function (res) {
            if (res) {
                Participants.saveParticipantsToMysql(sessionId, users);
                Participants.saveParticipantsToMysql(sessionId, users,function(err,res){
                    if(err){
                        ModelUtil.emitOK(self.eventEmitter, {status:-1,message: "成员添加失败"});
                    }else{
                         ModelUtil.emitOK(self.eventEmitter, {status:200,message: "成员添加成功!"});
                    }
                });
            } else {
                ModelUtil.emitOK(self.eventEmitter, {message: "成员添加失败"});
                ModelUtil.emitOK(self.eventEmitter, {status:-1,message: "成员添加失败"});
            }
        })
    }

+ 189 - 62
src/server/models/sessions/sessions.js

@ -11,6 +11,8 @@ let Users = require('../user/users');
let Participants = require('./Participants');
let SessionRepo = require('../../repository/mysql/session.repo');
let ParticipantRepo = require('../../repository/mysql/participant.repo');
let MessageRepo = require('../../repository/mysql/message.repo');
let WechatClient = require("../client/wechat.client.js");
let AppClient = require("../client/app.client.js");
@ -46,85 +48,208 @@ class Sessions extends RedisModel {
     */
    createSession(sessionId, name, type, participantArray, handler) {
        let self = this;
        let messageId = mongoose.Types.ObjectId().toString();
        //创建session到mysql
        self.createSessionToMysql(sessionId, name, type, participantArray,messageId,function(err,res){
            if(err){
                logger.error(err);
            }else{
                logger.info("create session to mysql success :" +JSON.stringify(res));
            }
        });
        //创建session到redis
        self.createSessionToRedis(sessionId, name, type, participantArray,messageId, function(err,res){
            if(err){
                if(handler){handler(err,null);return;};
                ModelUtil.emitError(self.eventEmitter, {message:err}, null);
            }else{
                if(handler){handler(null,res);return;};
                ModelUtil.emitOK(self.eventEmitter,res);
            }
        });
    }
    /**
     * 创建会话。REDIS
     * @param sessionId
     * @param name
     * @param type
     * @param participantArray
     * @param messageId
     * @param handler
     * @returns {boolean}
     */
    createSessionToRedis(sessionId, name, type, participantArray,messageId, handler){
        let self = this;
        let messages = new Messages();
        var participantIdArray = [];
        for (let i in participantArray) {
            participantIdArray.push(participantArray[i].split(":")[0]);
        }
        if (type == SESSION_TYPES.P2P||type==SESSION_TYPES.SYSTEM) {
            var participantIdArray = [];
            for (let i in participantArray) {
                participantIdArray.push(participantArray[i].split(":")[0]);
            if(sessionId){
                callBusinessType(sessionId);
                return;
            }
            if (participantIdArray.length != 2) {
                ModelUtil.emitDataNotFound(self.eventEmitter, {message: "P2P session only allow 2 participants."});
                handler("P2P session only allow 2 participants.",null);
                return false;
            }
            ParticipantRepo.findSessionIdByParticipantIds(participantIdArray[0], participantIdArray[1], function (err, res) {
                sessionId = res;
                callBusinessType(sessionId);
            });
        } else {
            if(!sessionId){
                handler("MUC OR GROUP session sessionId is not  allow null .",null);
                return;
            }
            callBusinessType(sessionId);
        }
        var businessType = SESSION_BUSINESS_TYPE.DOCTOR;
        function callBusinessType(sessionId) {
            for (var j = 0; j < participantArray.length; j++)
                callIsPatient(j, participantArray.length);
            ParticipantRepo.getBusinessType(participantIdArray.join("','"),function(err,businessType){
                callCreate(sessionId, businessType);
            });
        }
        function callIsPatient(j, length) {
            Users.isPatientId(participantArray[j], function (isPatient) {
                if (isPatient) {
                    businessType = SESSION_BUSINESS_TYPE.PATIENT
                }
                if (length - 1 == j || businessType == SESSION_BUSINESS_TYPE.PATIENT) {
                    callCreate(sessionId, businessType);
                }
        function callCreate(sessionId, businessType) {
            let createDate = new Date();
            let sessionKey = RedisModel.makeRedisKey(REDIS_KEYS.Session, sessionId);
            let message = {
                sender_id: "system",
                sender_name: "system",
                content_type: 6,
                content: "会话创建成功",
                timestamp: createDate,
                id:messageId
            };
            let session = {
                id :sessionId,
                name:name,
                type:type,
                create_date:createDate.getTime(),
                business_type:businessType,
                last_sender_id : message.sender_id,
                last_sender_name : message.sender_name,
                last_message_time: message.timestamp.getTime(),
                last_content  : message.content,
                last_content_type : message.content_type
            }
            redis.hmsetAsync(sessionKey, session).then(function(){
                Participants.saveParticipantsToRedis(sessionId, participantArray, createDate, function (res) {
                    handler(null, session);
                    messages.saveMessageToRedisFromCreateSession(sessionId, messageId, message);
                });
            })
        }
    }
    /**
     * 创建会话。mysql
     * @param sessionId
     * @param name
     * @param type
     * @param participantArray
     * @param messageId
     * @param handler
     */
    createSessionToMysql(sessionId, name, type, participantArray,messageId, handler){
        let self = this;
        //如果sessionId不存在则执行创建sessionId过程
        var participantIdArray = [];
        for (let i in participantArray) {
            participantIdArray.push(participantArray[i].split(":")[0]);
        }
        //流程1-判断是否存在sessionId不存在则创建对应的sessionId;
        if(!sessionId){
            if (type == SESSION_TYPES.P2P||type==SESSION_TYPES.SYSTEM) {
                ParticipantRepo.findSessionIdByParticipantIds(participantIdArray[0], participantIdArray[1], function (err, res) {
                    sessionId = res;
                    callBusinessType();
                });
            }else{
                handler("MUC模式和团队模式,不允许sessionId为空!",null);
                return;
            }
        }else{
            callBusinessType();
        }
        //流程2-判断session的业务类型;
        function callBusinessType(){
            ParticipantRepo.getBusinessType(participantIdArray.join("','"),function(err,businessType){
                if(err){handler(err,null);return;}
                callCreateSession(businessType);
            });
        }
        function callCreate(sessionId, businessType) {
        //流程3-发起session创建 返回session实例
        function callCreateSession(businessType){
            //查找该sessionId是否存在存在则直接返回实例
            SessionRepo.findOne(sessionId, function (err, res) {
                if (res.length > 0) {
                    let session = res[0];
                    ModelUtil.emitOK(self.eventEmitter, {
                        id: session.id,
                        name: session.name,
                        type: session.type,
                        business_type: session.business_type || businessType,
                        create_date: session.create_date
                    });
                    return;
                if (res.length > 0) {//已经存在
                    handler(null,res[0]);
                }else{
                    let createDate = new Date();
                    let session ={
                        id :sessionId,
                        name:name,
                        type:type,
                        create_date:createDate.getTime(),
                        business_type:businessType
                    }
                    //将session写入数据库
                    self.saveSessionToMysql(sessionId, name, type, createDate, businessType, function (err, res) {
                        if(err){handler(err,null);return;};
                        callCreateParticipants(session);
                    })
                }
            });
        }
                let createDate = new Date();
                let sessionKey = RedisModel.makeRedisKey(REDIS_KEYS.Session, sessionId);
        //流程4-发起session成员创建
        function callCreateParticipants(session){
            Participants.saveParticipantsToMysql(sessionId, participantArray, function (err, res) {
                if(err){handler(err,null);return;};
                callBeginTrans(session);
            })
        }
                // 保存会话及成员至MySQL中
                self.saveSessionToMysql(sessionId, name, type, createDate, businessType, function (err, res) {
                    Participants.saveParticipantsToMysql(sessionId, participantArray, function (err, res) {
                        if (err) {
                            ModelUtil.emitError(self.eventEmitter, err.message);
                            return;
                        }
                        let message = {
                            sender_id: "System",
                            sender_name: "System",
                            content_type: 1,
                            content: "",
                            timestamp: createDate
                        };
                        Messages.updateLastContent(sessionKey, type, name, message);
                        Participants.saveParticipantsToRedis(sessionId, participantArray, createDate, function (res) {
                            if (handler) {
                                handler(true, sessionId);
                            } else {
                                ModelUtil.emitOK(self.eventEmitter, {id: sessionId});
                            }
                        });
        //流程5-发起session会话
        function callBeginTrans(session) {
            let mesDate = new Date();
            let message = {
                sender_id: "system",
                sender_name: "system",
                content_type: 6,
                content: "会话创建成功",
                timestamp: mesDate,
                id:messageId
            };
            session.last_sender_id = message.sender_id;
            session.last_sender_name = message.sender_name;
            session.last_message_time = mesDate.getTime();
            session.last_content  = message.content;
            session.last_content_type = message.content_type;
            MessageRepo.save(message,type,messageId,sessionId,function(err,res){
                SessionRepo.updateSessionLastStatus(message.sender_id,
                    message.sender_name,
                    message.timestamp,
                    message.content,
                    message.content_type,
                    sessionId, function (err, res) {
                        if (err) {handler(err,null);return;};
                        handler(null,session);
                    });
                });
            });
            })
        }
    }
@ -230,7 +355,6 @@ class Sessions extends RedisModel {
                                    })
                                }).catch(function (err) {
                                    logger.error("Get sessions failed: ", ex);
                                    ModelUtil.emitError(self.eventEmitter, "Get sessions failed: " + err);
                                });
                });
@ -238,6 +362,9 @@ class Sessions extends RedisModel {
        ]);
    }
    /**
     * 获取会话消息。全部,不管已读/未读状态。
     *
@ -548,6 +675,7 @@ class Sessions extends RedisModel {
            }
        });
    }
    sendTopicMessages(topicId,message){
        let self = this;
        let topicKey = RedisModel.makeRedisKey(REDIS_KEYS.Topic, topicId);
@ -555,6 +683,7 @@ class Sessions extends RedisModel {
            self.saveMessageBySession(topic.session_id,message);
        })
    }
    /**
     * 保存消息
     *
@ -570,9 +699,7 @@ class Sessions extends RedisModel {
        let self = this;
        let sessionType = 0;
        let sessionName = "";
        message.id = messageId;
        // 发送成员必须处于会话中
        participants.existsParticipant(sessionId, message.sender_id, function (err, res) {
            if (res) {
@ -587,20 +714,20 @@ class Sessions extends RedisModel {
                    // 更新消息存储
                    messages.saveMessageToRedis(sessionId, sessionType, messageId, message);
                    messages.saveMessageToMysql(sessionId, sessionType, messageId, message);
                    // 更新会话最新状态及成员最后一次消息获取时间
                    Sessions.updateParticipantLastFetchTime(sessionId, message.sender_id, message.timestamp.getTime());
                    //更新最后一条消息
                    Messages.updateLastContent(session_key, sessionType, sessionName, message);
                    //更新session实体的最后一条消息
                    SessionRepo.updateSessionLastStatus(message.sender_id,message.sender_name,message.timestamp,message.content,message.content_type,sessionId);
                    handler(null, messageId);
                }).then(function (res) {
                    // 推送消息
                    ParticipantRepo.findIds(sessionId, function (err, res) {
                        if (err) {
                            ModelUtil.logError("Push message from topic: get participant's id list failed: ", err);
                            handler(err, messageId)
                        } else {
                            message.session_id = sessionId;
                            res.forEach(function (participant) {
                                if (participant.id !== message.sender_id) {
                                    Sessions.pushNotification(participant.id, message);
@ -609,7 +736,6 @@ class Sessions extends RedisModel {
                        }
                    })
                }).catch(function (err) {
                    ModelUtil.emitError(self.eventEmitter, "Error occurred while save message to topic: ");
                    handler(err, messageId)
                })
            } else {
@ -709,6 +835,7 @@ class Sessions extends RedisModel {
            }
        });
    }
}
// Expose class

+ 91 - 79
src/server/models/sessions/topics.js

@ -80,6 +80,8 @@ class Topics extends RedisModel {
                                    r.avatar = p[j].avatar;
                                    r.patient = p[j].id;
                                    r.patient_name = p[j].name;
                                    r.sex = p[j].sex;
                                    r.birthdate = p[j].birthdate.getTime();
                                    if(r.status!=TOPIC_STATUS.ENDED){
                                        r.msg_count = msgcount;
                                    }
@ -129,113 +131,123 @@ class Topics extends RedisModel {
     * @param topicId
     * @param sessionId
     * @param users 发起议题的患者,格式:{"userId1:role", "userId2:role"}
     * @param messages 发送的消息对象,格式:{description:"",title:"",img:"image1,image2",senderId:"",senderName:""},多个图片用逗号隔开
     * @param messages 发送的消息对象,格式:{description:"",title:"",img:"image1,image2",sender_id:"",sender_name:""},多个图片用逗号隔开
     */
    createTopic(topicName, topicId, sessionId, users, messages,sessionType) {
        let self = this;
        //MUC模式中sessionID就是患者ID
        let topic_key = RedisModel.makeRedisKey(REDIS_KEYS.Topic, topicId);
        if(!sessionId) {
            ModelUtil.emitOK(self.eventEmitter, "会话ID为空,请先生成会话ID");
            return;
        }
        if(!topicId) {
            ModelUtil.emitOK(self.eventEmitter, "议题ID为空,请先生成议题ID");
            return;
        }
        var pars = [];
        for (var j in users) {
            pars.push(j + ":" + users[j]);
        }
        let sessions = new Sessions();
        let participants = new Participants();
        //从数据库中获取sessionId
        let date = new Date();
        var pars = [];
        participants.getMucSessionIdByParticipants(users, function (err, res) {
            if(!err){
                if(res&&res.length>0){
                    sessionId = res[0].id;
                }
                let topics_key = RedisModel.makeRedisKey(REDIS_KEYS.Topics, sessionId);
                redis.zaddAsync(topics_key, date.getTime(), topicId).then(function (res) {
                    redis.hmsetAsync(topic_key,
                        "name", topicName,
                        "end_by", "",
                        "session_id", sessionId,
                        "create_time", date.getTime(),
                        "end_time", "",
                        "description", messages.description,
                        "status", TOPIC_STATUS.NEW)
                        .then(function (res) {
                        })
                }).catch();
            }
            // 已经存在对应的会话更新全科为旁听
            if (res && res.length > 0) {
                for (var j in users) {
                    participants.updateUser(sessionId, j, users[j]);
                }
                callbegin();
            } else {
                // 不存在创建SESSION
                for (var j in users) {
                    pars.push(j + ":" + users[j]);
        sessions.createSession(sessionId, messages.sender_name, sessionType, pars, function (err, res) {
            self.saveTopicToRedis(topicName,topicId,sessionId,messages,date,function(err,res){
                if(err){
                    ModelUtil.emitOK(self.eventEmitter,{status:-1,message:"议题创建失败!"});
                    return;
                }
                sessions.createSession(sessionId, messages.senderName, sessionType, pars, function (res) {
                    if (res) {
                        callbegin();
                //返回给前端
                ModelUtil.emitOK(self.eventEmitter,{status:200,message:"议题创建成功!",start_msg_id:res});
                //执行数据库操作
                self.saveTopicToMySQL(topicName,topicId,sessionId,res,date,messages.description,TOPIC_STATUS.NEW,function(err,res){
                    if(err){
                        log.info("save topic to mysql is error : "+err);
                        return;
                    }
                });
            }
        })
                })
            })
        });
    }
        /**
         * 开始消息发送
         */
        function callbegin() {
    saveTopicToRedis(topicName, topicId, sessionId, messages,date,handler){
        let topics_key = RedisModel.makeRedisKey(REDIS_KEYS.Topics, sessionId);
        let topic_key = RedisModel.makeRedisKey(REDIS_KEYS.Topic, topicId);
        let sessions = new Sessions();
        //step1:创建topic到redis
        redis.zaddAsync(topics_key, date.getTime(), topicId).then(function (res) {
            redis.hmsetAsync(topic_key, "name", topicName,
                "session_id", sessionId,"create_time", date.getTime(),
                "description", messages.description,"status", TOPIC_STATUS.NEW,
                "end_time", "", "end_by", ""
            ).then(function (res) {
                    sendBeginMsg();
            }).catch(function(err){
                handler(err,null);
                return;
            });
        }).catch(function(err){
            handler(err,null);
            return;
        });
        //step2:发送开始会话
        function sendBeginMsg() {
            let msg = {};
            msg.sender_id = messages.senderId;
            msg.sender_name = messages.senderName;
            msg.sender_id = messages.sender_id;
            msg.sender_name = messages.sender_name;
            msg.content_type = 6;
            msg.content = "开始咨询";
            msg.content = messages.sender_name+"发起了咨询";
            msg.timestamp = date;
            sessions.saveMessageByTopic(msg, sessionId, function (err, msgId) {
                if (err) {
                    ModelUtil.emitOK(self.eventEmitter, err);
                    handler(err,null);
                } else {
                    self.saveTopicToMySQL(topicName, topicId, sessionId, msgId, date, messages.description, TOPIC_STATUS.NEW);
                    callBeginMsg(msgId);
                    sendQuesionMsg(msgId);
                    handler(null,msgId);
                }
            })
        }
        /**
         * 发送求助内容
         */
        function callBeginMsg(startMsgId) {
        //step3:发送求助内容的文本
        function sendQuesionMsg(startMsgId) {
            let msg = {};
            msg.sender_id = messages.senderId;
            msg.sender_name = messages.senderName;
            msg.sender_id = messages.sender_id;
            msg.sender_name = messages.sender_name;
            msg.content_type = 1;
            msg.content = messages.description;
            msg.timestamp = new Date();
            sessions.saveMessageByTopic(msg, sessionId, function (err, msgId) {
                log.info("begin send " + messages.description);
            });
            if (messages.img) {
                let imgs = messages.img.split(",");
                for (var j in imgs) {
                    let msgimg = {};
                    msgimg.sender_id = messages.senderId;
                    msgimg.sender_name = messages.senderName;
                    msgimg.content_type = 2;
                    msgimg.content = imgs[j];
                    msgimg.timestamp = new Date();
                    sessions.saveMessageByTopic(msgimg, sessionId, function (err, msgId) {
                        log.info("begin send" + imgs[j]);
                    })
                if (messages.img) {
                    sendQuesionImg(startMsgId);
                }
                if(err){
                    log.info("send create message error "+msg);
                }
            });
        }
        //step4:发送求助内容的图片
        function sendQuesionImg(startMsgId){
            let imgs = messages.img.split(",");
            for (var j in imgs) {
                let msgimg = {};
                msgimg.sender_id = messages.sender_id;
                msgimg.sender_name = messages.sender_name;
                msgimg.content_type = 2;
                msgimg.content = imgs[j];
                msgimg.timestamp = new Date();
                sessions.saveMessageByTopic(msgimg, sessionId, function (err, msgId) {
                    if(err){
                        log.info("send create img error "+imgs[j]);
                    }
                })
            }
            ModelUtil.emitOK(self.eventEmitter, {"id": startMsgId});
        }
    }
    saveTopicToMySQL(topicName, topicId, sessionId, messageId, date, description,status) {
        TopicsRepo.saveTopic(topicName, topicId, sessionId, messageId, date, description,status);
    saveTopicToMySQL(topicName, topicId, sessionId, messageId, date, description,status,handler) {
        TopicsRepo.saveTopic(topicName, topicId, sessionId, messageId, date, description,status,handler);
    }
    /**

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

@ -9,6 +9,7 @@ let log = require('../../util/log.js');
const DB_TABLES = require('../../include/commons').DB_TABLES;
const SESSION_USER_STATUS = require('../../include/commons').SESSION_USER_STATUS;
const SESSION_TYPES = require('../../include/commons').SESSION_TYPES;
const SESSION_BUSINESS_TYPE = require('../../include/commons').SESSION_BUSINESS_TYPE;
class ParticipantRepo {
    constructor() {
    }
@ -99,6 +100,27 @@ class ParticipantRepo {
        handler(null, sessionId);
    }
    static getBusinessType(users,handler){
        let sql ="select count(1) as count from patients p where p.id in ('"+users+"')";
        ImDb.execQuery({
            "sql": sql,
            "args": [],
            "handler": function(err,res){
                if(err){
                    console.log("err businessType  : "+err);
                }else{
                    if(res[0].count){
                        handler(err,SESSION_BUSINESS_TYPE.PATIENT);
                    }else{
                        handler(err,SESSION_BUSINESS_TYPE.DOCTOR);
                    }
                }
            }
        });
    }
    static findMucSessionIdByUser(users,handler){
        var userTemp = [];//先匹配出在线用户
        for(var j in users){

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

@ -119,7 +119,9 @@ class SessionRepo {
        ImDb.execQuery({
            "sql": sql,
            "args": [lastSenderId, lastSenderName, lastMessageTime, lastContent, lastContentType, sessionId],
            "handler": handler
            "handler": handler||function(err,res){
                log.info("updateSessionLastStatus");
            }
        });
    }

+ 2 - 6
src/server/repository/mysql/topics.repo.js

@ -96,17 +96,13 @@ class TopicRepo {
     * @param description
     * @param status
     */
    static saveTopic(topicName, topicId, sessionId, messageId, date, description, status) {
    static saveTopic(topicName, topicId, sessionId, messageId, date, description, status,handler) {
        let sql = "insert into " + DB_TABLES.Topics + " (id,session_id,name,create_time,start_message_id,description,status) VALUES (?,?,?,?,?,?,?)";
        ImDb.execQuery({
            "sql": sql,
            "args": [topicId, sessionId, topicName, date, messageId, description, status],
            "handler": function (err, res) {
                if (err) {
                    log.error("saveTopic is fail error: " + err + "messageId:" + messageId);
                } else {
                    log.info("saveTopic is success");
                }
                handler(err,res);
            }
        });
    }

+ 1 - 1
src/server/resources/config/config.dev.js

@ -14,7 +14,7 @@ let imDbConfig = {
let redisConfig = {
    host: '192.168.1.220',
    port: 6379,
    db: 10
    db: 9
};
// 三师后台