From 234d8989d7b65aee665b5932fcf182009753592b Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期三, 06 三月 2024 19:07:23 +0800
Subject: [PATCH] update 优化 支持工作流关闭租户

---
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java |   97 ++++++++++++++++++++++++++++++++++++------------
 1 files changed, 72 insertions(+), 25 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 b195cc7..e49be0d 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
@@ -45,7 +45,9 @@
 import org.flowable.engine.task.Attachment;
 import org.flowable.engine.task.Comment;
 import org.flowable.task.api.Task;
+import org.flowable.task.api.TaskQuery;
 import org.flowable.task.api.history.HistoricTaskInstance;
+import org.flowable.task.api.history.HistoricTaskInstanceQuery;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -96,7 +98,9 @@
     public TableDataInfo<ProcessInstanceVo> getProcessInstanceRunningByPage(ProcessInstanceBo processInstanceBo) {
         List<ProcessInstanceVo> list = new ArrayList<>();
         ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery();
-        query.processInstanceTenantId(TenantHelper.getTenantId());
+        if (TenantHelper.isEnable()) {
+            query.processInstanceTenantId(TenantHelper.getTenantId());
+        }
         if (StringUtils.isNotBlank(processInstanceBo.getName())) {
             query.processInstanceNameLikeIgnoreCase("%" + processInstanceBo.getName() + "%");
         }
@@ -134,7 +138,9 @@
         List<ProcessInstanceVo> list = new ArrayList<>();
         HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery().finished()
             .orderByProcessInstanceEndTime().desc();
-        query.processInstanceTenantId(TenantHelper.getTenantId());
+        if (TenantHelper.isEnable()) {
+            query.processInstanceTenantId(TenantHelper.getTenantId());
+        }
         if (StringUtils.isNotEmpty(processInstanceBo.getName())) {
             query.processInstanceNameLikeIgnoreCase("%" + processInstanceBo.getName() + "%");
         }
@@ -315,8 +321,11 @@
     public Map<String, Object> getHistoryRecord(String processInstanceId) {
         Map<String, Object> map = new HashMap<>();
         // 鏌ヨ浠诲姟鍔炵悊璁板綍
-        List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
-            .processInstanceId(processInstanceId).taskTenantId(TenantHelper.getTenantId()).orderByHistoricTaskInstanceEndTime().desc().list();
+        HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery();
+        if (TenantHelper.isEnable()) {
+            query.taskTenantId(TenantHelper.getTenantId());
+        }
+        List<HistoricTaskInstance> list = query.processInstanceId(processInstanceId).orderByHistoricTaskInstanceEndTime().desc().list();
         list = StreamUtils.sorted(list, Comparator.comparing(HistoricTaskInstance::getEndTime, Comparator.nullsFirst(Date::compareTo)).reversed());
         List<ActHistoryInfoVo> actHistoryInfoVoList = new ArrayList<>();
         List<Comment> processInstanceComments = taskService.getProcessInstanceComments(processInstanceId);
@@ -454,8 +463,11 @@
     @Transactional(rollbackFor = Exception.class)
     public boolean deleteRuntimeProcessInst(ProcessInvalidBo processInvalidBo) {
         try {
-            List<Task> list = taskService.createTaskQuery().processInstanceId(processInvalidBo.getProcessInstanceId())
-                .taskTenantId(TenantHelper.getTenantId()).list();
+            TaskQuery query = taskService.createTaskQuery();
+            if (TenantHelper.isEnable()) {
+                query.taskTenantId(TenantHelper.getTenantId());
+            }
+            List<Task> list = query.processInstanceId(processInvalidBo.getProcessInstanceId()).list();
             List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId()));
             if (CollUtil.isNotEmpty(subTasks)) {
                 subTasks.forEach(e -> taskService.deleteTask(e.getId()));
@@ -467,8 +479,11 @@
             for (Task task : StreamUtils.filter(list, e -> StringUtils.isBlank(e.getParentTaskId()))) {
                 taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.INVALID.getStatus(), deleteReason);
             }
-            HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
-                .processInstanceId(processInvalidBo.getProcessInstanceId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
+            HistoricProcessInstanceQuery query1 = historyService.createHistoricProcessInstanceQuery();
+            if (TenantHelper.isEnable()) {
+                query1.processInstanceTenantId(TenantHelper.getTenantId());
+            }
+            HistoricProcessInstance historicProcessInstance = query1.processInstanceId(processInvalidBo.getProcessInstanceId()).singleResult();
             if (ObjectUtil.isNotEmpty(historicProcessInstance) && BusinessStatusEnum.FINISH.getStatus().equals(historicProcessInstance.getBusinessStatus())) {
                 throw new ServiceException("璇ュ崟鎹凡瀹屾垚鐢宠锛�");
             }
@@ -495,16 +510,22 @@
     public boolean deleteRuntimeProcessAndHisInst(List<String> processInstanceIds) {
         try {
             // 1.鍒犻櫎杩愯涓祦绋嬪疄渚�
-            List<Task> list = taskService.createTaskQuery().processInstanceIdIn(processInstanceIds)
-                .taskTenantId(TenantHelper.getTenantId()).list();
+            TaskQuery query = taskService.createTaskQuery();
+            if (TenantHelper.isEnable()) {
+                query.taskTenantId(TenantHelper.getTenantId());
+            }
+            List<Task> list = query.processInstanceIdIn(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 = historyService.createHistoricProcessInstanceQuery()
-                .processInstanceTenantId(TenantHelper.getTenantId()).processInstanceIds(new HashSet<>(processInstanceIds)).list();
+            HistoricProcessInstanceQuery query1 = historyService.createHistoricProcessInstanceQuery();
+            if (TenantHelper.isEnable()) {
+                query1.processInstanceTenantId(TenantHelper.getTenantId());
+            }
+            List<HistoricProcessInstance> historicProcessInstanceList = query1.processInstanceIds(new HashSet<>(processInstanceIds)).list();
             if (ObjectUtil.isNotEmpty(historicProcessInstanceList)) {
                 historyService.bulkDeleteHistoricProcessInstances(processInstanceIds);
             }
@@ -531,16 +552,22 @@
                 return false;
             }
             List<String> processInstanceIds = StreamUtils.toList(actHiProcinsts, ActHiProcinst::getId);
-            List<Task> list = taskService.createTaskQuery().processInstanceIdIn(processInstanceIds)
-                .taskTenantId(TenantHelper.getTenantId()).list();
+            TaskQuery query = taskService.createTaskQuery();
+            if (TenantHelper.isEnable()) {
+                query.taskTenantId(TenantHelper.getTenantId());
+            }
+            List<Task> list = query.processInstanceIdIn(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 = historyService.createHistoricProcessInstanceQuery()
-                .processInstanceTenantId(TenantHelper.getTenantId()).processInstanceIds(new HashSet<>(processInstanceIds)).list();
+            HistoricProcessInstanceQuery query1 = historyService.createHistoricProcessInstanceQuery();
+            if (TenantHelper.isEnable()) {
+                query1.processInstanceTenantId(TenantHelper.getTenantId());
+            }
+            List<HistoricProcessInstance> historicProcessInstanceList = query1.processInstanceIds(new HashSet<>(processInstanceIds)).list();
             if (ObjectUtil.isNotEmpty(historicProcessInstanceList)) {
                 historyService.bulkDeleteHistoricProcessInstances(processInstanceIds);
             }
@@ -577,8 +604,12 @@
     @Transactional(rollbackFor = Exception.class)
     public boolean cancelProcessApply(String processInstanceId) {
         try {
-            ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
-                .processInstanceId(processInstanceId).processInstanceTenantId(TenantHelper.getTenantId()).startedBy(String.valueOf(LoginHelper.getUserId())).singleResult();
+            ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery();
+            if (TenantHelper.isEnable()) {
+                query.processInstanceTenantId(TenantHelper.getTenantId());
+            }
+            ProcessInstance processInstance = query.processInstanceId(processInstanceId)
+                .startedBy(String.valueOf(LoginHelper.getUserId())).singleResult();
             if (ObjectUtil.isNull(processInstance)) {
                 throw new ServiceException("鎮ㄤ笉鏄祦绋嬪彂璧蜂汉,鎾ら攢澶辫触!");
             }
@@ -588,7 +619,11 @@
             if (BusinessStatusEnum.CANCEL.getStatus().equals(processInstance.getBusinessStatus())) {
                 throw new ServiceException("璇ュ崟鎹凡鎾ら攢锛�");
             }
-            List<Task> taskList = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(processInstanceId).list();
+            TaskQuery query1 = taskService.createTaskQuery();
+            if (TenantHelper.isEnable()) {
+                query1.taskTenantId(TenantHelper.getTenantId());
+            }
+            List<Task> taskList = query1.processInstanceId(processInstanceId).list();
             for (Task task : taskList) {
                 taskService.setAssignee(task.getId(), String.valueOf(LoginHelper.getUserId()));
                 taskService.addComment(task.getId(), processInstanceId, TaskStatusEnum.CANCEL.getStatus(), LoginHelper.getLoginUser().getNickname() + "锛氭挙閿�鐢宠");
@@ -598,7 +633,11 @@
             runtimeService.createChangeActivityStateBuilder()
                 .processInstanceId(processInstanceId)
                 .moveActivityIdsToSingleActivityId(nodeIds, historicTaskInstance.getTaskDefinitionKey()).changeState();
-            Task task = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(processInstanceId).list().get(0);
+            TaskQuery query2 = taskService.createTaskQuery();
+            if (TenantHelper.isEnable()) {
+                query2.taskTenantId(TenantHelper.getTenantId());
+            }
+            Task task = query2.processInstanceId(processInstanceId).list().get(0);
             taskService.setAssignee(task.getId(), historicTaskInstance.getAssignee());
             //鑾峰彇骞惰缃戝叧鎵ц鍚庝繚鐣欑殑鎵ц瀹炰緥鏁版嵁
             ExecutionChildByExecutionIdCmd childByExecutionIdCmd = new ExecutionChildByExecutionIdCmd(task.getExecutionId());
@@ -629,7 +668,9 @@
     public TableDataInfo<ProcessInstanceVo> getCurrentSubmitByPage(ProcessInstanceBo processInstanceBo) {
         List<ProcessInstanceVo> list = new ArrayList<>();
         HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery();
-        query.processInstanceTenantId(TenantHelper.getTenantId());
+        if (TenantHelper.isEnable()) {
+            query.processInstanceTenantId(TenantHelper.getTenantId());
+        }
         query.startedBy(processInstanceBo.getStartUserId());
         if (StringUtils.isNotBlank(processInstanceBo.getName())) {
             query.processInstanceNameLikeIgnoreCase("%" + processInstanceBo.getName() + "%");
@@ -648,7 +689,11 @@
         List<TaskVo> taskVoList = new ArrayList<>();
         if (CollUtil.isNotEmpty(historicProcessInstanceList)) {
             List<String> processInstanceIds = StreamUtils.toList(historicProcessInstanceList, HistoricProcessInstance::getId);
-            List<Task> taskList = taskService.createTaskQuery().processInstanceIdIn(processInstanceIds).taskTenantId(TenantHelper.getTenantId()).list();
+            TaskQuery query1 = taskService.createTaskQuery();
+            if (TenantHelper.isEnable()) {
+                query1.taskTenantId(TenantHelper.getTenantId());
+            }
+            List<Task> taskList = query1.processInstanceIdIn(processInstanceIds).list();
             for (Task task : taskList) {
                 taskVoList.add(BeanUtil.toBean(task, TaskVo.class));
             }
@@ -675,9 +720,11 @@
     @Transactional(rollbackFor = Exception.class)
     public boolean taskUrging(TaskUrgingBo taskUrgingBo) {
         try {
-            ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
-                .processInstanceId(taskUrgingBo.getProcessInstanceId())
-                .processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
+            ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery();
+            if (TenantHelper.isEnable()) {
+                query.processInstanceTenantId(TenantHelper.getTenantId());
+            }
+            ProcessInstance processInstance = query.processInstanceId(taskUrgingBo.getProcessInstanceId()).singleResult();
             if (processInstance == null) {
                 throw new ServiceException("浠诲姟宸茬粨鏉燂紒");
             }

--
Gitblit v1.9.3