diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java index eb09d4fc4..5198bd164 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java +++ b/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 deleteDeployment(@NotBlank(message = "流程部署id不能为空") @PathVariable String deploymentId, - @NotBlank(message = "流程定义id不能为空") @PathVariable String processDefinitionId) { - return toAjax(actProcessDefinitionService.deleteDeployment(deploymentId, processDefinitionId)); + @DeleteMapping("/{deploymentIds}/{processDefinitionIds}") + public R deleteDeployment(@NotNull(message = "流程部署id不能为空") @PathVariable List deploymentIds, + @NotNull(message = "流程定义id不能为空") @PathVariable List processDefinitionIds) { + return toAjax(actProcessDefinitionService.deleteDeployment(deploymentIds, processDefinitionIds)); } /** diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessDefinitionService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessDefinitionService.java index 3a88df4e8..5d00e4199 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessDefinitionService.java +++ b/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 deploymentIds, List processDefinitionIds); /** * 激活或者挂起流程定义 diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java index 1627eba95..468e3978e 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java +++ b/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 deploymentIds, List processDefinitionIds) { try { - List taskInstanceList = QueryUtils.hisTaskInstanceQuery() - .processDefinitionId(processDefinitionId).list(); - if (CollectionUtil.isNotEmpty(taskInstanceList)) { - throw new ServiceException("当前流程定义已被使用不可删除!"); + List historicProcessInstances = QueryUtils.hisInstanceQuery().deploymentIdIn(deploymentIds).list(); + if (CollectionUtil.isNotEmpty(historicProcessInstances)) { + Set defIds = StreamUtils.toSet(historicProcessInstances, HistoricProcessInstance::getProcessDefinitionId); + List processDefinitions = QueryUtils.definitionQuery().processDefinitionIds(defIds).list(); + if (CollUtil.isNotEmpty(processDefinitions)) { + Set 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();