From a7d9d1527b392a10969f2d22fc893b25bc87d926 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Tue, 2 Jan 2024 14:27:22 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=81=E6=A0=87=E5=88=B6=E4=BF=AE?= =?UTF-8?q?=E8=AE=A2=E6=B5=81=E7=A8=8B=20=E5=BE=81=E6=B1=82=E6=84=8F?= =?UTF-8?q?=E8=A7=81=E6=88=AA=E6=AD=A2=E6=97=A5=E6=9C=9F=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=90=8E=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../esRevision/entity/EsRevisionAdvice.java | 1 + .../esRevision/job/AdviceDeadlineJob.java | 92 ++++++++++--------- .../service/impl/EsRevisionServiceImpl.java | 4 +- 3 files changed, 50 insertions(+), 47 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/entity/EsRevisionAdvice.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/entity/EsRevisionAdvice.java index 21a71b2f..df4279cd 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/entity/EsRevisionAdvice.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/entity/EsRevisionAdvice.java @@ -100,6 +100,7 @@ public class EsRevisionAdvice implements Serializable { * 1采纳 2部分采纳 3不采纳 */ @ApiModelProperty(value = "1采纳 2部分采纳 3不采纳") + @Dict(dicCode = "consultation_opinion") private String handleAdvice; /** diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/job/AdviceDeadlineJob.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/job/AdviceDeadlineJob.java index d6d0725b..d021c5ab 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/job/AdviceDeadlineJob.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/job/AdviceDeadlineJob.java @@ -1,27 +1,25 @@ package com.jero.modules.activiti.process.esRevision.job; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.jero.common.constant.enums.YesOrNoEnum; import com.jero.modules.activiti.entity.ProcessApprovalRecord; import com.jero.modules.activiti.enums.FinishFlagEnum; +import com.jero.modules.activiti.process.esRevision.entity.EsRevisionAdvice; import com.jero.modules.activiti.process.esRevision.entity.ProcessEsRevision; import com.jero.modules.activiti.process.esRevision.entity.vo.ESRevisionDataVO; -import com.jero.modules.activiti.process.esRevision.entity.vo.OtherDraftUserVO; import com.jero.modules.activiti.process.esRevision.service.EsRevisionService; import com.jero.modules.activiti.service.ProcessApprovalRecordService; import lombok.extern.slf4j.Slf4j; import org.activiti.engine.RuntimeService; +import org.activiti.engine.TaskService; +import org.activiti.engine.runtime.Execution; import org.jetbrains.annotations.NotNull; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import javax.annotation.Resource; -import java.util.Calendar; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -40,57 +38,63 @@ public class AdviceDeadlineJob implements Job { @Resource private RuntimeService runtimeService; + @Resource + private TaskService taskService; + @Override public void execute(JobExecutionContext context) throws JobExecutionException { + log.info("开始执行征求意见截止日期每日定时任务"); LambdaQueryWrapper revisionLambdaQueryWrapper = new LambdaQueryWrapper<>(); - revisionLambdaQueryWrapper.eq(ProcessEsRevision::getOtherDrafterUploadFinishFlag, YesOrNoEnum.NO.getValue()); + revisionLambdaQueryWrapper.eq(ProcessEsRevision::getDelFlag, YesOrNoEnum.NO.getValue()); List revisionList = revisionService.list(revisionLambdaQueryWrapper); + if (revisionList == null || revisionList.isEmpty()) { + return; + } + Map revisionMap = revisionList.stream() + .collect(Collectors.toMap(ProcessEsRevision::getProcessInstanceId, revision -> revision)); + // 找到所有征求意见的未完成的待办 LambdaQueryWrapper arWrapper = new LambdaQueryWrapper<>(); arWrapper.eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue()); - for (ProcessEsRevision revision : revisionList) { - String prcId = revision.getProcessInstanceId(); - List otherDraftUserVOS = revision.parseOtherDraftUserVOS(); - if (otherDraftUserVOS == null || otherDraftUserVOS.isEmpty()) { + arWrapper.in(ProcessApprovalRecord::getProcessInstanceId, revisionMap.keySet()); + arWrapper.eq(ProcessApprovalRecord::getTaskName, "征求意见对象填写意见"); + arWrapper.isNotNull(ProcessApprovalRecord::getTaskId); + List arList = approvalRecordService.list(arWrapper); + Date curDate = new Date(); + for (ProcessApprovalRecord record : arList) { + String taskId = record.getTaskId(); + // 根据record获取每一个任务的deadline + // 获取Task + taskService.createTaskQuery().taskId(record.getTaskId()).singleResult(); + // 根据Task获取其父级executionId + String executionId = taskService.createTaskQuery() + .taskId(record.getTaskId()).singleResult().getExecutionId(); + // 获取Execution + Execution execution = runtimeService.createExecutionQuery().executionId(executionId).singleResult(); + String parentExecutionId = execution.getParentId(); + // 根据executionId获取流程变量 + Date adviceDeadline = (Date) taskService.getVariable(taskId, parentExecutionId + "-adviceDeadline"); + if (adviceDeadline == null) { continue; } - arWrapper.eq(ProcessApprovalRecord::getProcessInstanceId, prcId); - List arList = approvalRecordService.list(arWrapper); - Map arMap = arList.stream().collect(Collectors.toMap(ProcessApprovalRecord::getOriginUserId, ar -> ar)); - Date curDate = new Date(); - for (OtherDraftUserVO otherDraftUser : otherDraftUserVOS) { - String originUserId = otherDraftUser.getUser(); - if (StrUtil.isNotBlank(otherDraftUser.getFileId())) { - continue; - } - // 获取TaskId - Date deadline = getDeadlineDate(otherDraftUser); - // 如果当前日期大于该条数据的截止日期 则自动完成任务 - if (curDate.after(deadline)) { - ProcessApprovalRecord ar = arMap.get(originUserId); - if (ar == null) { - log.error("未找到对应待办"); - continue; - } - String taskId = ar.getTaskId(); - String taskName = ar.getTaskName(); - if (StrUtil.isBlank(taskId)) { - log.error("任务Id为空"); - continue; - } - if (!taskName.equals("其他起草人上传企标")) { - continue; - } - ESRevisionDataVO handleData = revisionService.getHandleData(taskId); - handleData.getCommon().setTaskId(taskId); - revisionService.approval(handleData, true); - } + adviceDeadline = getDeadlineDate(adviceDeadline); + // 如果当前日期大于该条数据的截止日期 则自动完成任务 + if (curDate.after(adviceDeadline)) { + ESRevisionDataVO handleData = revisionService.getHandleData(taskId); + handleData.getCommon().setTaskId(taskId); + ProcessEsRevision data = handleData.getData(); + EsRevisionAdvice esRevisionAdvice = new EsRevisionAdvice(); + esRevisionAdvice.setClauseName("无"); + esRevisionAdvice.setClauseNum("无"); + esRevisionAdvice.setEditAdvice("无"); + data.setAdvices(new ArrayList<>(Collections.singletonList(esRevisionAdvice))); + revisionService.approval(handleData, true); } } + log.info("征求意见截止日期每日定时任务执行结束"); } @NotNull - private static Date getDeadlineDate(OtherDraftUserVO otherDraftUser) { - Date deadline = otherDraftUser.getDeadline(); + private static Date getDeadlineDate(Date deadline) { // 设置deadline为今天的最后一秒 // 创建一个 Calendar 对象 Calendar calendar = Calendar.getInstance(); diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java index e0fbbc1d..ea150f85 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java @@ -420,7 +420,7 @@ public class EsRevisionServiceImpl extends ServiceImpl adviceUserList = Arrays.asList(adviceUsers.split(",")); runtimeService.setVariable(executionId, "adviceUserList", adviceUserList); - runtimeService.setVariable(executionId, "adviceDeadline", data.getAdviceDeadline()); + runtimeService.setVariable(executionId, executionId + "-adviceDeadline", data.getAdviceDeadline()); runtimeService.setVariable(executionId, contactUser + "-ExecutionId", executionId); userMap.put("adviceUserList", adviceUsers); processNodeLinkService.incrementSaveNodeUserLink(processDefinitionId, processInstanceId, userMap); @@ -455,7 +455,6 @@ public class EsRevisionServiceImpl extends ServiceImpl() .eq(EsRevisionAdvice::getProcessInstanceId, processInstanceId) @@ -476,7 +475,6 @@ public class EsRevisionServiceImpl extends ServiceImpl