|
@ -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);
|