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

feat(product): 新增采购指南功能并优化商品查询接口

- 新增采购指南相关接口和实现逻辑
- 修改商品程序产品列表返回类型为Map结构
- 添加分类名称字段到商品视图对象
- 修复价格范围查询使用会员价格替代市场价
- 优化商品搜索关键词匹配逻辑
- 添加平台导航搜索标题接口
- 实现商品按分类名称分组功能
肖路 1 месяц назад
Родитель
Сommit
9587b88bc8

+ 11 - 1
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/controller/pc/IndexProductController.java

@@ -13,6 +13,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * 首页
  * 首页
@@ -148,6 +149,15 @@ public class IndexProductController {
         return R.ok(serviceCaseService.getProjectCaseList(recommendId));
         return R.ok(serviceCaseService.getProjectCaseList(recommendId));
     }
     }
 
 
+    /**
+    * 平台装修-采购指南
+    * */
+    @GetMapping("getProcurementTopicsList")
+    public R<List<ProcurementTopicsVo>> getProcurementTopicsList() {
+        Long recommendId = 2001108545239650398L;
+        return R.ok(procurementTopicsService.getProcurementTopicsList(recommendId));
+    }
+
     /**
     /**
      * 查询父级下一级的子集商品分类
      * 查询父级下一级的子集商品分类
      * */
      * */
@@ -260,7 +270,7 @@ public class IndexProductController {
     * 获取场景采购下的商品
     * 获取场景采购下的商品
     * */
     * */
     @GetMapping("/getProductProgramProductList/{programId}")
     @GetMapping("/getProductProgramProductList/{programId}")
-    public R<List<PcProductVo>> getProductProgramProductList(@PathVariable Long programId) {
+    public R<Map<String, List<PcProductVo>>> getProductProgramProductList(@PathVariable Long programId) {
         return R.ok(productBaseService.getProductProgramProductList(programId));
         return R.ok(productBaseService.getProductProgramProductList(programId));
     }
     }
 
 

+ 4 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/vo/PcProductVo.java

@@ -19,6 +19,10 @@ public class PcProductVo {
      * 产品名称
      * 产品名称
      */
      */
     private String itemName;
     private String itemName;
+    /**
+    * 分类名称
+    * */
+    private String categoryName;
     /**
     /**
      * 产品编号
      * 产品编号
      */
      */

+ 6 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/vo/ProductProgramVo.java

@@ -118,6 +118,12 @@ public class ProductProgramVo implements Serializable {
     @ExcelProperty(value = "备注")
     @ExcelProperty(value = "备注")
     private String remark;
     private String remark;
 
 
+    /**
+     * 创建时间
+     */
+    @ExcelProperty(value = "创建时间")
+    private Date createTime;
+
     /**
     /**
      * 多个产品id
      * 多个产品id
      * */
      * */

+ 2 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/IProcurementTopicsService.java

@@ -67,4 +67,6 @@ public interface IProcurementTopicsService extends IService<ProcurementTopics>{
      * @return 是否删除成功
      * @return 是否删除成功
      */
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+    List<ProcurementTopicsVo> getProcurementTopicsList(Long recommendId);
 }
 }

+ 1 - 1
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/IProductBaseService.java

@@ -215,7 +215,7 @@ public interface IProductBaseService extends IService<ProductBase>{
     /**
     /**
     * PC端场景采购下的商品
     * PC端场景采购下的商品
      * */
      * */
-    List<PcProductVo> getProductProgramProductList(Long programId);
+    Map<String, List<PcProductVo>> getProductProgramProductList(Long programId);
 
 
     /**
     /**
     * PC端协议商品列表
     * PC端协议商品列表

+ 21 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProcurementTopicsServiceImpl.java

@@ -1,5 +1,6 @@
 package org.dromara.product.service.impl;
 package org.dromara.product.service.impl;
 
 
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.core.utils.StringUtils;
@@ -10,6 +11,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.product.domain.ProductRecommendLink;
+import org.dromara.product.domain.ServiceCase;
+import org.dromara.product.domain.vo.ProductRecommendLinkVo;
+import org.dromara.product.mapper.ProductRecommendLinkMapper;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.dromara.product.domain.bo.ProcurementTopicsBo;
 import org.dromara.product.domain.bo.ProcurementTopicsBo;
 import org.dromara.product.domain.vo.ProcurementTopicsVo;
 import org.dromara.product.domain.vo.ProcurementTopicsVo;
@@ -34,6 +39,8 @@ public class ProcurementTopicsServiceImpl  extends ServiceImpl<ProcurementTopics
 
 
     private final ProcurementTopicsMapper baseMapper;
     private final ProcurementTopicsMapper baseMapper;
 
 
+    private final ProductRecommendLinkMapper productRecommendLinkMapper;
+
     /**
     /**
      * 查询采购主题
      * 查询采购主题
      *
      *
@@ -152,4 +159,18 @@ public class ProcurementTopicsServiceImpl  extends ServiceImpl<ProcurementTopics
         }
         }
         return baseMapper.deleteByIds(ids) > 0;
         return baseMapper.deleteByIds(ids) > 0;
     }
     }
+
+
+    @Override
+    public List<ProcurementTopicsVo> getProcurementTopicsList(Long recommendId) {
+        List<ProductRecommendLinkVo> productRecommendLinkVos = productRecommendLinkMapper.selectVoList(Wrappers.lambdaQuery(ProductRecommendLink.class)
+            .eq(ProductRecommendLink::getRecommendId, recommendId));
+        if (CollUtil.isNotEmpty(productRecommendLinkVos)) {
+            List<Long> ProgramIds = productRecommendLinkVos.stream().map(ProductRecommendLinkVo::getProgramId).toList();
+            return baseMapper.selectVoList(Wrappers.lambdaQuery(ProcurementTopics.class)
+                .eq(ProcurementTopics::getIsShow, "1")
+                .in(ProcurementTopics::getId, ProgramIds));
+        }
+        return List.of();
+    }
 }
 }

+ 16 - 13
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProductBaseServiceImpl.java

@@ -487,7 +487,7 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
      */
      */
     private LambdaEsQueryWrapper<ProductBaseVo> buildEsQueryWrapperForPc(PcProductBo bo) {
     private LambdaEsQueryWrapper<ProductBaseVo> buildEsQueryWrapperForPc(PcProductBo bo) {
         LambdaEsQueryWrapper<ProductBaseVo> wrapper = new LambdaEsQueryWrapper<ProductBaseVo>()
         LambdaEsQueryWrapper<ProductBaseVo> wrapper = new LambdaEsQueryWrapper<ProductBaseVo>()
-//            .eq(ProductBaseVo::getProductStatus, 1)
+            .eq(ProductBaseVo::getProductStatus, 1)
             ;
             ;
 
 
         if(ObjectUtil.isNotEmpty(bo.getProductNo())){
         if(ObjectUtil.isNotEmpty(bo.getProductNo())){
@@ -1499,7 +1499,7 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
                     .or()
                     .or()
                     .like(ProductBaseVo::getBrandName, bo.getSearchKeyword())
                     .like(ProductBaseVo::getBrandName, bo.getSearchKeyword())
                     .or()
                     .or()
-                    .like(ProductBaseVo::getProductNo, bo.getProductNo())
+                    .like(ProductBaseVo::getProductNo, bo.getSearchKeyword())
                 );
                 );
             }
             }
 
 
@@ -1507,16 +1507,16 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
                 //价格区间 1:1-100 2:100-500 3:500-1000 4:1000以上
                 //价格区间 1:1-100 2:100-500 3:500-1000 4:1000以上
                 switch (bo.getPriceRange()) {
                 switch (bo.getPriceRange()) {
                     case "1":
                     case "1":
-                        esQueryWrapper.between(ProductBaseVo::getMarketPrice, 1, 100);
+                        esQueryWrapper.between(ProductBaseVo::getMemberPrice, 1, 100);
                         break;
                         break;
                     case "2":
                     case "2":
-                        esQueryWrapper.between(ProductBaseVo::getMarketPrice, 100, 500);
+                        esQueryWrapper.between(ProductBaseVo::getMemberPrice, 100, 500);
                         break;
                         break;
                     case "3":
                     case "3":
-                        esQueryWrapper.between(ProductBaseVo::getMarketPrice, 500, 1000);
+                        esQueryWrapper.between(ProductBaseVo::getMemberPrice, 500, 1000);
                         break;
                         break;
                     case "4":
                     case "4":
-                        esQueryWrapper.ge(ProductBaseVo::getMarketPrice, 1000);
+                        esQueryWrapper.ge(ProductBaseVo::getMemberPrice, 1000);
                         break;
                         break;
                 }
                 }
             }
             }
@@ -1527,11 +1527,11 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
                 for (int i = 0; i < sortFields.length; i++) {
                 for (int i = 0; i < sortFields.length; i++) {
                     switch (sortFields[i]) {
                     switch (sortFields[i]) {
                         case "1":
                         case "1":
-                            esQueryWrapper.orderBy( true, sortOrders[i].equals("Asc"),ProductBaseVo::getId);
+//                            esQueryWrapper.orderBy( true, sortOrders[i].equals("Asc"),ProductBaseVo::getId);
                         case "2":
                         case "2":
                             esQueryWrapper.orderBy( true, sortOrders[i].equals("Asc"),ProductBaseVo::getTotalInventory);
                             esQueryWrapper.orderBy( true, sortOrders[i].equals("Asc"),ProductBaseVo::getTotalInventory);
                         case "3":
                         case "3":
-                            esQueryWrapper.orderBy( true, sortOrders[i].equals("Asc"),ProductBaseVo::getMarketPrice);
+                            esQueryWrapper.orderBy( true, sortOrders[i].equals("Asc"),ProductBaseVo::getMemberPrice);
                     }
                     }
                 }
                 }
             }
             }
@@ -1886,7 +1886,7 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
      * @param programId
      * @param programId
      */
      */
     @Override
     @Override
-    public List<PcProductVo> getProductProgramProductList(Long programId) {
+    public Map<String, List<PcProductVo>> getProductProgramProductList(Long programId) {
         List<ProductProgramLinkVo> productProgramLinkVos = productProgramLinkMapper.selectVoList(
         List<ProductProgramLinkVo> productProgramLinkVos = productProgramLinkMapper.selectVoList(
             Wrappers.lambdaQuery(ProductProgramLink.class)
             Wrappers.lambdaQuery(ProductProgramLink.class)
                 .eq(ProductProgramLink::getProgramId, programId)
                 .eq(ProductProgramLink::getProgramId, programId)
@@ -1897,12 +1897,15 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
             lqw.in("b.id", productIds);
             lqw.in("b.id", productIds);
             lqw.eq("b.product_status", 1);
             lqw.eq("b.product_status", 1);
             List<ProductBaseVo> productBaseVos = baseMapper.selectAllList(lqw);
             List<ProductBaseVo> productBaseVos = baseMapper.selectAllList(lqw);
-            if (CollUtil.isNotEmpty(productBaseVos)) {
-                return BeanUtil.copyToList(productBaseVos, PcProductVo.class);
+
+            List<PcProductVo> pcProductVos = BeanUtil.copyToList(productBaseVos, PcProductVo.class);
+            //通过分类名称分组
+            Map<String, List<PcProductVo>> map = pcProductVos.stream().collect(Collectors.groupingBy(PcProductVo::getCategoryName));
+            if (CollUtil.isNotEmpty(map)) {
+                return map;
             }
             }
         }
         }
-
-        return List.of();
+        return Map.of();
     }
     }
     /**
     /**
      * PC端协议商品列表
      * PC端协议商品列表

+ 12 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/pc/IndexSystemController.java

@@ -50,7 +50,18 @@ public class IndexSystemController {
     private final ISysPriceRangeService sysPriceRangeService;
     private final ISysPriceRangeService sysPriceRangeService;
     //项目类型
     //项目类型
     private final ISysProjectTypeService sysProjectTypeService;
     private final ISysProjectTypeService sysProjectTypeService;
-
+    //获取导航信息
+    private final IPlatformNavigationService platformNavigationService;
+    /**
+    * 平台设置-搜索导航
+    * */
+    @GetMapping("/getSearchTitle")
+    public R<List<PlatformNavigation>> getSearchTitle() {
+        List<PlatformNavigation> list = platformNavigationService.list(Wrappers.<PlatformNavigation>lambdaQuery(PlatformNavigation.class)
+            .eq(PlatformNavigation::getNavType, "setting_search")
+        );
+        return R.ok(list);
+    }
     /**
     /**
     * 轮播广告(平台装修-轮播广告)
     * 轮播广告(平台装修-轮播广告)
     * */
     * */