优化flowable流程和节点状态查询

This commit is contained in:
2025-12-01 17:57:08 +08:00
parent debfa7cb93
commit 2b4eeec3d4
4 changed files with 15 additions and 6 deletions

View File

@@ -43,6 +43,7 @@ public class UniversalDelegate implements JavaDelegate {
public void execute(DelegateExecution execution) {
try {
// 1. 获取当前节点信息
String processDefinitionId = execution.getProcessDefinitionId();
String procInstId = execution.getProcessInstanceId();
String nodeId = execution.getCurrentActivityId();
String nodeName = execution.getCurrentFlowElement().getName();
@@ -50,7 +51,7 @@ public class UniversalDelegate implements JavaDelegate {
log.info("开始执行节点, 流程实例ID: {}, 节点ID: {}, 节点名称: {}", procInstId, nodeId, nodeName);
// 2. 读取输入参数
Map<String, Object> params = processNodeParamService.getParam(procInstId, nodeId);
Map<String, Object> params = processNodeParamService.getParam(processDefinitionId, nodeId);
log.info("节点执行参数, 流程实例ID: {}, 节点ID: {}, 参数: {}", procInstId, nodeId, params);

View File

@@ -3,6 +3,7 @@ package com.sdm.flowable.dto;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class NodeStructureInfo {
@@ -11,4 +12,5 @@ public class NodeStructureInfo {
protected String type; // 如 "UserTask", "ExclusiveGateway"
protected List<String> nextNodeIds; // 后续节点 ID 列表
protected String executeConfig; // 扩展属性内容
protected Map<String,Object> userParam;// 用户输入参数
}

View File

@@ -11,6 +11,7 @@ import com.sdm.flowable.dto.req.AsyncCallbackRequest;
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.service.IProcessNodeParamService;
import com.sdm.flowable.util.Dto2BpmnConverter;
import com.sdm.flowable.dto.req.CompleteTaskReq;
import com.sdm.flowable.util.FlowNodeIdUtils;
@@ -60,6 +61,9 @@ public class ProcessService {
@Autowired
private UniversalDelegate universalDelegate;
@Autowired
IProcessNodeParamService processNodeParamService;
// 部署流程前端传入Flowable标准JSON
public SdmResponse<DeployFlowableResp> deploy(ProcessDefinitionDTO processDTO) throws Exception {
log.info("开始部署流程定义");
@@ -259,7 +263,7 @@ public class ProcessService {
// 按有序节点构建详情
return orderedNodes.stream()
.map(node -> buildNodeDetailInfo(node, activityMap, activeActivityIds))
.map(node -> buildNodeDetailInfo(node,processDefinitionId, activityMap, activeActivityIds))
.collect(Collectors.toList());
}
@@ -273,11 +277,14 @@ public class ProcessService {
// --- 构建单个节点详情(返回 NodeDetailInfo---
private NodeDetailInfo buildNodeDetailInfo(
FlowNode node,
String processDefinitionId,
Map<String, HistoricActivityInstance> activityMap,
List<String> activeActivityIds) {
String nodeId = node.getId();
// 先构建静态结构
NodeStructureInfo base = buildNodeStructureInfo(node);
Map<String, Object> params = processNodeParamService.getParam(processDefinitionId, nodeId);
base.setUserParam(params);
// 再填充动态信息
NodeDetailInfo detail = new NodeDetailInfo();
@@ -288,7 +295,6 @@ public class ProcessService {
detail.setExecuteConfig(base.getExecuteConfig());
// 动态状态逻辑
String nodeId = node.getId();
HistoricActivityInstance historicActivity = activityMap.get(nodeId);
boolean isActive = activeActivityIds.contains(nodeId);
boolean isFinished = historicActivity != null && historicActivity.getEndTime() != null;

View File

@@ -63,8 +63,8 @@ public class ProcessNodeParamServiceImpl extends ServiceImpl<ProcessNodeParamMap
// 查询节点输入参数(流程执行时调用)
public Map<String, Object> getParam(String procInstId, String nodeId) {
ProcessNodeParam param = this.lambdaQuery().eq(ProcessNodeParam::getProcessInstanceId, procInstId)
public Map<String, Object> getParam(String processDefinitionId, String nodeId) {
ProcessNodeParam param = this.lambdaQuery().eq(ProcessNodeParam::getProcessDefinitionId, processDefinitionId)
.eq(ProcessNodeParam::getNodeId, nodeId)
.one();