fix(流程详情): 修改修改流程详情查询接口,移除对流程定义接口调用
This commit is contained in:
@@ -30,6 +30,13 @@ public class WfDetailVo {
|
||||
*/
|
||||
private List<FormConf> processFormList;
|
||||
|
||||
/**
|
||||
* 流程XML
|
||||
*/
|
||||
private String bpmnXml;
|
||||
|
||||
private WfViewerVo flowViewer;
|
||||
|
||||
/**
|
||||
* 是否存在任务表单信息
|
||||
* @return true:存在;false:不存在
|
||||
|
||||
@@ -21,6 +21,7 @@ import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.flowable.common.constant.TaskConstants;
|
||||
import com.ruoyi.flowable.core.FormConf;
|
||||
import com.ruoyi.flowable.factory.FlowServiceFactory;
|
||||
import com.ruoyi.flowable.flow.FlowableUtils;
|
||||
import com.ruoyi.flowable.utils.ModelUtils;
|
||||
import com.ruoyi.flowable.utils.ProcessFormUtils;
|
||||
import com.ruoyi.flowable.utils.TaskUtils;
|
||||
@@ -40,6 +41,7 @@ import org.flowable.bpmn.model.Process;
|
||||
import org.flowable.bpmn.model.StartEvent;
|
||||
import org.flowable.bpmn.model.UserTask;
|
||||
import org.flowable.engine.history.HistoricActivityInstance;
|
||||
import org.flowable.engine.history.HistoricActivityInstanceQuery;
|
||||
import org.flowable.engine.history.HistoricProcessInstance;
|
||||
import org.flowable.engine.history.HistoricProcessInstanceQuery;
|
||||
import org.flowable.engine.repository.Deployment;
|
||||
@@ -57,10 +59,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -210,9 +209,12 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce
|
||||
if (taskIns == null) {
|
||||
throw new ServiceException("没有可办理的任务!");
|
||||
}
|
||||
InputStream inputStream = repositoryService.getProcessModel(taskIns.getProcessDefinitionId());
|
||||
detailVo.setBpmnXml(IoUtil.readUtf8(inputStream));
|
||||
detailVo.setTaskFormData(currTaskFormData(deployId, taskIns));
|
||||
detailVo.setHistoryProcNodeList(historyProcNodeList(procInsId));
|
||||
detailVo.setProcessFormList(processFormList(procInsId, deployId, taskIns));
|
||||
detailVo.setFlowViewer(getFlowViewer(procInsId));
|
||||
return detailVo;
|
||||
}
|
||||
|
||||
@@ -628,4 +630,45 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce
|
||||
}
|
||||
return elementVoList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取流程执行过程
|
||||
*
|
||||
* @param procInsId
|
||||
* @return
|
||||
*/
|
||||
private WfViewerVo getFlowViewer(String procInsId) {
|
||||
// 构建查询条件
|
||||
HistoricActivityInstanceQuery query = historyService.createHistoricActivityInstanceQuery()
|
||||
.processInstanceId(procInsId);
|
||||
List<HistoricActivityInstance> allActivityInstanceList = query.list();
|
||||
if (CollUtil.isEmpty(allActivityInstanceList)) {
|
||||
return new WfViewerVo();
|
||||
}
|
||||
// 获取流程发布Id信息
|
||||
String processDefinitionId = allActivityInstanceList.get(0).getProcessDefinitionId();
|
||||
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
|
||||
// 查询所有已完成的元素
|
||||
List<HistoricActivityInstance> finishedElementList = allActivityInstanceList.stream()
|
||||
.filter(item -> ObjectUtil.isNotNull(item.getEndTime())).collect(Collectors.toList());
|
||||
// 所有已完成的连线
|
||||
Set<String> finishedSequenceFlowSet = new HashSet<>();
|
||||
// 所有已完成的任务节点
|
||||
Set<String> finishedTaskSet = new HashSet<>();
|
||||
finishedElementList.forEach(item -> {
|
||||
if (BpmnXMLConstants.ELEMENT_SEQUENCE_FLOW.equals(item.getActivityType())) {
|
||||
finishedSequenceFlowSet.add(item.getActivityId());
|
||||
} else {
|
||||
finishedTaskSet.add(item.getActivityId());
|
||||
}
|
||||
});
|
||||
// 查询所有未结束的节点
|
||||
Set<String> unfinishedTaskSet = allActivityInstanceList.stream()
|
||||
.filter(item -> ObjectUtil.isNull(item.getEndTime()))
|
||||
.map(HistoricActivityInstance::getActivityId)
|
||||
.collect(Collectors.toSet());
|
||||
// DFS 查询未通过的元素集合
|
||||
Set<String> rejectedSet = FlowableUtils.dfsFindRejects(bpmnModel, unfinishedTaskSet, finishedSequenceFlowSet, finishedTaskSet);
|
||||
return new WfViewerVo(finishedTaskSet, finishedSequenceFlowSet, unfinishedTaskSet, rejectedSet);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user