实列流程图还是恢复原来的逻辑

master
pengqiang 2021-11-19 16:58:24 +08:00
parent 6fe0776908
commit f3316d076b
1 changed files with 49 additions and 33 deletions

View File

@ -163,39 +163,49 @@ public class ActProcInsService {
public void createProcInsPng(HttpServletResponse response, String procInsId) throws IOException {
try {
//获取历史流程实例
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(procInsId).singleResult();
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(procInsId).singleResult(); //获取历史流程实例
//获取流程中已经执行的节点,按照执行先后顺序排序
List<HistoricActivityInstance> hai = historyService.createHistoricActivityInstanceQuery().processInstanceId(procInsId).orderByHistoricActivityInstanceStartTime().asc().list();
//开始和结束事件
List<HistoricActivityInstance> startEndEventList = new ArrayList<>();
List<HistoricActivityInstance> activityInstanceList = new ArrayList<>();
if (hai != null && !hai.isEmpty()) {
for (HistoricActivityInstance historicActivityInstance : hai) {
// 历史流程节点中
List<HistoricActivityInstance> newHisActInstanceList = new ArrayList<HistoricActivityInstance>();
List<HistoricActivityInstance> newHisTaskInstanceList = new ArrayList<HistoricActivityInstance>();
if (hai != null && hai.size() > 0) {
for (int i = 0; i < hai.size(); i++) {
HistoricActivityInstance historicActivityInstance = hai.get(i);
String activityType = historicActivityInstance.getActivityType();
if (activityType.equals("startEvent") || activityType.equals("endEvent")) {
startEndEventList.add(historicActivityInstance);
newHisActInstanceList.add(historicActivityInstance);
} else if (activityType.equals("serviceTask") || activityType.equals("userTask") || activityType.equals("exclusiveGateway") || activityType.equals("parallelGateway")) {
List<String> collect = activityInstanceList.stream().map(HistoricActivityInstance::getActivityId).collect(Collectors.toList());
if (collect.contains(historicActivityInstance.getActivityId())) {
//情况已经执行任务 处理驳回的情况
activityInstanceList.clear();
if (newHisTaskInstanceList.size() > 0) {
for (int j = 0; j < newHisTaskInstanceList.size(); j++) {
HistoricActivityInstance historicTaskInstance = newHisTaskInstanceList.get(j);
if (historicTaskInstance.getActivityId().equals(historicActivityInstance.getActivityId())) { //如果列表中已包括
newHisTaskInstanceList.clear();
newHisTaskInstanceList.add(historicActivityInstance);
break;
} else {
newHisTaskInstanceList.add(historicActivityInstance);
break;
}
}
} else {
newHisTaskInstanceList.add(historicActivityInstance);
}
activityInstanceList.add(historicActivityInstance);
}
}
}
for (int i = 0; i < newHisActInstanceList.size(); i++) {
HistoricActivityInstance historicActivityInstance = newHisActInstanceList.get(i);
newHisTaskInstanceList.add(historicActivityInstance);
}
activityInstanceList.addAll(startEndEventList);
List<String> executedActivityIdList = new ArrayList<String>(); // 构造已执行的节点ID集合
for (HistoricActivityInstance activityInstance : newHisTaskInstanceList) {
executedActivityIdList.add(activityInstance.getActivityId());
}
BpmnModel bpmnModel = repositoryService.getBpmnModel(historicProcessInstance.getProcessDefinitionId()); // 获取bpmnModel
List<String> flowIds = this.getExecutedFlows(bpmnModel, activityInstanceList); // 获取流程已发生流转的线ID集合
List<String> idList = activityInstanceList.stream().map(HistoricActivityInstance::getActivityId).collect(Collectors.toList());
actUtil.responsePng(response, bpmnModel, idList, flowIds);
List<String> flowIds = this.getExecutedFlows(bpmnModel, newHisTaskInstanceList); // 获取流程已发生流转的线ID集合
actUtil.responsePng(response, bpmnModel, executedActivityIdList, flowIds);
} catch (Exception e) {
logger.error("an exception happens in try catch statement", e);
}
@ -203,31 +213,35 @@ public class ActProcInsService {
}
public List<String> getExecutedFlows(BpmnModel bpmnModel, List<HistoricActivityInstance> historicActivityInstances) {
List<String> flowIdList = new ArrayList<String>(); //流转线ID集合
List<String> flowIdList = new ArrayList<String>(); //流转线ID集合
List<FlowNode> historicFlowNodeList = new LinkedList<FlowNode>(); //全部活动实例
List<HistoricActivityInstance> finishedActivityInstanceList = new LinkedList<HistoricActivityInstance>(); //已完成的历史活动节点
List list = new ArrayList();
Process mainProcess = bpmnModel.getMainProcess();
for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) {
FlowNode flowElement = (FlowNode) mainProcess.getFlowElement(historicActivityInstance.getActivityId(), true);
historicFlowNodeList.add(flowElement);
historicFlowNodeList.add((FlowNode) bpmnModel.getMainProcess().getFlowElement(historicActivityInstance.getActivityId(), true));
if (historicActivityInstance.getEndTime() != null) {
finishedActivityInstanceList.add(historicActivityInstance);
}
}
for (int x = 0; x < historicActivityInstances.size(); x++) {
HistoricActivityInstance historicActivityInstance = historicActivityInstances.get(x);
String activityType = historicActivityInstance.getActivityType();
String activityId = historicActivityInstance.getActivityId();
if (!list.contains(activityId)) {
if (!list.contains(activityId) && ("userTask".equals(activityType)
|| "serviceTask".equals(activityType)
|| "endEvent".equals(activityType)
|| "exclusiveGateway".equals(activityType)
|| "parallelGateway".equals(activityType))) {
list.add(activityId);
}
}
/**遍历已完成的活动实例从每个实例的outgoingFlows中找到已执行的*/
FlowNode currentFlowNode = null;
for (HistoricActivityInstance currentActivityInstance : finishedActivityInstanceList) {
/**获得当前活动对应的节点信息及outgoingFlows信息*/
currentFlowNode = (FlowNode) mainProcess.getFlowElement(currentActivityInstance.getActivityId(), true);
currentFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(currentActivityInstance.getActivityId(), true);
List<SequenceFlow> sequenceFlowList = currentFlowNode.getOutgoingFlows();
/**
* outgoingFlows
@ -236,15 +250,17 @@ public class ActProcInsService {
* 2.outgoingFlows
*/
FlowNode targetFlowNode = null;
if ("parallelGateway".equals(currentActivityInstance.getActivityType()) || "inclusiveGateway".equals(currentActivityInstance.getActivityType())) {
if ("parallelGateway".equals(currentActivityInstance.getActivityType())
|| "inclusiveGateway".equals(currentActivityInstance.getActivityType())) {
for (SequenceFlow sequenceFlow : sequenceFlowList) { //遍历历史活动节点找到匹配Flow目标节点的
targetFlowNode = (FlowNode) mainProcess.getFlowElement(sequenceFlow.getTargetRef(), true);
targetFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(sequenceFlow.getTargetRef(), true);
if (historicFlowNodeList.contains(targetFlowNode)) {
flowIdList.add(sequenceFlow.getId());
}
}
} else {
List<Map<String, String>> tempMapList = new LinkedList<Map<String, String>>();
// for(SequenceFlow sequenceFlow : sequenceFlowList) { //遍历历史活动节点找到匹配Flow目标节点的
for (int i = 0; i < sequenceFlowList.size(); i++) { //遍历历史活动节点找到匹配Flow目标节点的
SequenceFlow sequenceFlow = sequenceFlowList.get(i);
int taskSeq = list.indexOf(sequenceFlow.getSourceRef()); // 获取当前flow目标节点key在审批顺序
@ -271,9 +287,9 @@ public class ActProcInsService {
flowId = map.get("flowId");
flowIdList.add(flowId);
}
}
}
return flowIdList;
}
}