赵冬冬 3 лет назад
Родитель
Сommit
3ff2f1bf83

BIN
Activiti-REST研究.pdf


+ 31 - 29
src/main/java/com/ruoyi/project/activiti/controller/LeaveNewController.java

@@ -9,15 +9,15 @@ import com.ruoyi.framework.web.page.TableDataInfo;
 import com.ruoyi.project.activiti.domain.*;
 import com.ruoyi.project.activiti.service.LeaveNewService;
 import com.ruoyi.project.system.domain.SysUser;
-import org.activiti.bpmn.model.BpmnModel;
-import org.activiti.bpmn.model.FlowNode;
-import org.activiti.bpmn.model.SequenceFlow;
+import org.activiti.bpmn.model.*;
+import org.activiti.bpmn.model.Process;
 import org.activiti.engine.HistoryService;
 import org.activiti.engine.ProcessEngine;
 import org.activiti.engine.RepositoryService;
 import org.activiti.engine.RuntimeService;
 import org.activiti.engine.history.HistoricActivityInstance;
 import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.history.HistoricTaskInstance;
 import org.activiti.engine.impl.RepositoryServiceImpl;
 import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
 import org.activiti.engine.repository.ProcessDefinition;
@@ -30,10 +30,10 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.lang.reflect.Array;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 请假业务Controller
@@ -253,21 +253,16 @@ public class LeaveNewController extends BaseController {
                         .processInstanceId(processInstanceId).orderByHistoricActivityInstanceId().asc().list();
                 // 已执行的节点ID集合
                 List<String> executedActivityIdList = new ArrayList<String>();
-                int index = 1;
                 //logger.info("获取已经执行的节点ID");
                 for (HistoricActivityInstance activityInstance : historicActivityInstanceList) {
                     executedActivityIdList.add(activityInstance.getActivityId());
-                    //logger.info("第[" + index + "]个已执行节点=" + activityInstance.getActivityId() + " : " +activityInstance.getActivityName());
-                    index++;
                 }
-
                 BpmnModel bpmnModel = repositoryService.getBpmnModel(historicProcessInstance.getProcessDefinitionId());
 
                 // 已执行的线集合
-                List<String> flowIds = new ArrayList<String>();
+                List<String> flowIds = new ArrayList<>();
                 // 获取流程走过的线 (getHighLightedFlows是下面的方法)
                 flowIds = executedFlowIdList(bpmnModel, processDefinition, historicActivityInstanceList);
-
                 // 获取流程图图像字符流
                 ProcessDiagramGenarateExt pec = new ProcessDiagramGenarateExt();
 
@@ -278,6 +273,7 @@ public class LeaveNewController extends BaseController {
                 }
                 //配置字体
                 InputStream imageStream = pec.generateDiagram(end, bpmnModel, "png", executedActivityIdList, flowIds, "宋体", "宋体", "宋体", null, 2.0);
+//                InputStream inputStream = pec.generateDiagram(bpmnModel, "png", executedActivityIdList);
 
                 response.setContentType("image/png");
                 OutputStream os = response.getOutputStream();
@@ -291,34 +287,40 @@ public class LeaveNewController extends BaseController {
             }
             //logger.info("[完成]-获取流程图图像");
         } catch (Exception e) {
-            System.out.println(e.getMessage());
-            //logger.error("【异常】-获取流程图失败!" + e.getMessage());
-            //throw new BusinessException("获取流程图失败!" + e.getMessage());
+            e.printStackTrace();
+            logger.error("【异常】-获取流程图失败!" + e.getMessage());
+            throw new RuntimeException("获取流程图失败!" + e.getMessage());
         }
     }
 
+
     private static List<String> executedFlowIdList(BpmnModel bpmnModel, ProcessDefinitionEntity processDefinitionEntity,
                                                    List<HistoricActivityInstance> historicActivityInstanceList) {
 
         List<String> executedFlowIdList = new ArrayList<>();
-
-
-        for (int i = 0; i < historicActivityInstanceList.size() - 1; i++) {
+        Set<String> ids = new HashSet<>();
+        Map<String, SequenceFlow> flowHashMap = new HashMap<>();
+        List<String> activityIds = historicActivityInstanceList.stream().map(X -> X.getActivityId()).collect(Collectors.toList());
+        for (int i = 0; i < historicActivityInstanceList.size(); i++) {
             HistoricActivityInstance hai = historicActivityInstanceList.get(i);
-            FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(hai.getActivityId());
+            String activityId = hai.getActivityId();
+            FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(activityId);
             List<SequenceFlow> sequenceFlows = flowNode.getOutgoingFlows();
-            if (sequenceFlows.size() > 1) {
-                HistoricActivityInstance nextHai = historicActivityInstanceList.get(i + 1);
-                sequenceFlows.forEach(sequenceFlow -> {
-                    if (sequenceFlow.getTargetFlowElement().getId().equals(nextHai.getActivityId())) {
-                        executedFlowIdList.add(sequenceFlow.getId());
-                    }
-                });
-            } else {
-                executedFlowIdList.add(sequenceFlows.get(0).getId());
+            for (SequenceFlow sequenceFlow : sequenceFlows) {
+                String sourceRef = sequenceFlow.getSourceRef();
+                String targetRef = sequenceFlow.getTargetRef();
+                flowHashMap.put(targetRef, sequenceFlow);
             }
         }
-
+        for (String activityId : activityIds) {
+            for (String s : flowHashMap.keySet()) {
+                if (s.contains(activityId)) {
+                    SequenceFlow sequenceFlow = flowHashMap.get(s);
+                    ids.add(sequenceFlow.getId());
+                }
+            }
+        }
+        executedFlowIdList.addAll(ids);
         return executedFlowIdList;
     }