update - 优化已完成的历史实例的节点推测
This commit is contained in:
parent
6cb1baf326
commit
2f12bfe489
@ -111,6 +111,7 @@ import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.GENERAL;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.OR;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_STARTER;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING;
|
||||
import static cn.axzo.workflow.core.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_ID_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.core.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.core.common.code.BpmnProcessDefinitionRespCode.PROCESS_DEFINITION_ID_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.core.common.code.BpmnProcessDefinitionRespCode.PROCESS_DEFINITION_IS_SUSPENDED;
|
||||
@ -781,7 +782,23 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
ProcessInstance instance = query.singleResult();
|
||||
List<FlowElement> flowElements = forecastService.performProcessForecasting(processInstanceId, instance);
|
||||
|
||||
BpmnModel bpmnModel = repositoryService.getBpmnModel(instance.getProcessDefinitionId());
|
||||
String processDefinitionId;
|
||||
boolean skipAllNode;
|
||||
if (Objects.isNull(instance)) {
|
||||
HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery()
|
||||
.processInstanceId(processInstanceId)
|
||||
.singleResult();
|
||||
if (Objects.isNull(processInstance)) {
|
||||
throw new WorkflowEngineException(PROCESS_INSTANCE_ID_NOT_EXISTS, processInstanceId);
|
||||
}
|
||||
processDefinitionId = processInstance.getProcessDefinitionId();
|
||||
skipAllNode = true;
|
||||
} else {
|
||||
skipAllNode = false;
|
||||
processDefinitionId = instance.getProcessDefinitionId();
|
||||
}
|
||||
|
||||
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
|
||||
List<ProcessNodeDetailVO> resultList = new ArrayList<>(flowElements.size());
|
||||
// 发起人节点,也是一个 UserTask 节点, 所以这里默认就包含了发起人节点
|
||||
flowElements.stream()
|
||||
@ -800,19 +817,19 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
node.setNodeMode(GENERAL);
|
||||
node.setId(i.getId()).setName(i.getName());
|
||||
if (i instanceof UserTask) {
|
||||
parseUserTask(processInstanceId, (UserTask) i, node, nodeDefinitionKeys);
|
||||
parseUserTask(processInstanceId, (UserTask) i, node, skipAllNode, nodeDefinitionKeys);
|
||||
} else if (i instanceof ServiceTask) {
|
||||
parseServiceTask(processInstanceId, (ServiceTask) i, node, nodeDefinitionKeys);
|
||||
parseServiceTask(processInstanceId, (ServiceTask) i, node, skipAllNode, nodeDefinitionKeys);
|
||||
}
|
||||
resultList.add(node);
|
||||
});
|
||||
return resultList;
|
||||
}
|
||||
|
||||
private void parseServiceTask(String processInstanceId, ServiceTask i, ProcessNodeDetailVO node, List<String> skipTaskDefinitionKeys) {
|
||||
private void parseServiceTask(String processInstanceId, ServiceTask i, ProcessNodeDetailVO node, boolean skipAllNode, List<String> skipTaskDefinitionKeys) {
|
||||
// ServiceTask 主要作用于抄送
|
||||
node.setId(i.getId()).setName(i.getName());
|
||||
if (skipTaskDefinitionKeys.contains(i.getId())) {
|
||||
if (skipAllNode || skipTaskDefinitionKeys.contains(i.getId())) {
|
||||
return;
|
||||
}
|
||||
getCarbonCopyConfigs(i).ifPresent(carbons ->
|
||||
@ -822,7 +839,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
historicTaskInstanceConverter, serviceVersion))));
|
||||
}
|
||||
|
||||
private void parseUserTask(String processInstanceId, UserTask i, ProcessNodeDetailVO node, List<String> skipTaskDefinitionKeys) {
|
||||
private void parseUserTask(String processInstanceId, UserTask i, ProcessNodeDetailVO node, boolean skipAllNode, List<String> skipTaskDefinitionKeys) {
|
||||
node.setFormKey(i.getFormKey());
|
||||
// 设置审批模式,
|
||||
if (i.getBehavior() instanceof MultiInstanceActivityBehavior) {
|
||||
@ -835,7 +852,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
node.setNodeMode(BpmnFlowNodeMode.GENERAL);
|
||||
}
|
||||
|
||||
if (skipTaskDefinitionKeys.contains(i.getId())) {
|
||||
if (skipAllNode || skipTaskDefinitionKeys.contains(i.getId())) {
|
||||
return;
|
||||
}
|
||||
if (Objects.equals(node.getApprovalMethod(), human)) {
|
||||
|
||||
@ -27,6 +27,7 @@ import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
import static cn.axzo.workflow.core.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_ID_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.core.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_NOT_EXISTS;
|
||||
|
||||
|
||||
@ -124,16 +125,22 @@ public class FlowNodeForecastService implements InitializingBean {
|
||||
// .includeProcessVariables()
|
||||
.singleResult();
|
||||
}
|
||||
String processDefinitionId;
|
||||
if (Objects.isNull(instance)) {
|
||||
HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery()
|
||||
.processInstanceId(processInstanceId)
|
||||
.singleResult();
|
||||
if (Objects.isNull(processInstance)) {
|
||||
throw new WorkflowEngineException(PROCESS_INSTANCE_ID_NOT_EXISTS, processInstanceId);
|
||||
}
|
||||
processInstanceId = processInstance.getId();
|
||||
processDefinitionId = processInstance.getProcessDefinitionId();
|
||||
} else {
|
||||
processInstanceId = instance.getProcessInstanceId();
|
||||
processDefinitionId = instance.getProcessDefinitionId();
|
||||
}
|
||||
|
||||
BpmnModel bpmnModel = repositoryService.getBpmnModel(instance.getProcessDefinitionId());
|
||||
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
|
||||
|
||||
// 保持推测出来的节点执行顺序的容器
|
||||
List<FlowElement> orderedNodes = new ArrayList<>();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user