weixin_58662786 2023-03-12 11:34 采纳率: 63.6%
浏览 37
已结题

Activiti如何将待办任务和已办任务的查询结果进行合并和分页

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

img

img

img

  • 写回答

6条回答 默认 最新

  • 社区专家-Monster-XH 2023-03-12 12:00
    关注

    基于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;
    }
    
    

    这个实现方式将待办任务和已办任务的结果合并到一个集合中,并对它进行分页操作,从而避免了页码中断层的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 3月20日
  • 已采纳回答 3月12日
  • 创建了问题 3月12日

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装
  • ¥40 复杂的限制性的商函数处理