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;
// 声明费用项

View File

@@ -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);
}