背景:jpa条件分页查询完之后,进行逻辑处理,非数据库所有字段
一、Page对象使用
Page对象,其中totalElement为查询条数,pageable为查询条件,content为包含的list
可以利用此来构建新的Page对象,对content进行处理,以及查询的条数处理
二、代码演示
public Page<UserStaffVo> listVoWithLabor(UserStaffEntity staff) {
Page<UserStaffEntity> source = staffService.selectPage(staff);
List<UserStaffEntity> sourceList = source.getContent();
Map<String, String> map=new HashMap<>(16);
int targetTotal= (int) source.getTotalElements();
//拿到这个用户现在所绑定有效的合同
List<String> userList = sourceList.stream().map(UserStaffEntity::getUser).toList();
if(CollectionUtils.isNotEmpty(userList)){
userList=userList.stream().distinct().toList();
map= signFacade.buildLaborContractProcessor(userList);
}
//拷贝对象
List<UserStaffVo> targetList=new ArrayList<>(source.getSize());
for (UserStaffEntity sourceEntity : sourceList) {
UserStaffVo targetVo = new UserStaffVo();
BeanUtils.copyProperties(sourceEntity,targetVo);
targetVo.setLaborContractName(map.get(targetVo.getUser()));
targetList.add(targetVo);
}
//搜索出所属劳动合同条件
if(StringUtils.isNotBlank(staff.getLaborContract())){
LaborContractEntity labor = laborRepository.findById(staff.getLaborContract()).get();
List<UserStaffVo> list =targetList.stream()
.filter(item -> !labor.getName().equals(item.getLaborContractName()))
.toList();
targetList.removeAll(list);
targetTotal-=list.size();
}
Page<UserStaffVo> targetPage = new PageImpl<>(targetList,source.getPageable(),targetTotal);
return targetPage;
}