Fix Bug #571: 修复检验申请撤回操作状态校验逻辑不一致
根因:SQL查询使用EXISTS判断(任一ServiceRequest为ACTIVE即显示已签发), 但后端撤回校验使用allMatch(要求所有ServiceRequest均为ACTIVE)。 当多项申请单中部分为待签发时,前端显示已签发但后端拒绝撤回,导致报错。 修复: 1. 将allMatch改为anyMatch,与SQL的EXISTS逻辑保持一致 2. 仅更新ACTIVE状态的ServiceRequest为DRAFT,避免影响其他状态 3. 增加update返回值校验,处理并发场景下的状态变更 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -647,11 +647,15 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer
|
||||
return R.fail("只有已签发且未采证的申请单可撤回");
|
||||
}
|
||||
|
||||
// 将所有 ServiceRequest 状态改回待签发,与申请单展示状态同步
|
||||
iServiceRequestService.update(
|
||||
// 将所有已签发的 ServiceRequest 状态改回待签发,与申请单展示状态同步
|
||||
boolean updated = iServiceRequestService.update(
|
||||
new ServiceRequest().setStatusEnum(RequestStatus.DRAFT.getValue()),
|
||||
new LambdaUpdateWrapper<ServiceRequest>()
|
||||
.in(ServiceRequest::getId, serviceRequestIds));
|
||||
.in(ServiceRequest::getId, serviceRequestIds)
|
||||
.eq(ServiceRequest::getStatusEnum, RequestStatus.ACTIVE.getValue()));
|
||||
if (!updated) {
|
||||
return R.fail("撤回失败,医嘱状态已变更,请刷新后重试");
|
||||
}
|
||||
|
||||
log.info("检验申请单撤回成功,requestFormId={}, prescriptionNo={}", requestFormId, prescriptionNo);
|
||||
return R.ok("撤回成功");
|
||||
|
||||
Reference in New Issue
Block a user