尝试优化请求速率
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;
|
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()) {
|
||||||
|
return appCategoryRespVOS;
|
||||||
|
}
|
||||||
|
|
||||||
for (AppCategoryRespVO appCategoryRespVO : appCategoryRespVOS) {
|
List<StoreProductDO> products = this.baseMapper.selectList(new LambdaQueryWrapper<StoreProductDO>()
|
||||||
LambdaQueryWrapper<StoreProductDO> wrapper = new LambdaQueryWrapper<>();
|
.eq(StoreProductDO::getIsShow, ShopCommonEnum.SHOW_1.getValue())
|
||||||
wrapper.eq(StoreProductDO::getIsShow, ShopCommonEnum.SHOW_1.getValue())
|
.eq(StoreProductDO::getShopId, productQueryParam.getShopId())
|
||||||
.eq(StoreProductDO::getCateId,appCategoryRespVO.getId())
|
.in(StoreProductDO::getCateId, appCategoryRespVOS.stream().map(category -> category.getId().toString()).toList()));
|
||||||
.eq(StoreProductDO::getShopId,productQueryParam.getShopId());
|
Map<Long, Map<String, Object>> attrDetails = appStoreProductAttrService
|
||||||
List<StoreProductDO> storeProductDOList = this.baseMapper.selectList(wrapper);
|
.getProductAttrDetails(products.stream().map(StoreProductDO::getId).toList());
|
||||||
List<AppStoreProductRespVo> appStoreProductRespVoList = ListUtil.list(false);
|
Map<String, List<AppStoreProductRespVo>> goodsByCategory = new HashMap<>();
|
||||||
for (StoreProductDO storeProductDO : storeProductDOList) {
|
for (StoreProductDO product : products) {
|
||||||
Map<String, Object> returnMap = appStoreProductAttrService.getProductAttrDetail(storeProductDO.getId());
|
Map<String, Object> detail = attrDetails.get(product.getId());
|
||||||
AppStoreProductRespVo storeProductQueryVo = StoreProductConvert.INSTANCE.convert01(storeProductDO);
|
AppStoreProductRespVo productVo = StoreProductConvert.INSTANCE.convert01(product);
|
||||||
|
productVo.setProductAttr((List<AppStoreProductAttrQueryVo>) detail.get("productAttr"));
|
||||||
storeProductQueryVo.setProductAttr((List<AppStoreProductAttrQueryVo>) returnMap.get("productAttr"));
|
productVo.setProductValue((Map<String, StoreProductAttrValueDO>) detail.get("productValue"));
|
||||||
storeProductQueryVo.setProductValue((Map<String, StoreProductAttrValueDO>) returnMap.get("productValue"));
|
goodsByCategory.computeIfAbsent(product.getCateId(), id -> new ArrayList<>()).add(productVo);
|
||||||
|
}
|
||||||
appStoreProductRespVoList.add(storeProductQueryVo);
|
for (AppCategoryRespVO category : appCategoryRespVOS) {
|
||||||
}
|
category.setGoodsList(goodsByCategory.getOrDefault(category.getId().toString(), Collections.emptyList()));
|
||||||
// List<AppStoreProductRespVo> appStoreProductRespVoList = StoreProductConvert.INSTANCE
|
|
||||||
// .convertList03(this.baseMapper.selectList(wrapper));
|
|
||||||
|
|
||||||
appCategoryRespVO.setGoodsList(appStoreProductRespVoList);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return appCategoryRespVOS;
|
return appCategoryRespVOS;
|
||||||
|
|||||||
+1
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
+21
-5
@@ -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));
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in new issue
Block a user