package com.wms.entity.app.dto;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Collections;
import java.util.List;
import java.util.function.Function;

@Data
@ApiModel(value = "分页数据实体")
public class PageDto<T> {
    @ApiModelProperty(value ="总行数")
    private Long total;
    @ApiModelProperty(value ="总页数")
    private Long pages;
    @ApiModelProperty(value ="数据集合")
    private List<T> lists;

    /**
     * 将数据库集合转换为分页结果
     * @param page 数据库查询结果
     * @param converter 转换方法
     * @return 转换后的分页结果
     * @param <PO> 数据库结果集
     * @param <VO> 前端显示结果集
     */
    public static <PO, VO> PageDto<VO> of(Page<PO> page, Function<PO, VO> converter) {
        PageDto<VO> pageDto = new PageDto<>();
        // 设置总数
        pageDto.setTotal(page.getTotal());
        // 设置总页数
        pageDto.setPages(page.getPages());
        if (page.getRecords().isEmpty()) {
            pageDto.setLists(Collections.emptyList());
            return pageDto;
        }
        pageDto.setLists(page.getRecords().stream().map(converter).toList());
        return pageDto;
    }
}
