Fix: Bug-490 【住院医生站】待签发医嘱执行删除操作,提示“删除成功”但记录未从界面消失
This commit is contained in:
@@ -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;
|
||||
// 声明费用项
|
||||
|
||||
Reference in New Issue
Block a user