diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/MaintenanceStatusEnum.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/MaintenanceStatusEnum.java new file mode 100644 index 00000000..0d2e996d --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/enums/MaintenanceStatusEnum.java @@ -0,0 +1,58 @@ +package org.springblade.desk.jobTransfer.pojo.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.springblade.core.tool.utils.ObjectUtil; +import org.springblade.core.tool.utils.StringPool; + +import java.util.Arrays; + +/** + * 证书维护状态枚举 + * + * @author qyl + * @date 2026-01-12 + */ +@Getter +@AllArgsConstructor +public enum MaintenanceStatusEnum { + EMPTY(StringPool.EMPTY, -1), + + /** + * 状态枚举 + */ + NORMAL("正常", 1), + DUE("到期", 2), + DEPART("离职", 3), + ; + final String name; + final Integer code; + + /** + * 匹配枚举值 + * + * @param name 名称 + * @return + */ + public static MaintenanceStatusEnum of(String name) { + return Arrays.stream(MaintenanceStatusEnum.values()) + .filter(enumItem -> enumItem.getName().equalsIgnoreCase(name != null ? name : "")) + .findFirst() + // 在没有找到匹配项时返回默认值 + .orElse(MaintenanceStatusEnum.EMPTY); + } + + /** + * 根据值获取名称 + * + * @param code + * @return + */ + public static String getName(Integer code) { + MaintenanceStatusEnum item = Arrays.stream(MaintenanceStatusEnum.values()) + .filter(enumItem -> enumItem.getCode() == code) + .findFirst() + .orElse(null); + return ObjectUtil.isEmpty(item) ? StringPool.EMPTY : item.getName(); + } +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/request/CertificateLedgerQuery.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/request/CertificateLedgerQuery.java new file mode 100644 index 00000000..8f81505a --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/request/CertificateLedgerQuery.java @@ -0,0 +1,47 @@ +package org.springblade.desk.jobTransfer.pojo.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 岗位证书管理检索请求入参 + */ +@Data +public class CertificateLedgerQuery { + /** + * 姓名 + */ + @Schema(description = "姓名") + private String name; + /** + * 所属班组 + */ + @Schema(description = "所属班组") + private Long deptId; + + /** + * 所属岗位 + */ + @Schema(description = "所属岗位") + private String station; + /** + * 技能等级 + */ + @Schema(description = "技能等级") + private Short skill; + /** + * 证书类型 + */ + @Schema(description = "证书类型") + private Long certificateId; + /** + * 证书编号 + */ + @Schema(description = "证书编号") + private String certificateCode; + /** + * 维护状态(1正常,2到期,3离职) + */ + @Schema(description = "维护状态(1正常,2到期,3离职)") + private Short maintenanceStatus; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CertificateLedgerVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CertificateLedgerVO.java new file mode 100644 index 00000000..e236d254 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CertificateLedgerVO.java @@ -0,0 +1,21 @@ +package org.springblade.desk.jobTransfer.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * 岗位证书台账VO + */ +@Data +public class CertificateLedgerVO { + + //人员岗位数据 + @Schema(description = "人员岗位数据") + private PostHandleVO postHandleVO; + + //岗位证书数据集合 + @Schema(description = "岗位证书数据集合") + private List certificateMaintenanceVOList; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CertificateMaintenanceVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CertificateMaintenanceVO.java index fd675c8a..1c6e9ebf 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CertificateMaintenanceVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/vo/CertificateMaintenanceVO.java @@ -1,10 +1,14 @@ package org.springblade.desk.jobTransfer.pojo.vo; +import io.swagger.v3.oas.annotations.media.Schema; import org.springblade.desk.jobTransfer.pojo.entity.CertificateMaintenanceEntity; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springblade.desk.jobTransfer.pojo.enums.MaintenanceStatusEnum; import java.io.Serial; +import java.util.Calendar; +import java.util.Date; /** * 证书维护 视图实体类 @@ -17,5 +21,94 @@ import java.io.Serial; public class CertificateMaintenanceVO extends CertificateMaintenanceEntity { @Serial private static final long serialVersionUID = 1L; + /** + * 证书名称 + */ + @Schema(description = "证书名称") + private String CertificateTypeName; + /** + * 证书有效期 + */ + @Schema(description = "证书有效期") + private Short validityPeriod; + /** + * 适航有效期 + */ + @Schema(description = "适航有效期") + private Short airworthinessValidityPeriod; + /** + * 宇航有效期 + */ + @Schema(description = "宇航有效期") + private Short astronautValidityPeriod; + // 适航到期日期 + public Date getAirworthinessDateExpire() { + if (this.getAirworthinessDate() != null && this.airworthinessValidityPeriod != null) { + Calendar cal = Calendar.getInstance(); + cal.setTime(this.getAirworthinessDate()); + cal.add(Calendar.YEAR, Integer.valueOf(this.airworthinessValidityPeriod.toString())); + //得到结算后的结果 yyyy-MM-dd HH:mm + Date date = cal.getTime(); + cal.setTime(date); + cal.add(Calendar.MONTH, -1); + return cal.getTime(); + } else { + return null; + } + + } + + // 宇航到期日期 + public Date getAstronautDateExpire() { + if (this.getAstronautDate() != null && this.astronautValidityPeriod != null) { + Calendar cal = Calendar.getInstance(); + cal.setTime(this.getAstronautDate()); + cal.add(Calendar.YEAR, Integer.valueOf(this.astronautValidityPeriod.toString())); + //得到结算后的结果 yyyy-MM-dd HH:mm + Date date = cal.getTime(); + cal.setTime(date); + cal.add(Calendar.MONTH, -1); + return cal.getTime(); + } else { + return null; + } + } + + // 上岗证到期日期 + public Date getValidityPeriodExpire() { + if (this.getCertificateDate() != null && this.validityPeriod != null) { + Calendar cal = Calendar.getInstance(); + cal.setTime(this.getCertificateDate()); + cal.add(Calendar.YEAR, Integer.valueOf(this.validityPeriod.toString())); + //得到结算后的结果 yyyy-MM-dd HH:mm + Date date = cal.getTime(); + cal.setTime(date); + cal.add(Calendar.MONTH, -1); + return cal.getTime(); + } else { + return null; + } + } + + public String getMaintenanceStatusName() { + if (this.getMaintenanceStatus() == MaintenanceStatusEnum.DEPART.getCode().shortValue()) { + return MaintenanceStatusEnum.DEPART.getName(); + } + Date date = new Date(); + if (getAirworthinessDateExpire() != null && getAirworthinessDateExpire().getTime() < date.getTime()) { + setMaintenanceStatus(MaintenanceStatusEnum.DUE.getCode().shortValue()); + return MaintenanceStatusEnum.DUE.getName(); + } + if (getAstronautDateExpire() != null && getAstronautDateExpire().getTime() < date.getTime()) { + setMaintenanceStatus(MaintenanceStatusEnum.DUE.getCode().shortValue()); + return MaintenanceStatusEnum.DUE.getName(); + } + if (getValidityPeriodExpire() != null && getValidityPeriodExpire().getTime() < date.getTime()) { + setMaintenanceStatus(MaintenanceStatusEnum.DUE.getCode().shortValue()); + return MaintenanceStatusEnum.DUE.getName(); + } + setMaintenanceStatus(MaintenanceStatusEnum.NORMAL.getCode().shortValue()); + return MaintenanceStatusEnum.NORMAL.getName(); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java index 1e25b375..084debd1 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/DeskApplication.java @@ -28,6 +28,7 @@ package org.springblade.desk; import org.springblade.core.cloud.client.BladeCloudApplication; import org.springblade.core.launch.BladeApplication; import org.springblade.core.launch.constant.AppConstant; +import org.springframework.scheduling.annotation.EnableScheduling; /** * Desk启动器 @@ -35,6 +36,7 @@ import org.springblade.core.launch.constant.AppConstant; * @author Chill */ @BladeCloudApplication +@EnableScheduling public class DeskApplication { public static void main(String[] args) { diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/CertificateMaintenanceController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/CertificateMaintenanceController.java index ab5ffadf..f030bc6f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/CertificateMaintenanceController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/CertificateMaintenanceController.java @@ -1,9 +1,13 @@ package org.springblade.desk.jobTransfer.controller; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import jakarta.annotation.PostConstruct; import lombok.AllArgsConstructor; import jakarta.validation.Valid; @@ -14,6 +18,9 @@ import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.desk.jobTransfer.pojo.excel.CertificateMaintenanceExcel; +import org.springblade.desk.jobTransfer.pojo.request.CertificateLedgerQuery; +import org.springblade.desk.jobTransfer.pojo.vo.CertificateLedgerVO; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -61,9 +68,18 @@ public class CertificateMaintenanceController extends BladeController { */ @GetMapping("/page") @ApiOperationSupport(order = 3) - @Operation(summary = "分页", description = "传入certificateMaintenance") - public R> page(CertificateMaintenanceVO certificateMaintenance, Query query) { - IPage pages = certificateMaintenanceService.selectCertificateMaintenancePage(Condition.getPage(query), certificateMaintenance); + @Operation(summary = "分页", description = "CertificateLedgerQuery") + @Parameters({ + @Parameter(name = "name", description = "姓名", in = ParameterIn.QUERY, schema = @Schema(type = "string")), + @Parameter(name = "deptId", description = "所属班组", in = ParameterIn.QUERY, schema = @Schema(type = "integer")), + @Parameter(name = "station", description = "所属岗位", in = ParameterIn.QUERY, schema = @Schema(type = "string")), + @Parameter(name = "skill", description = "技能等级", in = ParameterIn.QUERY, schema = @Schema(type = "integer")), + @Parameter(name = "certificateId", description = "证书类型", in = ParameterIn.QUERY, schema = @Schema(type = "integer")), + @Parameter(name = "certificateCode", description = "证书编号", in = ParameterIn.QUERY, schema = @Schema(type = "string")), + @Parameter(name = "maintenanceStatus", description = "状态", in = ParameterIn.QUERY, schema = @Schema(type = "integer")), + }) + public R> page(CertificateLedgerQuery certificateLedgerQuery, Query query) { + IPage pages = certificateMaintenanceService.selectCertificateMaintenancePage(Condition.getPage(query), certificateLedgerQuery); return R.data(pages); } @@ -125,4 +141,18 @@ public class CertificateMaintenanceController extends BladeController { ExcelUtil.export(response, "证书维护数据" + DateUtil.time(), "证书维护数据表", list, CertificateMaintenanceExcel.class); } + @PostConstruct // 项目启动后立即执行一次 + public void init() { + updateMaintenanceStatus(); + } + + /** + * 更新证书维护状态 + * TODO 以后需要交由PowerJob服务统一管理 + */ + @Scheduled(cron = "0 0 0 * * ?") // 每天凌晨0点执行 + public void updateMaintenanceStatus() { + certificateMaintenanceService.updateMaintenanceStatus(); + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateMaintenanceMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateMaintenanceMapper.java index 871ee6f6..85ea27e8 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateMaintenanceMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateMaintenanceMapper.java @@ -2,6 +2,8 @@ package org.springblade.desk.jobTransfer.mapper; import org.springblade.desk.jobTransfer.pojo.entity.CertificateMaintenanceEntity; import org.springblade.desk.jobTransfer.pojo.excel.CertificateMaintenanceExcel; +import org.springblade.desk.jobTransfer.pojo.request.CertificateLedgerQuery; +import org.springblade.desk.jobTransfer.pojo.vo.CertificateLedgerVO; import org.springblade.desk.jobTransfer.pojo.vo.CertificateMaintenanceVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; @@ -22,10 +24,10 @@ public interface CertificateMaintenanceMapper extends BaseMapper + * @param certificateLedgerQuery 查询参数 + * @return List */ - List selectCertificateMaintenancePage(IPage page, CertificateMaintenanceVO certificateMaintenance); + List selectCertificateMaintenancePage(IPage page, CertificateLedgerQuery query); /** @@ -36,4 +38,8 @@ public interface CertificateMaintenanceMapper extends BaseMapper exportCertificateMaintenance(@Param("ew") Wrapper queryWrapper); + /** + * 更新证书维护状态 + */ + void updateMaintenanceStatus(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateMaintenanceMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateMaintenanceMapper.xml index 39a6038e..0846f923 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateMaintenanceMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateMaintenanceMapper.xml @@ -22,14 +22,134 @@ + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MERGE INTO MES_CERTIFICATE_MAINTENANCE m + USING (SELECT ID, + VALIDITY_PERIOD, + AIRWORTHINESS_VALIDITY_PERIOD, + ASTRONAUT_VALIDITY_PERIOD + FROM MES_CERTIFICATE_TYPE + WHERE IS_DELETED = 0) ct + ON (m.CERTIFICATE_ID = ct.ID AND m.IS_DELETED = 0) + WHEN MATCHED THEN + UPDATE SET + m.MAINTENANCE_STATUS = + CASE + WHEN m.CERTIFICATE_DATE IS NOT NULL AND ct.VALIDITY_PERIOD IS NOT NULL THEN + CASE + WHEN m.CERTIFICATE_DATE + NUMTOYMINTERVAL(ct.VALIDITY_PERIOD, 'YEAR') < + SYSDATE THEN 2 + ELSE 1 END + WHEN m.AIRWORTHINESS_DATE IS NOT NULL AND ct.AIRWORTHINESS_VALIDITY_PERIOD IS NOT NULL + THEN + CASE + WHEN m.AIRWORTHINESS_DATE + + NUMTOYMINTERVAL(ct.AIRWORTHINESS_VALIDITY_PERIOD, 'YEAR') < SYSDATE + THEN 2 + ELSE 1 END + WHEN m.ASTRONAUT_DATE IS NOT NULL AND ct.ASTRONAUT_VALIDITY_PERIOD IS NOT NULL THEN + CASE + WHEN m.ASTRONAUT_DATE + + NUMTOYMINTERVAL(ct.ASTRONAUT_VALIDITY_PERIOD, 'YEAR') < SYSDATE THEN 2 + ELSE 1 END + ELSE 1 + END, + m.UPDATE_TIME = SYSDATE + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ICertificateMaintenanceService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ICertificateMaintenanceService.java index 6df8162a..77316fa0 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ICertificateMaintenanceService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ICertificateMaintenanceService.java @@ -3,6 +3,8 @@ package org.springblade.desk.jobTransfer.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import org.springblade.desk.jobTransfer.pojo.entity.CertificateMaintenanceEntity; import org.springblade.desk.jobTransfer.pojo.excel.CertificateMaintenanceExcel; +import org.springblade.desk.jobTransfer.pojo.request.CertificateLedgerQuery; +import org.springblade.desk.jobTransfer.pojo.vo.CertificateLedgerVO; import org.springblade.desk.jobTransfer.pojo.vo.CertificateMaintenanceVO; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; @@ -20,10 +22,10 @@ public interface ICertificateMaintenanceService extends BaseService + * @param certificateLedgerQuery 查询参数 + * @return IPage */ - IPage selectCertificateMaintenancePage(IPage page, CertificateMaintenanceVO certificateMaintenance); + IPage selectCertificateMaintenancePage(IPage page, CertificateLedgerQuery certificateLedgerQuery); /** @@ -34,4 +36,8 @@ public interface ICertificateMaintenanceService extends BaseService exportCertificateMaintenance(Wrapper queryWrapper); + /** + * 更新证书维护状态 + */ + void updateMaintenanceStatus(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/CertificateMaintenanceServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/CertificateMaintenanceServiceImpl.java index 6bab90f5..14d33de5 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/CertificateMaintenanceServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/CertificateMaintenanceServiceImpl.java @@ -2,7 +2,8 @@ package org.springblade.desk.jobTransfer.service.impl; import org.springblade.desk.jobTransfer.pojo.entity.CertificateMaintenanceEntity; import org.springblade.desk.jobTransfer.pojo.excel.CertificateMaintenanceExcel; -import org.springblade.desk.jobTransfer.pojo.vo.CertificateMaintenanceVO; +import org.springblade.desk.jobTransfer.pojo.request.CertificateLedgerQuery; +import org.springblade.desk.jobTransfer.pojo.vo.CertificateLedgerVO; import org.springblade.desk.jobTransfer.mapper.CertificateMaintenanceMapper; import org.springblade.desk.jobTransfer.service.ICertificateMaintenanceService; import org.springframework.stereotype.Service; @@ -22,8 +23,8 @@ import java.util.List; public class CertificateMaintenanceServiceImpl extends BaseServiceImpl implements ICertificateMaintenanceService { @Override - public IPage selectCertificateMaintenancePage(IPage page, CertificateMaintenanceVO certificateMaintenance) { - return page.setRecords(baseMapper.selectCertificateMaintenancePage(page, certificateMaintenance)); + public IPage selectCertificateMaintenancePage(IPage page, CertificateLedgerQuery certificateLedgerQuery) { + return page.setRecords(baseMapper.selectCertificateMaintenancePage(page, certificateLedgerQuery)); } @@ -36,4 +37,8 @@ public class CertificateMaintenanceServiceImpl extends BaseServiceImpl