From e333f900aa2dc6382c2553178b744b466ee2bcf3 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Mon, 15 Jan 2024 16:01:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=81=E6=A0=87=E5=A4=8D=E5=AE=A1?= =?UTF-8?q?=E5=A4=8D=E5=AE=A1=E6=97=A5=E6=9C=9F=E6=9B=B4=E6=96=B0=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/ProcessESRecheckEndListener.java | 6 +- .../entity/EnterpriseStandardRecheckPlan.java | 4 ++ .../laws/enterprise/job/ESRecheckPlanJob.java | 61 +++++++++++++------ 3 files changed, 51 insertions(+), 20 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRecheck/listener/ProcessESRecheckEndListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRecheck/listener/ProcessESRecheckEndListener.java index 0683b3d9..8c6627c1 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRecheck/listener/ProcessESRecheckEndListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRecheck/listener/ProcessESRecheckEndListener.java @@ -74,10 +74,14 @@ public class ProcessESRecheckEndListener implements ExecutionListener { // 继续有效 plan.setRecheckResult(RECHECK_CONTINUE_VALID); Date recheckDate = plan.getRecheckDate(); - // 发布日期加6年 + // 复审日期再加3年 Date nextRecheckDate = new Date(recheckDate.getTime() + (3 * 365 - 1) * 24 * 60 * 60 * 1000L); plan.setRecheckDate(nextRecheckDate); esRecheckPlanService.updateById(plan); + LambdaUpdateWrapper esWrapper = new LambdaUpdateWrapper<>(); + esWrapper.eq(LawsEnterpriseStandard::getStandardNumber, standNo); + esWrapper.set(LawsEnterpriseStandard::getStandardState, StandardStateEnum.CURRENTLY_EFFECTIVE.getStateValue()); + esService.update(esWrapper); } if (RECHECK_INIT_CHANGE.equals(recheckAdvice)) { // 修订 自动发起企标立项/变更流程(修订模式) diff --git a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/EnterpriseStandardRecheckPlan.java b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/EnterpriseStandardRecheckPlan.java index ab7dcd13..f3c0481b 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/EnterpriseStandardRecheckPlan.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/entity/EnterpriseStandardRecheckPlan.java @@ -75,4 +75,8 @@ public class EnterpriseStandardRecheckPlan implements Serializable { /**复审结果*/ @ApiModelProperty(value = "复审结果") private String recheckResult; + + /**是否在流程中 0不在 1在*/ + @ApiModelProperty(value = "是否在流程中 0不在 1在") + private String inProcessFlag; } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/job/ESRecheckPlanJob.java b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/job/ESRecheckPlanJob.java index b1c772a2..e6fd910f 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/job/ESRecheckPlanJob.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/job/ESRecheckPlanJob.java @@ -57,8 +57,6 @@ public class ESRecheckPlanJob implements Job { for (LawsEnterpriseStandard es : allEs) { // 根据企标发布日期判断是否当前已经达到35个月 - - // 请确保es.getReleaseDate()返回的是Date类型的实例 if (es.getReleaseDate() == null) { log.info("无法找到企标编号为{}的发布日期,无法进行复审计划定时任务", es.getStandardNumber()); continue; @@ -85,32 +83,57 @@ public class ESRecheckPlanJob implements Job { recheckPlan.setRecheckDate(recheckDate); esRecheckPlanService.save(recheckPlan); // 自动发起流程 - // 找到各自企标的联络人,如果找不到联络人则发给标准化工程师 - String deptId = es.getMainDraftingUnit(); - String standardNo = es.getStandardNumber(); - if (StrUtil.isBlank(deptId)) { - log.error("企标复审流程发起失败,企标编号为{}的企标部门ID为空,无法找到其联络人", standardNo); + autoStartProcess(es, recheckPlan); + } else { + // 如果已经有复审计划,则需要判断是否到达复审日期前一个月,如果到达则需要发起流程,已经发起过流程的不能重复发送 + EnterpriseStandardRecheckPlan recheckPlan = recheckPlans.get(0); + Date recheckDate = recheckPlan.getRecheckDate(); + LocalDate recheckLocalDate = recheckDate.toInstant().atZone(ZoneId.of("Asia/Shanghai")).toLocalDate(); + LocalDate minusMonths = recheckLocalDate.minusMonths(1); + if (recheckPlan.getInProcessFlag().equals(YesOrNoEnum.YES.getValue())) { + // 已经发起过流程,不需要重复发起 continue; } - String standardizationUser = contactManageService.findContactUserByDept(deptId); - String standardEngineer = null; - if (StrUtil.isBlank(standardizationUser)) { - standardEngineer = contactManageService.findStandardEngineerByDept(deptId); + if (minusMonths.isBefore(recheckLocalDate)) { + autoStartProcess(es, recheckPlan); } - if (StrUtil.isBlank(standardizationUser) && StrUtil.isBlank(standardEngineer)) { - log.error("企标复审流程发起失败,无法找到企标编号为{}的联络人和标准化工程师", standardNo); - continue; - } - // 构建发起流程数据 - ESRecheckDataVO esRecheckDataVO = getEsRecheckDataVO(es, standardizationUser, standardEngineer, recheckPlan); - // 发起流程 - recheckService.autoStartProcess(esRecheckDataVO); } } } log.info("企标复审计划定时任务执行完成"); } + /** + * 自动发起流程 + * @param es 企标 + * @param recheckPlan 复审计划 + */ + private void autoStartProcess(LawsEnterpriseStandard es, EnterpriseStandardRecheckPlan recheckPlan) { + // 找到各自企标的联络人,如果找不到联络人则发给标准化工程师 + String deptId = es.getMainDraftingUnit(); + String standardNo = es.getStandardNumber(); + if (StrUtil.isBlank(deptId)) { + log.error("企标复审流程发起失败,企标编号为{}的企标部门ID为空,无法找到其联络人", standardNo); + return; + } + String standardizationUser = contactManageService.findContactUserByDept(deptId); + String standardEngineer = null; + if (StrUtil.isBlank(standardizationUser)) { + standardEngineer = contactManageService.findStandardEngineerByDept(deptId); + } + if (StrUtil.isBlank(standardizationUser) && StrUtil.isBlank(standardEngineer)) { + log.error("企标复审流程发起失败,无法找到企标编号为{}的联络人和标准化工程师", standardNo); + return; + } + // 构建发起流程数据 + ESRecheckDataVO esRecheckDataVO = getEsRecheckDataVO(es, standardizationUser, standardEngineer, recheckPlan); + // 发起流程 + recheckService.autoStartProcess(esRecheckDataVO); + // 更新标识 + recheckPlan.setInProcessFlag(YesOrNoEnum.YES.getValue()); + esRecheckPlanService.updateById(recheckPlan); + } + public static ESRecheckDataVO getEsRecheckDataVO(LawsEnterpriseStandard es, String standardizationUser , String standardEngineer, EnterpriseStandardRecheckPlan recheckPlan) { ESRecheckDataVO esRecheckDataVO = new ESRecheckDataVO();