
cn.schoolwow.quickflow.service.quickFlow.execute.QuickFlowExecuteOperationImpl Maven / Gradle / Ivy
package cn.schoolwow.quickflow.service.quickFlow.execute;
import cn.schoolwow.quickflow.QuickFlow;
import cn.schoolwow.quickflow.QuickFlowBuilder;
import cn.schoolwow.quickflow.QuickFlowExecutor;
import cn.schoolwow.quickflow.domain.*;
import cn.schoolwow.quickflow.dto.FlowContextDataRange;
import cn.schoolwow.quickflow.flow.BusinessFlow;
import cn.schoolwow.quickflow.flow.CompositeBusinessFlow;
import cn.schoolwow.quickflow.listener.SingleFlowListener;
import cn.schoolwow.quickflow.listener.TryCatchFinallyHandler;
import cn.schoolwow.quickflow.util.QuickFlowConfigUtil;
import cn.schoolwow.quickflow.util.QuickFlowUtil;
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;
public class QuickFlowExecuteOperationImpl implements QuickFlowExecuteOperation {
/**流程配置信息*/
private FlowConfig flowConfig;
public QuickFlowExecuteOperationImpl(FlowConfig flowConfig) {
this.flowConfig = flowConfig;
}
/**
* 构建流程
* */
@Override
public QuickFlowExecutor startFlow(String name) {
if(null==name||name.isEmpty()){
throw new IllegalArgumentException("请指定主流程名称!");
}
FlowExecutorConfig flowExecutorConfig = new FlowExecutorConfig();
flowExecutorConfig.name = name;
flowExecutorConfig.flowContext = QuickFlowUtil.getFlowContextInvocationHandler(flowExecutorConfig);
flowExecutorConfig.currentCompositeFlowDataMap = new ConcurrentHashMap<>();
if(null!=flowExecutorConfig.parentFlowExecutorConfig){
flowExecutorConfig.currentCompositeFlowDataMap.putAll(flowExecutorConfig.parentFlowExecutorConfig.currentCompositeFlowDataMap);
}
FlowExecutorRootConfig flowExecutorRootConfig = new FlowExecutorRootConfig();
flowExecutorRootConfig.threadLocalDataMap.set(new HashMap<>());
flowExecutorRootConfig.flowConfig = flowConfig;
flowExecutorRootConfig.quickFlow = flowConfig.quickFlow;
flowExecutorConfig.flowExecutorRootConfig = flowExecutorRootConfig;
return QuickFlowUtil.getQuickFlowExecutorInvocationHandler(flowExecutorConfig);
}
/**
* 构建流程
* */
@Override
public QuickFlowExecutor startFlow(BusinessFlow businessFlow) {
return startFlow(businessFlow.name())
.next(businessFlow);
}
/**
* 构建流程
* */
@Override
public QuickFlowExecutor startFlow(FlowExecutorOption flowExecutorOption) {
if(null==flowConfig.flowConfigHandlerContext.flowMappingHandler){
throw new IllegalArgumentException("请先指定流程名称实例映射处理器!");
}
if(null==flowExecutorOption.name||flowExecutorOption.name.isEmpty()){
throw new IllegalArgumentException("请先指定流程名称!");
}
//首先查找复合流程
{
CompositeBusinessFlow compositeBusinessFlow = flowConfig.flowConfigHandlerContext.flowMappingHandler.getCompositeBusinessFlow(flowExecutorOption.name);
if(null!=compositeBusinessFlow){
return startFlow(compositeBusinessFlow)
.putFlowContextDataMap(flowExecutorOption.requestData, FlowContextDataRange.Flow);
}
}
//其次查找单个流程
{
BusinessFlow businessFlow = flowConfig.flowConfigHandlerContext.flowMappingHandler.getFlow(flowExecutorOption.name);
if(null!=businessFlow){
return startFlow(businessFlow)
.putFlowContextDataMap(flowExecutorOption.requestData, FlowContextDataRange.Flow);
}
}
//剩下为自定义流程
if(null==flowExecutorOption.flowArray||flowExecutorOption.flowArray.isEmpty()){
throw new IllegalArgumentException("请指定流程列表!");
}
QuickFlowExecutor quickFlowExecutor = startFlow(flowExecutorOption.name)
.putFlowContextDataMap(flowExecutorOption.requestData, FlowContextDataRange.Flow);
for(int i=0;i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy