From ed43774129f2278aa6248242c6ff145bde1a625d Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: 星期三, 27 三月 2024 22:23:02 +0800 Subject: [PATCH] add 添加任务过期自动审批 --- ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/GlobalFlowableListener.java | 67 +++++++++++++++++++++++++++------ 1 files changed, 55 insertions(+), 12 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/GlobalFlowableListener.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/GlobalFlowableListener.java index a37c787..b59fb45 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/GlobalFlowableListener.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/config/GlobalFlowableListener.java @@ -1,7 +1,10 @@ package org.dromara.workflow.flowable.config; import cn.hutool.core.collection.CollUtil; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.workflow.common.enums.TaskStatusEnum; +import org.dromara.workflow.flowable.handler.TaskTimeoutJobHandler; import org.dromara.workflow.utils.QueryUtils; import org.flowable.bpmn.model.BoundaryEvent; import org.flowable.bpmn.model.BpmnModel; @@ -11,13 +14,19 @@ import org.flowable.engine.RepositoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; +import org.flowable.engine.impl.util.CommandContextUtil; import org.flowable.engine.runtime.Execution; import org.flowable.engine.task.Comment; +import org.flowable.job.service.TimerJobService; +import org.flowable.job.service.impl.persistence.entity.JobEntity; +import org.flowable.job.service.impl.persistence.entity.TimerJobEntity; import org.flowable.task.api.Task; +import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; +import java.util.Date; import java.util.List; @@ -47,6 +56,36 @@ FlowableEngineEventType engineEventType = (FlowableEngineEventType) flowableEvent.getType(); switch (engineEventType) { case JOB_EXECUTION_SUCCESS -> jobExecutionSuccess((FlowableEngineEntityEvent) flowableEngineEvent); + case TASK_DUEDATE_CHANGED, TASK_CREATED -> { + FlowableEntityEvent flowableEntityEvent = (FlowableEntityEvent) flowableEngineEvent; + Object entityObject = flowableEntityEvent.getEntity(); + TaskEntity task = (TaskEntity) entityObject; + if (task.getDueDate() != null && task.getDueDate().after(new Date())) { + //鍒犻櫎涔嬪墠宸茬粡瀛樺湪鐨勫畾鏃朵换鍔� + TimerJobService timerJobService = CommandContextUtil.getTimerJobService(); + List<TimerJobEntity> timerJobEntityList = timerJobService.findTimerJobsByProcessInstanceId(task.getProcessInstanceId()); + if (!CollUtil.isEmpty(timerJobEntityList)) { + for (TimerJobEntity timerJobEntity : timerJobEntityList) { + String taskId = timerJobEntity.getJobHandlerConfiguration(); + if (task.getId().equals(taskId)) { + timerJobService.deleteTimerJob(timerJobEntity); + } + } + } + //鍒涘缓job瀵硅薄 + TimerJobEntity timer = timerJobService.createTimerJob(); + timer.setTenantId(TenantHelper.getTenantId()); + //璁剧疆job绫诲瀷 + timer.setJobType(JobEntity.JOB_TYPE_TIMER); + timer.setJobHandlerType(TaskTimeoutJobHandler.TYPE); + timer.setDuedate(task.getDueDate()); + timer.setProcessInstanceId(task.getProcessInstanceId()); + //璁剧疆浠诲姟id + timer.setJobHandlerConfiguration(task.getId()); + //淇濆瓨骞惰Е鍙戜簨浠� + timerJobService.scheduleTimerJob(timer); + } + } } } } @@ -72,18 +111,22 @@ * @param event 浜嬩欢 */ protected void jobExecutionSuccess(FlowableEngineEntityEvent event) { - Execution execution = runtimeService.createExecutionQuery().executionId(event.getExecutionId()).singleResult(); - BpmnModel bpmnModel = repositoryService.getBpmnModel(event.getProcessDefinitionId()); - FlowElement flowElement = bpmnModel.getFlowElement(execution.getActivityId()); - if (flowElement instanceof BoundaryEvent) { - String attachedToRefId = ((BoundaryEvent) flowElement).getAttachedToRefId(); - List<Execution> list = runtimeService.createExecutionQuery().activityId(attachedToRefId).list(); - for (Execution ex : list) { - Task task = QueryUtils.taskQuery().executionId(ex.getId()).singleResult(); - if (task != null) { - List<Comment> taskComments = taskService.getTaskComments(task.getId()); - if (CollUtil.isEmpty(taskComments)) { - taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.PASS.getStatus(), "瓒呮椂鑷姩瀹℃壒锛�"); + if (event != null && StringUtils.isNotBlank(event.getExecutionId())) { + Execution execution = runtimeService.createExecutionQuery().executionId(event.getExecutionId()).singleResult(); + if (execution != null) { + BpmnModel bpmnModel = repositoryService.getBpmnModel(event.getProcessDefinitionId()); + FlowElement flowElement = bpmnModel.getFlowElement(execution.getActivityId()); + if (flowElement instanceof BoundaryEvent) { + String attachedToRefId = ((BoundaryEvent) flowElement).getAttachedToRefId(); + List<Execution> list = runtimeService.createExecutionQuery().activityId(attachedToRefId).list(); + for (Execution ex : list) { + Task task = QueryUtils.taskQuery().executionId(ex.getId()).singleResult(); + if (task != null) { + List<Comment> taskComments = taskService.getTaskComments(task.getId()); + if (CollUtil.isEmpty(taskComments)) { + taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.PASS.getStatus(), "瓒呮椂鑷姩瀹℃壒!"); + } + } } } } -- Gitblit v1.9.3