From 0b04ac79d0fec886d15683e84e76b2e811814054 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: 星期日, 02 六月 2024 14:42:05 +0800 Subject: [PATCH] update 优化调整自定义监听 --- ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java | 156 ++++++++++++++++----------------------------------- 1 files changed, 50 insertions(+), 106 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java index 6339302..9937f7a 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java @@ -26,8 +26,7 @@ import org.dromara.workflow.flowable.CustomDefaultProcessDiagramGenerator; import org.dromara.workflow.flowable.cmd.DeleteExecutionCmd; import org.dromara.workflow.flowable.cmd.ExecutionChildByExecutionIdCmd; -import org.dromara.workflow.flowable.strategy.FlowEventStrategy; -import org.dromara.workflow.flowable.strategy.FlowProcessEventHandler; +import org.dromara.workflow.flowable.handler.FlowProcessEventHandler; import org.dromara.workflow.service.IActHiProcinstService; import org.dromara.workflow.service.IActProcessInstanceService; import org.dromara.workflow.service.IWfNodeConfigService; @@ -75,9 +74,9 @@ private final TaskService taskService; private final IActHiProcinstService actHiProcinstService; private final ManagementService managementService; - private final FlowEventStrategy flowEventStrategy; private final IWfTaskBackNodeService wfTaskBackNodeService; private final IWfNodeConfigService wfNodeConfigService; + private final FlowProcessEventHandler flowProcessEventHandler; @Value("${flowable.activity-font-name}") private String activityFontName; @@ -184,28 +183,28 @@ } /** - * 閫氳繃娴佺▼瀹炰緥id鑾峰彇鍘嗗彶娴佺▼鍥� + * 閫氳繃涓氬姟id鑾峰彇鍘嗗彶娴佺▼鍥� * - * @param processInstanceId 娴佺▼瀹炰緥id + * @param businessKey 涓氬姟id */ @SneakyThrows @Override - public String getHistoryImage(String processInstanceId) { + public String getHistoryImage(String businessKey) { String processDefinitionId; // 鑾峰彇褰撳墠鐨勬祦绋嬪疄渚� - ProcessInstance processInstance = QueryUtils.instanceQuery(processInstanceId).singleResult(); + ProcessInstance processInstance = QueryUtils.businessKeyQuery(businessKey).singleResult(); // 濡傛灉娴佺▼宸茬粡缁撴潫锛屽垯寰楀埌缁撴潫鑺傜偣 if (Objects.isNull(processInstance)) { - HistoricProcessInstance pi = QueryUtils.hisInstanceQuery(processInstanceId).singleResult(); + HistoricProcessInstance pi = QueryUtils.hisInstanceQuery().processInstanceBusinessKey(businessKey).singleResult(); processDefinitionId = pi.getProcessDefinitionId(); } else { // 鏍规嵁娴佺▼瀹炰緥ID鑾峰緱褰撳墠澶勪簬娲诲姩鐘舵�佺殑ActivityId鍚堥泦 - ProcessInstance pi = QueryUtils.instanceQuery(processInstanceId).singleResult(); + ProcessInstance pi = QueryUtils.instanceQuery(processInstance.getProcessInstanceId()).singleResult(); processDefinitionId = pi.getProcessDefinitionId(); } // 鑾峰緱娲诲姩鐨勮妭鐐� - List<HistoricActivityInstance> highLightedFlowList = QueryUtils.hisActivityInstanceQuery(processInstanceId).orderByHistoricActivityInstanceStartTime().asc().list(); + List<HistoricActivityInstance> highLightedFlowList = QueryUtils.hisActivityInstanceQuery(processInstance.getProcessInstanceId()).orderByHistoricActivityInstanceStartTime().asc().list(); List<String> highLightedFlows = new ArrayList<>(); List<String> highLightedNodes = new ArrayList<>(); @@ -240,15 +239,16 @@ } /** - * 閫氳繃娴佺▼瀹炰緥id鑾峰彇鍘嗗彶娴佺▼鍥捐繍琛屼腑锛屽巻鍙茬瓑鑺傜偣 + * 閫氳繃涓氬姟id鑾峰彇鍘嗗彶娴佺▼鍥捐繍琛屼腑锛屽巻鍙茬瓑鑺傜偣 * - * @param processInstanceId 娴佺▼瀹炰緥id + * @param businessKey 涓氬姟id */ @Override - public Map<String, Object> getHistoryList(String processInstanceId) { + public Map<String, Object> getHistoryList(String businessKey) { Map<String, Object> map = new HashMap<>(); List<Map<String, Object>> taskList = new ArrayList<>(); - HistoricProcessInstance historicProcessInstance = QueryUtils.hisInstanceQuery(processInstanceId).singleResult(); + HistoricProcessInstance historicProcessInstance = QueryUtils.hisBusinessKeyQuery(businessKey).singleResult(); + String processInstanceId = historicProcessInstance.getId(); StringBuilder xml = new StringBuilder(); ProcessDefinition processDefinition = repositoryService.getProcessDefinition(historicProcessInstance.getProcessDefinitionId()); // 鑾峰彇鑺傜偣 @@ -333,14 +333,15 @@ /** * 鑾峰彇瀹℃壒璁板綍 * - * @param processInstanceId 娴佺▼瀹炰緥id + * @param businessKey 涓氬姟id */ @Override - public Map<String, Object> getHistoryRecord(String processInstanceId) { - Map<String, Object> map = new HashMap<>(); + public List<ActHistoryInfoVo> getHistoryRecord(String businessKey) { // 鏌ヨ浠诲姟鍔炵悊璁板綍 - List<HistoricTaskInstance> list = QueryUtils.hisTaskInstanceQuery(processInstanceId).orderByHistoricTaskInstanceEndTime().desc().list(); + List<HistoricTaskInstance> list = QueryUtils.hisTaskBusinessKeyQuery(businessKey).orderByHistoricTaskInstanceEndTime().desc().list(); list = StreamUtils.sorted(list, Comparator.comparing(HistoricTaskInstance::getEndTime, Comparator.nullsFirst(Date::compareTo)).reversed()); + HistoricProcessInstance historicProcessInstance = QueryUtils.hisBusinessKeyQuery(businessKey).singleResult(); + String processInstanceId = historicProcessInstance.getId(); List<ActHistoryInfoVo> actHistoryInfoVoList = new ArrayList<>(); List<Comment> processInstanceComments = taskService.getProcessInstanceComments(processInstanceId); //闄勪欢 @@ -378,16 +379,7 @@ } actHistoryInfoVoList.add(actHistoryInfoVo); } - List<ActHistoryInfoVo> collect = new ArrayList<>(); - // 寰呭姙鐞� - List<ActHistoryInfoVo> waitingTask = StreamUtils.filter(actHistoryInfoVoList, e -> e.getEndTime() == null); - // 宸插姙鐞� - List<ActHistoryInfoVo> finishTask = StreamUtils.filter(actHistoryInfoVoList, e -> e.getEndTime() != null); - collect.addAll(waitingTask); - collect.addAll(finishTask); // 瀹℃壒璁板綍 - map.put("historyRecordList", collect); - List<ActHistoryInfoVo> nodeInfoList = new ArrayList<>(); Map<String, List<ActHistoryInfoVo>> groupByKey = StreamUtils.groupByKey(actHistoryInfoVoList, ActHistoryInfoVo::getTaskDefinitionKey); for (Map.Entry<String, List<ActHistoryInfoVo>> entry : groupByKey.entrySet()) { ActHistoryInfoVo actHistoryInfoVo = BeanUtil.toBean(entry.getValue().get(0), ActHistoryInfoVo.class); @@ -403,39 +395,14 @@ actHistoryInfoVo.setEndTime(null); actHistoryInfoVo.setRunDuration(null); }); - nodeInfoList.add(actHistoryInfoVo); } - // 鑺傜偣淇℃伅 - map.put("nodeListInfo", nodeInfoList); - BpmnModel bpmnModel = repositoryService.getBpmnModel(list.get(0).getProcessDefinitionId()); - List<GraphicInfoVo> graphicInfoVos = new ArrayList<>(); - Collection<FlowElement> flowElements = bpmnModel.getMainProcess().getFlowElements(); - //鑺傜偣鍥惧舰淇℃伅 - buildGraphicInfo(flowElements, graphicInfoVos, bpmnModel); - map.put("graphicInfoVos", graphicInfoVos); - return map; - } + List<ActHistoryInfoVo> recordList = new ArrayList<>(); + // 寰呭姙鐞� + recordList.addAll(StreamUtils.filter(actHistoryInfoVoList, e -> e.getEndTime() == null)); + // 宸插姙鐞� + recordList.addAll(StreamUtils.filter(actHistoryInfoVoList, e -> e.getEndTime() != null)); - /** - * 鏋勫缓鑺傜偣鍥惧舰淇℃伅 - * - * @param flowElements 鑺傜偣 - */ - private static void buildGraphicInfo(Collection<FlowElement> flowElements, List<GraphicInfoVo> graphicInfoVos, BpmnModel bpmnModel) { - for (FlowElement flowElement : flowElements) { - if (flowElement instanceof SubProcess) { - Collection<FlowElement> subFlowElements = ((SubProcess) flowElement).getFlowElements(); - buildGraphicInfo(subFlowElements, graphicInfoVos, bpmnModel); - } else { - if (flowElement instanceof UserTask) { - GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowElement.getId()); - GraphicInfoVo graphicInfoVo = BeanUtil.toBean(graphicInfo, GraphicInfoVo.class); - graphicInfoVo.setNodeId(flowElement.getId()); - graphicInfoVo.setNodeName(flowElement.getName()); - graphicInfoVos.add(graphicInfoVo); - } - } - } + return recordList; } /** @@ -475,7 +442,8 @@ @Transactional(rollbackFor = Exception.class) public boolean deleteRunInstance(ProcessInvalidBo processInvalidBo) { try { - List<Task> list = QueryUtils.taskQuery(processInvalidBo.getProcessInstanceId()).list(); + List<Task> list = QueryUtils.taskQuery().processInstanceBusinessKey(processInvalidBo.getBusinessKey()).list(); + String processInstanceId = list.get(0).getProcessInstanceId(); List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId())); if (CollUtil.isNotEmpty(subTasks)) { subTasks.forEach(e -> taskService.deleteTask(e.getId())); @@ -487,14 +455,13 @@ for (Task task : StreamUtils.filter(list, e -> StringUtils.isBlank(e.getParentTaskId()))) { taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.INVALID.getStatus(), deleteReason); } - HistoricProcessInstance historicProcessInstance = QueryUtils.hisInstanceQuery(processInvalidBo.getProcessInstanceId()).singleResult(); + HistoricProcessInstance historicProcessInstance = QueryUtils.hisInstanceQuery(processInstanceId).singleResult(); BusinessStatusEnum.checkInvalidStatus(historicProcessInstance.getBusinessStatus()); - runtimeService.updateBusinessStatus(processInvalidBo.getProcessInstanceId(), BusinessStatusEnum.INVALID.getStatus()); - runtimeService.deleteProcessInstance(processInvalidBo.getProcessInstanceId(), deleteReason); - FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(historicProcessInstance.getProcessDefinitionKey()); - if (processHandler != null) { - processHandler.handleProcess(historicProcessInstance.getBusinessKey(), BusinessStatusEnum.INVALID.getStatus(), false); - } + runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.INVALID.getStatus()); + runtimeService.deleteProcessInstance(processInstanceId, deleteReason); + //娴佺▼浣滃簾鐩戝惉 + flowProcessEventHandler.processHandler(historicProcessInstance.getProcessDefinitionKey(), + historicProcessInstance.getBusinessKey(), BusinessStatusEnum.INVALID.getStatus(), false); return true; } catch (Exception e) { e.printStackTrace(); @@ -505,40 +472,11 @@ /** * 杩愯涓殑瀹炰緥 鍒犻櫎绋嬪疄渚嬶紝鍒犻櫎鍘嗗彶璁板綍锛屽垹闄や笟鍔′笌娴佺▼鍏宠仈淇℃伅 * - * @param processInstanceIds 娴佺▼瀹炰緥id - */ - @Override - @Transactional(rollbackFor = Exception.class) - public boolean deleteRunAndHisInstance(List<String> processInstanceIds) { - try { - // 1.鍒犻櫎杩愯涓祦绋嬪疄渚� - List<Task> list = QueryUtils.taskQuery(processInstanceIds).list(); - List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId())); - if (CollUtil.isNotEmpty(subTasks)) { - subTasks.forEach(e -> taskService.deleteTask(e.getId())); - } - runtimeService.bulkDeleteProcessInstances(processInstanceIds, LoginHelper.getUserId() + "鍒犻櫎浜嗗綋鍓嶆祦绋嬬敵璇�"); - // 2.鍒犻櫎鍘嗗彶璁板綍 - List<HistoricProcessInstance> historicProcessInstanceList = QueryUtils.hisInstanceQuery(new HashSet<>(processInstanceIds)).list(); - if (ObjectUtil.isNotEmpty(historicProcessInstanceList)) { - historyService.bulkDeleteHistoricProcessInstances(processInstanceIds); - } - wfTaskBackNodeService.deleteByInstanceIds(processInstanceIds); - return true; - } catch (Exception e) { - e.printStackTrace(); - throw new ServiceException(e.getMessage()); - } - } - - /** - * 鎸夌収涓氬姟id鍒犻櫎 杩愯涓殑瀹炰緥 鍒犻櫎绋嬪疄渚嬶紝鍒犻櫎鍘嗗彶璁板綍锛屽垹闄や笟鍔′笌娴佺▼鍏宠仈淇℃伅 - * * @param businessKeys 涓氬姟id */ @Override @Transactional(rollbackFor = Exception.class) - public boolean deleteRunAndHisInstanceByBusinessKeys(List<String> businessKeys) { + public boolean deleteRunAndHisInstance(List<String> businessKeys) { try { // 1.鍒犻櫎杩愯涓祦绋嬪疄渚� List<ActHiProcinst> actHiProcinsts = actHiProcinstService.selectByBusinessKeyIn(businessKeys); @@ -569,12 +507,18 @@ /** * 宸插畬鎴愮殑瀹炰緥 鍒犻櫎绋嬪疄渚嬶紝鍒犻櫎鍘嗗彶璁板綍锛屽垹闄や笟鍔′笌娴佺▼鍏宠仈淇℃伅 * - * @param processInstanceIds 娴佺▼瀹炰緥id + * @param businessKeys 涓氬姟id */ @Override @Transactional(rollbackFor = Exception.class) - public boolean deleteFinishAndHisInstance(List<String> processInstanceIds) { + public boolean deleteFinishAndHisInstance(List<String> businessKeys) { try { + List<ActHiProcinst> actHiProcinsts = actHiProcinstService.selectByBusinessKeyIn(businessKeys); + if (CollUtil.isEmpty(actHiProcinsts)) { + log.warn("褰撳墠涓氬姟ID:{}鏌ヨ鍒版祦绋嬪疄渚嬩负绌猴紒", businessKeys); + return false; + } + List<String> processInstanceIds = StreamUtils.toList(actHiProcinsts, ActHiProcinst::getId); historyService.bulkDeleteHistoricProcessInstances(processInstanceIds); wfTaskBackNodeService.deleteByInstanceIds(processInstanceIds); return true; @@ -587,13 +531,13 @@ /** * 鎾ら攢娴佺▼鐢宠 * - * @param processInstanceId 娴佺▼瀹炰緥id + * @param businessKey 涓氬姟id */ @Override @Transactional(rollbackFor = Exception.class) - public boolean cancelProcessApply(String processInstanceId) { + public boolean cancelProcessApply(String businessKey) { try { - ProcessInstance processInstance = QueryUtils.instanceQuery(processInstanceId) + ProcessInstance processInstance = QueryUtils.businessKeyQuery(businessKey) .startedBy(String.valueOf(LoginHelper.getUserId())).singleResult(); if (ObjectUtil.isNull(processInstance)) { throw new ServiceException("鎮ㄤ笉鏄祦绋嬪彂璧蜂汉,鎾ら攢澶辫触!"); @@ -601,13 +545,14 @@ if (processInstance.isSuspended()) { throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); } + String processInstanceId = processInstance.getId(); BusinessStatusEnum.checkCancelStatus(processInstance.getBusinessStatus()); List<Task> taskList = QueryUtils.taskQuery(processInstanceId).list(); for (Task task : taskList) { taskService.setAssignee(task.getId(), null); taskService.addComment(task.getId(), processInstanceId, TaskStatusEnum.CANCEL.getStatus(), LoginHelper.getLoginUser().getNickname() + "锛氭挙閿�鐢宠"); } - HistoricTaskInstance historicTaskInstance = QueryUtils.hisTaskInstanceQuery().finished().orderByHistoricTaskInstanceEndTime().asc().list().get(0); + HistoricTaskInstance historicTaskInstance = QueryUtils.hisTaskInstanceQuery(processInstanceId).finished().orderByHistoricTaskInstanceEndTime().asc().list().get(0); List<String> nodeIds = StreamUtils.toList(taskList, Task::getTaskDefinitionKey); runtimeService.createChangeActivityStateBuilder() .processInstanceId(processInstanceId) @@ -623,10 +568,9 @@ managementService.executeCommand(deleteExecutionCmd); } runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.CANCEL.getStatus()); - FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey()); - if (processHandler != null) { - processHandler.handleProcess(processInstance.getBusinessKey(), BusinessStatusEnum.CANCEL.getStatus(), false); - } + //娴佺▼浣滃簾鐩戝惉 + flowProcessEventHandler.processHandler(processInstance.getProcessDefinitionKey(), + processInstance.getBusinessKey(), BusinessStatusEnum.CANCEL.getStatus(), false); return true; } catch (Exception e) { e.printStackTrace(); -- Gitblit v1.9.3