update 挑战者驳回 撤销
This commit is contained in:
parent
33e28daba6
commit
5e47e7c261
@ -210,22 +210,12 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
||||
//判断申请人节点是否有多个,只保留一个
|
||||
List<Task> currentTaskList = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId()));
|
||||
if (CollUtil.isNotEmpty(currentTaskList)) {
|
||||
Task task = currentTaskList.get(0);
|
||||
if (currentTaskList.size() > 1) {
|
||||
currentTaskList.remove(0);
|
||||
List<Long> taskIds = StreamUtils.toList(currentTaskList, Task::getId);
|
||||
WorkflowUtils.userService.deleteByTaskIds(taskIds);
|
||||
flowTaskMapper.deleteByIds(taskIds);
|
||||
}
|
||||
//如果为空增加一个申请人
|
||||
List<User> userList = WorkflowUtils.userService.getByAssociateds(Collections.singletonList(task.getId()));
|
||||
if (CollUtil.isEmpty(userList)) {
|
||||
FlowUser flowUser = new FlowUser();
|
||||
flowUser.setAssociated(task.getId());
|
||||
flowUser.setProcessedBy(LoginHelper.getUserIdStr());
|
||||
flowUser.setType(UserType.APPROVAL.getKey());
|
||||
WorkflowUtils.userService.save(flowUser);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
@ -311,6 +301,10 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
||||
String join = StreamUtils.join(allUser, e -> String.valueOf(e.getUserId()));
|
||||
flowHisTaskVo.setApprover(join);
|
||||
}
|
||||
if (BusinessStatusEnum.isDraftOrCancelOrBack(flowInstance.getFlowStatus())) {
|
||||
flowHisTaskVo.setApprover(LoginHelper.getUserIdStr());
|
||||
flowHisTaskVo.setApproveName(LoginHelper.getLoginUser().getNickname());
|
||||
}
|
||||
}
|
||||
list.addAll(flowHisTaskVos);
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
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.entity.*;
|
||||
import org.dromara.warm.flow.core.enums.NodeType;
|
||||
@ -347,6 +348,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
Long taskId = bo.getTaskId();
|
||||
String notice = bo.getNotice();
|
||||
List<String> messageType = bo.getMessageType();
|
||||
String message = bo.getMessage();
|
||||
List<FlowTask> flowTasks = flowTaskMapper.selectList(new LambdaQueryWrapper<>(FlowTask.class).eq(FlowTask::getId, taskId));
|
||||
if (CollUtil.isEmpty(flowTasks)) {
|
||||
throw new ServiceException("任务不存在!");
|
||||
@ -359,20 +361,23 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
FlowSkip flowSkip = StreamUtils.findFirst(flowSkips, e -> NodeType.START.getKey().equals(e.getNowNodeType()));
|
||||
//开始节点的下一节点
|
||||
assert flowSkip != null;
|
||||
String nextNodeCode = flowSkip.getNextNodeCode();
|
||||
|
||||
FlowParams flowParams = new FlowParams();
|
||||
flowParams.variable(bo.getVariables());
|
||||
flowParams.skipType(SkipType.PASS.getKey());
|
||||
if (nextNodeCode.equals(bo.getNodeCode())) {
|
||||
flowParams.flowStatus(BusinessStatusEnum.BACK.getStatus());
|
||||
//申请人节点
|
||||
String applyUserNodeCode = flowSkip.getNextNodeCode();
|
||||
if (applyUserNodeCode.equals(bo.getNodeCode())) {
|
||||
backApplyUser(message, inst, applyUserNodeCode);
|
||||
} else {
|
||||
flowParams.flowStatus(BusinessStatusEnum.WAITING.getStatus());
|
||||
}
|
||||
flowParams.hisStatus(TaskStatusEnum.BACK.getStatus());
|
||||
flowParams.message(bo.getMessage());
|
||||
List<Task> list = taskService.list(FlowFactory.newTask().setInstanceId(inst.getId()));
|
||||
for (Task task : list) {
|
||||
FlowParams flowParams = FlowParams.build();
|
||||
flowParams.nodeCode(bo.getNodeCode());
|
||||
Instance instance = taskService.skip(taskId, flowParams);
|
||||
flowParams.message(message);
|
||||
flowParams.skipType(SkipType.PASS.getKey());
|
||||
flowParams.flowStatus(BusinessStatusEnum.WAITING.getStatus()).hisStatus(TaskStatusEnum.BACK.getStatus());
|
||||
flowParams.ignore(true);
|
||||
taskService.skip(task.getId(), flowParams);
|
||||
}
|
||||
}
|
||||
Instance instance = insService.getById(inst.getId());
|
||||
setHandler(instance, flowTasks.get(0), null);
|
||||
//消息通知
|
||||
WorkflowUtils.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
|
||||
@ -383,6 +388,39 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 退回
|
||||
*
|
||||
* @param message 审批已经
|
||||
* @param instance 流程实例
|
||||
* @param applyUserNodeCode 申请人节点
|
||||
*/
|
||||
private void backApplyUser(String message, Instance instance, String applyUserNodeCode) {
|
||||
List<Task> list = taskService.list(FlowFactory.newTask().setInstanceId(instance.getId()));
|
||||
if (CollUtil.isNotEmpty(list)) {
|
||||
List<Task> tasks = StreamUtils.filter(list, e -> e.getNodeCode().equals(applyUserNodeCode));
|
||||
if (list.size() == tasks.size()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
for (Task task : list) {
|
||||
List<UserDTO> userList = currentTaskAllUser(task.getId());
|
||||
FlowParams flowParams = FlowParams.build();
|
||||
flowParams.nodeCode(applyUserNodeCode);
|
||||
flowParams.message(message);
|
||||
flowParams.skipType(SkipType.PASS.getKey());
|
||||
flowParams.flowStatus(BusinessStatusEnum.BACK.getStatus()).hisStatus(TaskStatusEnum.BACK.getStatus());
|
||||
flowParams.ignore(true);
|
||||
//解决会签,或签撤销没权限问题
|
||||
if (CollUtil.isNotEmpty(userList)) {
|
||||
flowParams.handler(userList.get(0).getUserId().toString());
|
||||
}
|
||||
taskService.skip(task.getId(), flowParams);
|
||||
}
|
||||
//解决会签,或签多人审批问题
|
||||
backApplyUser(message, instance, applyUserNodeCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取可驳回节点
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user