From 39acda09ecc86dcc805750423c94c7b964b1db0b Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: Thu, 22 Jun 2023 21:41:22 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E6=B7=BB=E5=8A=A0=E6=92=A4=E9=94=80?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E7=94=B3=E8=AF=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ActProcessInstanceController.java | 11 ++++++ .../service/IActProcessInstanceService.java | 8 +++++ .../impl/ActProcessInstanceServiceImpl.java | 34 +++++++++++++++++++ 3 files changed, 53 insertions(+) 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 eb37c90eb..312f7038e 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 @@ -105,4 +105,15 @@ public class ActProcessInstanceController extends BaseController { public R deleteFinishProcessAndHisInst(@NotNull(message = "流程实例id不能为空") @PathVariable String[] processInstanceIds) { return toAjax(iActProcessInstanceService.deleteFinishProcessAndHisInst(processInstanceIds)); } + + /** + * 撤销流程申请 + * + * @param processInstanceId 流程实例id + */ + @Log(title = "流程实例管理", businessType = BusinessType.INSERT) + @PostMapping("/cancelProcessApply/{processInstanceId}") + public R cancelProcessApply(@NotBlank(message = "流程实例id不能为空") @PathVariable String processInstanceId) { + return toAjax(iActProcessInstanceService.cancelProcessApply(processInstanceId)); + } } 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 ac909188b..3d6a478ac 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 @@ -69,4 +69,12 @@ public interface IActProcessInstanceService { * @return 结果 */ boolean deleteFinishProcessAndHisInst(String[] processInstanceIds); + + /** + * 撤销流程申请 + * + * @param processInstanceId 流程实例id + * @return 结果 + */ + boolean cancelProcessApply(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 8ae2076ef..05267a629 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 @@ -401,4 +401,38 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService throw new ServiceException(e.getMessage()); } } + + /** + * 撤销流程申请 + * + * @param processInstanceId 流程实例id + */ + @Override + public boolean cancelProcessApply(String processInstanceId) { + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() + .processInstanceId(processInstanceId).processInstanceTenantId(TenantHelper.getTenantId()).startedBy(String.valueOf(LoginHelper.getUserId())).singleResult(); + if (ObjectUtil.isNull(processInstance)) { + throw new ServiceException("您不是流程发起人,撤销失败!"); + } + if (processInstance.isSuspended()) { + throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); + } + BusinessStatusEnum.checkStatus(processInstance.getBusinessStatus()); + List taskList = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(processInstanceId).list(); + for (Task task : taskList) { + taskService.addComment(task.getId(), processInstanceId, "申请人撤销申请"); + } + try { + HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().finished().orderByHistoricTaskInstanceEndTime().finished().list().get(0); + List nodeIds = StreamUtils.toList(taskList, Task::getTaskDefinitionKey); + runtimeService.createChangeActivityStateBuilder() + .processInstanceId(processInstanceId) + .moveActivityIdsToSingleActivityId(nodeIds, historicTaskInstance.getTaskDefinitionKey()).changeState(); + runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.CANCEL.getStatus()); + return true; + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException("撤销失败:" + e.getMessage()); + } + } }