From 81397fc50a7de1e5be498158d2a4b283c28f85ba Mon Sep 17 00:00:00 2001 From: Kroytz Date: Sat, 18 Jul 2026 22:55:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E4=BC=98=E5=8C=96=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E9=80=9F=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppStoreProductServiceImpl.java | 43 ++++++++++--------- .../AppStoreProductAttrService.java | 1 + .../AppStoreProductAttrServiceImpl.java | 26 ++++++++--- yshop-drink-uniapp-vue3/pages/menu/menu.vue | 8 ++-- 4 files changed, 49 insertions(+), 29 deletions(-) diff --git a/yshop-drink-boot3/yshop-module-mall/yshop-module-product-biz/src/main/java/co/yixiang/yshop/module/product/service/storeproduct/AppStoreProductServiceImpl.java b/yshop-drink-boot3/yshop-module-mall/yshop-module-product-biz/src/main/java/co/yixiang/yshop/module/product/service/storeproduct/AppStoreProductServiceImpl.java index 13273f1..232bd5a 100644 --- a/yshop-drink-boot3/yshop-module-mall/yshop-module-product-biz/src/main/java/co/yixiang/yshop/module/product/service/storeproduct/AppStoreProductServiceImpl.java +++ b/yshop-drink-boot3/yshop-module-mall/yshop-module-product-biz/src/main/java/co/yixiang/yshop/module/product/service/storeproduct/AppStoreProductServiceImpl.java @@ -1,6 +1,5 @@ package co.yixiang.yshop.module.product.service.storeproduct; -import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.StrUtil; import co.yixiang.yshop.framework.common.enums.ShopCommonEnum; import co.yixiang.yshop.framework.common.exception.ErrorCode; @@ -32,7 +31,10 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import jakarta.annotation.Resource; +import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -119,27 +121,26 @@ public class AppStoreProductServiceImpl extends ServiceImpl list = categoryService.getEnableCategoryList(productQueryParam.getShopId()); list.sort(Comparator.comparing(ProductCategoryDO::getSort)); List appCategoryRespVOS = ProductCategoryConvert.INSTANCE.convertList03(list); + if (appCategoryRespVOS.isEmpty()) { + return appCategoryRespVOS; + } - for (AppCategoryRespVO appCategoryRespVO : appCategoryRespVOS) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(StoreProductDO::getIsShow, ShopCommonEnum.SHOW_1.getValue()) - .eq(StoreProductDO::getCateId,appCategoryRespVO.getId()) - .eq(StoreProductDO::getShopId,productQueryParam.getShopId()); - List storeProductDOList = this.baseMapper.selectList(wrapper); - List appStoreProductRespVoList = ListUtil.list(false); - for (StoreProductDO storeProductDO : storeProductDOList) { - Map returnMap = appStoreProductAttrService.getProductAttrDetail(storeProductDO.getId()); - AppStoreProductRespVo storeProductQueryVo = StoreProductConvert.INSTANCE.convert01(storeProductDO); - - storeProductQueryVo.setProductAttr((List) returnMap.get("productAttr")); - storeProductQueryVo.setProductValue((Map) returnMap.get("productValue")); - - appStoreProductRespVoList.add(storeProductQueryVo); - } -// List appStoreProductRespVoList = StoreProductConvert.INSTANCE -// .convertList03(this.baseMapper.selectList(wrapper)); - - appCategoryRespVO.setGoodsList(appStoreProductRespVoList); + List products = this.baseMapper.selectList(new LambdaQueryWrapper() + .eq(StoreProductDO::getIsShow, ShopCommonEnum.SHOW_1.getValue()) + .eq(StoreProductDO::getShopId, productQueryParam.getShopId()) + .in(StoreProductDO::getCateId, appCategoryRespVOS.stream().map(category -> category.getId().toString()).toList())); + Map> attrDetails = appStoreProductAttrService + .getProductAttrDetails(products.stream().map(StoreProductDO::getId).toList()); + Map> goodsByCategory = new HashMap<>(); + for (StoreProductDO product : products) { + Map detail = attrDetails.get(product.getId()); + AppStoreProductRespVo productVo = StoreProductConvert.INSTANCE.convert01(product); + productVo.setProductAttr((List) detail.get("productAttr")); + productVo.setProductValue((Map) detail.get("productValue")); + goodsByCategory.computeIfAbsent(product.getCateId(), id -> new ArrayList<>()).add(productVo); + } + for (AppCategoryRespVO category : appCategoryRespVOS) { + category.setGoodsList(goodsByCategory.getOrDefault(category.getId().toString(), Collections.emptyList())); } return appCategoryRespVOS; diff --git a/yshop-drink-boot3/yshop-module-mall/yshop-module-product-biz/src/main/java/co/yixiang/yshop/module/product/service/storeproductattr/AppStoreProductAttrService.java b/yshop-drink-boot3/yshop-module-mall/yshop-module-product-biz/src/main/java/co/yixiang/yshop/module/product/service/storeproductattr/AppStoreProductAttrService.java index 7cb6fd5..bd52df7 100644 --- a/yshop-drink-boot3/yshop-module-mall/yshop-module-product-biz/src/main/java/co/yixiang/yshop/module/product/service/storeproductattr/AppStoreProductAttrService.java +++ b/yshop-drink-boot3/yshop-module-mall/yshop-module-product-biz/src/main/java/co/yixiang/yshop/module/product/service/storeproductattr/AppStoreProductAttrService.java @@ -23,5 +23,6 @@ public interface AppStoreProductAttrService extends IService */ Map getProductAttrDetail(long productId); + Map> getProductAttrDetails(Collection productIds); } diff --git a/yshop-drink-boot3/yshop-module-mall/yshop-module-product-biz/src/main/java/co/yixiang/yshop/module/product/service/storeproductattr/AppStoreProductAttrServiceImpl.java b/yshop-drink-boot3/yshop-module-mall/yshop-module-product-biz/src/main/java/co/yixiang/yshop/module/product/service/storeproductattr/AppStoreProductAttrServiceImpl.java index 914c1fa..3947c3f 100644 --- a/yshop-drink-boot3/yshop-module-mall/yshop-module-product-biz/src/main/java/co/yixiang/yshop/module/product/service/storeproductattr/AppStoreProductAttrServiceImpl.java +++ b/yshop-drink-boot3/yshop-module-mall/yshop-module-product-biz/src/main/java/co/yixiang/yshop/module/product/service/storeproductattr/AppStoreProductAttrServiceImpl.java @@ -37,16 +37,32 @@ public class AppStoreProductAttrServiceImpl extends ServiceImpl getProductAttrDetail(long productId) { - List storeProductAttrs = this.baseMapper + return getProductAttrDetails(Collections.singleton(productId)).get(productId); + } + + @Override + public Map> getProductAttrDetails(Collection productIds) { + if (productIds.isEmpty()) { + return Collections.emptyMap(); + } + Map> attrsByProduct = this.baseMapper .selectList(Wrappers.lambdaQuery() - .eq(StoreProductAttrDO::getProductId,productId) - .orderByAsc(StoreProductAttrDO::getAttrValues)); + .in(StoreProductAttrDO::getProductId, productIds) + .orderByAsc(StoreProductAttrDO::getAttrValues)) + .stream().collect(Collectors.groupingBy(StoreProductAttrDO::getProductId)); - List productAttrValues = storeProductAttrValueService + Map> valuesByProduct = storeProductAttrValueService .list(Wrappers.lambdaQuery() - .eq(StoreProductAttrValueDO::getProductId,productId)); + .in(StoreProductAttrValueDO::getProductId, productIds)) + .stream().collect(Collectors.groupingBy(StoreProductAttrValueDO::getProductId)); + return productIds.stream().collect(Collectors.toMap(id -> id, id -> buildProductAttrDetail( + attrsByProduct.getOrDefault(id, Collections.emptyList()), + valuesByProduct.getOrDefault(id, Collections.emptyList())))); + } + private Map buildProductAttrDetail(List storeProductAttrs, + List productAttrValues) { Map map = productAttrValues.stream() .collect(Collectors.toMap(StoreProductAttrValueDO::getSku, p -> p)); diff --git a/yshop-drink-uniapp-vue3/pages/menu/menu.vue b/yshop-drink-uniapp-vue3/pages/menu/menu.vue index 39113df..4b07822 100644 --- a/yshop-drink-uniapp-vue3/pages/menu/menu.vue +++ b/yshop-drink-uniapp-vue3/pages/menu/menu.vue @@ -417,6 +417,7 @@ const init = async() => { //页面初始化 } const getShopList = async(res) => { console.log('location9:',res) + try { if (res) { main.SET_LOCATION(res); @@ -447,12 +448,13 @@ const getShopList = async(res) => { refreshCart(); } console.log('goods:',mygoods) - console.log('goods:',goods.value) - loading.value = false; nextTick(() => measureMenuLayout()) - uni.stopPullDownRefresh(); } } + } finally { + loading.value = false; + uni.stopPullDownRefresh(); + } } const refreshCart = () =>{ if (goods.value && goods.value.length > 0) {