104 lines
3.7 KiB
JavaScript
104 lines
3.7 KiB
JavaScript
|
|
const { getDatabase } = require("../../mongodb");
|
|||
|
|
const tencentIM = require("../tencent-im");
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
* orderStatus completed(已完成) processing(处理中) pending(待处理) cancelled(已取消) finished(已结束)
|
|||
|
|
* syncOtherMachine 若不希望将消息同步至 From_Account,则 SyncOtherMachine 填写2;若希望将消息同步至 From_Account,则 SyncOtherMachine 填写1。
|
|||
|
|
* MsgType TIMTextElem(文本消息) TIMLocationElem(位置消息) TIMFaceElem(表情消息) TIMCustomElem(自定义消息) TIMSoundElem(语音消息) TIMImageElem(图像消息) TIMFileElem(文件消息) TIMVideoFileElem(视频消息)
|
|||
|
|
* MsgContent.Text 文本消息内容
|
|||
|
|
* MsgContent.Data 自定义消息类型 SUBMITMEDICALADVICE(提交医嘱) FINISHED(问诊结束) COMPLETED(问诊完成) CANCELLED(问诊取消) STARTCONSULT(开始问诊) ACCEPTCONSULT(接诊)
|
|||
|
|
* MsgContent.Desc notification
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
const handEvent = {
|
|||
|
|
finished: "FINISHED", // 问诊结束
|
|||
|
|
completed: "COMPLETED", // 问诊完成
|
|||
|
|
cancelled: "CANCELLED", // 问诊取消
|
|||
|
|
startConsult: "STARTCONSULT", // 开始问诊
|
|||
|
|
acceptConsult: "ACCEPTCONSULT", // 接诊
|
|||
|
|
submitMedicalAdvice: "SUBMITMEDICALADVICE", // 提交医嘱
|
|||
|
|
};
|
|||
|
|
exports.updateOrderStatusAndSendNotification = async (item) => {
|
|||
|
|
const { orderId, doctorCode, corpId, msgType, expireTime } = item;
|
|||
|
|
const db = await getDatabase("Internet-hospital");
|
|||
|
|
let orderStatus = "";
|
|||
|
|
let notification = "";
|
|||
|
|
let syncOtherMachine = 2;
|
|||
|
|
let formAccount = "";
|
|||
|
|
let toAccount = "";
|
|||
|
|
switch (msgType) {
|
|||
|
|
case "submitMedicalAdvice":
|
|||
|
|
// 提交医嘱 更新问诊状态为已完成 completed 并向医生发送一条系统消息
|
|||
|
|
orderStatus = "completed";
|
|||
|
|
formAccount = orderId;
|
|||
|
|
toAccount = doctorCode;
|
|||
|
|
notification = "";
|
|||
|
|
break;
|
|||
|
|
case "FINISHED":
|
|||
|
|
// 问诊结束 更新问诊状态为已结束 finished 并向医生和患者同时发送一条系统消息
|
|||
|
|
orderStatus = "finished";
|
|||
|
|
formAccount = orderId;
|
|||
|
|
toAccount = doctorCode;
|
|||
|
|
syncOtherMachine = 1;
|
|||
|
|
notification = "";
|
|||
|
|
break;
|
|||
|
|
case "COMPLETED":
|
|||
|
|
// 问诊完成 更新问诊状态为已完成 completed 并向医生发送一条系统消息, 医嘱已提交
|
|||
|
|
orderStatus = "completed";
|
|||
|
|
formAccount = orderId;
|
|||
|
|
toAccount = doctorCode;
|
|||
|
|
notification = "";
|
|||
|
|
break;
|
|||
|
|
case "CANCELLED":
|
|||
|
|
// 问诊取消 一般为超时未处理, 更新问诊状态为已取消 cancelled 并向患者发送一条系统消息
|
|||
|
|
orderStatus = "cancelled";
|
|||
|
|
formAccount = doctorCode;
|
|||
|
|
toAccount = orderId;
|
|||
|
|
syncOtherMachine = 1;
|
|||
|
|
notification = "";
|
|||
|
|
break;
|
|||
|
|
case "ACCEPTCONSULT":
|
|||
|
|
// 接诊 更新问诊状态为处理中 processing 并向患者发送一条系统消息
|
|||
|
|
orderStatus = "processing";
|
|||
|
|
formAccount = doctorCode;
|
|||
|
|
toAccount = orderId;
|
|||
|
|
syncOtherMachine = 2;
|
|||
|
|
notification = "医生已接受您的问诊请求";
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
let query = {
|
|||
|
|
orderStatus,
|
|||
|
|
updateTime: Date.now(),
|
|||
|
|
};
|
|||
|
|
if (expireTime) query.expireTime = expireTime;
|
|||
|
|
// 当医生开始处理, 开始加过期时间, 过期时间为30分钟
|
|||
|
|
await db.collection("consult-order").updateOne(
|
|||
|
|
{ orderId },
|
|||
|
|
{
|
|||
|
|
$set: {
|
|||
|
|
orderStatus,
|
|||
|
|
updateTime: Date.now(),
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
);
|
|||
|
|
await tencentIM({
|
|||
|
|
type: "sendSystemNotification",
|
|||
|
|
corpId,
|
|||
|
|
formAccount,
|
|||
|
|
toAccount,
|
|||
|
|
SyncOtherMachine: syncOtherMachine,
|
|||
|
|
msgBody: [
|
|||
|
|
{
|
|||
|
|
MsgType: "TIMCustomElem",
|
|||
|
|
MsgContent: {
|
|||
|
|
Data: msgType, //medical advice
|
|||
|
|
Desc: "notification",
|
|||
|
|
Ext: notification,
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
],
|
|||
|
|
});
|
|||
|
|
};
|