Fix: Bug-490 【住院医生站】待签发医嘱执行删除操作,提示“删除成功”但记录未从界面消失

This commit is contained in:
2026-05-06 18:28:08 +08:00
parent dc24f0f2b9
commit 5be726b4bd
2 changed files with 69 additions and 38 deletions

View File

@@ -177,6 +177,9 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
// 医嘱分类信息
List<RegAdviceSaveDto> regAdviceSaveList = regAdviceSaveParam.getRegAdviceSaveList();
// 🔧 Bug Fix: 先处理所有删除操作不管adviceType是什么
this.handleDeleteOperations(regAdviceSaveList);
// 药品
List<RegAdviceSaveDto> 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<RegAdviceSaveDto> allAdviceList) {
// 筛选出所有标记为删除的记录
List<RegAdviceSaveDto> 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<RegAdviceSaveDto> 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<RegAdviceSaveDto> 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<AdviceSaveDto> 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<RegAdviceSaveDto> 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;
// 声明费用项