|
@@ -1,40 +1,40 @@
|
|
|
package com.ruoyi.project.ehs.controller;
|
|
|
|
|
|
-import java.io.IOException;
|
|
|
-import java.io.InputStream;
|
|
|
-import java.io.OutputStream;
|
|
|
-import java.net.URLDecoder;
|
|
|
-import java.text.SimpleDateFormat;
|
|
|
-import java.util.*;
|
|
|
-
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
-import com.ruoyi.common.utils.file.FileUploadUtils;
|
|
|
import com.ruoyi.common.utils.http.HttpContextUtils;
|
|
|
-import com.ruoyi.framework.config.RuoYiConfig;
|
|
|
+import com.ruoyi.common.utils.poi.ExcelUtil;
|
|
|
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
|
|
|
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
|
|
|
+import com.ruoyi.framework.web.controller.BaseController;
|
|
|
+import com.ruoyi.framework.web.domain.AjaxResult;
|
|
|
+import com.ruoyi.framework.web.page.TableDataInfo;
|
|
|
import com.ruoyi.project.apply.domain.TApplyOfflinevalve;
|
|
|
import com.ruoyi.project.apply.domain.TApplySafetychange;
|
|
|
import com.ruoyi.project.apply.service.ITApplyOfflinevalveService;
|
|
|
import com.ruoyi.project.apply.service.ITApplySafetychangeService;
|
|
|
import com.ruoyi.project.approve.damain.DevProcess;
|
|
|
import com.ruoyi.project.approve.damain.DevTask;
|
|
|
-import com.ruoyi.project.common.domain.TCommonfile;
|
|
|
import com.ruoyi.project.common.service.ITCommonfileService;
|
|
|
import com.ruoyi.project.ehs.domain.TApproveAccident;
|
|
|
+import com.ruoyi.project.ehs.domain.TApproveDanger;
|
|
|
import com.ruoyi.project.ehs.service.ITApproveAccidentService;
|
|
|
+import com.ruoyi.project.ehs.service.ITApproveDangerService;
|
|
|
import com.ruoyi.project.intact.domain.TApproveMaintenance;
|
|
|
import com.ruoyi.project.intact.domain.TIntactApprove;
|
|
|
import com.ruoyi.project.intact.service.ITApproveMaintenanceService;
|
|
|
import com.ruoyi.project.intact.service.ITIntactApproveService;
|
|
|
import com.ruoyi.project.invoice.domain.TApproveReserveInvoice;
|
|
|
import com.ruoyi.project.invoice.service.ITApproveReserveInvoiceService;
|
|
|
-import com.ruoyi.project.listener.*;
|
|
|
+import com.ruoyi.project.listener.EndSucessListener;
|
|
|
+import com.ruoyi.project.listener.ExecutorTaskCreateListener;
|
|
|
+import com.ruoyi.project.listener.RecorderTaskCreateListener;
|
|
|
+import com.ruoyi.project.listener.VerificationTaskCreateListener;
|
|
|
import com.ruoyi.project.reliability.domain.TKekaoApprove;
|
|
|
import com.ruoyi.project.reliability.service.ITKekaoApproveService;
|
|
|
import com.ruoyi.project.sems.domain.TApprove;
|
|
|
import com.ruoyi.project.sems.his.domain.TApproveSpecModify;
|
|
|
import com.ruoyi.project.sems.his.service.ITApproveSpecModifyService;
|
|
|
import com.ruoyi.project.sems.service.ITApproveService;
|
|
|
-import com.ruoyi.project.system.domain.SysDept;
|
|
|
import com.ruoyi.project.system.domain.SysUser;
|
|
|
import com.ruoyi.project.system.domain.SysUserRole;
|
|
|
import com.ruoyi.project.system.service.ISysUserService;
|
|
@@ -56,20 +56,17 @@ import org.activiti.engine.task.Comment;
|
|
|
import org.activiti.engine.task.Task;
|
|
|
import org.activiti.image.impl.DefaultProcessDiagramGenerator;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
-import org.springframework.security.access.prepost.PreAuthorize;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.security.access.prepost.PreAuthorize;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
|
|
|
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
|
|
|
-import com.ruoyi.project.ehs.domain.TApproveDanger;
|
|
|
-import com.ruoyi.project.ehs.service.ITApproveDangerService;
|
|
|
-import com.ruoyi.framework.web.controller.BaseController;
|
|
|
-import com.ruoyi.framework.web.domain.AjaxResult;
|
|
|
-import com.ruoyi.common.utils.poi.ExcelUtil;
|
|
|
-import com.ruoyi.framework.web.page.TableDataInfo;
|
|
|
-import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.InputStream;
|
|
|
+import java.io.OutputStream;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 隐患申请Controller
|
|
@@ -731,8 +728,13 @@ public class TApproveDangerController extends BaseController {
|
|
|
for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) {
|
|
|
highLightedActivitiIds.add(historicActivityInstance.getActivityId());
|
|
|
}
|
|
|
+ //获取已完成的节点
|
|
|
+ List<HistoricActivityInstance> finished = historyService.createHistoricActivityInstanceQuery()
|
|
|
+ .processInstanceId(processId)
|
|
|
+ .finished().list();
|
|
|
//高亮线路id集合
|
|
|
- List<String> highLightedFlowIds = getHighLightedFlows(bpmnModel, historicActivityInstances);
|
|
|
+// List<String> highLightedFlowIds = getHighLightedFlows(bpmnModel, historicActivityInstances);
|
|
|
+ List<String> highLightedFlowIds = getHighLine(bpmnModel, historicActivityInstances,finished);
|
|
|
DefaultProcessDiagramGenerator generator = new DefaultProcessDiagramGenerator();
|
|
|
|
|
|
// 生成流程图
|
|
@@ -834,4 +836,74 @@ public class TApproveDangerController extends BaseController {
|
|
|
}
|
|
|
return highLightedFlowIds;
|
|
|
}
|
|
|
+
|
|
|
+ private List<String> getHighLine(BpmnModel bpmnModel, List<HistoricActivityInstance> historicActivityInstances, List<HistoricActivityInstance> finishedActivityInstances) {
|
|
|
+
|
|
|
+ // 高亮流程已发生流转的线id集合
|
|
|
+ List<String> highLightedFlowIds = new ArrayList<>();
|
|
|
+ // 全部活动节点
|
|
|
+ List<FlowNode> historicActivityNodes = new ArrayList<>();
|
|
|
+
|
|
|
+ //1、拿到所有的活动节点定义
|
|
|
+ for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) {
|
|
|
+ FlowNode flowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(historicActivityInstance.getActivityId(), true);
|
|
|
+ historicActivityNodes.add(flowNode);
|
|
|
+ }
|
|
|
+
|
|
|
+ FlowNode currentFlowNode;
|
|
|
+ FlowNode targetFlowNode;
|
|
|
+ // 2、遍历已完成的活动实例,从每个实例的outgoingFlows中找到已执行的
|
|
|
+ for (HistoricActivityInstance currentActivityInstance : finishedActivityInstances) {
|
|
|
+ // 获得当前活动对应的节点信息及outgoingFlows信息
|
|
|
+ currentFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(currentActivityInstance.getActivityId(), true);
|
|
|
+ List<SequenceFlow> outgoingFlows = currentFlowNode.getOutgoingFlows();
|
|
|
+
|
|
|
+ /*
|
|
|
+ * 遍历outgoingFlows并找到已流转的 满足如下条件认为已已流转:
|
|
|
+ * 1.当前节点是并行网关或包含网关,则通过outgoingFlows能够在历史活动中找到的全部节点均为已流转
|
|
|
+ * 2.当前节点是以上两种类型之外的,通过outgoingFlows查找到的开始时间最早的流转节点视为有效流转
|
|
|
+ */
|
|
|
+ String activityType = currentActivityInstance.getActivityType();
|
|
|
+
|
|
|
+ if ("parallelGateway".equals(currentActivityInstance.getActivityType()) || "inclusiveGateway".equals(currentActivityInstance.getActivityType())) {
|
|
|
+ // 遍历历史活动节点,找到匹配流程目标节点的
|
|
|
+ for (SequenceFlow sequenceFlow : outgoingFlows) {
|
|
|
+ targetFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(sequenceFlow.getTargetRef(), true);
|
|
|
+ if (historicActivityNodes.contains(targetFlowNode)) {
|
|
|
+ highLightedFlowIds.add(targetFlowNode.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ //1、拿到所有的TargetRef
|
|
|
+ List<String> targetRefList = outgoingFlows.stream()
|
|
|
+ .map(SequenceFlow::getTargetRef)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ //2、拿到ActivityId == TargetRef的所有 HistoricActivityInstance
|
|
|
+ List<HistoricActivityInstance> historicActivityInstanceList = historicActivityInstances.stream()
|
|
|
+ .filter((HistoricActivityInstance instance) -> targetRefList.contains(instance.getActivityId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ //3、开始时间>=当前节点结束时间的第一个 HistoricActivityInstance
|
|
|
+ List<HistoricActivityInstance> historicActivityInstanceResultList = historicActivityInstanceList.stream()
|
|
|
+ .filter(historicActivityInstance -> historicActivityInstance.getStartTime()
|
|
|
+ .compareTo(currentActivityInstance.getEndTime()) >= 0)
|
|
|
+ .sorted(Comparator.comparing(HistoricActivityInstance::getStartTime))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (CollectionUtils.isEmpty(historicActivityInstanceResultList)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ HistoricActivityInstance historicActivityInstanceResult = historicActivityInstanceResultList.get(0);
|
|
|
+
|
|
|
+ //4、HistoricActivityInstance拿到flowid
|
|
|
+ List<SequenceFlow> sequenceFlowList = outgoingFlows.stream()
|
|
|
+ .filter(sequenceFlow -> sequenceFlow.getTargetRef().equals(historicActivityInstanceResult.getActivityId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ highLightedFlowIds.addAll(sequenceFlowList.stream().map(e->e.getId()).collect(Collectors.toList()));
|
|
|
+ }
|
|
|
+ return highLightedFlowIds;
|
|
|
+ }
|
|
|
}
|