diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/IFlowTaskService.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/IFlowTaskService.java index 233d6d08..62527e8e 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/IFlowTaskService.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/IFlowTaskService.java @@ -20,6 +20,7 @@ import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo; import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.flowable.bpmn.model.UserTask; import org.flowable.engine.repository.ProcessDefinition; import org.flowable.task.api.Task; @@ -38,7 +39,18 @@ public interface IFlowTaskService { Category viewForm(String processId, HttpServletRequest request); Integer complete(FlowApprove approve, UserToken userToken, List formIds); - + /** + * 获取下一个节点 + * @param processInstanceId + * @return + */ + public UserTask getNextTasks(String processInstanceId ); + /** + * 获取下一个节点 + * @param task + * @return + */ + public UserTask getNextTasks(Task task); /** * 获取当前任务的可回退的流程集合 diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowInstanceServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowInstanceServiceImpl.java index 27a2d465..1c6ba1d6 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowInstanceServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowInstanceServiceImpl.java @@ -17,6 +17,8 @@ import cn.jyjz.xiaoyao.common.base.util.StringUtils; import cn.jyjz.xiaoyao.common.base.vo.UserToken; import cn.jyjz.xiaoyao.oa.from.service.UserViewapproeService; import lombok.extern.slf4j.Slf4j; +import org.flowable.bpmn.model.MultiInstanceLoopCharacteristics; +import org.flowable.bpmn.model.UserTask; import org.flowable.engine.RepositoryService; import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.runtime.ProcessInstance; @@ -29,6 +31,7 @@ import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; @Slf4j @Service @@ -84,6 +87,19 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow try { variables.put("businessKey", businessKey); + + //获取下一个节点 + UserTask userTask = this.flowTaskService.getNextTasks(procDefId); + if(null != userTask){ + MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); + // 会签节点 + if (Objects.nonNull(multiInstance)) { + if(null != userTask.getCandidateUsers() && userTask.getCandidateUsers().size() > 1){ + variables.put("persons",userTask.getCandidateUsers()); + } + } + } + processInstance = runtimeService.startProcessInstanceById(procDefId, businessKey, variables); if (null != iFormCustomService) { @@ -156,6 +172,19 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow try { variables.put("businessKey", businessKey); + + //获取下一个节点 + UserTask userTask = this.flowTaskService.getNextTasks(procDefId); + if(null != userTask){ + MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); + // 会签节点 + if (Objects.nonNull(multiInstance)) { + if(null != userTask.getCandidateUsers() && userTask.getCandidateUsers().size() > 1){ + variables.put("persons",userTask.getCandidateUsers()); + } + } + } + processInstance = runtimeService.startProcessInstanceById(procDefId, businessKey, variables); if (null != iFormCustomService) { diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowTaskServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowTaskServiceImpl.java index dd43d664..10ac05dd 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowTaskServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowTaskServiceImpl.java @@ -431,7 +431,35 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask } return result; } - + + + public UserTask getNextTasks(String processDefinitionId ){ + //流程实例id + //String processInstanceId = "5b945750-81db-11e9-a576-1a73f8e23adc"; + + // 获取流程定义 + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() + .processDefinitionId(processDefinitionId) + .singleResult(); + + // 获取BpmnModel + BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId()); + + // 获取所有的FlowElement,包括开始事件、结束事件、用户任务等 + List flowElements = (List) bpmnModel.getMainProcess().getFlowElements(); + + // 遍历FlowElement + for (FlowElement targetFlowElement : flowElements) { + //用户任务 + if (targetFlowElement instanceof UserTask) { + UserTask userTask = (UserTask) targetFlowElement; + return userTask; + } else if (targetFlowElement instanceof ExclusiveGateway) { + setExclusiveGateway(targetFlowElement); + } + } + return null; + } public UserTask getNextTasks(Task task){