🐛 修复已撤回项目再提交被编辑校验拦住

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-11-02 14:28:05 +08:00
parent 318b4f7f9a
commit 4d88f8913b
2 changed files with 22 additions and 2 deletions
@@ -195,7 +195,17 @@ public class ProjectApplyServiceImpl extends BaseServiceImpl<ProjectApplyMapper,
@Override
@Transactional(rollbackFor = Exception.class)
public boolean submitApproval(Long id) {
ProjectApply projectApply = loadEditable(id, true);
ProjectApply projectApply = loadExists(id);
if (!canCurrentUserOperate(projectApply)) {
throw new ServiceException("无权操作其他组织项目立项");
}
// 已在审批中则幂等成功,避免「先 MK 后本地」时 sync 已写成 reviewing 再被编辑校验拦住
if (List.of(STATUS_REVIEWING, STATUS_CHANGE_REVIEWING).contains(projectApply.getApprovalStatus())) {
return true;
}
if (!List.of(STATUS_DRAFT, STATUS_WITHDRAWN, STATUS_REJECTED, "change_rejected").contains(projectApply.getApprovalStatus())) {
throw new ServiceException("当前状态不允许提交");
}
validateSubmit(projectApply);
projectApply.setApprovalStatus(STATUS_REVIEWING);
projectApply.setCurrentNode(resolveApprovalNode(projectApply));
@@ -170,7 +170,17 @@ public class ProjectChangeServiceImpl extends BaseServiceImpl<ProjectChangeMappe
@Override
@Transactional(rollbackFor = Exception.class)
public boolean submitApproval(Long id) {
ProjectChange projectChange = loadEditable(id);
ProjectChange projectChange = loadExists(id);
if (!canCurrentUserOperate(projectChange)) {
throw new ServiceException("无权操作其他组织项目变更");
}
// 已在审批中则幂等成功,避免 MK 回写 reviewing 后再提交被编辑校验拦住
if (Objects.equals(projectChange.getApprovalStatus(), STATUS_REVIEWING)) {
return true;
}
if (!List.of(STATUS_DRAFT, STATUS_WITHDRAWN, STATUS_REJECTED).contains(projectChange.getApprovalStatus())) {
throw new ServiceException("当前状态不允许提交");
}
validateSubmit(projectChange);
projectChange.setApprovalStatus(STATUS_REVIEWING);
projectChange.setCurrentNode(resolveApprovalNode(projectChange));