From 8ada94a50b6ca2f1630ca0bc7c3f3b2ad35b2cb3 Mon Sep 17 00:00:00 2001 From: zhanglei Date: Thu, 27 Aug 2026 16:18:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20bug/=E9=9C=80=E6=B1=82=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/ClassManagementServiceImpl.java | 2 +- .../executor/institution/EvalProjectExecutor.java | 4 +++- .../client/co/institution/EvalProjectCO.java | 3 +++ .../client/dto/institution/EvalProjectAddCmd.java | 3 +++ .../safetyeval/domain/entity/EvalProjectEntity.java | 2 ++ .../safetyeval/domain/exception/ErrorCode.java | 1 + .../domain/gateway/EvalProjectGateway.java | 2 ++ .../domain/service/EvalProjectDomainService.java | 12 ++++++++++++ .../infrastructure/dataobject/EvalProjectDO.java | 2 ++ .../gatewayimpl/EvalProjectGatewayImpl.java | 13 +++++++++++++ 10 files changed, 42 insertions(+), 2 deletions(-) diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassManagementServiceImpl.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassManagementServiceImpl.java index 610d0e21..6129f3d5 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassManagementServiceImpl.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassManagementServiceImpl.java @@ -116,7 +116,7 @@ public class ClassManagementServiceImpl extends ServiceImpl update(EvalProjectAddCmd cmd) { + evalProjectDomainService.assertControlledNumberUnique(cmd.getControlledNumber(), cmd.getId()); evalProjectMapper.update(new LambdaUpdateWrapper() .eq(EvalProjectDO::getId, cmd.getId()) - .set(EvalProjectDO::getParticipantsJson, JSON.toJSONString(cmd.getParticipants()))); + .set(EvalProjectDO::getParticipantsJson, JSON.toJSONString(cmd.getParticipants())) + .set(EvalProjectDO::getControlledNumber, cmd.getControlledNumber())); return SingleResponse.success(null); } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectCO.java index 07ae2575..9a67afdc 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectCO.java @@ -23,6 +23,9 @@ public class EvalProjectCO { @ApiModelProperty("项目编号") private String projectNo; + @ApiModelProperty("受控编号") + private String controlledNumber; + @ApiModelProperty("项目名称") private String projectName; diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectAddCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectAddCmd.java index 758f1017..928736c6 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectAddCmd.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectAddCmd.java @@ -21,6 +21,9 @@ public class EvalProjectAddCmd { @ApiModelProperty(value = "项目名称", required = true) private String projectName; + @ApiModelProperty("受控编号") + private String controlledNumber; + @NotBlank(message = "评价类型不能为空") @ApiModelProperty(value = "评价类型编码:PRE/ACCEPT/STATUS", required = true, example = "PRE") private String evalTypeCode; diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/EvalProjectEntity.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/EvalProjectEntity.java index 6e5d27be..bc8c25b8 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/EvalProjectEntity.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/EvalProjectEntity.java @@ -12,6 +12,8 @@ public class EvalProjectEntity { private Long orgId; private Long customerId; private String projectNo; + /** 受控编号 */ + private String controlledNumber; private String projectName; private String evalTypeCode; private String customerContactName; 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 6c70da4f..d404e625 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 @@ -162,6 +162,7 @@ public enum ErrorCode { EVAL_PROJECT_NO_GENERATE_FAILED("06-02-002", "项目编号生成失败"), EVAL_PROJECT_CANCELLED("06-02-003", "项目已作废不可修改"), EVAL_PROJECT_ARCHIVED("06-02-004", "项目已归档不可修改"), + EVAL_PROJECT_CONTROLLED_NUMBER_DUPLICATE("06-02-005", "受控编号已存在"), // ---- 八节点与签字(phase2 P2) ---- EVAL_NODE_FORBIDDEN("06-05-001", "无权限操作该节点"), diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/EvalProjectGateway.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/EvalProjectGateway.java index 1d79200a..743d45f3 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/EvalProjectGateway.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/EvalProjectGateway.java @@ -23,4 +23,6 @@ public interface EvalProjectGateway { long countByOrgIdAndProgressStatus(Long orgId, String progressStatus); void editProjectNode(Long projectId, String val); + + EvalProjectEntity findByControlledNumber(String controlledNumber); } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/EvalProjectDomainService.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/EvalProjectDomainService.java index 5950d738..95829bdd 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/EvalProjectDomainService.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/EvalProjectDomainService.java @@ -7,6 +7,7 @@ import org.qinan.safetyeval.domain.gateway.EvalProjectGateway; import org.qinan.safetyeval.domain.query.EvalProjectQuery; import org.qinan.safetyeval.domain.query.PageResult; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import javax.annotation.Resource; @@ -25,9 +26,20 @@ public class EvalProjectDomainService { if (entity.getArchiveFlag() == null) { entity.setArchiveFlag(0); } + assertControlledNumberUnique(entity.getControlledNumber(), null); return evalProjectGateway.save(entity); } + public void assertControlledNumberUnique(String controlledNumber, Long excludeId) { + if (!StringUtils.hasText(controlledNumber)) { + return; + } + EvalProjectEntity found = evalProjectGateway.findByControlledNumber(controlledNumber); + if (found != null && (excludeId == null || !excludeId.equals(found.getId()))) { + throw new BizException(ErrorCode.EVAL_PROJECT_CONTROLLED_NUMBER_DUPLICATE); + } + } + public EvalProjectEntity get(Long id) { EvalProjectEntity existing = evalProjectGateway.get(id); if (existing == null) { diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/EvalProjectDO.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/EvalProjectDO.java index 422b4b2b..86e3a605 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/EvalProjectDO.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/EvalProjectDO.java @@ -14,6 +14,8 @@ public class EvalProjectDO { private Long orgId; private Long customerId; private String projectNo; + /** 受控编号 */ + private String controlledNumber; private String projectName; private String evalTypeCode; private String customerContactName; diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalProjectGatewayImpl.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalProjectGatewayImpl.java index 67c37f15..44ac0783 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalProjectGatewayImpl.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalProjectGatewayImpl.java @@ -129,6 +129,19 @@ public class EvalProjectGatewayImpl implements EvalProjectGateway { return evalProjectMapper.selectCount(wrapper); } + @Override + public EvalProjectEntity findByControlledNumber(String controlledNumber) { + if (!StringUtils.hasText(controlledNumber)) { + return null; + } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(EvalProjectDO::getDeleteEnum, "false") + .eq(EvalProjectDO::getControlledNumber, controlledNumber.trim()) + .last("limit 1"); + EvalProjectDO dataObject = evalProjectMapper.selectOne(wrapper); + return dataObject == null ? null : evalProjectDoConvertor.convertDoToE(dataObject); + } + @Override public void editProjectNode(Long projectId, String val) { EvalProjectDO evalProjectDO = evalProjectMapper.selectById(projectId);