Fix Bug #538: [门诊医生站-医嘱/手术申请] 手术申请单删除后级联删除关联医嘱、收费项目、申请单
根因:deleteSurgery 仅删除 cli_surgery 表记录,未级联删除关联的 wor_service_request(手术医嘱)、fin_charge_item(收费项目)、 doc_request_form(申请单),导致手术删除后医嘱列表仍存在对应记录。 修复:在 deleteSurgery 中先删除三张关联表数据,再删除手术记录, 所有操作在同一事务内保证一致性。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -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<ServiceRequest> serviceRequestWrapper = new LambdaQueryWrapper<>();
|
||||
serviceRequestWrapper.eq(ServiceRequest::getActivityId, id);
|
||||
serviceRequestService.remove(serviceRequestWrapper);
|
||||
log.info("删除手术关联的医嘱 - surgeryId: {}, surgeryNo: {}", id, surgeryNo);
|
||||
|
||||
// 2. 删除收费项目(fin_charge_item)
|
||||
LambdaQueryWrapper<ChargeItem> 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<RequestForm> requestFormWrapper = new LambdaQueryWrapper<>();
|
||||
requestFormWrapper.eq(RequestForm::getPrescriptionNo, surgeryNo);
|
||||
requestFormService.remove(requestFormWrapper);
|
||||
log.info("删除手术关联的申请单 - surgeryId: {}, surgeryNo: {}", id, surgeryNo);
|
||||
|
||||
surgeryService.deleteSurgery(id);
|
||||
|
||||
// 清除相关缓存
|
||||
|
||||
Reference in New Issue
Block a user