From 7b034a232bce1c0676139138ac528db0faadf7f9 Mon Sep 17 00:00:00 2001 From: songgaoshuai <1742057357@qq.com> Date: Thu, 15 Jun 2023 18:17:58 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E6=B7=BB=E5=8A=A0=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E5=AE=9E=E4=BE=8B=E4=BD=9C=E5=BA=9F=EF=BC=8C=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E4=B8=AD=E6=B5=81=E7=A8=8B=E5=AE=9E=E4=BE=8B=E5=88=A0=E9=99=A4?= =?UTF-8?q?=EF=BC=8C=E5=B7=B2=E5=AE=8C=E6=88=90=E6=B5=81=E7=A8=8B=E5=AE=9E?= =?UTF-8?q?=E4=BE=8B=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ActProcessInstanceController.java | 36 +++++++++ .../workflow/domain/bo/ProcessInvalidBo.java | 28 +++++++ .../service/IActProcessInstanceService.java | 25 ++++++ .../impl/ActProcessInstanceServiceImpl.java | 78 +++++++++++++++++++ 4 files changed, 167 insertions(+) create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInvalidBo.java diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessInstanceController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessInstanceController.java index c28b75200..ae94236f8 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessInstanceController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessInstanceController.java @@ -4,9 +4,12 @@ import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotBlank; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; import org.dromara.workflow.domain.bo.ProcessInstanceBo; +import org.dromara.workflow.domain.bo.ProcessInvalidBo; import org.dromara.workflow.domain.vo.ProcessInstanceVo; import org.dromara.workflow.service.IActProcessInstanceService; import org.springframework.validation.annotation.Validated; @@ -67,4 +70,37 @@ public class ActProcessInstanceController extends BaseController { public R> getHistoryRecord(@NotBlank(message = "流程实例id不能为空") @PathVariable String processInstanceId) { return R.ok(iActProcessInstanceService.getHistoryRecord(processInstanceId)); } + + /** + * 作废流程实例,不会删除历史记录(删除运行中的实例) + * + * @param processInvalidBo 参数 + */ + @Log(title = "流程实例管理", businessType = BusinessType.DELETE) + @PostMapping("/deleteRuntimeProcessInst") + public R deleteRuntimeProcessInst(@RequestBody ProcessInvalidBo processInvalidBo) { + return toAjax(iActProcessInstanceService.deleteRuntimeProcessInst(processInvalidBo)); + } + + /** + * 运行中的实例 删除程实例,删除历史记录,删除业务与流程关联信息 + * + * @param processInstanceId 流程实例id + */ + @Log(title = "流程实例管理", businessType = BusinessType.DELETE) + @DeleteMapping("/deleteRuntimeProcessAndHisInst/{processInstanceId}") + public R deleteRuntimeProcessAndHisInst(@NotBlank(message = "流程实例id不能为空") @PathVariable String processInstanceId) { + return toAjax(iActProcessInstanceService.deleteRuntimeProcessAndHisInst(processInstanceId)); + } + + /** + * 已完成的实例 删除程实例,删除历史记录,删除业务与流程关联信息 + * + * @param processInstanceId 流程实例id + */ + @Log(title = "流程实例管理", businessType = BusinessType.DELETE) + @DeleteMapping("/deleteFinishProcessAndHisInst/{processInstanceId}") + public R deleteFinishProcessAndHisInst(@NotBlank(message = "流程实例id不能为空") @PathVariable String processInstanceId) { + return toAjax(iActProcessInstanceService.deleteFinishProcessAndHisInst(processInstanceId)); + } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInvalidBo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInvalidBo.java new file mode 100644 index 000000000..0bfebf533 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ProcessInvalidBo.java @@ -0,0 +1,28 @@ +package org.dromara.workflow.domain.bo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 流程实例作废请求对象 + * + * @author may + */ +@Data +public class ProcessInvalidBo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 流程实例id + */ + private String processInstId; + + /** + * 作废原因 + */ + private String deleteReason; +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessInstanceService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessInstanceService.java index 8b3afde7f..c1c1ebb2c 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessInstanceService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActProcessInstanceService.java @@ -3,6 +3,7 @@ package org.dromara.workflow.service; import jakarta.servlet.http.HttpServletResponse; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.workflow.domain.bo.ProcessInstanceBo; +import org.dromara.workflow.domain.bo.ProcessInvalidBo; import org.dromara.workflow.domain.vo.ActHistoryInfoVo; import org.dromara.workflow.domain.vo.ProcessInstanceVo; @@ -46,4 +47,28 @@ public interface IActProcessInstanceService { * @return 结果 */ Map getHistoryRecord(String processInstanceId); + + /** + * 作废流程实例,不会删除历史记录(删除运行中的实例) + * + * @param processInvalidBo 参数 + * @return 结果 + */ + boolean deleteRuntimeProcessInst(ProcessInvalidBo processInvalidBo); + + /** + * 运行中的实例 删除程实例,删除历史记录,删除业务与流程关联信息 + * + * @param processInstanceId 流程实例id + * @return 结果 + */ + boolean deleteRuntimeProcessAndHisInst(String processInstanceId); + + /** + * 已完成的实例 删除程实例,删除历史记录,删除业务与流程关联信息 + * + * @param processInstanceId 流程实例id + * @return 结果 + */ + boolean deleteFinishProcessAndHisInst(String processInstanceId); } 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 20d1dc522..65a240ee7 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 @@ -7,14 +7,17 @@ import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.apache.commons.io.IOUtils; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.service.ISysUserService; import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.domain.bo.ProcessInstanceBo; +import org.dromara.workflow.domain.bo.ProcessInvalidBo; import org.dromara.workflow.domain.vo.ActHistoryInfoVo; import org.dromara.workflow.domain.vo.GraphicInfoVo; import org.dromara.workflow.domain.vo.ProcessInstanceVo; @@ -31,6 +34,7 @@ import org.flowable.engine.history.HistoricProcessInstanceQuery; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.runtime.ProcessInstanceQuery; import org.flowable.engine.task.Comment; +import org.flowable.task.api.Task; import org.flowable.task.api.history.HistoricTaskInstance; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; @@ -314,4 +318,78 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService return 0 + "秒"; } } + + /** + * 作废流程实例,不会删除历史记录(删除运行中的实例) + * + * @param processInvalidBo 参数 + */ + @Override + public boolean deleteRuntimeProcessInst(ProcessInvalidBo processInvalidBo) { + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() + .processInstanceId(processInvalidBo.getProcessInstId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); + try { + List list = taskService.createTaskQuery().processInstanceId(processInvalidBo.getProcessInstId()) + .taskTenantId(TenantHelper.getTenantId()).list(); + List subTasks = list.stream().filter(e -> StringUtils.isNotBlank(e.getParentTaskId())).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(subTasks)) { + subTasks.forEach(e -> taskService.deleteTask(e.getId())); + } + String deleteReason = LoginHelper.getUsername() + "作废了当前申请!"; + if (StringUtils.isNotBlank(processInvalidBo.getDeleteReason())) { + deleteReason = LoginHelper.getUsername() + "作废理由:" + processInvalidBo.getDeleteReason(); + } + runtimeService.deleteProcessInstance(processInvalidBo.getProcessInstId(), deleteReason); + return true; + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException(e.getMessage()); + } + } + + /** + * 运行中的实例 删除程实例,删除历史记录,删除业务与流程关联信息 + * + * @param processInstanceId 流程实例id + * @return + */ + @Override + public boolean deleteRuntimeProcessAndHisInst(String processInstanceId) { + try { + //1.删除运行中流程实例 + List list = taskService.createTaskQuery().processInstanceId(processInstanceId) + .taskTenantId(TenantHelper.getTenantId()).list(); + List subTasks = list.stream().filter(e -> StringUtils.isNotBlank(e.getParentTaskId())).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(subTasks)) { + subTasks.forEach(e -> taskService.deleteTask(e.getId())); + } + runtimeService.deleteProcessInstance(processInstanceId, LoginHelper.getUserId() + "删除了当前流程申请"); + //2.删除历史记录 + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceTenantId(TenantHelper.getTenantId()).processInstanceId(processInstanceId).singleResult(); + if (ObjectUtil.isNotEmpty(historicProcessInstance)) { + historyService.deleteHistoricProcessInstance(processInstanceId); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException(e.getMessage()); + } + } + + /** + * 已完成的实例 删除程实例,删除历史记录,删除业务与流程关联信息 + * + * @param processInstanceId 流程实例id + */ + @Override + public boolean deleteFinishProcessAndHisInst(String processInstanceId) { + try { + historyService.deleteHistoricProcessInstance(processInstanceId); + return true; + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException(e.getMessage()); + } + } }