From 8a4eedeffdf7abf6b2a077a83e0e143cee7bff67 Mon Sep 17 00:00:00 2001 From: huxuejian Date: Mon, 3 Aug 2026 18:37:08 +0800 Subject: [PATCH] Update index.js --- hlw/consult-order/index.js | 73 +++++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/hlw/consult-order/index.js b/hlw/consult-order/index.js index 2382131..d06d962 100644 --- a/hlw/consult-order/index.js +++ b/hlw/consult-order/index.js @@ -716,7 +716,24 @@ async function acceptConsultOrder(item) { return { success: false, message: "订单已失效,请刷新" }; } const { consultationDuration } = await getConfig(corpId); + if ( + !Number.isFinite(consultationDuration) || + !Number.isInteger(consultationDuration) || + consultationDuration < 10 || + consultationDuration > 60 * 8 + ) { + return { + success: false, + message: "问诊持续时长配置无效,请联系管理员检查配置", + }; + } const expireTime = dayjs().add(consultationDuration, "minute").valueOf(); + if (!Number.isFinite(expireTime) || expireTime <= Date.now()) { + return { + success: false, + message: "问诊结束时间生成失败,请稍后重试", + }; + } const serverPrescriptionStartTime = Date.now(); const acceptResult = await db.collection("consult-order").updateOne( { orderId, corpId, orderStatus: "pending" }, @@ -815,17 +832,69 @@ async function acceptConsultOrder(item) { } // 结束问诊 async function finishConsultOrder(item) { + let countdownExpired = false; + if (item.triggerSource === "COUNTDOWN") { + const order = await db.collection("consult-order").findOne( + { orderId: item.orderId }, + { + projection: { + corpId: 1, + expireTime: 1, + prescriptionStartTime: 1, + }, + } + ); + if (!order) { + return { success: false, message: "订单不存在" }; + } + + let expireTime = Number(order.expireTime); + if (!Number.isFinite(expireTime) || expireTime <= 0) { + const { consultationDuration } = await getConfig(order.corpId); + const prescriptionStartTime = Number(order.prescriptionStartTime); + if ( + !Number.isFinite(consultationDuration) || + !Number.isInteger(consultationDuration) || + consultationDuration < 10 || + consultationDuration > 60 * 8 || + !Number.isFinite(prescriptionStartTime) || + prescriptionStartTime <= 0 + ) { + return { + success: false, + message: "问诊结束时间无效,请联系管理员检查配置", + }; + } + expireTime = prescriptionStartTime + consultationDuration * 60 * 1000; + await db.collection("consult-order").updateOne( + { _id: order._id }, + { $set: { expireTime, updateTime: Date.now() } } + ); + } + + if (expireTime > Date.now()) { + return { + success: false, + expired: false, + expireTime, + message: "问诊尚未到结束时间", + }; + } + countdownExpired = true; + } + // 判断是否有正在审核的单子 const count = await db.collection("diagnostic-record").countDocuments({ orderId: item.orderId, status: "INIT", }); - if (count > 0) { + if (count > 0 && !countdownExpired) { return { success: false, message: "存在正在审核的诊断单,不能结束咨询", }; } + console.log('疑问点01: ') return await serviceFinishConsultOrder(item); } async function serviceFinishConsultOrder(item) { @@ -847,6 +916,7 @@ async function serviceFinishConsultOrder(item) { } } // 更新订单状态 + console.log('疑问点03: ') await closeConsultOrder({ orderId, corpId, doctorCode }); await setDiagnosticExpired({ orderId }); return { @@ -1374,6 +1444,7 @@ async function refundFeeAndOrder(item) { status: "PASS", }); if (count > 0) { + console.log('疑问点02: ') return await serviceFinishConsultOrder({ orderId, doctorCode, corpId }); } }