feat:任务执行流程
This commit is contained in:
@@ -7,7 +7,6 @@ import com.sdm.capability.model.entity.SimulationFlowNode;
|
||||
import com.sdm.capability.service.ISimulationFlowNodeService;
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.common.entity.req.capability.FlowNodeDto;
|
||||
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
@@ -15,7 +14,6 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class ISimulationFlowNodeServiceImpl extends ServiceImpl<SimulationFlowNodeMapper, SimulationFlowNode> implements ISimulationFlowNodeService {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.sdm.flowable.dto;
|
||||
package com.sdm.common.entity.flowable.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.sdm.flowable.dto;
|
||||
package com.sdm.common.entity.flowable.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.sdm.flowable.dto;
|
||||
package com.sdm.common.entity.flowable.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
@@ -34,6 +34,9 @@ public class FlowNodeDto {
|
||||
@Schema(description = "输出文件夹id")
|
||||
private Long outputDirId;
|
||||
|
||||
@Schema(description = "节点状态:finished/active/pending")
|
||||
private String nodeStatus;
|
||||
|
||||
@Schema(description = "创建人")
|
||||
private Long creator;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.sdm.flowable.dto.resp;
|
||||
package com.sdm.common.entity.resp.flowable;
|
||||
|
||||
import com.sdm.flowable.dto.NodeDetailInfo;
|
||||
import com.sdm.flowable.dto.ProcessInstanceInfo;
|
||||
import com.sdm.common.entity.flowable.dto.NodeDetailInfo;
|
||||
import com.sdm.common.entity.flowable.dto.ProcessInstanceInfo;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
@@ -1,16 +1,17 @@
|
||||
package com.sdm.common.feign.impl.flowable;
|
||||
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.common.entity.flowable.dto.NodeStructureInfo;
|
||||
import com.sdm.common.entity.flowable.dto.ProcessDefinitionDTO;
|
||||
import com.sdm.common.entity.resp.flowable.DeployFlowableResp;
|
||||
import com.sdm.common.entity.resp.flowable.ProcessInstanceDetailResponse;
|
||||
import com.sdm.common.entity.resp.flowable.ProcessInstanceResp;
|
||||
import com.sdm.common.feign.inter.flowable.IFlowableFeignClient;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import java.util.HashMap;
|
||||
@@ -73,4 +74,30 @@ public class FlowableClientFeignClientImpl implements IFlowableFeignClient {
|
||||
return SdmResponse.failed("更新流程参数的流程实例id失败");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public SdmResponse<ProcessInstanceDetailResponse> getProcessAndNodeDetailByInstanceId(String processInstanceId) {
|
||||
SdmResponse<ProcessInstanceDetailResponse> response;
|
||||
try {
|
||||
response = flowableFeignClient.getProcessAndNodeDetailByInstanceId(processInstanceId);
|
||||
log.info("查询流程状态以及节点状态:"+ response);
|
||||
return response;
|
||||
} catch (Exception e) {
|
||||
log.error("查询流程状态以及节点状态失败", e);
|
||||
return SdmResponse.failed("查询流程状态以及节点状态失败");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public SdmResponse<List<NodeStructureInfo>> listNodesByProcessDefinitionId(String processDefinitionId) {
|
||||
SdmResponse<List<NodeStructureInfo>> response;
|
||||
try {
|
||||
response = flowableFeignClient.listNodesByProcessDefinitionId(processDefinitionId);
|
||||
log.info("获取流程定义节点详细信息:"+ response);
|
||||
return response;
|
||||
} catch (Exception e) {
|
||||
log.error("获取流程定义节点详细信息失败", e);
|
||||
return SdmResponse.failed("获取流程定义节点详细信息失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,10 +27,10 @@ public interface ISimulationFlowFeignClient {
|
||||
@PostMapping("/flow/node/batchUpdateSimulationFlowNode")
|
||||
SdmResponse batchUpdateSimulationFlowNode(@RequestBody FlowNodeDto req);
|
||||
|
||||
@PostMapping("/node/listSimulationFlowNode")
|
||||
@PostMapping("/flow/node/listSimulationFlowNode")
|
||||
SdmResponse<List<FlowNodeDto>> listSimulationFlowNode(@RequestBody FlowNodeDto req);
|
||||
|
||||
@PostMapping("/node/querySimulationFlowNode")
|
||||
@PostMapping("/flow/node/querySimulationFlowNode")
|
||||
SdmResponse<FlowNodeDto> querySimulationFlowNode(@RequestBody FlowNodeDto req);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package com.sdm.common.feign.inter.flowable;
|
||||
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.common.entity.flowable.dto.NodeStructureInfo;
|
||||
import com.sdm.common.entity.flowable.dto.ProcessDefinitionDTO;
|
||||
import com.sdm.common.entity.resp.flowable.DeployFlowableResp;
|
||||
import com.sdm.common.entity.resp.flowable.ProcessInstanceDetailResponse;
|
||||
import com.sdm.common.entity.resp.flowable.ProcessInstanceResp;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
@@ -10,6 +12,7 @@ import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
@@ -22,10 +25,16 @@ public interface IFlowableFeignClient {
|
||||
@PostMapping("/process/deploy")
|
||||
SdmResponse<DeployFlowableResp> deploy(@RequestBody ProcessDefinitionDTO processDTO);
|
||||
|
||||
@PostMapping("/saveParamsByDefinitionId")
|
||||
@PostMapping("/process/saveParamsByDefinitionId")
|
||||
SdmResponse saveParamsByDefinitionId(@RequestParam String processDefinitionId, @RequestParam String nodeId, @RequestBody Map<String, Object> params);
|
||||
|
||||
@PostMapping("/updateNodeParamProcessInstanceId")
|
||||
@PostMapping("/process/updateNodeParamProcessInstanceId")
|
||||
SdmResponse updateNodeParamProcessInstanceId(@RequestParam String processDefinitionId, @RequestParam String processInstanceId);
|
||||
|
||||
@GetMapping("/process/getProcessAndNodeDetailByInstanceId")
|
||||
SdmResponse<ProcessInstanceDetailResponse> getProcessAndNodeDetailByInstanceId(@RequestParam String processInstanceId);
|
||||
|
||||
@GetMapping("/listNodesByProcessDefinitionId")
|
||||
SdmResponse<List<NodeStructureInfo>> listNodesByProcessDefinitionId(@RequestParam String processDefinitionId);
|
||||
|
||||
}
|
||||
|
||||
@@ -4,14 +4,14 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
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.common.entity.flowable.dto.NodeStructureInfo;
|
||||
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.common.entity.resp.flowable.DeployFlowableResp;
|
||||
import com.sdm.flowable.dto.resp.ProcessInstanceDetailResponse;
|
||||
import com.sdm.common.entity.resp.flowable.ProcessInstanceDetailResponse;
|
||||
import com.sdm.flowable.process.ProcessService;
|
||||
import com.sdm.flowable.service.IProcessNodeParamService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@@ -3,14 +3,15 @@ package com.sdm.flowable.process;
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
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.ProcessInstanceInfo;
|
||||
import com.sdm.common.entity.flowable.dto.NodeDetailInfo;
|
||||
import com.sdm.common.entity.flowable.dto.NodeStructureInfo;
|
||||
import com.sdm.common.entity.flowable.dto.ProcessInstanceInfo;
|
||||
import com.sdm.common.entity.flowable.dto.ProcessDefinitionDTO;
|
||||
import com.sdm.flowable.dto.req.AsyncCallbackRequest;
|
||||
import com.sdm.flowable.dto.resp.ProcessInstanceDetailResponse;
|
||||
import com.sdm.common.entity.resp.flowable.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
|
||||
private IProcessNodeParamService processNodeParamService;
|
||||
|
||||
// 部署流程(前端传入Flowable标准JSON)
|
||||
public SdmResponse<DeployFlowableResp> deploy(ProcessDefinitionDTO processDTO) throws Exception {
|
||||
log.info("开始部署流程定义");
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.sdm.project.controller;
|
||||
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.common.entity.req.capability.FlowNodeDto;
|
||||
import com.sdm.common.entity.req.data.CreateDirReq;
|
||||
import com.sdm.common.entity.req.data.KnowledgeCallBackReq;
|
||||
import com.sdm.common.entity.req.data.QueryDirReq;
|
||||
@@ -194,4 +195,12 @@ public class SimulationRunController {
|
||||
return runService.saveNodeParams(req);
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务执行 查询流程节点列表
|
||||
*/
|
||||
@PostMapping("/listFlowNodes")
|
||||
public SdmResponse<List<FlowNodeDto>> listFlowNodes(@RequestBody SpdmTaskRunReq req) {
|
||||
return runService.listFlowNodes(req);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -93,36 +93,6 @@ public class SimulationRun implements Serializable {
|
||||
@TableField("englishName")
|
||||
private Long englishName;
|
||||
|
||||
@TableField("tag1")
|
||||
private String tag1;
|
||||
|
||||
@TableField("tag2")
|
||||
private String tag2;
|
||||
|
||||
@TableField("tag3")
|
||||
private String tag3;
|
||||
|
||||
@TableField("tag4")
|
||||
private String tag4;
|
||||
|
||||
@TableField("tag5")
|
||||
private String tag5;
|
||||
|
||||
@TableField("tag6")
|
||||
private String tag6;
|
||||
|
||||
@TableField("tag7")
|
||||
private String tag7;
|
||||
|
||||
@TableField("tag8")
|
||||
private String tag8;
|
||||
|
||||
@TableField("tag9")
|
||||
private String tag9;
|
||||
|
||||
@TableField("tag10")
|
||||
private String tag10;
|
||||
|
||||
@Schema(description= "创建者ID")
|
||||
@TableField("creator")
|
||||
private Long creator;
|
||||
|
||||
@@ -3,6 +3,8 @@ package com.sdm.project.model.req;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Data
|
||||
public class SpdmNodeParamReq {
|
||||
|
||||
@@ -12,11 +14,14 @@ public class SpdmNodeParamReq {
|
||||
@Schema(description = "算例uuid")
|
||||
private String runId;
|
||||
|
||||
@Schema(description = "上传脚本文件id")
|
||||
private String scriptFileId;
|
||||
@Schema(description = "用户输入的参数")
|
||||
private Map<String, Object> inputParams;
|
||||
|
||||
@Schema(description = "用户输入的正则表达式参数")
|
||||
private String regExp;
|
||||
// @Schema(description = "上传脚本文件id")
|
||||
// private String scriptFileId;
|
||||
//
|
||||
// @Schema(description = "用户输入的正则表达式参数")
|
||||
// private String regExp;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.sdm.project.service;
|
||||
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.common.entity.req.capability.FlowNodeDto;
|
||||
import com.sdm.common.entity.req.data.CreateDirReq;
|
||||
import com.sdm.common.entity.req.data.KnowledgeCallBackReq;
|
||||
import com.sdm.common.entity.req.data.QueryDirReq;
|
||||
@@ -61,4 +62,6 @@ public interface ISimulationRunService extends IService<SimulationRun> {
|
||||
SdmResponse startProcessInstance(SpdmTaskRunReq req);
|
||||
|
||||
SdmResponse saveNodeParams(SpdmNodeParamReq req);
|
||||
|
||||
SdmResponse<List<FlowNodeDto>> listFlowNodes(SpdmTaskRunReq req);
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.sdm.common.common.ThreadLocalContext;
|
||||
import com.sdm.common.entity.enums.DirTypeEnum;
|
||||
import com.sdm.common.entity.enums.NodeTypeEnum;
|
||||
import com.sdm.common.entity.flowable.dto.FlowElementDTO;
|
||||
import com.sdm.common.entity.flowable.dto.NodeStructureInfo;
|
||||
import com.sdm.common.entity.flowable.dto.ProcessDefinitionDTO;
|
||||
import com.sdm.common.entity.req.capability.FlowNodeDto;
|
||||
import com.sdm.common.entity.req.data.*;
|
||||
@@ -21,6 +22,7 @@ import com.sdm.common.entity.resp.PageDataResp;
|
||||
import com.sdm.common.entity.resp.capability.FlowTemplateResp;
|
||||
import com.sdm.common.entity.resp.data.BatchAddFileInfoResp;
|
||||
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
|
||||
import com.sdm.common.entity.resp.flowable.ProcessInstanceDetailResponse;
|
||||
import com.sdm.common.entity.resp.flowable.ProcessInstanceResp;
|
||||
import com.sdm.common.entity.resp.system.CIDUserResp;
|
||||
import com.sdm.common.feign.impl.capability.SimulationFlowFeignClientImpl;
|
||||
@@ -565,6 +567,9 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
|
||||
List<FlowNodeDto> flowNodeDtoList = new ArrayList<>();
|
||||
ProcessDefinitionDTO definitionDTO = JSON.parseObject(flowTemplateResp.getData().getTemplateContent(), ProcessDefinitionDTO.class);
|
||||
for (FlowElementDTO flowElement : definitionDTO.getFlowElements()) {
|
||||
if (flowElement.getName() == null) {
|
||||
continue;
|
||||
}
|
||||
FlowNodeDto flowNodeDto = new FlowNodeDto();
|
||||
flowNodeDto.setUuid(generateUuid("flow_node_"));
|
||||
flowNodeDto.setNodeName(flowElement.getName());
|
||||
@@ -952,9 +957,8 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
|
||||
// 脚本节点
|
||||
// 处理脚本上传到当前节点文件夹下,获得 脚本文件id
|
||||
// 脚本文件id 保存到用户输入参数
|
||||
params.put("scriptFileId", req.getScriptFileId());
|
||||
// 正则表达式 保存到用户输入参数
|
||||
params.put("regExp", req.getRegExp());
|
||||
params.putAll(req.getInputParams());
|
||||
// 脚本输出文件夹id 保存到用户输入参数
|
||||
params.put("outputDirId", flowNodeDto.getOutputDirId());
|
||||
}
|
||||
@@ -967,6 +971,41 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SdmResponse<List<FlowNodeDto>> listFlowNodes(SpdmTaskRunReq req) {
|
||||
FlowNodeDto nodeReq = new FlowNodeDto();
|
||||
nodeReq.setRunId(req.getRunId());
|
||||
SdmResponse<List<FlowNodeDto>> sdmResponse = flowFeignClient.listSimulationFlowNode(nodeReq);
|
||||
if (sdmResponse.getData() != null) {
|
||||
List<FlowNodeDto> flowNodeDtoList = sdmResponse.getData();
|
||||
SimulationRun simulationRun = this.lambdaQuery().eq(SimulationRun::getUuid, req.getRunId()).one();
|
||||
if (simulationRun.getFlowInstanceId() != null) {
|
||||
SdmResponse<ProcessInstanceDetailResponse> response = flowableFeignClient.getProcessAndNodeDetailByInstanceId(simulationRun.getFlowInstanceId());
|
||||
if (response.getData() != null && CollectionUtils.isNotEmpty(response.getData().getNodes())) {
|
||||
for (FlowNodeDto flowNodeDto : flowNodeDtoList) {
|
||||
response.getData().getNodes().stream().filter(i -> StringUtils.equals(i.getId(), flowNodeDto.getNodeId())).findFirst().ifPresent(i -> {
|
||||
flowNodeDto.setNodeStatus(i.getStatus());
|
||||
});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
flowNodeDtoList.forEach(node -> {
|
||||
node.setNodeStatus("pending");
|
||||
});
|
||||
}
|
||||
List<NodeStructureInfo> nodeStructureInfoList = flowableFeignClient.listNodesByProcessDefinitionId(simulationRun.getProcessDefinitionId()).getData();
|
||||
if (CollectionUtils.isNotEmpty(nodeStructureInfoList)) {
|
||||
for (FlowNodeDto flowNodeDto : flowNodeDtoList) {
|
||||
nodeStructureInfoList.stream().filter(i -> StringUtils.equals(i.getId(), flowNodeDto.getNodeId())).findFirst().ifPresent(i -> {
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
return SdmResponse.success(flowNodeDtoList);
|
||||
}
|
||||
return SdmResponse.success(new ArrayList<>());
|
||||
}
|
||||
|
||||
public static void deleteFolder(File folder) {
|
||||
if (folder.isDirectory()) {
|
||||
File[] files = folder.listFiles();
|
||||
|
||||
Reference in New Issue
Block a user