weixin_58662786 2023-03-18 14:31 采纳率: 63.6%
浏览 36
已结题

Activiti关于获得用户审批流程的问题

项目里面要用activiti写用户审批流程,在用户审批结束之后,正在运行的流程里面用户审批的流程结束,页面上无法显示已经结束的审批流程。想让大家看看目前做法是否可行,还有没有更简单的方法,这样后期方便维护。

目前用户流程中的审批已经写好,需要添加用户结束的审批流程,并在里面添加必要的流程变量,有没有办法一下都取出来,因为后面要做分页。

图中做了两个query,想分别取出正在运行的审批流程和已经结束的审批流程,但是最后合在一起的话分页会很麻烦,不知道有没有办法将query合并起来。

img

  • 写回答

7条回答 默认 最新

  • CodeBytes 2023-03-18 14:47
    关注

    该回答引用ChatGPT

    如有疑问,可以回复我!

    可以尝试将两个查询(正在运行的审批流程和已结束的审批流程)放在同一个查询中,然后按照创建时间对结果进行排序。这样可以简化查询逻辑,同时也方便进行分页。以下是一个示例代码:

    
    // 获取流程引擎
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
    // 获取TaskService和HistoryService
    TaskService taskService = processEngine.getTaskService();
    HistoryService historyService = processEngine.getHistoryService();
    
    // 正在运行的审批流程查询
    TaskQuery runningTasksQuery = taskService.createTaskQuery()
        .taskDefinitionKey("Activity_test_Approval")
        .taskCandidateOrAssigned(currentUserId)
        .orderByTaskCreateTime().asc();
    
    // 已结束的审批流程查询
    HistoricTaskInstanceQuery finishedTasksQuery = historyService.createHistoricTaskInstanceQuery()
        .taskDefinitionKey("Activity_test_Approval")
        .finished()
        .orderByTaskCreateTime().desc();
    
    // 合并正在运行的审批流程和已结束的审批流程
    List<Task> runningTasks = runningTasksQuery.list();
    List<HistoricTaskInstance> finishedTasks = finishedTasksQuery.list();
    
    List<Object> allTasks = new ArrayList<>();
    allTasks.addAll(runningTasks);
    allTasks.addAll(finishedTasks);
    
    // 对结果进行排序
    allTasks.sort((task1, task2) -> {
        Date createTime1 = task1 instanceof Task ? ((Task) task1).getCreateTime() : ((HistoricTaskInstance) task1).getCreateTime();
        Date createTime2 = task2 instanceof Task ? ((Task) task2).getCreateTime() : ((HistoricTaskInstance) task2).getCreateTime();
        return createTime1.compareTo(createTime2);
    });
    
    // 计算总数
    long total = runningTasksQuery.count() + finishedTasksQuery.count();
    
    // 对结果进行分页
    int pageSize = 10;
    int pageNumber = 1; // 从1开始
    List<Object> pagedTasks = allTasks.subList((pageNumber - 1) * pageSize, Math.min(pageNumber * pageSize, allTasks.size()));
    
    

    这个示例代码首先分别获取正在运行的审批流程和已结束的审批流程,然后将它们合并到一个列表中,并按照创建时间对结果进行排序。接着,计算总数以及进行分页。

    这种方法可以简化查询逻辑,并且使分页更加简单。不过,请注意,如果任务数量很大,这种方法可能会导致性能问题。如果您在实际应用中遇到性能问题,可以尝试优化查询逻辑,例如使用原生SQL查询或者其他技术

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”