分页查询功能

wxpay
LI-CCONG\李聪聪 8 months ago
parent fd64c134b0
commit b7784b6a3d

@ -1,19 +1,27 @@
package cc.yunxi.common.domain;
import cn.hutool.core.util.StrUtil;
import cc.yunxi.common.utils.CommonUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.Min;
import java.io.Serializable;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.stream.Collectors;
@Data
@ApiModel(description = "分页查询条件")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class PageQuery {
public static final Integer DEFAULT_PAGE_SIZE = 20;
@ -21,50 +29,72 @@ public class PageQuery {
@ApiModelProperty("页码")
@Min(value = 1, message = "页码不能小于1")
private Integer pageNo = DEFAULT_PAGE_NUM;
@ApiModelProperty("页码")
@ApiModelProperty("每页个数")
@Min(value = 1, message = "每页查询数量不能小于1")
private Integer pageSize = DEFAULT_PAGE_SIZE;
@ApiModelProperty("是否升序")
private Boolean isAsc = true;
@ApiModelProperty("排序方式")
private String sortBy;
public int from(){
return (pageNo - 1) * pageSize;
}
@ApiModelProperty("排序规则")
private LinkedHashSet<SortingField> sortingFields;
public <T> Page<T> toMpPage(OrderItem... orderItems) {
// 构建分页
public <T> Page<T> buildPage(OrderItem... orderItems) {
Page<T> page = new Page<>(pageNo, pageSize);
// 是否手动指定排序方式
// 前端排序规则
if (!CollectionUtil.isEmpty(sortingFields)) {
page.addOrder(sortingFields.stream().map(
sortingField -> SortingField.ORDER_ASC.equals(sortingField.getOrder()) ?
OrderItem.asc(sortingField.getField()) : OrderItem.desc(sortingField.getField()))
.collect(Collectors.toList()));
}
// 手动指定排序规则
if (orderItems != null && orderItems.length > 0) {
for (OrderItem orderItem : orderItems) {
page.addOrder(orderItem);
}
}
return page;
}
// 前端是否有排序字段
if (StrUtil.isNotEmpty(sortBy)){
public <T> Page<T> buildPageByDefaultOrder(String defaultSortBy, boolean isAsc) {
OrderItem orderItem = new OrderItem();
orderItem.setAsc(isAsc);
orderItem.setColumn(sortBy);
page.addOrder(orderItem);
}
return page;
orderItem.setColumn(defaultSortBy);
return buildPage(orderItem);
}
public <T> Page<T> toMpPage(String defaultSortBy, boolean isAsc) {
if (StringUtils.isBlank(sortBy)){
sortBy = defaultSortBy;
this.isAsc = isAsc;
}
Page<T> page = new Page<>(pageNo, pageSize);
OrderItem orderItem = new OrderItem();
orderItem.setAsc(this.isAsc);
orderItem.setColumn(sortBy);
page.addOrder(orderItem);
return page;
@Data
@ApiModel(description = "排序规则")
public static class SortingField implements Serializable {
/**
* -
*/
public static final String ORDER_ASC = "asc";
/**
* -
*/
public static final String ORDER_DESC = "desc";
/**
*
*/
@ApiModelProperty("字段")
private String field;
/**
*
*/
@ApiModelProperty("是否升序")
private String order;
// 解决 orderBy Field Unknown column 问题
public String getField() {
return CommonUtil.humpToUnderline(field);
}
public <T> Page<T> toMpPageDefaultSortByCreateTimeDesc() {
return toMpPage("create_time", false);
}
}

@ -1,45 +0,0 @@
package cc.yunxi.common.domain;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.Min;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
@Data
@ApiModel(description = "分页查询条件")
@Accessors(chain = true)
public class PageQueryPlus {
public static final Integer DEFAULT_PAGE_SIZE = 20;
public static final Integer DEFAULT_PAGE_NUM = 1;
@ApiModelProperty("页码")
@Min(value = 1, message = "页码不能小于1")
private Integer pageNo = DEFAULT_PAGE_NUM;
@ApiModelProperty("每页个数")
@Min(value = 1, message = "每页查询数量不能小于1")
private Integer pageSize = DEFAULT_PAGE_SIZE;
@ApiModelProperty("排序规则")
private Collection<SortingFieldDTO> sortingFields;
// public <T> Page<T> buildPage() {
// Page<T> page = new Page<>(pageNo, pageSize);
// if (!CollectionUtil.isEmpty(sortingFields)) {
// page.addOrder(sortingFields.stream().map(sortingField -> SortingFieldDTO.ORDER_ASC.equals(sortingField.getOrder()) ?
// OrderItem.asc(sortingField.getField()) : OrderItem.desc(sortingField.getField()))
// .collect(Collectors.toList()));
// }
// }
}

@ -1,34 +0,0 @@
package cc.yunxi.common.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SortingFieldDTO implements Serializable {
/**
* -
*/
public static final String ORDER_ASC = "asc";
/**
* -
*/
public static final String ORDER_DESC = "desc";
/**
*
*/
@ApiModelProperty("字段")
private String field;
/**
*
*/
@ApiModelProperty("是否升序")
private String order;
}

@ -0,0 +1,29 @@
package cc.yunxi.common.utils;
/**
*
*/
public class CommonUtil {
/**
* 线
* @param humpName
* @return 线
*/
public static String humpToUnderline(String humpName) {
char[] charArray = humpName.toCharArray();
StringBuilder buffer = new StringBuilder();
int i = 0;
for(int l = charArray.length; i < l; ++i) {
if (charArray[i] >= 'A' && charArray[i] <= 'Z') {
buffer.append("_").append(charArray[i] = (char)(charArray[i] + 32));
} else {
buffer.append(charArray[i]);
}
}
String result = buffer.toString();
return result;
}
}

@ -48,7 +48,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
public void addInterceptors(InterceptorRegistry registry) {
// 按顺序执行拦截器
this.addStatsInterceptor(registry);
this.addLoginInterceptor(registry);
// this.addLoginInterceptor(registry);
}
// 添加登录拦截器

@ -4,28 +4,28 @@ import cc.yunxi.common.domain.PageDTO;
import cc.yunxi.common.domain.PageQuery;
import cc.yunxi.domain.dto.RecyclerDTO;
import cc.yunxi.domain.po.Recycler;
import cc.yunxi.domain.query.RecyclerQuery;
import cc.yunxi.service.IRecyclerService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
@Api(tags = "回收员接口")
@RestController
@RequestMapping("/user")
@RequestMapping("/recycler")
@RequiredArgsConstructor
public class RecyclerController {
private final IRecyclerService recyclerService;
@ApiOperation("分页查询商品")
@GetMapping("/page")
public PageDTO<RecyclerDTO> queryItemByPage(PageQuery query) {
@PostMapping("/page")
public PageDTO<RecyclerDTO> queryItemByPage(@RequestBody RecyclerQuery recyclerQuery) {
// 1.分页查询
Page<Recycler> result = recyclerService.page(query.toMpPage("good_total", false));
Page<Recycler> result = recyclerService.queryByPage(recyclerQuery);
// 2.封装并返回
return PageDTO.of(result, RecyclerDTO.class);
}

@ -10,7 +10,7 @@ import java.math.BigDecimal;
@ApiModel(description = "回收员实体")
public class RecyclerDTO {
@ApiModelProperty("回收员id")
private Integer id;
private String id;
@ApiModelProperty("所属回收站id")
private String stationId; // 所属回收站

@ -35,6 +35,7 @@ public class Recycler {
private Integer orderTotal; // 总订单数
@TableField("good_total")
private Integer goodTotal; // 好评数
private BigDecimal orderAmount; // 总回收金额

@ -2,6 +2,8 @@ package cc.yunxi.service;
import cc.yunxi.domain.po.Recycler;
import cc.yunxi.domain.po.Test;
import cc.yunxi.domain.query.RecyclerQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
/**
@ -9,6 +11,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface IRecyclerService extends IService<Recycler> {
/**
*
* @param recyclerQuery
* @return Page<Recycler>
*/
Page<Recycler> queryByPage(RecyclerQuery recyclerQuery);
/**
* openid
* @param openid

@ -2,11 +2,15 @@ package cc.yunxi.service.impl;
import cc.yunxi.common.exception.BizIllegalException;
import cc.yunxi.domain.po.Recycler;
import cc.yunxi.domain.query.RecyclerQuery;
import cc.yunxi.mapper.RecyclerMapper;
import cc.yunxi.service.IRecyclerService;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.injector.methods.SelectPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -22,6 +26,18 @@ public class RecyclerServiceImpl extends ServiceImpl<RecyclerMapper, Recycler> i
@Resource
RecyclerMapper recyclerMapper;
public Page<Recycler> queryByPage(RecyclerQuery recyclerQuery) {
QueryWrapper<Recycler> wrapper = new QueryWrapper<>();
wrapper.lambda()
.eq(StrUtil.isNotEmpty(recyclerQuery.getStationId()), Recycler::getStationId, recyclerQuery.getStationId())
.eq(StrUtil.isNotEmpty(recyclerQuery.getMobilePhone()), Recycler::getMobilePhone, recyclerQuery.getMobilePhone())
.like(StrUtil.isNotEmpty(recyclerQuery.getStaffsName()), Recycler::getStaffsName, recyclerQuery.getStaffsName());
Page<Recycler> recyclerPage = page(
recyclerQuery.buildPageByDefaultOrder("good_total", true), wrapper);
return recyclerPage;
}
@Override
public Recycler getRecyclerByOpenid(String openid) {
Recycler recycler = lambdaQuery().eq(Recycler::getOpenid, openid).one();

@ -63,7 +63,7 @@ nxhs:
location: classpath:nxhs.jks
alias: nxhs
password: nxhs2024
tokenTTL: 1h
tokenTTL: 30d
auth:
excludePaths:
- /common/login

Loading…
Cancel
Save