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[]{"医嘱停止"})); }