From 9b540b646aa7171d3d3ba707457b86445dc71dc7 Mon Sep 17 00:00:00 2001 From: liyj <1003249715@qq.com> Date: Mon, 09 Sep 2024 20:04:23 +0800 Subject: [PATCH] 1、事件流转相关接口优化 --- dyh-service/dyh-mediate/src/main/java/cn/huge/module/flow/service/FlowInfoService.java | 144 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 144 insertions(+), 0 deletions(-) diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/flow/service/FlowInfoService.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/flow/service/FlowInfoService.java index 7cb9355..4ea5a47 100644 --- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/flow/service/FlowInfoService.java +++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/flow/service/FlowInfoService.java @@ -2,11 +2,24 @@ import cn.huge.base.common.exception.ServiceException; import cn.huge.base.common.utils.DateUtils; +import cn.huge.base.common.utils.FieldUtils; import cn.huge.base.common.utils.IdUtils; +import cn.huge.base.common.utils.ObjectUtils; import cn.huge.module.client.api.impl.UtilsClientImpl; import cn.huge.module.flow.dao.mapper.FlowInfoMapper; import cn.huge.module.flow.domain.po.FlowInfo; +import cn.huge.module.flow.domain.po.FlowNode; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Maps; +import org.apache.commons.collections.CollectionUtils; +import org.flowable.engine.HistoryService; +import org.flowable.engine.RepositoryService; +import org.flowable.engine.RuntimeService; +import org.flowable.engine.TaskService; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.task.api.Task; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; @@ -38,7 +51,18 @@ private FlowInfoMapper mapper; @Autowired + private FlowNodeService flowNodeService; + @Autowired private UtilsClientImpl utilsClient; + + @Autowired + private RuntimeService runtimeService; + @Autowired + private TaskService taskService; + @Autowired + private HistoryService historyService; + @Autowired + private RepositoryService repositoryService; /** * 更新对象 @@ -130,4 +154,124 @@ } } + /** + * 封装任务节点 + * @param flowableId 流程定义编号 + * @param task 流程任务 + * @return FlowNodeBaseDTO + */ + public FlowNode getFlowNode(String flowableId, Task task){ + // 封装任务节点 + FlowNode flowNode = null; + if (ObjectUtils.isNotEmpty(task)) { + flowNode = flowNodeService.listByFlowAndNode(flowableId, task.getTaskDefinitionKey()); + if (ObjectUtils.isNotEmpty(flowNode)) { + flowNode.setProcessInstanceId(task.getProcessInstanceId()); + flowNode.setProcessTaskId(task.getId()); + } + } + return flowNode; + } + + /** + * 单节点业务操作-根据流程编号启动流程 + * @param flowableId 流程定义编号 + * @param businessId 业务编号 + * @return FlowNodeBaseDTO + */ + public FlowNode startFlow(String flowableId, String businessId) { + try { + // 启动任务 + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(flowableId, businessId); + Task nextTask = getTaskByProcdefId(processInstance.getId()); + // 封装任务节点 + FlowNode flowNode = this.getFlowNode(flowableId, nextTask); + return flowNode; + }catch (Exception e){ + log.error("service方法[FlowInfoService.startFlow]调用异常:"+e, e); + throw new ServiceException("FlowInfoService.startFlow", e); + } + } + + /** + * 单节点业务操作-通过当前任务编号完成当前任务 + * @param flowableId 流程定义编号 + * @param taskId 任务编号 + * @param operation 操作调解 + * @param handlerUserId 任务执行者 + * @return FlowNodeBaseDTO + */ + public FlowNode completeTask(String flowableId, String taskId, String operation, String handlerUserId) { + try{ + Task task = findTaskById(taskId); + task.setAssignee(handlerUserId); + Map flowParam = Maps.newHashMap(); + flowParam.put("operation", operation); + taskService.complete(task.getId(), flowParam); + Task nextTask = getTaskByProcdefId(task.getProcessInstanceId()); + FlowNode flowNode = this.getFlowNode(flowableId, nextTask); + return flowNode; + }catch (Exception e){ + log.error("service方法[FlowInfoService.completeByTaskId]调用异常:"+e, e); + throw new ServiceException("FlowInfoService.completeByTaskId", e); + } + } + + /** + * 单节点业务操作-任务指定人员 + * @param taskId 任务编号 + * @param handlerUserId 任务候选人 + */ + public void appointTaskOwner(String taskId, String handlerUserId) { + try{ + Task task = findTaskById(taskId); + taskService.addCandidateUser(task.getId(), handlerUserId); + }catch (Exception e){ + log.error("service方法[FlowInfoService.appointTaskOwner]调用异常:"+e, e); + throw new ServiceException("FlowInfoService.appointTaskOwner", e); + } + } + + /** + * 根据流程实例Id获取任务 + * @param processInstanceId 流程实例Id + * @return Task + */ + public Task getTaskByProcdefId(String processInstanceId){ + Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult(); + return task; + } + + /** + * 根据任务ID,获取任务 + * @param taskId 任务ID + * @return Task + */ + public Task findTaskById(String taskId) { + return taskService.createTaskQuery().taskId(taskId).singleResult(); + } + + /** + * 根据流程实例Id获取当前所有任务 + * @param processInstanceId 流程示例编号 + * @return List<Task> + */ + public List<Task> getTaskByProcdefIds(String processInstanceId){ + List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstanceId).list(); + return tasks; + } + + /** + * 结束流程 + * @param processInstanceId 流程示例编号 + */ + public void endFlow(String processInstanceId) { + try{ + runtimeService.deleteProcessInstance(processInstanceId,""); + }catch (Exception e){ + log.error("service方法[FlowInfoService.endFlow]调用异常:"+e, e); + throw new ServiceException("FlowInfoService.endFlow", e); + } + } + } -- Gitblit v1.8.0