From b7784b6a3de49a4556e4b94fab1296cab1c3a0a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LI-CCONG=5C=E6=9D=8E=E8=81=AA=E8=81=AA?= <1441652193@qq.com> Date: Thu, 29 Feb 2024 11:39:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cc/yunxi/common/domain/PageQuery.java | 98 ++++++++++++------- .../cc/yunxi/common/domain/PageQueryPlus.java | 45 --------- .../yunxi/common/domain/SortingFieldDTO.java | 34 ------- .../cc/yunxi/common/utils/CommonUtil.java | 29 ++++++ .../java/cc/yunxi/config/WebMvcConfig.java | 2 +- .../yunxi/controller/RecyclerController.java | 14 +-- .../java/cc/yunxi/domain/dto/RecyclerDTO.java | 2 +- .../java/cc/yunxi/domain/po/Recycler.java | 1 + .../cc/yunxi/service/IRecyclerService.java | 9 ++ .../service/impl/RecyclerServiceImpl.java | 16 +++ .../src/main/resources/application.yml | 2 +- 11 files changed, 129 insertions(+), 123 deletions(-) delete mode 100644 nxhs-common/src/main/java/cc/yunxi/common/domain/PageQueryPlus.java delete mode 100644 nxhs-common/src/main/java/cc/yunxi/common/domain/SortingFieldDTO.java create mode 100644 nxhs-common/src/main/java/cc/yunxi/common/utils/CommonUtil.java diff --git a/nxhs-common/src/main/java/cc/yunxi/common/domain/PageQuery.java b/nxhs-common/src/main/java/cc/yunxi/common/domain/PageQuery.java index 4786586..31f0f16 100644 --- a/nxhs-common/src/main/java/cc/yunxi/common/domain/PageQuery.java +++ b/nxhs-common/src/main/java/cc/yunxi/common/domain/PageQuery.java @@ -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 sortingFields; - public Page toMpPage(OrderItem... orderItems) { + + // 构建分页 + public Page buildPage(OrderItem... orderItems) { Page 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)){ - OrderItem orderItem = new OrderItem(); - orderItem.setAsc(isAsc); - orderItem.setColumn(sortBy); - page.addOrder(orderItem); } return page; } - public Page toMpPage(String defaultSortBy, boolean isAsc) { - if (StringUtils.isBlank(sortBy)){ - sortBy = defaultSortBy; - this.isAsc = isAsc; - } - Page page = new Page<>(pageNo, pageSize); + public Page buildPageByDefaultOrder(String defaultSortBy, boolean isAsc) { OrderItem orderItem = new OrderItem(); - orderItem.setAsc(this.isAsc); - orderItem.setColumn(sortBy); - page.addOrder(orderItem); - return page; + orderItem.setAsc(isAsc); + orderItem.setColumn(defaultSortBy); + return buildPage(orderItem); } - public Page toMpPageDefaultSortByCreateTimeDesc() { - return toMpPage("create_time", false); + + + @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); + } } + } diff --git a/nxhs-common/src/main/java/cc/yunxi/common/domain/PageQueryPlus.java b/nxhs-common/src/main/java/cc/yunxi/common/domain/PageQueryPlus.java deleted file mode 100644 index d1347df..0000000 --- a/nxhs-common/src/main/java/cc/yunxi/common/domain/PageQueryPlus.java +++ /dev/null @@ -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 sortingFields; - -// public Page buildPage() { -// Page 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())); -// } -// } - -} diff --git a/nxhs-common/src/main/java/cc/yunxi/common/domain/SortingFieldDTO.java b/nxhs-common/src/main/java/cc/yunxi/common/domain/SortingFieldDTO.java deleted file mode 100644 index 83483f9..0000000 --- a/nxhs-common/src/main/java/cc/yunxi/common/domain/SortingFieldDTO.java +++ /dev/null @@ -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; -} diff --git a/nxhs-common/src/main/java/cc/yunxi/common/utils/CommonUtil.java b/nxhs-common/src/main/java/cc/yunxi/common/utils/CommonUtil.java new file mode 100644 index 0000000..54bcf47 --- /dev/null +++ b/nxhs-common/src/main/java/cc/yunxi/common/utils/CommonUtil.java @@ -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; + } +} diff --git a/nxhs-service/src/main/java/cc/yunxi/config/WebMvcConfig.java b/nxhs-service/src/main/java/cc/yunxi/config/WebMvcConfig.java index 156688d..bda13de 100644 --- a/nxhs-service/src/main/java/cc/yunxi/config/WebMvcConfig.java +++ b/nxhs-service/src/main/java/cc/yunxi/config/WebMvcConfig.java @@ -48,7 +48,7 @@ public class WebMvcConfig implements WebMvcConfigurer { public void addInterceptors(InterceptorRegistry registry) { // 按顺序执行拦截器 this.addStatsInterceptor(registry); - this.addLoginInterceptor(registry); +// this.addLoginInterceptor(registry); } // 添加登录拦截器 diff --git a/nxhs-service/src/main/java/cc/yunxi/controller/RecyclerController.java b/nxhs-service/src/main/java/cc/yunxi/controller/RecyclerController.java index bd56fd9..c0d18b6 100644 --- a/nxhs-service/src/main/java/cc/yunxi/controller/RecyclerController.java +++ b/nxhs-service/src/main/java/cc/yunxi/controller/RecyclerController.java @@ -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 queryItemByPage(PageQuery query) { + @PostMapping("/page") + public PageDTO queryItemByPage(@RequestBody RecyclerQuery recyclerQuery) { // 1.分页查询 - Page result = recyclerService.page(query.toMpPage("good_total", false)); + Page result = recyclerService.queryByPage(recyclerQuery); // 2.封装并返回 return PageDTO.of(result, RecyclerDTO.class); } diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/dto/RecyclerDTO.java b/nxhs-service/src/main/java/cc/yunxi/domain/dto/RecyclerDTO.java index 0a6328f..d4345e4 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/dto/RecyclerDTO.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/dto/RecyclerDTO.java @@ -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; // 所属回收站 diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/po/Recycler.java b/nxhs-service/src/main/java/cc/yunxi/domain/po/Recycler.java index 7664ce6..3ff9516 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/po/Recycler.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/po/Recycler.java @@ -35,6 +35,7 @@ public class Recycler { private Integer orderTotal; // 总订单数 + @TableField("good_total") private Integer goodTotal; // 好评数 private BigDecimal orderAmount; // 总回收金额 diff --git a/nxhs-service/src/main/java/cc/yunxi/service/IRecyclerService.java b/nxhs-service/src/main/java/cc/yunxi/service/IRecyclerService.java index 4d2928f..444f880 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/IRecyclerService.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/IRecyclerService.java @@ -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 { + /** + * 分页查询 + * @param recyclerQuery + * @return Page + */ + Page queryByPage(RecyclerQuery recyclerQuery); + /** * 根据openid获取回收员信息 * @param openid diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecyclerServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecyclerServiceImpl.java index 643b70e..7e1ed81 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecyclerServiceImpl.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecyclerServiceImpl.java @@ -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 i @Resource RecyclerMapper recyclerMapper; + public Page queryByPage(RecyclerQuery recyclerQuery) { + QueryWrapper 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 recyclerPage = page( + recyclerQuery.buildPageByDefaultOrder("good_total", true), wrapper); + return recyclerPage; + } + + @Override public Recycler getRecyclerByOpenid(String openid) { Recycler recycler = lambdaQuery().eq(Recycler::getOpenid, openid).one(); diff --git a/nxhs-service/src/main/resources/application.yml b/nxhs-service/src/main/resources/application.yml index 41dbd32..ceb1ed1 100644 --- a/nxhs-service/src/main/resources/application.yml +++ b/nxhs-service/src/main/resources/application.yml @@ -63,7 +63,7 @@ nxhs: location: classpath:nxhs.jks alias: nxhs password: nxhs2024 - tokenTTL: 1h + tokenTTL: 30d auth: excludePaths: - /common/login