Merge branch 'feature/REQ-1309' into dev

This commit is contained in:
wangli 2023-10-07 16:34:30 +08:00
commit 1de536b014
5 changed files with 59 additions and 1 deletions

View File

@ -8,6 +8,7 @@ import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceQue
import cn.axzo.workflow.common.model.response.BpmPageResult;
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstancePageItemVO;
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO;
import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO;
import cn.azxo.framework.common.model.CommonResponse;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.swagger.v3.oas.annotations.Operation;
@ -23,6 +24,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Nullable;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 流程实例 API
@ -95,4 +97,12 @@ public interface ProcessInstanceApi {
CommonResponse<ObjectNode> processInstanceGraphical(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId,
@Nullable @RequestParam(required = false) String tenantId);
/**
* 推断指定流程实例的所有节点执行顺序
*
* @return
*/
@GetMapping("/api/process/instance/node/calc")
CommonResponse<List<ProcessNodeDetailVO>> processInstanceNodeCalc(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId,
@Nullable @RequestParam(required = false) String tenantId);
}

View File

@ -0,0 +1,17 @@
package cn.axzo.workflow.common.model.response.bpmn.process;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 流程实例下的节点信息
*
* @author wangli
* @since 2023/10/7 16:24
*/
@Data
@Accessors(chain = true)
public class ProcessNodeDetailVO {
}

View File

@ -1,16 +1,23 @@
package cn.axzo.workflow.core.service;
import cn.axzo.workflow.common.model.request.bpmn.process.*;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCancelDTO;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateWithFormDTO;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceMyPageReqVO;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceQueryDTO;
import cn.axzo.workflow.common.model.request.bpmn.process.HistoricProcessInstanceSearchDTO;
import cn.axzo.workflow.common.model.response.BpmPageResult;
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstancePageItemVO;
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO;
import cn.axzo.workflow.common.model.response.bpmn.process.HistoricProcessInstanceVO;
import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.form.api.FormInfo;
import javax.annotation.Nullable;
import javax.validation.Valid;
import java.util.List;
public interface BpmnProcessInstanceService {
@ -90,4 +97,6 @@ public interface BpmnProcessInstanceService {
ObjectNode getProcessInstanceGraphical(String processInstanceId, @Nullable String tenantId);
BpmPageResult<HistoricProcessInstanceVO> historicProcessInstancePage(HistoricProcessInstanceSearchDTO dto);
List<ProcessNodeDetailVO> getProcessNodes(String processInstanceId, @Nullable String tenantId);
}

View File

@ -13,6 +13,7 @@ import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessDefinition
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstancePageItemVO;
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO;
import cn.axzo.workflow.common.model.response.bpmn.process.HistoricProcessInstanceVO;
import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO;
import cn.axzo.workflow.core.common.enums.BpmnProcessTaskResultEnum;
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.common.utils.BpmCollectionUtils;
@ -91,6 +92,7 @@ import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_DEFINITION
import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_INSTANCE_CANCELLED;
import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS;
import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF;
import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_INSTANCE_ID_NOT_EXISTS;
import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_INSTANCE_NOT_EXISTS;
import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_OPERATION_PARAM_VALID_ERROR;
@ -541,6 +543,17 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
}
}
@Override
public List<ProcessNodeDetailVO> getProcessNodes(String processInstanceId, @Nullable String tenantId) {
HistoricProcessInstance instance =
historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
if (Objects.isNull(instance)) {
throw new WorkflowEngineException(PROCESS_INSTANCE_ID_NOT_EXISTS, processInstanceId);
}
BpmnModel bpmnModel = repositoryService.getBpmnModel(instance.getProcessDefinitionId());
bpmnModel.getMainProcess().getFlowElements();
return null;
}
private List<String> gatherCompletedFlows(Set<String> completedActivityInstances,
Set<String> currentActivityinstances, BpmnModel pojoModel) {

View File

@ -11,6 +11,7 @@ import cn.axzo.workflow.common.model.response.BpmPageResult;
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstancePageItemVO;
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO;
import cn.axzo.workflow.common.model.response.bpmn.process.HistoricProcessInstanceVO;
import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO;
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.service.BpmnProcessInstanceService;
import cn.azxo.framework.common.model.CommonResponse;
@ -33,6 +34,7 @@ import javax.annotation.Nullable;
import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_OPERATION_PARAM_VALID_ERROR;
import static cn.azxo.framework.common.model.CommonResponse.success;
@ -130,6 +132,13 @@ public class BpmnProcessInstanceController implements ProcessInstanceApi {
return success(bpmnProcessInstanceService.getProcessInstanceGraphical(processInstanceId, tenantId));
}
@GetMapping("/node/calc")
@Override
public CommonResponse<List<ProcessNodeDetailVO>> processInstanceNodeCalc(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId,
@Nullable String tenantId) {
return success(bpmnProcessInstanceService.getProcessNodes(processInstanceId, tenantId));
}
/**
* 枢智业务(审批台账专用)
*