package com.budwk.app; import cn.hutool.core.lang.Dict; import com.budwk.app.flow.constant.FlowConst; import com.budwk.app.flow.engine.FlowEngine; import com.budwk.app.flow.engine.model.*; import com.budwk.app.flow.entity.ProcessTask; import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; import org.junit.Test; import org.junit.runner.RunWith; import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.boot.test.junit4.NbJUnit4Runner; import org.nutz.ioc.aop.Aop; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import java.util.List; import java.util.Set; @IocBean @RunWith(NbJUnit4Runner.class) public class FlowTest { @Inject private FlowEngine flowEngine; @Test @Aop(TransAop.READ_COMMITTED) public void startInstance() { String operator = "17a7f8ad3ee947b4a26175049a9c253d"; //ProcessInstance instance = flowEngine.startProcessInstanceByKey("JDHTA", "1", "17a7f8ad3ee947b4a26175049a9c253d", Dict.create()); //System.out.println(instance); Long instanceId = 108L; // 完成提交任务 //List applyTasks = flowEngine.executeProcessTask(199L, operator, Dict.of(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode())); //System.out.println("发起任务:" + applyTasks.size()); // 完成邀请复疑人任务 同时邀请复疑人 // Dict dict2 = Dict.of(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.AGREE.getCode()); // dict2.set(FlowConst.NEXT_NODE_OPERATOR, List.of("00198c31ee094466845979ab8dabf83b", "00266dbf9e014376ab76072851b1a8ac")); // List inviteTasks = flowEngine.executeProcessTask(200L, operator, dict2); // System.out.println("邀请任务:" + inviteTasks.size()); // 完成第一个复疑人任务 List inviteTasks = flowEngine.executeProcessTask(215L, "00266dbf9e014376ab76072851b1a8ac", Dict.of(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.COUNTERSIGN_DISAGREE.getCode())); // 完成第二个复疑人任务 不同意 // List inviteTasks = flowEngine.executeProcessTask(202L, "00266dbf9e014376ab76072851b1a8ac", // Dict.of(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.COUNTERSIGN_DISAGREE.getCode())); } public static void findForkTaskNames(NodeModel node, StringBuilder buffer, Set visitedNodes) { if (node == null) return; // 防止循环引用 String nodeId = node.getName(); if (visitedNodes.contains(nodeId)) return; visitedNodes.add(nodeId); // 如果遇到fork节点,停止递归 if (node instanceof ForkModel) return; List inputs = node.getInputs(); for (TransitionModel tm : inputs) { NodeModel source = tm.getSource(); if (source instanceof TaskModel) { String taskName = source.getName(); // 避免重复添加 if (!buffer.toString().contains(taskName)) { if (buffer.length() > 0) buffer.append(","); buffer.append(taskName); } } // 递归处理上游节点 findForkTaskNames(source, buffer, visitedNodes); } } @Test public void testForkJoin() { JoinModel joinModel = new JoinModel(); } }