fix(流程详情): 修改修改流程详情查询接口,移除对流程定义接口调用

This commit is contained in:
konbai
2022-10-15 19:53:46 +08:00
parent dafd6cdbf4
commit 5720cd93ab
3 changed files with 58 additions and 51 deletions

View File

@@ -30,6 +30,13 @@ public class WfDetailVo {
*/
private List<FormConf> processFormList;
/**
* 流程XML
*/
private String bpmnXml;
private WfViewerVo flowViewer;
/**
* 是否存在任务表单信息
* @return true:存在false:不存在

View File

@@ -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);
}
}

View File

@@ -196,13 +196,11 @@
<script>
import { detailProcess } from '@/api/workflow/process'
import Parser from '@/utils/generator/parser'
import { definitionStart, getFlowViewer, readXml } from '@/api/workflow/definition'
import { complete, delegate, transfer, getNextFlowNode, rejectTask, returnList, returnTask } from '@/api/workflow/todo'
import { complete, delegate, transfer, rejectTask, returnList, returnTask } from '@/api/workflow/todo'
import { selectUser, deptTreeSelect } from '@/api/system/user'
import ProcessViewer from '@/components/ProcessViewer'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import Treeselect from '@riophae/vue-treeselect'
import { forceLogout } from '@/api/monitor/online';
export default {
name: "Detail",
@@ -314,9 +312,7 @@ export default {
if (this.taskForm.taskId) {
this.getProcessDetails(this.taskForm.procInsId, this.taskForm.deployId, this.taskForm.taskId);
}
Promise.all([this.getFlowViewer(this.taskForm.procInsId), this.getModelDetail(this.taskForm.definitionId)]).then(() => {
this.loadIndex = this.taskForm.procInsId;
});
this.loadIndex = this.taskForm.procInsId;
},
methods: {
/** 查询部门下拉树结构 */
@@ -345,30 +341,6 @@ export default {
this.queryParams.deptId = data.id;
this.getList();
},
/** xml 文件 */
getModelDetail(definitionId) {
return new Promise(resolve => {
// 发送请求获取xml
readXml(definitionId).then(res => {
this.xmlData = res.data
resolve()
})
})
},
getFlowViewer(procInsId) {
return new Promise(resolve => {
getFlowViewer(procInsId).then(res => {
let data = res.data;
if (data) {
this.finishedInfo.finishedTaskSet = data.finishedTaskSet;
this.finishedInfo.unfinishedTaskSet = data.unfinishedTaskSet;
this.finishedInfo.rejectedTaskSet = data.rejectedTaskSet;
this.finishedInfo.finishedSequenceFlowSet = data.finishedSequenceFlowSet;
}
resolve()
})
})
},
setIcon(val) {
if (val) {
return "el-icon-check";
@@ -430,12 +402,14 @@ export default {
const params = {procInsId: procInsId, deployId: deployId, taskId: taskId}
detailProcess(params).then(res => {
const data = res.data;
this.xmlData = data.bpmnXml;
this.processFormList = data.processFormList;
this.taskFormOpen = data.existTaskForm;
if (this.taskFormOpen) {
this.taskFormData = data.taskFormData;
}
this.historyProcNodeList = data.historyProcNodeList;
this.finishedInfo = data.flowViewer;
this.formOpen = true
})
},
@@ -542,23 +516,6 @@ export default {
this.variables = variables;
}
},
/** 申请流程表单数据提交 */
submitForm(data) {
if (data) {
const variables = data.valData;
const formData = data.formData;
formData.disabled = true;
formData.formBtns = false;
if (this.taskForm.definitionId) {
variables.variables = formData;
// 启动流程并将表单数据加入流程变量
definitionStart(this.taskForm.definitionId, JSON.stringify(variables)).then(res => {
this.$modal.msgSuccess(res.msg);
this.goBack();
})
}
}
},
submitUserData() {
let type = this.userData.type;
if (type === 'copy') {