!715 update 优化工作流待办任务查询

* update 优化工作流待办任务查询
This commit is contained in:
AprilWind 2025-07-02 09:15:56 +00:00 committed by 疯狂的狮子Li
parent 17610e8721
commit 9dfe9f610d
5 changed files with 33 additions and 136 deletions

View File

@ -145,6 +145,7 @@ public class FlowTaskVo implements Serializable {
/** /**
* 办理人名称 * 办理人名称
*/ */
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "assigneeIds")
private String assigneeNames; private String assigneeNames;
/** /**

View File

@ -141,14 +141,6 @@ public interface IFlwInstanceService {
*/ */
FlowInstance selectByTaskId(Long taskId); FlowInstance selectByTaskId(Long taskId);
/**
* 按任务id查询实例
*
* @param taskIdList 任务id
* @return 结果
*/
List<FlowInstance> selectByTaskIdList(List<Long> taskIdList);
/** /**
* 作废流程 * 作废流程
* *

View File

@ -14,7 +14,6 @@ import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowTaskVo; import org.dromara.workflow.domain.vo.FlowTaskVo;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 任务 服务层 * 任务 服务层
@ -150,14 +149,6 @@ public interface IFlwTaskService {
*/ */
List<FlowNode> getNextNodeList(FlowNextNodeBo bo); List<FlowNode> getNextNodeList(FlowNextNodeBo bo);
/**
* 按照任务id查询任务
*
* @param taskIdList 任务id
* @return 结果
*/
List<FlowHisTask> selectHisTaskByIdList(List<Long> taskIdList);
/** /**
* 按照任务id查询任务 * 按照任务id查询任务
* *
@ -166,14 +157,6 @@ public interface IFlwTaskService {
*/ */
FlowHisTask selectHisTaskById(Long taskId); FlowHisTask selectHisTaskById(Long taskId);
/**
* 按照实例id查询任务
*
* @param instanceIdList 流程实例id
* @return 结果
*/
List<FlowTask> selectByInstIdList(List<Long> instanceIdList);
/** /**
* 按照实例id查询任务 * 按照实例id查询任务
* *
@ -191,14 +174,6 @@ public interface IFlwTaskService {
*/ */
boolean taskOperation(TaskOperationBo bo, String taskOperation); boolean taskOperation(TaskOperationBo bo, String taskOperation);
/**
* 获取任务所有办理人
*
* @param taskIdList 任务id
* @return 结果
*/
Map<Long, List<UserDTO>> currentTaskAllUser(List<Long> taskIdList);
/** /**
* 获取当前任务的所有办理人 * 获取当前任务的所有办理人
* *

View File

@ -379,31 +379,6 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
return null; return null;
} }
/**
* 按任务id查询实例
*
* @param taskIdList 任务id
*/
@Override
public List<FlowInstance> selectByTaskIdList(List<Long> taskIdList) {
if (CollUtil.isEmpty(taskIdList)) {
return Collections.emptyList();
}
Set<Long> instanceIds = new HashSet<>();
List<FlowTask> flowTaskList = flwTaskService.selectByIdList(taskIdList);
for (FlowTask flowTask : flowTaskList) {
instanceIds.add(flowTask.getInstanceId());
}
List<FlowHisTask> flowHisTaskList = flwTaskService.selectHisTaskByIdList(taskIdList);
for (FlowHisTask flowHisTask : flowHisTaskList) {
instanceIds.add(flowHisTask.getInstanceId());
}
if (!instanceIds.isEmpty()) {
return this.selectInstListByIdList(new ArrayList<>(instanceIds));
}
return Collections.emptyList();
}
/** /**
* 作废流程 * 作废流程
* *

View File

@ -55,7 +55,6 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import static org.dromara.workflow.common.constant.FlowConstant.*; import static org.dromara.workflow.common.constant.FlowConstant.*;
@ -252,14 +251,12 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
hisTask.setCreateTime(updateTime); hisTask.setCreateTime(updateTime);
hisTask.setUpdateTime(updateTime); hisTask.setUpdateTime(updateTime);
hisTaskService.save(hisTask); hisTaskService.save(hisTask);
List<User> userList = flowCopyList.stream() List<User> userList = StreamUtils.toList(flowCopyList, x ->
.map(flowCopy -> { new FlowUser()
FlowUser flowUser = new FlowUser(); .setType(TaskAssigneeType.COPY.getCode())
flowUser.setType(TaskAssigneeType.COPY.getCode()); .setProcessedBy(String.valueOf(x.getUserId()))
flowUser.setProcessedBy(String.valueOf(flowCopy.getUserId())); .setAssociated(taskId)
flowUser.setAssociated(taskId); );
return flowUser;
}).collect(Collectors.toList());
// 批量保存抄送人员 // 批量保存抄送人员
FlowEngine.userService().saveBatch(userList); FlowEngine.userService().saveBatch(userList);
} }
@ -276,7 +273,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey()); queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr()); queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr());
queryWrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus()); queryWrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
Page<FlowTaskVo> page = this.getFlowTaskVoPage(pageQuery, queryWrapper); Page<FlowTaskVo> page = flwTaskMapper.getListRunTask(pageQuery.build(), queryWrapper);
this.wrapAssigneeInfo(page.getRecords());
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
@ -306,25 +304,28 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
public TableDataInfo<FlowTaskVo> pageByAllTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) { public TableDataInfo<FlowTaskVo> pageByAllTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo); QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey()); queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
Page<FlowTaskVo> page = getFlowTaskVoPage(pageQuery, queryWrapper); Page<FlowTaskVo> page = flwTaskMapper.getListRunTask(pageQuery.build(), queryWrapper);
this.wrapAssigneeInfo(page.getRecords());
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
private Page<FlowTaskVo> getFlowTaskVoPage(PageQuery pageQuery, QueryWrapper<FlowTaskBo> queryWrapper) { /**
Page<FlowTaskVo> page = flwTaskMapper.getListRunTask(pageQuery.build(), queryWrapper); * 为流程任务列表封装处理人 IDassigneeIds
List<FlowTaskVo> records = page.getRecords(); *
if (CollUtil.isNotEmpty(records)) { * @param taskList 流程任务列表
List<Long> taskIds = StreamUtils.toList(records, FlowTaskVo::getId); */
Map<Long, List<UserDTO>> listMap = currentTaskAllUser(taskIds); private void wrapAssigneeInfo(List<FlowTaskVo> taskList) {
records.forEach(t -> { if (CollUtil.isEmpty(taskList)) {
List<UserDTO> userList = listMap.getOrDefault(t.getId(), Collections.emptyList()); return;
if (CollUtil.isNotEmpty(userList)) {
t.setAssigneeIds(StreamUtils.join(userList, e -> String.valueOf(e.getUserId())));
t.setAssigneeNames(StreamUtils.join(userList, UserDTO::getNickName));
} }
}); List<User> associatedUsers = FlowEngine.userService()
.getByAssociateds(StreamUtils.toList(taskList, FlowTaskVo::getId));
Map<Long, List<User>> taskUserMap = StreamUtils.groupByKey(associatedUsers, User::getAssociated);
// 组装用户数据回任务列表
for (FlowTaskVo task : taskList) {
List<User> users = taskUserMap.get(task.getId());
task.setAssigneeIds(StreamUtils.join(users, User::getProcessedBy));
} }
return page;
} }
/** /**
@ -548,18 +549,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
return nextFlowNodes; return nextFlowNodes;
} }
/**
* 按照任务id查询任务
*
* @param taskIdList 任务id
* @return 结果
*/
@Override
public List<FlowHisTask> selectHisTaskByIdList(List<Long> taskIdList) {
return flowHisTaskMapper.selectList(new LambdaQueryWrapper<>(FlowHisTask.class)
.in(FlowHisTask::getId, taskIdList));
}
/** /**
* 按照任务id查询任务 * 按照任务id查询任务
* *
@ -572,17 +561,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
.eq(FlowHisTask::getId, taskId)); .eq(FlowHisTask::getId, taskId));
} }
/**
* 按照实例id查询任务
*
* @param instanceIdList 流程实例id
*/
@Override
public List<FlowTask> selectByInstIdList(List<Long> instanceIdList) {
return flowTaskMapper.selectList(new LambdaQueryWrapper<>(FlowTask.class)
.in(FlowTask::getInstanceId, instanceIdList));
}
/** /**
* 按照实例id查询任务 * 按照实例id查询任务
* *
@ -683,15 +661,12 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
// 批量删除现有任务的办理人记录 // 批量删除现有任务的办理人记录
if (CollUtil.isNotEmpty(flowTasks)) { if (CollUtil.isNotEmpty(flowTasks)) {
FlowEngine.userService().deleteByTaskIds(StreamUtils.toList(flowTasks, FlowTask::getId)); FlowEngine.userService().deleteByTaskIds(StreamUtils.toList(flowTasks, FlowTask::getId));
List<User> userList = flowTasks.stream() List<User> userList = StreamUtils.toList(flowTasks, flowTask ->
.map(flowTask -> { new FlowUser()
FlowUser flowUser = new FlowUser(); .setType(TaskAssigneeType.APPROVER.getCode())
flowUser.setType(TaskAssigneeType.APPROVER.getCode()); .setProcessedBy(userId)
flowUser.setProcessedBy(userId); .setAssociated(flowTask.getId())
flowUser.setAssociated(flowTask.getId()); );
return flowUser;
})
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(userList)) { if (CollUtil.isNotEmpty(userList)) {
FlowEngine.userService().saveBatch(userList); FlowEngine.userService().saveBatch(userList);
} }
@ -703,27 +678,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
return true; return true;
} }
/**
* 获取任务所有办理人
*
* @param taskIdList 任务id
*/
@Override
public Map<Long, List<UserDTO>> currentTaskAllUser(List<Long> taskIdList) {
Map<Long, List<UserDTO>> map = new HashMap<>();
// 获取与当前任务关联的用户列表
List<User> associatedUsers = FlowEngine.userService().getByAssociateds(taskIdList);
Map<Long, List<User>> listMap = StreamUtils.groupByKey(associatedUsers, User::getAssociated);
for (Map.Entry<Long, List<User>> entry : listMap.entrySet()) {
List<User> value = entry.getValue();
if (CollUtil.isNotEmpty(value)) {
List<UserDTO> userDtoList = userService.selectListByIds(StreamUtils.toList(value, e -> Convert.toLong(e.getProcessedBy())));
map.put(entry.getKey(), userDtoList);
}
}
return map;
}
/** /**
* 获取当前任务的所有办理人 * 获取当前任务的所有办理人
* *