项目里面要用activiti写用户审批流程,在用户审批结束之后,正在运行的流程里面用户审批的流程结束,页面上无法显示已经结束的审批流程。想让大家看看目前做法是否可行,还有没有更简单的方法,这样后期方便维护。
目前用户流程中的审批已经写好,需要添加用户结束的审批流程,并在里面添加必要的流程变量,有没有办法一下都取出来,因为后面要做分页。
图中做了两个query,想分别取出正在运行的审批流程和已经结束的审批流程,但是最后合在一起的话分页会很麻烦,不知道有没有办法将query合并起来。
项目里面要用activiti写用户审批流程,在用户审批结束之后,正在运行的流程里面用户审批的流程结束,页面上无法显示已经结束的审批流程。想让大家看看目前做法是否可行,还有没有更简单的方法,这样后期方便维护。
目前用户流程中的审批已经写好,需要添加用户结束的审批流程,并在里面添加必要的流程变量,有没有办法一下都取出来,因为后面要做分页。
图中做了两个query,想分别取出正在运行的审批流程和已经结束的审批流程,但是最后合在一起的话分页会很麻烦,不知道有没有办法将query合并起来。
该回答引用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查询或者其他技术