Commit 68af46ddc7b01ffba73fa1bcf36484cf1792f049

Authored by dadiyang
1 parent 8e43004c

fix(product):C 端商品分页缺 sortAsc 参数 NPE 500 改空安全

GET /app-api/product/spu/page 只带 sortField、缺 sortAsc(合法但参数
不完整)时,getSortAsc()(Boolean)在 orderBy/三目拆箱处 null 直接
NPE 500(A52),旧版 App/第三方/爬虫都会踩空。

排序逻辑处统一取空安全默认(缺省按升序),三个排序分支共用,
缺参/显式 null 均不再崩。
yudao-module-mall/yudao-module-product/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java
... ... @@ -76,14 +76,16 @@ public interface ProductSpuMapper extends BaseMapperX<ProductSpuDO> {
76 76 query.eq(ProductSpuDO::getStatus, ProductSpuStatusEnum.ENABLE.getStatus());
77 77  
78 78 // 排序逻辑
  79 + // 排序方式(sortAsc)可能缺省或显式传 null(合法但参数不完整的组合),缺省按升序处理,避免拆箱 null 崩 500
  80 + Boolean sortAsc = pageReqVO.getSortAsc() != null ? pageReqVO.getSortAsc() : Boolean.TRUE;
79 81 if (Objects.equals(pageReqVO.getSortField(), AppProductSpuPageReqVO.SORT_FIELD_SALES_COUNT)) {
80 82 query.last(String.format(" ORDER BY (sales_count + virtual_sales_count) %s, sort DESC, id DESC",
81   - pageReqVO.getSortAsc() ? "ASC" : "DESC"));
  83 + sortAsc ? "ASC" : "DESC"));
82 84 } else if (Objects.equals(pageReqVO.getSortField(), AppProductSpuPageReqVO.SORT_FIELD_PRICE)) {
83   - query.orderBy(true, pageReqVO.getSortAsc(), ProductSpuDO::getPrice)
  85 + query.orderBy(true, sortAsc, ProductSpuDO::getPrice)
84 86 .orderByDesc(ProductSpuDO::getSort).orderByDesc(ProductSpuDO::getId);
85 87 } else if (Objects.equals(pageReqVO.getSortField(), AppProductSpuPageReqVO.SORT_FIELD_CREATE_TIME)) {
86   - query.orderBy(true, pageReqVO.getSortAsc(), ProductSpuDO::getCreateTime)
  88 + query.orderBy(true, sortAsc, ProductSpuDO::getCreateTime)
87 89 .orderByDesc(ProductSpuDO::getSort).orderByDesc(ProductSpuDO::getId);
88 90 } else {
89 91 query.orderByDesc(ProductSpuDO::getSort).orderByDesc(ProductSpuDO::getId);
... ...