Просмотр исходного кода

商品类型(类目),连表查询

Sakana 3 дней назад
Родитель
Сommit
fb9ff57155

+ 1 - 10
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopCategoryVo.java

@@ -1,14 +1,7 @@
 package edu.travel.remote.vo;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
 import edu.travel.entity.BaseEntity;
-import lombok.AllArgsConstructor;
 import lombok.Data;
-import lombok.NoArgsConstructor;
-
 import java.util.List;
 import java.util.Map;
 
@@ -16,9 +9,7 @@ import java.util.Map;
  * 商品类型
  */
 @Data
-@AllArgsConstructor
-@NoArgsConstructor
-@TableName(value = "shop_category")
+
 public class ShopCategoryVo extends BaseEntity {
     /**
      * 商品类型ID

+ 6 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/mapper/ShopCategoryMapper.java

@@ -2,6 +2,12 @@ package edu.travel.commodity.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import edu.travel.commodity.entity.ShopCategory;
+import edu.travel.remote.dto.ShopCategoryDto;
+import edu.travel.remote.vo.ShopCategoryVo;
+
+import java.util.List;
 
 public interface ShopCategoryMapper extends BaseMapper<ShopCategory> {
+    List<ShopCategoryVo> selectCategoryWithCountry(ShopCategoryDto shopCategoryDto);
+    int countAll(ShopCategoryDto shopCategoryDto);
 }

+ 5 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopCategoryService.java

@@ -1,9 +1,12 @@
 package edu.travel.commodity.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.entity.ShopCategory;
 import com.baomidou.mybatisplus.extension.service.IService;
 import edu.travel.remote.dto.BaseDto;
+import edu.travel.remote.dto.ShopCategoryDto;
 import edu.travel.remote.dto.ShopTypeDto;
+import edu.travel.remote.vo.ShopCategoryVo;
 import edu.travel.remote.vo.ShopTypeVo;
 import edu.travel.rpc.RPCBaseResponse;
 import org.springframework.web.multipart.MultipartFile;
@@ -13,6 +16,8 @@ import java.util.concurrent.ExecutionException;
 
 public interface ShopCategoryService extends IService<ShopCategory>{
 
+    RPCBaseResponse<Page<ShopCategoryVo>> getCategoryPage(ShopCategoryDto shopCategoryDto);
+
     List<ShopTypeVo> getShopType(ShopTypeDto param) throws ExecutionException;
 
     List<ShopTypeVo> getLevelToShopType(BaseDto param) throws ExecutionException;

+ 63 - 3
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopCategoryServiceImpl.java

@@ -10,6 +10,7 @@ import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import edu.travel.adapter.service.country.CountryAdapter;
 import edu.travel.adapter.service.upload.UploadAdapter;
@@ -21,18 +22,20 @@ import edu.travel.commodity.service.ShopCategoryService;
 import edu.travel.commodity.utils.FIleUtil;
 import edu.travel.commodity.utils.RedisUtil;
 import edu.travel.remote.dto.BaseDto;
+import edu.travel.remote.dto.ShopCategoryDto;
 import edu.travel.remote.dto.ShopTypeDto;
+import edu.travel.remote.feign.mode.vo.banner.BannerVo;
 import edu.travel.remote.upload.dto.EduFileDTO;
+import edu.travel.remote.vo.ShopCategoryVo;
 import edu.travel.remote.vo.ShopTypeVo;
 import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.vo.BaseCountryServeVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.servlet.View;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -47,6 +50,63 @@ public class ShopCategoryServiceImpl extends ServiceImpl<ShopCategoryMapper, Sho
     private UploadAdapter uploadAdapter;
     @Autowired
     private CountryAdapter countryAdapter;
+    @Autowired
+    private ShopCategoryMapper shopCategoryMapper;
+
+    @Override
+    public RPCBaseResponse<Page<ShopCategoryVo>> getCategoryPage(ShopCategoryDto shopCategoryDto) {
+        // 查询商品类型数据,确保返回数据正确
+        List<ShopCategoryVo> categoryVos = shopCategoryMapper.selectCategoryWithCountry(shopCategoryDto);
+        int total = shopCategoryMapper.countAll(shopCategoryDto);
+
+        // 提取 CountryID
+        Set<String> countryIds = categoryVos.stream()
+                .map(ShopCategoryVo::getCountryId)
+                .collect(Collectors.toSet());
+
+        // 查询国家信息
+        Map<String, ShopCategoryVo> countryMap = fetchCountryData(countryIds);
+
+        // 遍历并设置国家信息
+        for (ShopCategoryVo shopCategoryVo : categoryVos) {
+            if (shopCategoryVo.getMap() == null) {
+                shopCategoryVo.setMap(new HashMap<>());
+            }
+            // 设置国家信息到 map 中
+            if (countryMap.containsKey(shopCategoryVo.getCountryId())) {
+                shopCategoryVo.getMap().put("countryServe", countryMap.get(shopCategoryVo.getCountryId()));
+            }
+        }
+
+        // 封装返回结果
+        Page<ShopCategoryVo> pageVoLink = new Page<>();
+        pageVoLink.setRecords(categoryVos);
+        pageVoLink.setTotal(total);
+        pageVoLink.setCurrent(shopCategoryDto.getCurrentPage());
+        pageVoLink.setSize(shopCategoryDto.getPageSize());
+        return new RPCBaseResponse<>(200, "SUCCESS", pageVoLink);
+    }
+
+    // 查询国家信息
+    private Map<String, ShopCategoryVo> fetchCountryData(Set<String> countryIds) {
+        Map<String, ShopCategoryVo> countryMap = new HashMap<>();
+        for (String countryId : countryIds) {
+            // 假设 countryAdapter.getFormId(countryId) 返回 RPCBaseResponse<BaseCountryServeVo>
+            BaseCountryServeVo countryServeVo = countryAdapter.getFormId(countryId).getData();
+            if (countryServeVo != null) {
+                ShopCategoryVo countryVo = new ShopCategoryVo();  // 使用 ShopCategoryVo 来存储国家信息
+                countryVo.setCountryId(countryId);
+                countryVo.setMap(new HashMap<>());
+                countryVo.getMap().put("countryNameZh", countryServeVo.getCountryNameZh());
+                countryVo.getMap().put("countryNameEn", countryServeVo.getCountryNameEn());
+                countryVo.getMap().put("countryNameLocal", countryServeVo.getCountryNameLocal());
+
+                // 将国家信息放入 countryMap
+                countryMap.put(countryId, countryVo);
+            }
+        }
+        return countryMap;
+    }
 
     @Override
     public List<ShopTypeVo> getShopType(ShopTypeDto shopTypeDto) {

+ 8 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopCategoryController.java

@@ -1,5 +1,6 @@
 package edu.travel.commodity.web;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.adapter.service.country.CountryAdapter;
 import edu.travel.adapter.service.upload.UploadAdapter;
 import edu.travel.commodity.entity.ShopCategory;
@@ -214,5 +215,12 @@ public class ShopCategoryController extends BaseController<ShopCategory> impleme
         countryVo.setAreaCode(serveVo.getAreaCode());
         return countryVo;
     }
+    /**
+     * 查询分页
+     */
+    @GetMapping("/getCategoryPage")
+    public RPCBaseResponse<Page<ShopCategoryVo>>getCategoryPage(ShopCategoryDto shopCategoryDto){
+        return shopCategoryService.getCategoryPage(shopCategoryDto);
+    }
 
 }

+ 55 - 0
edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopCategoryMapper.xml

@@ -26,4 +26,59 @@
     sort_order, `enable`, project, create_time, create_user_id, update_time, update_user_id, 
     delete_flag
   </sql>
+  <select id="selectCategoryWithCountry" resultType="edu.travel.remote.vo.ShopCategoryVo">
+    SELECT
+    sc.id,
+    sc.parent_id,
+    sc.country_id,
+    sc.heat_value,
+    sc.warehouse_id,
+    sc.type_name,
+    sc.image_url,
+    sc.sort_order,
+    sc.enable,
+    sc.project,
+    sc.create_time,
+    sc.create_user_id,
+    sc.update_time,
+    sc.update_user_id,
+    sc.delete_flag
+    FROM
+   shop_category sc
+    <where>
+      <if test="countryId != null and countryId != ''">
+        AND sc.country_id = #{countryId}
+      </if>
+      <if test="parentId != null and parentId != ''">
+        AND sc.parent_id = #{parentId}
+      </if>
+      <if test="typeName != null and typeName != ''">
+        AND sc.type_name LIKE CONCAT('%', #{typeName}, '%')
+      </if>
+      <if test="enable != null and enable != ''">
+        AND sc.enable = #{enable}
+      </if>
+
+    </where>
+  </select>
+  <select id="countAll" resultType="int">
+    SELECT
+    COUNT(*)
+    FROM
+    shop_category sc
+    <where>
+      <if test="countryId != null and countryId != ''">
+        AND sc.country_id = #{countryId}
+      </if>
+      <if test="parentId != null and parentId != ''">
+        AND sc.parent_id = #{parentId}
+      </if>
+      <if test="typeName != null and typeName != ''">
+        AND sc.type_name LIKE CONCAT('%', #{typeName}, '%')
+      </if>
+      <if test="enable != null and enable != ''">
+        AND sc.enable = #{enable}
+      </if>
+    </where>
+  </select>
 </mapper>