Activiti里的待办任务和已办任务的查询结果合在一起之后出现页码当中断层的问题。其中待办任务,已办任务的查询都是通过现有的方法传递页码对象参数,这次要求1页10条查询结果,现有的方法都是前端那边传页码参数直接获取结果,想知道按照目前的实现方式能否实现(直接调用现有的待办和已办的结果再进行分页的实现方式,这里的req里包含pagenum和pagesize),如果不能的话想知道有没有其他方法。目前分页操作涉及的不多,目前试过java的sublist方法但是没有成功,多谢各位了



Activiti里的待办任务和已办任务的查询结果合在一起之后出现页码当中断层的问题。其中待办任务,已办任务的查询都是通过现有的方法传递页码对象参数,这次要求1页10条查询结果,现有的方法都是前端那边传页码参数直接获取结果,想知道按照目前的实现方式能否实现(直接调用现有的待办和已办的结果再进行分页的实现方式,这里的req里包含pagenum和pagesize),如果不能的话想知道有没有其他方法。目前分页操作涉及的不多,目前试过java的sublist方法但是没有成功,多谢各位了



基于Monster 组和GPT的调写:
一个更好的解决方案是,通过单独的查询方法,将待办任务和已办任务的结果合并到一个集合中,并对它进行分页操作。以下是一个伪代码示例:
public TableDataInfo<TaskVo> getAllTasksByPage(TaskBo req) {
String username = LoginHelper.getUserId().toString();
// 查询我的待办任务
TaskQuery waitingQuery = taskService.createTaskQuery().taskAssignee(username).active();
if (StringUtils.isNotBlank(req.getTaskName())) {
waitingQuery.taskNameLikeIgnoreCase("%" + req.getTaskName() + "%");
}
List<Task> waitingList = waitingQuery.list();
// 查询我的已办任务
HistoricTaskInstanceQuery finishedQuery = historyService.createHistoricTaskInstanceQuery()
.taskAssignee(username).finished().orderByHistoricTaskInstanceEndTime().desc();
if (StringUtils.isNotBlank(req.getTaskName())) {
finishedQuery.taskNameLike(req.getTaskName());
}
List<HistoricTaskInstance> finishedList = finishedQuery.list();
// 将待办任务和已办任务的结果合并到一个集合中
List<TaskVo> taskList = new ArrayList<>();
for (Task task : waitingList) {
TaskVo taskVo = new TaskVo();
BeanUtils.copyProperties(task, taskVo);
taskVo.setAssigneeId(StringUtils.isNotBlank(task.getAssignee()) ? Long.valueOf(task.getAssignee()) : null);
taskList.add(taskVo);
}
for (HistoricTaskInstance historicTaskInstance : finishedList) {
TaskVo taskVo = new TaskVo();
BeanUtils.copyProperties(historicTaskInstance, taskVo);
taskVo.setAssigneeId(StringUtils.isNotBlank(historicTaskInstance.getAssignee()) ? Long.valueOf(historicTaskInstance.getAssignee()) : null);
taskVo.setEndTime(historicTaskInstance.getEndTime());
taskList.add(taskVo);
}
// 对集合进行分页操作
List<TaskVo> pageList = new ArrayList<>();
int startIndex = (req.getPageNum() - 1) * req.getPageSize();
int endIndex = startIndex + req.getPageSize();
for (int i = startIndex; i < endIndex && i < taskList.size(); i++) {
pageList.add(taskList.get(i));
}
// 返回分页结果
TableDataInfo<TaskVo> result = new TableDataInfo<>();
result.setRows(pageList);
result.setTotal(taskList.size());
return result;
}
这个实现方式将待办任务和已办任务的结果合并到一个集合中,并对它进行分页操作,从而避免了页码中断层的问题。