flow
流程编排引擎
核心业务层状态机驱动的流程管理
节点依赖关系 + 并行执行 + 回退支持通过维护节点状态图和依赖关系图,实现灵活的流程编排
状态机驱动的流程管理
节点依赖关系 + 并行执行 + 回退支持通过维护节点状态图和依赖关系图,实现灵活的流程编排
研发流程通常包含多个阶段(需求评审、开发、测试、发布),每个阶段有不同的负责人和完成条件。如何设计一个灵活的流程引擎,支持自定义流程模板、节点依赖关系、并行执行、回退等复杂场景?
流程引擎核心 - 节点状态流转逻辑
@Service
public class FlowEngineService {
/**
* 完成节点
* 返回当前流程最新状态
*/
public void complete(List<FlowTemplateSequence> sequenceList,
String completeNodeCode,
List<String> hideNodeCodeList,
Map<String,FlowNodeStatus> currentNodeStatusMap,
List<FlowInstanceNode> flowInstanceNodeList){
// 构建父子节点关系图
Map<String,List<String>> childNodeCodeMap = buildChildNodeCodeMap(sequenceList);
Map<String,List<String>> parentNodeCodeMap = buildParentNodeCodeMap(sequenceList);
// 根据隐藏节点重新计算父子节点关系
rebuildChildAndParentMapForHide(parentNodeCodeMap,childNodeCodeMap,hideNodeCodeList);
// 递归更新节点状态
complete(currentNodeStatusMap,completeNodeCode,childNodeCodeMap,flowInstanceNodeMap,sequenceList);
}
}节点状态枚举 - 三态模型
@RestEndpoint(name = "流程节点状态")
public enum FlowNodeStatus implements BaseEnum<String> {
NOT_START("未开始"),
DOING("进行中"),
COMPLETED("已完成");
private String text;
FlowNodeStatus(String text) {
this.text = text;
init(this.name(), text);
}
}