fubojin 1 mesiac pred
rodič
commit
9d7123fefc
44 zmenil súbory, kde vykonal 1188 pridanie a 531 odobranie
  1. 24 0
      pom.xml
  2. 81 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/FrontCategory.java
  3. 19 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/Product.java
  4. 9 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/ShopDetail.java
  5. 70 0
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/ShopProd.java
  6. 12 2
      yami-shop-bean/src/main/java/com/yami/shop/bean/model/Sku.java
  7. 17 0
      yami-shop-platform/pom.xml
  8. 0 1
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/CategoryController.java
  9. 44 0
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ShopProdController.java
  10. 6 19
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/FrontCategoryController.java
  11. 2 28
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/GoodsController.java
  12. 44 19
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/HBOrderController.java
  13. 0 77
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/ProductCategoryController.java
  14. 12 14
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/StoreManagementController.java
  15. 40 0
      yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/TransportController.java
  16. 1 0
      yami-shop-security/yami-shop-security-platform/src/main/java/com/yami/shop/security/platform/config/ResourceServerConfiguration.java
  17. 22 0
      yami-shop-service/src/main/java/com/yami/shop/dao/FrontCategoryMapper.java
  18. 9 0
      yami-shop-service/src/main/java/com/yami/shop/dao/ProductMapper.java
  19. 14 0
      yami-shop-service/src/main/java/com/yami/shop/dao/ShopDetailMapper.java
  20. 23 0
      yami-shop-service/src/main/java/com/yami/shop/dao/ShopProdMapper.java
  21. 12 3
      yami-shop-service/src/main/java/com/yami/shop/dao/SkuMapper.java
  22. 22 0
      yami-shop-service/src/main/java/com/yami/shop/service/ShopProdService.java
  23. 0 5
      yami-shop-service/src/main/java/com/yami/shop/service/hb/IFrontCategoryService.java
  24. 0 5
      yami-shop-service/src/main/java/com/yami/shop/service/hb/IGoodsService.java
  25. 17 0
      yami-shop-service/src/main/java/com/yami/shop/service/hb/IOrderService.java
  26. 0 34
      yami-shop-service/src/main/java/com/yami/shop/service/hb/IProductCategoryService.java
  27. 0 13
      yami-shop-service/src/main/java/com/yami/shop/service/hb/IStoreManagementService.java
  28. 24 0
      yami-shop-service/src/main/java/com/yami/shop/service/hb/ITransportService.java
  29. 50 20
      yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/FrontCategoryService.java
  30. 279 152
      yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/HBGoodsService.java
  31. 110 0
      yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/HBOrderService.java
  32. 0 76
      yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/ProductCategoryService.java
  33. 38 10
      yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/StoreManagementService.java
  34. 59 0
      yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/TransportService.java
  35. 21 0
      yami-shop-service/src/main/java/com/yami/shop/service/impl/ShopProdServiceImpl.java
  36. 7 0
      yami-shop-service/src/main/resources/mapper/ProductMapper.xml
  37. 20 1
      yami-shop-service/src/main/resources/mapper/ShopDetailMapper.xml
  38. 23 0
      yami-shop-service/src/main/resources/mapper/ShopProdMapper.xml
  39. 4 1
      yami-shop-service/src/main/resources/mapper/SkuMapper.xml
  40. 18 17
      yami-shop-sys/src/main/java/com/yami/shop/sys/controller/SysMenuController.java
  41. 13 12
      yami-shop-sys/src/main/java/com/yami/shop/sys/controller/SysRoleController.java
  42. 20 20
      yami-shop-sys/src/main/java/com/yami/shop/sys/controller/SysUserController.java
  43. 1 1
      yami-shop-sys/src/main/java/com/yami/shop/sys/model/SysMenu.java
  44. 1 1
      yami-shop-sys/src/main/resources/mapper/SysMenuMapper.xml

+ 24 - 0
pom.xml

@@ -155,10 +155,34 @@
                 <artifactId>poi</artifactId>
                 <version>${poi.version}</version>
             </dependency>
+
+            <!-- 排除 Tomcat 改用 Undertow -->
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-starter-web</artifactId>
+                <version>${spring-boot.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+                <exclusions>
+                    <exclusion>
+                        <groupId>org.springframework.boot</groupId>
+                        <artifactId>spring-boot-starter-tomcat</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-starter-undertow</artifactId>
+                <version>${spring-boot.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 
     <dependencies>
+
+
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>

+ 81 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/FrontCategory.java

@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.bean.model;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+@Data
+@TableName("tz_front_category")
+@Accessors(chain = true)
+public class FrontCategory implements Serializable {
+
+    /**
+     * 类目ID
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 父类目ID
+     */
+    private Long pid;
+
+    /**
+     * 编码
+     */
+    private String code;
+
+    /**
+     * 分类名称
+     */
+    private String name;
+
+    /**
+     * 父级分类编码
+     */
+    private String parentCode;
+
+    /**
+     * 父级分类名称
+     */
+    private String parentName;
+
+    /**
+     * 序号
+     */
+    private Integer num;
+
+    /**
+     * 是否删除(0 正常 1 已被删除)
+     */
+    private Integer isDelete;
+
+    /**
+     * 类目等级
+     */
+    private Integer level;
+
+    /**
+     * 操作人
+     */
+    private String operateUser;
+
+    /**
+     * 是否叶子(1-是,2-不是)
+     */
+    private Integer isLeaves;
+
+}

+ 19 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/Product.java

@@ -36,6 +36,11 @@ public class Product implements Serializable {
     @TableId
     private Long prodId;
 
+    /**
+     * 商品编码(海博)
+     */
+    private Long hbSpuId;
+
     /**
      * 店铺id
      */
@@ -46,6 +51,11 @@ public class Product implements Serializable {
      */
     private Long categoryId;
 
+    /**
+     * 在海博平台中的前台分类id
+     */
+    private Long hbFrontCategoryId;
+
     /**
      * 在店铺当中的分类id
      */
@@ -92,11 +102,20 @@ public class Product implements Serializable {
      * 默认是1,表示正常状态, -1表示删除, 0下架
      */
     private Integer status;
+    private Integer isDelete;
+    /**
+     * 海博商品类型(1-普通商品,2-多规格商品)
+     */
+    private Integer hbStatus;
 
     /**
      * 品牌Id
      */
     private Long brandId;
+    /**
+     * 品牌名称
+     */
+    private String brandName;
 
     /**
      * 已经销售数量

+ 9 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/ShopDetail.java

@@ -34,6 +34,15 @@ public class ShopDetail implements Serializable {
      */
     private String shopName;
 
+    /**
+     * ERP门店编码
+     */
+    private String outStationNo;
+    /**
+     * 海博门店编码
+     */
+    private String hbStationId;
+
     /**
      * 店长用户id
      */

+ 70 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/ShopProd.java

@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.bean.model;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("tz_shop_prod")
+@Accessors(chain = true)
+public class ShopProd implements Serializable {
+    private static final long serialVersionUID = 3300529542917772262L;
+    /**
+     * 门店商品表ID
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 门店ID
+     */
+    private Long shopId;
+
+    /**
+     * 单品ID
+     */
+    private Long skuId;
+
+    /**
+     * 商品对应门店价格
+     */
+    private Double shopProdPrice;
+
+    /**
+     * 商品对应门店库存
+     */
+    private Integer shopProdStocks;
+
+    /**
+     * 0 正常 1 已被删除
+     */
+    private Integer isDelete;
+
+    /**
+     * 修改时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 记录时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date recTime;
+
+}

+ 12 - 2
yami-shop-bean/src/main/java/com/yami/shop/bean/model/Sku.java

@@ -10,6 +10,7 @@
 
 package com.yami.shop.bean.model;
 
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -22,17 +23,26 @@ import java.util.Date;
 @Data
 @TableName("tz_sku")
 public class Sku implements Serializable {
+
     /**
      * 单品ID
      */
-    @TableId
+    @TableId(type = IdType.INPUT)
     private Long skuId;
-
     /**
      * 商品ID
      */
     private Long prodId;
 
+    /**
+     * 商品编码(海博)
+     */
+    private Long hbSpuId;
+    /**
+     * 单品编码(海博)
+     */
+    private Long hbSkuId;
+
     /**
      * 销售属性组合字符串,格式是p1:v1;p2:v2
      */

+ 17 - 0
yami-shop-platform/pom.xml

@@ -76,6 +76,23 @@
             <artifactId>yami-shop-delivery-platform</artifactId>
             <version>${yami.shop.version}</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-tomcat</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <!--    轻量级容器    -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-undertow</artifactId>
+        </dependency>
     </dependencies>
 
 

+ 0 - 1
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/CategoryController.java

@@ -82,7 +82,6 @@ public class CategoryController {
 		return R.SUCCESS();
 	}
 
-
 	/**
 	 * 更新分类
 	 */

+ 44 - 0
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/ShopProdController.java

@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ */
+
+package com.yami.shop.platform.controller;
+
+import com.yami.shop.bean.model.ShopProd;
+import com.yami.shop.common.util.R;
+import com.yami.shop.service.ShopProdService;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 门店对应商品价格和库存管理
+ *
+ * @author fbj
+ * @version 1.0.0
+ * @since 2025-09-19
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/shop/shopProd")
+public class ShopProdController {
+
+    private final ShopProdService shopProdService;
+
+
+    /**
+     * 新建店铺
+     */
+    @PostMapping
+    public R<ShopProd> ShopProd(@RequestBody ShopProd shopProd) {
+        shopProdService.insertProd(shopProd);
+        return R.SUCCESS(shopProd);
+    }
+
+
+}

+ 6 - 19
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/FrontCategoryController.java

@@ -9,7 +9,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
 /**
- * 海博前台类目管理实现
+ * 海博-前台类目管理
  *
  * @author fubojin
  * @version 1.0.0
@@ -17,13 +17,12 @@ import org.springframework.web.bind.annotation.*;
  */
 @Slf4j
 @RestController
-@RequestMapping("/api/front")
+@RequestMapping("/hb/front")
 @AllArgsConstructor
 @CrossOrigin
-@Api(tags = "前台类目管理", description = "前台类目管理相关接口")
 public class FrontCategoryController {
 
-    private final IFrontCategoryService FrontCategoryService;
+    private final IFrontCategoryService frontCategoryService;
 
     /**
      * 海博新增前台类目信息-回调
@@ -34,7 +33,7 @@ public class FrontCategoryController {
     @PostMapping("/add")
     public HBR addCategory(@RequestBody JSONObject HBRequest) {
         log.info("海博新增前台类目{}",HBRequest);
-        return FrontCategoryService.addHBFrontCategory(HBRequest);
+        return frontCategoryService.addHBFrontCategory(HBRequest);
     }
     /**
      * 海博修改前台类目信息-回调
@@ -45,19 +44,7 @@ public class FrontCategoryController {
     @PostMapping("/update")
     public HBR updateCategory(@RequestBody JSONObject HBRequest) {
         log.info("海博变更前台类目{}",HBRequest);
-        return FrontCategoryService.addHBFrontCategory(HBRequest);
-    }
-
-    /**
-     * 海博查询前台类目信息
-     *
-     * @return 海博前台类目查询响应
-     */
-    @GetMapping("/selectFrontCategory")
-    public HBR selectFrontCategory() {
-        log.info("海博查询前台类目");
-        FrontCategoryService.selectHBFrontCategory();
-        return HBR.success();
+        return frontCategoryService.addHBFrontCategory(HBRequest);
     }
 
     /**
@@ -69,7 +56,7 @@ public class FrontCategoryController {
     @PostMapping("/delete")
     public HBR deleteFrontCategory(@RequestBody JSONObject HBRequest) {
         log.info("海博删除前台类目{}",HBRequest);
-        FrontCategoryService.deleteFrontCategory(HBRequest);
+        frontCategoryService.deleteFrontCategory(HBRequest);
         return HBR.success();
     }
 

+ 2 - 28
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/GoodsController.java

@@ -15,7 +15,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 /**
- * 海博商品信息管理实现
+ * 海博-商品信息管理实现
  *
  * @author fubojin
  * @version 1.0.0
@@ -23,10 +23,9 @@ import org.springframework.web.bind.annotation.*;
  */
 @Slf4j
 @RestController
-@RequestMapping("/api/goods")
+@RequestMapping("/hb/goods")
 @AllArgsConstructor
 @CrossOrigin
-@Api(tags = "商品管理", description = "商品管理相关接口")
 public class GoodsController {
 
     private final IGoodsService goodsService;
@@ -124,31 +123,6 @@ public class GoodsController {
     }
 
 
-/**
- * 商品分页查询接口
- * @param pageNum 当前页码,默认为1
- * @param pageSize 每页数量,默认为10
- * @param product 商品查询条件对象(非必须)
- * @return 分页数据
- */
-@GetMapping("/selectPage")
-public R<IPage<Product>> selectGoodsPage(
-        @RequestParam(defaultValue = "1") Integer pageNum,
-        @RequestParam(defaultValue = "10") Integer pageSize,
-        @RequestBody(required = false) Product product) {
-
-    // 参数校验
-    if (pageNum < 1) {
-        pageNum = 1;
-    }
-    if (pageSize < 1 || pageSize > 100) {
-        pageSize = 10;
-    }
-    // 调用Service层获取分页数据
-    IPage<Product> page = goodsService.selectGoodsPage(pageNum, pageSize, product);
-    // 返回统一格式的响应
-    return R.SUCCESS(page);
-}
 
 
 }

+ 44 - 19
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/HBOrderController.java

@@ -8,7 +8,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
 /**
- * 海博订单信息管理实现
+ * 海博-订单信息管理
  *
  * @author fubojin
  * @version 1.0.0
@@ -16,10 +16,9 @@ import org.springframework.web.bind.annotation.*;
  */
 @Slf4j
 @RestController
-@RequestMapping("/api/order")
+@RequestMapping("/hb/order")
 @AllArgsConstructor
 @CrossOrigin
-@Api(tags = "订单管理", description = "订单管理相关接口")
 public class HBOrderController {
 
 
@@ -34,28 +33,29 @@ public class HBOrderController {
         log.info("海博新增订单{}",HBRequest);
         return null;
     }
+
+
+
     /**
-     * 海博修改商品信息-回调
+     * 订单配送-回调
      *
-     * @param HBRequest 修改海博商品请求参数
-     * @return 商品响应
+     * @param HBRequest 修改订单配送请求参数
+     * @return 订单响应
      */
-    @PostMapping("/update")
-    public HBR updateGoods(@RequestBody JSONObject HBRequest) {
-        log.info("海博变更商品{}",HBRequest);
+    @PostMapping("/delivery")
+    public HBR delivery(@RequestBody JSONObject HBRequest) {
+        log.info("海博订单配送{}",HBRequest);
         return null;
     }
 
 
     /**
-     * 海博订单商品信息-回调
-     *
-     * @param HBRequest 海博修改订单请求参数
-     * @return 商品响应
+     * 海博订单完成-回调
+     * @param HBRequest 海博订单完成请求参数
      */
-    @PostMapping("/delete")
-    public HBR deleteGoods(@RequestBody JSONObject HBRequest) {
-        log.info("海博变更订单{}",HBRequest);
+    @PostMapping("/completed")
+    public HBR completed(@RequestBody JSONObject HBRequest) {
+        log.info("海博订单完成{}",HBRequest);
         return null;
     }
 
@@ -63,11 +63,36 @@ public class HBOrderController {
      * 海博订单-查询订单详情-回调
      *
      * @param HBRequest 海博修改订单请求参数
-     * @return 商品响应
+     * @return 订单响应
      */
     @PostMapping("/info")
-    public HBR deleteGoodsInfo(@RequestBody JSONObject HBRequest) {
-        log.info("海博变更订单{}",HBRequest);
+    public HBR goodsInfo(@RequestBody JSONObject HBRequest) {
+        log.info("海博修改订单请求参数{}",HBRequest);
+        return null;
+    }
+
+
+    /**
+     * 海博修改订单状态-回调
+     *
+     * @param HBRequest 海博修改订单状态请求参数
+     * @return 订单响应
+     */
+    @PostMapping("/updateStatus")
+    public HBR updateStatus(@RequestBody JSONObject HBRequest) {
+        log.info("海博修改订单状态{}",HBRequest);
+        return null;
+    }
+
+    /**
+     * 海博订单物流状态-回调
+     *
+     * @param HBRequest 海博订单物流状态请求参数
+     * @return 订单响应
+     */
+    @PostMapping("/logisticsStatus")
+    public HBR logisticsStatus(@RequestBody JSONObject HBRequest) {
+        log.info("海博订单物流状态请求参数{}",HBRequest);
         return null;
     }
 

+ 0 - 77
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/ProductCategoryController.java

@@ -1,77 +0,0 @@
-package com.yami.shop.platform.controller.hb;
-
-import com.alibaba.fastjson.JSONObject;
-import com.yami.shop.common.util.hb.HBR;
-import com.yami.shop.service.hb.IProductCategoryService;
-import io.swagger.annotations.Api;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * 海博后台类目管理实现
- *
- * @author fubojin
- * @version 1.0.0
- * @since 2025-09-05
- */
-@Slf4j
-@RestController
-@RequestMapping("/api/productCategory")
-@AllArgsConstructor
-@CrossOrigin
-@Api(tags = "后台类目管理", description = "后台类目管理相关接口")
-public class ProductCategoryController {
-
-    private final IProductCategoryService categoryService;
-
-    /**
-     * 海博新增后台类目信息-回调
-     *
-     * @param HBRequest 海博后台类目请求参数
-     * @return 后台类目响应
-     */
-    @PostMapping("/add")
-    public HBR addCategory(@RequestBody JSONObject HBRequest) {
-        log.info("海博新增后台类目{}",HBRequest);
-        return categoryService.addHBCategory(HBRequest);
-    }
-    /**
-     * 海博修改后台类目信息-回调
-     *
-     * @param HBRequest 修改海博后台类目请求参数
-     * @return 海博后台类目变更响应
-     */
-    @PostMapping("/update")
-    public HBR updateCategory(@RequestBody JSONObject HBRequest) {
-        log.info("海博变更后台类目{}",HBRequest);
-        return categoryService.addHBCategory(HBRequest);
-    }
-
-    /**
-     * 海博查询后台类目信息
-     *
-     * @return 海博后台类目查询响应
-     */
-    @GetMapping("/selectFrontCategory")
-    public HBR selectFrontCategory() {
-        log.info("海博查询后台类目");
-        categoryService.selectHBCategory();
-        return HBR.success();
-    }
-
-    /**
-     * 海博删除后台类目信息-回调
-     *
-     * @param HBRequest 删除海博后台类目请求参数
-     * @return 海博后台类目删除响应
-     */
-    @PostMapping("/delete")
-    public HBR deleteFrontCategory(@RequestBody JSONObject HBRequest) {
-        log.info("海博删除后台类目{}",HBRequest);
-        categoryService.deleteCategory(HBRequest);
-        return HBR.success();
-    }
-
-
-}

+ 12 - 14
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/StoreManagementController.java

@@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.*;
 import java.util.List;
 
 /**
- * 海博门店管理实现
+ * 海博-门店管理
  *
  * @author fubojin
  * @version 1.0.0
@@ -18,37 +18,35 @@ import java.util.List;
  */
 @Slf4j
 @RestController
-@RequestMapping("/api/store")
+@RequestMapping("/hb/store")
 @AllArgsConstructor
 @CrossOrigin
 public class StoreManagementController {
 
     private final IStoreManagementService storeManagementService;
 
-
     /**
      * 海博修改门店信息-回调
      *
      * @param HBRequest 门店变更请求参数
      * @return 门店变更响应
      */
-    @PostMapping("/update")
-    public HBR updateRegisterStore(@RequestBody JSONObject HBRequest) {
-        log.info("海博变更门店{}",HBRequest);
+    @PostMapping("/add")
+    public HBR addRegisterStore(@RequestBody JSONObject HBRequest) {
+        log.info("海博添加门店{}",HBRequest);
         return HBR.success(storeManagementService.updateRegisterStore(HBRequest));
     }
 
-
     /**
-     * 门店配送费模板变更通知
+     * 海博修改门店信息-回调
      *
-     * @param HBRequest 门店配送费模板变更通知内容
-     * @return 模板变更通知响应
+     * @param HBRequest 门店变更请求参数
+     * @return 门店变更响应
      */
-    @PostMapping("/feeTemplate")
-    public HBR updateStoreDeliveryFeeTemplate(@RequestBody JSONObject HBRequest) {
-        log.info("海博门店配送费模板变更通知{}",HBRequest);
-        return HBR.success(storeManagementService.updateStoreDeliveryFeeTemplate(HBRequest));
+    @PostMapping("/update")
+    public HBR updateRegisterStore(@RequestBody JSONObject HBRequest) {
+        log.info("海博变更门店{}",HBRequest);
+        return HBR.success(storeManagementService.updateRegisterStore(HBRequest));
     }
 
 

+ 40 - 0
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/hb/TransportController.java

@@ -0,0 +1,40 @@
+package com.yami.shop.platform.controller.hb;
+
+import com.alibaba.fastjson.JSONObject;
+import com.yami.shop.common.util.hb.HBR;
+import com.yami.shop.service.hb.IStoreManagementService;
+import com.yami.shop.service.hb.ITransportService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 海博-运费模板管理
+ *
+ * @author fubojin
+ * @version 1.0.0
+ * @since 2025-09-01
+ */
+@Slf4j
+@RestController
+@RequestMapping("/hb/transport")
+@AllArgsConstructor
+@CrossOrigin
+public class TransportController {
+
+    private final ITransportService transportService;
+
+    /**
+     * 海博运费模板信息-回调
+     *
+     * @param HBRequest 运费模板请求参数
+     * @return 运费模板响应
+     */
+    @PostMapping("/update")
+    public HBR addRegisterStore(@RequestBody JSONObject HBRequest) {
+        log.info("海博添加运费模板{}",HBRequest);
+        return transportService.addTransport(HBRequest);
+    }
+
+
+}

+ 1 - 0
yami-shop-security/yami-shop-security-platform/src/main/java/com/yami/shop/security/platform/config/ResourceServerConfiguration.java

@@ -50,6 +50,7 @@ public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter
             .antMatchers(
                     "/webjars/**",
                     "/swagger/**",
+                    "/hb/**",
                     "/v2/api-docs",
                     "/doc.html",
                     "/swagger-ui.html",

+ 22 - 0
yami-shop-service/src/main/java/com/yami/shop/dao/FrontCategoryMapper.java

@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ */
+
+package com.yami.shop.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yami.shop.bean.model.FrontCategory;
+import com.yami.shop.bean.model.ShopWalletLog;
+
+/**
+ * 海博前台类目
+ *
+ * @author Dwl
+ * @date 2019-09-19 14:02:57
+ */
+public interface FrontCategoryMapper extends BaseMapper<FrontCategory> {
+
+}

+ 9 - 0
yami-shop-service/src/main/java/com/yami/shop/dao/ProductMapper.java

@@ -39,6 +39,7 @@ public interface ProductMapper extends BaseMapper<Product> {
 
     Product getProductByProdNameAndShopId(@Param("prodName") String prodName, @Param("shopId") Long shopId);
 
+
     void returnStock(@Param("prodCollect") Map<Long, Integer> prodCollect);
 
     IPage<ProductDto> pageByPutawayTime(IPage<ProductDto> page);
@@ -162,4 +163,12 @@ public interface ProductMapper extends BaseMapper<Product> {
      * 根据分类ID、商户ID查询归属的所有商品
      * */
     IPage<Product> listProdByCategoryIdAndShopId2(@Param("page") Page page, @Param("prodByCategoryIdAndShopIdDTO")ProdByCategoryIdAndShopIdDTO prodByCategoryIdAndShopIdDTO);
+
+
+    /**
+     * 通过海博编码获取商品信息
+     * @param hbSpuId 海博商品编码
+     * @return 商品信息
+     */
+    Product selectByHbSpuId(@Param("hbSpuId") Long hbSpuId);
 }

+ 14 - 0
yami-shop-service/src/main/java/com/yami/shop/dao/ShopDetailMapper.java

@@ -37,6 +37,18 @@ public interface ShopDetailMapper extends BaseMapper<ShopDetail> {
 
     ShopDetail getShopDetailByUserId(@Param("userId") String userId);
 
+    /**
+     * 根据
+     */
+    ShopDetail selectByOutStationNo(@Param("outStationNo") String outStationNo);
+
+    /**
+     * 根据海博编码查询门店信息
+     * @param hbStationId 海博门店编码
+     * @return
+     */
+    ShopDetail selectByHbStationId(@Param("hbStationId") String hbStationId);
+
     /**
      * 修改店铺状态
      */
@@ -50,4 +62,6 @@ public interface ShopDetailMapper extends BaseMapper<ShopDetail> {
 
     List<ShopDetail> neighborShop(@Param("lat") String lat,
                         @Param("lon") String lon);
+
+
 }

+ 23 - 0
yami-shop-service/src/main/java/com/yami/shop/dao/ShopProdMapper.java

@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yami.shop.bean.model.ShopProd;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @author LGH
+ */
+public interface ShopProdMapper extends BaseMapper<ShopProd> {
+
+    ShopProd selectByShopAndProd(@Param("skuId") Long skuId, @Param("shopId") Long shopId);
+}

+ 12 - 3
yami-shop-service/src/main/java/com/yami/shop/dao/SkuMapper.java

@@ -13,6 +13,7 @@ package com.yami.shop.dao;
 import java.util.List;
 import java.util.Map;
 
+import com.yami.shop.bean.model.Product;
 import org.apache.ibatis.annotations.Param;
 
 import com.yami.shop.bean.model.Sku;
@@ -24,16 +25,24 @@ public interface SkuMapper extends BaseMapper<Sku> {
 	/**
 	 * 批量插入sku
 	 * @param prodId 商品id
-	 * @param skus sku列表
+	 * @param skuList sku列表
 	 */
 	void insertBatch(@Param("prodId") Long prodId, @Param("skuList") List<Sku> skuList);
 
 	List<Sku> listByProdId(Long prodId);
 
 	int updateStocks(@Param("sku") Sku sku);
-	
+
 	void deleteByProdId(@Param("prodId") Long prodId);
 
 	void returnStock(@Param("skuCollect") Map<Long, Integer> skuCollect);
 
-}
+	/**
+	 * 通过海博单品编码查询商品
+	 * @param hbSkuId 单品编码
+	 * @return 单品信息
+	 */
+    Sku selectByHbSkuId(@Param("hbSkuId") Long hbSkuId);
+
+
+}

+ 22 - 0
yami-shop-service/src/main/java/com/yami/shop/service/ShopProdService.java

@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yami.shop.bean.model.ShopProd;
+
+/**
+ * 门店对应商品价格和库存管理
+ */
+public interface ShopProdService extends IService<ShopProd> {
+
+    void insertProd(ShopProd shopProd);
+}

+ 0 - 5
yami-shop-service/src/main/java/com/yami/shop/service/hb/IFrontCategoryService.java

@@ -21,11 +21,6 @@ public interface IFrontCategoryService {
      */
     HBR addHBFrontCategory(JSONObject hbRequest);
 
-    /**
-     * 获取海博前台分类基础信息
-     */
-    void selectHBFrontCategory();
-
     /**
      * 删除海博前台分类
      * @param hbRequest

+ 0 - 5
yami-shop-service/src/main/java/com/yami/shop/service/hb/IGoodsService.java

@@ -64,9 +64,4 @@ public interface IGoodsService {
     String getSelfSkuStatus();
 
 
-    /**
-     * 分页获取商品信息
-     * @return 商品信息
-     */
-    IPage<Product> selectGoodsPage(Integer pageNum, Integer pageSize, Product product);
 }

+ 17 - 0
yami-shop-service/src/main/java/com/yami/shop/service/hb/IOrderService.java

@@ -0,0 +1,17 @@
+package com.yami.shop.service.hb;
+
+import com.alibaba.fastjson.JSONObject;
+import com.yami.shop.common.util.hb.HBR;
+
+/**
+ * 商品信息接口
+ *
+ * @author fubojin
+ * @version 1.0.0
+ * @since 2025-09-5
+ */
+public interface IOrderService {
+
+
+
+}

+ 0 - 34
yami-shop-service/src/main/java/com/yami/shop/service/hb/IProductCategoryService.java

@@ -1,34 +0,0 @@
-package com.yami.shop.service.hb;
-
-import com.alibaba.fastjson.JSONObject;
-import com.yami.shop.common.util.hb.HBR;
-
-/**
- * 后台类目管理服务接口
- *
- * @author fubojin
- * @version 1.0.0
- * @since 2025-09-5
- */
-public interface IProductCategoryService {
-
-
-    /**
-     * 后台分类新增或者修改
-     *
-     * @param hbRequest 后台分类请求
-     * @return 后台分类响应
-     */
-    HBR addHBCategory(JSONObject hbRequest);
-
-    /**
-     * 获取海博后台分类基础信息
-     */
-    void selectHBCategory();
-
-    /**
-     * 删除海博后台分类
-     * @param hbRequest
-     */
-    void deleteCategory(JSONObject hbRequest);
-}

+ 0 - 13
yami-shop-service/src/main/java/com/yami/shop/service/hb/IStoreManagementService.java

@@ -15,10 +15,6 @@ import java.util.List;
  */
 public interface IStoreManagementService {
 
-    /**
-     * 获取海博门店基础信息
-     */
-    void doGetStation();
 
     /**
      * 查询配送费模板查询接口
@@ -41,13 +37,4 @@ public interface IStoreManagementService {
      */
     HBR updateRegisterStore(JSONObject registerRequest);
 
-
-    /**
-     * 门店配送费模板变更通知
-     *
-     * @param registerRequest 门店配送费模板变更通知内容
-     * @return 模板变更通知响应
-     */
-    StoreRegister updateStoreDeliveryFeeTemplate(JSONObject registerRequest);
-
 }

+ 24 - 0
yami-shop-service/src/main/java/com/yami/shop/service/hb/ITransportService.java

@@ -0,0 +1,24 @@
+package com.yami.shop.service.hb;
+
+import com.alibaba.fastjson.JSONObject;
+import com.yami.shop.bean.dto.hb.StoreRegister;
+import com.yami.shop.common.util.hb.HBR;
+
+/**
+ * 运费模板接口
+ *
+ * @author fubojin
+ * @version 1.0.0
+ * @since 2025-09-1
+ */
+public interface ITransportService {
+
+    /**
+     * 门店配送费模板变更通知
+     *
+     * @param registerRequest 门店配送费模板变更通知内容
+     * @return 模板变更通知响应
+     */
+    HBR addTransport(JSONObject registerRequest);
+
+}

+ 50 - 20
yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/FrontCategoryService.java

@@ -1,9 +1,13 @@
 package com.yami.shop.service.hb.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.yami.shop.bean.dto.hb.HBBaseReq;
+import com.yami.shop.bean.model.FrontCategory;
 import com.yami.shop.common.util.hb.HBR;
+import com.yami.shop.dao.FrontCategoryMapper;
 import com.yami.shop.service.hb.IFrontCategoryService;
 import com.yami.shop.utils.HBSignUtil;
 import lombok.AllArgsConstructor;
@@ -11,11 +15,16 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
 import static com.yami.shop.common.util.HttpUtil.post;
 
 
 /**
- * 门店管理服务实现
+ * 前台类目管理服务实现
  *
  * @author fubojin
  * @version 1.0.0
@@ -26,6 +35,7 @@ import static com.yami.shop.common.util.HttpUtil.post;
 @AllArgsConstructor
 @Transactional(readOnly = true)
 public class FrontCategoryService implements IFrontCategoryService {
+    private final FrontCategoryMapper frontCategoryMapper;
     private final HBSignUtil hbSignUtil;
 
 
@@ -36,44 +46,64 @@ public class FrontCategoryService implements IFrontCategoryService {
             String bodyStr = hbRequest.getString("body");
             log.info("开始前台分类,body:{}", bodyStr);
             JSONObject bodyJson = JSON.parseObject(bodyStr); // 使用Fastjson的解析方法
-            String outStationNo = bodyJson.getString("outStationNo");
-
-            // 2. 构建实体
-
-            // 3. 保存门店信息
-            log.info("前台分类信息");
-
-            log.info("前台分类成功,门店ID:");
-
+            JSONArray codeList = bodyJson.getJSONArray("codeList");
+            List<String> resultList = IntStream.range(0, codeList.size())
+                    .mapToObj(codeList::getString)
+                    .collect(Collectors.toList());
 
-            selectHBFrontCategory();
-
-            System.out.println("================");
+            String info = selectHBFrontCategory(resultList);
+            JSONObject jsonObject = JSON.parseObject(info);
+            JSONObject jsonObjectHB = jsonObject.getJSONObject("result");
+            JSONObject result = jsonObjectHB.getJSONObject("result");
+            JSONArray resultArray = result.getJSONArray("categoryInfos");
+            for (Object o : resultArray) {
+                JSONObject jsonObjectInfo = JSON.parseObject(o.toString());
+                // 2. 构建实体
+                FrontCategory frontCategory = new FrontCategory();
+                frontCategory.setCode(jsonObjectInfo.getString("code"));
+                frontCategory.setParentCode(jsonObjectInfo.getString("parentCode"));
+                frontCategory.setName(jsonObjectInfo.getString("name"));
+                frontCategory.setParentName(jsonObjectInfo.getString("parentName"));
+                frontCategory.setNum(jsonObjectInfo.getInteger("num"));
+                frontCategory.setLevel(jsonObjectInfo.getInteger("level"));
+                frontCategory.setOperateUser(jsonObjectInfo.getString("operateUser"));
+                frontCategory.setIsLeaves(jsonObjectInfo.getInteger("isLeaves"));
+                log.info("添加前台类目信息{}",frontCategory);
+                // 3. 保存门店信息
+                frontCategoryMapper.insert(frontCategory);
+            }
+            log.info("前台分类成功");
             // 4. 构建响应
             return HBR.success();
-
         } catch (Exception e) {
             log.error("前台分类失败:{}", e.getMessage(), e);
             return HBR.error("未知异常");
         }
     }
 
-    @Override
-    public void selectHBFrontCategory() {
+    public String selectHBFrontCategory(List<String> resultList) {
         HBBaseReq<Object> build = HBBaseReq.create();
         build.setAppId(hbSignUtil.getAppId());
         JSONObject jsonObject = new JSONObject();
-        jsonObject.put("flag", 0);
+        jsonObject.put("flag", 1);
+        jsonObject.put("codeList", resultList);
         build.setBody(JSON.toJSONString(jsonObject));
         build.setSign(hbSignUtil.signMd5(build));
-        String post = post(hbSignUtil.getHBHost()+"/api/product/frontCategory/getCategory", build);
+        String post = post(hbSignUtil.getHBHost() + "/api/product/frontCategory/getCategory", build);
         log.info("post 请求参数:{}", JSON.toJSONString(build));
-        log.info("post 结果:{}",  post);
+        log.info("post 结果:{}", post);
+        return post;
     }
 
     @Override
     public void deleteFrontCategory(JSONObject hbRequest) {
         String bodyStr = hbRequest.getString("body");
-        log.info("开始前台分类,body:{}", bodyStr);
+        JSONObject jsonObject = JSON.parseObject("bodyStr");
+        log.info("前台类目删除,body:{}", bodyStr);
+        List<FrontCategory> frontCategorys = frontCategoryMapper.selectList(new LambdaQueryWrapper<FrontCategory>().eq(FrontCategory::getCode,jsonObject.getLong("code")));
+        for (FrontCategory frontCategory : frontCategorys) {
+            frontCategory.setIsDelete(1);
+            frontCategoryMapper.updateById(frontCategory);
+        }
     }
 }

+ 279 - 152
yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/HBGoodsService.java

@@ -1,16 +1,19 @@
 package com.yami.shop.service.hb.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yami.shop.bean.dto.hb.HBBaseReq;
 import com.yami.shop.bean.model.Product;
+import com.yami.shop.bean.model.ShopDetail;
+import com.yami.shop.bean.model.ShopProd;
 import com.yami.shop.bean.model.Sku;
 import com.yami.shop.common.util.hb.HBR;
 import com.yami.shop.dao.ProductMapper;
+import com.yami.shop.dao.ShopDetailMapper;
+import com.yami.shop.dao.ShopProdMapper;
 import com.yami.shop.dao.SkuMapper;
 import com.yami.shop.service.hb.IGoodsService;
 import com.yami.shop.utils.HBSignUtil;
@@ -20,8 +23,8 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 import static com.yami.shop.common.util.HttpUtil.post;
@@ -37,27 +40,29 @@ import static com.yami.shop.common.util.HttpUtil.post;
 @Slf4j
 @Service
 @AllArgsConstructor
-@Transactional(readOnly = true)
 public class HBGoodsService implements IGoodsService {
     private final HBSignUtil hbSignUtil;
     private final ProductMapper productMapper;
     private final SkuMapper skuMapper;
+    private final ShopProdMapper shopProdMapper;
+    private final ShopDetailMapper shopDetailMapper;
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public HBR addHBGoods(JSONObject hbRequest) {
-        try {
-            String bodyStr = hbRequest.getString("body");
-            log.info("商品信息,body:{}", bodyStr);
-            JSONObject bodyJson = JSON.parseObject(bodyStr);
-            JSONArray productList = bodyJson.getJSONArray("productList");
-            List<Product> spuList = new ArrayList<>();
-            List<Sku> skuList = new ArrayList<>();
-
-            for (Object product : productList) {
-                JSONObject jsonObject = JSON.parseObject(product.toString());
-                String outSkuId = jsonObject.getString("outSkuId");
-                String goodsInfoStr = selectHBGoodsInfo(outSkuId);
+        String bodyStr = hbRequest.getString("body");
+        log.info("商品信息,body:{}", bodyStr);
+        JSONObject bodyJson = JSON.parseObject(bodyStr);
+        JSONArray productList = bodyJson.getJSONArray("productList");
+
+        for (Object product : productList) {
+            JSONObject jsonObject = JSON.parseObject(product.toString());
+            Long prodId;
+            //判断海博传过来的是单规格还是多规格
+            if (ObjectUtil.isEmpty(jsonObject.getString("multiSpec"))) {
+                log.info("===================进入普通商品操作===================");
+                String goodsInfoStr = selectHBGoodsInfo(jsonObject.getString("outSkuId"));
+
                 JSONObject goodsInfoJson = JSON.parseObject(goodsInfoStr);
 
                 // 2. 逐层解析获取productHostInfoDTOS数组
@@ -71,33 +76,76 @@ public class HBGoodsService implements IGoodsService {
                     JSONObject productInfo = productHostInfoDTOS.getJSONObject(i);
 
                     // 创建并填充Product对象
-                    Product Product = createProductFromProductInfo(productInfo);
-                    // 创建并填充Sku对象
-                    Sku Sku = createSkuFromProductInfo(productInfo);
-                    Sku.setProdId(Product.getProdId()); // 设置关联关系
-
+                    Product productInfoById = productMapper.selectByHbSpuId(productInfo.getLong("spuId"));
+                    if (ObjectUtil.isNotEmpty(productInfoById) && productInfoById.getIsDelete() == 0) {
+                        prodId = productInfoById.getProdId();
+                        log.info("商品spuID={},spuName={}已经存在无需添加", productInfo.getLong("spuId"), productInfo.getString("spuName"));
+
+                    } else {
+                        Product productAdd = createProductFromProductInfo(productInfo);
+                        setSpuMapper(productInfo, productAdd);
+                        //添加到数据库
+                        productMapper.insert(productAdd);
+                        prodId = productAdd.getProdId();
+                        log.info("SPU创建成功: prodId={}, hbSpuId={}, spuName={}", productAdd.getProdId(), productAdd.getProdId(), productAdd.getProdName());
+                    }
+
+                    Sku skuId = skuMapper.selectByHbSkuId(productInfo.getLong("skuId"));
+                    if (ObjectUtil.isNotEmpty(skuId) && skuId.getIsDelete() == 0) {
+                        log.info("商品skuId={},skuName={}已经存在无需添加", productInfo.getLong("skuId"), productInfo.getString("skuName"));
+                    } else {
+                        // 创建并填充Sku对象
+                        Sku sku = createSkuFromProductInfo(productInfo);
+                        sku.setProdId(prodId);
+                        skuMapper.insert(sku);
+                        log.info("SKU创建成功: skuId={}, skuName={}", sku.getSkuId(), sku.getSkuName());
+                    }
+                }
+            } else {
+                log.info("===================进入多规格商品操作===================");
+                String selectHBGoodsSpuInfo = selectHBGoodsSpuInfo(jsonObject.getString("spuId"));
+                JSONObject goodsInfoJson = JSON.parseObject(selectHBGoodsSpuInfo);
+                // 2. 逐层解析获取productHostInfoDTOS数组
+                JSONObject result = goodsInfoJson.getJSONObject("result");
+                JSONObject innerResult = result.getJSONObject("result");
+                JSONArray productHostInfoDTOS = innerResult.getJSONArray("productSpuHostInfoDTOList");
 
-                    //添加到数据库
-                    productMapper.insert(Product);
-                    skuMapper.insert(Sku);
+                for (Object productHostInfoDTO : productHostInfoDTOS) {
+                    JSONObject productInfo = JSON.parseObject(productHostInfoDTO.toString());
 
-                    spuList.add(Product);
-                    skuList.add(Sku);
 
-                    log.info("SPU创建成功: spuId={}, spuName={}", Product.getProdId(), Product.getProdName());
-                    log.info("SKU创建成功: skuId={}, skuName={}", Sku.getSkuId(), Sku.getSkuName());
+                    // 创建并填充Product对象
+                    Product productInfoById = productMapper.selectByHbSpuId(productInfo.getLong("spuId"));
+                    if (ObjectUtil.isNotEmpty(productInfoById) && productInfoById.getIsDelete() == 0) {
+                        log.info("商品spuID={},spuName={}已经存在无需添加", productInfo.getLong("spuId"), productInfo.getString("spuName"));
+                        prodId = productInfoById.getProdId();
+                    } else {
+                        // 创建并填充Product对象
+                        Product productAdd = createProductFromProductInfo(productInfo);
+                        setSpuSpecMapper(productInfo, productAdd);
+                        //添加到数据库
+                        productMapper.insert(productAdd);
+                        prodId = productAdd.getProdId();
+                        log.info("生成的商品ID: {}", productAdd.getProdId());
+                    }
+
+                    JSONArray skuList = productInfo.getJSONArray("skuList");
+                    for (Object o : skuList) {
+                        JSONObject jsonObjectSku = JSON.parseObject(o.toString());
+
+                        Sku skuId = skuMapper.selectByHbSkuId(jsonObjectSku.getLong("skuId"));
+                        if (ObjectUtil.isNotEmpty(skuId) && skuId.getIsDelete() == 0) {
+                            log.info("商品skuId={},skuName={}已经存在无需添加", productInfo.getLong("skuId"), productInfo.getString("skuName"));
+                        } else {
+                            Sku sku = createSkuFromProductInfo(jsonObjectSku);
+                            sku.setProdId(prodId);
+                            skuMapper.insert(sku);
+                        }
+                    }
                 }
             }
-            // 这里可以保存到数据库
-            // ProductService.saveBatch(spuList);
-            // SkuService.saveBatch(skuList);
-
-            return HBR.success("商品信息处理成功,共处理 " + spuList.size() + " 个SPU和SKU");
-
-        } catch (Exception e) {
-            log.error("处理商品信息失败:{}", e.getMessage(), e);
-            return HBR.error("处理商品信息失败: " + e.getMessage());
         }
+        return HBR.success("商品信息处理成功");
     }
 
     @Override
@@ -131,6 +179,7 @@ public class HBGoodsService implements IGoodsService {
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HBR updateGoodsPrice(JSONObject hbRequest) {
         try {
             String bodyStr = hbRequest.getString("body");
@@ -138,9 +187,39 @@ public class HBGoodsService implements IGoodsService {
             JSONObject bodyJson = JSON.parseObject(bodyStr);
             JSONArray requestList = bodyJson.getJSONArray("requestList");
             for (Object request : requestList) {
-                JSONObject jsonObject = JSON.parseObject((String) request);
+                JSONObject jsonObject = JSON.parseObject(request.toString());
                 Long skuId = jsonObject.getLong("skuId");
+                Double currentPrice = jsonObject.getDouble("currentPrice");
+                String stationId = jsonObject.getString("stationId");//海博门店编码
+                ShopDetail shopDetail = shopDetailMapper.selectByHbStationId(stationId);
+                if (ObjectUtil.isEmpty(shopDetail)) {
+                    log.error("系统找不到对应的门店(门店编码:{})信息", stationId);
+                    return HBR.error("系统找不到对应的门店(门店编码:" + stationId + ")信息");
+                }
+
+                //改变单品价格
+                Sku sku = skuMapper.selectByHbSkuId(skuId);
+                if (ObjectUtil.isEmpty(sku)) {
+                    log.error("更改价格系统找不到对应商品(单品):{}", skuId);
+                    return HBR.error("更改价格系统找不到对应商品(单品):" + skuId);
+                }
 
+                ShopProd shopProd = shopProdMapper.selectByShopAndProd(sku.getSkuId(), shopDetail.getShopId());
+                if (ObjectUtil.isEmpty(shopProd)) {
+                    ShopProd shopProdInfo = new ShopProd();
+                    shopProdInfo.setShopId(shopDetail.getShopId());
+                    shopProdInfo.setShopProdPrice(currentPrice == null ? 0.0 : currentPrice);
+                    shopProdInfo.setSkuId(sku.getSkuId());
+                    shopProdInfo.setIsDelete(0);
+                    shopProdInfo.setRecTime(new Date());
+                    shopProdMapper.insert(shopProdInfo);
+                    log.info("门店对应商品系统不存在直接添加");
+                } else {
+                    shopProd.setShopProdPrice(currentPrice == null ? 0.0 : currentPrice);
+                    shopProd.setUpdateTime(new Date());
+                    shopProdMapper.updateById(shopProd);
+                    log.info("库存更改成功");
+                }
             }
         } catch (Exception e) {
             log.error("商品失败:{}", e.getMessage(), e);
@@ -151,12 +230,48 @@ public class HBGoodsService implements IGoodsService {
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HBR updateGoodsStock(JSONObject hbRequest) {
         try {
             String bodyStr = hbRequest.getString("body");
             log.info("商品库存变动,body:{}", bodyStr);
             JSONObject bodyJson = JSON.parseObject(bodyStr); // 使用Fastjson的解析方法
-            String outStationNo = bodyJson.getString("outStationNo");
+            JSONArray requestList = bodyJson.getJSONArray("requestList");
+            for (Object request : requestList) {
+                JSONObject jsonObject = JSON.parseObject(request.toString());
+                Long skuId = jsonObject.getLong("skuId");
+                String stationId = jsonObject.getString("stationId");//海博门店编码
+                ShopDetail shopDetail = shopDetailMapper.selectByHbStationId(stationId);
+                if (shopDetail == null) {
+                    log.error("系统找不到对应的门店信息(门店编码:{})", stationId);
+                    return HBR.error("系统找不到对应的门店信息(门店编码:" + stationId + ")");
+                }
+
+                Integer currentStock = jsonObject.getInteger("currentStock");
+                //改变单品库存
+                Sku sku = skuMapper.selectByHbSkuId(skuId);
+                if (ObjectUtil.isEmpty(sku)) {
+                    log.error("系统找不到对应商品(单品):{}", skuId);
+                    return HBR.error("系统找不到对应商品(单品):" + skuId);
+                }
+
+                ShopProd shopProd = shopProdMapper.selectByShopAndProd(sku.getSkuId(), shopDetail.getShopId());
+                if (ObjectUtil.isEmpty(shopProd)) {
+                    ShopProd shopProdInfo = new ShopProd();
+                    shopProdInfo.setShopId(shopDetail.getShopId());
+                    shopProdInfo.setShopProdStocks(currentStock);
+                    shopProdInfo.setSkuId(sku.getSkuId());
+                    shopProdInfo.setIsDelete(0);
+                    shopProdInfo.setRecTime(new Date());
+                    shopProdMapper.insert(shopProdInfo);
+                    log.info("库存添加成功");
+                } else {
+                    shopProd.setShopProdStocks(currentStock);
+                    shopProd.setUpdateTime(new Date());
+                    shopProdMapper.updateById(shopProd);
+                    log.info("库存更改成功");
+                }
+            }
         } catch (Exception e) {
             log.error("商品失败:{}", e.getMessage(), e);
             return HBR.error("未知异常");
@@ -169,6 +284,20 @@ public class HBGoodsService implements IGoodsService {
     public void deleteGoods(JSONObject hbRequest) {
         String bodyStr = hbRequest.getString("body");
         log.info("商品删除,body:{}", bodyStr);
+
+        JSONObject bodyJson = JSON.parseObject(bodyStr);
+        JSONArray requestList = bodyJson.getJSONArray("productList");
+        for (Object request : requestList) {
+            JSONObject jsonObject = JSON.parseObject(request.toString());
+            Long skuId = jsonObject.getLong("skuId");
+            Sku sku = skuMapper.selectByHbSkuId(skuId);
+            if (ObjectUtil.isEmpty(sku)) {
+                log.error("系统找不到删除对应商品(单品):{}", skuId);
+                return;
+            }
+            sku.setIsDelete(1);
+            skuMapper.updateById(sku);
+        }
     }
 
     @Override
@@ -196,6 +325,35 @@ public class HBGoodsService implements IGoodsService {
         return post;
     }
 
+    /**
+     * 多规格查询
+     *
+     * @param spuId 海博多规格商品编码
+     */
+    public String selectHBGoodsSpuInfo(String spuId) {
+
+        HBBaseReq<Object> build = HBBaseReq.create();
+        build.setAppId(hbSignUtil.getAppId());
+
+        JSONObject skuItem = new JSONObject();
+//        skuItem.put("skuId", "1328633");      // 海博商品编码
+        skuItem.put("spuId", spuId);    // 商家商品编码
+        // 2. 创建商品列表并添加SKU对象
+        List<JSONObject> productList = new ArrayList<>();
+        productList.add(skuItem);
+        // 3. 构建外层请求体
+        JSONObject requestBody = new JSONObject();
+        requestBody.put("productList", productList);
+        // 4. 将整个JSON对象序列化为字符串并设置
+        build.setBody(JSON.toJSONString(requestBody));
+
+        build.setSign(hbSignUtil.signMd5(build));
+        log.info("post 多规格商品查询请求参数:{}", JSON.toJSONString(build));
+        String post = post(hbSignUtil.getHBHost() + "/api/product/getSpus", build);
+        log.info("post 多规格商品查询结果:{}", post);
+        return post;
+    }
+
 
     @Override
     public String getSelfSkuStatus() {
@@ -205,8 +363,6 @@ public class HBGoodsService implements IGoodsService {
         List<JSONObject> onlineProductDTO = new ArrayList();
         jsonObject.put("skuId", "0");//海博商品编码
         jsonObject.put("stationId", "0");//海博门店编码
-//        jsonObject.put("outStationNo", "0");//商家门店编码
-//        jsonObject.put("outSkuId", "0");//商家商品编码
         onlineProductDTO.add(jsonObject);
         build.setBody(JSON.toJSONString(onlineProductDTO));
         build.setSign(hbSignUtil.signMd5(build));
@@ -216,139 +372,110 @@ public class HBGoodsService implements IGoodsService {
         return post;
     }
 
-    @Override
-    public IPage<Product> selectGoodsPage(Integer pageNum, Integer pageSize,Product product) {
-        // 1. 构建分页对象
-        Page<Product> page = new Page<>(pageNum, pageSize);
-
-        // 2. 构建查询条件
-        LambdaQueryWrapper<Product> queryWrapper = new LambdaQueryWrapper<>();
-
-        if (product != null) {
-            queryWrapper.like(StringUtils.isNotBlank(product.getProdName()),
-                    Product::getProdName, product.getProdName());
-            queryWrapper.eq(product.getCategoryId() != null,
-                    Product::getCategoryId, product.getCategoryId());
-            queryWrapper.eq(product.getBrandId() != null,
-                    Product::getBrandId, product.getBrandId());
-            queryWrapper.eq(product.getStatus() != null,
-                    Product::getStatus, product.getStatus());
-        }
-
-        // 3. 添加排序
-        queryWrapper.orderByDesc(Product::getCreateTime);
-
-        // 4. 执行分页查询
-        IPage<Product> ProductPage = productMapper.selectPage(page, queryWrapper);
-        List<Product> records = ProductPage.getRecords();
-        for (Product record : records) {
-
-            LambdaQueryWrapper<Sku> skuQueryWrapper = new LambdaQueryWrapper<>();
-            skuQueryWrapper.like(Sku::getProdId, record.getProdId());
-
-            // 3. 添加排序
-            skuQueryWrapper.orderByDesc(Sku::getRecTime);
-            record.setSkuList(skuMapper.selectList(skuQueryWrapper));
-        }
-        return ProductPage;
-    }
 
     /**
      * 从productInfo创建Product对象
      */
     private Product createProductFromProductInfo(JSONObject productInfo) {
-        Product Product = new Product();
-
-        // 设置默认值
+        Product product = new Product();
         // 直接映射字段
-        Product.setProdId(productInfo.getLong("spuId"));
-        Product.setProdName(productInfo.getString("spuName"));
-
+        product.setProdId(productInfo.getLong("spuId"));
+        product.setProdName(productInfo.getString("spuName"));
+//        Product.setShopId(productInfo.getString("shopId"));
+
+        product.setBrief(productInfo.getString("sellPoint"));//简要描述,卖点等
+        product.setVideo(productInfo.getString(""));//商品视频
+        product.setStatus(1);
+        product.setVersion(1);
+        product.setProdType(0);//(0普通商品 1拼团 2秒杀 3积分)
+        product.setCreateTime(new Date());
+        product.setUpdateTime(new Date());
+        product.setPutawayTime(new Date());
+        product.setBrandId(productInfo.getLong("brandId"));//品牌ID
+        product.setBrandName(productInfo.getString("brandName"));//品牌名称
+        product.setCategoryId(productInfo.getLong("frontCategoryCode")); // 分类转换
+        product.setHbFrontCategoryId(productInfo.getLong("frontCategoryCode"));//后台类目平台对应ID
         // 需要转换或默认值的字段
-        Product.setCategoryId(convertCategoryCodeToId(productInfo.getString("frontCategoryCode"))); // 分类转换
-        Product.setBrandId(convertBrandToId(productInfo.getString("brandName"))); // 品牌转换
+//        Product.setTotalStocks(productInfo.getString(""));//总库存
+//        Product.setDeliveryMode(productInfo.getString(""));//配送方式
+//        Product.setDeliveryTemplateId(productInfo.getString(""));//运费模板id
 
-        // 其他可能需要处理的字段
-        if (productInfo.containsKey("desc")) {
-//            Product.setDesc(productInfo.getString("desc"));
-        }
+        convertCategoryCodeToId(productInfo.getJSONArray("relationFrontCategories")); // 一品多类目
 
-        return Product;
+        log.info("商品数据详情{}", product);
+        return product;
     }
 
     /**
-     * 从productInfo创建Sku对象
+     * 海博(普通)商品
      */
-    private Sku createSkuFromProductInfo(JSONObject productInfo) {
-        Sku Sku = new Sku();
-        // 直接映射字段
-        Sku.setSkuId(productInfo.getLong("skuId"));
-        Sku.setProdId(productInfo.getLong("spuId"));
-        Sku.setSkuCode(productInfo.getString("skuId")); // 使用海博skuId作为skuCode
-        Sku.setSkuName(productInfo.getString("skuName"));
-        Sku.setPic(productInfo.getString("images"));//sku图片
-
-        // 数值类型字段处理
-        Sku.setPrice(productInfo.getDouble("basicPrice") != null ?
-                productInfo.getDouble("basicPrice") : Double.NaN);
-        Sku.setActualStocks(productInfo.getInteger("initStock") != null ?
-                productInfo.getInteger("initStock") : 0);
-
-        // 重量和体积转换(需要根据实际数据格式处理)
-        if (productInfo.containsKey("weight")) {
-            try {
-                String weightStr = productInfo.getString("weight");
-                Sku.setWeight(Double.NaN);
-            } catch (Exception e) {
-                log.warn("重量格式转换失败: {}", productInfo.getString("weight"));
-            }
-        }
-
-        // 状态处理
-        Integer status = productInfo.getInteger("flag");
-        if (status != null && status == 0) {
-            Sku.setStatus(0); // 停售
-        } else {
-            Sku.setStatus(1); // 正常
-        }
-
-        // 其他字段映射
-        if (productInfo.containsKey("spec")) {
-            // spec字段可能包含规格信息,可以用于skuName或单独存储
-            Sku.setSkuName(Sku.getSkuName() + " " + productInfo.getString("spec"));
-        }
-
-        if (productInfo.containsKey("unit")) {
-            // 单位信息可以用于skuName
-            Sku.setSkuName(Sku.getSkuName() + "(" + productInfo.getString("unit") + ")");
-        }
+    private void setSpuMapper(JSONObject productInfo, Product product) {
+        product.setPic(productInfo.getString("spuMainImage"));//商品主图
+        product.setHbStatus(1);//海博商品类型(1-普通商品,2-多规格商品)
+        product.setImgs(productInfo.getString("spuImages"));//商品图片,以,分割
+    }
 
-        return Sku;
+    /**
+     * 海博(多规格)商品
+     */
+    private void setSpuSpecMapper(JSONObject productInfo, Product product) {
+        product.setPic(productInfo.getString("mainImage"));//商品主图
+        product.setHbStatus(2);//海博商品类型(1-普通商品,2-多规格商品)
+        product.setImgs(productInfo.getString("images"));//商品图片,以,分割
     }
 
     /**
-     * 分类代码转换(需要根据实际业务实现)
+     * 从productInfo创建Sku对象
      */
-    private Long convertCategoryCodeToId(String categoryCode) {
-        // 这里需要根据您的分类映射关系实现
-        // 例如:从数据库或配置文件中根据categoryCode查找对应的categoryId
-        if ("101101".equals(categoryCode)) {
-            return 1L; // 每日坚果分类ID
-        } else if ("101000".equals(categoryCode)) {
-            return 2L; // 坚果分类ID
-        }
-        return 0L; // 默认分类
+    private Sku createSkuFromProductInfo(JSONObject productInfo) {
+        log.info("创建Sku对象数据==========={}===========", productInfo);
+        Sku sku = new Sku();
+        // 直接映射字段
+        sku.setSkuId(productInfo.getLong("skuId"));//单品id - 关联海博同步
+        sku.setProdId(productInfo.getLong("spuId"));//商品id - 关联海博同步
+        sku.setSkuName(productInfo.getString("skuName"));//单品名称
+        sku.setProdName(productInfo.getString("spuName"));//商品名称
+        sku.setModelId(productInfo.getString("upc")); // 商品条码
+        sku.setPartyCode(productInfo.getString("outSkuId"));//商家商品编码
+        sku.setSkuCode(productInfo.getString("outSkuId"));//商家商品编码
+//        Sku.setVolume(productInfo.getString(""));//体积
+        sku.setStatus(1);
+        sku.setIsDelete(0);
+        sku.setVersion(0);
+        String images = StringUtils.isEmpty(productInfo.getString("images")) ? productInfo.getString("skuMainImage") : productInfo.getString("images");
+        sku.setPic(images);//sku图片
+        sku.setWeightUnit(productInfo.getString("unit"));//单位
+        // 商品原价
+        sku.setOriPrice(productInfo.getDouble("basicPrice") != null ?
+                productInfo.getDouble("basicPrice") : null);
+        //实际库存
+        sku.setActualStocks(productInfo.getInteger("initStock") == null ? 0 :
+                productInfo.getInteger("initStock"));
+
+        sku.setRecTime(new Date());
+        sku.setUpdateTime(new Date());
+
+        // 重量
+        Double weightStr = productInfo.getDouble("weight");
+        sku.setWeight(weightStr == null ? 0.0 : weightStr);
+
+        //体积
+        sku.setVolume(0.0);
+        sku.setStatus(1); // 状态默认正常
+        log.info("单品数据详情{}", sku);
+        return sku;
     }
 
     /**
-     * 品牌名称转换(需要根据实际业务实现)
+     * 分类处理
      */
-    private Long convertBrandToId(String brandName) {
-        // 这里需要根据您的品牌映射关系实现
-        if ("沃隆".equals(brandName)) {
-            return 1L; // 沃隆品牌ID
+    private void convertCategoryCodeToId(JSONArray categoryCode) {
+        for (Object o : categoryCode) {
+            JSONObject jsonObject = JSON.parseObject(o.toString());
+
+
         }
-        return 0L; // 默认品牌
     }
 
+
 }

+ 110 - 0
yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/HBOrderService.java

@@ -0,0 +1,110 @@
+package com.yami.shop.service.hb.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.yami.shop.bean.dto.hb.HBBaseReq;
+import com.yami.shop.bean.model.Product;
+import com.yami.shop.bean.model.Sku;
+import com.yami.shop.common.util.hb.HBR;
+import com.yami.shop.dao.OrderMapper;
+import com.yami.shop.dao.ProductMapper;
+import com.yami.shop.dao.SkuMapper;
+import com.yami.shop.service.hb.IGoodsService;
+import com.yami.shop.service.hb.IOrderService;
+import com.yami.shop.utils.HBSignUtil;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import static com.yami.shop.common.util.HttpUtil.post;
+
+
+/**
+ * 商品信息管理实现
+ *
+ * @author fubojin
+ * @version 1.0.0
+ * @since 2025-09-5
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+@Transactional(readOnly = true)
+public class HBOrderService implements IOrderService {
+    private final HBSignUtil hbSignUtil;
+    private final OrderMapper orderMapper;
+    private final ProductMapper productMapper;
+    private final SkuMapper skuMapper;
+
+    public HBR addHBGoods(JSONObject hbRequest) {
+        try {
+            String bodyStr = hbRequest.getString("body");
+            log.info("订单信息,body:{}", bodyStr);
+            JSONObject bodyJson = JSON.parseObject(bodyStr);
+            JSONArray productList = bodyJson.getJSONArray("productList");
+            List<Product> spuList = new ArrayList<>();
+            List<Sku> skuList = new ArrayList<>();
+
+            for (Object product : productList) {
+                JSONObject jsonObject = JSON.parseObject(product.toString());
+                String outSkuId = jsonObject.getString("outSkuId");
+                String goodsInfoStr = selectHBGoodsInfo(outSkuId);
+                JSONObject goodsInfoJson = JSON.parseObject(goodsInfoStr);
+
+                // 2. 逐层解析获取productHostInfoDTOS数组
+                JSONObject result = goodsInfoJson.getJSONObject("result");
+                JSONObject innerResult = result.getJSONObject("result");
+                JSONArray productHostInfoDTOS = innerResult.getJSONArray("productHostInfoDTOS");
+
+
+                // 3. 遍历获取每个商品信息
+                for (int i = 0; i < productHostInfoDTOS.size(); i++) {
+                    JSONObject productInfo = productHostInfoDTOS.getJSONObject(i);
+
+                }
+            }
+            // 这里可以保存到数据库
+            // ProductService.saveBatch(spuList);
+            // SkuService.saveBatch(skuList);
+
+            return HBR.success("商品信息处理成功,共处理 " + spuList.size() + " 个SPU和SKU");
+
+        } catch (Exception e) {
+            log.error("处理商品信息失败:{}", e.getMessage(), e);
+            return HBR.error("处理商品信息失败: " + e.getMessage());
+        }
+    }
+
+    public String selectHBGoodsInfo(String outSkuId) {
+
+        HBBaseReq<Object> build = HBBaseReq.create();
+        build.setAppId(hbSignUtil.getAppId());
+
+        JSONObject skuItem = new JSONObject();
+//        skuItem.put("skuId", "1328633");      // 海博商品编码
+        skuItem.put("outSkuId", outSkuId);    // 商家商品编码
+        // 2. 创建商品列表并添加SKU对象
+        List<JSONObject> productList = new ArrayList<>();
+        productList.add(skuItem);
+        // 3. 构建外层请求体
+        JSONObject requestBody = new JSONObject();
+        requestBody.put("productList", productList);
+        // 4. 将整个JSON对象序列化为字符串并设置
+        build.setBody(JSON.toJSONString(requestBody));
+
+        build.setSign(hbSignUtil.signMd5(build));
+        log.info("post 商品查询请求参数:{}", JSON.toJSONString(build));
+        String post = post(hbSignUtil.getHBHost() + "/api/product/getSku", build);
+        log.info("post 商品查询结果:{}", post);
+        return post;
+    }
+
+
+}

+ 0 - 76
yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/ProductCategoryService.java

@@ -1,76 +0,0 @@
-package com.yami.shop.service.hb.impl;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.yami.shop.bean.dto.hb.HBBaseReq;
-import com.yami.shop.common.util.hb.HBR;
-import com.yami.shop.service.hb.IProductCategoryService;
-import com.yami.shop.utils.HBSignUtil;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import static com.yami.shop.common.util.HttpUtil.post;
-
-
-/**
- * 门店管理服务实现
- *
- * @author fubojin
- * @version 1.0.0
- * @since 2025-09-5
- */
-@Slf4j
-@Service
-@AllArgsConstructor
-@Transactional(readOnly = true)
-public class ProductCategoryService implements IProductCategoryService {
-    private final HBSignUtil hbSignUtil;
-
-    @Override
-    @Transactional
-    public HBR addHBCategory(JSONObject hbRequest) {
-        try {
-            String bodyStr = hbRequest.getString("body");
-            log.info("开始后台分类,body:{}", bodyStr);
-            JSONObject bodyJson = JSON.parseObject(bodyStr); // 使用Fastjson的解析方法
-            String outStationNo = bodyJson.getString("outStationNo");
-
-            // 2. 构建门店实体
-
-            // 3. 保存门店信息
-            log.info("后台分类信息");
-
-            log.info("后台分类成功,门店ID:");
-
-            System.out.println("================");
-            // 4. 构建响应
-            return HBR.success();
-
-        } catch (Exception e) {
-            log.error("后台分类失败:{}", e.getMessage(), e);
-            return HBR.error("未知异常");
-        }
-    }
-
-    @Override
-    public void selectHBCategory() {
-        HBBaseReq<Object> build = HBBaseReq.create();
-        build.setAppId(hbSignUtil.getAppId());
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("code", 0);
-        jsonObject.put("dataType", 0);
-        build.setBody(JSON.toJSONString(jsonObject));
-        build.setSign(hbSignUtil.signMd5(build));
-        String post = post(hbSignUtil.getHBHost()+"/api/product/venderCategory/getCategory", build);
-        log.info("post 请求参数:{}", JSON.toJSONString(build));
-        log.info("post 结果:{}",  post);
-    }
-
-    @Override
-    public void deleteCategory(JSONObject hbRequest) {
-        String bodyStr = hbRequest.getString("body");
-        log.info("开始后台分类,body:{}", bodyStr);
-    }
-}

+ 38 - 10
yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/StoreManagementService.java

@@ -7,6 +7,7 @@ import com.yami.shop.bean.dto.hb.HBBaseReq;
 import com.yami.shop.bean.dto.hb.HBStoreBaseInfoReq;
 import com.yami.shop.bean.dto.hb.StoreRegister;
 import com.yami.shop.bean.model.ShopDetail;
+import com.yami.shop.common.util.R;
 import com.yami.shop.common.util.hb.HBR;
 import com.yami.shop.dao.ShopDetailMapper;
 import com.yami.shop.service.hb.IStoreManagementService;
@@ -36,18 +37,21 @@ public class StoreManagementService implements IStoreManagementService {
     private final HBSignUtil hbSignUtil;
 
 
-    @Override
-    public void doGetStation() {
+    /**
+     * 获取海博门店基础信息
+     */
+    public String doGetStation(String outStationNo) {
         HBBaseReq build = new HBBaseReq();
         build.setAppId(hbSignUtil.getAppId());
         HBStoreBaseInfoReq hbStoreBaseInfoReq = HBStoreBaseInfoReq.builder()
-                .outStationNo("003")
+                .outStationNo(outStationNo)
                 .build();
         build.setBody(JSON.toJSONString(hbStoreBaseInfoReq));
         build.setSign(hbSignUtil.signMd5(build));
         String post = post(hbSignUtil.getHBHost()+"/api/station/get", build);
         log.info("post 请求参数:{}", JSON.toJSONString(build));
         log.info("post 结果:{}",  post);
+        return post;
     }
 
     @Override
@@ -72,11 +76,19 @@ public class StoreManagementService implements IStoreManagementService {
             log.info("开始门店注册,body:{}", bodyStr);
             JSONObject bodyJson = JSON.parseObject(bodyStr); // 使用Fastjson的解析方法
             String outStationNo = bodyJson.getString("outStationNo");
+
+            String hb = doGetStation(outStationNo);
+            JSONObject goodsInfoJson = JSON.parseObject(hb);
+            // 2. 逐层解析获取productHostInfoDTOS数组
+            JSONObject result = goodsInfoJson.getJSONObject("result");
+
+
             // 1. 验证门店编码是否已存在
 
             // 2. 构建门店实体
             ShopDetail store = new ShopDetail();
             store.setShopName(outStationNo);
+            store.setShopName(outStationNo);
             store.setCategory(bodyJson.getString("stationId"));
 
             // 3. 保存门店信息
@@ -100,11 +112,31 @@ public class StoreManagementService implements IStoreManagementService {
             String bodyStr = registerRequest.getString("body");
             log.info("开始门店变更,body:{}", bodyStr);
             JSONObject bodyJson = JSON.parseObject(bodyStr);
-
             String outStationNo = bodyJson.getString("outStationNo");
-            if (!StringUtils.hasText(outStationNo)) {
-                return HBR.error("门店编码不能为空");
+
+            String hb = doGetStation(outStationNo);
+            ShopDetail shopDetail = shopDetailMapper.selectByOutStationNo(outStationNo);
+            if (shopDetail!=null) {
+                log.info("门店已存在{}",outStationNo);
+                return HBR.success();
             }
+            JSONObject goodsInfoJson = JSON.parseObject(hb);
+            // 2. 逐层解析获取result
+            JSONObject result = goodsInfoJson.getJSONObject("result");
+            JSONObject resultData = result.getJSONObject("result");
+
+            ShopDetail shopDetailInfo = new ShopDetail();
+            shopDetailInfo.setShopName(resultData.getString("stationName"));
+            shopDetailInfo.setShopAddress(resultData.getString("address"));
+            shopDetailInfo.setProvince(resultData.getString("province"));
+            shopDetailInfo.setCity(resultData.getString("city"));
+            shopDetailInfo.setArea(resultData.getString("district"));
+            shopDetailInfo.setShopOwner(resultData.getString("contacts"));
+            shopDetailInfo.setShopLat(resultData.getString("longitude"));//门店经度
+            shopDetailInfo.setShopLng(resultData.getString("latitude"));//门店纬度
+            shopDetailInfo.setThirdPartyCode(resultData.getString("stationId"));//海博门店编码
+            shopDetailInfo.setOutStationNo(resultData.getString("outStationNo"));//商家门店编码
+            shopDetailMapper.insert(shopDetailInfo);
 
             return HBR.success();
         } catch (Exception e) {
@@ -113,9 +145,5 @@ public class StoreManagementService implements IStoreManagementService {
         }
     }
 
-    @Override
-    public StoreRegister updateStoreDeliveryFeeTemplate(JSONObject registerRequest) {
-        return null;
-    }
 
 }

+ 59 - 0
yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/TransportService.java

@@ -0,0 +1,59 @@
+package com.yami.shop.service.hb.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.yami.shop.bean.dto.hb.HBBaseReq;
+import com.yami.shop.bean.dto.hb.HBStoreBaseInfoReq;
+import com.yami.shop.bean.model.ShopDetail;
+import com.yami.shop.common.util.hb.HBR;
+import com.yami.shop.dao.ShopDetailMapper;
+import com.yami.shop.service.hb.IStoreManagementService;
+import com.yami.shop.service.hb.ITransportService;
+import com.yami.shop.utils.HBSignUtil;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import static com.yami.shop.common.util.HttpUtil.post;
+
+
+/**
+ * 门店管理服务实现
+ *
+ * @author fubojin
+ * @version 1.0.0
+ * @since 2025-09-1
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+@Transactional(readOnly = true)
+public class TransportService implements ITransportService {
+    private final ShopDetailMapper shopDetailMapper;
+
+    @Override
+    @Transactional
+    public HBR addTransport(JSONObject registerRequest) {
+        try {
+            String bodyStr = registerRequest.getString("body");
+            log.info("开始门店注册,body:{}", bodyStr);
+            JSONObject bodyJson = JSON.parseObject(bodyStr); // 使用Fastjson的解析方法
+            String outStationNo = bodyJson.getString("outStationNo");
+
+//            String hb = doGetStation(outStationNo);
+//            JSONObject goodsInfoJson = JSON.parseObject(hb);
+//            // 2. 逐层解析获取productHostInfoDTOS数组
+//            JSONObject result = goodsInfoJson.getJSONObject("result");
+
+            // 4. 构建响应
+            return HBR.success();
+
+        } catch (Exception e) {
+            log.error("门店注册失败:{}", e.getMessage(), e);
+            return HBR.error("未知异常");
+        }
+    }
+
+
+}

+ 21 - 0
yami-shop-service/src/main/java/com/yami/shop/service/impl/ShopProdServiceImpl.java

@@ -0,0 +1,21 @@
+package com.yami.shop.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yami.shop.bean.model.ShopProd;
+import com.yami.shop.dao.ShopProdMapper;
+import com.yami.shop.service.ShopProdService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class ShopProdServiceImpl extends ServiceImpl<ShopProdMapper, ShopProd> implements ShopProdService {
+
+    private final ShopProdMapper shopProdMapper;
+
+
+    @Override
+    public void insertProd(ShopProd shopProd) {
+        shopProdMapper.insert(shopProd);
+    }
+}

+ 7 - 0
yami-shop-service/src/main/resources/mapper/ProductMapper.xml

@@ -128,6 +128,7 @@
         select * from tz_prod where prod_name = #{prodName} and shop_id = #{shopId}
     </select>
 
+
     <update id="returnStock">
         <foreach collection="prodCollect" item="changeStocks" index="prodId" separator=";">
             update tz_prod set total_stocks = total_stocks + #{changeStocks} where prod_id = #{prodId}
@@ -717,4 +718,10 @@
             desc
         </if>
     </select>
+
+
+    <select id="selectByHbSpuId" resultType="com.yami.shop.bean.model.Product">
+        select * from tz_prod where hb_spu_id = #{hbSpuId} AND is_delete = 0;
+    </select>
+
 </mapper>

+ 20 - 1
yami-shop-service/src/main/resources/mapper/ShopDetailMapper.xml

@@ -7,6 +7,7 @@
     -->
     <id column="shop_id" jdbcType="BIGINT" property="shopId" />
     <result column="shop_name" jdbcType="VARCHAR" property="shopName" />
+    <result column="out_station_no" jdbcType="VARCHAR" property="outStationNo" />
     <result column="user_id" jdbcType="VARCHAR" property="userId" />
     <result column="intro" jdbcType="VARCHAR" property="intro" />
     <result column="shop_owner" jdbcType="VARCHAR" property="shopOwner" />
@@ -54,6 +55,7 @@
     <select id="listHotShopsHead" resultType="com.yami.shop.bean.app.dto.ShopHeadInfoDto">
       SELECT
         sd.`shop_id`,
+        sd.`out_station_no`,
         sd.`shop_name`,
         sd.`shop_logo`,
         sd.shop_status,
@@ -71,6 +73,7 @@
   <select id="searchShops" resultType="com.yami.shop.bean.app.dto.ShopHeadInfoDto">
     SELECT
     sd.`shop_id`,
+    sd.`out_station_no`,
     sd.`shop_name`,
     sd.`shop_logo`,
     sd.shop_status,
@@ -88,7 +91,7 @@
     ORDER BY fansCount DESC
   </select>
     <select id="selectShopDetailById" resultType="com.yami.shop.bean.model.ShopDetail">
-      select shop_id,shop_name,user_id,intro,shop_owner,mobile,tel,shop_lat,shop_lng,shop_address,province,province_id,city,city_id,area,area_id,
+      select shop_id,out_station_no,shop_name,user_id,intro,shop_owner,mobile,tel,shop_lat,shop_lng,shop_address,province,province_id,city,city_id,area,area_id,
       shop_logo,shop_status,create_time,update_time,is_distribution,business_license,identity_card_front,identity_card_later,sync,category,third_party_code
       from tz_shop_detail
       where shop_id = #{shopId}
@@ -105,4 +108,20 @@
       order by
         distance
     </select>
+
+
+  <select id="selectByOutStationNo" resultType="com.yami.shop.bean.model.ShopDetail">
+    select shop_id,out_station_no,shop_name,user_id,intro,shop_owner,mobile,tel,shop_lat,shop_lng,shop_address,province,province_id,city,city_id,area,area_id,
+           shop_logo,shop_status,create_time,update_time,is_distribution,business_license,identity_card_front,identity_card_later,sync,category,third_party_code
+    from tz_shop_detail
+    where out_station_no = #{outStationNo}
+  </select>
+
+  <select id="selectByHbStationId" resultType="com.yami.shop.bean.model.ShopDetail">
+    select shop_id,hb_station_id, out_station_no,shop_name,user_id,intro,shop_owner,mobile,tel,shop_lat,shop_lng,shop_address,province,province_id,city,city_id,area,area_id,
+           shop_logo,shop_status,create_time,update_time,is_distribution,business_license,identity_card_front,identity_card_later,sync,category,third_party_code
+    from tz_shop_detail
+    where hb_station_id = #{hbStationId}
+  </select>
+
 </mapper>

+ 23 - 0
yami-shop-service/src/main/resources/mapper/ShopProdMapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.yami.shop.dao.ShopProdMapper">
+
+
+  <resultMap id="shopProdMap" type="com.yami.shop.bean.model.ShopProd">
+    <id column="id" property="id"/>
+    <result column="shop_id" property="shopId"/>
+    <result column="sku_id" property="skuId"/>
+    <result column="shop_prod_price" property="shopProdPrice"/>
+    <result column="shop_prod_stocks" property="shopProdStocks"/>
+    <result column="is_delete" property="isDelete"/>
+    <result column="update_time" property="updateTime"/>
+    <result column="rec_time" property="recTime"/>
+  </resultMap>
+
+  <select id="selectByShopAndProd" resultMap="shopProdMap">
+    SELECT * FROM tz_shop_prod
+    WHERE shop_id = #{shopId} AND sku_id = #{skuId} AND is_delete = 0
+  </select>
+
+</mapper>

+ 4 - 1
yami-shop-service/src/main/resources/mapper/SkuMapper.xml

@@ -41,8 +41,11 @@
 	<select id="listByProdId" resultType="com.yami.shop.bean.model.Sku">
 		select * from tz_sku where prod_id = #{prodId} and is_delete = 0
 	</select>
+    <select id="selectByHbSkuId" resultType="com.yami.shop.bean.model.Sku">
+        select * from tz_sku where hb_sku_id = #{hbSkuId} and is_delete = 0
+    </select>
 
-	<update id="updateStocks" parameterType="com.yami.shop.bean.model.Sku">
+    <update id="updateStocks" parameterType="com.yami.shop.bean.model.Sku">
 		update tz_sku set stocks = stocks - #{sku.stocks}, version = version + 1,update_time = NOW() where sku_id = #{sku.skuId} and #{sku.stocks} &lt;= stocks
 	</update>
 

+ 18 - 17
yami-shop-sys/src/main/java/com/yami/shop/sys/controller/SysMenuController.java

@@ -19,6 +19,7 @@ import javax.validation.Valid;
 
 import cn.hutool.core.map.MapUtil;
 
+import com.yami.shop.common.util.R;
 import com.yami.shop.security.platform.util.SecurityUtils;
 import com.yami.shop.common.config.Constant;
 import com.yami.shop.sys.constant.MenuType;
@@ -61,11 +62,11 @@ public class SysMenuController{
 
 	@GetMapping("/nav")
 	@ApiOperation(value="获取用户所拥有的菜单和权限", notes="通过登陆用户的userId获取用户所拥有的菜单和权限")
-	public ResponseEntity<Map<Object, Object>> nav(){
+	public R<Map<Object, Object>> nav(){
 		List<SysMenu> menuList = sysMenuService.listMenuByUserId(SecurityUtils.getSysUser().getUserId());
 		Collection<GrantedAuthority> authorities = SecurityUtils.getSysUser().getAuthorities();
 
-		return ResponseEntity.ok(MapUtil.builder().put("menuList", menuList).put("authorities", authorities).build());
+		return R.SUCCESS(MapUtil.builder().put("menuList", menuList).put("authorities", authorities).build());
 	}
 
 	/**
@@ -73,9 +74,9 @@ public class SysMenuController{
 	 * @return
 	 */
 	@GetMapping("/table")
-	public ResponseEntity<List<SysMenu>> table(){
+	public R<List<SysMenu>> table(){
 		List<SysMenu> sysMenuList = sysMenuService.listMenuAndBtn();
-		return ResponseEntity.ok(sysMenuList);
+		return R.SUCCESS(sysMenuList);
 	}
 
 	/**
@@ -83,31 +84,31 @@ public class SysMenuController{
 	 */
 	@GetMapping("/list")
 	@ApiOperation(value="获取用户所拥有的菜单(不包括按钮)", notes="通过登陆用户的userId获取用户所拥有的菜单和权限")
-	public ResponseEntity<List<SysMenu>> list(){
+	public R<List<SysMenu>> list(){
 		List<SysMenu> sysMenuList= sysMenuService.listSimpleMenuNoButton();
-		return ResponseEntity.ok(sysMenuList);
+		return R.SUCCESS(sysMenuList);
 	}
 
 	/**
 	 * 选择菜单
 	 */
 	@GetMapping("/listRootMenu")
-	public ResponseEntity<List<SysMenu>> listRootMenu(){
+	public R<List<SysMenu>> listRootMenu(){
 		//查询列表数据
 		List<SysMenu> menuList = sysMenuService.listRootMenu();
 
-		return ResponseEntity.ok(menuList);
+		return R.SUCCESS(menuList);
 	}
 
 	/**
 	 * 选择子菜单
 	 */
 	@GetMapping("/listChildrenMenu")
-	public ResponseEntity<List<SysMenu>> listChildrenMenu(Long parentId){
+	public R<List<SysMenu>> listChildrenMenu(Long parentId){
 		//查询列表数据
 		List<SysMenu> menuList = sysMenuService.listChildrenMenuByParentId(parentId);
 
-		return ResponseEntity.ok(menuList);
+		return R.SUCCESS(menuList);
 	}
 
 	/**
@@ -115,9 +116,9 @@ public class SysMenuController{
 	 */
 	@GetMapping("/info/{menuId}")
 	@PreAuthorize("@pms.hasPermission('sys:menu:info')")
-	public ResponseEntity<SysMenu> info(@PathVariable("menuId") Long menuId){
+	public R<SysMenu> info(@PathVariable("menuId") Long menuId){
 		SysMenu menu = sysMenuService.getById(menuId);
-		return ResponseEntity.ok(menu);
+		return R.SUCCESS(menu);
 	}
 
 	/**
@@ -125,7 +126,7 @@ public class SysMenuController{
 	 */
 	@SysLog("保存菜单")
 	@PostMapping
-	@PreAuthorize("@pms.hasPermission('sys:menu:save')")
+//	@PreAuthorize("@pms.hasPermission('sys:menu:save')")
 	public ResponseEntity<Void> save(@Valid @RequestBody SysMenu menu){
 		//数据校验
 		verifyForm(menu);
@@ -138,19 +139,19 @@ public class SysMenuController{
 	 */
 	@SysLog("修改菜单")
 	@PutMapping
-	@PreAuthorize("@pms.hasPermission('sys:menu:update')")
-	public ResponseEntity<String> update(@Valid @RequestBody SysMenu menu){
+//	@PreAuthorize("@pms.hasPermission('sys:menu:update')")
+	public R<String> update(@Valid @RequestBody SysMenu menu){
 		//数据校验
 		verifyForm(menu);
 
 		if(menu.getType() == MenuType.MENU.getValue()){
 			if(StrUtil.isBlank(menu.getUrl())){
-				return ResponseEntity.badRequest().body("菜单URL不能为空");
+				 throw new YamiShopBindException("菜单URL不能为空");
 			}
 		}
 		sysMenuService.updateById(menu);
 
-		return ResponseEntity.ok().build();
+		return R.SUCCESS();
 	}
 
 	/**

+ 13 - 12
yami-shop-sys/src/main/java/com/yami/shop/sys/controller/SysRoleController.java

@@ -16,6 +16,7 @@ import java.util.Objects;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.yami.shop.common.exception.YamiShopBindException;
+import com.yami.shop.common.util.R;
 import com.yami.shop.security.platform.util.SecurityUtils;
 import com.yami.shop.sys.model.SysRole;
 import com.yami.shop.sys.model.SysUser;
@@ -63,11 +64,11 @@ public class SysRoleController{
 	 */
 	@GetMapping("/page")
 	@PreAuthorize("@pms.hasPermission('sys:role:page')")
-	public ResponseEntity<IPage<SysRole>> page(String roleName,PageParam<SysRole> page){
+	public R<IPage<SysRole>> page(String roleName,PageParam<SysRole> page){
 		IPage<SysRole> sysRoles = sysRoleService.page(page,new LambdaQueryWrapper<SysRole>()
 				.like(StrUtil.isNotBlank(roleName),SysRole::getRoleName,roleName)
 				.orderByDesc(SysRole::getCreateTime));
-		return ResponseEntity.ok(sysRoles);
+		return R.SUCCESS(sysRoles);
 	}
 
 	/**
@@ -75,9 +76,9 @@ public class SysRoleController{
 	 */
 	@GetMapping("/list")
 	@PreAuthorize("@pms.hasPermission('sys:role:list')")
-	public ResponseEntity<List<SysRole>> list(){
+	public R<List<SysRole>> list(){
 		List<SysRole> list = sysRoleService.list();
-		return ResponseEntity.ok(list);
+		return R.SUCCESS(list);
 	}
 
 	/**
@@ -85,13 +86,13 @@ public class SysRoleController{
 	 */
 	@GetMapping("/info/{roleId}")
 	@PreAuthorize("@pms.hasPermission('sys:role:info')")
-	public ResponseEntity<SysRole> info(@PathVariable("roleId") Long roleId){
+	public R<SysRole> info(@PathVariable("roleId") Long roleId){
 		SysRole role = sysRoleService.getById(roleId);
 		//查询角色对应的菜单
 		List<Long> menuList = sysMenuService.listMenuIdByRoleId(roleId);
 		role.setMenuIdList(menuList);
 
-		return ResponseEntity.ok(role);
+		return R.SUCCESS(role);
 	}
 
 	/**
@@ -100,7 +101,7 @@ public class SysRoleController{
 	@SysLog("保存角色")
 	@PostMapping
 	@PreAuthorize("@pms.hasPermission('sys:role:save')")
-	public ResponseEntity<Void> save(@RequestBody SysRole role){
+	public R<Void> save(@RequestBody SysRole role){
 
 		if (sysRoleService.count(new LambdaQueryWrapper<SysRole>()
 				.eq(SysRole::getRoleName, role.getRoleName())) > 0) {
@@ -108,7 +109,7 @@ public class SysRoleController{
 		}
 
 		sysRoleService.saveRoleAndRoleMenu(role);
-		return ResponseEntity.ok().build();
+		return R.SUCCESS();
 	}
 
 	/**
@@ -117,7 +118,7 @@ public class SysRoleController{
 	@SysLog("修改角色")
 	@PutMapping
 	@PreAuthorize("@pms.hasPermission('sys:role:update')")
-	public ResponseEntity<Void> update(@RequestBody SysRole role){
+	public R<Void> update(@RequestBody SysRole role){
 
 		SysRole dbSysRole = sysRoleService.getOne(new LambdaQueryWrapper<SysRole>()
 				.eq(SysRole::getRoleName, role.getRoleName()));
@@ -127,7 +128,7 @@ public class SysRoleController{
 		}
 
 		sysRoleService.updateRoleAndRoleMenu(role);
-		return ResponseEntity.ok().build();
+		return R.SUCCESS();
 	}
 
 	/**
@@ -136,8 +137,8 @@ public class SysRoleController{
 	@SysLog("删除角色")
 	@DeleteMapping
 	@PreAuthorize("@pms.hasPermission('sys:role:delete')")
-	public ResponseEntity<Void> delete(@RequestBody Long[] roleIds){
+	public R<Void> delete(@RequestBody Long[] roleIds){
 		sysRoleService.deleteBatch(roleIds);
-		return ResponseEntity.ok().build();
+		return R.SUCCESS();
 	}
 }

+ 20 - 20
yami-shop-sys/src/main/java/com/yami/shop/sys/controller/SysUserController.java

@@ -60,13 +60,13 @@ public class SysUserController {
 	 */
 	@GetMapping("/page")
 	@PreAuthorize("@pms.hasPermission('sys:user:page')")
-	public ResponseEntity<IPage<SysUser>> page(String username,PageParam<SysUser> page){
+	public R<IPage<SysUser>> page(String username,PageParam<SysUser> page){
 
 		IPage<SysUser> sysUserPage = sysUserService.page(page, new LambdaQueryWrapper<SysUser>()
 				.like(StrUtil.isNotBlank(username), SysUser::getUsername, username));
 
 
-		return ResponseEntity.ok(sysUserPage);
+		return R.SUCCESS(sysUserPage);
 	}
 
 	/**
@@ -83,18 +83,18 @@ public class SysUserController {
 	@SysLog("修改密码")
 	@PostMapping("/password")
 	@ApiOperation(value="修改密码", notes="修改当前登陆用户的密码")
-	public ResponseEntity<String> password(@RequestBody @Valid UpdatePasswordDto param){
+	public R<String> password(@RequestBody @Valid UpdatePasswordDto param){
 		Long userId = SecurityUtils.getSysUser().getUserId();
 
 		SysUser dbUser = sysUserService.getSysUserById(userId);
 		if (!passwordEncoder.matches(param.getPassword(), dbUser.getPassword())) {
-			return ResponseEntity.badRequest().body("原密码不正确");
+			return  R.FAIL("原密码不正确");
 		}
 		//新密码
 		String newPassword = passwordEncoder.encode(param.getNewPassword());
 //		更新密码
 		sysUserService.updatePasswordByUserId(userId, newPassword);
-		return ResponseEntity.ok().build();
+		return  R.SUCCESS();
 	}
 
 	/**
@@ -102,13 +102,13 @@ public class SysUserController {
 	 */
 	@GetMapping("/info/{userId}")
 	@PreAuthorize("@pms.hasPermission('sys:user:info')")
-	public ResponseEntity<SysUser> info(@PathVariable("userId") Long userId){
+	public R<SysUser> info(@PathVariable("userId") Long userId){
 		SysUser user = sysUserService.getSysUserById(userId);
 		user.setUserId(null);
 		//获取用户所属的角色列表
 		List<Long> roleIdList = sysRoleService.listRoleIdByUserId(userId);
 		user.setRoleIdList(roleIdList);
-		return ResponseEntity.ok(user);
+		return  R.SUCCESS(user);
 	}
 
 	/**
@@ -117,17 +117,17 @@ public class SysUserController {
 	@SysLog("保存用户")
 	@PostMapping
 	@PreAuthorize("@pms.hasPermission('sys:user:save')")
-	public ResponseEntity<String> save(@Valid @RequestBody SysUser user){
+	public R<String> save(@Valid @RequestBody SysUser user){
 		String username = user.getUsername();
 		SysUser dbUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>()
 				.eq(SysUser::getUsername, username));
 		if (dbUser!=null) {
-			return ResponseEntity.badRequest().body("该用户已存在");
+			return R.FAIL("该用户已存在");
 		}
 		user.setPassword(passwordEncoder.encode(user.getPassword()));
 		sysUserService.saveUserAndUserRole(user);
 
-		return ResponseEntity.ok().build();
+		return  R.SUCCESS();
 	}
 
 	/**
@@ -136,14 +136,14 @@ public class SysUserController {
 	@SysLog("修改用户")
 	@PutMapping
 	@PreAuthorize("@pms.hasPermission('sys:user:update')")
-	public ResponseEntity<String> update(@Valid @RequestBody SysUser user){
+	public R<String> update(@Valid @RequestBody SysUser user){
 		String password = user.getPassword();
 
 		SysUser dbUser = sysUserService.getSysUserById(user.getUserId());
 		SysUser dbUserNameInfo = sysUserService.getByUserName(user.getUsername());
 
 		if (dbUserNameInfo != null && !Objects.equals(dbUserNameInfo.getUserId(),user.getUserId())) {
-			return ResponseEntity.badRequest().body("该用户已存在");
+			return R.FAIL("该用户已存在");
 		}
 		if (StrUtil.isBlank(password)) {
 			user.setPassword(null);
@@ -151,7 +151,7 @@ public class SysUserController {
 			user.setPassword(passwordEncoder.encode(user.getPassword()));
 		}
 		sysUserService.updateUserAndUserRole(user);
-		return ResponseEntity.ok().build();
+		return  R.SUCCESS();
 	}
 
 	/**
@@ -160,27 +160,27 @@ public class SysUserController {
 	@SysLog("删除用户")
 	@DeleteMapping
 	@PreAuthorize("@pms.hasPermission('sys:user:delete')")
-	public ResponseEntity<String> delete(@RequestBody Long[] userIds){
+	public R<String> delete(@RequestBody Long[] userIds){
 		if (userIds.length == 0) {
-			return ResponseEntity.badRequest().body("请选择需要删除的用户");
+			return R.FAIL("请选择需要删除的用户");
 		}
 		if(ArrayUtil.contains(userIds, Constant.SUPER_ADMIN_ID)){
-			return ResponseEntity.badRequest().body("系统管理员不能删除");
+			return R.FAIL("系统管理员不能删除");
 		}
 		if(ArrayUtil.contains(userIds, SecurityUtils.getSysUser().getUserId())){
-			return ResponseEntity.badRequest().body("当前用户不能删除");
+			return R.FAIL("当前用户不能删除");
 		}
 		sysUserService.removeByIds(Arrays.asList(userIds));
-		return ResponseEntity.ok().build();
+		return  R.SUCCESS();
 	}
 
 	/**
 	 * 退出
 	 */
 	@PostMapping(value = "/logout")
-	public ResponseEntity<String> logout() {
+	public R<String> logout() {
 		SecurityContextHolder.clearContext();
-		return ResponseEntity.ok().build();
+		return  R.SUCCESS();
 	}
 
 

+ 1 - 1
yami-shop-sys/src/main/java/com/yami/shop/sys/model/SysMenu.java

@@ -82,7 +82,7 @@ public class SysMenu implements Serializable {
 	/**
 	 * 菜单图标
 	 */
-	private boolean hideInMenu;
+	private Integer hideInMenu;
 
 	/**
 	 * 排序

+ 1 - 1
yami-shop-sys/src/main/resources/mapper/SysMenuMapper.xml

@@ -9,7 +9,7 @@
 
 	<!-- 查询用户的所有菜单 -->
 	<select id="listMenuByUserId" resultType="com.yami.shop.sys.model.SysMenu">
-		SELECT DISTINCT m.menu_id AS menu_id,m.parent_id,m.name,url,m.type,m.icon,m.hideln_menu,m.component,m.order_num FROM tz_sys_user_role ur
+		SELECT DISTINCT m.menu_id AS menu_id,m.parent_id,m.name,url,m.type,m.icon,m.hide_in_menu,m.component,m.order_num FROM tz_sys_user_role ur
 			LEFT JOIN tz_sys_role_menu rm ON ur.role_id = rm.role_id LEFT JOIN tz_sys_menu m ON m.`menu_id` = rm.`menu_id`
 		WHERE  ur.user_id = #{userId} and m.type != 2 order by order_num
 	</select>