1.业务代码

 

复制代码
@GetMapping("/list")
    public TableDataInfo list(JsnhRoomCategoriesSearch search)
    {
        try {
            startPage();
            if(StringUtils.isEmpty(search.getDeleted())){
                search.setDeleted("F");  //默认查询的是未删除的(不是编辑的历史)
            }
            List<JsnhRoomCategoriesDetailResult> list = jsnhRoomCategoriesService.selectJsnhRoomCategoriesBycondition(search);
            return getDataTable(list);
        }catch (Exception e){
            e.printStackTrace();
        }
        TableDataInfo t = new TableDataInfo();
        t.setCode(HttpStatus.ERROR);
        t.setMsg("系统内部错误");
        t.setRows(new ArrayList<>());
        return  new TableDataInfo();
    }
复制代码

 

 

复制代码
@Override
    public List<JsnhRoomCategoriesDetailResult> selectJsnhRoomCategoriesBycondition(JsnhRoomCategoriesSearch search) {
        List<JsnhRoomCategoriesDetailResult> li = jsnhRoomCategoriesMapper.selectJsnhRoomCategoriesDetailBycondition(search);
        if(StringUtils.collectIsNotEmpty(li)){
            
            List<JsnhRoomCategoriesDetailResult> collect = li.stream().map(x -> {
                x.setImgUrl();
                //x.setRoom();
                return x;
            }).collect(Collectors.toList());
            return collect;
        }
        return li;
    }
复制代码

  注意:List<JsnhRoomCategoriesDetailResult> li = jsnhRoomCategoriesMapper.selectJsnhRoomCategoriesDetailBycondition(search);查询返回列表,后面对返回结果使用stream进行了处理,返回了新的集合

  在controller里面  调用: return getDataTable(list);

复制代码
protected TableDataInfo getDataTable(List<?> list)
    {
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.SUCCESS);
        rspData.setMsg("查询成功");
        rspData.setRows(list);
        rspData.setTotal(new PageInfo(list).getTotal());
        return rspData;
    }
复制代码

 

 public PageInfo(List<T> list) {
        this(list, DEFAULT_NAVIGATE_PAGES);
    }
复制代码
public PageInfo(List<T> list, int navigatePages) {
        super(list);
        if (list instanceof Page) {
            Page page = (Page) list;
            this.pageNum = page.getPageNum();
            this.pageSize = page.getPageSize();

            this.pages = page.getPages();
            this.size = page.size();
            //由于结果是>startRow的,所以实际的需要+1
            if (this.size == 0) {
                this.startRow = 0;
                this.endRow = 0;
            } else {
                this.startRow = page.getStartRow() + 1;
                //计算实际的endRow(最后一页的时候特殊)
                this.endRow = this.startRow - 1 + this.size;
            }
        } else if (list instanceof Collection) {
            this.pageNum = 1;
            this.pageSize = list.size();

            this.pages = this.pageSize > 0 ? 1 : 0;
            this.size = list.size();
            this.startRow = 0;
            this.endRow = list.size() > 0 ? list.size() - 1 : 0;
        }
        if (list instanceof Collection) {
            calcByNavigatePages(navigatePages);
        }
    }
复制代码

  super(list);

    public PageSerializable(List<T> list) {
        this.list = list;
        if(list instanceof Page){
            this.total = ((Page)list).getTotal();
        } else {
            this.total = list.size();
        }
    }

 

super(list);这里有一个判断 list instanceof Page,stream处理后返回的新的list在这里判断返回的是false,所以取的total是list的size,而不是this.total = ((Page)list).getTotal();所以返回的total存在问题

把业务类修改下,对sql查询返回的结果集合直接处理,而不是使用stream处理形成新的集合。这样子list instanceof Page判断就为true。total取的就是this.total = ((Page)list).getTotal()的值

复制代码
 @Override
    public List<JsnhRoomCategoriesDetailResult> selectJsnhRoomCategoriesBycondition(JsnhRoomCategoriesSearch search) {
        List<JsnhRoomCategoriesDetailResult> li = jsnhRoomCategoriesMapper.selectJsnhRoomCategoriesDetailBycondition(search);
        if(StringUtils.collectIsNotEmpty(li)){
            for (JsnhRoomCategoriesDetailResult x:li) {
                x.setImgUrl();
            }
        }
        return li;
    }
复制代码