From 7847a80bc233165bcb3c320b5678c912a3859674 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: Sun, 9 Jul 2023 12:05:08 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E6=B7=BB=E5=8A=A0=E9=A9=B3=E5=9B=9E?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ActTaskController.java | 11 +++++ .../workflow/domain/bo/BackProcessBo.java | 37 +++++++++++++++ .../workflow/service/IActTaskService.java | 8 ++++ .../service/impl/ActTaskServiceImpl.java | 45 +++++++++++++++++++ 4 files changed, 101 insertions(+) create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java index 9b42af828..e791b9de7 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java @@ -189,4 +189,15 @@ public class ActTaskController extends BaseController { return toAjax(iActTaskService.deleteMultiInstanceExecution(deleteMultiBo)); } + /** + * 驳回审批 + * + * @param backProcessBo 参数 + */ + @Log(title = "任务管理", businessType = BusinessType.INSERT) + @PostMapping("/backProcess") + public R backProcess(@RequestBody BackProcessBo backProcessBo) { + return R.ok(iActTaskService.backProcess(backProcessBo)); + } + } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java new file mode 100644 index 000000000..8b24e9247 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java @@ -0,0 +1,37 @@ +package org.dromara.workflow.domain.bo; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import org.dromara.common.core.validate.AddGroup; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 驳回参数请求 + * + * @author may + */ +@Data +public class BackProcessBo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 任务ID + */ + @NotBlank(message = "任务ID不能为空", groups = AddGroup.class) + private String taskId; + + /** + * 驳回的节点id(目前未使用,直接驳回到申请人) + */ + private String targetActivityId; + + /** + * 办理意见 + */ + private String message; +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java index fea6ac4ee..c1ac07aba 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java @@ -101,4 +101,12 @@ public interface IActTaskService { * @return 结果 */ boolean deleteMultiInstanceExecution(DeleteMultiBo deleteMultiBo); + + /** + * 驳回审批 + * + * @param backProcessBo 参数 + * @return 流程实例id + */ + String backProcess(BackProcessBo backProcessBo); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java index a689b3862..cd4551274 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java @@ -38,6 +38,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.stream.Collectors; /** * 任务 服务层实现 @@ -521,4 +522,48 @@ public class ActTaskServiceImpl implements IActTaskService { throw new ServiceException(e.getMessage()); } } + + /** + * 驳回审批 + * + * @param backProcessBo 参数 + */ + @Override + public String backProcess(BackProcessBo backProcessBo) { + Task task = taskService.createTaskQuery().taskId(backProcessBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()) + .taskAssignee(String.valueOf(LoginHelper.getUserId())).singleResult(); + if (ObjectUtil.isEmpty(task)) { + throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); + } + if (task.isSuspended()) { + throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); + } + try { + String processInstanceId = task.getProcessInstanceId(); + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); + //校验单据 + BusinessStatusEnum.checkStatus(processInstance.getBusinessStatus()); + //判断是否有多个任务 + List taskList = taskService.createTaskQuery().processInstanceId(processInstanceId).taskTenantId(TenantHelper.getTenantId()).list(); + //申请人节点 + HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().finished().orderByHistoricTaskInstanceEndTime().asc().list().get(0); + String backTaskDefinitionKey = historicTaskInstance.getTaskDefinitionKey(); + if (taskList.size() > 1) { + //当前多个任务驳回到单个节点 + runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId) + .moveActivityIdsToSingleActivityId(taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList()), backTaskDefinitionKey) + .changeState(); + } else { + //当前单个节点驳回单个节点 + runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId) + .moveActivityIdTo(task.getTaskDefinitionKey(), backTaskDefinitionKey) + .changeState(); + } + taskService.setAssignee(task.getId(), historicTaskInstance.getAssignee()); + runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.BACK.getStatus()); + } catch (Exception e) { + throw new ServiceException(e.getMessage()); + } + return task.getProcessInstanceId(); + } }