update 优化流程实例删除

This commit is contained in:
gssong 2023-06-18 20:48:45 +08:00
parent 1eb778f914
commit 4c36f0afc2
3 changed files with 28 additions and 26 deletions

View File

@ -2,6 +2,7 @@ package org.dromara.workflow.controller;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
@ -86,22 +87,22 @@ public class ActProcessInstanceController extends BaseController {
/** /**
* 运行中的实例 删除程实例删除历史记录删除业务与流程关联信息 * 运行中的实例 删除程实例删除历史记录删除业务与流程关联信息
* *
* @param processInstanceId 流程实例id * @param processInstanceIds 流程实例id
*/ */
@Log(title = "流程实例管理", businessType = BusinessType.DELETE) @Log(title = "流程实例管理", businessType = BusinessType.DELETE)
@DeleteMapping("/deleteRuntimeProcessAndHisInst/{processInstanceId}") @DeleteMapping("/deleteRuntimeProcessAndHisInst/{processInstanceIds}")
public R<Void> deleteRuntimeProcessAndHisInst(@NotBlank(message = "流程实例id不能为空") @PathVariable String processInstanceId) { public R<Void> deleteRuntimeProcessAndHisInst(@NotNull(message = "流程实例id不能为空") @PathVariable String[] processInstanceIds) {
return toAjax(iActProcessInstanceService.deleteRuntimeProcessAndHisInst(processInstanceId)); return toAjax(iActProcessInstanceService.deleteRuntimeProcessAndHisInst(processInstanceIds));
} }
/** /**
* 已完成的实例 删除程实例删除历史记录删除业务与流程关联信息 * 已完成的实例 删除程实例删除历史记录删除业务与流程关联信息
* *
* @param processInstanceId 流程实例id * @param processInstanceIds 流程实例id
*/ */
@Log(title = "流程实例管理", businessType = BusinessType.DELETE) @Log(title = "流程实例管理", businessType = BusinessType.DELETE)
@DeleteMapping("/deleteFinishProcessAndHisInst/{processInstanceId}") @DeleteMapping("/deleteFinishProcessAndHisInst/{processInstanceIds}")
public R<Void> deleteFinishProcessAndHisInst(@NotBlank(message = "流程实例id不能为空") @PathVariable String processInstanceId) { public R<Void> deleteFinishProcessAndHisInst(@NotNull(message = "流程实例id不能为空") @PathVariable String[] processInstanceIds) {
return toAjax(iActProcessInstanceService.deleteFinishProcessAndHisInst(processInstanceId)); return toAjax(iActProcessInstanceService.deleteFinishProcessAndHisInst(processInstanceIds));
} }
} }

View File

@ -4,10 +4,8 @@ import jakarta.servlet.http.HttpServletResponse;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.workflow.domain.bo.ProcessInstanceBo; import org.dromara.workflow.domain.bo.ProcessInstanceBo;
import org.dromara.workflow.domain.bo.ProcessInvalidBo; import org.dromara.workflow.domain.bo.ProcessInvalidBo;
import org.dromara.workflow.domain.vo.ActHistoryInfoVo;
import org.dromara.workflow.domain.vo.ProcessInstanceVo; import org.dromara.workflow.domain.vo.ProcessInstanceVo;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -59,16 +57,16 @@ public interface IActProcessInstanceService {
/** /**
* 运行中的实例 删除程实例删除历史记录删除业务与流程关联信息 * 运行中的实例 删除程实例删除历史记录删除业务与流程关联信息
* *
* @param processInstanceId 流程实例id * @param processInstanceIds 流程实例id
* @return 结果 * @return 结果
*/ */
boolean deleteRuntimeProcessAndHisInst(String processInstanceId); boolean deleteRuntimeProcessAndHisInst(String[] processInstanceIds);
/** /**
* 已完成的实例 删除程实例删除历史记录删除业务与流程关联信息 * 已完成的实例 删除程实例删除历史记录删除业务与流程关联信息
* *
* @param processInstanceId 流程实例id * @param processInstanceIds 流程实例id
* @return 结果 * @return 结果
*/ */
boolean deleteFinishProcessAndHisInst(String processInstanceId); boolean deleteFinishProcessAndHisInst(String[] processInstanceIds);
} }

View File

@ -40,6 +40,7 @@ import org.flowable.task.api.history.HistoricTaskInstance;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.awt.*; import java.awt.*;
import java.io.IOException; import java.io.IOException;
@ -328,6 +329,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
* @param processInvalidBo 参数 * @param processInvalidBo 参数
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public boolean deleteRuntimeProcessInst(ProcessInvalidBo processInvalidBo) { public boolean deleteRuntimeProcessInst(ProcessInvalidBo processInvalidBo) {
try { try {
List<Task> list = taskService.createTaskQuery().processInstanceId(processInvalidBo.getProcessInstanceId()) List<Task> list = taskService.createTaskQuery().processInstanceId(processInvalidBo.getProcessInstanceId())
@ -357,24 +359,25 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
/** /**
* 运行中的实例 删除程实例删除历史记录删除业务与流程关联信息 * 运行中的实例 删除程实例删除历史记录删除业务与流程关联信息
* *
* @param processInstanceId 流程实例id * @param processInstanceIds 流程实例id
*/ */
@Override @Override
public boolean deleteRuntimeProcessAndHisInst(String processInstanceId) { @Transactional(rollbackFor = Exception.class)
public boolean deleteRuntimeProcessAndHisInst(String[] processInstanceIds) {
try { try {
//1.删除运行中流程实例 //1.删除运行中流程实例
List<Task> list = taskService.createTaskQuery().processInstanceId(processInstanceId) List<Task> list = taskService.createTaskQuery().processInstanceIdIn(Arrays.asList(processInstanceIds))
.taskTenantId(TenantHelper.getTenantId()).list(); .taskTenantId(TenantHelper.getTenantId()).list();
List<Task> subTasks = list.stream().filter(e -> StringUtils.isNotBlank(e.getParentTaskId())).collect(Collectors.toList()); List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId()));
if (CollUtil.isNotEmpty(subTasks)) { if (CollUtil.isNotEmpty(subTasks)) {
subTasks.forEach(e -> taskService.deleteTask(e.getId())); subTasks.forEach(e -> taskService.deleteTask(e.getId()));
} }
runtimeService.deleteProcessInstance(processInstanceId, LoginHelper.getUserId() + "删除了当前流程申请"); runtimeService.bulkDeleteProcessInstances(Arrays.asList(processInstanceIds), LoginHelper.getUserId() + "删除了当前流程申请");
//2.删除历史记录 //2.删除历史记录
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() List<HistoricProcessInstance> historicProcessInstanceList = historyService.createHistoricProcessInstanceQuery()
.processInstanceTenantId(TenantHelper.getTenantId()).processInstanceId(processInstanceId).singleResult(); .processInstanceTenantId(TenantHelper.getTenantId()).processInstanceIds(new HashSet<>(Arrays.asList(processInstanceIds))).list();
if (ObjectUtil.isNotEmpty(historicProcessInstance)) { if (ObjectUtil.isNotEmpty(historicProcessInstanceList)) {
historyService.deleteHistoricProcessInstance(processInstanceId); historyService.bulkDeleteHistoricProcessInstances(Arrays.asList(processInstanceIds));
} }
return true; return true;
} catch (Exception e) { } catch (Exception e) {
@ -386,12 +389,12 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
/** /**
* 已完成的实例 删除程实例删除历史记录删除业务与流程关联信息 * 已完成的实例 删除程实例删除历史记录删除业务与流程关联信息
* *
* @param processInstanceId 流程实例id * @param processInstanceIds 流程实例id
*/ */
@Override @Override
public boolean deleteFinishProcessAndHisInst(String processInstanceId) { public boolean deleteFinishProcessAndHisInst(String[] processInstanceIds) {
try { try {
historyService.deleteHistoricProcessInstance(processInstanceId); historyService.bulkDeleteHistoricProcessInstances(Arrays.asList(processInstanceIds));
return true; return true;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();