业务数据来自a-app与b-app,其中a-app中数据的业务时间早于b-app,现在需要对这两个来源的数据做内存分页查询。
public ResultGson<ProductPaginationBean> mergePaginationQuery(int pageNo, int pageSize) {
ResultGson<ProductPaginationBean> productPaginationResultGson = new ResultGson<ProductPaginationBean>("000", "success", null);
ResultGson<ProductPaginationBean> paginationOneResultGson = paginationOneQuery(pageNo, pageSize);
ResultGson<ProductPaginationBean> paginationTwoBeanResultGson = paginationSecondQuery(pageNo, pageSize);
int firstTotalCount = paginationOneResultGson.getData().getTotalCount();
int secondTotalCount = paginationTwoBeanResultGson.getData().getTotalCount();
int totalCount = firstTotalCount + secondTotalCount;
int firstTotalPage = firstTotalCount / pageSize;
int firstMode = firstTotalCount % pageSize;
if (firstTotalPage > pageNo) {
ProductPaginationBean productPaginationBean = new ProductPaginationBean(totalCount, paginationOneResultGson.getData().getProductDTOList());
productPaginationResultGson.setData(productPaginationBean);
return productPaginationResultGson;
}
if (firstTotalPage < pageNo) {
ResultGson<ProductPaginationBean> productPaginationFirstResultGson = paginationSecondQuery(pageNo - firstTotalPage -1, pageSize);
ResultGson<ProductPaginationBean> productPaginationSecondResultGson = paginationSecondQuery(pageNo - firstTotalPage, pageSize);
List<ProductDTO> mergedProductList = mergeDataAfterRemoveDataOfFirstList(pageSize-firstMode, productPaginationFirstResultGson.getData().getProductDTOList(), productPaginationSecondResultGson.getData().getProductDTOList());
ProductPaginationBean productPaginationBean = new ProductPaginationBean(totalCount, mergedProductList);
productPaginationResultGson.setData(productPaginationBean);
return productPaginationResultGson;
}
if (firstTotalPage== pageNo) {
paginationOneResultGson = paginationOneQuery(pageNo, pageSize);
paginationTwoBeanResultGson = paginationSecondQuery(0, pageSize);
List<ProductDTO> productDTOList = mergeDataDeleteSomeIfPossible(paginationOneResultGson.getData().getProductDTOList() , paginationTwoBeanResultGson.getData().getProductDTOList() , pageSize);
ProductPaginationBean productPaginationBean = new ProductPaginationBean(totalCount, productDTOList);
productPaginationResultGson.setData(productPaginationBean);
return productPaginationResultGson;
}
return productPaginationResultGson;
}
private List<ProductDTO> mergeDataAfterRemoveDataOfFirstList(int removeSize, List<ProductDTO> firstProductList, List<ProductDTO> secondProductList) {
List<ProductDTO> resultProductList = new ArrayList<>();
if (firstProductList.size() > removeSize) {
resultProductList.addAll(firstProductList.subList(removeSize, firstProductList.size()));
}
int cutSize = removeSize > secondProductList.size() ? secondProductList.size() : removeSize;
resultProductList.addAll(secondProductList.subList(0, cutSize));
return resultProductList;
}
private List<ProductDTO> mergeDataDeleteSomeIfPossible(List<ProductDTO> firstProductList, List<ProductDTO> secondProductList, int pageSize) {
List<ProductDTO> resultProductList = new ArrayList<>();
resultProductList.addAll(firstProductList);
resultProductList.addAll(secondProductList);
if (resultProductList.size() > pageSize) {
resultProductList = resultProductList.subList(0, pageSize);
}
return resultProductList;
}