From 95e4cfc6a7cf7932aa657ebec8025a647011529c Mon Sep 17 00:00:00 2001 From: guanyu Date: Mon, 18 May 2026 11:04:53 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#538:=20[=E9=97=A8=E8=AF=8A?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E7=AB=99-=E5=8C=BB=E5=98=B1/=E6=89=8B?= =?UTF-8?q?=E6=9C=AF=E7=94=B3=E8=AF=B7]=20=E6=89=8B=E6=9C=AF=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E5=8D=95=E5=88=A0=E9=99=A4=E5=90=8E=E7=BA=A7=E8=81=94?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=85=B3=E8=81=94=E5=8C=BB=E5=98=B1=E3=80=81?= =?UTF-8?q?=E6=94=B6=E8=B4=B9=E9=A1=B9=E7=9B=AE=E3=80=81=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:deleteSurgery 仅删除 cli_surgery 表记录,未级联删除关联的 wor_service_request(手术医嘱)、fin_charge_item(收费项目)、 doc_request_form(申请单),导致手术删除后医嘱列表仍存在对应记录。 修复:在 deleteSurgery 中先删除三张关联表数据,再删除手术记录, 所有操作在同一事务内保证一致性。 Co-Authored-By: Claude Opus 4.7 --- .../impl/SurgeryAppServiceImpl.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/appservice/impl/SurgeryAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/appservice/impl/SurgeryAppServiceImpl.java index dbe9bba32..c1c2b3658 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/appservice/impl/SurgeryAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/appservice/impl/SurgeryAppServiceImpl.java @@ -507,6 +507,7 @@ public class SurgeryAppServiceImpl implements ISurgeryAppService { * @return 结果 */ @Override + @Transactional(rollbackFor = Exception.class) public R deleteSurgery(Long id) { // 校验手术是否存在 Surgery existSurgery = surgeryService.getById(id); @@ -519,6 +520,28 @@ public class SurgeryAppServiceImpl implements ISurgeryAppService { return R.fail("已完成的手术不能删除"); } + // 级联删除关联数据 + String surgeryNo = existSurgery.getSurgeryNo(); + + // 1. 删除手术医嘱(wor_service_request) + LambdaQueryWrapper serviceRequestWrapper = new LambdaQueryWrapper<>(); + serviceRequestWrapper.eq(ServiceRequest::getActivityId, id); + serviceRequestService.remove(serviceRequestWrapper); + log.info("删除手术关联的医嘱 - surgeryId: {}, surgeryNo: {}", id, surgeryNo); + + // 2. 删除收费项目(fin_charge_item) + LambdaQueryWrapper chargeItemWrapper = new LambdaQueryWrapper<>(); + chargeItemWrapper.eq(ChargeItem::getProductId, id) + .eq(ChargeItem::getProductTable, "cli_surgery"); + chargeItemService.remove(chargeItemWrapper); + log.info("删除手术关联的收费项目 - surgeryId: {}, surgeryNo: {}", id, surgeryNo); + + // 3. 删除申请单(doc_request_form) + LambdaQueryWrapper requestFormWrapper = new LambdaQueryWrapper<>(); + requestFormWrapper.eq(RequestForm::getPrescriptionNo, surgeryNo); + requestFormService.remove(requestFormWrapper); + log.info("删除手术关联的申请单 - surgeryId: {}, surgeryNo: {}", id, surgeryNo); + surgeryService.deleteSurgery(id); // 清除相关缓存