From c2ed6e04b08efb5e354a7ae94ff39ff19cb41ea1 Mon Sep 17 00:00:00 2001 From: guanyu Date: Fri, 19 Jun 2026 16:53:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(#782):=20guanyu=20(=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=90=88=E5=85=A5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/AdviceManageAppServiceImpl.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java index 0c73c4441..6f4c4029a 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java @@ -1193,6 +1193,30 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { .set(DeviceRequest::getStatusEnum, RequestStatus.PENDING_STOP.getValue()) .set(DeviceRequest::getUpdateBy, stopUserName)); } + + // 🔧 Bug #782 修复:兜底处理未被以上任何类型过滤器捕获的医嘱 + // 当批量停嘱包含非标准 adviceType(如 type=31、type=7 等)时,这些医嘱 + // 不会被药品/诊疗/耗材任一组捕获,导致状态未更新为 PENDING_STOP,造成状态不一致 + // 将所有未匹配类型的医嘱统一按诊疗请求(ServiceRequest)处理 + Set handledIds = new HashSet<>(); + handledIds.addAll(medicineRequestIds); + handledIds.addAll(activityRequestIds); + handledIds.addAll(deviceRequestIds); + List fallbackRequestIds = paramList.stream() + .map(AdviceBatchOpParam::getRequestId) + .filter(Objects::nonNull) + .filter(id -> !handledIds.contains(id)) + .collect(Collectors.toList()); + if (!fallbackRequestIds.isEmpty()) { + log.info("Bug #782 兜底停嘱:处理未匹配类型的医嘱,requestIds: {}, 共{}条", + fallbackRequestIds, fallbackRequestIds.size()); + iServiceRequestService.update(new LambdaUpdateWrapper() + .in(ServiceRequest::getId, fallbackRequestIds) + .set(ServiceRequest::getOccurrenceEndTime, stopTime) + .set(ServiceRequest::getStatusEnum, RequestStatus.PENDING_STOP.getValue()) + .set(ServiceRequest::getUpdateBy, stopUserName)); + } + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[]{"医嘱停止"})); }