diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java index 1428e2ee6..d18d54b66 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/AdviceManageAppServiceImpl.java @@ -341,6 +341,28 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { && (DbOpType.INSERT.getCode().equals(e.getDbOpType()) || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))) .collect(Collectors.toList()); + // 防重复保存:对新增医嘱进行去重,避免签发单条长期医嘱时产生重复记录 + Set longUniqueKeySet = new HashSet<>(); + List longUniqueList = new ArrayList<>(); + for (RegAdviceSaveDto adviceSaveDto : longInsertOrUpdateList) { + String uniqueKey = adviceSaveDto.getPatientId() + "_" + + adviceSaveDto.getEncounterId() + "_" + + adviceSaveDto.getAdviceDefinitionId() + "_" + + adviceSaveDto.getDose() + "_" + + adviceSaveDto.getMethodCode() + "_" + + adviceSaveDto.getRateCode(); + if (DbOpType.INSERT.getCode().equals(adviceSaveDto.getDbOpType()) && longUniqueKeySet.contains(uniqueKey)) { + log.warn("防重复保存:检测到重复长期医嘱,跳过保存 - patientId={}, encounterId={}, adviceDefinitionId={}, dose={}", + adviceSaveDto.getPatientId(), adviceSaveDto.getEncounterId(), + adviceSaveDto.getAdviceDefinitionId(), adviceSaveDto.getDose()); + continue; + } + longUniqueKeySet.add(uniqueKey); + longUniqueList.add(adviceSaveDto); + } + log.info("防重复保存(长期):去重前{}条,去重后{}条", longInsertOrUpdateList.size(), longUniqueList.size()); + longInsertOrUpdateList = longUniqueList; + for (RegAdviceSaveDto regAdviceSaveDto : longInsertOrUpdateList) { boolean firstTimeSave = false;// 第一次保存 longMedicationRequest = new MedicationRequest(); @@ -406,6 +428,29 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { .getValue().equals(e.getTherapyEnum()) && (DbOpType.INSERT.getCode().equals(e.getDbOpType()) || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))) .collect(Collectors.toList()); + + // 防重复保存:对新增医嘱进行去重 + Set tempUniqueKeySet = new HashSet<>(); + List tempUniqueList = new ArrayList<>(); + for (RegAdviceSaveDto adviceSaveDto : tempInsertOrUpdateList) { + String uniqueKey = adviceSaveDto.getPatientId() + "_" + + adviceSaveDto.getEncounterId() + "_" + + adviceSaveDto.getAdviceDefinitionId() + "_" + + adviceSaveDto.getDose() + "_" + + adviceSaveDto.getMethodCode() + "_" + + adviceSaveDto.getRateCode(); + if (DbOpType.INSERT.getCode().equals(adviceSaveDto.getDbOpType()) && tempUniqueKeySet.contains(uniqueKey)) { + log.warn("防重复保存:检测到重复临时医嘱,跳过保存 - patientId={}, encounterId={}, adviceDefinitionId={}, dose={}", + adviceSaveDto.getPatientId(), adviceSaveDto.getEncounterId(), + adviceSaveDto.getAdviceDefinitionId(), adviceSaveDto.getDose()); + continue; + } + tempUniqueKeySet.add(uniqueKey); + tempUniqueList.add(adviceSaveDto); + } + log.info("防重复保存(临时):去重前{}条,去重后{}条", tempInsertOrUpdateList.size(), tempUniqueList.size()); + tempInsertOrUpdateList = tempUniqueList; + for (RegAdviceSaveDto regAdviceSaveDto : tempInsertOrUpdateList) { boolean firstTimeSave = false;// 第一次保存 tempMedicationRequest = new MedicationRequest();