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 关于模型训练的一个问题
  • ¥15 装了几千台服务器从来没遇到这种问题,哎看下哪位帮我解决吧
  • ¥15 单片机程序上的困难问题
  • ¥15 请教某软件缓存Ts文件破解合并mp4的方法
  • ¥15 求小游戏炸弹人中关于敌人的C++代码
  • ¥15 拿到这个服务器最高权限有偿
  • ¥50 来个抓app跳转支付宝转链接的
  • ¥15 remotes安装提示没有description文件
  • ¥15 AttributeError: 'NoneType' object has no attribute 'drop_duplicates'报错
  • ¥15 以下代码,运行结果报错