Browse Source

1.修改店铺列表设置评分不一致

qmj 3 days ago
parent
commit
793ae8e549

+ 5 - 2
ruoyi-admin/src/main/java/com/ruoyi/app/mendian/PosStoreController.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.app.utils.DateUtil;
 import com.ruoyi.app.utils.ImageCompressUtils;
+import com.ruoyi.app.user.dto.StoreOutput;
 import com.ruoyi.common.annotation.Anonymous;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
@@ -225,7 +226,8 @@ public class PosStoreController extends BaseController {
                                    @RequestParam Integer page,
                                    @RequestParam String area,
                                    @RequestParam Integer juli,
-                                   @RequestParam(defaultValue = "") Integer sort) {
+                                   @RequestParam(defaultValue = "") Integer sort,
+                                   @RequestParam(defaultValue = "zh-TW",required = false) String language) {
         List<PosStore> list;
         if (sort == null) {
             list = posStoreMapper.getmdlist(longitude, latitude, (page - 1) * 20, "%" + area + "%", juli);
@@ -235,7 +237,8 @@ public class PosStoreController extends BaseController {
 
         posStoreEnrichService.enrichStoreList(list);
 
-        return success(list);
+        Page<StoreOutput> result = posStoreEnrichService.buildStoreOutputPage(list, language, page, list.size());
+        return success(result);
 
     }
 

+ 52 - 0
ruoyi-admin/src/main/java/com/ruoyi/app/mendian/PosStoreEnrichService.java

@@ -1,17 +1,23 @@
 package com.ruoyi.app.mendian;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.app.utils.DateUtil;
+import com.ruoyi.app.user.dto.StoreOutput;
 import com.ruoyi.system.domain.OperatingHours;
+import com.ruoyi.system.domain.PosFood;
 import com.ruoyi.system.domain.PosOrder;
 import com.ruoyi.system.domain.PosReview;
 import com.ruoyi.system.domain.PosStore;
+import com.ruoyi.system.mapper.PosFoodMapper;
 import com.ruoyi.system.service.IOperatingHoursService;
 import com.ruoyi.system.service.IPosOrderService;
 import com.ruoyi.system.service.IPosReviewService;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -26,6 +32,8 @@ public class PosStoreEnrichService {
     private IPosOrderService posOrderService;
     @Autowired
     private IOperatingHoursService operatingHoursService;
+    @Autowired
+    private PosFoodMapper posFoodMapper;
 
     /**
      * 为门店列表设置评分、月售、营业状态。
@@ -99,4 +107,48 @@ public class PosStoreEnrichService {
             }
         }
     }
+
+    /**
+     * 将门店列表转换为带商品列表的分页结构(StoreOutput)。
+     */
+    public Page<StoreOutput> buildStoreOutputPage(List<PosStore> storeList, String language, int page, long total) {
+        String lang = toLangCode(language);
+        List<Integer> storeIds = storeList.stream()
+                .map(PosStore::getId)
+                .collect(Collectors.toList());
+
+        Map<Integer, List<PosFood>> foodMap = new java.util.HashMap<>();
+        if (!storeIds.isEmpty()) {
+            List<Long> storeIdsLong = storeIds.stream()
+                    .map(Integer::longValue)
+                    .collect(Collectors.toList());
+            List<PosFood> allFoods = posFoodMapper.selectFoodsByStoreIdsWithLimit(storeIdsLong, lang, 6);
+            foodMap = allFoods.stream()
+                    .collect(Collectors.groupingBy(food -> food.getMdid().intValue()));
+        }
+
+        List<StoreOutput> storeOutputList = new ArrayList<>();
+        for (PosStore store : storeList) {
+            StoreOutput storeOutput = new StoreOutput();
+            BeanUtils.copyProperties(store, storeOutput);
+            List<PosFood> foodList = foodMap.getOrDefault(store.getId(), new ArrayList<>());
+            storeOutput.setFoodList(foodList);
+            storeOutputList.add(storeOutput);
+        }
+
+        Page<StoreOutput> result = new Page<>(page, 10);
+        result.setTotal(total);
+        result.setRecords(storeOutputList);
+        return result;
+    }
+
+    private String toLangCode(String language) {
+        if ("zh-CN".equals(language)) {
+            return "2";
+        }
+        if ("en-US".equals(language)) {
+            return "1";
+        }
+        return "3";
+    }
 }

+ 1 - 50
ruoyi-admin/src/main/java/com/ruoyi/app/user/UserAppIndexController.java

@@ -21,11 +21,9 @@ import java.math.BigDecimal;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 import com.ruoyi.system.mapper.PosOrderMapper;
 import com.ruoyi.app.user.dto.StoreOutput;
-import org.springframework.beans.BeanUtils;
 
 /**
  * 用户美食首页
@@ -90,54 +88,7 @@ public class UserAppIndexController extends BaseController {
         List<PosStore> storeList = posStoreMapper.getjxStore(longitude,latitude,(page-1)*10,flId);
         posStoreEnrichService.enrichStoreList(storeList);
         int count = posStoreMapper.getjxStoreCount(longitude,latitude,flId);
-        String lang="3";
-        if ("zh-CN".equals(language)) {
-            lang = "2";
-        }
-        if ("zh-TW".equals(language)) {
-            lang = "3";
-        }
-        if ("en-US".equals(language)) {
-            lang = "1";
-        }
-
-        // 收集所有门店ID(Integer类型)
-        List<Integer> storeIds = storeList.stream()
-                .map(PosStore::getId)
-                .collect(Collectors.toList());
-
-        // 使用MyBatis Plus一次性查询所有门店的商品(避免N+1查询问题)
-        java.util.Map<Integer, List<PosFood>> foodMap = new java.util.HashMap<>();
-        if (!storeIds.isEmpty()) {
-            // 将Integer类型的门店ID转换为Long类型用于查询(因为mdid是Long类型)
-            List<Long> storeIdsLong = storeIds.stream()
-                    .map(Integer::longValue)
-                    .collect(Collectors.toList());
-
-            // 使用MyBatis Plus的Mapper方法,在数据库查询时就限制每个门店只返回6条商品
-            List<PosFood> allFoods = posFoodMapper.selectFoodsByStoreIdsWithLimit(storeIdsLong, lang, 6);
-
-            // 按门店ID分组(查询结果已经限制为每个门店最多6条)
-            foodMap = allFoods.stream()
-                    .collect(Collectors.groupingBy(food -> food.getMdid().intValue()));
-
-        }
-
-        // 转换为StoreOutput并设置每个门店的商品列表(每个门店最多6条)
-        List<StoreOutput> storeOutputList = new ArrayList<>();
-        for (PosStore store : storeList) {
-            StoreOutput storeOutput = new StoreOutput();
-            // 复制PosStore的所有属性
-            BeanUtils.copyProperties(store, storeOutput);
-            // 从分组结果中获取该门店的商品列表(已限制为最多6条)
-            List<PosFood> foodList = foodMap.getOrDefault(store.getId(), new ArrayList<>());
-            storeOutput.setFoodList(foodList);
-            storeOutputList.add(storeOutput);
-        }
-
-        Page<StoreOutput> result = new Page<>(page, 10);
-        result.setTotal(count);
-        result.setRecords(storeOutputList);
+        Page<StoreOutput> result = posStoreEnrichService.buildStoreOutputPage(storeList, language, page, count);
         return success(result);
     }