diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgPersonnelExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgPersonnelExecutor.java index 4f6abbab..60801428 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgPersonnelExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgPersonnelExecutor.java @@ -1,5 +1,6 @@ package org.qinan.safetyeval.app.executor; +import cn.hutool.core.util.IdcardUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -51,6 +52,8 @@ import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import java.util.Collections; import java.util.List; import java.util.Map; @@ -124,6 +127,8 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi { @Override @Transactional(rollbackFor = Exception.class) public SingleResponse add(OrgPersonnelAddCmd cmd) { + cmd.setBirthDate(IdcardUtil.getBirthDate(cmd.getIdCardNo()).toLocalDateTime().toLocalDate()); + cmd.setJoinWorkDate(resolveJoinWorkDate(cmd.getWorkDateAge(), cmd.getJoinWorkDate())); OrgPersonnelEntity entity = orgPersonnelConvertor.toEntity(cmd); OrgPersonnelEntity result = orgPersonnelDomainService.add(entity); // 组织信息变更,清理该用户机构缓存 @@ -162,6 +167,7 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi { public SingleResponse get(Long id) { OrgPersonnelEntity entity = orgPersonnelDomainService.get(id); OrgPersonnelCO co = orgPersonnelConvertor.toCO(entity); + fillWorkDateAge(co); enrich(co); fillCerts(co, id); return SingleResponse.success(co); @@ -171,6 +177,8 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi { @Transactional(rollbackFor = Exception.class) public SingleResponse modify(OrgPersonnelModifyCmd cmd) { OrgPersonnelEntity existing = orgPersonnelDomainService.get(cmd.getId()); + cmd.setBirthDate(IdcardUtil.getBirthDate(cmd.getIdCardNo()).toLocalDateTime().toLocalDate()); + cmd.setJoinWorkDate(resolveJoinWorkDate(cmd.getWorkDateAge(), cmd.getJoinWorkDate())); OrgPersonnelEntity entity = orgPersonnelConvertor.toEntity(cmd); entity.setId(cmd.getId()); OrgPersonnelEntity result = orgPersonnelDomainService.modify(entity); @@ -337,6 +345,26 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi { } } + /** + * 新增/修改时根据本行业工作年龄换算参加工作日期:joinWorkDate = 当前时间 - workDateAge + */ + private LocalDate resolveJoinWorkDate(Integer workDateAge, LocalDate joinWorkDate) { + if (workDateAge != null) { + return LocalDate.now().minusYears(workDateAge); + } + return joinWorkDate; + } + + /** + * 查询返回时根据参加工作日期换算本行业工作年龄:workDateAge = 当前时间 - joinWorkDate + */ + private void fillWorkDateAge(OrgPersonnelCO co) { + if (co == null || co.getJoinWorkDate() == null) { + return; + } + co.setWorkDateAge((int) ChronoUnit.YEARS.between(co.getJoinWorkDate(), LocalDate.now())); + } + /** * 保存人员内嵌的注安证书和评价师证书 */ diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/OrgPersonnelCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/OrgPersonnelCO.java index 0297d271..b25c2a2b 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/OrgPersonnelCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/OrgPersonnelCO.java @@ -40,6 +40,9 @@ public class OrgPersonnelCO { @ApiModelProperty(value = "出生日期") private LocalDate birthDate; + @ApiModelProperty(value = "本行业工作年龄") + private Integer workDateAge; + @ApiModelProperty(value = "参加工作日期") private LocalDate joinWorkDate; diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgPersonnelAddCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgPersonnelAddCmd.java index 9b34847f..80a476d3 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgPersonnelAddCmd.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgPersonnelAddCmd.java @@ -5,6 +5,8 @@ import lombok.Data; import org.qinan.safetyeval.domain.entity.CapabilityAssessmentDTO; import org.qinan.safetyeval.domain.entity.TitleCodeCo; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import java.time.LocalDate; @@ -37,12 +39,17 @@ public class OrgPersonnelAddCmd { @ApiModelProperty(value = "出生日期") private LocalDate birthDate; + @ApiModelProperty(value = "本行业工作年龄") + @NotNull(message = "本行业工作年龄 不能为空") + private Integer workDateAge; + @ApiModelProperty(value = "参加工作日期") private LocalDate joinWorkDate; @Pattern(regexp = "^\\d{17}[\\dXx]$", message = "身份证号格式不正确") @Size(max = 18, message = "身份证号长度不能超过18个字符") @ApiModelProperty(value = "身份证号") + @NotBlank(message = "身份证号不能为空") private String idCardNo; @Size(max = 500, message = "现住地址长度不能超过500个字符") diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgPersonnelModifyCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgPersonnelModifyCmd.java index 8642ff7a..bb80e2be 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgPersonnelModifyCmd.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/OrgPersonnelModifyCmd.java @@ -1,14 +1,16 @@ package org.qinan.safetyeval.client.dto; import io.swagger.annotations.ApiModelProperty; -import java.time.LocalDate; -import java.util.List; -import javax.validation.constraints.Pattern; -import javax.validation.constraints.Size; import lombok.Data; import org.qinan.safetyeval.domain.entity.CapabilityAssessmentDTO; import org.qinan.safetyeval.domain.entity.TitleCodeCo; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; +import java.time.LocalDate; +import java.util.List; + /** * 人员信息修改命令 * @@ -39,12 +41,16 @@ public class OrgPersonnelModifyCmd { @ApiModelProperty(value = "出生日期") private LocalDate birthDate; + @ApiModelProperty(value = "本行业工作年龄") + private Integer workDateAge; + @ApiModelProperty(value = "参加工作日期") private LocalDate joinWorkDate; @Pattern(regexp = "^\\d{17}[\\dXx]$", message = "身份证号格式不正确") @Size(max = 18, message = "身份证号长度不能超过18个字符") @ApiModelProperty(value = "身份证号") + @NotBlank(message = "身份证号不能为空") private String idCardNo; @Size(max = 500, message = "现住地址长度不能超过500个字符")