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

发布时间:2023年12月20日

更多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 流程定义分页列表数据
     */
    @Override
    public 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 拆分成多个List
        List<? 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);
    }

效果如下:

文章来源:https://blog.csdn.net/qq_40032778/article/details/135094602
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。