feat:任务执行流程

This commit is contained in:
2025-12-01 13:45:39 +08:00
parent aef49e36f6
commit 3c157d4b76
43 changed files with 200 additions and 97 deletions

View File

@@ -1,41 +0,0 @@
package com.sdm.flowable.config.executeConfig;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import lombok.Data;
/**
* 执行配置父类带Jackson子类自动识别注解
*/
@Data
// 核心注解:指定类型识别规则
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME, // 用「名称」识别子类
include = JsonTypeInfo.As.PROPERTY, // 类型信息作为JSON的一个属性即executeType字段
property = "executeType", // 类型字段名必须和JSON中的executeType一致
visible = true, // 必须为true否则JSON中将不包含executeType字段
defaultImpl = DefaultExecuteConfig.class // 默认实现当executeType不匹配时用这个类接收避免报错
)
// 核心注解指定「executeType值」和「子类」的映射关系
@JsonSubTypes({
@JsonSubTypes.Type(value = CloudAppExecuteConfig.class, name = "cloudApp"),
@JsonSubTypes.Type(value = LocalAppExecuteConfig.class, name = "localApp"),
@JsonSubTypes.Type(value = HPCExecuteConfig.class, name = "HPC"),
@JsonSubTypes.Type(value = HttpExecuteConfig.class, name = "http"),
@JsonSubTypes.Type(value = DataProcessExecuteConfig.class, name = "dataProcess"),
@JsonSubTypes.Type(value = ExportWordScriptExecuteConfig.class, name = "exportWordScript")
})
public abstract class BaseExecuteConfig {
// 公共字段executeType子类无需重复定义父类统一维护
private String executeType;
// 用于标记是否异步回调,处理长耗时任务,默认是false 表示当前执行节点是同步执行
private boolean asyncCallback = false;
// 用于标记回调节点ID当asyncCallback为true时表示当前执行节点是异步执行执行完成后需要回调的节点ID,一般就是receiveTaskId
private String callbackNodeId;
// 是否需要等待用户手动提交执行,
// 默认是false,表示不需要等待用户手动提交执行
// true: 流程到此停止,创建人工输入任务,等待用户点击执行
private boolean waitUser = false;
}

View File

@@ -1,4 +0,0 @@
package com.sdm.flowable.config.executeConfig;
public class CloudAppExecuteConfig extends BaseExecuteConfig {
}

View File

@@ -1,11 +0,0 @@
package com.sdm.flowable.config.executeConfig;
import lombok.Data;
/**
* DATA_PROCESS类型执行配置executeType=dataProcess
*/
@Data
public class DataProcessExecuteConfig extends BaseExecuteConfig {
private String processRule; // 数据处理规则如mergeAndFilter
}

View File

@@ -1,11 +0,0 @@
package com.sdm.flowable.config.executeConfig;
import lombok.Data;
/**
* 默认执行配置executeType不匹配时使用
*/
@Data
public class DefaultExecuteConfig extends BaseExecuteConfig {
// 空实现,仅用于兼容未知执行类型
}

View File

@@ -1,4 +0,0 @@
package com.sdm.flowable.config.executeConfig;
public class ExportWordScriptExecuteConfig extends BaseExecuteConfig {
}

View File

@@ -1,4 +0,0 @@
package com.sdm.flowable.config.executeConfig;
public class HPCExecuteConfig extends BaseExecuteConfig {
}

View File

@@ -1,15 +0,0 @@
package com.sdm.flowable.config.executeConfig;
import lombok.Data;
import java.util.Map;
/**
* HTTP类型执行配置executeType=http
*/
@Data
public class HttpExecuteConfig extends BaseExecuteConfig {
private String httpMethod; // 请求方法GET/POST
private String httpUrl; // 请求地址
private Map<String, String> headers; // 请求头(键值对)
}

View File

@@ -1,4 +0,0 @@
package com.sdm.flowable.config.executeConfig;
public class LocalAppExecuteConfig extends BaseExecuteConfig {
}

View File

@@ -5,16 +5,17 @@ import com.sdm.common.common.SdmResponse;
import com.sdm.common.feign.inter.flowable.IFlowableFeignClient;
import com.sdm.flowable.delegate.handler.HpcHandler;
import com.sdm.flowable.dto.NodeStructureInfo;
import com.sdm.flowable.dto.ProcessDefinitionDTO;
import com.sdm.common.entity.flowable.dto.ProcessDefinitionDTO;
import com.sdm.flowable.dto.req.AsyncCallbackRequest;
import com.sdm.flowable.dto.req.CompleteTaskReq;
import com.sdm.flowable.dto.req.RetryRequest;
import com.sdm.common.entity.resp.flowable.ProcessInstanceResp;
import com.sdm.flowable.dto.resp.DeployFlowableResp;
import com.sdm.common.entity.resp.flowable.DeployFlowableResp;
import com.sdm.flowable.dto.resp.ProcessInstanceDetailResponse;
import com.sdm.flowable.process.ProcessService;
import com.sdm.flowable.service.IProcessNodeParamService;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.validation.ValidationError;
import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -1,8 +1,7 @@
package com.sdm.flowable.delegate;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sdm.flowable.config.executeConfig.BaseExecuteConfig;
import com.sdm.common.entity.flowable.executeConfig.BaseExecuteConfig;
import com.sdm.flowable.constants.FlowableConfig;
import com.sdm.flowable.delegate.handler.ExecutionHandler;
import com.sdm.flowable.dto.req.AsyncCallbackRequest;
@@ -13,7 +12,6 @@ import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.flowable.engine.runtime.Execution;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

View File

@@ -1,6 +1,6 @@
package com.sdm.flowable.delegate.handler;
import com.sdm.flowable.config.executeConfig.BaseExecuteConfig;
import com.sdm.common.entity.flowable.executeConfig.BaseExecuteConfig;
import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component;

View File

@@ -1,6 +1,6 @@
package com.sdm.flowable.delegate.handler;
import com.sdm.flowable.config.executeConfig.BaseExecuteConfig;
import com.sdm.common.entity.flowable.executeConfig.BaseExecuteConfig;
import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component;

View File

@@ -1,6 +1,6 @@
package com.sdm.flowable.delegate.handler;
import com.sdm.flowable.config.executeConfig.BaseExecuteConfig;
import com.sdm.common.entity.flowable.executeConfig.BaseExecuteConfig;
import org.flowable.engine.delegate.DelegateExecution;
import java.util.Map;

View File

@@ -3,7 +3,7 @@ package com.sdm.flowable.delegate.handler;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.common.feign.inter.data.IDataFeignClient;
import com.sdm.common.utils.RandomUtil;
import com.sdm.flowable.config.executeConfig.BaseExecuteConfig;
import com.sdm.common.entity.flowable.executeConfig.BaseExecuteConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.flowable.engine.delegate.DelegateExecution;

View File

@@ -3,7 +3,7 @@ package com.sdm.flowable.delegate.handler;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.pbs.SubmitHpcTaskRemoteReq;
import com.sdm.common.feign.inter.pbs.ITaskFeignClient;
import com.sdm.flowable.config.executeConfig.BaseExecuteConfig;
import com.sdm.common.entity.flowable.executeConfig.BaseExecuteConfig;
import com.sdm.flowable.service.IAsyncTaskRecordService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

View File

@@ -1,6 +1,6 @@
package com.sdm.flowable.delegate.handler;
import com.sdm.flowable.config.executeConfig.BaseExecuteConfig;
import com.sdm.common.entity.flowable.executeConfig.BaseExecuteConfig;
import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component;

View File

@@ -1,6 +1,6 @@
package com.sdm.flowable.delegate.handler;
import com.sdm.flowable.config.executeConfig.BaseExecuteConfig;
import com.sdm.common.entity.flowable.executeConfig.BaseExecuteConfig;
import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component;

View File

@@ -1,15 +0,0 @@
package com.sdm.flowable.dto;
import com.sdm.flowable.config.executeConfig.BaseExecuteConfig;
import lombok.Data;
/**
* 扩展配置DTOserviceTask等需要执行配置的节点使用
*/
@Data
public class ExtensionElementsDTO {
/**
* 执行配置核心字段对应executeConfig
*/
private BaseExecuteConfig executeConfig;
}

View File

@@ -1,34 +0,0 @@
package com.sdm.flowable.dto;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import java.util.List;
/**
* 流元素DTO统一接收节点和连线通过type区分
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true) // 忽略不同类型的多余字段(关键)
public class FlowElementDTO {
// ------------------------------ 所有流元素通用字段 ------------------------------
/** 元素唯一ID流程内不重复 */
private String id;
/** 元素类型startEvent/serviceTask/userTask/endEvent/sequenceFlow */
private String type;
/** 元素显示名称 */
private String name;
// ------------------------------ 节点专属字段startEvent/serviceTask/userTask/endEvent ------------------------------
/** 入连线ID集合仅节点有 */
private List<String> incomingFlows;
/** 出连线ID集合仅节点有 */
private List<String> outgoingFlows;
/** 扩展配置serviceTask等需要执行配置的节点使用 */
private ExtensionElementsDTO extensionElements;
// ------------------------------ 连线专属字段sequenceFlow ------------------------------
/** 源节点ID仅连线有 */
private String sourceRef;
/** 目标节点ID仅连线有 */
private String targetRef;
}

View File

@@ -1,14 +0,0 @@
package com.sdm.flowable.dto;
import lombok.Data;
/**
* 流程基础信息DTO对应JSON中的process字段
*/
@Data
public class ProcessDTO {
/** 流程唯一ID必填 */
private String id;
/** 流程名称(必填) */
private String name;
}

View File

@@ -1,15 +0,0 @@
package com.sdm.flowable.dto;
import lombok.Data;
import java.util.List;
/**
* 流程定义顶层DTO对应整个JSON
*/
@Data
public class ProcessDefinitionDTO {
/** 流程核心信息 */
private ProcessDTO process;
/** 所有节点+连线集合 */
private List<FlowElementDTO> flowElements;
}

View File

@@ -1,9 +0,0 @@
package com.sdm.flowable.dto.resp;
import lombok.Data;
@Data
public class DeployFlowableResp {
String processDefinitionId;
String processDefinitionKey;
}

View File

@@ -5,11 +5,11 @@ import com.sdm.flowable.constants.FlowableConfig;
import com.sdm.flowable.delegate.UniversalDelegate;
import com.sdm.flowable.dto.NodeDetailInfo;
import com.sdm.flowable.dto.NodeStructureInfo;
import com.sdm.flowable.dto.ProcessDefinitionDTO;
import com.sdm.flowable.dto.ProcessInstanceInfo;
import com.sdm.common.entity.flowable.dto.ProcessDefinitionDTO;
import com.sdm.flowable.dto.req.AsyncCallbackRequest;
import com.sdm.flowable.dto.resp.DeployFlowableResp;
import com.sdm.flowable.dto.resp.ProcessInstanceDetailResponse;
import com.sdm.common.entity.resp.flowable.DeployFlowableResp;
import com.sdm.flowable.enums.FlowElementTypeEnums;
import com.sdm.flowable.util.Dto2BpmnConverter;
import com.sdm.flowable.dto.req.CompleteTaskReq;

View File

@@ -2,14 +2,11 @@ package com.sdm.flowable.util;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sdm.flowable.dto.FlowElementDTO;
import com.sdm.flowable.dto.ProcessDefinitionDTO;
import com.sdm.flowable.config.executeConfig.BaseExecuteConfig;
import com.sdm.common.entity.flowable.dto.FlowElementDTO;
import com.sdm.common.entity.flowable.dto.ProcessDefinitionDTO;
import com.sdm.common.entity.flowable.executeConfig.BaseExecuteConfig;
import com.sdm.flowable.constants.FlowableConfig;
import com.sdm.flowable.dto.FlowElementDTO;
import com.sdm.flowable.dto.ProcessDefinitionDTO;
import com.sdm.flowable.enums.FlowElementTypeEnums;
import com.sdm.flowable.util.FlowNodeIdUtils;
import org.flowable.bpmn.model.*;
import org.flowable.bpmn.model.Process;
import org.springframework.beans.factory.annotation.Autowired;