job
parent
a2c476d5c3
commit
51b6c52fe8
|
|
@ -25,7 +25,7 @@ import java.util.Set;
|
|||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 机构项目过程控制风险预警定时任务
|
||||
* 过程控制签字完成,超过3天未归档
|
||||
*
|
||||
* @author ltq
|
||||
* @since 2026/08/13
|
||||
|
|
@ -33,15 +33,15 @@ import java.util.stream.Collectors;
|
|||
@Component
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
public class EvalProjectProcessWaringTaskJob implements Job {
|
||||
public class EvalProjectProcessWaringNotAchivedJob implements Job {
|
||||
|
||||
private final EvalProcessControlMapper evalProcessControlMapper;
|
||||
private final EvalProjectOrgWaringMapper evalProjectOrgWaringMapper;
|
||||
|
||||
@Override
|
||||
@XxlJob("org.qinan.safetyeval.adapter.job.EvalProjectProcessWaringTaskJob")
|
||||
@JobRegister(cron = "0/1 * * * * ?",
|
||||
jobDesc = "机构项目风险预警",
|
||||
@JobRegister(cron = "0 0 2 * * ?",
|
||||
jobDesc = "过程控制签字完成,超过3天未归档",
|
||||
author = "ltq",
|
||||
triggerStatus = 1)
|
||||
public ReturnT<String> execute(String param) {
|
||||
|
|
@ -67,13 +67,13 @@ public class EvalProjectProcessWaringTaskJob implements Job {
|
|||
}
|
||||
|
||||
/**
|
||||
* 查询签字完成未归档的项目(签字时间在3~180天前)
|
||||
* 查询签字完成未归档的项目(签字时间在3~90天前)
|
||||
*/
|
||||
private List<EvalProcessControlDO> findUnarchivedControls() {
|
||||
return evalProcessControlMapper.selectList(
|
||||
new LambdaQueryWrapper<EvalProcessControlDO>()
|
||||
.between(EvalProcessControlDO::getControlTime,
|
||||
LocalDateTime.now().minusDays(180),
|
||||
LocalDateTime.now().minusDays(90),
|
||||
LocalDateTime.now().minusDays(3))
|
||||
.eq(EvalProcessControlDO::getArchiveFlag, 0)
|
||||
.eq(EvalProcessControlDO::getDeleteEnum, BooleanQAEnum.FALSE.getValue()));
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
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;
|
||||
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.OrgProjectWarningTypeEnum;
|
||||
import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectDO;
|
||||
import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMapper;
|
||||
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
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
public class EvalProjectProcessWaringReportOverdueJob implements Job {
|
||||
|
||||
private final EvalProjectMapper evalProjectMapper;
|
||||
private final EvalProjectOrgWaringMapper evalProjectOrgWaringMapper;
|
||||
|
||||
@Override
|
||||
@XxlJob("org.qinan.safetyeval.adapter.job.EvalProjectProcessWaringTaskJob")
|
||||
@JobRegister(cron = "0 10 2 * * ?",
|
||||
jobDesc = "报告超期=项目超期",
|
||||
author = "ltq",
|
||||
triggerStatus = 1)
|
||||
public ReturnT<String> execute(String param) {
|
||||
param = XxlJobHelper.getJobParam();
|
||||
log.info("报告超期");
|
||||
|
||||
// 1. 项目超期(报告超期)
|
||||
List<EvalProjectDO> projectList = findOverdueProjects();
|
||||
if (projectList.isEmpty()) {
|
||||
log.info("报告超期=项目超期,无待检查项目");
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
|
||||
// 2. 查询已存在预警的 projectId
|
||||
Set<Long> existingProjectIds = findExistingWarnedProjectIds(projectList);
|
||||
|
||||
// 3. 构建预警记录并批量保存
|
||||
List<EvalProjectOrgWaringDO> toInsert = buildWarnings(projectList, existingProjectIds);
|
||||
batchSave(toInsert);
|
||||
|
||||
log.info("报告超期=项目超期,新增{}条(共{}条)", toInsert.size(), projectList.size());
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* 项目超期(项目超期30天内)
|
||||
*/
|
||||
private List<EvalProjectDO> findOverdueProjects() {
|
||||
return evalProjectMapper.selectList(
|
||||
new LambdaQueryWrapper<EvalProjectDO>()
|
||||
.select(EvalProjectDO::getId, EvalProjectDO::getOrgId, EvalProjectDO::getTenantId)
|
||||
.between(EvalProjectDO::getArchiveDate,
|
||||
LocalDateTime.now().minusDays(30),
|
||||
LocalDateTime.now())
|
||||
.eq(EvalProjectDO::getArchiveFlag, 0));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询已存在未归档预警的 projectId 集合
|
||||
*/
|
||||
private Set<Long> findExistingWarnedProjectIds(List<EvalProjectDO> projectList) {
|
||||
List<Long> projectIds = projectList.stream()
|
||||
.map(EvalProjectDO::getId)
|
||||
.collect(Collectors.toList());
|
||||
return evalProjectOrgWaringMapper.selectList(
|
||||
new LambdaQueryWrapper<EvalProjectOrgWaringDO>()
|
||||
.select(EvalProjectOrgWaringDO::getProjectId)
|
||||
.in(EvalProjectOrgWaringDO::getProjectId, projectIds)
|
||||
.eq(EvalProjectOrgWaringDO::getWarningType,
|
||||
OrgProjectWarningTypeEnum.REPORT_OVERDUE.getCode()))
|
||||
.stream()
|
||||
.map(EvalProjectOrgWaringDO::getProjectId)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
/**
|
||||
* 过滤未预警的项目,构建预警记录
|
||||
*/
|
||||
private List<EvalProjectOrgWaringDO> buildWarnings(List<EvalProjectDO> projectList,
|
||||
Set<Long> existingProjectIds) {
|
||||
List<EvalProjectOrgWaringDO> toInsert = new ArrayList<>();
|
||||
for (EvalProjectDO project : projectList) {
|
||||
if (existingProjectIds.contains(project.getId())) {
|
||||
continue;
|
||||
}
|
||||
EvalProjectOrgWaringDO waring = new EvalProjectOrgWaringDO();
|
||||
waring.setProjectId(project.getId());
|
||||
waring.setOrgId(project.getOrgId());
|
||||
waring.setTenantId(project.getTenantId());
|
||||
waring.setWarningType(OrgProjectWarningTypeEnum.REPORT_OVERDUE.getCode());
|
||||
waring.setTriggerCondition(OrgProjectWarningTypeEnum.REPORT_OVERDUE.getValue());
|
||||
InsertFieldDefaults.applyIgnoreOrgId(waring);
|
||||
toInsert.add(waring);
|
||||
}
|
||||
return toInsert;
|
||||
}
|
||||
|
||||
/**
|
||||
* 分批保存,每批100条
|
||||
*/
|
||||
private void batchSave(List<EvalProjectOrgWaringDO> toInsert) {
|
||||
for (int i = 0; i < toInsert.size(); i += 100) {
|
||||
Db.saveBatch(toInsert.subList(i, Math.min(i + 100, toInsert.size())), 100);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue