diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/OrgDepartmentController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/OrgDepartmentController.java index 3ab71fd..a50d9b9 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/OrgDepartmentController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/OrgDepartmentController.java @@ -40,8 +40,8 @@ public class OrgDepartmentController { @ApiOperation("查询部门详情") @GetMapping("/get") - public SingleResponse get(@ApiParam("主键ID") @RequestParam Long id) { - return orgDepartmentApi.get(id); + public SingleResponse get(@ApiParam("主键ID") @RequestParam String id) { + return orgDepartmentApi.get(Long.parseLong(id)); } @ApiOperation("修改部门") @@ -52,8 +52,8 @@ public class OrgDepartmentController { @ApiOperation("删除部门") @PostMapping("/delete") - public SingleResponse delete(@ApiParam("主键ID") @RequestParam Long id) { - return orgDepartmentApi.delete(id); + public SingleResponse delete(@ApiParam("主键ID") @RequestParam String id) { + return orgDepartmentApi.delete(Long.parseLong(id)); } @ApiOperation("分页查询部门") diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgDepartmentExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgDepartmentExecutor.java index 0649998..ddc373f 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgDepartmentExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgDepartmentExecutor.java @@ -51,8 +51,8 @@ public class OrgDepartmentExecutor implements OrgDepartmentApi { @Override public SingleResponse modify(OrgDepartmentModifyCmd cmd) { OrgDepartmentEntity entity = new OrgDepartmentEntity(); - entity.setId(cmd.getId()); - entity.setParentId(cmd.getParentId()); + entity.setId(cmd.getId() != null ? Long.parseLong(cmd.getId()) : null); + entity.setParentId(cmd.getParentId() != null ? Long.parseLong(cmd.getParentId()) : null); entity.setDeptName(cmd.getDeptName()); entity.setManagerName(cmd.getManagerName()); entity.setManagerAccount(cmd.getManagerAccount()); @@ -93,14 +93,14 @@ public class OrgDepartmentExecutor implements OrgDepartmentApi { return null; } OrgDepartmentCO co = new OrgDepartmentCO(); - co.setId(entity.getId()); - co.setParentId(entity.getParentId()); + co.setId(entity.getId() != null ? String.valueOf(entity.getId()) : null); + co.setParentId(entity.getParentId() != null ? String.valueOf(entity.getParentId()) : null); co.setDeptName(entity.getDeptName()); co.setManagerName(entity.getManagerName()); co.setManagerAccount(entity.getManagerAccount()); co.setDeptLevelCode(entity.getDeptLevelCode()); co.setDeptLevelName(entity.getDeptLevelName()); - co.setTenantId(entity.getTenantId()); + co.setTenantId(entity.getTenantId() != null ? String.valueOf(entity.getTenantId()) : null); return co; } } diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgPersonnelCertExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgPersonnelCertExecutor.java index 3ebe1b0..befb99f 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgPersonnelCertExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgPersonnelCertExecutor.java @@ -95,6 +95,9 @@ public class OrgPersonnelCertExecutor implements OrgPersonnelCertApi { domainQuery.setPersonnelId(query.getPersonnelId()); domainQuery.setCertName(query.getCertName()); domainQuery.setCertTypeCode(query.getCertTypeCode()); + domainQuery.setCertNo(query.getCertNo()); + domainQuery.setCertCategoryName(query.getCertCategoryName()); + domainQuery.setOperationCategoryName(query.getOperationCategoryName()); PageResult pageResult = orgPersonnelCertDomainService.page(domainQuery); diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/OrgDepartmentCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/OrgDepartmentCO.java index 81cc681..79ed5b9 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/OrgDepartmentCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/OrgDepartmentCO.java @@ -12,10 +12,10 @@ import lombok.Data; public class OrgDepartmentCO { @ApiModelProperty(value = "主键ID") - private Long id; + private String id; @ApiModelProperty(value = "父部门ID") - private Long parentId; + private String parentId; @ApiModelProperty(value = "部门名称") private String deptName; @@ -33,5 +33,5 @@ public class OrgDepartmentCO { private String deptLevelName; @ApiModelProperty(value = "租户ID") - private Long tenantId; + private String tenantId; } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgDepartmentModifyCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgDepartmentModifyCmd.java index a09f11f..65044fb 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgDepartmentModifyCmd.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgDepartmentModifyCmd.java @@ -12,10 +12,10 @@ import lombok.Data; public class OrgDepartmentModifyCmd { @ApiModelProperty(value = "主键ID") - private Long id; + private String id; @ApiModelProperty(value = "上级部门id,0为根") - private Long parentId; + private String parentId; @ApiModelProperty(value = "部门名称") private String deptName; diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgPersonnelCertPageQuery.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgPersonnelCertPageQuery.java index eca2c24..212c7f5 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgPersonnelCertPageQuery.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgPersonnelCertPageQuery.java @@ -24,4 +24,13 @@ public class OrgPersonnelCertPageQuery extends BasePageQuery { @ApiModelProperty(value = "证书类型编码") private Long certTypeCode; + + @ApiModelProperty(value = "证书编号") + private String certNo; + + @ApiModelProperty(value = "证书类别名称") + private String certCategoryName; + + @ApiModelProperty(value = "证书作业类别名称") + private String operationCategoryName; } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/OrgPersonnelEntity.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/OrgPersonnelEntity.java index 553be2d..ac383dc 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/OrgPersonnelEntity.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/OrgPersonnelEntity.java @@ -116,4 +116,7 @@ public class OrgPersonnelEntity { /** 租户ID */ private Long tenantId; + + /** 删除标识(false 未删除 / true 已删除) */ + private String deleteEnum; } 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 d43d447..e13ada8 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 @@ -17,6 +17,10 @@ public interface OrgPersonnelGateway { OrgPersonnelEntity getByAccount(String account); + OrgPersonnelEntity findAnyByAccount(String account); + + OrgPersonnelEntity restore(OrgPersonnelEntity entity); + OrgPersonnelEntity findByUserName(String userName); OrgPersonnelEntity modify(OrgPersonnelEntity entity); diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/OrgPersonnelCertQuery.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/OrgPersonnelCertQuery.java index 37c2c2a..7e33356 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/OrgPersonnelCertQuery.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/OrgPersonnelCertQuery.java @@ -30,4 +30,13 @@ public class OrgPersonnelCertQuery { /** 证书类型 */ private Long certTypeCode; + + /** 证书编号 */ + private String certNo; + + /** 证书类别名称 */ + private String certCategoryName; + + /** 证书作业类别名称 */ + private String operationCategoryName; } 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 4e7231f..a842dac 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 @@ -21,10 +21,14 @@ public class OrgPersonnelDomainService { private OrgPersonnelGateway orgPersonnelGateway; public OrgPersonnelEntity add(OrgPersonnelEntity entity) { - assertAccountUnique(entity.getAccount(), null); - if (entity.getEmploymentStatusCode() == null) { - entity.setEmploymentStatusCode(1); - entity.setEmploymentStatusName("在职"); + applyEmploymentDefault(entity); + OrgPersonnelEntity existing = orgPersonnelGateway.findAnyByAccount(entity.getAccount()); + if (existing != null) { + if (!isSoftDeleted(existing)) { + throw new BizException(ErrorCode.ORG_PERSONNEL_ACCOUNT_EXISTS); + } + entity.setId(existing.getId()); + return orgPersonnelGateway.restore(entity); } return orgPersonnelGateway.save(entity); } @@ -144,9 +148,21 @@ public class OrgPersonnelDomainService { if (!StringUtils.hasText(account)) { return; } - OrgPersonnelEntity found = orgPersonnelGateway.getByAccount(account); - if (found != null && (excludeId == null || !found.getId().equals(excludeId))) { + OrgPersonnelEntity found = orgPersonnelGateway.findAnyByAccount(account); + if (found != null && !isSoftDeleted(found) + && (excludeId == null || !found.getId().equals(excludeId))) { throw new BizException(ErrorCode.ORG_PERSONNEL_ACCOUNT_EXISTS); } } + + private void applyEmploymentDefault(OrgPersonnelEntity entity) { + if (entity.getEmploymentStatusCode() == null) { + entity.setEmploymentStatusCode(1); + entity.setEmploymentStatusName("在职"); + } + } + + private boolean isSoftDeleted(OrgPersonnelEntity entity) { + return entity != null && "true".equals(entity.getDeleteEnum()); + } } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/OrgPersonnelDO.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/OrgPersonnelDO.java index e55d434..3ce888c 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/OrgPersonnelDO.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/dataobject/OrgPersonnelDO.java @@ -1,5 +1,6 @@ package org.qinan.safetyeval.infrastructure.dataobject; +import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -51,6 +52,11 @@ public class OrgPersonnelDO { private String proofMaterialUrl; // ---- GBS默认字段 ---- + /** + * 逻辑删除标识:false-未删除,true-已删除。 + * 显式指定为字符串类型以覆盖框架全局的整数逻辑删除配置,保持与数据库 varchar 字段一致。 + */ + @TableLogic(value = "false", delval = "true") private String deleteEnum; private String remarks; private String createName; diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/OrgPersonnelCertGatewayImpl.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/OrgPersonnelCertGatewayImpl.java index 0ed6d99..9041ed4 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/OrgPersonnelCertGatewayImpl.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/OrgPersonnelCertGatewayImpl.java @@ -94,6 +94,15 @@ public class OrgPersonnelCertGatewayImpl implements OrgPersonnelCertGateway { if (query.getCertTypeCode() != null) { wrapper.eq(OrgPersonnelCertDO::getCertTypeCode, query.getCertTypeCode()); } + if (StringUtils.hasText(query.getCertNo())) { + wrapper.like(OrgPersonnelCertDO::getCertNo, query.getCertNo()); + } + if (StringUtils.hasText(query.getCertCategoryName())) { + wrapper.like(OrgPersonnelCertDO::getCertCategoryName, query.getCertCategoryName()); + } + if (StringUtils.hasText(query.getOperationCategoryName())) { + wrapper.like(OrgPersonnelCertDO::getOperationCategoryName, query.getOperationCategoryName()); + } Page page = new Page<>(query.getPageNum(), query.getPageSize()); IPage result = orgPersonnelCertMapper.selectPage(page, wrapper); 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 c27a04f..ae9fd9d 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 @@ -11,6 +11,8 @@ import org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDO; import org.qinan.safetyeval.infrastructure.mapper.OrgPersonnelMapper; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.qinan.safetyeval.infrastructure.support.OrgContextResolver; +import org.qinan.safetyeval.infrastructure.support.OrgPersonnelRawRepository; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; @@ -32,11 +34,24 @@ public class OrgPersonnelGatewayImpl implements OrgPersonnelGateway { @Resource private OrgContextResolver orgContextResolver; + @Resource + private OrgPersonnelRawRepository orgPersonnelRawRepository; + @Override public OrgPersonnelEntity save(OrgPersonnelEntity entity) { OrgPersonnelDO dataObject = toDO(entity); InsertFieldDefaults.apply(dataObject); - orgPersonnelMapper.insert(dataObject); + try { + orgPersonnelMapper.insert(dataObject); + } + catch (DuplicateKeyException ex) { + OrgPersonnelEntity existing = findAnyByAccount(entity.getAccount()); + if (existing == null || !"true".equals(existing.getDeleteEnum())) { + throw ex; + } + entity.setId(existing.getId()); + return restore(entity); + } entity.setId(dataObject.getId()); InsertFieldDefaults.apply(entity); entity.setTenantId(dataObject.getTenantId()); @@ -61,6 +76,26 @@ public class OrgPersonnelGatewayImpl implements OrgPersonnelGateway { return toEntity(dataObject); } + @Override + public OrgPersonnelEntity findAnyByAccount(String account) { + if (!StringUtils.hasText(account)) { + return null; + } + Long orgId = orgContextResolver.resolveOrgId(null); + OrgPersonnelDO dataObject = orgPersonnelRawRepository.selectAnyByOrgIdAndAccount(orgId, account); + return toEntity(dataObject); + } + + @Override + public OrgPersonnelEntity restore(OrgPersonnelEntity entity) { + OrgPersonnelDO dataObject = toDO(entity); + dataObject.setId(entity.getId()); + dataObject.setDeleteEnum("false"); + InsertFieldDefaults.applyForUpdate(dataObject); + orgPersonnelRawRepository.restoreById(dataObject); + return get(entity.getId()); + } + @Override public OrgPersonnelEntity findByUserName(String userName) { if (!StringUtils.hasText(userName)) { @@ -207,6 +242,7 @@ public class OrgPersonnelGatewayImpl implements OrgPersonnelGateway { entity.setWorkExperience(dataObject.getWorkExperience()); entity.setProofMaterialUrl(dataObject.getProofMaterialUrl()); entity.setTenantId(dataObject.getTenantId()); + entity.setDeleteEnum(dataObject.getDeleteEnum()); return entity; } }