Files
zhgh_ncu/src/test/java/com/budwk/app/FlowTest.java
T
2025-09-29 14:07:19 +08:00

95 lines
3.4 KiB
Java

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<ProcessTask> 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<ProcessTask> inviteTasks = flowEngine.executeProcessTask(200L, operator, dict2);
// System.out.println("邀请任务:" + inviteTasks.size());
// 完成第一个复疑人任务
List<ProcessTask> inviteTasks = flowEngine.executeProcessTask(215L, "00266dbf9e014376ab76072851b1a8ac",
Dict.of(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.COUNTERSIGN_DISAGREE.getCode()));
// 完成第二个复疑人任务 不同意
// List<ProcessTask> inviteTasks = flowEngine.executeProcessTask(202L, "00266dbf9e014376ab76072851b1a8ac",
// Dict.of(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.COUNTERSIGN_DISAGREE.getCode()));
}
public static void findForkTaskNames(NodeModel node, StringBuilder buffer, Set<String> visitedNodes) {
if (node == null) return;
// 防止循环引用
String nodeId = node.getName();
if (visitedNodes.contains(nodeId)) return;
visitedNodes.add(nodeId);
// 如果遇到fork节点,停止递归
if (node instanceof ForkModel) return;
List<TransitionModel> 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();
}
}