From 763d5aa3d2620cb000de209d30e3475989f732e3 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: Thu, 4 Jan 2024 21:03:17 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E8=B0=83=E6=95=B4=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E5=8A=9E=E7=90=86=E4=BC=98=E5=8C=96=E6=92=A4=E9=94=80=EF=BC=8C?= =?UTF-8?q?=E9=A9=B3=E5=9B=9E=EF=BC=8C=E8=8D=89=E7=A8=BF=E7=AD=89=E5=8A=A8?= =?UTF-8?q?=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ActTaskController.java | 2 +- .../strategy/FlowProcessEventHandler.java | 2 +- .../service/impl/ActTaskServiceImpl.java | 57 ++++++++----------- .../dromara/workflow/utils/WorkflowUtils.java | 13 ++++- 4 files changed, 37 insertions(+), 37 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java index 0ceadddc6..6fd8f10f5 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java @@ -209,7 +209,7 @@ public class ActTaskController extends BaseController { */ @GetMapping("/getBusinessStatus/{taskId}") public R getBusinessStatus(@PathVariable String taskId) { - return R.ok("操作成功", WorkflowUtils.getBusinessStatus(taskId)); + return R.ok("操作成功", WorkflowUtils.getBusinessStatusByTaskId(taskId)); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowProcessEventHandler.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowProcessEventHandler.java index a9ce28e57..a9015d122 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowProcessEventHandler.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/strategy/FlowProcessEventHandler.java @@ -10,7 +10,7 @@ package org.dromara.workflow.flowable.strategy; public interface FlowProcessEventHandler { /** - * 执行办理任务监听 + * 执行办理任务监听 当状态为草稿,驳回,撤销时说明流程为申请人节点提交办理 * * @param processInstanceId 流程实例id * @param status 状态 diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java index e35fcfad5..91bacba67 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java @@ -77,8 +77,7 @@ public class ActTaskServiceImpl implements IActTaskService { throw new ServiceException("启动工作流时必须包含业务ID"); } // 判断当前业务是否启动过流程 - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceBusinessKey(startProcessBo.getBusinessKey()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceBusinessKey(startProcessBo.getBusinessKey()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); if (ObjectUtil.isNotEmpty(historicProcessInstance)) { BusinessStatusEnum.checkStartStatus(historicProcessInstance.getBusinessStatus()); } @@ -130,8 +129,7 @@ public class ActTaskServiceImpl implements IActTaskService { List roles = LoginHelper.getLoginUser().getRoles(); String userId = String.valueOf(LoginHelper.getUserId()); TaskQuery taskQuery = taskService.createTaskQuery(); - taskQuery.taskId(completeTaskBo.getTaskId()) - .taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(userId); + taskQuery.taskId(completeTaskBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(userId); if (CollUtil.isNotEmpty(roles)) { List groupIds = StreamUtils.toList(roles, e -> String.valueOf(e.getRoleId())); taskQuery.taskCandidateGroupIn(groupIds); @@ -166,11 +164,18 @@ public class ActTaskServiceImpl implements IActTaskService { } else { taskService.complete(completeTaskBo.getTaskId()); } + FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey()); + + String businessStatus = WorkflowUtils.getBusinessStatus(task.getProcessInstanceId()); + if (BusinessStatusEnum.DRAFT.getStatus().equals(businessStatus) || BusinessStatusEnum.BACK.getStatus().equals(businessStatus) || BusinessStatusEnum.CANCEL.getStatus().equals(businessStatus)) { + if (processHandler != null) { + processHandler.handleProcess(processInstance.getId(), businessStatus); + } + } List list = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(task.getProcessInstanceId()).list(); if (CollUtil.isEmpty(list)) { UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus()); managementService.executeCommand(updateBusinessStatusCmd); - FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey()); if (processHandler != null) { processHandler.handleProcess(processInstance.getId(), BusinessStatusEnum.FINISH.getStatus()); } @@ -297,8 +302,7 @@ public class ActTaskServiceImpl implements IActTaskService { @Override public TableDataInfo getTaskFinishByPage(TaskBo taskBo) { String userId = String.valueOf(LoginHelper.getUserId()); - HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery() - .taskAssignee(userId).taskTenantId(TenantHelper.getTenantId()).finished().orderByHistoricTaskInstanceStartTime().desc(); + HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery().taskAssignee(userId).taskTenantId(TenantHelper.getTenantId()).finished().orderByHistoricTaskInstanceStartTime().desc(); if (StringUtils.isNotBlank(taskBo.getName())) { query.taskNameLike("%" + taskBo.getName() + "%"); } @@ -339,8 +343,7 @@ public class ActTaskServiceImpl implements IActTaskService { */ @Override public TableDataInfo getAllTaskFinishByPage(TaskBo taskBo) { - HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery() - .taskTenantId(TenantHelper.getTenantId()).finished().orderByHistoricTaskInstanceStartTime().desc(); + HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery().taskTenantId(TenantHelper.getTenantId()).finished().orderByHistoricTaskInstanceStartTime().desc(); if (StringUtils.isNotBlank(taskBo.getName())) { query.taskNameLike("%" + taskBo.getName() + "%"); } @@ -382,9 +385,7 @@ public class ActTaskServiceImpl implements IActTaskService { @Override @Transactional(rollbackFor = Exception.class) public boolean delegateTask(DelegateBo delegateBo) { - TaskEntity task = (TaskEntity) taskService.createTaskQuery() - .taskTenantId(TenantHelper.getTenantId()).taskId(delegateBo.getTaskId()) - .taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); + TaskEntity task = (TaskEntity) taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).taskId(delegateBo.getTaskId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); if (ObjectUtil.isEmpty(task)) { throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); } @@ -413,8 +414,7 @@ public class ActTaskServiceImpl implements IActTaskService { @Override @Transactional(rollbackFor = Exception.class) public boolean terminationTask(TerminationBo terminationBo) { - Task task = taskService.createTaskQuery() - .taskTenantId(TenantHelper.getTenantId()).taskId(terminationBo.getTaskId()).singleResult(); + Task task = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).taskId(terminationBo.getTaskId()).singleResult(); if (ObjectUtil.isEmpty(task)) { throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); @@ -422,8 +422,7 @@ public class ActTaskServiceImpl implements IActTaskService { if (task.isSuspended()) { throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); } - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceBusinessKey(task.getProcessInstanceId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceBusinessKey(task.getProcessInstanceId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); if (ObjectUtil.isNotEmpty(historicProcessInstance)) { BusinessStatusEnum.checkStatus(historicProcessInstance.getBusinessStatus()); } @@ -434,8 +433,7 @@ public class ActTaskServiceImpl implements IActTaskService { terminationBo.setComment(LoginHelper.getLoginUser().getNickname() + "终止了申请:" + terminationBo.getComment()); } taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.TERMINATION.getStatus(), terminationBo.getComment()); - List list = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()) - .processInstanceId(task.getProcessInstanceId()).list(); + List list = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(task.getProcessInstanceId()).list(); if (CollectionUtil.isNotEmpty(list)) { List subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId())); if (CollectionUtil.isNotEmpty(subTasks)) { @@ -461,8 +459,7 @@ public class ActTaskServiceImpl implements IActTaskService { */ @Override public boolean transferTask(TransmitBo transmitBo) { - Task task = taskService.createTaskQuery().taskId(transmitBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()) - .taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); + Task task = taskService.createTaskQuery().taskId(transmitBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); if (ObjectUtil.isEmpty(task)) { throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); } @@ -471,8 +468,7 @@ public class ActTaskServiceImpl implements IActTaskService { } try { TaskEntity newTask = WorkflowUtils.createNewTask(task); - taskService.addComment(newTask.getId(), task.getProcessInstanceId(), TaskStatusEnum.TRANSFER.getStatus(), - StringUtils.isNotBlank(transmitBo.getComment()) ? transmitBo.getComment() : LoginHelper.getUsername() + "转办了任务"); + taskService.addComment(newTask.getId(), task.getProcessInstanceId(), TaskStatusEnum.TRANSFER.getStatus(), StringUtils.isNotBlank(transmitBo.getComment()) ? transmitBo.getComment() : LoginHelper.getUsername() + "转办了任务"); taskService.complete(newTask.getId()); taskService.setAssignee(task.getId(), transmitBo.getUserId()); return true; @@ -489,8 +485,7 @@ public class ActTaskServiceImpl implements IActTaskService { */ @Override public boolean addMultiInstanceExecution(AddMultiBo addMultiBo) { - Task task = taskService.createTaskQuery().taskId(addMultiBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()) - .taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); + Task task = taskService.createTaskQuery().taskId(addMultiBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); if (ObjectUtil.isEmpty(task)) { throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); } @@ -533,8 +528,7 @@ public class ActTaskServiceImpl implements IActTaskService { */ @Override public boolean deleteMultiInstanceExecution(DeleteMultiBo deleteMultiBo) { - Task task = taskService.createTaskQuery().taskId(deleteMultiBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()) - .taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); + Task task = taskService.createTaskQuery().taskId(deleteMultiBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); if (ObjectUtil.isEmpty(task)) { throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); } @@ -580,8 +574,7 @@ public class ActTaskServiceImpl implements IActTaskService { @Override @Transactional(rollbackFor = Exception.class) public String backProcess(BackProcessBo backProcessBo) { - Task task = taskService.createTaskQuery().taskId(backProcessBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()) - .taskAssignee(String.valueOf(LoginHelper.getUserId())).singleResult(); + Task task = taskService.createTaskQuery().taskId(backProcessBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskAssignee(String.valueOf(LoginHelper.getUserId())).singleResult(); if (ObjectUtil.isEmpty(task)) { throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); } @@ -604,14 +597,10 @@ public class ActTaskServiceImpl implements IActTaskService { taskService.addComment(task.getId(), processInstanceId, TaskStatusEnum.BACK.getStatus(), StringUtils.isNotBlank(backProcessBo.getMessage()) ? backProcessBo.getMessage() : "退回"); if (taskList.size() > 1) { //当前多个任务驳回到单个节点 - runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId) - .moveActivityIdsToSingleActivityId(taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList()), backTaskDefinitionKey) - .changeState(); + runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId).moveActivityIdsToSingleActivityId(taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList()), backTaskDefinitionKey).changeState(); } else { //当前单个节点驳回单个节点 - runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId) - .moveActivityIdTo(task.getTaskDefinitionKey(), backTaskDefinitionKey) - .changeState(); + runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId).moveActivityIdTo(task.getTaskDefinitionKey(), backTaskDefinitionKey).changeState(); } List list = taskService.createTaskQuery().processInstanceId(processInstanceId).taskTenantId(TenantHelper.getTenantId()).list(); for (Task t : list) { diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java index 38a81dcc9..d73e852ff 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java @@ -297,13 +297,24 @@ public class WorkflowUtils { * * @param taskId 任务id */ - public static String getBusinessStatus(String taskId) { + public static String getBusinessStatusByTaskId(String taskId) { HistoricTaskInstance historicTaskInstance = PROCESS_ENGINE.getHistoryService().createHistoricTaskInstanceQuery().taskId(taskId).taskTenantId(TenantHelper.getTenantId()).singleResult(); HistoricProcessInstance historicProcessInstance = PROCESS_ENGINE.getHistoryService().createHistoricProcessInstanceQuery() .processInstanceId(historicTaskInstance.getProcessInstanceId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); return historicProcessInstance.getBusinessStatus(); } + /** + * 获取当前流程状态 + * + * @param processInstanceId 流程实例id + */ + public static String getBusinessStatus(String processInstanceId) { + HistoricProcessInstance historicProcessInstance = PROCESS_ENGINE.getHistoryService().createHistoricProcessInstanceQuery() + .processInstanceId(processInstanceId).processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); + return historicProcessInstance.getBusinessStatus(); + } + /** * 设置流程实例对象 *