问题现象:没有根据传入的pageNum和PageSize进行正确分页,比如传入的是pageNum=1,pageSize=5,期望查询出的数量应该为20,但是实际total不对,pages也不对,pageSize也被改了
public PageInfo<ClueInfoDTO> getSampleOrCustomerList(String appId, String openId, Byte isCustomer, int pageNum, int pageSize) {
List<ClueInfoDTO> clueInfoDTOList = new ArrayList<>();
PageHelper.startPage(pageNum, pageSize);
UserClueInfo param = new UserClueInfo();
param.setAppId(appId);
param.setToOpenId(openId);
param.setIsCustomer(isCustomer);
List<UserClueInfo> retList = userClueInfoMapper.select(param);
if (Objects.isNull(retList)){
return new PageInfo<>(clueInfoDTOList);
}
List<String> fromOpenIdList = retList.stream().map(UserClueInfo::getFromOpenId).collect(Collectors.toList());
Example wexample = new Example(UserWxUnionInfo.class);
Example.Criteria wcriteria = wexample.createCriteria();
wcriteria.andEqualTo("appid",appId);
wcriteria.andIn("openid", fromOpenIdList);
Map<String, UserWxUnionInfo> fromOpenIdMap = userWxUnionInfoMapper.selectByExample(wexample).stream().collect(Collectors.toMap(UserWxUnionInfo::getOpenid, s -> s));
retList.forEach((userClue) -> {
ClueInfoDTO clueInfoDTO = new ClueInfoDTO();
BeanUtils.copyProperties(userClue, clueInfoDTO);
UserWxUnionInfo user = fromOpenIdMap.get(clueInfoDTO.getFromOpenId());
if (Objects.nonNull(user)) {
clueInfoDTO.setName(setWxUserName(user));
clueInfoDTO.setUserAvatar(user.getPicurl());
}
clueInfoDTOList.add(clueInfoDTO);
});
return new PageInfo<>(clueInfoDTOList);
}
debug也没发现什么问题,后来发现原来是对返回的retList做了forEach处理后,使用新的List作为返回的数据有问题,后来代码修改为如下就可以正常分页了。
List<ClueInfoDTO> clueInfoDTOList = new ArrayList<>();
PageHelper.startPage(pageNum, pageSize);
UserClueInfo param = new UserClueInfo();
param.setAppId(appId);
param.setToOpenId(openId);
param.setIsCustomer(isCustomer);
List<UserClueInfo> retList = userClueInfoMapper.select(param);
if (Objects.isNull(retList) || retList.size() == 0) {
return new PageInfo<>(clueInfoDTOList);
}
PageInfo<UserClueInfo> plist = new PageInfo<>(retList);
List<String> fromOpenIdList = retList.stream().map(UserClueInfo::getFromOpenId).collect(Collectors.toList());
Example wexample = new Example(UserWxUnionInfo.class);
Example.Criteria wcriteria = wexample.createCriteria();
wcriteria.andEqualTo("appid", appId);
wcriteria.andIn("openid", fromOpenIdList);
Map<String, UserWxUnionInfo> fromOpenIdMap = userWxUnionInfoMapper.selectByExample(wexample).stream().collect(Collectors.toMap(UserWxUnionInfo::getOpenid, s -> s));
PageInfo<ClueInfoDTO> retPageList = new PageInfo<>();
retList.forEach((userClue) -> {
ClueInfoDTO clueInfoDTO = new ClueInfoDTO();
BeanUtils.copyProperties(userClue, clueInfoDTO);
UserWxUnionInfo user = fromOpenIdMap.get(clueInfoDTO.getFromOpenId());
if (Objects.nonNull(user)) {
clueInfoDTO.setName(user.getNick());
clueInfoDTO.setUserAvatar(user.getPicurl());
}
clueInfoDTOList.add(clueInfoDTO);
});
PagerCopyUtil.setPageInfo(retPageList,plist,clueInfoDTOList);
return retPageList;
先保存原来的List的分页信息,后面进行手动set即可。