hn-hlw-service/hlw/utils/status-update.js

104 lines
3.7 KiB
JavaScript
Raw Permalink Normal View History

2026-07-27 11:28:33 +08:00
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,
},
},
],
});
};