update 优化任务业务层

This commit is contained in:
AprilWind 2024-12-16 09:34:20 +08:00
parent b8f5a167c3
commit 6aefbac520

View File

@ -2,6 +2,7 @@ package org.dromara.workflow.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
@ -26,7 +27,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.*; import org.dromara.warm.flow.core.service.*;
import org.dromara.warm.flow.orm.entity.*; import org.dromara.warm.flow.orm.entity.*;
import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper; import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper;
@ -36,9 +36,9 @@ import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
import org.dromara.workflow.common.enums.TaskAssigneeType; import org.dromara.workflow.common.enums.TaskAssigneeType;
import org.dromara.workflow.common.enums.TaskStatusEnum; import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.bo.*; import org.dromara.workflow.domain.bo.*;
import org.dromara.workflow.domain.vo.FlowCopy;
import org.dromara.workflow.domain.vo.FlowHisTaskVo; import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowTaskVo; import org.dromara.workflow.domain.vo.FlowTaskVo;
import org.dromara.workflow.domain.vo.FlowCopy;
import org.dromara.workflow.handler.FlowProcessEventHandler; import org.dromara.workflow.handler.FlowProcessEventHandler;
import org.dromara.workflow.handler.WorkflowPermissionHandler; import org.dromara.workflow.handler.WorkflowPermissionHandler;
import org.dromara.workflow.mapper.FlwTaskMapper; import org.dromara.workflow.mapper.FlwTaskMapper;
@ -97,7 +97,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
variables.put(BUSINESS_KEY, businessKey); variables.put(BUSINESS_KEY, businessKey);
FlowInstance flowInstance = flowInstanceMapper.selectOne(new LambdaQueryWrapper<>(FlowInstance.class) FlowInstance flowInstance = flowInstanceMapper.selectOne(new LambdaQueryWrapper<>(FlowInstance.class)
.eq(FlowInstance::getBusinessId, businessKey)); .eq(FlowInstance::getBusinessId, businessKey));
if (flowInstance != null) { if (ObjectUtil.isNotNull(flowInstance)) {
BusinessStatusEnum.checkStartStatus(flowInstance.getFlowStatus()); BusinessStatusEnum.checkStartStatus(flowInstance.getFlowStatus());
List<Task> taskList = taskService.list(new FlowTask().setInstanceId(flowInstance.getId())); List<Task> taskList = taskService.list(new FlowTask().setInstanceId(flowInstance.getId()));
return Map.of(PROCESS_INSTANCE_ID, taskList.get(0).getInstanceId(), TASK_ID, taskList.get(0).getId()); return Map.of(PROCESS_INSTANCE_ID, taskList.get(0).getInstanceId(), TASK_ID, taskList.get(0).getId());
@ -152,7 +152,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
flowParams.hisTaskExt(completeTaskBo.getFileId()); flowParams.hisTaskExt(completeTaskBo.getFileId());
// 执行任务跳转并根据返回的处理人设置下一步处理人 // 执行任务跳转并根据返回的处理人设置下一步处理人
setHandler(taskService.skip(taskId, flowParams), flowTask, flowCopyList); Instance instance = taskService.skip(taskId, flowParams);
this.setHandler(instance, flowTask, flowCopyList);
// 消息通知 // 消息通知
WorkflowUtils.sendMessage(definition.getFlowName(), ins.getId(), messageType, notice); WorkflowUtils.sendMessage(definition.getFlowName(), ins.getId(), messageType, notice);
return true; return true;
@ -170,13 +171,13 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
* @param flowCopyList 抄送人 * @param flowCopyList 抄送人
*/ */
private void setHandler(Instance instance, FlowTask task, List<FlowCopy> flowCopyList) { private void setHandler(Instance instance, FlowTask task, List<FlowCopy> flowCopyList) {
if (instance == null) { if (ObjectUtil.isNull(instance)) {
return; return;
} }
//添加抄送人 //添加抄送人
setCopy(task, flowCopyList); this.setCopy(task, flowCopyList);
// 根据流程实例ID查询所有关联的任务 // 根据流程实例ID查询所有关联的任务
List<FlowTask> flowTasks = selectByInstId(instance.getId()); List<FlowTask> flowTasks = this.selectByInstId(instance.getId());
List<User> userList = new ArrayList<>(); List<User> userList = new ArrayList<>();
// 遍历任务列表处理每个任务的办理人 // 遍历任务列表处理每个任务的办理人
for (FlowTask flowTask : flowTasks) { for (FlowTask flowTask : flowTasks) {
@ -368,7 +369,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
WorkflowUtils.backTask(message, inst.getId(), bo.getNodeCode(), TaskStatusEnum.WAITING.getStatus(), TaskStatusEnum.BACK.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); this.setHandler(instance, flowTasks.get(0), null);
//消息通知 //消息通知
WorkflowUtils.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice); WorkflowUtils.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
return true; return true;
@ -419,7 +420,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
throw new ServiceException("任务不存在!"); throw new ServiceException("任务不存在!");
} }
Instance instance = insService.getById(task.getInstanceId()); Instance instance = insService.getById(task.getInstanceId());
if (instance != null) { if (ObjectUtil.isNotNull(instance)) {
BusinessStatusEnum.checkInvalidStatus(instance.getFlowStatus()); BusinessStatusEnum.checkInvalidStatus(instance.getFlowStatus());
} }
FlowParams flowParams = new FlowParams(); FlowParams flowParams = new FlowParams();
@ -453,7 +454,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
@Override @Override
public FlowTaskVo selectById(Long taskId) { public FlowTaskVo selectById(Long taskId) {
Task task = taskService.getById(taskId); Task task = taskService.getById(taskId);
if (task == null) { if (ObjectUtil.isNull(task)) {
return null; return null;
} }
FlowTaskVo flowTaskVo = BeanUtil.toBean(task, FlowTaskVo.class); FlowTaskVo flowTaskVo = BeanUtil.toBean(task, FlowTaskVo.class);
@ -602,14 +603,14 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
return false; return false;
} }
try { try {
List<FlowTask> flowTasks = selectByIdList(taskIdList); List<FlowTask> flowTasks = this.selectByIdList(taskIdList);
// 批量删除现有任务的办理人记录 // 批量删除现有任务的办理人记录
if (CollUtil.isNotEmpty(flowTasks)) { if (CollUtil.isNotEmpty(flowTasks)) {
WorkflowUtils.getFlowUserService().deleteByTaskIds(StreamUtils.toList(flowTasks, FlowTask::getId)); WorkflowUtils.getFlowUserService().deleteByTaskIds(StreamUtils.toList(flowTasks, FlowTask::getId));
List<User> userList = flowTasks.stream() List<User> userList = flowTasks.stream()
.map(flowTask -> { .map(flowTask -> {
FlowUser flowUser = new FlowUser(); FlowUser flowUser = new FlowUser();
flowUser.setType(UserType.APPROVAL.getKey()); flowUser.setType(TaskAssigneeType.APPROVER.getCode());
flowUser.setProcessedBy(userId); flowUser.setProcessedBy(userId);
flowUser.setAssociated(flowTask.getId()); flowUser.setAssociated(flowTask.getId());
return flowUser; return flowUser;