当项目组负责某个业务service的同学告诉你,他的数据是自己通过汇聚其他接口拼凑来的,所以无法使用自带分页插件,前端的同学告诉你他的view组件是默认需要分页的,数据格式必须按照分页的格式来,做为提供接口的你该如何是好?只好手动写分页了。
public UnifyResp recommendProductlist(RecommendProductVO search) {
try {
RecommendProductVO rproduct = recommendproductservice.getRecommendProductByCode(search.getRecommendCode());
if (null != rproduct) {
String ids = rproduct.getIds();
//查商品
List<ProductVO> productVOList = productService.simpleBatchSelectByPids(Arrays.asList(ids.split(",")));
int listSize = productVOList.size();
//返回total
rproduct.setTotal(listSize);
int currentPage = search.getCurrentPage();
int pageSize = search.getPageSize();
//当前页码数据有误设置页码为1
if (null == Integer.valueOf(currentPage) || currentPage < 1) {
currentPage = 1;
}
rproduct.setCurrentPage(currentPage);
//当前条数有误设置条数为10
if (null == Integer.valueOf(pageSize) || 0 == pageSize) {
pageSize = 10;
}
rproduct.setPageSize(pageSize);
int startIndex;
int endIndex = 1;
//当前页码为1,设置初始值为0
if (currentPage == 1) {
startIndex = 0;
//当前页码不为1,设置结束值=条数值
if (pageSize != 1) {
endIndex = pageSize;
}
} else {
//起始值 = (当前页码-1) * 条数
startIndex = (currentPage - 1) * pageSize;
//结束值 = 当前页码 * 条数 - 1
endIndex = currentPage * pageSize - 1;
}
//当前页x条数如果大于总size
if (currentPage * pageSize > listSize) {
//当前页码显示的第一条数据如果大于总size(总size=7 当前页码5,总条数2),直接返回空数据
if (currentPage * pageSize - pageSize >= listSize) {
rproduct.setProductList(new ArrayList<>());
return UnifyResp.success(rproduct, UnifyCode.SUCCESS);
} else if (endIndex >= listSize) { //当前页码显示的第一条数据在总size范围内,结束值设置为总size
endIndex = listSize;
}
}
//subList取值index需要+1,如果结束值小于总size并且当前页码不等于1,结束值+1
if (endIndex < listSize && currentPage != 1) {
productVOList = productVOList.subList(startIndex, endIndex + 1);
} else {
productVOList = productVOList.subList(startIndex, endIndex);
}
rproduct.setProductList(productVOList);
}
return UnifyResp.success(rproduct, UnifyCode.SUCCESS);
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage(), e);
}
return UnifyResp.error(UnifyCode.ERROR500);
}