nbcio-boot的flowable流程模型查询修正为按发布时间倒序

2023-12-20 17:36

本文主要是介绍nbcio-boot的flowable流程模型查询修正为按发布时间倒序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

更多nbcio-boot功能请看演示系统

gitee源代码地址

后端代码: https://gitee.com/nbacheng/nbcio-boot

前端代码:https://gitee.com/nbacheng/nbcio-vue.git

在线演示(包括H5) : http://122.227.135.243:9888
 

       之前流程模型查询一直比较混乱,不是按照时间来排序,因为本身flowable不支持这种排序,原因是他的定义里就没有这个时间。

      所以只能用其它方法了。

     java实现方法如下:

/*** 流程定义列表** @param pageNum  当前页码* @param pageSize 每页条数* @param flowProcDefDto* modify by nbacheng* @return 流程定义分页列表数据*/@Overridepublic Page<FlowProcDefDto> list(Integer pageNum, Integer pageSize, FlowProcDefDto flowProcDefDto) {Page<FlowProcDefDto> page = new Page<>();// 流程定义列表数据查询ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();processDefinitionQuery.latestVersion()   //获取最新的一个版本.orderByProcessDefinitionName().asc();/*=====参数=====*/if (StrUtil.isNotBlank(flowProcDefDto.getName())){processDefinitionQuery.processDefinitionNameLike("%"+flowProcDefDto.getName()+"%");}if (StrUtil.isNotBlank(flowProcDefDto.getCategory())){processDefinitionQuery.processDefinitionCategory(flowProcDefDto.getCategory());}if (flowProcDefDto.getSuspensionState() == 1){processDefinitionQuery.active();}/*============*/page.setTotal(processDefinitionQuery.count());//获取所有数据List<ProcessDefinition> processDefinitionList = processDefinitionQuery.list();List<FlowProcDefDto> totalDataList = new ArrayList<>();for (ProcessDefinition processDefinition : processDefinitionList) {String deploymentId = processDefinition.getDeploymentId();Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();FlowProcDefDto reProcDef = new FlowProcDefDto();BeanUtils.copyProperties(processDefinition, reProcDef);// 流程定义时间reProcDef.setDeploymentTime(deployment.getDeploymentTime());SysForm sysForm = sysDeployFormService.selectSysDeployFormByDeployId(reProcDef.getDeploymentId());if (Objects.nonNull(sysForm)) {reProcDef.setFormName(sysForm.getFormName());reProcDef.setFormId(sysForm.getId());}FlowDeployOnline flowDeployOnline = iFlowDeployOnlineService.selectFlowDeployOnlineByDeployId(reProcDef.getDeploymentId());if (Objects.nonNull(flowDeployOnline)) {reProcDef.setFormName(flowDeployOnline.getTableName());reProcDef.setFormId(flowDeployOnline.getId());}SysCustomForm sysCustomForm = sysDeployFormService.selectSysCustomFormByDeployId(reProcDef.getDeploymentId());if (Objects.nonNull(sysCustomForm)) {reProcDef.setFormName(sysCustomForm.getBusinessName());reProcDef.setFormId(sysCustomForm.getId());}totalDataList.add(reProcDef);}List<FlowProcDefDto> dataList = new ArrayList<>();//按发布时间进行倒序重新排列,以便用户方便查询if(ObjectUtils.isNotEmpty(totalDataList)) {totalDataList.sort(Comparator.comparing(FlowProcDefDto::getDeploymentTime).reversed());dataList = partition(totalDataList,pageSize,pageNum);}page.setRecords(dataList);return page;}/**@Description: 使用 Lists 工具类的 partition 分页* <br> 1. 页码边界值处理:小于等于0,情况处理; 页码大于 (总页数-1) 情况处理* <br> 2. 总页数-1 ,原因是:list集合索引是从0开始的。*  @param pageSize 每页显示的数量*  @param pageNum  当前页码* @see com.google.common.collect.Lists#partition(java.util.List, int)*/private List<FlowProcDefDto> partition(List<FlowProcDefDto> totalDataList, int pageSize, int pageNum) {// 将 List 按照 PageSzie 拆分成多个ListList<? extends List<?>> partition = Lists.partition(totalDataList, pageSize);// 总页数int pages = partition.size();pageNum = pageNum <= 0 ? 0 : (pageNum <= (pages - 1) ? pageNum : (pages - 1));return (List<FlowProcDefDto>) partition.get(pageNum);}

效果如下:

这篇关于nbcio-boot的flowable流程模型查询修正为按发布时间倒序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/516875

相关文章

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

修复已被利用的高危漏洞! macOS Sequoia 15.6.1发布

《修复已被利用的高危漏洞!macOSSequoia15.6.1发布》苹果公司于今日发布了macOSSequoia15.6.1更新,这是去年9月推出的macOSSequoia操作... MACOS Sequoia 15.6.1 正式发布!此次更新修复了一个已被黑客利用的严重安全漏洞,并解决了部分中文用户反馈的

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service