From 6a84368ea04fe83eaf1813ade9c33edf7625a6e9 Mon Sep 17 00:00:00 2001 From: luotaiqian <1147642922@qq.com> Date: Thu, 13 Aug 2026 18:18:20 +0800 Subject: [PATCH] job --- .../job/EvalProjectProcessWaringTaskJob.java | 70 ++++++++++++++++++- .../constant/OrgProjectWarningTypeEnum.java | 2 +- 2 files changed, 70 insertions(+), 2 deletions(-) diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/job/EvalProjectProcessWaringTaskJob.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/job/EvalProjectProcessWaringTaskJob.java index 4b3a2aad..b9f2b3ad 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/job/EvalProjectProcessWaringTaskJob.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/job/EvalProjectProcessWaringTaskJob.java @@ -1,5 +1,7 @@ package org.qinan.safetyeval.adapter.job; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.toolkit.Db; import com.jjb.saas.framework.job.Job; import com.jjb.saas.framework.job.annotation.JobRegister; import com.xxl.job.core.biz.model.ReturnT; @@ -7,9 +9,23 @@ import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.qinan.safetyeval.domain.constant.BooleanQAEnum; +import org.qinan.safetyeval.domain.constant.OrgProjectWarningTypeEnum; +import org.qinan.safetyeval.infrastructure.dataobject.EvalProcessControlDO; +import org.qinan.safetyeval.infrastructure.mapper.EvalProcessControlMapper; +import org.qinan.safetyeval.infrastructure.persistence.domainobject.EvalProjectOrgWaringDO; +import org.qinan.safetyeval.infrastructure.persistence.mapper.EvalProjectOrgWaringMapper; +import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.springframework.stereotype.Component; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + /** + * 机构项目过程控制风险预警定时任务 * * @author ltq * @since 2026/08/13 @@ -19,6 +35,8 @@ import org.springframework.stereotype.Component; @RequiredArgsConstructor public class EvalProjectProcessWaringTaskJob implements Job { + private final EvalProcessControlMapper evalProcessControlMapper; + private final EvalProjectOrgWaringMapper evalProjectOrgWaringMapper; @Override @XxlJob("org.qinan.safetyeval.adapter.job.EvalProjectProcessWaringTaskJob") @@ -28,7 +46,57 @@ public class EvalProjectProcessWaringTaskJob implements Job { triggerStatus = 1) public ReturnT execute(String param) { param = XxlJobHelper.getJobParam(); - log.info("机构项目风险预警"); + log.info("机构项目风险预警-未归档检查开始"); + + // 1. 查询签字完成未归档的项目(签字时间在3~210天前) + List controlList = evalProcessControlMapper.selectList( + new LambdaQueryWrapper() + .between(EvalProcessControlDO::getControlTime, + LocalDateTime.now().minusDays(210), + LocalDateTime.now().minusDays(3)) + .eq(EvalProcessControlDO::getArchiveFlag, 0) + .eq(EvalProcessControlDO::getDeleteEnum, BooleanQAEnum.FALSE.getValue())); + + if (controlList.isEmpty()) { + log.info("机构项目风险预警-未归档检查完成,无待检查项目"); + return ReturnT.SUCCESS; + } + + // 2. 一次性查询已存在预警的 projectId + List projectIds = controlList.stream() + .map(EvalProcessControlDO::getProjectId) + .collect(Collectors.toList()); + Set existingProjectIds = evalProjectOrgWaringMapper.selectList( + new LambdaQueryWrapper() + .select(EvalProjectOrgWaringDO::getProjectId) + .in(EvalProjectOrgWaringDO::getProjectId, projectIds) + .eq(EvalProjectOrgWaringDO::getWarningType, + OrgProjectWarningTypeEnum.NOT_ARCHIVED.getCode())) + .stream() + .map(EvalProjectOrgWaringDO::getProjectId) + .collect(Collectors.toSet()); + + // 3. 过滤并批量新增(每批100条) + List toInsert = new ArrayList<>(); + for (EvalProcessControlDO control : controlList) { + if (existingProjectIds.contains(control.getProjectId())) { + continue; + } + EvalProjectOrgWaringDO waring = new EvalProjectOrgWaringDO(); + waring.setProjectId(control.getProjectId()); + waring.setOrgId(control.getOrgId()); + waring.setTenantId(control.getTenantId()); + waring.setWarningType(OrgProjectWarningTypeEnum.NOT_ARCHIVED.getCode()); + waring.setTriggerCondition(OrgProjectWarningTypeEnum.NOT_ARCHIVED.getValue()); + InsertFieldDefaults.applyIgnoreOrgId(waring); + toInsert.add(waring); + } + + for (int i = 0; i < toInsert.size(); i += 100) { + Db.saveBatch(toInsert.subList(i, Math.min(i + 100, toInsert.size())), 100); + } + + log.info("机构项目风险预警-未归档检查完成,新增{}条(共{}条)", toInsert.size(), controlList.size()); return ReturnT.SUCCESS; } } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/OrgProjectWarningTypeEnum.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/OrgProjectWarningTypeEnum.java index 619e4625..2e7ece89 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/OrgProjectWarningTypeEnum.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/OrgProjectWarningTypeEnum.java @@ -10,7 +10,7 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public enum OrgProjectWarningTypeEnum { - NOT_ARCHIVED("not_archived", "未归档"), + NOT_ARCHIVED("not_archived", "过程控制签字完成,超过3天未归档"), REPORT_OVERDUE("report_overdue", "报告超期"), CORPORATE_RECTIFICATION("CORPORATE_RECTIFICATION", "企业整改"), MAJOR_HAZARD("MAJOR_HAZARD", "重大隐患"),