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 980e97ba7..621ca017e 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 @@ -1165,18 +1165,34 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { = activityList.stream().map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList()); // ============ 前置校验 ============ - // 1. 护士站校验:查询药品发放记录,确认护士站是否已执行停止核对(发药) + // 1. 护士站校验:确认医嘱请求仍处于"停止"状态,未被护士核对处理 + // 修正:不再基于 Dispense 历史状态校验,改为直接检查 Request 的当前状态 + if (!medicineRequestIds.isEmpty()) { + List medicineRequestList = iMedicationRequestService.list( + new LambdaQueryWrapper() + .select(MedicationRequest::getId, MedicationRequest::getStatusEnum) + .in(MedicationRequest::getId, medicineRequestIds)); + for (MedicationRequest mr : medicineRequestList) { + if (!RequestStatus.STOPPED.getValue().equals(mr.getStatusEnum())) { + throw new ServiceException("护士站已确认停止该医嘱,无法取消停嘱!"); + } + } + } + if (!activityRequestIds.isEmpty()) { + List activityRequestList = iServiceRequestService.list( + new LambdaQueryWrapper() + .select(ServiceRequest::getId, ServiceRequest::getStatusEnum) + .in(ServiceRequest::getId, activityRequestIds)); + for (ServiceRequest sr : activityRequestList) { + if (!RequestStatus.STOPPED.getValue().equals(sr.getStatusEnum())) { + throw new ServiceException("护士站已确认停止该医嘱,无法取消停嘱!"); + } + } + } + // 2. 药房端校验:如果已有退药/退费记录,说明药房已处理 if (!medicineRequestIds.isEmpty()) { List dispenseList = iMedicationDispenseService.selectByRequestIdList(medicineRequestIds); for (MedicationDispense dispense : dispenseList) { - // 如果发放状态 >= COMPLETED(4),说明护士站已发药/已确认停止 - if (dispense.getStatusEnum() != null && dispense.getStatusEnum() >= DispenseStatus.COMPLETED.getValue() - && !DispenseStatus.ON_HOLD.getValue().equals(dispense.getStatusEnum()) - && !DispenseStatus.STOPPED.getValue().equals(dispense.getStatusEnum()) - && !DispenseStatus.CANCELLED.getValue().equals(dispense.getStatusEnum())) { - throw new ServiceException("护士站已确认停止该医嘱,无法取消停嘱!"); - } - // 2. 药房端校验:如果已有退药/退费记录,说明药房已处理 if (DispenseStatus.RETURNED.getValue().equals(dispense.getStatusEnum()) || DispenseStatus.REFUNDED.getValue().equals(dispense.getStatusEnum()) || DispenseStatus.PART_REFUND.getValue().equals(dispense.getStatusEnum())) {