尝试优化请求速率
This commit is contained in:
1 parent
2977ef7d81
commit
81397fc50a
4 files changed
+49
-29
No files matched your search
+22
-21
@@ -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<StoreProductMapper,S
|
||||
List<ProductCategoryDO> list = categoryService.getEnableCategoryList(productQueryParam.getShopId());
|
||||
list.sort(Comparator.comparing(ProductCategoryDO::getSort));
|
||||
List<AppCategoryRespVO> appCategoryRespVOS = ProductCategoryConvert.INSTANCE.convertList03(list);
|
||||
if (appCategoryRespVOS.isEmpty()) {
|
||||
return appCategoryRespVOS;
|
||||
}
|
||||
|
||||
for (AppCategoryRespVO appCategoryRespVO : 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;
|
||||
|
||||
+1
@@ -23,5 +23,6 @@ public interface AppStoreProductAttrService extends IService<StoreProductAttrDO>
|
||||
*/
|
||||
Map<String, Object> getProductAttrDetail(long productId);
|
||||
|
||||
Map<Long, Map<String, Object>> getProductAttrDetails(Collection<Long> productIds);
|
||||
|
||||
}
|
||||
+21
-5
@@ -37,16 +37,32 @@ public class AppStoreProductAttrServiceImpl extends ServiceImpl<StoreProductAttr
|
||||
*/
|
||||
@Override
|
||||
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()
|
||||
.eq(StoreProductAttrDO::getProductId,productId)
|
||||
.orderByAsc(StoreProductAttrDO::getAttrValues));
|
||||
.in(StoreProductAttrDO::getProductId, productIds)
|
||||
.orderByAsc(StoreProductAttrDO::getAttrValues))
|
||||
.stream().collect(Collectors.groupingBy(StoreProductAttrDO::getProductId));
|
||||
|
||||
List<StoreProductAttrValueDO> productAttrValues = storeProductAttrValueService
|
||||
Map<Long, List<StoreProductAttrValueDO>> valuesByProduct = storeProductAttrValueService
|
||||
.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()
|
||||
.collect(Collectors.toMap(StoreProductAttrValueDO::getSku, p -> p));
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in new issue
Block a user