add 添加驳回申请人

This commit is contained in:
gssong 2023-07-09 12:05:08 +08:00
parent f58f12c603
commit 7847a80bc2
4 changed files with 101 additions and 0 deletions

View File

@ -189,4 +189,15 @@ public class ActTaskController extends BaseController {
return toAjax(iActTaskService.deleteMultiInstanceExecution(deleteMultiBo)); return toAjax(iActTaskService.deleteMultiInstanceExecution(deleteMultiBo));
} }
/**
* 驳回审批
*
* @param backProcessBo 参数
*/
@Log(title = "任务管理", businessType = BusinessType.INSERT)
@PostMapping("/backProcess")
public R<String> backProcess(@RequestBody BackProcessBo backProcessBo) {
return R.ok(iActTaskService.backProcess(backProcessBo));
}
} }

View File

@ -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;
}

View File

@ -101,4 +101,12 @@ public interface IActTaskService {
* @return 结果 * @return 结果
*/ */
boolean deleteMultiInstanceExecution(DeleteMultiBo deleteMultiBo); boolean deleteMultiInstanceExecution(DeleteMultiBo deleteMultiBo);
/**
* 驳回审批
*
* @param backProcessBo 参数
* @return 流程实例id
*/
String backProcess(BackProcessBo backProcessBo);
} }

View File

@ -38,6 +38,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* 任务 服务层实现 * 任务 服务层实现
@ -521,4 +522,48 @@ public class ActTaskServiceImpl implements IActTaskService {
throw new ServiceException(e.getMessage()); 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<Task> 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();
}
} }