Преглед изворни кода

feat(product): 添加diy商品接口并优化协议产品功能

- 新增DiyProductController提供商品列表、分类树和品牌列表接口
- 新建DiySystemController用于系统运营相关接口
- 移除ProtocolInfo和ProtocolProducts中的@TableLogic注解
- 修改协议产品查询逻辑,支持按协议价格筛选
- 为ServiceCase和SysAnnouncement添加ids批量查询功能
- 修复SiteProductController中商品分类依赖注入错误
- 修正协议产品表映射路径问题
肖路 пре 1 месец
родитељ
комит
32266573b3
13 измењених фајлова са 117 додато и 16 уклоњено
  1. 1 1
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/controller/ProtocolInfoController.java
  2. 14 1
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/controller/ProtocolProductsController.java
  3. 53 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/controller/pc/DiyProductController.java
  4. 1 1
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/controller/pc/SiteProductController.java
  5. 1 1
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/ProtocolInfo.java
  6. 0 1
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/ProtocolProducts.java
  7. 3 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/bo/ServiceCaseBo.java
  8. 0 1
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProductBaseServiceImpl.java
  9. 12 10
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProtocolProductsServiceImpl.java
  10. 4 0
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ServiceCaseServiceImpl.java
  11. 18 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/pc/DiySystemController.java
  12. 5 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysAnnouncementBo.java
  13. 5 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysAnnouncementServiceImpl.java

+ 1 - 1
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/controller/ProtocolInfoController.java

@@ -32,7 +32,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
 @Validated
 @Validated
 @RequiredArgsConstructor
 @RequiredArgsConstructor
 @RestController
 @RestController
-@RequestMapping("/info")
+@RequestMapping("/protocolInfo")
 public class ProtocolInfoController extends BaseController {
 public class ProtocolInfoController extends BaseController {
 
 
     private final IProtocolInfoService protocolInfoService;
     private final IProtocolInfoService protocolInfoService;

+ 14 - 1
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/controller/ProtocolProductsController.java

@@ -36,7 +36,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
 @Validated
 @Validated
 @RequiredArgsConstructor
 @RequiredArgsConstructor
 @RestController
 @RestController
-@RequestMapping("/products")
+@RequestMapping("/protocolProducts")
 public class ProtocolProductsController extends BaseController {
 public class ProtocolProductsController extends BaseController {
 
 
     private final IProtocolProductsService protocolProductsService;
     private final IProtocolProductsService protocolProductsService;
@@ -123,4 +123,17 @@ public class ProtocolProductsController extends BaseController {
                           @PathVariable("ids") Long[] ids) {
                           @PathVariable("ids") Long[] ids) {
         return toAjax(protocolProductsService.deleteWithValidByIds(List.of(ids), true));
         return toAjax(protocolProductsService.deleteWithValidByIds(List.of(ids), true));
     }
     }
+
+    /**
+    * 更改协议价格
+    * */
+    @PutMapping("/updateProtocolPrice")
+    public R<Void> updateProtocolPrice(@Validated @RequestBody ProtocolProductsBo bo) {
+        protocolProductsService.update(Wrappers.lambdaUpdate(ProtocolProducts.class)
+            .set(ProtocolProducts::getAgreementPrice, bo.getAgreementPrice())
+            .eq(ProtocolProducts::getProductId, bo.getProductId())
+            .eq(ProtocolProducts::getProtocolId, bo.getProtocolId())
+        );
+        return R.ok();
+    }
 }
 }

+ 53 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/controller/pc/DiyProductController.java

@@ -1,11 +1,29 @@
 package org.dromara.product.controller.pc;
 package org.dromara.product.controller.pc;
 
 
+import cn.hutool.core.lang.tree.Tree;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.product.domain.bo.ProductBaseBo;
+import org.dromara.product.domain.bo.ProductBrandBo;
+import org.dromara.product.domain.bo.ProductCategoryBo;
+import org.dromara.product.domain.vo.PcProductVo;
+import org.dromara.product.domain.vo.ProductBaseVo;
+import org.dromara.product.domain.vo.ProductBrandVo;
+import org.dromara.product.service.IProductBaseService;
+import org.dromara.product.service.IProductBrandService;
+import org.dromara.product.service.IProductCategoryService;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 
 
+import java.util.List;
+
 /**
 /**
+ * diy商品相关接口
  * @author
  * @author
  * @date 2026/1/28 下午3:37
  * @date 2026/1/28 下午3:37
  */
  */
@@ -14,4 +32,39 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @RestController
 @RequestMapping("/diyProduct")
 @RequestMapping("/diyProduct")
 public class DiyProductController {
 public class DiyProductController {
+
+    //商品
+    private final IProductBaseService productBaseService;
+    //商品品牌
+    private final IProductBrandService productBrandService;
+    //商品分类
+    private final IProductCategoryService productCategoryService;
+
+    /**
+     * 获取商品列表
+     * @param bo
+     * @param pageQuery
+     * @return
+     */
+    @GetMapping("/getDiyProductPage")
+    public TableDataInfo<ProductBaseVo> getDiyProductList(ProductBaseBo bo, PageQuery pageQuery){
+        return productBaseService.queryPageList(bo, pageQuery);
+    }
+
+    /**
+     * 查询商品分类树
+     * */
+    @GetMapping("/getProductCategoryTree")
+    public R<List<Tree<Long>>> selectCategoryTreeList(ProductCategoryBo bo) {
+        return R.ok(productCategoryService.selectCategoryTreeList(bo));
+    }
+
+    /**
+    * 获取商品品牌列表
+    * */
+    @GetMapping("/getProductBrandPage")
+    public TableDataInfo<ProductBrandVo> getProductBrandPage(ProductBrandBo bo, PageQuery pageQuery) {
+        return productBrandService.queryPageList(bo, pageQuery);
+    }
+
 }
 }

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

@@ -36,7 +36,7 @@ public class SiteProductController {
     private final IClientSiteFloorService clientSiteFloorService;
     private final IClientSiteFloorService clientSiteFloorService;
     //商品
     //商品
     private final IProductBaseService productBaseService;
     private final IProductBaseService productBaseService;
-    //商品分类
+    //商品品牌
     private final IProductBrandService productBrandService;
     private final IProductBrandService productBrandService;
 
 
     /**
     /**

+ 1 - 1
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/ProtocolInfo.java

@@ -122,7 +122,7 @@ public class ProtocolInfo extends TenantEntity {
     /**
     /**
      * 删除标志(0代表存在 2代表删除)
      * 删除标志(0代表存在 2代表删除)
      */
      */
-    @TableLogic
+//    @TableLogic
     private String delFlag;
     private String delFlag;
 
 
 
 

+ 0 - 1
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/ProtocolProducts.java

@@ -83,7 +83,6 @@ public class ProtocolProducts extends TenantEntity {
     /**
     /**
      * 删除标志(0代表存在 2代表删除)
      * 删除标志(0代表存在 2代表删除)
      */
      */
-    @TableLogic
     private String delFlag;
     private String delFlag;
 
 
 
 

+ 3 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/domain/bo/ServiceCaseBo.java

@@ -25,6 +25,9 @@ public class ServiceCaseBo extends BaseEntity {
      */
      */
     private Long id;
     private Long id;
 
 
+    private String ids;
+
+
     /**
     /**
      * 案例编号
      * 案例编号
      */
      */

+ 0 - 1
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProductBaseServiceImpl.java

@@ -462,7 +462,6 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
     private LambdaEsQueryWrapper<ProductBaseVo> buildEsQueryWrapper(ProductBaseBo bo) {
     private LambdaEsQueryWrapper<ProductBaseVo> buildEsQueryWrapper(ProductBaseBo bo) {
         LambdaEsQueryWrapper<ProductBaseVo> productBaseVoLambdaEsQueryWrapper = new LambdaEsQueryWrapper<ProductBaseVo>()
         LambdaEsQueryWrapper<ProductBaseVo> productBaseVoLambdaEsQueryWrapper = new LambdaEsQueryWrapper<ProductBaseVo>()
             .eq(ObjectUtil.isNotEmpty(bo.getProductNo()), ProductBaseVo::getProductNo, bo.getProductNo())
             .eq(ObjectUtil.isNotEmpty(bo.getProductNo()), ProductBaseVo::getProductNo, bo.getProductNo())
-
             .like(ObjectUtil.isNotEmpty(bo.getItemName()), ProductBaseVo::getItemName, bo.getItemName())
             .like(ObjectUtil.isNotEmpty(bo.getItemName()), ProductBaseVo::getItemName, bo.getItemName())
             .eq(bo.getBrandId() != null, ProductBaseVo::getBrandId, bo.getBrandId())
             .eq(bo.getBrandId() != null, ProductBaseVo::getBrandId, bo.getBrandId())
             .eq(bo.getTopCategoryId() != null, ProductBaseVo::getTopCategoryId, bo.getTopCategoryId())
             .eq(bo.getTopCategoryId() != null, ProductBaseVo::getTopCategoryId, bo.getTopCategoryId())

+ 12 - 10
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ProtocolProductsServiceImpl.java

@@ -74,7 +74,8 @@ public class ProtocolProductsServiceImpl  extends ServiceImpl<ProtocolProductsMa
             return TableDataInfo.build();
             return TableDataInfo.build();
         }
         }
         List<Long> productIds = protocolProducts.stream().map(ProtocolProducts::getProductId).distinct().toList();
         List<Long> productIds = protocolProducts.stream().map(ProtocolProducts::getProductId).distinct().toList();
-        
+
+        TableDataInfo<ProductBaseVo> tableDataInfo = TableDataInfo.build();
         // 使用ES查询
         // 使用ES查询
         try {
         try {
             LambdaEsQueryWrapper<ProductBaseVo> esQueryWrapper = new LambdaEsQueryWrapper<ProductBaseVo>()
             LambdaEsQueryWrapper<ProductBaseVo> esQueryWrapper = new LambdaEsQueryWrapper<ProductBaseVo>()
@@ -83,7 +84,7 @@ public class ProtocolProductsServiceImpl  extends ServiceImpl<ProtocolProductsMa
                 .eq(ObjectUtil.isNotEmpty(bo.getBrandId()), ProductBaseVo::getBrandId, bo.getBrandId())
                 .eq(ObjectUtil.isNotEmpty(bo.getBrandId()), ProductBaseVo::getBrandId, bo.getBrandId())
                 .eq(ObjectUtil.isNotEmpty(bo.getProductStatus()), ProductBaseVo::getProductStatus, bo.getProductStatus())
                 .eq(ObjectUtil.isNotEmpty(bo.getProductStatus()), ProductBaseVo::getProductStatus, bo.getProductStatus())
                 .orderByAsc(ProductBaseVo::getId);
                 .orderByAsc(ProductBaseVo::getId);
-            
+
             // 检查ES索引是否存在
             // 检查ES索引是否存在
             if (!productEsMapper.existsIndex("productbasevo")) {
             if (!productEsMapper.existsIndex("productbasevo")) {
                 log.warn("ES索引 [productbasevo] 不存在,降级到数据库查询");
                 log.warn("ES索引 [productbasevo] 不存在,降级到数据库查询");
@@ -94,16 +95,14 @@ public class ProtocolProductsServiceImpl  extends ServiceImpl<ProtocolProductsMa
                 lqw.eq(ObjectUtil.isNotEmpty(bo.getProductStatus()),"b.product_status", bo.getProductStatus());
                 lqw.eq(ObjectUtil.isNotEmpty(bo.getProductStatus()),"b.product_status", bo.getProductStatus());
                 lqw.orderByAsc("b.id");
                 lqw.orderByAsc("b.id");
                 List<ProductBaseVo> result = productBaseMapper.selectAllList(lqw);
                 List<ProductBaseVo> result = productBaseMapper.selectAllList(lqw);
-                TableDataInfo<ProductBaseVo> tableDataInfo = TableDataInfo.build(result);
+                tableDataInfo = TableDataInfo.build(result);
                 tableDataInfo.setTotal(productIds.size());
                 tableDataInfo.setTotal(productIds.size());
-                return tableDataInfo;
             }
             }
-            
+
             List<ProductBaseVo> result = productEsMapper.selectList(esQueryWrapper);
             List<ProductBaseVo> result = productEsMapper.selectList(esQueryWrapper);
-            TableDataInfo<ProductBaseVo> tableDataInfo = TableDataInfo.build(result);
+            tableDataInfo = TableDataInfo.build(result);
             tableDataInfo.setTotal(productIds.size());
             tableDataInfo.setTotal(productIds.size());
-            return tableDataInfo;
-            
+
         } catch (Exception e) {
         } catch (Exception e) {
             log.error("ES查询协议产品失败,降级到数据库查询: {}", e.getMessage(), e);
             log.error("ES查询协议产品失败,降级到数据库查询: {}", e.getMessage(), e);
             QueryWrapper<ProductBase> lqw = Wrappers.query();
             QueryWrapper<ProductBase> lqw = Wrappers.query();
@@ -113,10 +112,13 @@ public class ProtocolProductsServiceImpl  extends ServiceImpl<ProtocolProductsMa
             lqw.eq(ObjectUtil.isNotEmpty(bo.getProductStatus()),"b.product_status", bo.getProductStatus());
             lqw.eq(ObjectUtil.isNotEmpty(bo.getProductStatus()),"b.product_status", bo.getProductStatus());
             lqw.orderByAsc("b.id");
             lqw.orderByAsc("b.id");
             List<ProductBaseVo> result = productBaseMapper.selectAllList(lqw);
             List<ProductBaseVo> result = productBaseMapper.selectAllList(lqw);
-            TableDataInfo<ProductBaseVo> tableDataInfo = TableDataInfo.build(result);
+            tableDataInfo = TableDataInfo.build(result);
             tableDataInfo.setTotal(productIds.size());
             tableDataInfo.setTotal(productIds.size());
-            return tableDataInfo;
         }
         }
+        tableDataInfo.getRows().forEach(item -> {
+            item.setAgreementPrice(protocolProducts.stream().filter(o -> o.getProductId().equals(item.getId())).findFirst().get().getAgreementPrice());
+        });
+        return tableDataInfo;
     }
     }
 
 
     /**
     /**

+ 4 - 0
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/service/impl/ServiceCaseServiceImpl.java

@@ -1,6 +1,7 @@
 package org.dromara.product.service.impl;
 package org.dromara.product.service.impl;
 
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 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;
@@ -80,6 +81,9 @@ public class ServiceCaseServiceImpl extends ServiceImpl<ServiceCaseMapper, Servi
     private LambdaQueryWrapper<ServiceCase> buildQueryWrapper(ServiceCaseBo bo) {
     private LambdaQueryWrapper<ServiceCase> buildQueryWrapper(ServiceCaseBo bo) {
         LambdaQueryWrapper<ServiceCase> lqw = Wrappers.lambdaQuery();
         LambdaQueryWrapper<ServiceCase> lqw = Wrappers.lambdaQuery();
         lqw.orderByDesc(ServiceCase::getId);
         lqw.orderByDesc(ServiceCase::getId);
+        if(ObjectUtil.isNotEmpty(bo.getIds())){
+            lqw.in(ServiceCase::getId, bo.getIds().split( ","));
+        }
         lqw.like(StringUtils.isNotBlank(bo.getServiceCaseNo()), ServiceCase::getServiceCaseNo, bo.getServiceCaseNo());
         lqw.like(StringUtils.isNotBlank(bo.getServiceCaseNo()), ServiceCase::getServiceCaseNo, bo.getServiceCaseNo());
         lqw.like(StringUtils.isNotBlank(bo.getCaseTitle()), ServiceCase::getCaseTitle, bo.getCaseTitle());
         lqw.like(StringUtils.isNotBlank(bo.getCaseTitle()), ServiceCase::getCaseTitle, bo.getCaseTitle());
         lqw.eq(StringUtils.isNotBlank(bo.getClientIndustry()), ServiceCase::getClientIndustry, bo.getClientIndustry());
         lqw.eq(StringUtils.isNotBlank(bo.getClientIndustry()), ServiceCase::getClientIndustry, bo.getClientIndustry());

+ 18 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/pc/DiySystemController.java

@@ -0,0 +1,18 @@
+package org.dromara.system.controller.pc;
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * diy系统运营相关接口
+ * @author
+ * @date 2026/3/9 上午11:05
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/diySystem")
+public class DiySystemController {
+}

+ 5 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysAnnouncementBo.java

@@ -27,6 +27,11 @@ public class SysAnnouncementBo extends BaseEntity {
      */
      */
     private Long id;
     private Long id;
 
 
+    /**
+    * ids
+    * */
+    private String ids;
+
     /**
     /**
      * 公告编号
      * 公告编号
      */
      */

+ 5 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysAnnouncementServiceImpl.java

@@ -1,5 +1,6 @@
 package org.dromara.system.service.impl;
 package org.dromara.system.service.impl;
 
 
+import cn.hutool.core.util.ObjectUtil;
 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;
@@ -74,7 +75,11 @@ public class SysAnnouncementServiceImpl  extends ServiceImpl<SysAnnouncementMapp
     private LambdaQueryWrapper<SysAnnouncement> buildQueryWrapper(SysAnnouncementBo bo) {
     private LambdaQueryWrapper<SysAnnouncement> buildQueryWrapper(SysAnnouncementBo bo) {
         Map<String, Object> params = bo.getParams();
         Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<SysAnnouncement> lqw = Wrappers.lambdaQuery();
         LambdaQueryWrapper<SysAnnouncement> lqw = Wrappers.lambdaQuery();
+        if(ObjectUtil.isNotEmpty(bo.getIds())){
+            lqw.in(SysAnnouncement::getId, bo.getIds().split( ","));
+        }
         lqw.orderByAsc(SysAnnouncement::getId);
         lqw.orderByAsc(SysAnnouncement::getId);
+
         lqw.eq(StringUtils.isNotBlank(bo.getAnnouncementNo()), SysAnnouncement::getAnnouncementNo, bo.getAnnouncementNo());
         lqw.eq(StringUtils.isNotBlank(bo.getAnnouncementNo()), SysAnnouncement::getAnnouncementNo, bo.getAnnouncementNo());
         lqw.eq(StringUtils.isNotBlank(bo.getAnnouncementTitle()), SysAnnouncement::getAnnouncementTitle, bo.getAnnouncementTitle());
         lqw.eq(StringUtils.isNotBlank(bo.getAnnouncementTitle()), SysAnnouncement::getAnnouncementTitle, bo.getAnnouncementTitle());
         lqw.eq(StringUtils.isNotBlank(bo.getAnnouncementContent()), SysAnnouncement::getAnnouncementContent, bo.getAnnouncementContent());
         lqw.eq(StringUtils.isNotBlank(bo.getAnnouncementContent()), SysAnnouncement::getAnnouncementContent, bo.getAnnouncementContent());