diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java index 2238165f5..6610f7237 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/appservice/impl/AdviceProcessAppServiceImpl.java @@ -232,38 +232,48 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { } } - // 手动处理前端传来的执行条件 - if (exeStatus != null) { - // 处理执行记录状态 - for (InpatientAdviceDto inpatientAdvice : inpatientAdviceList) { - List performRecordList = procedureRecordGroup.get(inpatientAdvice.getRequestId()); - List exePerformRecordList = new ArrayList<>(); - List cancelPerformRecordList = new ArrayList<>(); - List stopPerformRecordList = new ArrayList<>(); - if (performRecordList != null && !performRecordList.isEmpty()) { - // 按时间分组,处理每个时间点的多条记录 - Map> recordsByTime = performRecordList.stream() - .collect(Collectors.groupingBy(record -> record.getOccurrenceTime().toString())); - for (Map.Entry> entry : recordsByTime.entrySet()) { - List records = entry.getValue(); - // 按操作顺序排序 - records.sort(Comparator.comparing(PerformRecordDto::getCreateTime)); - // 取最后一条记录,最终状态由最后一次操作决定 - PerformRecordDto lastRecord = records.get(records.size() - 1); - if (EventStatus.COMPLETED.getValue().equals(lastRecord.getStatusEnum())) { - exePerformRecordList.add(lastRecord); - } else if (EventStatus.CANCEL.getValue().equals(lastRecord.getStatusEnum())) { - cancelPerformRecordList.add(lastRecord); - } else if (EventStatus.STOPPED.getValue().equals(lastRecord.getStatusEnum())) { - stopPerformRecordList.add(lastRecord); - } + // 为所有医嘱计算执行记录状态(所有页签都需要展示执行进度) + for (InpatientAdviceDto inpatientAdvice : inpatientAdviceList) { + List performRecordList = procedureRecordGroup.get(inpatientAdvice.getRequestId()); + List exePerformRecordList = new ArrayList<>(); + List cancelPerformRecordList = new ArrayList<>(); + List stopPerformRecordList = new ArrayList<>(); + if (performRecordList != null && !performRecordList.isEmpty()) { + // 按时间分组,处理每个时间点的多条记录 + Map> recordsByTime = performRecordList.stream() + .collect(Collectors.groupingBy(record -> record.getOccurrenceTime().toString())); + for (Map.Entry> entry : recordsByTime.entrySet()) { + List records = entry.getValue(); + // 按操作顺序排序 + records.sort(Comparator.comparing(PerformRecordDto::getCreateTime)); + // 取最后一条记录,最终状态由最后一次操作决定 + PerformRecordDto lastRecord = records.get(records.size() - 1); + if (EventStatus.COMPLETED.getValue().equals(lastRecord.getStatusEnum())) { + exePerformRecordList.add(lastRecord); + } else if (EventStatus.CANCEL.getValue().equals(lastRecord.getStatusEnum())) { + cancelPerformRecordList.add(lastRecord); + } else if (EventStatus.STOPPED.getValue().equals(lastRecord.getStatusEnum())) { + stopPerformRecordList.add(lastRecord); } } - inpatientAdvice.setExePerformRecordList(exePerformRecordList) - .setCancelPerformRecordList(cancelPerformRecordList) - .setStopPerformRecordList(stopPerformRecordList); } + inpatientAdvice.setExePerformRecordList(exePerformRecordList) + .setCancelPerformRecordList(cancelPerformRecordList) + .setStopPerformRecordList(stopPerformRecordList); + // 计算综合执行状态文本 + if (!exePerformRecordList.isEmpty()) { + inpatientAdvice.setOverallStatusText("已执行"); + } else if (!cancelPerformRecordList.isEmpty()) { + inpatientAdvice.setOverallStatusText("已取消执行"); + } else if (!stopPerformRecordList.isEmpty()) { + inpatientAdvice.setOverallStatusText("已停止"); + } else { + inpatientAdvice.setOverallStatusText(inpatientAdvice.getRequestStatus_enumText()); + } + } + // 手动处理前端传来的执行条件 + if (exeStatus != null) { // 根据执行状态过滤医嘱列表 List filteredList = new ArrayList<>(); if (EventStatus.COMPLETED.getValue().equals(exeStatus)) { @@ -359,6 +369,29 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService { medRequestList.add(item); } } + // 校验医嘱是否已执行,已执行的医嘱不允许退回 + List allRequestList = new ArrayList<>(); + allRequestList.addAll(serviceRequestList); + allRequestList.addAll(medRequestList); + if (!allRequestList.isEmpty()) { + // 按requestTable分组查询执行记录 + Map> requestTableIdMap = allRequestList.stream() + .collect(Collectors.groupingBy(PerformInfoDto::getRequestTable, + Collectors.mapping(PerformInfoDto::getRequestId, Collectors.toList()))); + for (Map.Entry> entry : requestTableIdMap.entrySet()) { + String requestTable = entry.getKey(); + List requestIds = entry.getValue(); + List executedProcedures = procedureService.list( + new LambdaQueryWrapper() + .in(Procedure::getRequestId, requestIds) + .eq(Procedure::getRequestTable, requestTable) + .eq(Procedure::getStatusEnum, EventStatus.COMPLETED.getValue()) + .eq(Procedure::getCategoryEnum, ProcedureCategory.INPATIENT_ADVICE.getValue())); + if (!executedProcedures.isEmpty()) { + return R.fail("所选医嘱中存在已执行的医嘱,请先在【医嘱执行】界面取消执行后再退回"); + } + } + } // 校验药品医嘱是否已发药,已发药的医嘱不允许退回 if (!medRequestList.isEmpty()) { List medReqIds = medRequestList.stream().map(PerformInfoDto::getRequestId).toList(); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientAdviceDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientAdviceDto.java index bcb4fa5ce..4006d3a53 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientAdviceDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/inhospitalnursestation/dto/InpatientAdviceDto.java @@ -101,6 +101,9 @@ public class InpatientAdviceDto { private Integer requestStatus; private String requestStatus_enumText; + /** 综合执行状态(结合请求状态和执行记录计算) */ + private String overallStatusText; + /** 是否皮试 */ private Integer skinTestFlag; private String skinTestFlag_enumText;