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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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') {
|
||||
|
||||
Reference in New Issue
Block a user