update 优化驳回 撤销
This commit is contained in:
parent
bc61d90d51
commit
9221eae06d
@ -23,7 +23,6 @@ import org.dromara.warm.flow.core.dto.FlowParams;
|
|||||||
import org.dromara.warm.flow.core.entity.*;
|
import org.dromara.warm.flow.core.entity.*;
|
||||||
import org.dromara.warm.flow.core.enums.NodeType;
|
import org.dromara.warm.flow.core.enums.NodeType;
|
||||||
import org.dromara.warm.flow.core.enums.SkipType;
|
import org.dromara.warm.flow.core.enums.SkipType;
|
||||||
import org.dromara.warm.flow.core.enums.UserType;
|
|
||||||
import org.dromara.warm.flow.core.service.DefService;
|
import org.dromara.warm.flow.core.service.DefService;
|
||||||
import org.dromara.warm.flow.core.service.InsService;
|
import org.dromara.warm.flow.core.service.InsService;
|
||||||
import org.dromara.warm.flow.core.service.NodeService;
|
import org.dromara.warm.flow.core.service.NodeService;
|
||||||
@ -206,7 +205,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|||||||
AssertUtil.isNull(startNode, ExceptionCons.LOST_START_NODE);
|
AssertUtil.isNull(startNode, ExceptionCons.LOST_START_NODE);
|
||||||
Node nextNode = nodeService.getNextNode(definition.getId(), startNode.getNodeCode(), null, SkipType.NONE.getKey());
|
Node nextNode = nodeService.getNextNode(definition.getId(), startNode.getNodeCode(), null, SkipType.NONE.getKey());
|
||||||
//撤销
|
//撤销
|
||||||
cancelTask(message, instance, nextNode);
|
WorkflowUtils.backTask(message, instance.getId(), nextNode.getNodeCode(), BusinessStatusEnum.CANCEL.getStatus(), BusinessStatusEnum.CANCEL.getStatus());
|
||||||
//判断申请人节点是否有多个,只保留一个
|
//判断申请人节点是否有多个,只保留一个
|
||||||
List<Task> currentTaskList = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId()));
|
List<Task> currentTaskList = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId()));
|
||||||
if (CollUtil.isNotEmpty(currentTaskList)) {
|
if (CollUtil.isNotEmpty(currentTaskList)) {
|
||||||
@ -225,39 +224,6 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 撤销流程
|
|
||||||
*
|
|
||||||
* @param message 审批已经
|
|
||||||
* @param instance 流程实例
|
|
||||||
* @param nextNode 申请人节点
|
|
||||||
*/
|
|
||||||
private void cancelTask(String message, Instance instance, Node nextNode) {
|
|
||||||
List<Task> list = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId()));
|
|
||||||
if (CollUtil.isNotEmpty(list)) {
|
|
||||||
List<Task> tasks = StreamUtils.filter(list, e -> e.getNodeCode().equals(nextNode.getNodeCode()));
|
|
||||||
if (list.size() == tasks.size()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (Task task : list) {
|
|
||||||
List<UserDTO> userList = flwTaskService.currentTaskAllUser(task.getId());
|
|
||||||
FlowParams flowParams = FlowParams.build();
|
|
||||||
flowParams.nodeCode(nextNode.getNodeCode());
|
|
||||||
flowParams.message(message);
|
|
||||||
flowParams.skipType(SkipType.PASS.getKey());
|
|
||||||
flowParams.flowStatus(BusinessStatusEnum.CANCEL.getStatus()).hisStatus(TaskStatusEnum.CANCEL.getStatus());
|
|
||||||
flowParams.ignore(true);
|
|
||||||
//解决会签,或签撤销没权限问题
|
|
||||||
if (CollUtil.isNotEmpty(userList)) {
|
|
||||||
flowParams.handler(userList.get(0).getUserId().toString());
|
|
||||||
}
|
|
||||||
taskService.skip(task.getId(), flowParams);
|
|
||||||
}
|
|
||||||
//解决会签,或签多人审批问题
|
|
||||||
cancelTask(message, instance, nextNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前登陆人发起的流程实例
|
* 获取当前登陆人发起的流程实例
|
||||||
*
|
*
|
||||||
|
@ -22,7 +22,6 @@ import org.dromara.common.core.validate.EditGroup;
|
|||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.dromara.warm.flow.core.FlowFactory;
|
|
||||||
import org.dromara.warm.flow.core.dto.FlowParams;
|
import org.dromara.warm.flow.core.dto.FlowParams;
|
||||||
import org.dromara.warm.flow.core.entity.*;
|
import org.dromara.warm.flow.core.entity.*;
|
||||||
import org.dromara.warm.flow.core.enums.NodeType;
|
import org.dromara.warm.flow.core.enums.NodeType;
|
||||||
@ -166,8 +165,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
/**
|
/**
|
||||||
* 设置办理人
|
* 设置办理人
|
||||||
*
|
*
|
||||||
* @param instance 实例
|
* @param instance 实例
|
||||||
* @param task (当前任务)未办理的任务
|
* @param task (当前任务)未办理的任务
|
||||||
* @param flowCopyList 抄送人
|
* @param flowCopyList 抄送人
|
||||||
*/
|
*/
|
||||||
private void setHandler(Instance instance, FlowTask task, List<FlowCopy> flowCopyList) {
|
private void setHandler(Instance instance, FlowTask task, List<FlowCopy> flowCopyList) {
|
||||||
@ -200,7 +199,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
/**
|
/**
|
||||||
* 添加抄送人
|
* 添加抄送人
|
||||||
*
|
*
|
||||||
* @param task 任务信息
|
* @param task 任务信息
|
||||||
* @param flowCopyList 抄送人
|
* @param flowCopyList 抄送人
|
||||||
*/
|
*/
|
||||||
private void setCopy(FlowTask task, List<FlowCopy> flowCopyList) {
|
private void setCopy(FlowTask task, List<FlowCopy> flowCopyList) {
|
||||||
@ -364,9 +363,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
//申请人节点
|
//申请人节点
|
||||||
String applyUserNodeCode = flowSkip.getNextNodeCode();
|
String applyUserNodeCode = flowSkip.getNextNodeCode();
|
||||||
if (applyUserNodeCode.equals(bo.getNodeCode())) {
|
if (applyUserNodeCode.equals(bo.getNodeCode())) {
|
||||||
backTask(message, inst, applyUserNodeCode, TaskStatusEnum.BACK.getStatus());
|
WorkflowUtils.backTask(message, inst.getId(), applyUserNodeCode, TaskStatusEnum.BACK.getStatus(), TaskStatusEnum.BACK.getStatus());
|
||||||
} else {
|
} else {
|
||||||
backTask(message, inst, bo.getNodeCode(), TaskStatusEnum.WAITING.getStatus());
|
WorkflowUtils.backTask(message, inst.getId(), bo.getNodeCode(), TaskStatusEnum.WAITING.getStatus(), TaskStatusEnum.BACK.getStatus());
|
||||||
}
|
}
|
||||||
Instance instance = insService.getById(inst.getId());
|
Instance instance = insService.getById(inst.getId());
|
||||||
setHandler(instance, flowTasks.get(0), null);
|
setHandler(instance, flowTasks.get(0), null);
|
||||||
@ -379,39 +378,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 退回
|
|
||||||
*
|
|
||||||
* @param message 审批已经
|
|
||||||
* @param instance 流程实例
|
|
||||||
* @param targetNodeCode 驳回的节点
|
|
||||||
*/
|
|
||||||
private void backTask(String message, Instance instance, String targetNodeCode, String status) {
|
|
||||||
List<Task> list = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId()));
|
|
||||||
if (CollUtil.isNotEmpty(list)) {
|
|
||||||
List<Task> tasks = StreamUtils.filter(list, e -> e.getNodeCode().equals(targetNodeCode));
|
|
||||||
if (list.size() == tasks.size()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (Task task : list) {
|
|
||||||
List<UserDTO> userList = currentTaskAllUser(task.getId());
|
|
||||||
FlowParams flowParams = FlowParams.build();
|
|
||||||
flowParams.nodeCode(targetNodeCode);
|
|
||||||
flowParams.message(message);
|
|
||||||
flowParams.skipType(SkipType.PASS.getKey());
|
|
||||||
flowParams.flowStatus(status).hisStatus(TaskStatusEnum.BACK.getStatus());
|
|
||||||
flowParams.ignore(true);
|
|
||||||
//解决会签,或签撤销没权限问题
|
|
||||||
if (CollUtil.isNotEmpty(userList)) {
|
|
||||||
flowParams.handler(userList.get(0).getUserId().toString());
|
|
||||||
}
|
|
||||||
taskService.skip(task.getId(), flowParams);
|
|
||||||
}
|
|
||||||
//解决会签,或签多人审批问题
|
|
||||||
backTask(message, instance, targetNodeCode, status);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取可驳回节点
|
* 获取可驳回节点
|
||||||
*
|
*
|
||||||
|
@ -11,8 +11,12 @@ import org.dromara.common.core.utils.StringUtils;
|
|||||||
import org.dromara.common.mail.utils.MailUtils;
|
import org.dromara.common.mail.utils.MailUtils;
|
||||||
import org.dromara.common.sse.dto.SseMessageDto;
|
import org.dromara.common.sse.dto.SseMessageDto;
|
||||||
import org.dromara.common.sse.utils.SseMessageUtils;
|
import org.dromara.common.sse.utils.SseMessageUtils;
|
||||||
|
import org.dromara.warm.flow.core.dto.FlowParams;
|
||||||
|
import org.dromara.warm.flow.core.entity.Instance;
|
||||||
import org.dromara.warm.flow.core.entity.Task;
|
import org.dromara.warm.flow.core.entity.Task;
|
||||||
import org.dromara.warm.flow.core.entity.User;
|
import org.dromara.warm.flow.core.entity.User;
|
||||||
|
import org.dromara.warm.flow.core.enums.SkipType;
|
||||||
|
import org.dromara.warm.flow.core.service.TaskService;
|
||||||
import org.dromara.warm.flow.core.service.UserService;
|
import org.dromara.warm.flow.core.service.UserService;
|
||||||
import org.dromara.warm.flow.orm.entity.FlowTask;
|
import org.dromara.warm.flow.orm.entity.FlowTask;
|
||||||
import org.dromara.warm.flow.orm.entity.FlowUser;
|
import org.dromara.warm.flow.orm.entity.FlowUser;
|
||||||
@ -37,6 +41,7 @@ public class WorkflowUtils {
|
|||||||
private static final IFlwTaskAssigneeService taskAssigneeService = SpringUtils.getBean(IFlwTaskAssigneeService.class);
|
private static final IFlwTaskAssigneeService taskAssigneeService = SpringUtils.getBean(IFlwTaskAssigneeService.class);
|
||||||
private static final IFlwTaskService flwTaskService = SpringUtils.getBean(IFlwTaskService.class);
|
private static final IFlwTaskService flwTaskService = SpringUtils.getBean(IFlwTaskService.class);
|
||||||
private static final UserService userService = SpringUtils.getBean(UserService.class);
|
private static final UserService userService = SpringUtils.getBean(UserService.class);
|
||||||
|
private static final TaskService taskService = SpringUtils.getBean(TaskService.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取工作流用户service
|
* 获取工作流用户service
|
||||||
@ -123,4 +128,39 @@ public class WorkflowUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 驳回
|
||||||
|
*
|
||||||
|
* @param message 审批意见
|
||||||
|
* @param instanceId 流程实例id
|
||||||
|
* @param targetNodeCode 目标节点
|
||||||
|
* @param flowStatus 流程状态
|
||||||
|
* @param flowHisStatus 节点操作状态
|
||||||
|
*/
|
||||||
|
public static void backTask(String message, Long instanceId, String targetNodeCode, String flowStatus, String flowHisStatus) {
|
||||||
|
List<FlowTask> list = flwTaskService.selectByInstId(instanceId);
|
||||||
|
if (CollUtil.isNotEmpty(list)) {
|
||||||
|
List<FlowTask> tasks = StreamUtils.filter(list, e -> e.getNodeCode().equals(targetNodeCode));
|
||||||
|
if (list.size() == tasks.size()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (FlowTask task : list) {
|
||||||
|
List<UserDTO> userList = flwTaskService.currentTaskAllUser(task.getId());
|
||||||
|
FlowParams flowParams = FlowParams.build();
|
||||||
|
flowParams.nodeCode(targetNodeCode);
|
||||||
|
flowParams.message(message);
|
||||||
|
flowParams.skipType(SkipType.PASS.getKey());
|
||||||
|
flowParams.flowStatus(flowStatus).hisStatus(flowHisStatus);
|
||||||
|
flowParams.ignore(true);
|
||||||
|
//解决会签,或签撤销没权限问题
|
||||||
|
if (CollUtil.isNotEmpty(userList)) {
|
||||||
|
flowParams.handler(userList.get(0).getUserId().toString());
|
||||||
|
}
|
||||||
|
taskService.skip(task.getId(), flowParams);
|
||||||
|
}
|
||||||
|
//解决会签,或签多人审批问题
|
||||||
|
backTask(message, instanceId, targetNodeCode, flowStatus, flowHisStatus);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user