diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java b/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java index 1a856549..d41e93f4 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java @@ -34,7 +34,6 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.Map; -import java.util.Objects; /** * @author liJiaRao @@ -67,6 +66,7 @@ public class WorkCenterController { queryWrapper.eq("par.user_id",userId); queryWrapper.eq("par.finish_flag", FinishFlagEnum.INCOMPLETE.getValue()); queryWrapper.ne("pa.prc_status", ProcessStatusEnum.WITHDRAWN.getValue()); + queryWrapper.ne("pa.prc_status", ProcessStatusEnum.COMPLETED.getValue()); Page page = new Page<>(pageNo, pageSize); IPage todoList = processAllService.getTodoList(page, queryWrapper, req); diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/job/DepartLeaderStartOverDueJob.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/job/DepartLeaderStartOverDueJob.java index c6b1d01a..3566b571 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/job/DepartLeaderStartOverDueJob.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/job/DepartLeaderStartOverDueJob.java @@ -4,14 +4,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.fb.common.ConsultationTaskKey; import com.jero.modules.activiti.process.fb.common.FbCommon; import com.jero.modules.activiti.process.fb.service.IProcessFbStandardConsultationService; import com.jero.modules.activiti.process.fb.vo.NodeDispose; 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.*; import org.apache.commons.collections4.CollectionUtils; import org.quartz.Job; import org.quartz.JobExecutionContext; @@ -47,7 +47,7 @@ public class DepartLeaderStartOverDueJob implements Job { * @throws JobExecutionException */ @Override - public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + public void execute(JobExecutionContext jobExecutionContext) { log.info("征求意见流程-超过征求意见结束日期,各部所主管级领导 部分/全部 未分发时任务开始"); long num = 0L; // 查询超过征求意见结束日期的各部所主管级领导未分发节点情况 @@ -64,16 +64,7 @@ public class DepartLeaderStartOverDueJob implements Job { .in(ProcessApprovalRecord::getProcessInstanceId, processInstanceIdList) .eq(ProcessApprovalRecord::getNodeId, ConsultationTaskKey.DEPART_LEADER_START_1) .eq(ProcessApprovalRecord::getOverDue, YesOrNoEnum.NO.getValue()) - .isNull(ProcessApprovalRecord::getEndTime)); - - for (ProcessApprovalRecord processApprovalRecord : processApprovalRecordList) { - num += 1; - // 设置网关条件 - runtimeService.setVariableLocal(processApprovalRecord.getProcessInstanceId(), - FbCommon.VARIABLE_PASS_FIRST, "overDue"); - // 完成任务 - taskService.complete(processApprovalRecord.getTaskId()); - } + .eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue())); // 更新超期标识 if (!processApprovalRecordList.isEmpty()){ @@ -85,8 +76,18 @@ public class DepartLeaderStartOverDueJob implements Job { .eq(ProcessApprovalRecord::getOverDue, YesOrNoEnum.NO.getValue()) .set(ProcessApprovalRecord::getOverDue, YesOrNoEnum.YES.getValue())); } + + for (ProcessApprovalRecord processApprovalRecord : processApprovalRecordList) { + num += 1; + // 设置网关条件 + runtimeService.setVariableLocal(processApprovalRecord.getProcessInstanceId(), + FbCommon.VARIABLE_PASS_FIRST, 3); + + // 完成任务 + taskService.complete(processApprovalRecord.getTaskId()); + } } log.info("征求意见流程-超过征求意见结束日期,各部所主管级领导 部分/全部 未分发时任务结束"); - log.info("征求意见流程-超过征求意见结束日期, 任务数量{}", num); + log.info("征求意见流程-超过征求意见结束日期,任务数量{}", num); } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/job/DesignEngineerOverDueJob.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/job/DesignEngineerOverDueJob.java index 1f66e2cb..20821fee 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/job/DesignEngineerOverDueJob.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/job/DesignEngineerOverDueJob.java @@ -2,17 +2,23 @@ package com.jero.modules.activiti.process.fb.job; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.jero.modules.activiti.entity.ProcessAll; import com.jero.modules.activiti.entity.ProcessApprovalRecord; +import com.jero.modules.activiti.enums.FinishFlagEnum; +import com.jero.modules.activiti.enums.ProcessStatusEnum; import com.jero.modules.activiti.process.fb.common.ConsultationTaskKey; import com.jero.modules.activiti.process.fb.entity.ProcessFbConsultationList; import com.jero.modules.activiti.process.fb.entity.ProcessFbConsultationUserLink; -import com.jero.modules.activiti.process.fb.entity.ProcessFbStandardConsultation; import com.jero.modules.activiti.process.fb.service.IProcessFbConsultationListService; import com.jero.modules.activiti.process.fb.service.IProcessFbConsultationUserLinkService; import com.jero.modules.activiti.process.fb.service.IProcessFbStandardConsultationService; +import com.jero.modules.activiti.process.fb.vo.NodeDispose; +import com.jero.modules.activiti.service.ProcessAllService; 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.activiti.engine.task.Task; import org.quartz.Job; import org.quartz.JobExecutionContext; @@ -21,7 +27,6 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Arrays; -import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -45,7 +50,11 @@ public class DesignEngineerOverDueJob implements Job { @Resource private ProcessApprovalRecordService processApprovalRecordService; @Resource + private ProcessAllService processAllService; + @Resource private TaskService taskService; + @Resource + private RuntimeService runtimeService; /** * 征求意见流程-超过征求意见结束日期,存在设计师未提交意见时,直接流转到下一节点任务 @@ -55,59 +64,64 @@ public class DesignEngineerOverDueJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { log.info("征求意见流程-超过征求意见结束日期,存在设计师未提交意见时,直接流转到下一节点任务开始"); - // 查询所有未完成的 设计工程师填写征求意见 节点 + long num = 0L; + // 查询超过征求意见结束日期的设计工程师填写征求意见节点情况 List designEngineerNodeList = Arrays.asList(ConsultationTaskKey.DESIGN_ENGINEER_1, ConsultationTaskKey.DESIGN_ENGINEER_2); - List nodeList = processApprovalRecordService.list( - new LambdaQueryWrapper() - .in(ProcessApprovalRecord::getNodeId, designEngineerNodeList) - .isNull(ProcessApprovalRecord::getEndTime)); - if (!nodeList.isEmpty()){ - // 查询节点相关的流程的征求意见结束日期 < 当前日期的 - List projectIdList = nodeList.stream() - .map(ProcessApprovalRecord::getProjectId) + List nodeDisposeCount = + processFbStandardConsultationService.findNodeDisposeCount( + String.join(",", designEngineerNodeList)); + if (!nodeDisposeCount.isEmpty()){ + // 获取实例id + List processInstanceIdList = nodeDisposeCount.stream() + .map(NodeDispose::getProcessInstanceId) .collect(Collectors.toList()); - List fbStandardConsultationList = processFbStandardConsultationService.list( - new LambdaQueryWrapper() - .in(ProcessFbStandardConsultation::getId, projectIdList) - .lt(ProcessFbStandardConsultation::getConsultationDueDate, new Date())); - if (!fbStandardConsultationList.isEmpty()){ - List idList = fbStandardConsultationList.stream() - .map(ProcessFbStandardConsultation::getId) - .collect(Collectors.toList()); - // 过滤符合条件的待办 - nodeList = nodeList.stream() - .filter(v -> idList.contains(v.getProjectId())) - .collect(Collectors.toList()); - for (ProcessApprovalRecord processApprovalRecord : nodeList) { + // 获取流程信息 + List processAllList = processAllService.list(new LambdaQueryWrapper() + .in(ProcessAll::getProcessInstanceId, processInstanceIdList) + .eq(ProcessAll::getPrcStatus, ProcessStatusEnum.INCOMPLETE.getValue())); + + for (ProcessAll processAll : processAllList) { + // 查询节点待办信息 + List processApprovalRecordList = processApprovalRecordService.list( + new LambdaQueryWrapper() + .eq(ProcessApprovalRecord::getProcessInstanceId, processAll.getProcessInstanceId()) + .in(ProcessApprovalRecord::getNodeId, designEngineerNodeList) + .eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue())); + + for (ProcessApprovalRecord processApprovalRecord : processApprovalRecordList) { // 获取任务信息 Task task = taskService.createTaskQuery().taskId(processApprovalRecord.getTaskId()).singleResult(); String executionId = task.getExecutionId(); + Execution execution = runtimeService.createExecutionQuery().executionId(executionId).singleResult(); + String executionParentId = execution.getParentId(); // 查询用户关联表 ProcessFbConsultationUserLink userLink = processFbConsultationUserLinkService.getOne( new LambdaQueryWrapper() - .eq(ProcessFbConsultationUserLink::getParentExecutionId, executionId) + .eq(ProcessFbConsultationUserLink::getParentExecutionId, executionParentId) .eq(ProcessFbConsultationUserLink::getDesignEngineerId, processApprovalRecord.getUserId()) .eq(ProcessFbConsultationUserLink::getBusinessId, - processApprovalRecord.getProjectId())); + processAll.getProjectId())); if (!Objects.isNull(userLink)){ // 修改流程相关业务数据 LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(ProcessFbConsultationList::getBusinessId, processApprovalRecord.getProjectId()); - updateWrapper.eq(ProcessFbConsultationList::getDesignEngineerId, userLink.getDesignEngineerId()); + updateWrapper.eq(ProcessFbConsultationList::getBusinessId, processAll.getProjectId()); + updateWrapper.eq(ProcessFbConsultationList::getDesignEngineerId, + processApprovalRecord.getUserId()); updateWrapper.eq(ProcessFbConsultationList::getUserLinkId, userLink.getId()); updateWrapper.set(ProcessFbConsultationList::getModificationBefore, null); updateWrapper.set(ProcessFbConsultationList::getModificationAfter, null); updateWrapper.set(ProcessFbConsultationList::getModificationReason, "无意见"); processFbConsultationListService.update(updateWrapper); } - + num += 1; // 完成任务 taskService.complete(processApprovalRecord.getTaskId()); } } } log.info("征求意见流程-超过征求意见结束日期,存在设计师未提交意见时,直接流转到下一节点任务开始"); + log.info("征求意见流程-超过征求意见结束日期,存在设计师未提交意见时,任务数量{}", num); } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/job/ModuleOwnerStartOverDueJob.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/job/ModuleOwnerStartOverDueJob.java index 98b5cc9c..e925b73c 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/job/ModuleOwnerStartOverDueJob.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/job/ModuleOwnerStartOverDueJob.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.fb.common.ConsultationTaskKey; import com.jero.modules.activiti.process.fb.common.FbCommon; import com.jero.modules.activiti.process.fb.service.IProcessFbStandardConsultationService; @@ -75,16 +76,7 @@ public class ModuleOwnerStartOverDueJob implements Job { .in(ProcessApprovalRecord::getProcessInstanceId, processInstanceIdList) .eq(ProcessApprovalRecord::getNodeId, ConsultationTaskKey.MODULE_OWNER_START) .eq(ProcessApprovalRecord::getOverDue, YesOrNoEnum.NO.getValue()) - .isNull(ProcessApprovalRecord::getEndTime)); - - for (ProcessApprovalRecord processApprovalRecord : processApprovalRecordList) { - num += 1; - // 设置网关条件 - runtimeService.setVariableLocal(processApprovalRecord.getProcessInstanceId(), - FbCommon.OVER_DUE, true); - // 完成任务 - taskService.complete(processApprovalRecord.getTaskId()); - } + .eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue())); // 更新超期标识 if (!processApprovalRecordList.isEmpty()){ @@ -96,8 +88,21 @@ public class ModuleOwnerStartOverDueJob implements Job { .eq(ProcessApprovalRecord::getOverDue, YesOrNoEnum.NO.getValue()) .set(ProcessApprovalRecord::getOverDue, YesOrNoEnum.YES.getValue())); } + + for (ProcessApprovalRecord processApprovalRecord : processApprovalRecordList) { + num += 1; + // 设置网关条件 + runtimeService.setVariableLocal(processApprovalRecord.getProcessInstanceId(), + FbCommon.OVER_DUE, true); + // 完成任务 + try { + taskService.complete(processApprovalRecord.getTaskId()); + }catch (Exception e){ + log.error("{}处理失败!" + e.getMessage(), processApprovalRecord.getTaskId()); + } + } } log.info("征求意见流程-超过征求意见结束日期,模块负责人 部分/全部 未分发时任务结束"); - log.info("征求意见流程-超过征求意见结束日期, 任务数量{}", num); + log.info("征求意见流程-超过征求意见结束日期,任务数量{}", num); } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessFbStandardConsultationServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessFbStandardConsultationServiceImpl.java index 52cf65b8..edc756cb 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessFbStandardConsultationServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessFbStandardConsultationServiceImpl.java @@ -595,50 +595,64 @@ public class ProcessFbStandardConsultationServiceImpl extends ServiceImpl list = list(new LambdaQueryWrapper() .eq(ProcessFbStandardConsultation::getStandardId, id) .isNull(ProcessFbStandardConsultation::getConsultationEndDate)); - if (!list.isEmpty()){ - // 超期节点 - List nodeIdList = Arrays.asList(ConsultationTaskKey.DEPART_LEADER_START_1, ConsultationTaskKey.MODULE_OWNER_START); - List nodeDisposeCount = findNodeDisposeCount(String.join(",", nodeIdList)); - - // 全部未完成 - List allUnFinishedList = nodeDisposeCount.stream() - .filter(v -> v.getUnFinished().equals(v.getCount())).collect(Collectors.toList()); - List processInstanceId = allUnFinishedList.stream() - .map(NodeDispose::getProcessInstanceId).collect(Collectors.toList()); - - // 查询含有超期的待办 + // 通过业务id查询未完成的相关流程信息 List idList = list.stream().map(ProcessFbStandardConsultation::getId).collect(Collectors.toList()); - List processApprovalRecords = processApprovalRecordService.list( - new LambdaQueryWrapper() - .in(ProcessApprovalRecord::getProjectId, idList) - .in(ProcessApprovalRecord::getProcessInstanceId , processInstanceId) - .eq(ProcessApprovalRecord::getOverDue, YesOrNoEnum.YES.getValue())); - // 结束流程 - for (ProcessApprovalRecord processApprovalRecord : processApprovalRecords) { - runtimeService.deleteProcessInstance(processApprovalRecord.getProcessInstanceId(),"结束流程"); - //更新流程总表状态 - processAllService.update(new LambdaUpdateWrapper() - .eq(ProcessAll::getProjectId, processApprovalRecord.getProjectId()) - .set(ProcessAll::getPrcStatus, ProcessStatusEnum.COMPLETED.getValue())); - } + List processAllList = processAllService.list( + new LambdaQueryWrapper() + .in(ProcessAll::getProjectId, idList) + .eq(ProcessAll::getPrcStatus, ProcessStatusEnum.INCOMPLETE.getValue())); + if (!processAllList.isEmpty()){ + // 获取流程实例id + List processInstanceIdList = processAllList.stream() + .map(ProcessAll::getProcessInstanceId).collect(Collectors.toList()); - if (!processApprovalRecords.isEmpty()){ - List processApprovalRecordIdList = processApprovalRecords.stream().map(ProcessApprovalRecord::getId).collect(Collectors.toList()); - //清除超期标识 - processApprovalRecordService.update( - new LambdaUpdateWrapper() - .in(ProcessApprovalRecord::getId, processApprovalRecordIdList) - .eq(ProcessApprovalRecord::getOverDue, YesOrNoEnum.YES.getValue()) - .set(ProcessApprovalRecord::getOverDue, YesOrNoEnum.NO.getValue())); + // 处理各部所主管级领导分发 + manageOverDue(processAllList, processInstanceIdList, ConsultationTaskKey.DEPART_LEADER_START_1); + // 处理模块负责人分发 + manageOverDue(processAllList, processInstanceIdList, ConsultationTaskKey.MODULE_OWNER_START); } } } + private void manageOverDue(List processAllList, List processInstanceIdList, String nodeIds) { + List nodeDisposeCount = findNodeDisposeCount(nodeIds); + // 过滤每个流程这两个节点全部未完成的流程实例 + List allUnFinishedList = nodeDisposeCount.stream() + .filter(v -> v.getUnFinished().equals(v.getCount())).collect(Collectors.toList()); + List processInstanceIds = allUnFinishedList.stream() + .map(NodeDispose::getProcessInstanceId).collect(Collectors.toList()); + + // 取交集 + List intersectionProcessInstanceIdList = + (List) CollectionUtils.intersection(processInstanceIdList, processInstanceIds); + + Date date = new Date(); + for (String processInstanceId: intersectionProcessInstanceIdList) { + // 结束流程 + runtimeService.deleteProcessInstance(processInstanceId,"结束流程"); + //更新流程总表状态 + processAllService.update(new LambdaUpdateWrapper() + .eq(ProcessAll::getProcessInstanceId, processInstanceId) + .set(ProcessAll::getPrcStatus, ProcessStatusEnum.COMPLETED.getValue())); + + Optional optionalProcessAll = processAllList.stream() + .filter(v -> v.getProcessInstanceId().equals(processInstanceId)).findFirst(); + + optionalProcessAll.ifPresent(v -> + // 更新业务状态 + update(new LambdaUpdateWrapper() + .eq(ProcessFbStandardConsultation::getId, optionalProcessAll.get().getProjectId()) + .set(ProcessFbStandardConsultation::getConsultationEndDate, date) + .set(ProcessFbStandardConsultation::getUpdateTime, date)) + ); + } + } + /** * @Author: liao * @Date: 2023/11/13 16:00 @@ -730,13 +744,6 @@ public class ProcessFbStandardConsultationServiceImpl extends ServiceImpl() - .eq(ProcessApprovalRecord::getProcessInstanceId, processInstanceId) - .eq(ProcessApprovalRecord::getOverDue, YesOrNoEnum.YES.getValue()) - .set(ProcessApprovalRecord::getOverDue, YesOrNoEnum.NO.getValue())); } else { List taskList = taskService.createTaskQuery().processInstanceId(processInstanceId).list(); log.info("还剩 {} 个任务待完成", taskList.size()); @@ -1050,7 +1057,7 @@ public class ProcessFbStandardConsultationServiceImpl extends ServiceImpl