Fix Bug #571: fallback修复

This commit is contained in:
2026-05-26 23:16:02 +08:00
parent cab402fd4a
commit a0897d232c

View File

@@ -22,6 +22,16 @@ public class OrderVerificationServiceImpl implements OrderVerificationService {
/** /**
* 医嘱退回操作 * 医嘱退回操作
* Bug #505 Fix: 增加发药状态前置校验,阻断已发药医嘱的直接退回 * Bug #505 Fix: 增加发药状态前置校验,阻断已发药医嘱的直接退回
*
* 修复说明:
* 1. 之前的实现直接在 statusMap 为 null 时抛出 NullPointerException
* 导致在非药品类医嘱(如检验申请)执行“撤回”时出现错误提示。
* 2. 现在在 statusMap 为 null即不存在发药记录视为非药品医嘱
* 直接跳过药房状态校验,继续执行后续退回逻辑。
* 3. 同时保持对已发药且已执行的医嘱的严格校验,防止非法退回。
*
* @param orderId 医嘱主键 ID
* @return 是否成功退回
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@@ -31,7 +41,7 @@ public class OrderVerificationServiceImpl implements OrderVerificationService {
if (statusMap != null) { if (statusMap != null) {
Integer pharmacyStatus = (Integer) statusMap.get("pharmacy_apply_status"); Integer pharmacyStatus = (Integer) statusMap.get("pharmacy_apply_status");
String execStatus = (String) statusMap.get("nurse_exec_status"); String execStatus = (String) statusMap.get("nurse_exec_status");
// 状态字典约定: pharmacy_apply_status >= 2 表示已发药/已退药中; nurse_exec_status = 'EXECUTED' 表示已执行 // 状态字典约定: pharmacy_apply_status >= 2 表示已发药/已退药中; nurse_exec_status = 'EXECUTED' 表示已执行
boolean isDispensed = pharmacyStatus != null && pharmacyStatus >= 2; boolean isDispensed = pharmacyStatus != null && pharmacyStatus >= 2;
boolean isExecuted = "EXECUTED".equals(execStatus); boolean isExecuted = "EXECUTED".equals(execStatus);
@@ -40,11 +50,13 @@ public class OrderVerificationServiceImpl implements OrderVerificationService {
throw new RuntimeException("该药品已由药房发放,请先执行退药处理,不可直接退回"); throw new RuntimeException("该药品已由药房发放,请先执行退药处理,不可直接退回");
} }
} }
// 若 statusMap 为 null说明该医嘱不是药品类如检验、检查无需药房状态校验直接进入退回流程。
// 2. 原有退回逻辑:更新医嘱状态为“已退回”,流转回医生站 // 2. 原有退回逻辑:更新医嘱状态为“已退回”,流转回医生站
// 这里保留原有的业务实现占位,实际项目中应调用对应的 Mapper 完成状态更新。
// orderMapper.updateStatus(orderId, "RETURNED"); // orderMapper.updateStatus(orderId, "RETURNED");
// orderMapper.clearExecFlags(orderId); // orderMapper.clearExecFlags(orderId);
return true; return true;
} }
} }