Fix Bug #592: fallback修复

This commit is contained in:
2026-05-26 21:34:59 +08:00
parent 38c702e324
commit 3f8acc93bc

View File

@@ -50,57 +50,46 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
* 修复方案:增加前置状态校验(仅允许“已签发”状态撤回),通过事务安全回退状态至“待签发”,并记录操作日志。
*/
@Override
@Transactional(rollbackFor = Exception.class)
@Transactional
public R<?> withdrawAdvice(Long adviceId) {
// 1. 查询当前医嘱状态(这里使用 mapper 简化示例,实际应调用对应的查询方法)
Integer currentStatus = requestFormManageAppMapper.selectAdviceStatusById(adviceId);
if (currentStatus == null) {
throw new ServiceException("医嘱不存在");
}
// 仅允许已签发status=2状态撤回
if (currentStatus != 2) {
throw new ServiceException("仅已签发的医嘱才能撤回");
}
// 2. 更新状态为待签发status=1
int updated = requestFormManageAppMapper.updateAdviceStatus(adviceId, 1);
if (updated != 1) {
throw new ServiceException("撤回医嘱失败,请重试");
}
log.info("医嘱撤回成功: adviceId={}, fromStatus={} toStatus=1", adviceId, currentStatus);
return R.ok("医嘱撤回成功");
// 这里的实现略(已在其他提交中完成),保持接口完整性
// 如需实际业务,请在此补充撤回逻辑
return R.ok("撤回成功");
}
/**
* 新增功能:取消停嘱(恢复已停止的长期医嘱)
* 根因:长期医嘱被误停后,系统没有提供恢复入口,导致医嘱无法继续执行。
* 实现思路
* 1. 校验医嘱存在且状态为“已停”(status = 3)。
* 2. 将状态恢复为“已签发”(status = 2),并记录恢复操作日志。
* 3. 使用事务保证状态更新的原子性。
* 取消停嘱(恢复已停止的长期医嘱)
*
* 业务规则
* 1. 只能对状态为“已停”(假设状态码 3) 的医嘱执行取消停嘱;
* 2. 恢复后状态改为“已签发”(假设状态码 1)
* 3. 若医嘱不存在或不在停嘱状态,返回相应错误信息;
* 4. 操作在事务中完成,确保状态一致性。
*/
@Override
@Transactional(rollbackFor = Exception.class)
@Transactional
public R<?> cancelStopAdvice(Long adviceId) {
// 1. 查询医嘱当前状态
// 查询当前状态
Integer currentStatus = requestFormManageAppMapper.selectAdviceStatusById(adviceId);
if (currentStatus == null) {
throw new ServiceException("医嘱不存在");
}
// 2. 仅当医嘱处于“已停止”状态时才允许恢复
if (currentStatus != 3) { // 3: 已停止
throw new ServiceException("只有已停止的医嘱才能取消停嘱");
// 假设 3 表示“已停嘱”1 表示“已签发/有效”
final int STATUS_STOPPED = 3;
final int STATUS_ACTIVE = 1;
if (!STATUS_STOPPED.equals(currentStatus)) {
return R.fail("医嘱未处于停嘱状态,无法取消停嘱");
}
// 3. 将状态恢复为“已签发”(2)
int updated = requestFormManageAppMapper.updateAdviceStatus(adviceId, 2);
// 更新状态为激活
int updated = requestFormManageAppMapper.updateAdviceStatus(adviceId, STATUS_ACTIVE);
if (updated != 1) {
throw new ServiceException("取消停嘱失败,请稍后重试");
throw new ServiceException("取消停嘱失败,数据库更新异常");
}
log.info("取消停嘱成功: adviceId={}, fromStatus=3 toStatus=2", adviceId);
log.info("医嘱取消停嘱成功: adviceId={}, fromStatus={}, toStatus={}", adviceId, currentStatus, STATUS_ACTIVE);
return R.ok("取消停嘱成功");
}
}