多字段实现动态排序

需求:多字段默认一个字段并且可以实现其他字段的动态排序(desc,asc)
废话不多说,直接上代码。

首先定义一个实体类
相关的代码如下:

  //--以下是动态排序字段
    private List<SortField> fields;
    public CrmRegion() {
        this.fields = new ArrayList<>();
    }

    public List<SortField> getFields() {
        return fields;
    }
    private String sortBy;
    private String sortOrder;

    public static class SortField {
        private String field;
        private String direction;

        public String getField() {
            return field;
        }

        public void setField(String field) {
            this.field = field;
        }

        public String getDirection() {
            return direction;
        }

        public void setDirection(String direction) {
            this.direction = direction;
        }
    }

2.动态排序的公共方法 controller

//动态排序
    public static CrmRegion crmRegionOrder(CrmRegion crmRegion,List<String> sortBy,List<String> sortOrder){
        if (sortBy != null && sortOrder != null && sortBy.size() == sortOrder.size()) {
            for (int i = 0; i < sortBy.size(); i++) {
                CrmRegion.SortField sortField = new CrmRegion.SortField();
                sortField.setField(sortBy.get(i));
                sortField.setDirection(sortOrder.get(i));
                crmRegion.getFields().add(sortField);
            }
        }
        return crmRegion;
    }

controller类相关代码:

 @GetMapping("/getCustomerData")
    @ApiOperation("客户数据概括")
    @ApiName(name = "sheet:getCustomerData")
    public TableDataInfo getCustomerData(CrmRegion crmRegion,@RequestParam(required = false) List<String> sortBy, @RequestParam(required = false) List<String> sortOrder) {
        List<CrmRegion> crmRegionList = null;
        //动态排序
        crmRegion = crmRegionOrder(crmRegion,sortBy,sortOrder);
        SysUser sysUser = userUtils.getLoginUser().getUser();
        crmRegion.setDeptId(sysUser.getDept().getDeptId());
        startPage();
        if (StringUtil.isEmpty(sysUser.getPost())){
            TableDataInfo rspData = new TableDataInfo();
            rspData.setCode(HttpStatus.SUCCESS);
            rspData.setMsg("查询成功");
            return rspData;
        }
        if (sysUser.getPost().equals(String.valueOf(PostEnum.GROUP_LEADER.getCode()))) {
            crmRegionList = crmPerformanceRankingService.getGroupBYCustemerList(crmRegion);
            。。。。。。

最后是xml文件

select * from duml
        order by totalRevenueUsd  desc -- 默认的排序字段
        <!-- 加动态排序-->
        <if test="sortBy != null and sortOrder != null and sortBy != '' and sortOrder != ''">
            <foreach item="field" collection="fields">
                ,${field.field} ${field.direction}
            </foreach>
        </if>

猜你喜欢

转载自blog.csdn.net/leaning_java/article/details/131549693
今日推荐