diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/AppShopSpuController.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/AppShopSpuController.java index 7af325a39..2cee5c3eb 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/AppShopSpuController.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/AppShopSpuController.java @@ -34,15 +34,41 @@ public class AppShopSpuController { @Operation(summary = "APP商品分页", description = "移动端商品分页") public R> page( @ParameterObject Page page, - @RequestParam(required = false) Integer categoryId, - @RequestParam(required = false) String keyword + @RequestParam(required = false) Long categoryId, + @RequestParam(required = false) String keyword, + @RequestParam(required = false) String merchantId ) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.eq(categoryId != null, ShopSpuEntity::getCategoryId, categoryId); - wrapper.like(StrUtil.isNotBlank(keyword), ShopSpuEntity::getProductName, keyword); + wrapper.like(cn.hutool.core.util.StrUtil.isNotBlank(keyword), ShopSpuEntity::getProductName, keyword); wrapper.eq(ShopSpuEntity::getStatus, 0); // 只查上架 + if (cn.hutool.core.util.StrUtil.isNotBlank(merchantId)) { + wrapper.apply("FIND_IN_SET({0}, merchant_ids)", merchantId.trim()); + } IPage spuPage = shopSpuService.page(page, wrapper); - IPage voPage = spuPage.convert(spu -> BeanUtils.toBean(spu, ShopSpuListAppVo.class)); + List spuIds = spuPage.getRecords().stream().map(ShopSpuEntity::getId).collect(java.util.stream.Collectors.toList()); + List skuList = spuIds.isEmpty() ? List.of() : shopSkuService.list( + Wrappers.lambdaQuery().in(ShopSkuEntity::getSpuId, spuIds) + ); + java.util.Map> skuMap = skuList.stream().collect(java.util.stream.Collectors.groupingBy(ShopSkuEntity::getSpuId)); + IPage voPage = spuPage.convert(spu -> { + ShopSpuListAppVo vo = com.bsd.pjcloud.common.core.util.BeanUtils.toBean(spu, ShopSpuListAppVo.class); + List skus = skuMap.getOrDefault(spu.getId(), List.of()); + vo.setMinPrice(skus.stream() + .map(ShopSkuEntity::getRetailPrice) + .filter(java.util.Objects::nonNull) + .map(price -> new java.math.BigDecimal(price).divide(new java.math.BigDecimal(100))) + .min(java.math.BigDecimal::compareTo) + .orElse(java.math.BigDecimal.ZERO)); + vo.setTotalStock( + skus.stream() + .map(ShopSkuEntity::getStock) + .filter(java.util.Objects::nonNull) + .mapToDouble(Double::doubleValue) + .sum() + ); + return vo; + }); return R.ok(voPage); }