瀏覽代碼

update 修改流程定义删除

gssong 1 年之前
父節點
當前提交
cf81f641bd

+ 7 - 6
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java

@@ -2,6 +2,7 @@ package org.dromara.workflow.controller;
 
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -83,14 +84,14 @@ public class ActProcessDefinitionController extends BaseController {
     /**
      * 删除流程定义
      *
-     * @param deploymentId        部署id
-     * @param processDefinitionId 流程定义id
+     * @param deploymentIds        部署id
+     * @param processDefinitionIds 流程定义id
      */
     @Log(title = "流程定义管理", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{deploymentId}/{processDefinitionId}")
-    public R<Void> deleteDeployment(@NotBlank(message = "流程部署id不能为空") @PathVariable String deploymentId,
-                                    @NotBlank(message = "流程定义id不能为空") @PathVariable String processDefinitionId) {
-        return toAjax(actProcessDefinitionService.deleteDeployment(deploymentId, processDefinitionId));
+    @DeleteMapping("/{deploymentIds}/{processDefinitionIds}")
+    public R<Void> deleteDeployment(@NotNull(message = "流程部署id不能为空") @PathVariable List<String> deploymentIds,
+                                    @NotNull(message = "流程定义id不能为空") @PathVariable List<String> processDefinitionIds) {
+        return toAjax(actProcessDefinitionService.deleteDeployment(deploymentIds, processDefinitionIds));
     }
 
     /**

+ 3 - 3
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessDefinitionService.java

@@ -50,11 +50,11 @@ public interface IActProcessDefinitionService {
     /**
      * 删除流程定义
      *
-     * @param deploymentId        部署id
-     * @param processDefinitionId 流程定义id
+     * @param deploymentIds        部署id
+     * @param processDefinitionIds 流程定义id
      * @return 结果
      */
-    boolean deleteDeployment(String deploymentId, String processDefinitionId);
+    boolean deleteDeployment(List<String> deploymentIds, List<String> processDefinitionIds);
 
     /**
      * 激活或者挂起流程定义

+ 18 - 13
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java

@@ -35,6 +35,7 @@ import org.dromara.workflow.utils.QueryUtils;
 import org.flowable.bpmn.model.UserTask;
 import org.flowable.engine.ProcessMigrationService;
 import org.flowable.engine.RepositoryService;
+import org.flowable.engine.history.HistoricProcessInstance;
 import org.flowable.engine.impl.bpmn.deployer.ResourceNameUtil;
 import org.flowable.engine.repository.*;
 import org.flowable.task.api.history.HistoricTaskInstance;
@@ -45,9 +46,7 @@ import org.springframework.web.multipart.MultipartFile;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
@@ -188,24 +187,30 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer
     /**
      * 删除流程定义
      *
-     * @param deploymentId        部署id
-     * @param processDefinitionId 流程定义id
+     * @param deploymentIds        部署id
+     * @param processDefinitionIds 流程定义id
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean deleteDeployment(String deploymentId, String processDefinitionId) {
+    public boolean deleteDeployment(List<String> deploymentIds, List<String> processDefinitionIds) {
         try {
-            List<HistoricTaskInstance> taskInstanceList = QueryUtils.hisTaskInstanceQuery()
-                .processDefinitionId(processDefinitionId).list();
-            if (CollectionUtil.isNotEmpty(taskInstanceList)) {
-                throw new ServiceException("当前流程定义已被使用不可删除!");
+            List<HistoricProcessInstance> historicProcessInstances = QueryUtils.hisInstanceQuery().deploymentIdIn(deploymentIds).list();
+            if (CollectionUtil.isNotEmpty(historicProcessInstances)) {
+                Set<String> defIds = StreamUtils.toSet(historicProcessInstances, HistoricProcessInstance::getProcessDefinitionId);
+                List<ProcessDefinition> processDefinitions = QueryUtils.definitionQuery().processDefinitionIds(defIds).list();
+                if (CollUtil.isNotEmpty(processDefinitions)) {
+                    Set<String> keys = StreamUtils.toSet(processDefinitions, ProcessDefinition::getKey);
+                    throw new ServiceException("当前【" + String.join(",", keys) + "】流程定义已被使用不可删除!");
+                }
             }
             //删除流程定义
-            repositoryService.deleteDeployment(deploymentId);
+            for (String deploymentId : deploymentIds) {
+                repositoryService.deleteDeployment(deploymentId);
+            }
             //删除流程定义配置
-            iWfDefinitionConfigService.deleteByDefIds(Collections.singletonList(processDefinitionId));
+            iWfDefinitionConfigService.deleteByDefIds(processDefinitionIds);
             //删除节点配置
-            iWfNodeConfigService.deleteByDefIds(Collections.singletonList(processDefinitionId));
+            iWfNodeConfigService.deleteByDefIds(processDefinitionIds);
             return true;
         } catch (Exception e) {
             e.printStackTrace();