sql/mysql/safety_certificate_employee_20261029.sql
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,42 @@ -- ============================================================ -- å®å ¨ç产 - ç¹ç§ä½ä¸è¯æè¯äººæ¹ä¸ºå ³èåå·¥æ¡£æ¡ -- çææ¶é´ï¼2026-10-29 -- èæ¯ï¼å设计ææè¯äººåæçº¯ææ¬å§åï¼employee_name / employee_no / dept_nameï¼ï¼ -- æ æ³ä¸äººåèµæºçå工档æ¡ãç³»ç»ç¨æ·æéã -- åæ³ï¼æ°å¢ employee_id å ³è hrm_employee.idï¼å§å/å·¥å·/é¨é¨æ¹ä¸ºå工档æ¡å¸¦åºï¼ -- æ§ææ¬å段ä¿çä¸ºå¿«ç §ï¼ä¾¿äºå工档æ¡åæ´åä»å¯è¿½æº¯å¼è¯æ¶ç人äºä¿¡æ¯ã -- 说æï¼å¹çï¼å¯é夿§è¡ -- ============================================================ -- ---------- 1. æ°å¢ employee_id åæ®µ ---------- SET @exist_col = (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'safety_certificate' AND column_name = 'employee_id'); SET @sql = IF(@exist_col = 0, 'ALTER TABLE `safety_certificate` ADD COLUMN `employee_id` bigint NULL COMMENT ''æè¯äººï¼åå·¥ç¼å·ï¼å ³è hrm_employee.idï¼'' AFTER `id`', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- ---------- 2. ç´¢å¼ ---------- SET @exist_idx = (SELECT COUNT(*) FROM information_schema.statistics WHERE table_schema = DATABASE() AND table_name = 'safety_certificate' AND index_name = 'idx_employee_id'); SET @sql2 = IF(@exist_idx = 0, 'CREATE INDEX `idx_employee_id` ON `safety_certificate` (`employee_id`)', 'SELECT 1'); PREPARE stmt2 FROM @sql2; EXECUTE stmt2; DEALLOCATE PREPARE stmt2; -- ---------- 3. åä¸åæ¹ä¸ºå¿«ç §è¯ä¹ï¼ä¿çï¼ä¸åä½ä¸ºå¯ä¸æ¥æºï¼ ---------- ALTER TABLE `safety_certificate` MODIFY COLUMN `employee_name` varchar(50) NULL COMMENT 'æè¯äººå§åï¼å¿«ç §ï¼ç±å工档æ¡å¸¦åºï¼', MODIFY COLUMN `employee_no` varchar(50) NULL COMMENT 'å·¥å·ï¼å¿«ç §ï¼ç±å工档æ¡å¸¦åºï¼', MODIFY COLUMN `dept_name` varchar(100) NULL COMMENT 'æå±é¨é¨ï¼å¿«ç §ï¼ç±å工档æ¡å¸¦åºï¼'; -- ---------- 4. æ ¡éª ---------- SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_COMMENT FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'safety_certificate' AND COLUMN_NAME IN ('employee_id', 'employee_name', 'employee_no', 'dept_name') ORDER BY ORDINAL_POSITION; yudao-module-hrm-api/src/main/java/cn/iocoder/yudao/module/hrm/api/employee/HrmEmployeeApi.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,42 @@ package cn.iocoder.yudao.module.hrm.api.employee; import cn.iocoder.yudao.module.hrm.api.employee.dto.HrmEmployeeSimpleDTO; import java.util.Collection; import java.util.List; /** * åå·¥æ¡£æ¡ API æ¥å£ * * <p>æä¾ç»å ¶ä»æ¨¡åè·¨æ¨¡åæ¥è¯¢å工精ç®ä¿¡æ¯ï¼ * ä¾å¦å®å ¨ç产模åçç¹ç§ä½ä¸è¯éè¦å ³èæè¯äººã</p> * * @author è¶ çº§ç®¡çå */ public interface HrmEmployeeApi { /** * è·åå工精ç®ä¿¡æ¯ * * @param id åå·¥ç¼å· * @return å工信æ¯ï¼ä¸åå¨è¿å null */ HrmEmployeeSimpleDTO getEmployee(Long id); /** * æ¹éè·åå工精ç®ä¿¡æ¯ * * @param ids åå·¥ç¼å·éå * @return å工信æ¯å表 */ List<HrmEmployeeSimpleDTO> getEmployeeList(Collection<Long> ids); /** * æ ¡éªåå·¥æ¯å¦åå¨ï¼ä¸æªå é¤ï¼ * * @param id åå·¥ç¼å· * @return æ¯å¦åå¨ */ boolean validateEmployeeExists(Long id); } yudao-module-hrm-api/src/main/java/cn/iocoder/yudao/module/hrm/api/employee/dto/HrmEmployeeSimpleDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,57 @@ package cn.iocoder.yudao.module.hrm.api.employee.dto; import lombok.Data; /** * å工精ç®ä¿¡æ¯ DTO * * <p>ä¾å ¶ä»æ¨¡åï¼å¦å®å ¨ç产模åçç¹ç§ä½ä¸è¯ï¼å ³èåå·¥æ¡£æ¡æ¶ä½¿ç¨ã</p> * * @author è¶ çº§ç®¡çå */ @Data public class HrmEmployeeSimpleDTO { /** * åå·¥ç¼å· */ private Long id; /** * å ³èçç³»ç»ç¨æ·ç¼å· * * å ³è AdminUserDO#getId() */ private Long userId; /** * åå·¥ç¼å·ï¼å·¥å·ï¼ */ private String employeeNo; /** * åå·¥å§å */ private String name; /** * é¨é¨ç¼å· */ private Long deptId; /** * é¨é¨åç§° */ private String deptName; /** * ææºå·ç */ private String phone; /** * åå·¥ç¶æï¼1-å¨èï¼2-è¯ç¨ï¼3-离è */ private Integer employeeStatus; } yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/api/employee/HrmEmployeeApiImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,82 @@ package cn.iocoder.yudao.module.hrm.api.employee; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.hrm.api.employee.dto.HrmEmployeeSimpleDTO; import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeDO; import cn.iocoder.yudao.module.hrm.dal.mysql.employee.HrmEmployeeMapper; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Objects; /** * åå·¥æ¡£æ¡ API å®ç°ç±» * * @author è¶ çº§ç®¡çå */ @Service public class HrmEmployeeApiImpl implements HrmEmployeeApi { @Resource private HrmEmployeeMapper employeeMapper; @Resource private DeptApi deptApi; @Override public HrmEmployeeSimpleDTO getEmployee(Long id) { if (id == null) { return null; } HrmEmployeeDO employee = employeeMapper.selectById(id); if (employee == null) { return null; } return build(employee, getDeptName(employee.getDeptId())); } @Override public List<HrmEmployeeSimpleDTO> getEmployeeList(Collection<Long> ids) { if (ids == null || ids.isEmpty()) { return List.of(); } List<HrmEmployeeDO> employees = employeeMapper.selectBatchIds(ids); if (employees.isEmpty()) { return List.of(); } // æ¹éæ¥é¨é¨ï¼é¿å N+1 List<Long> deptIds = employees.stream().map(HrmEmployeeDO::getDeptId) .filter(Objects::nonNull).distinct().toList(); Map<Long, DeptRespDTO> deptMap = deptIds.isEmpty() ? Map.of() : deptApi.getDeptMap(deptIds); return employees.stream() .map(e -> { DeptRespDTO dept = deptMap.get(e.getDeptId()); return build(e, dept == null ? null : dept.getName()); }) .toList(); } @Override public boolean validateEmployeeExists(Long id) { return id != null && employeeMapper.selectById(id) != null; } private String getDeptName(Long deptId) { if (deptId == null) { return null; } DeptRespDTO dept = deptApi.getDept(deptId); return dept == null ? null : dept.getName(); } private static HrmEmployeeSimpleDTO build(HrmEmployeeDO employee, String deptName) { HrmEmployeeSimpleDTO dto = BeanUtils.toBean(employee, HrmEmployeeSimpleDTO.class); dto.setDeptName(deptName); return dto; } } yudao-module-mes/pom.xml
@@ -29,6 +29,12 @@ <artifactId>yudao-module-infra</artifactId> <version>${revision}</version> </dependency> <!-- hrm-apiï¼ç¹ç§ä½ä¸è¯æè¯äººå ³èåå·¥æ¡£æ¡ --> <dependency> <groupId>cn.iocoder.boot</groupId> <artifactId>yudao-module-hrm-api</artifactId> <version>${revision}</version> </dependency> <!-- MES å¶é æ§è¡ API --> <dependency> yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/safety/SafetyCertificateController.java
@@ -65,7 +65,7 @@ public CommonResult<SafetyCertificateRespVO> get(@RequestParam("id") Long id) { var cert = certificateService.getCertificate(id); var resp = BeanUtils.toBean(cert, SafetyCertificateRespVO.class); SafetyCertificateService.fillDisplayFields(cert, resp); certificateService.fillDisplayFields(cert, resp); return success(resp); } @@ -74,9 +74,11 @@ @PreAuthorize("@ss.hasPermission('safety:cert:query')") public CommonResult<PageResult<SafetyCertificateRespVO>> page(@Valid SafetyCertificatePageReqVO reqVO) { var page = certificateService.getCertificatePage(reqVO); // æ¹éè¡¥å ¨æè¯äººææ°æ¡£æ¡ï¼å§å/å·¥å·/é¨é¨ï¼ï¼é¿å éæ¡æ¥è¯¢ certificateService.fillEmployeeInfo(page.getList()); var result = BeanUtils.toBean(page, SafetyCertificateRespVO.class); for (int i = 0; i < page.getList().size(); i++) { SafetyCertificateService.fillDisplayFields(page.getList().get(i), result.getList().get(i)); certificateService.fillDisplayFields(page.getList().get(i), result.getList().get(i)); } return success(result); } @@ -87,10 +89,13 @@ @PreAuthorize("@ss.hasPermission('safety:cert:query')") public CommonResult<List<SafetyCertificateRespVO>> expiringList( @RequestParam(value = "days", required = false) Integer days) { List<SafetyCertificateRespVO> list = certificateService.getExpiringCertificates(days).stream() List<cn.iocoder.yudao.module.mes.dal.dataobject.safety.SafetyCertificateDO> certs = certificateService.getExpiringCertificates(days); certificateService.fillEmployeeInfo(certs); List<SafetyCertificateRespVO> list = certs.stream() .map(cert -> { var resp = BeanUtils.toBean(cert, SafetyCertificateRespVO.class); SafetyCertificateService.fillDisplayFields(cert, resp); certificateService.fillDisplayFields(cert, resp); return resp; }).toList(); return success(list); yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/safety/vo/cert/SafetyCertificatePageReqVO.java
@@ -18,7 +18,10 @@ @EqualsAndHashCode(callSuper = true) public class SafetyCertificatePageReqVO extends PageParam { @Schema(description = "æè¯äººå§å") @Schema(description = "æè¯äººï¼åå·¥ç¼å·ï¼") private Long employeeId; @Schema(description = "æè¯äººå§åï¼æ¨¡ç³å¹é ï¼") private String employeeName; @Schema(description = "å·¥å·") yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/safety/vo/cert/SafetyCertificateRespVO.java
@@ -16,9 +16,14 @@ public class SafetyCertificateRespVO { private Long id; @Schema(description = "æè¯äººï¼åå·¥ç¼å·ï¼") private Long employeeId; @Schema(description = "æè¯äººå ³èçç³»ç»ç¨æ·ç¼å·") private Long userId; private String employeeName; private String employeeNo; private String deptName; private String phone; private String certType; @Schema(description = "è¯ä»¶ç±»ååç§°") private String certTypeName; yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/safety/vo/cert/SafetyCertificateSaveReqVO.java
@@ -10,6 +10,9 @@ /** * å®å ¨ç产 - ç¹ç§ä½ä¸è¯æ°å¢/ä¿®æ¹ Request VO * * <p>æè¯äººéè¿ employeeId å ³èå工档æ¡ï¼å§åä¸é¨é¨ç±åç«¯ä»æ¡£æ¡å¸¦åºï¼ * å端åªéé人ï¼ä¸æå·¥å¡«åï¼é¿å ä¸äººåèµæºæ°æ®ä¸ä¸è´ã</p> * * @author è¶ çº§ç®¡çå */ @Schema(description = "管çåå° - ç¹ç§ä½ä¸è¯æ°å¢/ä¿®æ¹ Request VO") @@ -18,18 +21,9 @@ private Long id; @Schema(description = "æè¯äººå§å", requiredMode = Schema.RequiredMode.REQUIRED, example = "å¼ ä¸") @NotBlank(message = "æè¯äººå§åä¸è½ä¸ºç©º") @Size(max = 50) private String employeeName; @Schema(description = "å·¥å·", example = "EMP001") @Size(max = 50) private String employeeNo; @Schema(description = "æå±é¨é¨", example = "çµæ°è½¦é´") @Size(max = 100) private String deptName; @Schema(description = "æè¯äººï¼åå·¥ç¼å·ï¼", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @NotNull(message = "è¯·éæ©æè¯äºº") private Long employeeId; @Schema(description = "è¯ä»¶ç±»å", requiredMode = Schema.RequiredMode.REQUIRED, example = "HIGH_VOLTAGE_OPERATION") @NotBlank(message = "è¯ä»¶ç±»åä¸è½ä¸ºç©º") yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/safety/SafetyCertificateDO.java
@@ -22,11 +22,17 @@ @TableId private Long id; /** æè¯äººå§å */ /** * æè¯äººï¼åå·¥ç¼å·ï¼ * * å ³è HrmEmployeeDO#getId()ï¼å§å/å·¥å·/é¨é¨åç±æ¤å ³èå¸¦åº */ private Long employeeId; /** æè¯äººå§åï¼å¿«ç §ï¼ç±å工档æ¡å¸¦åºï¼ç¨äºå工档æ¡åæ´å追溯å¼è¯æ¶ä¿¡æ¯ï¼ */ private String employeeName; /** å·¥å· */ /** å·¥å·ï¼å¿«ç §ï¼ */ private String employeeNo; /** æå±é¨é¨ */ /** æå±é¨é¨ï¼å¿«ç §ï¼ */ private String deptName; /** è¯ä»¶ç±»åï¼è§ SafetyCertificateTypeEnum */ private String certType; yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/SafetyErrorCodeConstants.java
@@ -22,6 +22,7 @@ ErrorCode SAFETY_CERT_NOT_EXISTS = new ErrorCode(1_040_962_000, "ç¹ç§ä½ä¸è¯ä¸åå¨"); ErrorCode SAFETY_CERT_NO_DUPLICATE = new ErrorCode(1_040_962_001, "è¯ä»¶ç¼å·å·²åå¨"); ErrorCode SAFETY_CERT_EXPIRE_BEFORE_ISSUE = new ErrorCode(1_040_962_002, "æææä¸è½æ©äºåè¯æ¥æ"); ErrorCode SAFETY_CERT_EMPLOYEE_NOT_EXISTS = new ErrorCode(1_040_962_003, "æè¯äººä¸åå¨ï¼è¯·ä»å工档æ¡ä¸éæ©"); // ========== å·¡æ£ç¹ä½ / å·¡æ£è®°å½ 1_040_963_xxx ========== ErrorCode SAFETY_POINT_NOT_EXISTS = new ErrorCode(1_040_963_000, "å·¡æ£ç¹ä½ä¸åå¨"); yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyCertificateService.java
@@ -1,8 +1,11 @@ package cn.iocoder.yudao.module.mes.service.safety; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.hrm.api.employee.HrmEmployeeApi; import cn.iocoder.yudao.module.hrm.api.employee.dto.HrmEmployeeSimpleDTO; import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.cert.SafetyCertificatePageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.cert.SafetyCertificateRespVO; import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.cert.SafetyCertificateSaveReqVO; @@ -17,7 +20,9 @@ import java.time.LocalDate; import java.time.temporal.ChronoUnit; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.mes.enums.SafetyErrorCodeConstants.*; @@ -27,6 +32,10 @@ * * <p>æ ¸å¿è½åï¼è¯ä¹¦å°æèªå¨é¢è¦ãç¶æç± {@link #resolveStatus} æ ¹æ®æææå®æ¶æ¨å¯¼ï¼ * ä¸ä¾èµæå·¥ç»´æ¤ï¼é¿å è¿ææªåæ¶æ´æ°ç¶æã</p> * * <p>æè¯äººéè¿ employeeId å ³è人åèµæºçå工档æ¡ï¼ * æ°å¢/ä¿®æ¹æ¶ä»æ¡£æ¡å¸¦åºå§åãå·¥å·ãé¨é¨å¹¶è½ä¸ºå¿«ç §ï¼æ¥è¯¢æ¶å®æ¶åå¡«ææ°æ¡£æ¡ä¿¡æ¯ï¼ * åå·¥è°å²åè¯ä»¶å表ä¹ä¼è·çæ¾ç¤ºæ°é¨é¨ã</p> * * @author è¶ çº§ç®¡çå */ @@ -39,11 +48,13 @@ @Resource private SafetyCertificateMapper certificateMapper; @Resource private HrmEmployeeApi hrmEmployeeApi; public Long createCertificate(SafetyCertificateSaveReqVO reqVO) { reqVO.setId(null); validateCertificateForCreate(reqVO); SafetyCertificateDO cert = buildCertificate(reqVO); SafetyCertificateDO cert = buildCertificate(reqVO, null); certificateMapper.insert(cert); return cert.getId(); } @@ -51,7 +62,7 @@ public void updateCertificate(SafetyCertificateSaveReqVO reqVO) { SafetyCertificateDO old = validateCertificateExists(reqVO.getId()); validateCertificateForUpdate(reqVO, old); SafetyCertificateDO cert = buildCertificate(reqVO); SafetyCertificateDO cert = buildCertificate(reqVO, old); certificateMapper.updateById(cert); } @@ -79,15 +90,47 @@ } /** * åé¡µç»æçå±ç¤ºåæ®µè¡¥å ¨ï¼ç±»ååç§°ãç¶æåç§°ãå©ä½å¤©æ°ï¼ * æ¹éè¡¥å ¨æè¯äººçææ°å工档æ¡ä¿¡æ¯ï¼å§åãå·¥å·ãé¨é¨ãææºãå ³èç¨æ·ï¼ * * <p>æ¥è¯¢æ¶ç¨æ¡£æ¡å®æ¶å¼è¦çå¿«ç §å¼ï¼ä¿è¯åå·¥è°å²åå°è´¦åæ¥ï¼ * å工档æ¡å·²è¢«å 餿¶åéå°å¿«ç §å¼ï¼ä¿è¯åå²è¯ä»¶ä»å¯å±ç¤ºã</p> */ public static void fillDisplayFields(SafetyCertificateDO cert, SafetyCertificateRespVO respVO) { public void fillEmployeeInfo(List<SafetyCertificateDO> certs) { List<Long> employeeIds = certs.stream() .map(SafetyCertificateDO::getEmployeeId) .filter(Objects::nonNull).distinct().toList(); Map<Long, HrmEmployeeSimpleDTO> employeeMap = employeeIds.isEmpty() ? Map.of() : hrmEmployeeApi.getEmployeeList(employeeIds).stream() .collect(Collectors.toMap(HrmEmployeeSimpleDTO::getId, e -> e, (a, b) -> a)); certs.forEach(cert -> { HrmEmployeeSimpleDTO employee = employeeMap.get(cert.getEmployeeId()); if (employee != null) { cert.setEmployeeName(employee.getName()); cert.setEmployeeNo(employee.getEmployeeNo()); cert.setDeptName(employee.getDeptName()); } }); } /** * å个è¯ä»¶çå±ç¤ºåæ®µè¡¥å ¨ï¼ç±»ååç§°ãç¶æåç§°ãå©ä½å¤©æ°ãæè¯äººæ¡£æ¡ï¼ */ public void fillDisplayFields(SafetyCertificateDO cert, SafetyCertificateRespVO respVO) { respVO.setCertTypeName(SafetyCertificateTypeEnum.getNameByType(cert.getCertType())); String status = resolveStatus(cert.getExpireDate(), cert.getWarnDays(), cert.getStatus()); respVO.setStatus(status); respVO.setStatusName(SafetyCertificateStatusEnum.getNameByStatus(status)); if (cert.getExpireDate() != null) { respVO.setRemainingDays(ChronoUnit.DAYS.between(LocalDate.now(), cert.getExpireDate())); } HrmEmployeeSimpleDTO employee = cert.getEmployeeId() == null ? null : hrmEmployeeApi.getEmployee(cert.getEmployeeId()); if (employee != null) { respVO.setEmployeeName(employee.getName()); respVO.setEmployeeNo(employee.getEmployeeNo()); respVO.setDeptName(employee.getDeptName()); respVO.setPhone(employee.getPhone()); respVO.setUserId(employee.getUserId()); } } @@ -116,12 +159,24 @@ return SafetyCertificateStatusEnum.VALID.getStatus(); } private SafetyCertificateDO buildCertificate(SafetyCertificateSaveReqVO reqVO) { /** * æå»º DOï¼æè¯äººå§å/å·¥å·/é¨é¨ä»å工档æ¡å¸¦åºå¹¶è½ä¸ºå¿«ç § */ private SafetyCertificateDO buildCertificate(SafetyCertificateSaveReqVO reqVO, SafetyCertificateDO old) { HrmEmployeeSimpleDTO employee = hrmEmployeeApi.getEmployee(reqVO.getEmployeeId()); if (employee == null) { throw exception(SAFETY_CERT_EMPLOYEE_NOT_EXISTS); } SafetyCertificateDO cert = BeanUtils.toBean(reqVO, SafetyCertificateDO.class); cert.setEmployeeName(StrUtil.trim(reqVO.getEmployeeName())); cert.setEmployeeId(employee.getId()); cert.setEmployeeName(employee.getName()); cert.setEmployeeNo(employee.getEmployeeNo()); cert.setDeptName(employee.getDeptName()); cert.setCertNo(StrUtil.trim(reqVO.getCertNo())); cert.setWarnDays(reqVO.getWarnDays() == null ? DEFAULT_WARN_DAYS : reqVO.getWarnDays()); cert.setStatus(resolveStatus(reqVO.getExpireDate(), cert.getWarnDays(), reqVO.getStatus())); // 已注éç¶æä¸å 许éè¿ç¼è¾æ¹å String currentStatus = old == null ? reqVO.getStatus() : old.getStatus(); cert.setStatus(resolveStatus(reqVO.getExpireDate(), cert.getWarnDays(), currentStatus)); cert.setRemark(reqVO.getRemark() == null ? "" : reqVO.getRemark().trim()); return cert; } @@ -138,11 +193,6 @@ SafetyCertificateDO byCertNo = certificateMapper.selectByCertNo(StrUtil.trim(reqVO.getCertNo())); if (byCertNo != null && !byCertNo.getId().equals(old.getId())) { throw exception(SAFETY_CERT_NO_DUPLICATE); } // ä¿çåç¶æä¸çã已注éãï¼ä¸å 许éè¿ç¼è¾éææ¹å if (SafetyCertificateStatusEnum.REVOKED.getStatus().equals(old.getStatus()) && !SafetyCertificateStatusEnum.REVOKED.getStatus().equals(reqVO.getStatus())) { reqVO.setStatus(SafetyCertificateStatusEnum.REVOKED.getStatus()); } } yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/safety/SafetyLedgerExportService.java
@@ -105,8 +105,10 @@ var pageReqVO = new cn.iocoder.yudao.module.mes.controller.admin.safety.vo.cert.SafetyCertificatePageReqVO(); pageReqVO.setPageNo(1); pageReqVO.setPageSize(50_000); List<List<Object>> rows = certificateService.getCertificatePage(pageReqVO) .getList().stream() var certs = certificateService.getCertificatePage(pageReqVO).getList(); // å¯¼åºæ¶ç¨å工档æ¡çææ°å§å/å·¥å·/é¨é¨ certificateService.fillEmployeeInfo(certs); List<List<Object>> rows = certs.stream() .map(c -> Arrays.<Object>asList( str(c.getEmployeeName()), str(c.getEmployeeNo()), str(c.getDeptName()), SafetyCertificateTypeEnum.getNameByType(c.getCertType()), str(c.getCertNo()),