From 5be726b4bd0331ad56d56f9d7f0233f16cc1811b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=89=E7=8B=BB=E7=8C=8A?= Date: Wed, 6 May 2026 18:28:08 +0800 Subject: [PATCH] =?UTF-8?q?Fix:=20Bug-490=20=E3=80=90=E4=BD=8F=E9=99=A2?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E7=AB=99=E3=80=91=E5=BE=85=E7=AD=BE=E5=8F=91?= =?UTF-8?q?=E5=8C=BB=E5=98=B1=E6=89=A7=E8=A1=8C=E5=88=A0=E9=99=A4=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=EF=BC=8C=E6=8F=90=E7=A4=BA=E2=80=9C=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E2=80=9D=E4=BD=86=E8=AE=B0=E5=BD=95=E6=9C=AA?= =?UTF-8?q?=E4=BB=8E=E7=95=8C=E9=9D=A2=E6=B6=88=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/AdviceManageAppServiceImpl.java | 97 ++++++++++++------- .../home/components/order/index.vue | 10 +- 2 files changed, 69 insertions(+), 38 deletions(-) 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 4ef22abb..888de2d1 100644 --- 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 @@ -177,6 +177,9 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { // 医嘱分类信息 List regAdviceSaveList = regAdviceSaveParam.getRegAdviceSaveList(); + // 🔧 Bug Fix: 先处理所有删除操作(不管adviceType是什么) + this.handleDeleteOperations(regAdviceSaveList); + // 药品 List medicineList = regAdviceSaveList.stream() .filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); @@ -247,6 +250,67 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"住院医嘱"})); } + /** + * 🔧 Bug Fix: 统一处理所有删除操作 + * 解决未知adviceType(如31)无法删除的问题 + */ + private void handleDeleteOperations(List allAdviceList) { + // 筛选出所有标记为删除的记录 + List deleteList = allAdviceList.stream() + .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())) + .collect(Collectors.toList()); + + if (deleteList.isEmpty()) { + return; + } + + log.info("开始处理删除操作,共 {} 条记录", deleteList.size()); + + for (RegAdviceSaveDto adviceDto : deleteList) { + Integer adviceType = adviceDto.getAdviceType(); + Long requestId = adviceDto.getRequestId(); + + if (requestId == null) { + log.warn("删除操作中requestId为空,跳过"); + continue; + } + + try { + // 根据adviceType判断删除哪种类型的医嘱 + if (ItemType.MEDICINE.getValue().equals(adviceType)) { + // 药品删除 + iMedicationRequestService.removeById(requestId); + iMedicationDispenseService.deleteMedicationDispense(requestId); + iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.MED_MEDICATION_REQUEST, requestId); + log.info("删除药品医嘱成功,requestId: {}", requestId); + + } else if (ItemType.DEVICE.getValue().equals(adviceType)) { + // 耗材删除 + iDeviceRequestService.removeById(requestId); + iDeviceDispenseService.deleteDeviceDispense(requestId); + iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_DEVICE_REQUEST, requestId); + log.info("删除耗材医嘱成功,requestId: {}", requestId); + + } else if (ItemType.ACTIVITY.getValue().equals(adviceType) + || (adviceType != null && (adviceType == 26 || adviceType == 31))) { + // 诊疗活动删除(包括护理type=26和未知类型type=31) + iServiceRequestService.removeById(requestId); + iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_SERVICE_REQUEST, requestId); + log.info("删除诊疗/护理医嘱成功,requestId: {}, adviceType: {}", requestId, adviceType); + + } else { + // 未知类型,尝试按诊疗活动删除(兜底策略) + log.warn("未知的adviceType: {},尝试按诊疗活动删除,requestId: {}", adviceType, requestId); + iServiceRequestService.removeById(requestId); + iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_SERVICE_REQUEST, requestId); + } + } catch (Exception e) { + log.error("删除医嘱失败,requestId: {}, adviceType: {}", requestId, adviceType, e); + // 继续处理其他记录,不中断整个流程 + } + } + } + /** * 处理药品 */ @@ -259,17 +323,6 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { // 签发操作 boolean is_sign = AdviceOpType.SIGN_ADVICE.getCode().equals(adviceOpType); - // 删除 - List deleteList = medicineList.stream() - .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); - for (RegAdviceSaveDto regAdviceSaveDto : deleteList) { - iMedicationRequestService.removeById(regAdviceSaveDto.getRequestId()); - // 删除已经产生的药品发放信息 - iMedicationDispenseService.deleteMedicationDispense(regAdviceSaveDto.getRequestId()); - // 删除费用项 - iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.MED_MEDICATION_REQUEST, - regAdviceSaveDto.getRequestId()); - } // 签发时统一处理组号 (排除删除操作,包括长期和临时) List exceptDelList = medicineList.stream() .filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); @@ -458,16 +511,6 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { // 签发操作 boolean is_sign = AdviceOpType.SIGN_ADVICE.getCode().equals(adviceOpType); - // 删除 - List deleteList = activityList.stream() - .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); - for (AdviceSaveDto adviceSaveDto : deleteList) { - iServiceRequestService.removeById(adviceSaveDto.getRequestId()); - // 删除费用项 - iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_SERVICE_REQUEST, - adviceSaveDto.getRequestId()); - } - // 声明长期医嘱诊疗请求 ServiceRequest longServiceRequest; // 新增 + 修改 (长期医嘱) @@ -627,18 +670,6 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService { // 签发操作 boolean is_sign = AdviceOpType.SIGN_ADVICE.getCode().equals(adviceOpType); - // 删除 - List deleteList = deviceList.stream() - .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); - for (RegAdviceSaveDto regAdviceSaveDto : deleteList) { - iDeviceRequestService.removeById(regAdviceSaveDto.getRequestId()); - // 删除已经产生的耗材发放信息 - iDeviceDispenseService.deleteDeviceDispense(regAdviceSaveDto.getRequestId()); - // 删除费用项 - iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_DEVICE_REQUEST, - regAdviceSaveDto.getRequestId()); - } - // 声明耗材请求 DeviceRequest deviceRequest; // 声明费用项 diff --git a/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/index.vue b/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/index.vue index e7dd0519..e7a3ef79 100644 --- a/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/index.vue +++ b/openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/index.vue @@ -1044,7 +1044,7 @@ function resolveAllOrgIds() { function handleDelete() { let selectRows = prescriptionRef.value.getSelectionRows(); - if (selectRows.length == 0) { + if (selectRows.length === 0) { proxy.$modal.msgWarning('请选择要删除的医嘱'); return; } @@ -1054,10 +1054,10 @@ function handleDelete() { let deleteItem = prescriptionList.value[i]; let index = selectRows.findIndex((item) => item.uniqueKey === deleteItem.uniqueKey); // 通过requestId判断是否已保存,如果选中项未保存 直接从数组中移除,如果已保存,调接口删除 - if (index != -1 && deleteItem.statusEnum == 1 && !deleteItem.requestId) { + if (index !== -1 && deleteItem.statusEnum === 1 && !deleteItem.requestId) { prescriptionList.value.splice(i, 1); sum++; - } else if (index != -1 && deleteItem.statusEnum == 1 && deleteItem.requestId) { + } else if (index !== -1 && deleteItem.statusEnum === 1 && deleteItem.requestId) { deleteList.push({ requestId: deleteItem.requestId, dbOpType: '3', @@ -1068,7 +1068,7 @@ function handleDelete() { expandOrder.value = []; isAdding.value = false; adviceQueryParams.value.adviceType = undefined; - if (sum == selectRows.length) { + if (sum === selectRows.length) { proxy.$modal.msgSuccess('删除成功'); return; } @@ -1077,7 +1077,7 @@ function handleDelete() { if (deleteList.length > 0) { // regAdviceSaveList savePrescription({ regAdviceSaveList: deleteList }).then((res) => { - if (res.code == 200) { + if (res.code === 200) { proxy.$modal.msgSuccess('删除成功'); getListInfo(false); }