Browse Source

refactor(external): 重构中智接口模块结构并添加订单服务

- 将中智相关域对象从 ruoyi-modules/ruoyi-external 移至 ruoyi-api/ruoyi-api-external
- 添加 Auth2Controller 提供中智访问令牌获取接口
- 更新 docker-compose.yml 中的 MinIO 配置用户名密码和数据目录路径
- 添加订单通知和推送的数据传输对象 OrderNoticeDto 和 OrderPushDto
- 在 API 模块中添加 ruoyi-api-external 和 ruoyi-api-order 模块依赖
- 移除旧的 ruoyi-api-auth 模块并更新相关依赖配置
- 添加 ProductNoticeBo 商品状态通知业务对象
- 实现 RemoteExternalOrderService 远程订单服务接口
- 重构 ZhongZhiPullController 中的平台目录信息获取逻辑
- 修复产品服务中批量获取产品详情的查询方式
肖路 3 months ago
parent
commit
4c06ba6670
36 changed files with 514 additions and 192 deletions
  1. 2 1
      ruoyi-api/pom.xml
  2. 0 12
      ruoyi-api/ruoyi-api-auth/src/main/java/org/dromara/auth/api/RemoteAuthService.java
  3. 0 57
      ruoyi-api/ruoyi-api-auth/src/main/java/org/dromara/auth/api/domain/RemoteLoginVo.java
  4. 10 5
      ruoyi-api/ruoyi-api-bom/pom.xml
  5. 29 0
      ruoyi-api/ruoyi-api-external/pom.xml
  6. 1 1
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/Attribute.java
  7. 1 1
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/AttributeValue.java
  8. 1 2
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/Result.java
  9. 1 1
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/bo/DelMessagePoolBo.java
  10. 1 1
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/bo/GetMessagePoolBo.java
  11. 1 1
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/bo/GetProductDetailBo.java
  12. 1 1
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/bo/OrderNoticeBo.java
  13. 4 1
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/bo/OrderPushBo.java
  14. 23 0
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/bo/ProductNoticeBo.java
  15. 1 1
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/bo/ZZTokenBo.java
  16. 3 3
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/vo/ExternalProductVo.java
  17. 5 2
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/vo/OrderPushVo.java
  18. 1 1
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/vo/ProductImageVo.java
  19. 1 1
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/vo/ProductMessageInfo.java
  20. 1 1
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/vo/ProductPriceVo.java
  21. 1 1
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/vo/ProductPromiseVo.java
  22. 1 1
      ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/vo/ProductShelfStateVo.java
  23. 2 2
      ruoyi-api/ruoyi-api-order/pom.xml
  24. 25 0
      ruoyi-api/ruoyi-api-order/src/main/java/org/dromara/product/api/RemoteExternalOrderService.java
  25. 42 0
      ruoyi-api/ruoyi-api-order/src/main/java/org/dromara/product/api/domain/dto/OrderNoticeDto.java
  26. 75 0
      ruoyi-api/ruoyi-api-order/src/main/java/org/dromara/product/api/domain/dto/OrderPushDto.java
  27. 1 1
      ruoyi-auth/pom.xml
  28. 72 0
      ruoyi-auth/src/main/java/org/dromara/auth/controller/Auth2Controller.java
  29. 0 21
      ruoyi-auth/src/main/java/org/dromara/auth/dubbo/RemoteAuthServiceImpl.java
  30. 7 4
      ruoyi-modules/ruoyi-external/pom.xml
  31. 26 20
      ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/ZhongZhiPullController.java
  32. 101 42
      ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/ZhongZhiPushController.java
  33. 4 0
      ruoyi-modules/ruoyi-order/pom.xml
  34. 60 0
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/dubbo/RemoteExternalOrderServiceImpl.java
  35. 6 3
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/dubbo/RemoteProductServiceImpl.java
  36. 4 4
      script/docker/docker-compose.yml

+ 2 - 1
ruoyi-api/pom.xml

@@ -14,7 +14,8 @@
         <module>ruoyi-api-resource</module>
         <module>ruoyi-api-workflow</module>
         <module>ruoyi-api-product</module>
-	    <module>ruoyi-api-auth</module>
+        <module>ruoyi-api-external</module>
+	    <module>ruoyi-api-order</module>
     </modules>
 
     <artifactId>ruoyi-api</artifactId>

+ 0 - 12
ruoyi-api/ruoyi-api-auth/src/main/java/org/dromara/auth/api/RemoteAuthService.java

@@ -1,12 +0,0 @@
-package org.dromara.auth.api;
-
-import org.dromara.auth.api.domain.RemoteLoginVo;
-
-/**
- * @author
- * @date 2025/12/24 下午2:31
- */
-public interface RemoteAuthService {
-
-    RemoteLoginVo getAccessToken(String username, String password);
-}

+ 0 - 57
ruoyi-api/ruoyi-api-auth/src/main/java/org/dromara/auth/api/domain/RemoteLoginVo.java

@@ -1,57 +0,0 @@
-package org.dromara.auth.api.domain;
-
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * 登录验证信息
- *
- * @author Michelle.Chung
- */
-@Data
-public class RemoteLoginVo implements Serializable {
-
-    private final static long serialVersionUID = 1L;
-
-    /**
-     * 授权令牌
-     */
-    private String accessToken;
-
-    /**
-     * 刷新令牌
-     */
-    private String refreshToken;
-
-    /**
-     * 授权令牌 access_token 的有效期
-     */
-    private Long expireIn;
-
-    /**
-     * 刷新令牌 refresh_token 的有效期
-     */
-
-    private Long refreshExpireIn;
-
-    /**
-     * 应用id
-     */
-    private String clientId;
-
-    /**
-     * 令牌权限
-     */
-    private String scope;
-
-    /**
-     * 用户 openid
-     */
-    private String openid;
-
-    private Integer code;
-
-    private String msg;
-
-}

+ 10 - 5
ruoyi-api/ruoyi-api-bom/pom.xml

@@ -21,11 +21,6 @@
     <dependencyManagement>
         <dependencies>
 
-            <dependency>
-                <groupId>org.dromara</groupId>
-                <artifactId>ruoyi-api-auth</artifactId>
-                <version>${revision}</version>
-            </dependency>
             <!-- 系统接口 -->
             <dependency>
                 <groupId>org.dromara</groupId>
@@ -52,6 +47,16 @@
                 <artifactId>ruoyi-api-product</artifactId>
                 <version>${revision}</version>
             </dependency>
+            <dependency>
+                <groupId>org.dromara</groupId>
+                <artifactId>ruoyi-api-external</artifactId>
+                <version>${revision}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.dromara</groupId>
+                <artifactId>ruoyi-api-order</artifactId>
+                <version>${revision}</version>
+            </dependency>
 
         </dependencies>
     </dependencyManagement>

+ 29 - 0
ruoyi-api/ruoyi-api-external/pom.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>org.dromara</groupId>
+        <artifactId>ruoyi-api</artifactId>
+        <version>${revision}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ruoyi-api-external</artifactId>
+
+    <description>
+        ruoyi-api-external api接口模块,提供外部访问接口
+    </description>
+
+    <dependencies>
+
+        <!-- RuoYi Common Core-->
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-core</artifactId>
+        </dependency>
+
+
+    </dependencies>
+
+</project>

+ 1 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/domain/Attribute.java → ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/Attribute.java

@@ -1,4 +1,4 @@
-package org.dromara.external.controller.zhongzhi.domain;
+package org.dromara.external.api.zhongzhi.domain;
 
 import lombok.Data;
 

+ 1 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/domain/AttributeValue.java → ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/AttributeValue.java

@@ -1,4 +1,4 @@
-package org.dromara.external.controller.zhongzhi.domain;
+package org.dromara.external.api.zhongzhi.domain;
 
 import lombok.Data;
 

+ 1 - 2
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/domain/Result.java → ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/Result.java

@@ -1,8 +1,7 @@
-package org.dromara.external.controller.zhongzhi.domain;
+package org.dromara.external.api.zhongzhi.domain;
 
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import org.apache.dubbo.common.logger.FluentLogger;
 
 import java.io.Serial;
 import java.io.Serializable;

+ 1 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/domain/bo/DelMessagePoolBo.java → ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/bo/DelMessagePoolBo.java

@@ -1,4 +1,4 @@
-package org.dromara.external.controller.zhongzhi.domain.bo;
+package org.dromara.external.api.zhongzhi.domain.bo;
 
 import lombok.Data;
 

+ 1 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/domain/bo/GetMessagePoolBo.java → ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/bo/GetMessagePoolBo.java

@@ -1,4 +1,4 @@
-package org.dromara.external.controller.zhongzhi.domain.bo;
+package org.dromara.external.api.zhongzhi.domain.bo;
 
 import lombok.Data;
 

+ 1 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/domain/bo/GetProductDetailBo.java → ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/bo/GetProductDetailBo.java

@@ -1,4 +1,4 @@
-package org.dromara.external.controller.zhongzhi.domain.bo;
+package org.dromara.external.api.zhongzhi.domain.bo;
 
 import lombok.Data;
 

+ 1 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/domain/bo/OrderNoticeBo.java → ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/bo/OrderNoticeBo.java

@@ -1,4 +1,4 @@
-package org.dromara.external.controller.zhongzhi.domain.bo;
+package org.dromara.external.api.zhongzhi.domain.bo;
 
 import lombok.Data;
 

+ 4 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/domain/bo/OrderPushBo.java → ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/bo/OrderPushBo.java

@@ -1,4 +1,4 @@
-package org.dromara.external.controller.zhongzhi.domain.bo;
+package org.dromara.external.api.zhongzhi.domain.bo;
 
 import lombok.Data;
 
@@ -7,6 +7,9 @@ import java.util.List;
 @Data
 public class OrderPushBo extends ZZTokenBo{
 
+    // 1. 订单类型 Y
+    private String order_id;
+
     // 3. 订单单号 Y
     private String yggc_order;
 

+ 23 - 0
ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/bo/ProductNoticeBo.java

@@ -0,0 +1,23 @@
+package org.dromara.external.api.zhongzhi.domain.bo;
+
+import lombok.Data;
+
+/**
+ * @author
+ * @date 2025/12/30 下午5:27
+ */
+@Data
+public class ProductNoticeBo extends ZZTokenBo{
+    /**
+    * 商品编号
+    * */
+    private String sku;
+    /**
+    * 状态 商品状态变更情况 1:上架,0:下架
+    * */
+    private String status;
+    /**
+    * 状态变更信息
+    * */
+    private String message;
+}

+ 1 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/domain/bo/ZZTokenBo.java → ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/bo/ZZTokenBo.java

@@ -1,4 +1,4 @@
-package org.dromara.external.controller.zhongzhi.domain.bo;
+package org.dromara.external.api.zhongzhi.domain.bo;
 
 import lombok.Data;
 

+ 3 - 3
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/domain/vo/ExternalProductVo.java → ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/vo/ExternalProductVo.java

@@ -1,9 +1,9 @@
-package org.dromara.external.controller.zhongzhi.domain.vo;
+package org.dromara.external.api.zhongzhi.domain.vo;
 
 import lombok.Builder;
 import lombok.Data;
-import org.dromara.external.controller.zhongzhi.domain.Attribute;
-import org.dromara.external.controller.zhongzhi.domain.AttributeValue;
+import org.dromara.external.api.zhongzhi.domain.Attribute;
+import org.dromara.external.api.zhongzhi.domain.AttributeValue;
 
 import java.util.List;
 

+ 5 - 2
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/domain/vo/OrderPushVo.java → ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/vo/OrderPushVo.java

@@ -1,7 +1,8 @@
-package org.dromara.external.controller.zhongzhi.domain.vo;
+package org.dromara.external.api.zhongzhi.domain.vo;
 
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.List;
 
 /**
@@ -9,7 +10,9 @@ import java.util.List;
  * @date 2025/12/24 下午6:02
  */
 @Data
-public class OrderPushVo {
+public class OrderPushVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
     /**
     * 订单编号
     * */

+ 1 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/domain/vo/ProductImageVo.java → ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/vo/ProductImageVo.java

@@ -1,4 +1,4 @@
-package org.dromara.external.controller.zhongzhi.domain.vo;
+package org.dromara.external.api.zhongzhi.domain.vo;
 
 import lombok.Data;
 

+ 1 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/domain/vo/ProductMessageInfo.java → ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/vo/ProductMessageInfo.java

@@ -1,4 +1,4 @@
-package org.dromara.external.controller.zhongzhi.domain.vo;
+package org.dromara.external.api.zhongzhi.domain.vo;
 
 
 import lombok.Data;

+ 1 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/domain/vo/ProductPriceVo.java → ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/vo/ProductPriceVo.java

@@ -1,4 +1,4 @@
-package org.dromara.external.controller.zhongzhi.domain.vo;
+package org.dromara.external.api.zhongzhi.domain.vo;
 
 import lombok.Data;
 

+ 1 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/domain/vo/ProductPromiseVo.java → ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/vo/ProductPromiseVo.java

@@ -1,4 +1,4 @@
-package org.dromara.external.controller.zhongzhi.domain.vo;
+package org.dromara.external.api.zhongzhi.domain.vo;
 
 import lombok.Data;
 

+ 1 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/domain/vo/ProductShelfStateVo.java → ruoyi-api/ruoyi-api-external/src/main/java/org/dromara/external/api/zhongzhi/domain/vo/ProductShelfStateVo.java

@@ -1,4 +1,4 @@
-package org.dromara.external.controller.zhongzhi.domain.vo;
+package org.dromara.external.api.zhongzhi.domain.vo;
 
 import lombok.Data;
 

+ 2 - 2
ruoyi-api/ruoyi-api-auth/pom.xml → ruoyi-api/ruoyi-api-order/pom.xml

@@ -9,10 +9,10 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>ruoyi-api-auth</artifactId>
+    <artifactId>ruoyi-api-order</artifactId>
 
     <description>
-        ruoyi-api-auth
+        ruoyi-api-order 订单模块接口模块
     </description>
 
     <dependencies>

+ 25 - 0
ruoyi-api/ruoyi-api-order/src/main/java/org/dromara/product/api/RemoteExternalOrderService.java

@@ -0,0 +1,25 @@
+package org.dromara.product.api;
+
+import org.dromara.product.api.domain.dto.OrderNoticeDto;
+import org.dromara.product.api.domain.dto.OrderPushDto;
+
+/**
+ * @author
+ * @date 2025/12/30 下午7:09
+ */
+public interface RemoteExternalOrderService {
+    /**
+    * 推送订单
+    * */
+    OrderNoticeDto pushOrder(OrderPushDto bo);
+
+    /**
+    * 确认订单
+    * */
+    void confirmOrder(Long orderId);
+
+    /**
+    * 订单状态通知
+    * */
+    void notice(OrderNoticeDto bo);
+}

+ 42 - 0
ruoyi-api/ruoyi-api-order/src/main/java/org/dromara/product/api/domain/dto/OrderNoticeDto.java

@@ -0,0 +1,42 @@
+package org.dromara.product.api.domain.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author
+ * @date 2025/12/24 下午6:08
+ */
+@Data
+public class OrderNoticeDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /**
+    * 订单编号
+    * */
+    private String orderId;
+    /**
+    * 订单状态
+     * (100, "待付预付款"),
+     *
+     * (120, "待供应商发货"),
+     *
+     * (131, "供应商已发货(待供应商收货)"),
+     *
+     * (132, "已收货(待供应商发起验收)"),
+     *
+     * (149, "退款完成"),
+     *
+     * (150, "待采购人验收"),
+     *
+     * (151, "已验收"),
+     *
+     * (153, "待付款,(线下支付)待采购人确认付款(待上传支付凭证)"),
+     *
+     * (154, "已付款,(线下支付)采购人已上传正式支付凭证,待供应商确认收款"),
+     *
+     * (159, "已结算")
+    * */
+    private String orderState;
+}

+ 75 - 0
ruoyi-api/ruoyi-api-order/src/main/java/org/dromara/product/api/domain/dto/OrderPushDto.java

@@ -0,0 +1,75 @@
+package org.dromara.product.api.domain.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class OrderPushDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    // 1. 订单类型 Y
+    private String order_id;
+
+    // 3. 订单单号 Y
+    private String yggc_order;
+
+    // 4. 订单商品信息 Y
+//    private List<SkuItem> sku;
+    private String sku;
+
+    // 5-14. 收货与地址信息
+    private String name;           // 收货人名称 Y
+    private Integer province;      // 一级地址(省级编码) Y
+    private Integer city;          // 二级地址(市级编码) Y
+    private Integer county;        // 三级地址(区级编码) Y
+    private String address;        // 详细地址 Y
+    private String zip;            // 邮编 Y
+    private String phone;          // 座机号(与 mobile 二选一) Y
+    private String mobile;         // 手机号(与 phone 二选一) Y
+    private String email;          // 邮箱(可选)
+    private String remark;         // 备注(<100字)
+
+    // 15. 采购单位名称
+    private String dep_name;
+
+    // 16-25. 发票信息
+    private String invoice_title;           // 发票抬头 Y
+    private String invoice_type;            // 发票类型:1普通, 2增值税, 3电子 Y
+    private String invoice_org_code;         // 纳税人识别号 Y
+    private String invoice_name;            // 增值税收票人(invoiceType=2 时必填)
+    private String invoice_phone;           // 注册电话(invoiceType=2 时必填)
+    private String invoice_bank;            // 开户银行(invoiceType=2 时必填)
+    private String invoice_bank_code;        // 开户行账号(invoiceType=2 时必填)
+    private String invoice_address;         // 注册地址(invoiceType=2 时必填)
+    private String invoice_mobile;          // 收票联系电话(可选)
+    private String invoice_receipt_address;  // 收票地址(可选)
+
+    // 26-30. 其他订单信息
+    private String payment;        // 付款方式1:货到付款,2:集中支付, 3:在线支付, 4:支票 5:账期支付 6:先款后货 Y
+    private String order_price;     // 订单金额(含运费)Y
+    private String freight;        // 运费 Y
+    private String mode;           // 订单模式:1-协议价(默认), 2-团购, 3-特惠, 4-阶梯价(可选) Y
+    private String orderCode;      // 卖场订单编号   Y
+
+
+    // ===== 内部静态类:商品项(含延保) =====
+    @Data
+    public static class SkuItem {
+        private String sku;                    // 商品编号
+        private Integer num;                   // 商品数量
+        private Integer price;                 // 商品价格
+        private Integer mode;                  // 价格模式(同订单 mode 含义)
+        private List<YanbaoItem> yanbao;       // 延保服务(可选)
+
+        @Data
+        public static class YanbaoItem {
+            private String sku;                // 延保编号
+            private Integer price;             // 延保价格
+            private Integer num;               // 延保数量
+        }
+    }
+
+}

+ 1 - 1
ruoyi-auth/pom.xml

@@ -93,7 +93,7 @@
         </dependency>
         <dependency>
             <groupId>org.dromara</groupId>
-            <artifactId>ruoyi-api-auth</artifactId>
+            <artifactId>ruoyi-api-external</artifactId>
         </dependency>
 
         <!-- 自定义负载均衡(多团队开发使用) -->

+ 72 - 0
ruoyi-auth/src/main/java/org/dromara/auth/controller/Auth2Controller.java

@@ -0,0 +1,72 @@
+package org.dromara.auth.controller;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.crypto.SecureUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.auth.domain.vo.LoginVo;
+import org.dromara.auth.service.IAuthStrategy;
+import org.dromara.common.redis.utils.RedisUtils;
+import org.dromara.external.api.zhongzhi.domain.Result;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.Duration;
+import java.time.format.DateTimeFormatter;
+import java.util.Map;
+import java.util.Objects;
+
+import static org.dromara.common.core.constant.GlobalConstants.GLOBAL_REDIS_KEY;
+
+/**
+ * @author
+ * @date 2025/8/4 下午6:46
+ */
+@Slf4j
+@SaIgnore
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/auth2")
+public class Auth2Controller {
+
+
+    /**
+     * 获取 Access Token
+     * @param username 用户名
+     * @param password 密码(明文,生产环境建议加密后再传)
+     * @return 包含 access_token 和 expires_at 的 Result,失败则 success=false
+     */
+    @PostMapping("/zhongzhi/access_token")
+    public Result getAccessToken(String timestamp, String username, String password, String sign) {
+        // 2. 生成 sign = MD5(username + password + timestamp + password).toLowerCase()
+        String signStr = username + password + timestamp + password;
+        String sign1 = SecureUtil.md5(signStr).toLowerCase();
+
+        if(Objects.equals(sign1,sign)){
+            LoginVo loginVo = IAuthStrategy.getAccessToken(username, password);
+            if(ObjectUtil.isEmpty(loginVo)){
+                return Result.fail(5002,"授权失败");
+            }
+            if(ObjectUtil.isNotEmpty(loginVo.getMsg())){
+                return Result.fail(loginVo.getCode(),loginVo.getMsg());
+            }
+            DateTime date = DateUtil.offsetSecond(DateUtil.date(), (int) StpUtil.getTokenTimeout(loginVo.getAccessToken()));
+            String format = DateUtil.format(date, "yyyy-MM-dd HH:mm:ss");
+            return  Result.tokenOk(loginVo.getAccessToken(), format);
+        } else  {
+            return Result.fail(5004,"签名错误,请检查后重试");
+        }
+    }
+
+
+
+}

+ 0 - 21
ruoyi-auth/src/main/java/org/dromara/auth/dubbo/RemoteAuthServiceImpl.java

@@ -1,21 +0,0 @@
-package org.dromara.auth.dubbo;
-
-import cn.hutool.core.bean.BeanUtil;
-import org.dromara.auth.api.RemoteAuthService;
-import org.dromara.auth.api.domain.RemoteLoginVo;
-import org.dromara.auth.domain.vo.LoginVo;
-import org.dromara.auth.service.IAuthStrategy;
-
-/**
- * @author
- * @date 2025/12/24 下午2:35
- */
-public class RemoteAuthServiceImpl implements RemoteAuthService {
-
-
-    @Override
-    public RemoteLoginVo getAccessToken(String username, String password) {
-        LoginVo loginVo = IAuthStrategy.getAccessToken(username, password);
-        return BeanUtil.toBean(loginVo, RemoteLoginVo.class);
-    }
-}

+ 7 - 4
ruoyi-modules/ruoyi-external/pom.xml

@@ -102,17 +102,20 @@
 
         <dependency>
             <groupId>org.dromara</groupId>
-            <artifactId>ruoyi-api-auth</artifactId>
+            <artifactId>ruoyi-api-resource</artifactId>
         </dependency>
 
         <dependency>
             <groupId>org.dromara</groupId>
-            <artifactId>ruoyi-api-resource</artifactId>
+            <artifactId>ruoyi-api-product</artifactId>
         </dependency>
-
         <dependency>
             <groupId>org.dromara</groupId>
-            <artifactId>ruoyi-api-product</artifactId>
+            <artifactId>ruoyi-api-external</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-api-order</artifactId>
         </dependency>
 
         <dependency>

+ 26 - 20
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/ZhongZhiPullController.java

@@ -11,7 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.redis.utils.RedisUtils;
 import org.dromara.external.controller.ExternalItemController;
-import org.dromara.external.controller.zhongzhi.domain.Result;
+import org.dromara.external.api.zhongzhi.domain.Result;
 import org.dromara.external.domain.ExternalProductBrand;
 import org.dromara.external.domain.ExternalProductCategory;
 import org.dromara.external.service.IExternalProductBrandService;
@@ -23,6 +23,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.time.Duration;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import static org.dromara.common.core.constant.GlobalConstants.GLOBAL_REDIS_KEY;
@@ -40,6 +42,7 @@ import static org.dromara.common.core.constant.GlobalConstants.GLOBAL_REDIS_KEY;
 @RequestMapping("/zhongzhi/pull")
 public class ZhongZhiPullController {
     private final String url = "http://gcytapi.gcycloud.cn/";
+//    private final String url = "http://gcyts.gcycloud.cn/";
 
     private final String key = GLOBAL_REDIS_KEY+"external:zhongzhi:token:";
 
@@ -61,7 +64,7 @@ public class ZhongZhiPullController {
     public static void main(String[] args) {
 //        HttpResponse response = HttpUtil.createPost("http://127.0.0.1:8080/external/zhongzhi/pull/gyssc/token")
 //            .execute();
-        HttpResponse response2 = HttpUtil.createPost("http://127.0.0.1:8080/external/zhongzhi/pull/gyssc/platform/info")
+        HttpResponse response2 = HttpUtil.createPost("http://127.0.0.1:8080/external/zhongzhi/pull/gyssc/platform/brands")
             .execute();
         System.out.println(response2.body());
     }
@@ -115,27 +118,31 @@ public class ZhongZhiPullController {
     * 获取平台品目信息接口
     * */
     @PostMapping("/gyssc/platform/catalogs")
-    public Result getPlatformCatalogs(String access_token) {
+    public Result getPlatformCatalogs() {
         HttpRequest post = HttpUtil.createPost(url + "gyssc/platform/catalogs");
-        post.header("Authorization", "Bearer " + access_token);
+        String accessToken = this.getAccessToken();
+        post.form("token", accessToken);
+        post.form("platformCode", code);
         String body = post.execute().body();
-        Result<Map<String,String>> result = JSONUtil.toBean(body, Result.class);
+        Result<List<Map<String,String>>> result = JSONUtil.toBean(body, Result.class);
         if (!result.getSuccess()) {
             return Result.fail(result.getCode(), result.getDesc());
         }
-        result.getResult().forEach((k,v)->{
+        result.getResult().forEach(map->{
+
             boolean exists = externalProductCategoryService.exists(Wrappers.lambdaQuery(ExternalProductCategory.class)
-                .eq(ExternalProductCategory::getCategoryNo, k));
+                .eq(ExternalProductCategory::getCategoryNo, map.get("interfaceCode")));
 
             ExternalProductCategory externalProductCategory = new ExternalProductCategory();
-            externalProductCategory.setPlatformCode(code);
-            externalProductCategory.setCategoryName(v);
-            externalProductCategory.setCategoryNo(k);
+            externalProductCategory.setDataSource(code);
+            externalProductCategory.setCategoryName(map.get("name"));
+            externalProductCategory.setClassDescription(map.get("treeNames"));
+            externalProductCategory.setCategoryNo(map.get("interfaceCode"));
             if(!exists){
                 externalProductCategoryService.save(externalProductCategory);
             }else {
                 externalProductCategoryService.update(externalProductCategory,Wrappers.lambdaUpdate(ExternalProductCategory.class)
-                    .eq(ExternalProductCategory::getCategoryNo, k));
+                    .eq(ExternalProductCategory::getCategoryNo, map.get("interfaceCode")));
             }
 
         });
@@ -162,7 +169,6 @@ public class ZhongZhiPullController {
     @PostMapping("/gyssc/platform/catalogsParam")
     public Result getStandardCatalogs(String access_token) {
         HttpRequest post = HttpUtil.createPost(url + "gyssc/platform/catalogsParam");
-        post.header("Authorization", "Bearer " + access_token);
         String body = post.execute().body();
         Result result = JSONUtil.toBean(body, Result.class);
         if (!result.getSuccess()) {
@@ -174,10 +180,12 @@ public class ZhongZhiPullController {
     /**
     * 获取品牌信息接口
     * */
-    @PostMapping("/brands")
-    public Result getBrands(String access_token) {
-        HttpRequest post = HttpUtil.createPost(url + "brands");
-        post.header("Authorization", "Bearer " + access_token);
+    @PostMapping("/gyssc/platform/brands")
+    public Result getBrands() {
+        HttpRequest post = HttpUtil.createPost(url + "gyssc/platform/brands");
+        String accessToken = this.getAccessToken();
+        post.form("token", accessToken);
+        post.form("platformCode", code);
         String body = post.execute().body();
         Result<Map<String,String>> result = JSONUtil.toBean(body, Result.class);
         if (!result.getSuccess()) {
@@ -187,7 +195,7 @@ public class ZhongZhiPullController {
             boolean exists = externalProductBrandService.exists(Wrappers.lambdaQuery(ExternalProductBrand.class)
                 .eq(ExternalProductBrand::getBrandNo, k));
                 ExternalProductBrand externalProductBrand = new ExternalProductBrand();
-                externalProductBrand.setPlatformCode(code);
+                externalProductBrand.setDataSource(code);
                 externalProductBrand.setBrandName(v);
                 externalProductBrand.setBrandNo(k);
                 if(!exists){
@@ -205,7 +213,6 @@ public class ZhongZhiPullController {
     @PostMapping("/gyssc/platform/getBigdataUrl")
     public Result getBigdataUrl(String access_token) {
         HttpRequest post = HttpUtil.createPost(url + "gyssc/platform/getBigdataUrl");
-        post.header("Authorization", "Bearer " + access_token);
         String body = post.execute().body();
         Result result = JSONUtil.toBean(body, Result.class);
         if (!result.getSuccess()) {
@@ -219,7 +226,7 @@ public class ZhongZhiPullController {
     @PostMapping("/gyssc/platform/getPushLog")
     public Result getPushLog(String access_token) {
         HttpRequest post = HttpUtil.createPost(url + "gyssc/platform/getPushLog");
-        post.header("Authorization", "Bearer " + access_token);
+
         String body = post.execute().body();
         Result result = JSONUtil.toBean(body, Result.class);
         if (!result.getSuccess()) {
@@ -234,7 +241,6 @@ public class ZhongZhiPullController {
     @PostMapping("/gyssc/platform/goodsPriceSource")
     public Result getGoodsPriceSource(String access_token) {
         HttpRequest post = HttpUtil.createPost(url + "gyssc/platform/goodsPriceSource");
-        post.header("Authorization", "Bearer " + access_token);
         String body = post.execute().body();
         Result result = JSONUtil.toBean(body, Result.class);
         if (!result.getSuccess()) {

+ 101 - 42
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongzhi/ZhongZhiPushController.java

@@ -1,21 +1,29 @@
 package org.dromara.external.controller.zhongzhi;
 
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.UUID;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.crypto.SecureUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboReference;
-import org.dromara.auth.api.RemoteAuthService;
-import org.dromara.auth.api.domain.RemoteLoginVo;
-import org.dromara.external.controller.zhongzhi.domain.Attribute;
-import org.dromara.external.controller.zhongzhi.domain.Result;
-import org.dromara.external.controller.zhongzhi.domain.bo.*;
-import org.dromara.external.controller.zhongzhi.domain.vo.*;
+import org.dromara.common.json.utils.JsonUtils;
+import org.dromara.external.api.zhongzhi.domain.Attribute;
+import org.dromara.external.api.zhongzhi.domain.Result;
+import org.dromara.external.api.zhongzhi.domain.bo.*;
+import org.dromara.external.api.zhongzhi.domain.vo.*;
+import org.dromara.external.domain.ExternalProductCategory;
+import org.dromara.external.service.IExternalProductBrandService;
+import org.dromara.external.service.IExternalProductCategoryService;
+import org.dromara.product.api.RemoteExternalOrderService;
 import org.dromara.product.api.RemoteProductService;
 import org.dromara.product.api.domain.ProductChangeLogApiVo;
 import org.dromara.product.api.domain.ProductVo;
+import org.dromara.product.api.domain.dto.OrderNoticeDto;
+import org.dromara.product.api.domain.dto.OrderPushDto;
 import org.dromara.system.api.RemoteUserService;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -23,6 +31,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 
@@ -39,12 +48,17 @@ import java.util.Objects;
 @RequestMapping("/zhongzhi/api")
 public class ZhongZhiPushController {
 
-    @DubboReference
-    private final RemoteAuthService remoteAuthService;
 
     @DubboReference
     private final RemoteProductService remoteProductService;
 
+    @DubboReference
+    private final RemoteExternalOrderService remoteOrderService;
+
+    private final IExternalProductCategoryService externalProductCategoryService;
+
+    private final IExternalProductBrandService externalProductBrandService;
+
     /**
      * 校验token
      * */
@@ -61,35 +75,6 @@ public class ZhongZhiPushController {
         return null;
     }
 
-
-    /**
-     * 获取 Access Token
-     * @param username 用户名
-     * @param password 密码(明文,生产环境建议加密后再传)
-     * @return 包含 access_token 和 expires_at 的 Result,失败则 success=false
-     */
-    @PostMapping("/auth2/access_token")
-    public Result getAccessToken(String timestamp, String username, String password, String sign) {
-        // 2. 生成 sign = MD5(username + password + timestamp + password).toLowerCase()
-        String signStr = username + password + timestamp + password;
-        String sign1 = SecureUtil.md5(signStr).toLowerCase();
-
-        if(Objects.equals(sign1,sign)){
-            RemoteLoginVo loginVo= remoteAuthService.getAccessToken(username, password);
-            if(ObjectUtil.isEmpty(loginVo)){
-                return Result.fail(5002,"授权失败");
-            }
-            if(ObjectUtil.isNotEmpty(loginVo.getMsg())){
-                return Result.fail(loginVo.getCode(),loginVo.getMsg());
-            }
-            DateTime date = DateUtil.offsetSecond(DateUtil.date(), (int) StpUtil.getTokenTimeout(loginVo.getAccessToken()));
-            String format = DateUtil.format(date, "yyyy-MM-dd HH:mm:ss");
-            return  Result.tokenOk(loginVo.getAccessToken(), format);
-        } else  {
-            return Result.fail(5004,"签名错误,请检查后重试");
-        }
-    }
-
     /**
     * 获取电商商品变动消息
     * */
@@ -120,7 +105,7 @@ public class ZhongZhiPushController {
         return Result.ok(productMessageInfos);
     }
     /**
-    * 获取商品详情
+    * 获取商品详情 362031
     * */
     @PostMapping("/product/detail_standard")
     public Result<ExternalProductVo> detailStandard(GetProductDetailBo bo) {
@@ -133,6 +118,19 @@ public class ZhongZhiPushController {
         }
 
         ProductVo productDetail = remoteProductService.getProductDetail(Long.valueOf(bo.getSku()));
+        //获取第三方分类
+//        ExternalProductBrand one = externalProductBrandService.getOne(Wrappers.lambdaQuery(ExternalProductBrand.class)
+//            .eq(ExternalProductBrand::getProductBrandId, productDetail.getBrandId())
+//            .eq(ExternalProductBrand::getPlatformCode, bo.getPlatformCode())
+//            .last("limit 1")
+//        );
+        ExternalProductCategory one = externalProductCategoryService.getOne(Wrappers.lambdaQuery(ExternalProductCategory.class)
+            .eq(ExternalProductCategory::getProductCategoryId, productDetail.getBottomCategoryId())
+            .eq(ExternalProductCategory::getDataSource, bo.getPlatformCode())
+            .last("limit 1")
+        );
+
+
         ExternalProductVo externalProductVo = ExternalProductVo.builder()
             .sku(String.valueOf(productDetail.getId()))
             .url(productDetail.getProductImage())
@@ -145,18 +143,22 @@ public class ZhongZhiPushController {
             .product_area(null)
             .upc(productDetail.getUpcBarcode())
             .unit(productDetail.getUnitName())
-            .category(productDetail.getCategoryName())
+            .category(null)
             .service(productDetail.getAfterSalesService())
             .code_69(null)
             .introduction(productDetail.getMainLibraryIntro())
             .build();
+        if(ObjectUtil.isNotEmpty(one)){
+            externalProductVo.setCategory(one.getCategoryNo());
+        }
+
         return Result.ok(externalProductVo);
     }
 
     /**
     * 获取商品参数信息
     * */
-    @PostMapping("/product/ product_attributes_standard")
+    @PostMapping("/product/product_attributes_standard")
     public Result<Attribute> productAttributesStandard(GetProductDetailBo bo) {
         Result result = checkToken(bo.getToken(), bo.getPlatformCode());
         if(ObjectUtil.isNotEmpty(result)){
@@ -256,8 +258,8 @@ public class ZhongZhiPushController {
         List<ProductPriceVo> prices = productDetails.stream().map(productVo -> {
             ProductPriceVo productPriceVo = new ProductPriceVo();
             productPriceVo.setSku(String.valueOf(productVo.getId()));
-            productPriceVo.setPrice(productVo.getMarketPrice());
-            productPriceVo.setMall_price(productVo.getMemberPrice());
+            productPriceVo.setPrice(productVo.getMemberPrice());
+            productPriceVo.setMall_price(productVo.getMarketPrice());
             productPriceVo.setStock(String.valueOf(productVo.getTotalInventory()));
             return productPriceVo;
         }).toList();
@@ -296,6 +298,7 @@ public class ZhongZhiPushController {
         if(ObjectUtil.isEmpty(bo.getSku())){
             return Result.fail(5006,"订单商品不能为空");
         }
+        List<OrderPushBo.SkuItem> sku = JsonUtils.parseArray(bo.getSku(), OrderPushBo.SkuItem.class);
         if(ObjectUtil.isEmpty(bo.getName())){
             return Result.fail(5006,"收货人名称不能为空");
         }
@@ -358,10 +361,42 @@ public class ZhongZhiPushController {
         if(ObjectUtil.isEmpty(bo.getOrderCode())){
             return Result.fail(5006,"卖场订单编号不能为空");
         }
+        OrderPushDto dto = BeanUtil.toBean(bo, OrderPushDto.class);
+//        remoteOrderService.pushOrder(dto);
         OrderPushVo orderPushVo = new OrderPushVo();
+        orderPushVo.setOrderPrice(bo.getOrder_price());
+        List<OrderPushVo.Sku> list = sku.stream().map(skuItem -> {
+            OrderPushVo.Sku skuVo = new OrderPushVo.Sku();
+            skuVo.setSku(skuItem.getSku());
+            skuVo.setNum(String.valueOf(skuItem.getNum()));
+            skuVo.setPrice(String.valueOf(skuItem.getPrice()));
+            return skuVo;
+        }).toList();
+        orderPushVo.setMall_order_id(UUID.randomUUID().toString());
+        orderPushVo.setSku(list);
+//        sku.setSku("1");
+//        sku.setNum(bo.get);
+//        orderPushVo.setSku();
+
         return Result.ok(orderPushVo);
     }
 
+    /**
+    * 确认接收订单
+    * */
+    @PostMapping("/order/confirm")
+    public Result confirm(OrderPushBo bo) {
+        Result result = checkToken(bo.getToken(),bo.getPlatformCode());
+        if(ObjectUtil.isNotEmpty(result)){
+            return result;
+        }
+        if(ObjectUtil.isEmpty(bo.getOrder_id())){
+            return Result.fail(5006,"订单编号不能为空");
+        }
+//        remoteOrderService.confirmOrder(Long.valueOf(bo.getOrder_id()));
+        return Result.ok("成功确认接收订单",null);
+    }
+
     /**
     * 订单状态通知接口
     * */
@@ -377,9 +412,33 @@ public class ZhongZhiPushController {
         if(ObjectUtil.isEmpty(bo.getOrderState())){
             return Result.fail(5006,"订单状态不能为空");
         }
+        OrderNoticeDto dto = BeanUtil.toBean(bo, OrderNoticeDto.class);
+//        remoteOrderService.notice(dto);
         return Result.ok("成功收到通知",null);
     }
 
+    /**
+    * 商品状态通知接口
+    * */
+    @PostMapping("/product/notice")
+    public Result notice(ProductNoticeBo bo) {
+        Result result = checkToken(bo.getToken(),bo.getPlatformCode());
+        if(ObjectUtil.isNotEmpty(result)){
+            return result;
+        }
+        if(ObjectUtil.isEmpty(bo.getSku())){
+            return Result.fail(5006,"商品编号不能为空");
+        }
+        if(ObjectUtil.isEmpty(bo.getStatus())){
+            return Result.fail(5006,"商品状态不能为空");
+        }
+        if(ObjectUtil.isEmpty(bo.getMessage())){
+            return Result.fail(5006,"商品状态通知不能为空");
+        }
+        return Result.ok("成功收到通知",null);
+    }
+
+
 
 
 

+ 4 - 0
ruoyi-modules/ruoyi-order/pom.xml

@@ -108,6 +108,10 @@
             <groupId>org.dromara</groupId>
             <artifactId>ruoyi-api-workflow</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-api-order</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 60 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/dubbo/RemoteExternalOrderServiceImpl.java

@@ -0,0 +1,60 @@
+package org.dromara.order.dubbo;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.order.domain.bo.OrderProductBo;
+import org.dromara.order.service.IOrderProductService;
+import org.dromara.product.api.RemoteExternalOrderService;
+import org.dromara.product.api.domain.dto.OrderNoticeDto;
+import org.dromara.product.api.domain.dto.OrderPushDto;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author
+ * @date 2025/12/30 下午7:12
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+@DubboService
+public class RemoteExternalOrderServiceImpl implements RemoteExternalOrderService {
+
+     private final IOrderProductService orderProductService;
+
+    /**
+     * 推送订单
+     *
+     * @param dto
+     */
+    @Override
+    public OrderNoticeDto pushOrder(OrderPushDto dto) {
+        OrderProductBo  bo = new OrderProductBo();
+//         bo.setOrderNo(dto.getOrder_id());
+//         bo.setProductNo(dto.getSku());
+//         bo.setProductName(dto.getName());
+//         bo.setProductUnit(dto.getMode());
+//        orderProductService.insertByBo(bo);
+        return null;
+    }
+
+    /**
+     * 确认订单
+     *
+     * @param orderId
+     */
+    @Override
+    public void confirmOrder(Long orderId) {
+
+    }
+
+    /**
+     * 订单状态通知
+     *
+     * @param bo
+     */
+    @Override
+    public void notice(OrderNoticeDto bo) {
+
+    }
+}

+ 6 - 3
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/dubbo/RemoteProductServiceImpl.java

@@ -15,7 +15,9 @@ import org.dromara.product.service.IProductBaseService;
 import org.dromara.product.service.IProductChangeLogService;
 import org.springframework.stereotype.Service;
 
+import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 产品基础信息服务
@@ -61,9 +63,10 @@ public class RemoteProductServiceImpl implements RemoteProductService {
      */
     @Override
     public List<ProductVo> getProductDetails(String productIds) {
-        ProductBaseBo productBaseBo = new ProductBaseBo();
-        productBaseBo.setProductIds(productIds);
-        List<ProductBaseVo> productBaseVos = productBaseService.queryList(productBaseBo);
+        String[] split = productIds.split(",");
+        List<ProductBaseVo> productBaseVos = Arrays.stream(split).map(productId ->
+            productBaseService.queryById(Long.valueOf(productId))
+        ).collect(Collectors.toList());
         return BeanUtil.copyToList(productBaseVos, ProductVo.class);
     }
 

+ 4 - 4
script/docker/docker-compose.yml

@@ -73,9 +73,9 @@ services:
       # 时区上海
       TZ: Asia/Shanghai
       # 管理后台用户名
-      MINIO_ROOT_USER: ruoyi
+      MINIO_ROOT_USER: youyida
       # 管理后台密码,最小8个字符
-      MINIO_ROOT_PASSWORD: ruoyi123
+      MINIO_ROOT_PASSWORD: youyida@123456
       # https需要指定域名
       #MINIO_SERVER_URL: "https://xxx.com:9000"
       #MINIO_BROWSER_REDIRECT_URL: "https://xxx.com:9001"
@@ -87,9 +87,9 @@ services:
       MINIO_COMPRESS_MIME_TYPES: ""
     volumes:
       # 映射当前目录下的data目录至容器内/data目录
-      - /docker/minio/data:/data
+      - /upload/docker/minio/data:/data
       # 映射配置目录
-      - /docker/minio/config:/root/.minio/
+      - /upload/docker/minio/config:/root/.minio/
     command: server --address ':9000' --console-address ':9001' /data  # 指定容器中的目录 /data
     privileged: true
     network_mode: "host"