背景
之前有个数据存在redis里,获取的时候直接给所有,现在需要优化,故加上对查询条件和分页的支持
代码样例
controller层
## 代码
@Slf4j
@RequestMapping("/demo")
@RestController
public class WebController {
@Autowired
private WebService webService;
/**
* demo
*
* @return
*/
@PostMapping("/gateways/page")
public TableDataInfo page(@RequestBody(required = false) BaseProtocolConfigDto config) {
DriverPage<BaseProtocolConfig> page = webService.page(config);
return getDataTable(page);
}
/**
* 响应请求分页数据 - demo
* @param page
* @return
*/
protected TableDataInfo getDataTable(DriverPage<?> page)
{
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(HttpStatus.HTTP_OK);
rspData.setRows(page.getList());
rspData.setTotal(page.getTotal());
return rspData;
}
}
service层
先获取所有
## 代码
@Override
public List<BaseProtocolConfig> gatewayList(BaseProtocolConfigDto config) {
//存放最终结果
List<BaseProtocolConfig> gateways = supBoxList();
if (StringUtil.isEmpty(gateways)) {
log.error("未检测到协议配置信息");
return null;
}
//条件执行
List<BaseProtocolConfig> list = gateways.stream()
.filter(way -> {
//网关名称
return (
(StringUtil.isEmpty(config.getClientName()) || (way.getClientName().contains(config.getClientName())) )
&&
(StringUtil.isEmpty(config.getIp()) || (way.getIp().contains(config.getIp())) )
&&
(StringUtil.isNull(config.getPort()) || config.getPort().equals(way.getPort()))
&&
(StringUtil.isEmpty(config.getType()) || (way.getType().contains(config.getType())) )
&&
(StringUtil.isNull(config.getStatus()) || config.getStatus().equals(way.getStatus()))
);
}).sorted(Comparator.comparing( BaseProtocolConfig::getIp).thenComparing(BaseProtocolConfig::getType))
.collect(Collectors.toList());
return list;
}
再分页
## 代码
@Override
public DriverPage<BaseProtocolConfig> page(BaseProtocolConfigDto dto) {
DriverPage<BaseProtocolConfig> customPage = new DriverPage<>();
List<BaseProtocolConfig> configs = gatewayList(dto);
if ( Objects.isNull(dto.getPage()) ) {
Pages page = new Pages();
dto.setPage(page);
}
int start = ( dto.getPage().getPageNum() - 1 ) * dto.getPage().getPageSize();
int end = ( dto.getPage().getPageNum() ) * dto.getPage().getPageSize();
int total = configs.size();
List<BaseProtocolConfig> subList = Lists.newArrayList();
if( start > total ){
// 初始值大于集合最大长度
log.info("分页结果不存在");
}else if (start <= total && end > total ){
// 初始值小于集合最大长度,结束值大于集合最大长度
subList = configs.subList(start, total );
}else{
// 正常情况
subList = configs.subList(start, end);
}
customPage.setList(subList);
customPage.setTotal(configs.size());
return customPage;
}
使用的bean
一
二
三