|
@ -11,12 +11,15 @@ var getui = require('getui');
|
|
|
var log = require('../util/log.js');
|
|
|
var objectUtil = require("../util/objectUtil.js");
|
|
|
|
|
|
var Patient = new require("../models/patient");
|
|
|
var patient = new Patient();
|
|
|
|
|
|
var smRepo = require("../repository/system.msg.repo.js");
|
|
|
var pmRepo = require('../repository/private.msg.repo.js');
|
|
|
var gmRepo = require("../repository/group.msg.repo.js");
|
|
|
var nmRepo = require("../repository/notify.msg.repo.js");
|
|
|
var statsRepo = require("../repository/stats.msg.repo.js");
|
|
|
var userRepo = require("../repository/doctor.repo.js");
|
|
|
var doctorRepo = require("../repository/doctor.repo.js");
|
|
|
var groupRepo = require("../repository/group.repo.js");
|
|
|
var searchRepo = require('../repository/search.repo.js');
|
|
|
|
|
@ -64,7 +67,7 @@ router.post(APIv1.Chats.SM, function (req, res) {
|
|
|
}
|
|
|
|
|
|
// 消息处理
|
|
|
userRepo.getUserStatus(message.to, function (err, rows) {
|
|
|
doctorRepo.getUserStatus(message.to, function (err, rows) {
|
|
|
if (err) {
|
|
|
console.log("Lookup system message receiver failed: ", err);
|
|
|
|
|
@ -158,123 +161,128 @@ router.post(APIv1.Chats.PM, function (req, res) {
|
|
|
// 字段判断
|
|
|
var testing = objectUtil.fieldsCheck(message, "from", "to", "contentType", "content");
|
|
|
if (!testing.pass) {
|
|
|
throw {httpStatus: 406, message: testing.message}
|
|
|
throw {httpStatus: 406, message: testing.message};
|
|
|
}
|
|
|
|
|
|
// 处理消息
|
|
|
userRepo.isExist(message.to, function (err, rows) {
|
|
|
if (err) {
|
|
|
console.log('Lookup receiving users failed: ', err);
|
|
|
|
|
|
res.status(500).send({message: 'Lookup receiving users failed.'});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (rows.length == 0) {
|
|
|
res.status(404).send({message: 'Receiving users not found.'});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 保存消息
|
|
|
var tempContent = message.contentType === CONTENT_TYPES.Article ? JSON.stringify(message.content) : message.content;
|
|
|
pmRepo.save(message.to, message.from, message.contentType, tempContent, function (err, result) {
|
|
|
if (err) {
|
|
|
res.status(500).send({message: 'Save private message failed.'});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 结束网络连接,后续操作继续执行
|
|
|
pmRepo.findOneMessage(result.insertId, function (err, msg) {
|
|
|
patient.isPatientCode(message.to,
|
|
|
function () {
|
|
|
patient.sendMessage(message);
|
|
|
}, function () {
|
|
|
// 处理消息
|
|
|
doctorRepo.isExist(message.to, function (err, rows) {
|
|
|
if (err) {
|
|
|
res.status(500).send("Save private message success, but return last message failed.");
|
|
|
} else {
|
|
|
var message = fillMessages(msg);
|
|
|
res.status(200).send(message);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
// 更新自身的聊天统计信息
|
|
|
statsRepo.updatePrivateChatSummary(message.from, message.to, message.from, message.contentType, message.content, function (err, result) {
|
|
|
if (err) log.error(err);
|
|
|
});
|
|
|
|
|
|
// 更新对端的聊天统计信息
|
|
|
statsRepo.updatePrivateChatSummary(message.to, message.from, message.from, message.contentType, message.content, function (err, result) {
|
|
|
if (err) log.error(err);
|
|
|
});
|
|
|
console.log('Lookup receiving users failed: ', err);
|
|
|
|
|
|
// 获取对方状态,即对端的系统平台,token等信息,并推送通知消息给对端
|
|
|
userRepo.getUserStatus(message.to, function (err, result) {
|
|
|
if (err) {
|
|
|
log.error('Get target user status for private message failed: ' + message.to);
|
|
|
res.status(500).send({message: 'Lookup receiving users failed.'});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 构建通知消息
|
|
|
var title = '新消息';
|
|
|
var content = '';
|
|
|
if (message.contentType === CONTENT_TYPES.PlainText) {
|
|
|
content = message.content;
|
|
|
} else if (message.contentType === CONTENT_TYPES.Image) {
|
|
|
content = '[图片]';
|
|
|
} else if (message.contentType === CONTENT_TYPES.Audio) {
|
|
|
content = '[语音]';
|
|
|
} else {
|
|
|
content = '接收到一条新消息';
|
|
|
if (rows.length == 0) {
|
|
|
res.status(404).send({message: 'Receiving users not found.'});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var pushable = false;
|
|
|
var target;
|
|
|
if (result.length > 0) {
|
|
|
target = result[0];
|
|
|
if (target.is_online) {
|
|
|
pushable = true;
|
|
|
// 保存消息
|
|
|
var tempContent = message.contentType === CONTENT_TYPES.Article ? JSON.stringify(message.content) : message.content;
|
|
|
pmRepo.save(message.to, message.from, message.contentType, tempContent, function (err, result) {
|
|
|
if (err) {
|
|
|
res.status(500).send({message: 'Save private message failed.'});
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var notifyMessage = JSON.stringify({type: 'p2p_msg', from_uid: message.from});
|
|
|
// 结束网络连接,后续操作继续执行
|
|
|
pmRepo.findOneMessage(result.insertId, function (err, msg) {
|
|
|
if (err) {
|
|
|
res.status(500).send({message: "Save private message success, but return last message failed."});
|
|
|
} else {
|
|
|
var message = fillMessages(msg);
|
|
|
res.status(200).send(message);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
// 保存通知消息到数据库中并根据用户在线状态推送此消息
|
|
|
nmRepo.save(message.to, message.contentType, title, content, notifyMessage, pushable, function (err, result) {
|
|
|
if (err) {
|
|
|
log.error('Save private notify message failed, ', err);
|
|
|
} else {
|
|
|
if (pushable === true) {
|
|
|
if (target.platform === PLATFORMS.iOS) {
|
|
|
getui.pushAPN(message.to,
|
|
|
target.token,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
function (err, result) {
|
|
|
if (err != null) {
|
|
|
console.log(err);
|
|
|
} else {
|
|
|
console.log(result);
|
|
|
}
|
|
|
});
|
|
|
} else if (target.platform === PLATFORMS.Android) {
|
|
|
getui.pushAndroid(target.client_id,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
target.status,
|
|
|
function (err, result) {
|
|
|
if (err != null) {
|
|
|
console.log(err);
|
|
|
} else {
|
|
|
console.log(result);
|
|
|
}
|
|
|
});
|
|
|
// 更新自身的聊天统计信息
|
|
|
statsRepo.updatePrivateChatSummary(message.from, message.to, message.from, message.contentType, message.content, function (err, result) {
|
|
|
if (err) log.error(err);
|
|
|
});
|
|
|
|
|
|
// 更新对端的聊天统计信息
|
|
|
statsRepo.updatePrivateChatSummary(message.to, message.from, message.from, message.contentType, message.content, function (err, result) {
|
|
|
if (err) log.error(err);
|
|
|
});
|
|
|
|
|
|
// 获取对方状态,即对端的系统平台,token等信息,并推送通知消息给对端
|
|
|
doctorRepo.getUserStatus(message.to, function (err, result) {
|
|
|
if (err) {
|
|
|
log.error('Get target user status for private message failed: ' + message.to);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 构建通知消息
|
|
|
var title = '新消息';
|
|
|
var content = '';
|
|
|
if (message.contentType === CONTENT_TYPES.PlainText) {
|
|
|
content = message.content;
|
|
|
} else if (message.contentType === CONTENT_TYPES.Image) {
|
|
|
content = '[图片]';
|
|
|
} else if (message.contentType === CONTENT_TYPES.Audio) {
|
|
|
content = '[语音]';
|
|
|
} else {
|
|
|
content = '接收到一条新消息';
|
|
|
}
|
|
|
|
|
|
var pushable = false;
|
|
|
var target;
|
|
|
if (result.length > 0) {
|
|
|
target = result[0];
|
|
|
if (target.is_online) {
|
|
|
pushable = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var notifyMessage = JSON.stringify({type: 'p2p_msg', from_uid: message.from});
|
|
|
|
|
|
// 保存通知消息到数据库中并根据用户在线状态推送此消息
|
|
|
nmRepo.save(message.to, message.contentType, title, content, notifyMessage, pushable, function (err, result) {
|
|
|
if (err) {
|
|
|
log.error('Save private notify message failed, ', err);
|
|
|
} else {
|
|
|
if (pushable === true) {
|
|
|
if (target.platform === PLATFORMS.iOS) {
|
|
|
getui.pushAPN(message.to,
|
|
|
target.token,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
function (err, result) {
|
|
|
if (err != null) {
|
|
|
console.log(err);
|
|
|
} else {
|
|
|
console.log(result);
|
|
|
}
|
|
|
});
|
|
|
} else if (target.platform === PLATFORMS.Android) {
|
|
|
getui.pushAndroid(target.client_id,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
target.status,
|
|
|
function (err, result) {
|
|
|
if (err != null) {
|
|
|
console.log(err);
|
|
|
} else {
|
|
|
console.log(result);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
|
|
|
/**
|
|
@ -363,12 +371,12 @@ router.post(APIv1.Chats.GM, function (req, res) {
|
|
|
// 逐个推送通知
|
|
|
for (var i = 0; i < members.length; i++) {
|
|
|
var member = members[i];
|
|
|
if (member.user_id === message.from){
|
|
|
if (member.user_id === message.from) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
(function (user_id) {
|
|
|
userRepo.getUserStatus(user_id, function (err, result) {
|
|
|
doctorRepo.getUserStatus(user_id, function (err, result) {
|
|
|
if (err) {
|
|
|
console.error('Get group member status failed: ', err);
|
|
|
return;
|
|
@ -540,7 +548,7 @@ router.get(APIv1.Chats.List, function (req, res) {
|
|
|
var group = groups[i];
|
|
|
|
|
|
// 过滤掉医生间的求助团队
|
|
|
if(group.group_type === 2) continue;
|
|
|
if (group.group_type === 2) continue;
|
|
|
|
|
|
//查找医生在讨论组的最新的消息记录数
|
|
|
|
|
@ -655,7 +663,7 @@ router.get(APIv1.Chats.ListWithPatient, function (req, res) {
|
|
|
var group = groups[i];
|
|
|
|
|
|
// 过滤掉医生间的求助团队
|
|
|
if(group.group_type === 2) continue;
|
|
|
if (group.group_type === 2) continue;
|
|
|
|
|
|
chats.groups.push({
|
|
|
code: group.code,
|
|
@ -1442,27 +1450,27 @@ router.get(APIv1.Chats.SearchAboutDoctor, function (req, res) {
|
|
|
router.get(APIv1.Chats.PMFinished, function (req, res) {
|
|
|
var userId = req.query.user_id;
|
|
|
var peerId = req.query.peer_id;
|
|
|
if(!userId){
|
|
|
if (!userId) {
|
|
|
throw {httpStatus: 406, message: "Missing field: user_id"};
|
|
|
}
|
|
|
|
|
|
if(!peerId){
|
|
|
if (!peerId) {
|
|
|
throw {httpStatus: 406, message: "Missing field: peer_id"};
|
|
|
}
|
|
|
|
|
|
pmRepo.isCurrentSessionFinished(userId, peerId, function (err, result) {
|
|
|
if(err){
|
|
|
if (err) {
|
|
|
log.error("Get session finish status failed: ", err);
|
|
|
|
|
|
throw {httpStatus: 500, message: "Get session finish status failed."};
|
|
|
}
|
|
|
|
|
|
var data = {finished: true, consultId: ''};
|
|
|
if(result.length > 0){
|
|
|
if (result.length > 0) {
|
|
|
var finishRow = result[0];
|
|
|
|
|
|
data.finished = finishRow.finished === 1;
|
|
|
if(!data.finished){
|
|
|
if (!data.finished) {
|
|
|
data.consultId = finishRow.consult_id;
|
|
|
}
|
|
|
}
|