diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/WarningFlowTypeEnum.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/WarningFlowTypeEnum.java index 6d47537..d0bb3d1 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/WarningFlowTypeEnum.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/WarningFlowTypeEnum.java @@ -24,7 +24,7 @@ public enum WarningFlowTypeEnum { */ APPROVED_PROJECT_NOT_PURCHASED(1, "已立项未采购", ProjectStatus.TO_BE_PURCHASED, "project/declareManage/projectManages/purchaseResults"), PURCHASED_UNMODIFIED(2, "已采购未改造完成", ProjectStatus.ON_ADAPTING, "project/declareManage/projectManages/adaptiveTransformation"), - MODIFIED_NOT_FINAL_INSPECTION(3, "已改造完成未终验", ProjectStatus.ON_PILOT_RUNNING, "project/declareManage/projectManages/finalInspectionDeclare"); + MODIFIED_NOT_FINAL_INSPECTION(3, "已改造完成未终验", ProjectStatus.TO_BE_FIRST_INSPECTED, "project/declareManage/projectManages/finalInspectionDeclare"); private Integer code; private String desc; diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/task/EarlyWarningProjectTask.java b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/task/EarlyWarningProjectTask.java index b85c81f..61d9b72 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/task/EarlyWarningProjectTask.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/task/EarlyWarningProjectTask.java @@ -1,6 +1,7 @@ package com.hz.pm.api.scheduler.task; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.StopWatch; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -57,7 +58,10 @@ public class EarlyWarningProjectTask { private final IPurchaseStatusChangeService purchaseStatusChangeService; @Scheduled(fixedDelay = 5, initialDelay = 5, timeUnit = TimeUnit.MINUTES) - public void doEarlyWarningDeclared() { + public void doEarlyWarningDelayed() { + log.info("=========== 预警项目状态校验任务开始 ==========="); + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); List projects = projectService.list(Wrappers.lambdaQuery(Project.class) .eq(Project::getNewest, Boolean.TRUE)); @@ -86,24 +90,50 @@ public class EarlyWarningProjectTask { return; } checkNormal(trueWarnings); + stopWatch.stop(); + log.info("=========== 预警项目状态校验任务结束 耗时{}s", stopWatch.getTotalTimeSeconds()); } - // 3.去查询 各个报警 是否已经正常 - private void checkNormal(List trueWarnings) { - // 3.1 流程预警 如果正常了 要改会正常 - List processWarning = trueWarnings.stream().filter(w -> Objects.nonNull(w.getProcessWarning()) - && w.getProcessWarning()) - .collect(Collectors.toList()); - checkProcessWarning(processWarning); + //@Scheduled(fixedDelay = 5, initialDelay = 5, timeUnit = TimeUnit.MINUTES) + public void doEarlyWarningDeclared() { + log.info("=========== 预警项目状态校验任务开始 ==========="); + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); + List projects = projectService.list(Wrappers.lambdaQuery(Project.class) + .eq(Project::getNewest, Boolean.TRUE)); + + if (CollUtil.isEmpty(projects)) { + return; + } - // 3.2 填报预警 如果正常了 要改会正常 - List declaredWarning = trueWarnings.stream().filter(w -> - Objects.nonNull(w.getDeclaredWarning()) - && w.getDeclaredWarning()) + Set projectSet = Sets.newHashSet(); + Map projectMap = projects.stream().filter(p -> projectSet.add(p.getProjectCode())) + .collect(Collectors.toMap(Project::getProjectCode, p -> p)); + List warnings = projectEarlyWarningService.list(); + + // 删除 已经不存在的项目 + List toRemove = warnings.stream() + .filter(w -> !projectMap.containsKey(w.getProjectCode())) .collect(Collectors.toList()); - checkDeclaredWarning(declaredWarning); + if (CollUtil.isNotEmpty(toRemove)) { + List removeIds = toRemove.stream().map(ProjectEarlyWarning::getId) + .collect(Collectors.toList()); + projectEarlyWarningService.removeBatchByIds(removeIds); + } - // 3.3 滞后预警 如果正常了 要改会正常 + // 去查询 各个报警 是否已经正常 + List trueWarnings = warnings.stream().filter(w -> Objects.nonNull(w.getNormal()) && !w.getNormal()).collect(Collectors.toList()); + if (CollUtil.isEmpty(trueWarnings)) { + return; + } + checkNormal(trueWarnings); + stopWatch.stop(); + log.info("=========== 预警项目状态校验任务结束 耗时{}s", stopWatch.getTotalTimeSeconds()); + } + + // 3.去查询 各个报警 是否已经正常 + private void checkNormal(List trueWarnings) { + // 滞后预警 如果正常了 要改回正常 List delayWarning = trueWarnings.stream().filter(w -> Objects.nonNull(w.getDelayWarning()) && w.getDelayWarning()) @@ -138,9 +168,8 @@ public class EarlyWarningProjectTask { // 已经不是这个状态了 说明已经被提交了 if (!projectStatus.eq(project.getStatus())) { checkCommited(delay, flowTypeEnum, projectCode); - // 其它几种 都没有 说明已经正常了 - if (!delay.getProcessWarning() && - !delay.getDeclaredWarning()) { + // 如果滞后预警正常了 改回正常 + if (Boolean.FALSE.equals(delay.getDelayWarning())){ delay.setNormal(Boolean.TRUE); delay.setStatus(ProjectEarlyWarningStatusEnum.NORMAL.name()); } @@ -177,8 +206,8 @@ public class EarlyWarningProjectTask { if (!projectStatus.eq(project.getStatus())) { checkCommited(declaredWarning, flowTypeEnum, projectCode); // 其它几种 都没有 说明已经正常了 - if (!declaredWarning.getProcessWarning() && - !declaredWarning.getDelayWarning()) { + if (Boolean.FALSE.equals(declaredWarning.getProcessWarning()) && + Boolean.FALSE.equals(declaredWarning.getDelayWarning())) { declaredWarning.setNormal(Boolean.TRUE); declaredWarning.setStatus(ProjectEarlyWarningStatusEnum.NORMAL.name()); } @@ -196,7 +225,11 @@ public class EarlyWarningProjectTask { ProjectStatusChange projectStatusChange = projectStatusChangeService.getLastOne(projectCode, events); // 说明进行了采购&合同信息备案 if (Objects.nonNull(projectStatusChange)) { - warning.setDeclaredWarning(Boolean.FALSE); + if (WarningRuleTypeEnum.DECLARED_WARNING.getCode().equals(warning.getRuleType())) { + warning.setDeclaredWarning(Boolean.FALSE); + }else if (WarningRuleTypeEnum.DELAY_WARNING.getCode().equals(warning.getRuleType())){ + warning.setDelayWarning(Boolean.FALSE); + } } } break; @@ -207,7 +240,11 @@ public class EarlyWarningProjectTask { PurchaseStatusChange purchaseStatusChange = purchaseStatusChangeService.getLastOne(projectCode, events); // 说明进行了单位确认 if (Objects.nonNull(purchaseStatusChange)) { - warning.setDeclaredWarning(Boolean.FALSE); + if (WarningRuleTypeEnum.DECLARED_WARNING.getCode().equals(warning.getRuleType())) { + warning.setDeclaredWarning(Boolean.FALSE); + }else if (WarningRuleTypeEnum.DELAY_WARNING.getCode().equals(warning.getRuleType())){ + warning.setDelayWarning(Boolean.FALSE); + } } } @@ -219,7 +256,11 @@ public class EarlyWarningProjectTask { ProjectStatusChange projectStatusChange = projectStatusChangeService.getLastOne(projectCode, events); // 说明提交了终验申请 if (Objects.nonNull(projectStatusChange)) { - warning.setDeclaredWarning(Boolean.FALSE); + if (WarningRuleTypeEnum.DECLARED_WARNING.getCode().equals(warning.getRuleType())) { + warning.setDeclaredWarning(Boolean.FALSE); + }else if (WarningRuleTypeEnum.DELAY_WARNING.getCode().equals(warning.getRuleType())){ + warning.setDelayWarning(Boolean.FALSE); + } } } break; @@ -255,8 +296,8 @@ public class EarlyWarningProjectTask { //说明 已经审批通过了 processWarning.setProcessWarning(Boolean.FALSE); //其它三种 都没有 说明已经正常了 - if (!processWarning.getDeclaredWarning() && - !processWarning.getDelayWarning()) { + if (Boolean.FALSE.equals(processWarning.getDeclaredWarning()) && + Boolean.FALSE.equals(processWarning.getDelayWarning())) { processWarning.setNormal(Boolean.TRUE); processWarning.setStatus(ProjectEarlyWarningStatusEnum.NORMAL.name()); } diff --git a/hz-pm-api/src/test/java/com/hz/pm/api/warning/DelayWarningTest.java b/hz-pm-api/src/test/java/com/hz/pm/api/warning/DelayWarningTest.java index 2a168bd..46aa3fc 100644 --- a/hz-pm-api/src/test/java/com/hz/pm/api/warning/DelayWarningTest.java +++ b/hz-pm-api/src/test/java/com/hz/pm/api/warning/DelayWarningTest.java @@ -138,31 +138,37 @@ public class DelayWarningTest extends AppTests { switch (flowType) { // 已立项未采购 获取 立项时间 case APPROVED_PROJECT_NOT_PURCHASED:{ - Map approvedProjectNotPurchasedMap = projectStatusChangeService.listLastEventMap(projectCodes, - ProjectStateChangeEvent.DECLARED_RECORD_PASS); - if (CollUtil.isNotEmpty(approvedProjectNotPurchasedMap)){ - projectStatusChangeMap.putAll(approvedProjectNotPurchasedMap); - stepName = TaskConstant.StepName.PURCHASE; + stepName = TaskConstant.StepName.PURCHASE; + if (CollUtil.isNotEmpty(projectCodes)) { + Map approvedProjectNotPurchasedMap = projectStatusChangeService.listLastEventMap(projectCodes, + ProjectStateChangeEvent.DECLARED_RECORD_PASS); + if (CollUtil.isNotEmpty(approvedProjectNotPurchasedMap)) { + projectStatusChangeMap.putAll(approvedProjectNotPurchasedMap); + } } } break; // 已采购未改造完成 获取合同签订时间 case PURCHASED_UNMODIFIED:{ - Map purchasedUnmodifiedMap = projectStatusChangeService.listLastEventMap(projectCodes, - ProjectStateChangeEvent.SUBMIT_PURCHASE_CONTRACT_RECORD); - if (CollUtil.isNotEmpty(purchasedUnmodifiedMap)){ - projectStatusChangeMap.putAll(purchasedUnmodifiedMap); - stepName = TaskConstant.StepName.ADAPT_MODIFY; + stepName = TaskConstant.StepName.ADAPT_MODIFY; + if (CollUtil.isNotEmpty(projectCodes)) { + Map purchasedUnmodifiedMap = projectStatusChangeService.listLastEventMap(projectCodes, + ProjectStateChangeEvent.SUBMIT_PURCHASE_CONTRACT_RECORD); + if (CollUtil.isNotEmpty(purchasedUnmodifiedMap)) { + projectStatusChangeMap.putAll(purchasedUnmodifiedMap); + } } } break; // 已改造完成未终验 获取单位确认时间 case MODIFIED_NOT_FINAL_INSPECTION:{ - Map modifiedNotFinalInspectionMap = projectStatusChangeService.listLastEventMap(projectCodes, - ProjectStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM); - if (CollUtil.isNotEmpty(modifiedNotFinalInspectionMap)){ - projectStatusChangeMap.putAll(modifiedNotFinalInspectionMap); - stepName = TaskConstant.StepName.FINAL; + stepName = TaskConstant.StepName.FINAL; + if (CollUtil.isNotEmpty(projectCodes)) { + Map modifiedNotFinalInspectionMap = projectStatusChangeService.listLastEventMap(projectCodes, + ProjectStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM); + if (CollUtil.isNotEmpty(modifiedNotFinalInspectionMap)) { + projectStatusChangeMap.putAll(modifiedNotFinalInspectionMap); + } } } break; @@ -223,6 +229,9 @@ public class DelayWarningTest extends AppTests { @Test public void two(){ + log.info("=========== 预警项目状态校验任务开始 ==========="); + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); List projects = projectService.list(Wrappers.lambdaQuery(Project.class) .eq(Project::getNewest, Boolean.TRUE)); @@ -251,6 +260,8 @@ public class DelayWarningTest extends AppTests { return; } checkNormal(trueWarnings); + stopWatch.stop(); + log.info("=========== 预警项目状态校验任务结束 耗时{}s", stopWatch.getTotalTimeSeconds()); } private long getDurationTime(LocalDateTime touchTime, LocalDateTime now, ChronoUnit timeUnit) { @@ -259,20 +270,7 @@ public class DelayWarningTest extends AppTests { // 3.去查询 各个报警 是否已经正常 private void checkNormal(List trueWarnings) { - // 3.1 流程预警 如果正常了 要改会正常 - List processWarning = trueWarnings.stream().filter(w -> Objects.nonNull(w.getProcessWarning()) - && w.getProcessWarning()) - .collect(Collectors.toList()); - checkProcessWarning(processWarning); - - // 3.2 填报预警 如果正常了 要改会正常 - List declaredWarning = trueWarnings.stream().filter(w -> - Objects.nonNull(w.getDeclaredWarning()) - && w.getDeclaredWarning()) - .collect(Collectors.toList()); - checkDeclaredWarning(declaredWarning); - - // 3.3 滞后预警 如果正常了 要改会正常 + // 滞后预警 如果正常了 要改回正常 List delayWarning = trueWarnings.stream().filter(w -> Objects.nonNull(w.getDelayWarning()) && w.getDelayWarning()) @@ -307,9 +305,8 @@ public class DelayWarningTest extends AppTests { // 已经不是这个状态了 说明已经被提交了 if (!projectStatus.eq(project.getStatus())) { checkCommited(delay, flowTypeEnum, projectCode); - // 其它几种 都没有 说明已经正常了 - if (!delay.getProcessWarning() && - !delay.getDeclaredWarning()) { + // 如果滞后预警正常了 改回正常 + if (Boolean.FALSE.equals(delay.getDelayWarning())){ delay.setNormal(Boolean.TRUE); delay.setStatus(ProjectEarlyWarningStatusEnum.NORMAL.name()); } @@ -346,8 +343,8 @@ public class DelayWarningTest extends AppTests { if (!projectStatus.eq(project.getStatus())) { checkCommited(declaredWarning, flowTypeEnum, projectCode); // 其它几种 都没有 说明已经正常了 - if (!declaredWarning.getProcessWarning() && - !declaredWarning.getDelayWarning()) { + if (Boolean.FALSE.equals(declaredWarning.getProcessWarning()) && + Boolean.FALSE.equals(declaredWarning.getDelayWarning())) { declaredWarning.setNormal(Boolean.TRUE); declaredWarning.setStatus(ProjectEarlyWarningStatusEnum.NORMAL.name()); } @@ -365,7 +362,11 @@ public class DelayWarningTest extends AppTests { ProjectStatusChange projectStatusChange = projectStatusChangeService.getLastOne(projectCode, events); // 说明进行了采购&合同信息备案 if (Objects.nonNull(projectStatusChange)) { - warning.setDeclaredWarning(Boolean.FALSE); + if (WarningRuleTypeEnum.DECLARED_WARNING.getCode().equals(warning.getRuleType())) { + warning.setDeclaredWarning(Boolean.FALSE); + }else if (WarningRuleTypeEnum.DELAY_WARNING.getCode().equals(warning.getRuleType())){ + warning.setDelayWarning(Boolean.FALSE); + } } } break; @@ -376,7 +377,11 @@ public class DelayWarningTest extends AppTests { PurchaseStatusChange purchaseStatusChange = purchaseStatusChangeService.getLastOne(projectCode, events); // 说明进行了单位确认 if (Objects.nonNull(purchaseStatusChange)) { - warning.setDeclaredWarning(Boolean.FALSE); + if (WarningRuleTypeEnum.DECLARED_WARNING.getCode().equals(warning.getRuleType())) { + warning.setDeclaredWarning(Boolean.FALSE); + }else if (WarningRuleTypeEnum.DELAY_WARNING.getCode().equals(warning.getRuleType())){ + warning.setDelayWarning(Boolean.FALSE); + } } } @@ -388,7 +393,11 @@ public class DelayWarningTest extends AppTests { ProjectStatusChange projectStatusChange = projectStatusChangeService.getLastOne(projectCode, events); // 说明提交了终验申请 if (Objects.nonNull(projectStatusChange)) { - warning.setDeclaredWarning(Boolean.FALSE); + if (WarningRuleTypeEnum.DECLARED_WARNING.getCode().equals(warning.getRuleType())) { + warning.setDeclaredWarning(Boolean.FALSE); + }else if (WarningRuleTypeEnum.DELAY_WARNING.getCode().equals(warning.getRuleType())){ + warning.setDelayWarning(Boolean.FALSE); + } } } break; @@ -424,8 +433,8 @@ public class DelayWarningTest extends AppTests { //说明 已经审批通过了 processWarning.setProcessWarning(Boolean.FALSE); //其它三种 都没有 说明已经正常了 - if (!processWarning.getDeclaredWarning() && - !processWarning.getDelayWarning()) { + if (Boolean.FALSE.equals(processWarning.getDeclaredWarning()) && + Boolean.FALSE.equals(processWarning.getDelayWarning())) { processWarning.setNormal(Boolean.TRUE); processWarning.setStatus(ProjectEarlyWarningStatusEnum.NORMAL.name()); }