|
@ -79,7 +79,7 @@ router.post(APIv1.Chats.SM, function (req, res) {
|
|
|
}
|
|
|
|
|
|
var pushable = rows.length > 0 && rows[0].is_online;
|
|
|
var notifyMessage = JSON.stringify({type: 'system_msg', content: message.content});
|
|
|
var notifyMessage = JSON.stringify({type: 'system_msg', data: message.content});
|
|
|
var userStatus = rows[0];
|
|
|
|
|
|
// 保存该条推送信息
|
|
@ -112,22 +112,12 @@ router.post(APIv1.Chats.SM, function (req, res) {
|
|
|
} else {
|
|
|
if (pushable) {
|
|
|
if (userStatus.platform === PLATFORMS.iOS) {
|
|
|
getui.pushAPN(message.to,
|
|
|
userStatus.token,
|
|
|
message.contentType,
|
|
|
message.title,
|
|
|
message.content,
|
|
|
notifyMessage,
|
|
|
getui.pushAPN(message.to, userStatus.token, message.contentType, message.title, message.content, notifyMessage,
|
|
|
function (err, result) {
|
|
|
err != null ? console.log(err) : console.log(result);
|
|
|
});
|
|
|
} else if (userStatus.platform === PLATFORMS.Android) {
|
|
|
getui.pushAndroid(userStatus.client_id,
|
|
|
message.contentType,
|
|
|
message.title,
|
|
|
message.content,
|
|
|
notifyMessage,
|
|
|
userStatus.status,
|
|
|
getui.pushAndroid(userStatus.client_id, message.contentType, message.title, message.content, notifyMessage, userStatus.status,
|
|
|
function (err, result) {
|
|
|
err != null ? console.log(err) : console.log(result);
|
|
|
});
|
|
@ -334,7 +324,7 @@ router.post(APIv1.Chats.GM, function (req, res) {
|
|
|
}
|
|
|
|
|
|
// 保存群组消息
|
|
|
groupMsg.save(message.from, message.group, message.at, message.contentType, message.content, function (err, result) {
|
|
|
groupMsg.save(message.from, message.group, message.at, message.contentType, message.content, function (err, insertedRow) {
|
|
|
if (err) {
|
|
|
log.error('Save group message failed: ', err);
|
|
|
|
|
@ -342,7 +332,7 @@ router.post(APIv1.Chats.GM, function (req, res) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
groupMsg.findOneMessage(result.insertId, function (err, groupMsg) {
|
|
|
groupMsg.findOneMessage(insertedRow.insertId, function (err, groupMsg) {
|
|
|
if (err) {
|
|
|
log.error("Save group message success, but return this message failed.");
|
|
|
|
|
@ -358,13 +348,13 @@ router.post(APIv1.Chats.GM, function (req, res) {
|
|
|
});
|
|
|
|
|
|
// 推送通知消息给群组成员
|
|
|
group.getMembers(message.group, message.groupType, function (err, result) {
|
|
|
group.getMembers(message.group, message.groupType, function (err, members) {
|
|
|
if (err) {
|
|
|
log.error('Get group members failed: ', err);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (result.length == 0) {
|
|
|
if (members.length == 0) {
|
|
|
log.warn('No members in group ', message.group,
|
|
|
message.groupType === GROUP_TYPE.AdminTeam ? " of admin team." : "of discussion group.");
|
|
|
|
|
@ -372,122 +362,125 @@ router.post(APIv1.Chats.GM, function (req, res) {
|
|
|
}
|
|
|
|
|
|
// 逐个推送通知
|
|
|
for (var i = 0; i < result.length; i++) {
|
|
|
var member = result[i];
|
|
|
if (member.user_id === message.from) continue;
|
|
|
|
|
|
user.getUserStatus(member.user_id, function (err, result) {
|
|
|
if (err) {
|
|
|
console.error('Get group member status failed: ', err);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var title = '';
|
|
|
var content = '';
|
|
|
if (message.contentType === CONTENT_TYPES.PlainText) {
|
|
|
title = '群组消息';
|
|
|
content = message.content;
|
|
|
} else if (message.contentType === CONTENT_TYPES.Image) {
|
|
|
title = '群组消息';
|
|
|
content = '[图片]';
|
|
|
} else if (message.contentType === CONTENT_TYPES.Audio) {
|
|
|
title = '群组消息';
|
|
|
content = '[语音]';
|
|
|
} else {
|
|
|
title = '群组消息';
|
|
|
content = '接收到一条新消息';
|
|
|
}
|
|
|
|
|
|
var pushable = result.length > 0 && result[0].is_online === 1;
|
|
|
var notifyMessage = JSON.stringify({type: 'group_msg', gid: message.group});
|
|
|
for (var i = 0; i < members.length; i++) {
|
|
|
var member = members[i];
|
|
|
if (member.user_id === message.from){
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
// 发送并保存通知到数据库中
|
|
|
if (pushable) {
|
|
|
var userStatus = result[0];
|
|
|
(function (user_id) {
|
|
|
user.getUserStatus(user_id, function (err, result) {
|
|
|
if (err) {
|
|
|
console.error('Get group member status failed: ', err);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (userStatus.platform === PLATFORMS.iOS) {
|
|
|
getui.pushAPN(member.user_id,
|
|
|
userStatus.token,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
function (err, result) {
|
|
|
err != null ? console.error(err) : console.log(result);
|
|
|
|
|
|
// 这段代码重复
|
|
|
notifyMsg.save(member.user_id,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
err != null ? 0 : 1,
|
|
|
function (err, result) {
|
|
|
if (err) {
|
|
|
console.log('Save group notify message failed: ', err);
|
|
|
} else {
|
|
|
var title = '';
|
|
|
var content = '';
|
|
|
if (message.contentType === CONTENT_TYPES.PlainText) {
|
|
|
title = '群组消息';
|
|
|
content = message.content;
|
|
|
} else if (message.contentType === CONTENT_TYPES.Image) {
|
|
|
title = '群组消息';
|
|
|
content = '[图片]';
|
|
|
} else if (message.contentType === CONTENT_TYPES.Audio) {
|
|
|
title = '群组消息';
|
|
|
content = '[语音]';
|
|
|
} else {
|
|
|
title = '群组消息';
|
|
|
content = '接收到一条新消息';
|
|
|
}
|
|
|
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
} else if (userStatus.platform === PLATFORMS.Android) {
|
|
|
getui.pushAndroid(data.client_id,
|
|
|
var pushable = result.length > 0 && result[0].is_online === 1;
|
|
|
var notifyMessage = JSON.stringify({type: 'group_msg', gid: message.group});
|
|
|
|
|
|
// 发送并保存通知到数据库中
|
|
|
if (pushable) {
|
|
|
var userStatus = result[0];
|
|
|
|
|
|
if (userStatus.platform === PLATFORMS.iOS) {
|
|
|
getui.pushAPN(user_id,
|
|
|
userStatus.token,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
function (err, result) {
|
|
|
err != null ? console.error(err) : console.log(result);
|
|
|
|
|
|
// 这段代码重复
|
|
|
notifyMsg.save(user_id,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
err != null ? 0 : 1,
|
|
|
function (err, result) {
|
|
|
if (err) {
|
|
|
console.log('Save group notify message failed: ', err);
|
|
|
} else {
|
|
|
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
} else if (userStatus.platform === PLATFORMS.Android) {
|
|
|
getui.pushAndroid(data.client_id,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
userStatus.status,
|
|
|
function (err, result) {
|
|
|
err != null ? console.error(err) : console.log(result);
|
|
|
|
|
|
// 这段代码重复
|
|
|
notifyMsg.save(user_id,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
err != null ? 0 : 1,
|
|
|
function (err, result) {
|
|
|
if (err) {
|
|
|
console.log('Save group notify message failed: ', err);
|
|
|
} else {
|
|
|
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
} else {
|
|
|
// 这段代码重复
|
|
|
notifyMsg.save(user_id,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
userStatus.status,
|
|
|
0,
|
|
|
function (err, result) {
|
|
|
err != null ? console.error(err) : console.log(result);
|
|
|
|
|
|
// 这段代码重复
|
|
|
notifyMsg.save(member.user_id,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
err != null ? 0 : 1,
|
|
|
function (err, result) {
|
|
|
if (err) {
|
|
|
console.log('Save group notify message failed: ', err);
|
|
|
} else {
|
|
|
if (err) {
|
|
|
console.log('Save group notify message failed: ', err);
|
|
|
} else {
|
|
|
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
} else {
|
|
|
// 这段代码重复
|
|
|
notifyMsg.save(member.user_id,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
0,
|
|
|
function (err, result) {
|
|
|
if (err) {
|
|
|
console.log('Save group notify message failed: ', err);
|
|
|
} else {
|
|
|
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
|
|
|
// 统计'@'信息
|
|
|
var at = 0;
|
|
|
if (message.at == member.user_id) at = 1;
|
|
|
|
|
|
msgStats.updateGroupChatSummary(member.user_id,
|
|
|
message.group,
|
|
|
message.from,
|
|
|
at,
|
|
|
message.contentType,
|
|
|
message.content,
|
|
|
true,
|
|
|
function (err, result) {
|
|
|
if (err) console.log(err);
|
|
|
});
|
|
|
|
|
|
// 统计'@'信息
|
|
|
var at = message.at == user_id ? 1 : 0;
|
|
|
|
|
|
msgStats.updateGroupChatSummary(user_id,
|
|
|
message.group,
|
|
|
message.from,
|
|
|
at,
|
|
|
message.contentType,
|
|
|
message.content,
|
|
|
true,
|
|
|
function (err, result) {
|
|
|
if (err) console.log(err);
|
|
|
});
|
|
|
})(member.user_id);
|
|
|
}
|
|
|
});
|
|
|
});
|
|
@ -510,36 +503,106 @@ router.get(APIv1.Chats.List, function (req, res) {
|
|
|
throw {httpStatus: 406, message: 'Missing fields.'};
|
|
|
}
|
|
|
|
|
|
msgStats.getChatList(userId, function (err, rows) {
|
|
|
// 与患者的私信
|
|
|
privateMsg.findAllP2PWithPatient(userId, function (err, patients) {
|
|
|
if (err) {
|
|
|
log.error('Get user chat list failed: ', err);
|
|
|
log.error('Get chat list with patient failed: ', err);
|
|
|
|
|
|
res.status(500).send({message: 'Get user chat list failed.'});
|
|
|
res.status(500).send({message: 'Get chat list with patient failed.'});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (rows.length == 0) {
|
|
|
res.status(200).send([]);
|
|
|
return;
|
|
|
var chats = {patients: [], doctors: [], groups: []};
|
|
|
for (var i = 0; i < patients.length; i++) {
|
|
|
var patient = patients[i];
|
|
|
chats.patients.push({
|
|
|
code: patient.code,
|
|
|
name: patient.name,
|
|
|
birthday: patient.birthday,
|
|
|
sex: patient.sex,
|
|
|
avatar: patient.photo == null ? "" : patient.photo,
|
|
|
newMessageCount: patient.new_msg_count,
|
|
|
lastContentType: patient.last_content_type,
|
|
|
lastContent: patient.last_content,
|
|
|
timestamp: objectUtil.timestampToLong(patient.timestamp)
|
|
|
});
|
|
|
}
|
|
|
|
|
|
var chats = new Array(rows.length);
|
|
|
for (var i = 0; i < rows.length; i++) {
|
|
|
var row = rows[i];
|
|
|
chats[i] = {
|
|
|
userId: row.uid,
|
|
|
peerId: row.from_uid,
|
|
|
groupId: row.from_gid === undefined ? "" : row.from_gid,
|
|
|
atMe: row.at_me === 1,
|
|
|
messageType: row.msg_type,
|
|
|
lastContentType: row.last_content_type,
|
|
|
lastContent: row.last_content,
|
|
|
newMessageCount: row.new_msg_count,
|
|
|
timestamp: objectUtil.timestampToLong(row.timestamp)
|
|
|
};
|
|
|
}
|
|
|
// 含有患者的群
|
|
|
groupMsg.findAllGroupsWithPatient(userId, function (err, groups) {
|
|
|
if (err) {
|
|
|
log.error('Get group list with patient failed: ', err);
|
|
|
|
|
|
res.status(500).send({message: 'Get group list with patient failed.'});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
res.status(200).send(chats);
|
|
|
for (var i = 0; i < groups.length; i++) {
|
|
|
var group = groups[i];
|
|
|
|
|
|
// 过滤掉医生间的求助团队
|
|
|
if(group.group_type === 2) continue;
|
|
|
|
|
|
chats.groups.push({
|
|
|
code: group.code,
|
|
|
name: group.name,
|
|
|
groupType: group.msg_type,
|
|
|
newMessageCount: group.new_msg_count,
|
|
|
lastContentType: group.last_content_type,
|
|
|
lastContent: group.last_content,
|
|
|
timestamp: objectUtil.timestampToLong(group.timestamp)
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// 医生间的私聊
|
|
|
privateMsg.findAllP2PWithDoctor(userId, function (err, doctors) {
|
|
|
if (err) {
|
|
|
log.error('Get chat list with doctor failed: ', err);
|
|
|
|
|
|
res.status(500).send({message: 'Get chat list with doctor failed.'});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
for (var i = 0; i < doctors.length; i++) {
|
|
|
var doctor = doctors[i];
|
|
|
chats.doctors.push({
|
|
|
code: doctor.code,
|
|
|
name: doctor.name,
|
|
|
sex: doctor.sex,
|
|
|
avatar: doctor.photo === null ? "" : doctor.photo,
|
|
|
newMessageCount: doctor.new_msg_count,
|
|
|
lastContentType: doctor.last_content_type,
|
|
|
lastContent: doctor.last_content,
|
|
|
timestamp: objectUtil.timestampToLong(doctor.timestamp)
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// 获取医生间的组
|
|
|
groupMsg.findAllGroupsWithDoctor(userId, function (err, groups) {
|
|
|
if (err) {
|
|
|
log.error('Get group list with doctor failed: ', err);
|
|
|
|
|
|
res.status(500).send({message: 'Get group list with doctor failed.'});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
for (var i = 0; i < groups.length; i++) {
|
|
|
var group = groups[i];
|
|
|
chats.groups.push({
|
|
|
code: group.code,
|
|
|
name: group.name,
|
|
|
groupType: group.group_type, // 行政团队 or 求助
|
|
|
newMessageCount: group.new_msg_count,
|
|
|
lastContentType: group.last_content_type,
|
|
|
lastContent: group.last_content,
|
|
|
timestamp: objectUtil.timestampToLong(group.timestamp)
|
|
|
});
|
|
|
}
|
|
|
|
|
|
res.status(200).send(chats);
|
|
|
});
|
|
|
});
|
|
|
})
|
|
|
});
|
|
|
});
|
|
|
|
|
@ -589,6 +652,10 @@ router.get(APIv1.Chats.ListWithPatient, function (req, res) {
|
|
|
|
|
|
for (var i = 0; i < groups.length; i++) {
|
|
|
var group = groups[i];
|
|
|
|
|
|
// 过滤掉医生间的求助团队
|
|
|
if(group.group_type === 2) continue;
|
|
|
|
|
|
chats.groups.push({
|
|
|
code: group.code,
|
|
|
name: group.name,
|
|
@ -655,7 +722,7 @@ router.get(APIv1.Chats.ListWithDoctor, function (req, res) {
|
|
|
chats.groups.push({
|
|
|
code: group.code,
|
|
|
name: group.name,
|
|
|
groupType: group.type,
|
|
|
groupType: group.group_type, // 行政团队 or 求助
|
|
|
newMessageCount: group.new_msg_count,
|
|
|
lastContentType: group.last_content_type,
|
|
|
lastContent: group.last_content,
|
|
@ -743,10 +810,11 @@ router.get(APIv1.Chats.Recent, function (req, res) {
|
|
|
* content_type 必须,消息类型
|
|
|
* message_start_id 可选,消息的起始ID,如果为空从最新的一条开始获取
|
|
|
* message_end_id 可选,消息的结束ID,如果为空从第一条开始获取
|
|
|
* count 可选,消息数量,如果不指定、小于零或大于50,默认为100条。若message_start_id与message_end_id均不为空,则此参数无效,方法是设置为10000条。
|
|
|
* count 可选,消息数量,如果不指定、小于零或大于50,默认为100条。若message_start_id与message_end_id均不为空,则此参数无效,方法是设置为10000条
|
|
|
* closed_interval 消息范围是否使用闭区间
|
|
|
*
|
|
|
* 请求URL:
|
|
|
* /chats/pm?user_id=sand&peer_id=Rose&content_type=2&message_start_id=10000&message_end_id=0&count=20
|
|
|
* /chats/pm?user_id=sand&peer_id=Rose&content_type=2&message_start_id=10000&message_end_id=0&count=20&closed_interval=false
|
|
|
*/
|
|
|
router.get(APIv1.Chats.PM, function (req, res) {
|
|
|
var userId = req.query.user_id;
|
|
@ -755,16 +823,17 @@ router.get(APIv1.Chats.PM, function (req, res) {
|
|
|
var msgStartId = !req.query.message_start_id ? MAX_INT : parseInt(req.query.message_start_id);
|
|
|
var msgEndId = !req.query.message_end_id ? 0 : parseInt(req.query.message_end_id);
|
|
|
var count = req.query.count === undefined ? DEFAULT_PAGE_SIZE : parseInt(req.query.count);
|
|
|
var closedInterval = (req.query.closed_interval != false && req.query.closed_interval === "true");
|
|
|
|
|
|
if (contentType !== undefined && parseInt(contentType) === CONTENT_TYPES.Image) count = DEFAULT_PAGE_SIZE;
|
|
|
|
|
|
if (req.query.message_start_id && req.query.message_end_id) count = 10000;
|
|
|
|
|
|
if (userId === undefined) {
|
|
|
throw {httpStatus: 400, message: "Missing field."};
|
|
|
if (!userId) {
|
|
|
throw {httpStatus: 400, message: "Missing field: user_id."};
|
|
|
}
|
|
|
|
|
|
privateMsg.findAllMessages(userId, peerId, contentType === undefined ? "1,2,3,5,6" : contentType, msgStartId, msgEndId, count, function (err, rows) {
|
|
|
privateMsg.findAllMessages(userId, peerId, contentType === undefined ? "1,2,3,5,6" : contentType, msgStartId, msgEndId, count, closedInterval, function (err, rows) {
|
|
|
if (err) {
|
|
|
log.error("Get private message failed, ", err);
|
|
|
|
|
@ -869,7 +938,7 @@ router.get(APIv1.Chats.GM, function (req, res) {
|
|
|
var messages = fillMessages(rows);
|
|
|
|
|
|
// 清空统计信息
|
|
|
msgStats.clearGroupChatSummary(req.query.uid, userId, function (err, result) {
|
|
|
msgStats.clearGroupChatSummary(userId, groupId, function (err, result) {
|
|
|
if (err) console.log(err);
|
|
|
});
|
|
|
|
|
@ -1363,4 +1432,42 @@ router.get(APIv1.Chats.SearchAboutDoctor, function (req, res) {
|
|
|
});
|
|
|
});
|
|
|
|
|
|
/**
|
|
|
* 判断当前会话是否已经结束。
|
|
|
*
|
|
|
* 请求URL:
|
|
|
* /chats/pm/finished?user_id=sand&peer_id=rose
|
|
|
*/
|
|
|
router.get(APIv1.Chats.PMFinished, function (req, res) {
|
|
|
var userId = req.query.user_id;
|
|
|
var peerId = req.query.peer_id;
|
|
|
if(!userId){
|
|
|
throw {httpStatus: 406, message: "Missing field: user_id"};
|
|
|
}
|
|
|
|
|
|
if(!peerId){
|
|
|
throw {httpStatus: 406, message: "Missing field: peer_id"};
|
|
|
}
|
|
|
|
|
|
privateMsg.isCurrentSessionFinished(userId, peerId, function (err, result) {
|
|
|
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){
|
|
|
var finishRow = result[0];
|
|
|
|
|
|
data.finished = finishRow.finished === 1;
|
|
|
if(!data.finished){
|
|
|
data.consultId = finishRow.consult_id;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
res.status(200).send(data);
|
|
|
})
|
|
|
});
|
|
|
|
|
|
module.exports = router;
|