From 97670a6efad6fea98faa651d7a0930e051323cf8 Mon Sep 17 00:00:00 2001 From: luotaiqian <1147642922@qq.com> Date: Fri, 31 Jul 2026 14:10:15 +0800 Subject: [PATCH] fix bug --- .../EvalProcessControlExecutor.java | 29 ++++++++++--------- .../domain/exception/ErrorCode.java | 2 +- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProcessControlExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProcessControlExecutor.java index d7cd924..1f51db1 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProcessControlExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProcessControlExecutor.java @@ -46,8 +46,7 @@ import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @Slf4j @@ -134,8 +133,8 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi { public SingleResponse confirm(EvalProcessControlConfirmCmd cmd) { Long projectId = cmd.getProjectId(); EvalProjectEntity project = evalProjectNodeSupport.requireProject(projectId); - // 校验前置节点是否全部完成(过程控制节点除外) - assertPreNodesCompleted(project); + // 校验前置节点是否全部完成(过程控制、归档节点除外) + assertPreNodesCompleted(project, Arrays.asList(ProjectStageEnum.PROCESS_CONTROL, ProjectStageEnum.ARCHIVE)); // 判断项目是否归档 if (project.getArchiveFlag() != null && project.getArchiveFlag() == 1) { throw new BizException(ErrorCode.EVAL_PROJECT_ARCHIVED); @@ -177,8 +176,8 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi { public SingleResponse assign(EvalProcessControlAssignCmd cmd) { Long projectId = cmd.getProjectId(); EvalProjectEntity project = evalProjectNodeSupport.requireProject(projectId); - // 校验前置节点是否全部完成(过程控制节点除外) - assertPreNodesCompleted(project); + // 校验前置节点是否全部完成(过程控制、归档节点除外) + assertPreNodesCompleted(project, Arrays.asList(ProjectStageEnum.PROCESS_CONTROL, ProjectStageEnum.ARCHIVE)); // 判断项目是否归档 if (project.getArchiveFlag() != null && project.getArchiveFlag() == 1) { throw new BizException(ErrorCode.EVAL_PROJECT_ARCHIVED); @@ -305,8 +304,8 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi { public SingleResponse generateProcessControlForm(EvalgenerateProcessControlFormCmd cmd) { Long projectId = Long.parseLong(cmd.getProjectId()); EvalProjectEntity project = evalProjectNodeSupport.requireProject(projectId); - // 校验前置节点是否全部完成(过程控制节点除外) - assertPreNodesCompleted(project); + // 校验前置节点是否全部完成(过程控制、归档节点除外) + assertPreNodesCompleted(project, Arrays.asList(ProjectStageEnum.PROCESS_CONTROL, ProjectStageEnum.ARCHIVE)); // TODO 归档交接单生成功能暂未实现 return SingleResponse.success(null); } @@ -319,8 +318,8 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi { if (project.getArchiveFlag() != null && project.getArchiveFlag() == 1) { throw new BizException(ErrorCode.EVAL_ARCHIVE_ALREADY_DONE); } - // 校验前置节点是否全部完成(过程控制节点除外) - assertPreNodesCompleted(project); + // 校验前置节点是否全部完成(过程控制、归档节点除外) + assertPreNodesCompleted(project, Collections.singletonList(ProjectStageEnum.ARCHIVE)); EvalProcessControlEntity entity = evalProcessControlGateway.getByProjectId(projectId, project.getOrgId()); if (entity == null) { @@ -609,9 +608,9 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi { } /** - * 过程控制前置节点校验:除 PROCESS_CONTROL、ARCHIVE 节点外,其余节点 state 必须全部为 1(完成)。 + * 过程控制前置节点校验:除传入的 excludedStages 节点外,其余节点 state 必须全部为 1(完成)。 */ - private void assertPreNodesCompleted(EvalProjectEntity project) { + private void assertPreNodesCompleted(EvalProjectEntity project, List excludedStages) { String projectNode = project.getProjectNode(); if (!StringUtils.hasText(projectNode)) { throw new BizException(ErrorCode.EVAL_PROCESS_PRE_NODES_INCOMPLETE); @@ -620,9 +619,11 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi { if (CollectionUtils.isEmpty(nodes)) { throw new BizException(ErrorCode.EVAL_PROCESS_PRE_NODES_INCOMPLETE); } + Set excludedVals = excludedStages.stream() + .map(ProjectStageEnum::getVal) + .collect(Collectors.toSet()); boolean allCompleted = nodes.stream() - .filter(n -> !ProjectStageEnum.PROCESS_CONTROL.getVal().equals(n.getType()) - && !ProjectStageEnum.ARCHIVE.getVal().equals(n.getType())) + .filter(n -> !excludedVals.contains(n.getType())) .allMatch(n -> n.getState() != null && n.getState() == 1); if (!allCompleted) { throw new BizException(ErrorCode.EVAL_PROCESS_PRE_NODES_INCOMPLETE); diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/exception/ErrorCode.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/exception/ErrorCode.java index 8e5eb1a..fcb1599 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/exception/ErrorCode.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/exception/ErrorCode.java @@ -168,7 +168,7 @@ public enum ErrorCode { EVAL_ARCHIVE_SIGN_INCOMPLETE("06-05-017", "签字未完成,无法归档"), EVAL_HANDOVER_FORM_NOT_CREATED("06-05-018", "归档交接单未生成,无法归档"), EVAL_PROJECT_ERROR("06-05-019", "项目不存在"), - EVAL_PROCESS_PRE_NODES_INCOMPLETE("06-05-020", "前置节点未完成,无法操作过程控制"), + EVAL_PROCESS_PRE_NODES_INCOMPLETE("06-05-020", "前置节点未完成,无法操作"), EVAL_PROJECT_NODE_NOT_FOUND("06-05-021", "节点不存在"), // ---- 监督检查告知(phase2 P3) ----