From 23f22b605298639963b00633166f80b5760d29dd Mon Sep 17 00:00:00 2001 From: zhanglei Date: Tue, 14 Jul 2026 17:32:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B5=84=E8=B4=A8=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/exception/ErrorCode.java | 1 + .../domain/gateway/OrgPersonnelGateway.java | 2 ++ .../service/OrgPersonnelDomainService.java | 20 +++++++++++++++++++ .../gatewayimpl/OrgPersonnelGatewayImpl.java | 11 +++++++++- 4 files changed, 33 insertions(+), 1 deletion(-) 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 d1af5c2..dfc6d40 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 @@ -22,6 +22,7 @@ public enum ErrorCode { // ---- 人员信息 ---- ORG_PERSONNEL_NOT_FOUND("01-05-001", "人员信息不存在"), ORG_PERSONNEL_ACCOUNT_EXISTS("01-05-002", "账号已存在"), + ORG_PERSONNEL_IDCARDNO_EXISTS("01-05-003", "身份证已存在"), // ---- 人员证书 ---- ORG_PERSONNEL_CERT_NOT_FOUND("01-06-001", "人员证书不存在"), diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/OrgPersonnelGateway.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/OrgPersonnelGateway.java index e13ada8..5232d87 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/OrgPersonnelGateway.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/gateway/OrgPersonnelGateway.java @@ -28,4 +28,6 @@ public interface OrgPersonnelGateway { void delete(Long id); PageResult page(OrgPersonnelQuery query); + + OrgPersonnelEntity findAnyByIdCardNo(String idCardNo); } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/OrgPersonnelDomainService.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/OrgPersonnelDomainService.java index c5ca438..8f94404 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/OrgPersonnelDomainService.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/service/OrgPersonnelDomainService.java @@ -30,6 +30,14 @@ public class OrgPersonnelDomainService { entity.setId(existing.getId()); return orgPersonnelGateway.restore(entity); } + OrgPersonnelEntity existingIdCardNo = orgPersonnelGateway.findAnyByIdCardNo(entity.getIdCardNo()); + if (existingIdCardNo != null) { + if (!isSoftDeleted(existingIdCardNo)) { + throw new BizException(ErrorCode.ORG_PERSONNEL_IDCARDNO_EXISTS); + } + entity.setId(existingIdCardNo.getId()); + return orgPersonnelGateway.restore(entity); + } return orgPersonnelGateway.save(entity); } @@ -43,11 +51,23 @@ public class OrgPersonnelDomainService { throw new BizException(ErrorCode.ORG_PERSONNEL_NOT_FOUND); } assertAccountUnique(entity.getAccount(), entity.getId()); + assertIdcarNoUnique(entity.getIdCardNo(), entity.getId()); mergeForModify(existing, entity); existing.setJoinWorkDate(entity.getJoinWorkDate()); return orgPersonnelGateway.modify(existing); } + private void assertIdcarNoUnique(String idCardNo, Long excludeId) { + if (!StringUtils.hasText(idCardNo)) { + return; + } + OrgPersonnelEntity found = orgPersonnelGateway.findAnyByIdCardNo(idCardNo); + if (found != null && !isSoftDeleted(found) + && (excludeId == null || !found.getId().equals(excludeId))) { + throw new BizException(ErrorCode.ORG_PERSONNEL_IDCARDNO_EXISTS); + } + } + private void mergeForModify(OrgPersonnelEntity target, OrgPersonnelEntity patch) { if (StringUtils.hasText(patch.getUserName())) { target.setUserName(patch.getUserName()); diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/OrgPersonnelGatewayImpl.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/OrgPersonnelGatewayImpl.java index 4cad5f0..53b841e 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/OrgPersonnelGatewayImpl.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/OrgPersonnelGatewayImpl.java @@ -153,7 +153,7 @@ public class OrgPersonnelGatewayImpl implements OrgPersonnelGateway { wrapper.in(OrgPersonnelDO::getId, query.getPersonnelIds()); } } - + wrapper.orderByDesc(OrgPersonnelDO::getId); Page page = new Page<>(query.getPageNum(), query.getPageSize()); IPage result = orgPersonnelMapper.selectPage(page, wrapper); @@ -164,6 +164,15 @@ public class OrgPersonnelGatewayImpl implements OrgPersonnelGateway { return PageResult.of(entities, result.getTotal(), result.getCurrent(), result.getSize()); } + @Override + public OrgPersonnelEntity findAnyByIdCardNo(String idCardNo) { + OrgPersonnelDO orgPersonnelDO = orgPersonnelMapper.selectOne(new LambdaQueryWrapper().eq(OrgPersonnelDO::getIdCardNo, idCardNo)); + if (orgPersonnelDO != null) { + return toEntity(orgPersonnelDO); + } + return null; + } + private OrgPersonnelDO toDO(OrgPersonnelEntity entity) { OrgPersonnelDO dataObject = new OrgPersonnelDO(); dataObject.setOrgId(orgContextResolver.resolveOrgId(entity.getOrgId()));