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日

悬赏问题

  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题