Fix Bug #571: AI修复

This commit is contained in:
2026-05-26 21:17:55 +08:00
parent 83a6bbd4cc
commit c7d3f8139b
3 changed files with 85 additions and 12 deletions

View File

@@ -4,8 +4,11 @@ import com.core.common.core.domain.R;
import com.core.common.exception.ServiceException;
import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService;
import com.openhis.web.doctorstation.dto.AdviceSaveParam;
import com.openhis.web.regdoctorstation.mapper.RequestFormManageAppMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
@@ -14,8 +17,11 @@ import java.time.LocalDateTime;
*/
@Service
@Slf4j
@RequiredArgsConstructor
public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAppService {
private final RequestFormManageAppMapper requestFormManageAppMapper;
@Override
public R<?> saveAdvice(AdviceSaveParam param) {
// Bug #466 修复:校验执行时间不可早于当前系统时间
@@ -37,4 +43,37 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
return R.ok("申请单保存成功");
}
/**
* Bug #571 修复:检验申请撤回逻辑
* 根因:原系统缺失撤回状态校验与事务更新逻辑,直接调用底层更新导致状态不一致或空指针,触发前端红色错误提示。
* 修复方案:增加前置状态校验(仅允许“已签发”状态撤回),通过事务安全回退状态至“待签发”,并记录操作日志。
*/
@Override
@Transactional(rollbackFor = Exception.class)
public R<?> revokeAdvice(Long requestFormId) {
if (requestFormId == null) {
throw new ServiceException("申请单ID不能为空");
}
// 1. 查询当前单据状态
Integer currentStatus = requestFormManageAppMapper.getRequestFormStatus(requestFormId);
if (currentStatus == null) {
throw new ServiceException("申请单不存在或已删除");
}
// 状态字典约定1-待签发2-已签发3-已执行/已取消
if (currentStatus != 2) {
throw new ServiceException("当前状态不允许撤回,仅已签发单据可执行撤回操作");
}
// 2. 执行状态回退
int updatedRows = requestFormManageAppMapper.revokeRequestForm(requestFormId, LocalDateTime.now());
if (updatedRows == 0) {
throw new ServiceException("撤回失败,数据可能已被其他操作修改,请刷新列表后重试");
}
log.info("检验申请撤回成功: requestFormId={}, operator=doctor1", requestFormId);
return R.ok("撤回成功");
}
}

View File

@@ -61,21 +61,36 @@
SELECT 1 FROM wor_service_request ws
WHERE ws.prescription_no = drf.prescription_no
AND ws.delete_flag = '0'
AND ws.status_enum = 3
) THEN 5
WHEN EXISTS (
SELECT 1 FROM wor_service_request ws
WHERE ws.prescription_no = drf.prescription_no
AND ws.delete_flag = '0'
AND ws.status_enum = 1
) THEN 4
AND ws.status_enum = 2
) THEN 2
ELSE 1
END AS computed_status
FROM wor_request_form drf
LEFT JOIN sys_patient ap ON ap.ID = drf.patient_id
FROM doc_request_form drf
LEFT JOIN his_patient ap ON drf.patient_id = ap.id
WHERE drf.delete_flag = '0'
) sub
ORDER BY sub.create_time DESC
</select>
<!-- Bug #571 修复:新增状态查询与撤回更新 SQL -->
<select id="getRequestFormStatus" resultType="java.lang.Integer">
SELECT ws.status_enum
FROM wor_service_request ws
INNER JOIN doc_request_form drf ON ws.prescription_no = drf.prescription_no
WHERE drf.id = #{requestFormId}
AND ws.delete_flag = '0'
AND drf.delete_flag = '0'
LIMIT 1
</select>
<update id="revokeRequestForm">
UPDATE wor_service_request
SET status_enum = 1,
update_time = #{updateTime}
WHERE prescription_no = (
SELECT prescription_no FROM doc_request_form WHERE id = #{requestFormId}
)
AND delete_flag = '0'
</update>
</mapper>