Pārlūkot izejas kodu

错误代码修正

8 gadi atpakaļ
vecāks
revīzija
fcc5e478c8

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

@ -43,6 +43,15 @@ const TOPIC_STATUS = {
    ENDED: 10        // 结束
};
/**
 * 会话业务类型
 */
exports.SESSION_BUSINESS_TYPE = {
    PATIENT: 2,//针对患者
    DOCTOR: 1//针对医生
};
exports.TOPIC_STATUS = TOPIC_STATUS;
/**

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

@ -119,6 +119,11 @@ class Messages extends RedisModel {
        MessageRepo.save(message, sessionType, messageId, sessionId, handler);
    }
    updateLastContentToMysql(sessionKey, sessionType, name, message){
    }
    /**
     * 更新会话最后一条消息
     *
@ -128,7 +133,7 @@ class Messages extends RedisModel {
     * @param message
     * @returns {*}
     */
    static updateLastContent(sessionKey, sessionType, name, message) {
    static updateLastContent(sessionKey, sessionType, name, message,businessType) {
        redis.hmsetAsync(sessionKey,
            "create_date", message.timestamp.getTime(),
            "last_content", message.content,
@ -136,9 +141,11 @@ class Messages extends RedisModel {
            "sender_id", message.sender_id,
            "sender_name", message.sender_name
        );
        let sessionid =sessionKey.replace("sessions:","");
        MessageRepo.updateLastContent(message.sender_id,message.sender_name,message.timestamp,message.content,message.content_type,sessionid);
        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);
    }
    /**

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

@ -7,6 +7,7 @@ let RedisClient = require('../../repository/redis/redis.client.js');
let RedisModel = require('./../redis.model.js');
let ModelUtil = require('../../util/model.util');
let Messages = require('../messages/messages');
let Users = require('../user/users');
let Participants = require('./Participants');
let SessionRepo = require('../../repository/mysql/session.repo');
let ParticipantRepo = require('../../repository/mysql/participant.repo');
@ -22,6 +23,7 @@ let MessageRepo = require('../../repository/mysql/message.repo');
const REDIS_KEYS = require('../../include/commons').REDIS_KEYS;
const SESSION_TYPES = require('../../include/commons').SESSION_TYPES;
const STICKY_SESSION_BASE_SCORE = require('../../include/commons').STICKY_SESSION_BASE_SCORE;
const  SESSION_BUSINESS_TYPE = require('../../include/commons').SESSION_BUSINESS_TYPE;
class Sessions extends RedisModel {
    constructor() {
@ -54,13 +56,31 @@ class Sessions extends RedisModel {
            ParticipantRepo.findSessionIdByParticipantIds(participantIdArray[0], participantIdArray[1], function (err, res) {
                sessionId = res;
                callCreate(sessionId);
                callBusinessType(sessionId);
            });
        } else {
            callCreate(sessionId);
            callBusinessType(sessionId);
        }
        function callCreate(sessionId) {
        function callBusinessType(sessionId) {
            var businessType = SESSION_BUSINESS_TYPE.DOCTOR;
            for(var j = 0 ;j<participantArray.length;j++)
                callIsPatient(j,businessType,participantArray.length);
        }
        function callIsPatient(j,businessType,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) {
            SessionRepo.findOne(sessionId, function (err, res) {
                if (res.length > 0) {
                    let session = res[0];
@ -68,6 +88,7 @@ class Sessions extends RedisModel {
                        id: session.id,
                        name: session.name,
                        type: session.type,
                        business_type:session.business_type||businessType,
                        create_date: session.create_date
                    });
                    return;
@ -77,7 +98,7 @@ class Sessions extends RedisModel {
                let sessionKey = RedisModel.makeRedisKey(REDIS_KEYS.Session, sessionId);
                // 保存会话及成员至MySQL中
                self.saveSessionToMysql(sessionId, name, type, createDate, function (err, res) {
                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);
@ -116,8 +137,8 @@ class Sessions extends RedisModel {
     * @param createDate
     * @param handler
     */
    saveSessionToMysql(sessionId, name, type, createDate, handler) {
        SessionRepo.saveSession(sessionId, name, type, createDate, handler);
    saveSessionToMysql(sessionId, name, type, createDate,businessType, handler) {
        SessionRepo.saveSession(sessionId, name, type, createDate,businessType, handler);
    }
    /**
@ -219,6 +240,8 @@ class Sessions extends RedisModel {
     * @param userId 拉取消息的人
     * @param page 第几页
     * @param pagesize 分页数量
     * @param start_msg_id 消息会话最新的一条消息的ID
     * @param end_msg_id 消息会话刚开始的消息ID
     */
    getMessages(sessionId, user, start_msg_id, end_msg_id, page, pagesize) {
        let self = this;
@ -236,7 +259,7 @@ class Sessions extends RedisModel {
                        return;
                    }
                    end_msg_id = res[0];
                    self.getMessagesByPage(sessionId, user, start_msg_id, end_msg_id, page, pagesize, function (err, res) {
                    self.getMessagesByPage(sessionId, user, end_msg_id, start_msg_id, page, pagesize, function (err, res) {
                        if (err) {
                            logger.error("getMessagesByPage error" + err);
                            ModelUtil.emitError(self.eventEmitter, err, err);
@ -253,7 +276,7 @@ class Sessions extends RedisModel {
                    return;
                }
                start_msg_id = res[0];
                self.getMessagesByPage(sessionId, user, start_msg_id, end_msg_id, page, pagesize, function (err, res) {
                self.getMessagesByPage(sessionId, user, end_msg_id, start_msg_id, page, pagesize, function (err, res) {
                    if (err) {
                        logger.error("getMessagesByPage error" + err);
                        ModelUtil.emitError(self.eventEmitter, err, err);
@ -279,7 +302,7 @@ class Sessions extends RedisModel {
                })
            })
        } else {
            self.getMessagesByPage(sessionId, user, start_msg_id, end_msg_id, page, pagesize, function (err, res) {
            self.getMessagesByPage(sessionId, user, end_msg_id, start_msg_id, page, pagesize, function (err, res) {
                if (err) {
                    logger.error("getMessagesByPage error" + err);
                    ModelUtil.emitError(self.eventEmitter, err, err);
@ -612,6 +635,7 @@ class Sessions extends RedisModel {
        redis.zaddAsync(participantsKey, score, userId)
            .then(function (res) {
                logger.info("update participant last fetch time success.");
                ParticipantRepo.updateLastTime(new Date(score),sessionId,userId);
            })
            .catch(function (err) {
                logger.error("Update participant last fetch time error: ", err);

+ 4 - 3
src/server/models/user/users.js

@ -47,7 +47,7 @@ class Users extends RedisModel {
        async.waterfall([
            // determine user type
            function (callback) {
                self.isPatientId(userId, function (err, isPatient) {
                Users.isPatientId(userId, function (err, isPatient) {
                    callback(null, isPatient);
                });
            },
@ -219,6 +219,7 @@ class Users extends RedisModel {
                                        "id", session.id,
                                        "name", session.name,
                                        "type", session.type,
                                        "business_type", session.business_type||1,
                                        "last_sender_id", session.last_sender_id == null ? "" : session.last_sender_id,
                                        "last_sender_name", session.last_sender_name == null ? "" : session.last_sender_name,
                                        "last_content_type", session.last_content_type == null ? "" : session.last_content_type,
@ -338,7 +339,7 @@ class Users extends RedisModel {
        let self = this;
        async.waterfall([
                function (callback) {
                    self.isPatientId(userId, function (err, isPatient) {
                    Users.isPatientId(userId, function (err, isPatient) {
                        callback(null, isPatient)
                    });
                },
@ -368,7 +369,7 @@ class Users extends RedisModel {
     * @param userId
     * @param callback
     */
    isPatientId(userId, callback) {
    static isPatientId(userId, callback) {
        async.waterfall([
                function (callback) {
                    var sql = "select case when count(*) > 0 then true else false end 'is_patient' from patients where id = ?";

+ 11 - 0
src/server/repository/mysql/message.repo.js

@ -82,6 +82,17 @@ class MessageRepo {
            }
        });
    }
    static  updateLastContent(lastSenderId,lastSenderName,lastMessageTime,lastContent,lastContentType,sessionId,handler){
        let sql ="update "+DB_TABLES.Sessions+" set last_sender_id=?,last_sender_name=?,last_message_time=?,last_content=?,last_content_type=? where id = ?";
        ImDb.execQuery({
            "sql": sql,
            "args": [lastSenderId,lastSenderName,lastMessageTime,lastContent,lastContentType,sessionId],
            "handler": handler||function(err,res){
                log.info(res);
            }
        });
    }
}
module.exports = MessageRepo;

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

@ -55,6 +55,19 @@ class ParticipantRepo {
        handler(null, sessionId);
    }
    static  updateLastTime(lastMessageTime,sessionId,participantId,handler){
        let sql ="update "+DB_TABLES.Participants+" set last_fetch_time=? where session_id = ? and participant_id =?";
        ImDb.execQuery({
            "sql": sql,
            "args": [lastMessageTime,sessionId,participantId],
            "handler": handler||function(err,res){
                log.info(res);
            }
        });
    }
    /**
     * 用户是否在指定Session中
     *

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

@ -75,12 +75,12 @@ class SessionRepo {
     * @param createDate
     * @param handler
     */
    static saveSession(sessionId, name, type, createDate, handler) {
        let sql = "insert into " + DB_TABLES.Sessions + " (id, name, type, create_date) VALUES (?,?,?,?) " +
    static saveSession(sessionId, name, type, createDate,businessType, handler) {
        let sql = "insert into " + DB_TABLES.Sessions + " (id, name, type, create_date,business_type) VALUES (?,?,?,?,?) " +
            "ON DUPLICATE KEY UPDATE name = ?";
        ImDb.execQuery({
            "sql": sql,
            "args": [sessionId, name, type, createDate, name],
            "args": [sessionId, name, type, createDate, name,businessType],
            "handler": handler
        });
    }

+ 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: 15
    db: 13
};
// 三师后台