Browse Source

优化商户端商品规格列表展示接口,将循环调用数据库的部分优化

liu 2 tháng trước cách đây
mục cha
commit
4f7bff05a5

+ 34 - 6
src/main/java/com/sqx/modules/goods/service/impl/GoodsRuleServiceImpl.java

@@ -20,8 +20,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 @Service
@@ -41,17 +41,45 @@ public class GoodsRuleServiceImpl extends ServiceImpl<GoodsRuleMapper, GoodsRule
        // List<GoodsRule> goodsRules = baseMapper.selectList(new QueryWrapper<GoodsRule>().eq(shopId!=null, "shop_id", shopId));
         if(page==null || limit==null){
             List<GoodsRule> goodsRules = baseMapper.selectList(new QueryWrapper<GoodsRule>().eq(shopId!=null, "shop_id", shopId));
-            for (GoodsRule r : goodsRules) {
-                r.setRuleValue(goodsRuleValueService.selectGoodsRuleValue(r.getId()));
+            List<Long> idList = goodsRules.stream().map(GoodsRule::getId).collect(Collectors.toList());
+            if (idList.size()>0) {
+                List<GoodsRuleValue> goodsRuleValueList = goodsRuleValueService.list(new QueryWrapper<GoodsRuleValue>().in("rule_id", idList));
+                Map<Long, ArrayList<GoodsRuleValue>> map = goodsRuleValueList.stream().collect(Collectors.toMap(
+                        GoodsRuleValue::getRuleId,
+                        goodsAttrValue -> new ArrayList<>(Collections.singletonList(goodsAttrValue)),
+                        (oldList, newList) -> {
+                            oldList.addAll(newList);
+                            return oldList;
+                        }
+                ));
+                for (GoodsRule r : goodsRules) {
+//                    r.setRuleValue(goodsRuleValueService.selectGoodsRuleValue(r.getId()));
+                    r.setRuleValue(map.get(r.getId()));
+                }
             }
+
             return Result.success().put("data",goodsRules);
         }else{
             Page<GoodsRule> pages=new Page<>(page,limit);
             IPage<GoodsRule> goodsRules = goodsRuleMapper.selectRuleByShopId(pages,shopId, shopName);
             List<GoodsRule> records = goodsRules.getRecords();
-            for (GoodsRule r : records) {
-                r.setRuleValue(goodsRuleValueService.selectGoodsRuleValue(r.getId()));
+            List<Long> idList = records.stream().map(GoodsRule::getId).collect(Collectors.toList());
+            if (idList.size()>0) {
+                List<GoodsRuleValue> goodsRuleValueList = goodsRuleValueService.list(new QueryWrapper<GoodsRuleValue>().in("rule_id", idList));
+                Map<Long, ArrayList<GoodsRuleValue>> map = goodsRuleValueList.stream().collect(Collectors.toMap(
+                        GoodsRuleValue::getRuleId,
+                        goodsAttrValue -> new ArrayList<>(Collections.singletonList(goodsAttrValue)),
+                        (oldList, newList) -> {
+                            oldList.addAll(newList);
+                            return oldList;
+                        }
+                ));
+                for (GoodsRule r : records) {
+//                    r.setRuleValue(goodsRuleValueService.selectGoodsRuleValue(r.getId()));
+                    r.setRuleValue(map.get(r.getId()));
+                }
             }
+
             return Result.success().put("data",goodsRules);
         }