尝试优化请求速率

This commit is contained in:
Kroytz committed 2026-07-18 22:55:35 +08:00
1 parent 2977ef7d81
commit 81397fc50a
4 files changed
+48 -28

No files matched your search

@@ -1,6 +1,5 @@
package co.yixiang.yshop.module.product.service.storeproduct; package co.yixiang.yshop.module.product.service.storeproduct;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import co.yixiang.yshop.framework.common.enums.ShopCommonEnum; import co.yixiang.yshop.framework.common.enums.ShopCommonEnum;
import co.yixiang.yshop.framework.common.exception.ErrorCode; 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 org.springframework.validation.annotation.Validated;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -119,27 +121,26 @@ public class AppStoreProductServiceImpl extends ServiceImpl<StoreProductMapper,S
List<ProductCategoryDO> list = categoryService.getEnableCategoryList(productQueryParam.getShopId()); List<ProductCategoryDO> list = categoryService.getEnableCategoryList(productQueryParam.getShopId());
list.sort(Comparator.comparing(ProductCategoryDO::getSort)); list.sort(Comparator.comparing(ProductCategoryDO::getSort));
List<AppCategoryRespVO> appCategoryRespVOS = ProductCategoryConvert.INSTANCE.convertList03(list); List<AppCategoryRespVO> appCategoryRespVOS = ProductCategoryConvert.INSTANCE.convertList03(list);
if (appCategoryRespVOS.isEmpty()) {
for (AppCategoryRespVO appCategoryRespVO : appCategoryRespVOS) { return appCategoryRespVOS;
LambdaQueryWrapper<StoreProductDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StoreProductDO::getIsShow, ShopCommonEnum.SHOW_1.getValue())
.eq(StoreProductDO::getCateId,appCategoryRespVO.getId())
.eq(StoreProductDO::getShopId,productQueryParam.getShopId());
List<StoreProductDO> storeProductDOList = this.baseMapper.selectList(wrapper);
List<AppStoreProductRespVo> appStoreProductRespVoList = ListUtil.list(false);
for (StoreProductDO storeProductDO : storeProductDOList) {
Map<String, Object> returnMap = appStoreProductAttrService.getProductAttrDetail(storeProductDO.getId());
AppStoreProductRespVo storeProductQueryVo = StoreProductConvert.INSTANCE.convert01(storeProductDO);
storeProductQueryVo.setProductAttr((List<AppStoreProductAttrQueryVo>) returnMap.get("productAttr"));
storeProductQueryVo.setProductValue((Map<String, StoreProductAttrValueDO>) returnMap.get("productValue"));
appStoreProductRespVoList.add(storeProductQueryVo);
} }
// List<AppStoreProductRespVo> appStoreProductRespVoList = StoreProductConvert.INSTANCE
// .convertList03(this.baseMapper.selectList(wrapper));
appCategoryRespVO.setGoodsList(appStoreProductRespVoList); List<StoreProductDO> products = this.baseMapper.selectList(new LambdaQueryWrapper<StoreProductDO>()
.eq(StoreProductDO::getIsShow, ShopCommonEnum.SHOW_1.getValue())
.eq(StoreProductDO::getShopId, productQueryParam.getShopId())
.in(StoreProductDO::getCateId, appCategoryRespVOS.stream().map(category -> category.getId().toString()).toList()));
Map<Long, Map<String, Object>> attrDetails = appStoreProductAttrService
.getProductAttrDetails(products.stream().map(StoreProductDO::getId).toList());
Map<String, List<AppStoreProductRespVo>> goodsByCategory = new HashMap<>();
for (StoreProductDO product : products) {
Map<String, Object> detail = attrDetails.get(product.getId());
AppStoreProductRespVo productVo = StoreProductConvert.INSTANCE.convert01(product);
productVo.setProductAttr((List<AppStoreProductAttrQueryVo>) detail.get("productAttr"));
productVo.setProductValue((Map<String, StoreProductAttrValueDO>) 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; return appCategoryRespVOS;
@@ -23,5 +23,6 @@ public interface AppStoreProductAttrService extends IService<StoreProductAttrDO>
*/ */
Map<String, Object> getProductAttrDetail(long productId); Map<String, Object> getProductAttrDetail(long productId);
Map<Long, Map<String, Object>> getProductAttrDetails(Collection<Long> productIds);
} }
@@ -37,16 +37,32 @@ public class AppStoreProductAttrServiceImpl extends ServiceImpl<StoreProductAttr
*/ */
@Override @Override
public Map<String, Object> getProductAttrDetail(long productId) { public Map<String, Object> getProductAttrDetail(long productId) {
List<StoreProductAttrDO> storeProductAttrs = this.baseMapper return getProductAttrDetails(Collections.singleton(productId)).get(productId);
}
@Override
public Map<Long, Map<String, Object>> getProductAttrDetails(Collection<Long> productIds) {
if (productIds.isEmpty()) {
return Collections.emptyMap();
}
Map<Long, List<StoreProductAttrDO>> attrsByProduct = this.baseMapper
.selectList(Wrappers.<StoreProductAttrDO>lambdaQuery() .selectList(Wrappers.<StoreProductAttrDO>lambdaQuery()
.eq(StoreProductAttrDO::getProductId,productId) .in(StoreProductAttrDO::getProductId, productIds)
.orderByAsc(StoreProductAttrDO::getAttrValues)); .orderByAsc(StoreProductAttrDO::getAttrValues))
.stream().collect(Collectors.groupingBy(StoreProductAttrDO::getProductId));
List<StoreProductAttrValueDO> productAttrValues = storeProductAttrValueService Map<Long, List<StoreProductAttrValueDO>> valuesByProduct = storeProductAttrValueService
.list(Wrappers.<StoreProductAttrValueDO>lambdaQuery() .list(Wrappers.<StoreProductAttrValueDO>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<String, Object> buildProductAttrDetail(List<StoreProductAttrDO> storeProductAttrs,
List<StoreProductAttrValueDO> productAttrValues) {
Map<String, StoreProductAttrValueDO> map = productAttrValues.stream() Map<String, StoreProductAttrValueDO> map = productAttrValues.stream()
.collect(Collectors.toMap(StoreProductAttrValueDO::getSku, p -> p)); .collect(Collectors.toMap(StoreProductAttrValueDO::getSku, p -> p));
+5 -3
View File
@@ -417,6 +417,7 @@ const init = async() => { //页面初始化
} }
const getShopList = async(res) => { const getShopList = async(res) => {
console.log('location9:',res) console.log('location9:',res)
try {
if (res) { if (res) {
main.SET_LOCATION(res); main.SET_LOCATION(res);
@@ -447,12 +448,13 @@ const getShopList = async(res) => {
refreshCart(); refreshCart();
} }
console.log('goods:',mygoods) console.log('goods:',mygoods)
console.log('goods:',goods.value)
loading.value = false;
nextTick(() => measureMenuLayout()) nextTick(() => measureMenuLayout())
uni.stopPullDownRefresh();
} }
} }
} finally {
loading.value = false;
uni.stopPullDownRefresh();
}
} }
const refreshCart = () =>{ const refreshCart = () =>{
if (goods.value && goods.value.length > 0) { if (goods.value && goods.value.length > 0) {