Pārlūkot izejas kodu

优化统计门店订单详情,将接口中存在的循环调用数据库的功能优化

liu 2 mēneši atpakaļ
vecāks
revīzija
8c28ff20f4

+ 18 - 8
src/main/java/com/sqx/modules/goods/service/impl/GoodsShopServiceImpl.java

@@ -61,11 +61,7 @@ import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.temporal.TemporalAdjusters;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -433,10 +429,24 @@ public class GoodsShopServiceImpl extends ServiceImpl<GoodsShopDao, GoodsShop> i
         Page<TbOrder> pages = new Page<>(query.getPage(), query.getLimit());
         IPage<TbOrder> tbOrderIPage = goodsShopDao.selectStoreMessage(pages, query.getShopId(), query.getStartTime(), query.getEndTime());
         List<TbOrder> records = tbOrderIPage.getRecords();
-        for(int i = 0;i<records.size();i++){
+        List<Long> orderIdList = records.stream().map(TbOrder::getOrderId).collect(Collectors.toList());
+        if (orderIdList.size()>0) {
             List<OrderGoods> orderGoodsList = orderGoodsDao.selectList(new QueryWrapper<OrderGoods>()
-                    .eq("order_id", records.get(i).getOrderId()));
-            tbOrderIPage.getRecords().get(i).setOrderGoodsList(orderGoodsList);
+                    .in("order_id", orderIdList));
+            Map<Long, ArrayList<OrderGoods>> map = orderGoodsList.stream().collect(Collectors.toMap(
+                    OrderGoods::getOrderId,
+                    orderGoods -> new ArrayList<>(Collections.singletonList(orderGoods)),
+                    (oldList, newList) -> {
+                        oldList.addAll(newList);
+                        return oldList;
+                    }
+            ));
+            for(int i = 0;i<records.size();i++){
+//                List<OrderGoods> orderGoodsList = orderGoodsDao.selectList(new QueryWrapper<OrderGoods>()
+//                        .eq("order_id", records.get(i).getOrderId()));
+                ArrayList<OrderGoods> orderGoods = map.get(records.get(i).getOrderId());
+                tbOrderIPage.getRecords().get(i).setOrderGoodsList(orderGoods);
+            }
         }
         PageUtils pageUtils = new PageUtils(tbOrderIPage);
         return Result.success().put("data", pageUtils);