浏览代码

feat:订单查询接口

zhangwei 1 周之前
父节点
当前提交
9397e908a7
共有 100 个文件被更改,包括 1166 次插入261 次删除
  1. 41 0
      edu-travel-adapter/edu-travel-adapter-order/pom.xml
  2. 20 0
      edu-travel-adapter/edu-travel-adapter-order/src/main/java/edu/travel/adapter/service/order/OrderItemAdapter.java
  3. 1 0
      edu-travel-adapter/pom.xml
  4. 4 1
      edu-travel-common/edu-travel-common-openfeign/pom.xml
  5. 1 0
      edu-travel-remote/edu-travel-remote-commodity/pom.xml
  6. 45 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/AddReviewDto.java
  7. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/AddShopCartDto.java
  8. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/BaseDto.java
  9. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/GetProductByTypeDto.java
  10. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/ProductSpecDto.java
  11. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/SearchProductDto.java
  12. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/SearchRecordListDto.java
  13. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/ShopTypeDto.java
  14. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/UpdateAddressDto.java
  15. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ProductImageVo.java
  16. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ProductSkuVo.java
  17. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ProductSpecVo.java
  18. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/SearchRecordsVo.java
  19. 1 2
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopAddressVo.java
  20. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopCartListVo.java
  21. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopFavoriteVo.java
  22. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopParametersVo.java
  23. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopProductVo.java
  24. 2 2
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopReviewVo.java
  25. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopSkuSpecValueVo.java
  26. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopTypeVo.java
  27. 3 7
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/SpecOneVo.java
  28. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/SpecSortVo.java
  29. 1 1
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/SpecValueSortVo.java
  30. 2 2
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/SpecValueVo.java
  31. 70 0
      edu-travel-remote/edu-travel-remote-order/pom.xml
  32. 28 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/AddShopOrderDto.java
  33. 15 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/GetOrderItemDto.java
  34. 11 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/ShowOrderInfoDto.java
  35. 20 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/order/ShopOrderItemRemoteController.java
  36. 64 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/vo/OrderItemVo.java
  37. 40 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/vo/ShopSnapshotVo.java
  38. 108 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/vo/ShowOrderInfoVo.java
  39. 1 0
      edu-travel-remote/pom.xml
  40. 5 0
      edu-travel-service/edu-travel-service-commodity/pom.xml
  41. 0 41
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopMgLabel.java
  42. 5 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopProductParameters.java
  43. 5 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopSpec.java
  44. 0 7
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/mapper/ShopMgLabelMapper.java
  45. 2 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/mapper/ShopProductSpecMapper.java
  46. 3 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopAddressService.java
  47. 3 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopCategoryService.java
  48. 2 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopFavoriteService.java
  49. 0 8
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopMgLabelService.java
  50. 2 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopParametersService.java
  51. 3 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductService.java
  52. 1 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductSkuService.java
  53. 3 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductSpecService.java
  54. 4 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopReviewService.java
  55. 2 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopSearchRecordsService.java
  56. 3 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopShoppingCartService.java
  57. 3 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopAddressServiceImpl.java
  58. 3 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopCategoryServiceImpl.java
  59. 2 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopFavoriteServiceImpl.java
  60. 0 12
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopMgLabelServiceImpl.java
  61. 2 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopParametersServiceImpl.java
  62. 3 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductServiceImpl.java
  63. 1 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductSkuServiceImpl.java
  64. 2 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductSpecServiceImpl.java
  65. 56 7
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopReviewServiceImpl.java
  66. 2 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopSearchRecordsServiceImpl.java
  67. 5 5
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopShoppingCartServiceImpl.java
  68. 0 20
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/utils/StringToListUtil.java
  69. 26 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/utils/StringUtil.java
  70. 3 4
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopAddressController.java
  71. 3 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopCategoryController.java
  72. 2 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopFavoriteController.java
  73. 0 23
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopMgLabelController.java
  74. 2 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopParametersController.java
  75. 3 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductController.java
  76. 11 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductSkuController.java
  77. 3 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductSpecController.java
  78. 13 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopReviewController.java
  79. 2 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopSearchRecordsController.java
  80. 3 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopShoppingCartController.java
  81. 0 22
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopMgLabelMapper.xml
  82. 2 1
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductParametersMapper.xml
  83. 6 3
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductSpecMapper.xml
  84. 2 1
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopSpecMapper.xml
  85. 5 0
      edu-travel-service/edu-travel-service-order/pom.xml
  86. 2 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/OrderApplication.java
  87. 32 3
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/controller/ShopOrderController.java
  88. 39 1
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/controller/ShopOrderItemController.java
  89. 5 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/controller/ShopOrderTypeChangeController.java
  90. 10 1
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/entity/ShopOrder.java
  91. 8 1
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/entity/ShopOrderItem.java
  92. 9 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/ShopOrderService.java
  93. 67 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/impl/ShopOrderServiceImpl.java
  94. 19 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/utils/ObjectUtils.java
  95. 28 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/utils/PageUtil.java
  96. 36 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/utils/RedisUtil.java
  97. 26 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/utils/StringUtil.java
  98. 16 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/utils/TokenData.java
  99. 161 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/utils/TreeUtils.java
  100. 3 2
      edu-travel-service/edu-travel-service-order/src/main/resources/mapper/ShopOrderItemMapper.xml

+ 41 - 0
edu-travel-adapter/edu-travel-adapter-order/pom.xml

@@ -0,0 +1,41 @@
+<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">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>edu.travel</groupId>
+        <artifactId>edu-travel-adapter</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>edu-travel-adapter-order</artifactId>
+    <packaging>jar</packaging>
+
+    <name>edu-travel-adapter-order</name>
+    <url>http://maven.apache.org</url>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-remote-order</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-common-adapter</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+</project>

+ 20 - 0
edu-travel-adapter/edu-travel-adapter-order/src/main/java/edu/travel/adapter/service/order/OrderItemAdapter.java

@@ -0,0 +1,20 @@
+package edu.travel.adapter.service.order;
+
+import edu.travel.adapter.annotation.AdapterAnnotation;
+import edu.travel.remote.dto.GetOrderItemDto;
+import edu.travel.remote.order.ShopOrderItemRemoteController;
+import edu.travel.remote.vo.OrderItemVo;
+import edu.travel.rpc.RPCBaseResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class OrderItemAdapter {
+    @Autowired
+    private ShopOrderItemRemoteController shopOrderItemRemoteController;
+
+    @AdapterAnnotation
+    public RPCBaseResponse<OrderItemVo> getOrderItemVo(GetOrderItemDto params) {
+        return shopOrderItemRemoteController.getOrderItemVo(params);
+    }
+}

+ 1 - 0
edu-travel-adapter/pom.xml

@@ -15,6 +15,7 @@
     <modules>
         <module>edu-travel-adapter-upload</module>
         <module>edu-travel-adapter-tenant</module>
+        <module>edu-travel-adapter-order</module>
     </modules>
 
     <properties>

+ 4 - 1
edu-travel-common/edu-travel-common-openfeign/pom.xml

@@ -26,7 +26,10 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>io.github.openfeign</groupId>
+            <artifactId>feign-httpclient</artifactId>
+        </dependency>
         <!-- 或使用 OkHttp -->
         <dependency>
             <groupId>io.github.openfeign</groupId>

+ 1 - 0
edu-travel-remote/edu-travel-remote-commodity/pom.xml

@@ -66,5 +66,6 @@
             <artifactId>edu-travel-remote-tenant</artifactId>
             <version>1.0-SNAPSHOT</version>
         </dependency>
+
     </dependencies>
 </project>

+ 45 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/AddReviewDto.java

@@ -0,0 +1,45 @@
+package edu.travel.remote.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 类功能描述:
+ *  新增评论
+ * @author 大春
+ * @date 2025/03/04
+ */
+
+@Data
+public class AddReviewDto {
+    /**
+     * 订单号
+     */
+    private String orderId;
+
+    /**
+     *  评论内容
+     */
+    private String content;
+
+    /**
+     * 评论图片
+     */
+    private List<String> image;
+
+    /**
+     * 商品ID
+     */
+    private String productId;
+
+    /**
+     * sku
+     */
+    private String skuId;
+
+    /**
+     * 评级1-5
+     */
+    private Integer rating;
+}

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/dto/AddShopCartDto.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/AddShopCartDto.java

@@ -1,4 +1,4 @@
-package edu.travel.dto;
+package edu.travel.remote.dto;
 
 import lombok.Data;
 

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/dto/BaseDto.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/BaseDto.java

@@ -1,4 +1,4 @@
-package edu.travel.dto;
+package edu.travel.remote.dto;
 
 import edu.travel.po.PagePO;
 import lombok.Data;

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/dto/GetProductByTypeDto.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/GetProductByTypeDto.java

@@ -1,4 +1,4 @@
-package edu.travel.dto;
+package edu.travel.remote.dto;
 
 import lombok.Data;
 

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/dto/ProductSpecDto.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/ProductSpecDto.java

@@ -1,4 +1,4 @@
-package edu.travel.dto;
+package edu.travel.remote.dto;
 
 import lombok.Data;
 

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/dto/SearchProductDto.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/SearchProductDto.java

@@ -1,4 +1,4 @@
-package edu.travel.dto;
+package edu.travel.remote.dto;
 
 import lombok.Data;
 

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/dto/SearchRecordListDto.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/SearchRecordListDto.java

@@ -1,4 +1,4 @@
-package edu.travel.dto;
+package edu.travel.remote.dto;
 
 import lombok.Data;
 

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/dto/ShopTypeDto.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/ShopTypeDto.java

@@ -1,4 +1,4 @@
-package edu.travel.dto;
+package edu.travel.remote.dto;
 
 import lombok.Data;
 

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/dto/UpdateAddressDto.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/UpdateAddressDto.java

@@ -1,4 +1,4 @@
-package edu.travel.dto;
+package edu.travel.remote.dto;
 
 import lombok.Data;
 

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/ProductImageVo.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ProductImageVo.java

@@ -1,4 +1,4 @@
-package edu.travel.vo;
+package edu.travel.remote.vo;
 
 import lombok.Data;
 

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/ProductSkuVo.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ProductSkuVo.java

@@ -1,4 +1,4 @@
-package edu.travel.vo;
+package edu.travel.remote.vo;
 
 import lombok.Data;
 

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/ProductSpecVo.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ProductSpecVo.java

@@ -1,4 +1,4 @@
-package edu.travel.vo;
+package edu.travel.remote.vo;
 
 
 

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/SearchRecordsVo.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/SearchRecordsVo.java

@@ -1,4 +1,4 @@
-package edu.travel.vo;
+package edu.travel.remote.vo;
 
 import lombok.Data;
 

+ 1 - 2
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/ShopAddressVo.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopAddressVo.java

@@ -1,4 +1,4 @@
-package edu.travel.vo;
+package edu.travel.remote.vo;
 
 import lombok.Data;
 
@@ -9,7 +9,6 @@ public class ShopAddressVo {
      */
     private String id;
 
-
     /**
      * 国家id
      */

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/ShopCartListVo.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopCartListVo.java

@@ -1,4 +1,4 @@
-package edu.travel.vo;
+package edu.travel.remote.vo;
 
 import lombok.Data;
 

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/ShopFavoriteVo.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopFavoriteVo.java

@@ -1,4 +1,4 @@
-package edu.travel.vo;
+package edu.travel.remote.vo;
 
 import lombok.Data;
 

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/ShopParametersVo.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopParametersVo.java

@@ -1,4 +1,4 @@
-package edu.travel.vo;
+package edu.travel.remote.vo;
 
 import lombok.Data;
 

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/ShopProductVo.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopProductVo.java

@@ -1,4 +1,4 @@
-package edu.travel.vo;
+package edu.travel.remote.vo;
 
 
 import lombok.Data;

+ 2 - 2
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/ShopReviewVo.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopReviewVo.java

@@ -1,4 +1,4 @@
-package edu.travel.vo;
+package edu.travel.remote.vo;
 
 import edu.travel.remote.feign.mode.vo.tenant.EduTenantVo;
 import lombok.Data;
@@ -42,7 +42,7 @@ public class ShopReviewVo {
     /**
      * sku详情
      */
-    private SpecOneVo specOneVo;
+    private List<SpecOneVo> specOneVo;
 
     /**
      * 评级

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/ShopSkuSpecValueVo.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopSkuSpecValueVo.java

@@ -1,4 +1,4 @@
-package edu.travel.vo;
+package edu.travel.remote.vo;
 
 import lombok.Data;
 

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/ShopTypeVo.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopTypeVo.java

@@ -1,4 +1,4 @@
-package edu.travel.vo;
+package edu.travel.remote.vo;
 
 import lombok.Data;
 

+ 3 - 7
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/SpecOneVo.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/SpecOneVo.java

@@ -1,4 +1,4 @@
-package edu.travel.vo;
+package edu.travel.remote.vo;
 
 import lombok.Data;
 
@@ -11,14 +11,10 @@ import lombok.Data;
 
 @Data
 public class SpecOneVo {
-    /**
-     *
-     */
-    private String id;
 
-    private String specName;
+    private String specId;
 
-    private Integer sortOrder;
+    private String specName;
 
     private String specValue;
 

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/SpecSortVo.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/SpecSortVo.java

@@ -1,4 +1,4 @@
-package edu.travel.vo;
+package edu.travel.remote.vo;
 
 import lombok.Data;
 

+ 1 - 1
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/SpecValueSortVo.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/SpecValueSortVo.java

@@ -1,4 +1,4 @@
-package edu.travel.vo;
+package edu.travel.remote.vo;
 
 import lombok.Data;
 

+ 2 - 2
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/vo/SpecValueVo.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/SpecValueVo.java

@@ -1,10 +1,10 @@
-package edu.travel.vo;
+package edu.travel.remote.vo;
 
 import lombok.Data;
 
 /**
  * 类功能描述:
- *      购物车商品规格值
+ *     购物车商品规格值
  * @author 大春
  * @date 2025/02/28
  */

+ 70 - 0
edu-travel-remote/edu-travel-remote-order/pom.xml

@@ -0,0 +1,70 @@
+<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">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>edu.travel</groupId>
+        <artifactId>edu-travel-remote</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>edu-travel-remote-order</artifactId>
+    <packaging>jar</packaging>
+
+    <name>edu-travel-remote-order</name>
+    <url>http://maven.apache.org</url>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-common-resp</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-common-openfeign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-model-base</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>jakarta.validation</groupId>
+            <artifactId>jakarta.validation-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-validator</artifactId>
+            <version>6.0.13.Final</version>
+        </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-common-core</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-extension</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-remote-base</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-remote-commodity</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+</project>

+ 28 - 0
edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/AddShopOrderDto.java

@@ -0,0 +1,28 @@
+package edu.travel.remote.dto;
+
+import lombok.Data;
+
+@Data
+public class AddShopOrderDto {
+
+    /**地区id*/
+    private String countryId;
+
+    /**商品ID*/
+    private String productId;
+
+    /**
+     * sku
+     */
+    private String skuId;
+
+    /**
+     * 数量
+     */
+    private Integer quantity;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 15 - 0
edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/GetOrderItemDto.java

@@ -0,0 +1,15 @@
+package edu.travel.remote.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class GetOrderItemDto implements Serializable {
+
+    private String orderId;
+
+    private String skuId;
+
+    private String productId;
+}

+ 11 - 0
edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/ShowOrderInfoDto.java

@@ -0,0 +1,11 @@
+package edu.travel.remote.dto;
+
+import lombok.Data;
+
+@Data
+public class ShowOrderInfoDto extends BaseDto{
+    /**
+     * 状态
+     */
+    private String state;
+}

+ 20 - 0
edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/order/ShopOrderItemRemoteController.java

@@ -0,0 +1,20 @@
+package edu.travel.remote.order;
+
+import edu.travel.remote.dto.GetOrderItemDto;
+import edu.travel.remote.vo.OrderItemVo;
+import edu.travel.rpc.RPCBaseResponse;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+@FeignClient(name = "order-dev",path = "/shopOrderItem")
+public interface ShopOrderItemRemoteController {
+
+    /**
+     *  查询订单商品详情
+     * @param params
+     * @return {@link RPCBaseResponse }<{@link OrderItemVo }>
+     */
+    @GetMapping("/getOrderItemVo")
+    public RPCBaseResponse<OrderItemVo> getOrderItemVo(GetOrderItemDto params);
+
+}

+ 64 - 0
edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/vo/OrderItemVo.java

@@ -0,0 +1,64 @@
+package edu.travel.remote.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class OrderItemVo {
+
+    /**
+     * 订单商品表ID
+     */
+    private String id;
+
+    /**
+     * 订单表ID
+     */
+    private String orderId;
+
+    /**
+     * SKU
+     */
+    private String skuId;
+
+    /**
+     * 数量
+     */
+    private String quantity;
+
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+
+    /**
+     * 使用的用户优惠券ID
+     */
+    private String userCouponId;
+
+    /**
+     * 优惠券抵扣金额
+     */
+    private BigDecimal couponDiscount;
+
+    /**
+     * 商品快照
+     */
+    private String snapshot;
+    /**
+     * 商品快照对象
+     */
+    private ShopSnapshotVo shopSnapshotVo;
+
+    /**
+     * 订单商品状态 默认0 -0正常;-1退货
+     */
+    private Integer state;
+
+    /**
+     * 商品ID
+     */
+    private String productId;
+
+}

+ 40 - 0
edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/vo/ShopSnapshotVo.java

@@ -0,0 +1,40 @@
+package edu.travel.remote.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+
+/**
+ * 类功能描述:
+ *  商品快照对象
+ * @author 大春
+ * @date 2025/03/05
+ */
+
+@Data
+public class ShopSnapshotVo {
+    /**
+     * SKU
+     */
+    private String skuId;
+
+    /**
+     * 商品名称
+     */
+    private String productName;
+
+    /**
+     * 商品描述
+     */
+    private String description;
+    /**
+     * 商品SkU的图片
+     */
+    private String imageUrl;
+    /**
+     * 商品快照规格
+     */
+    private List<SpecValueVo> snapshotSpec;
+
+}

+ 108 - 0
edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/vo/ShowOrderInfoVo.java

@@ -0,0 +1,108 @@
+package edu.travel.remote.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class ShowOrderInfoVo {
+    /**
+     * 订单表ID 订单号
+     */
+    private String id;
+
+    /**
+     * 仓库ID
+     */
+    private String warehouseId;
+
+    /**
+     * 订单备注
+     */
+    private String orderRemark;
+
+    /**
+     * 国家id
+     */
+    private String countryId;
+
+    /**
+     * 服务费id
+     */
+    private String serviceChargeId;
+
+    /**
+     * 服务费比率
+     */
+    private BigDecimal serviceChargeValue;
+
+    /**
+     * 支付方式id
+     */
+    private String payId;
+
+    /**
+     * 支付方法值
+     */
+    private String payWayValue;
+
+    /**
+     * 用户ID
+     */
+    private String userId;
+
+    /**
+     * 收货地址
+     */
+    private String addressId;
+
+    /**
+     * 收货地址
+     */
+    private String address;
+    /**
+     * 订单号
+     */
+    private String orderNumber;
+
+    /**
+     * 累计金额
+     */
+    private BigDecimal totalAmount;
+
+    /**
+     * 货币
+     */
+    private String currencyId;
+
+    /**
+     * 汇率
+     */
+    private BigDecimal exchangeRate;
+
+    /**
+     * 0待付款, 1已下单, 2待发货,3待收货,4待评价,5已完成,6已取消
+     */
+    private Integer status;
+
+    /**
+     * 支付时间
+     */
+    private Date paymentTime;
+
+    /**
+     * 优惠券抵扣金额
+     */
+    private BigDecimal couponDiscount;
+
+    /**
+     * 平台优惠券ID
+     */
+    private String globalCouponId;
+    /**
+     * 订单商品详情
+     */
+    private List<OrderItemVo> orderItemVoList;
+}

+ 1 - 0
edu-travel-remote/pom.xml

@@ -18,6 +18,7 @@
         <module>edu-travel-remote-base</module>
         <module>edu-travel-remote-commodity</module>
         <module>edu-travel-remote-country</module>
+        <module>edu-travel-remote-order</module>
     </modules>
 
     <properties>

+ 5 - 0
edu-travel-service/edu-travel-service-commodity/pom.xml

@@ -125,6 +125,11 @@
         </dependency>
         <dependency>
             <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-adapter-order</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
             <artifactId>edu-travel-remote-commodity</artifactId>
             <version>1.0-SNAPSHOT</version>
         </dependency>

+ 0 - 41
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopMgLabel.java

@@ -1,41 +0,0 @@
-package edu.travel.commodity.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import java.util.Date;
-
-import edu.travel.entity.BaseEntity;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * 商品评论表
- */
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@TableName(value = "shop_mg_label")
-public class ShopMgLabel extends BaseEntity {
-    /**
-     * 商品评论表ID
-     */
-    @TableId(value = "id", type = IdType.ASSIGN_ID)
-    private Long id;
-
-    /**
-     * 父级ID、0为一级评论
-     */
-    @TableField(value = "review_id")
-    private Long reviewId;
-
-    /**
-     * 图片地址
-     */
-    @TableField(value = "img_url")
-    private String imgUrl;
-
-
-}

+ 5 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/entity/ShopProductParameters.java

@@ -43,5 +43,9 @@ public class ShopProductParameters extends BaseEntity {
     @TableField(value = "parameters_value")
     private String parametersValue;
 
-
+    /**
+     * 国家ID
+     */
+    @TableField(value = "country_id")
+    private Long countryId;
 }

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

@@ -31,5 +31,10 @@ public class ShopSpec extends BaseEntity {
     @TableField(value = "spec_name")
     private String specName;
 
+    /**
+     * 国家ID
+     */
+    @TableField(value = "country_id")
+    private Long countryId;
 
 }

+ 0 - 7
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/mapper/ShopMgLabelMapper.java

@@ -1,7 +0,0 @@
-package edu.travel.commodity.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import edu.travel.commodity.entity.ShopMgLabel;
-
-public interface ShopMgLabelMapper extends BaseMapper<ShopMgLabel> {
-}

+ 2 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/mapper/ShopProductSpecMapper.java

@@ -2,7 +2,7 @@ package edu.travel.commodity.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import edu.travel.commodity.entity.ShopProductSpec;
-import edu.travel.vo.ShopSkuSpecValueVo;
+import edu.travel.remote.vo.ShopSkuSpecValueVo;
 
 import java.util.List;
 import java.util.Set;
@@ -10,4 +10,5 @@ import java.util.Set;
 public interface ShopProductSpecMapper extends BaseMapper<ShopProductSpec> {
 
     List<ShopSkuSpecValueVo> getSkuValue(Set<String> skus, String project);
+
 }

+ 3 - 3
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopAddressService.java

@@ -3,9 +3,9 @@ package edu.travel.commodity.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.entity.ShopAddress;
 import com.baomidou.mybatisplus.extension.service.IService;
-import edu.travel.dto.BaseDto;
-import edu.travel.dto.UpdateAddressDto;
-import edu.travel.vo.ShopAddressVo;
+import edu.travel.remote.dto.BaseDto;
+import edu.travel.remote.dto.UpdateAddressDto;
+import edu.travel.remote.vo.ShopAddressVo;
 
 public interface ShopAddressService extends IService<ShopAddress>{
 

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

@@ -2,9 +2,9 @@ package edu.travel.commodity.service;
 
 import edu.travel.commodity.entity.ShopCategory;
 import com.baomidou.mybatisplus.extension.service.IService;
-import edu.travel.dto.BaseDto;
-import edu.travel.dto.ShopTypeDto;
-import edu.travel.vo.ShopTypeVo;
+import edu.travel.remote.dto.BaseDto;
+import edu.travel.remote.dto.ShopTypeDto;
+import edu.travel.remote.vo.ShopTypeVo;
 
 import java.util.List;
 import java.util.concurrent.ExecutionException;

+ 2 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopFavoriteService.java

@@ -3,8 +3,8 @@ package edu.travel.commodity.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.entity.ShopFavorite;
 import com.baomidou.mybatisplus.extension.service.IService;
-import edu.travel.dto.BaseDto;
-import edu.travel.vo.ShopFavoriteVo;
+import edu.travel.remote.dto.BaseDto;
+import edu.travel.remote.vo.ShopFavoriteVo;
 
 public interface ShopFavoriteService extends IService<ShopFavorite>{
 

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

@@ -1,8 +0,0 @@
-package edu.travel.commodity.service;
-
-import edu.travel.commodity.entity.ShopMgLabel;
-import com.baomidou.mybatisplus.extension.service.IService;
-public interface ShopMgLabelService extends IService<ShopMgLabel>{
-
-
-}

+ 2 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopParametersService.java

@@ -3,8 +3,8 @@ package edu.travel.commodity.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.entity.ShopParameters;
 import com.baomidou.mybatisplus.extension.service.IService;
-import edu.travel.dto.ProductSpecDto;
-import edu.travel.vo.ShopParametersVo;
+import edu.travel.remote.dto.ProductSpecDto;
+import edu.travel.remote.vo.ShopParametersVo;
 
 public interface ShopParametersService extends IService<ShopParameters>{
 

+ 3 - 3
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductService.java

@@ -3,9 +3,9 @@ package edu.travel.commodity.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.entity.ShopProduct;
 import com.baomidou.mybatisplus.extension.service.IService;
-import edu.travel.dto.GetProductByTypeDto;
-import edu.travel.dto.SearchProductDto;
-import edu.travel.vo.ShopProductVo;
+import edu.travel.remote.dto.GetProductByTypeDto;
+import edu.travel.remote.dto.SearchProductDto;
+import edu.travel.remote.vo.ShopProductVo;
 
 import java.io.IOException;
 

+ 1 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductSkuService.java

@@ -2,7 +2,7 @@ package edu.travel.commodity.service;
 
 import edu.travel.commodity.entity.ShopProductSku;
 import com.baomidou.mybatisplus.extension.service.IService;
-import edu.travel.vo.ShopSkuSpecValueVo;
+import edu.travel.remote.vo.ShopSkuSpecValueVo;
 
 import java.util.List;
 import java.util.Map;

+ 3 - 3
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductSpecService.java

@@ -2,9 +2,9 @@ package edu.travel.commodity.service;
 
 import edu.travel.commodity.entity.ShopProductSpec;
 import com.baomidou.mybatisplus.extension.service.IService;
-import edu.travel.dto.ProductSpecDto;
-import edu.travel.vo.ProductSpecVo;
-import edu.travel.vo.SpecSortVo;
+import edu.travel.remote.dto.ProductSpecDto;
+import edu.travel.remote.vo.ProductSpecVo;
+import edu.travel.remote.vo.SpecSortVo;
 
 import java.util.List;
 

+ 4 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopReviewService.java

@@ -3,12 +3,14 @@ package edu.travel.commodity.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.entity.ShopReview;
 import com.baomidou.mybatisplus.extension.service.IService;
-import edu.travel.dto.ProductSpecDto;
-import edu.travel.vo.ShopReviewVo;
+import edu.travel.remote.dto.AddReviewDto;
+import edu.travel.remote.dto.ProductSpecDto;
+import edu.travel.remote.vo.ShopReviewVo;
 
 public interface ShopReviewService extends IService<ShopReview>{
 
 
     Page<ShopReviewVo> getShopReview(ProductSpecDto params);
 
+    String addReview(AddReviewDto params);
 }

+ 2 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopSearchRecordsService.java

@@ -3,8 +3,8 @@ package edu.travel.commodity.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.entity.ShopSearchRecords;
 import com.baomidou.mybatisplus.extension.service.IService;
-import edu.travel.dto.SearchRecordListDto;
-import edu.travel.vo.SearchRecordsVo;
+import edu.travel.remote.dto.SearchRecordListDto;
+import edu.travel.remote.vo.SearchRecordsVo;
 
 public interface ShopSearchRecordsService extends IService<ShopSearchRecords>{
 

+ 3 - 3
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopShoppingCartService.java

@@ -3,9 +3,9 @@ package edu.travel.commodity.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.entity.ShopShoppingCart;
 import com.baomidou.mybatisplus.extension.service.IService;
-import edu.travel.dto.AddShopCartDto;
-import edu.travel.dto.BaseDto;
-import edu.travel.vo.ShopCartListVo;
+import edu.travel.remote.dto.AddShopCartDto;
+import edu.travel.remote.dto.BaseDto;
+import edu.travel.remote.vo.ShopCartListVo;
 
 public interface ShopShoppingCartService extends IService<ShopShoppingCart>{
 

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

@@ -11,9 +11,9 @@ import edu.travel.commodity.mapper.ShopAddressMapper;
 import edu.travel.commodity.service.ShopAddressService;
 import edu.travel.commodity.utils.PageUtil;
 import edu.travel.commodity.utils.TokenData;
-import edu.travel.dto.BaseDto;
-import edu.travel.dto.UpdateAddressDto;
-import edu.travel.vo.ShopAddressVo;
+import edu.travel.remote.dto.BaseDto;
+import edu.travel.remote.dto.UpdateAddressDto;
+import edu.travel.remote.vo.ShopAddressVo;
 import org.springframework.stereotype.Service;
 
 

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

@@ -14,9 +14,9 @@ import edu.travel.commodity.entity.ShopCategory;
 import edu.travel.commodity.mapper.ShopCategoryMapper;
 import edu.travel.commodity.service.ShopCategoryService;
 import edu.travel.commodity.utils.RedisUtil;
-import edu.travel.dto.BaseDto;
-import edu.travel.dto.ShopTypeDto;
-import edu.travel.vo.ShopTypeVo;
+import edu.travel.remote.dto.BaseDto;
+import edu.travel.remote.dto.ShopTypeDto;
+import edu.travel.remote.vo.ShopTypeVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 

+ 2 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopFavoriteServiceImpl.java

@@ -11,9 +11,9 @@ import edu.travel.commodity.service.ShopFavoriteService;
 import edu.travel.commodity.service.ShopProductService;
 import edu.travel.commodity.utils.PageUtil;
 import edu.travel.commodity.utils.TokenData;
-import edu.travel.dto.BaseDto;
+import edu.travel.remote.dto.BaseDto;
 import edu.travel.service.SysServiceImpl;
-import edu.travel.vo.ShopFavoriteVo;
+import edu.travel.remote.vo.ShopFavoriteVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 

+ 0 - 12
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopMgLabelServiceImpl.java

@@ -1,12 +0,0 @@
-package edu.travel.commodity.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import edu.travel.commodity.entity.ShopMgLabel;
-import edu.travel.commodity.mapper.ShopMgLabelMapper;
-import edu.travel.commodity.service.ShopMgLabelService;
-import org.springframework.stereotype.Service;
-
-@Service
-public class ShopMgLabelServiceImpl extends ServiceImpl<ShopMgLabelMapper, ShopMgLabel> implements ShopMgLabelService {
-
-}

+ 2 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopParametersServiceImpl.java

@@ -10,8 +10,8 @@ import edu.travel.commodity.service.ShopParametersService;
 import edu.travel.commodity.service.ShopProductParametersService;
 import edu.travel.commodity.service.ShopProductService;
 import edu.travel.commodity.utils.PageUtil;
-import edu.travel.dto.ProductSpecDto;
-import edu.travel.vo.ShopParametersVo;
+import edu.travel.remote.dto.ProductSpecDto;
+import edu.travel.remote.vo.ShopParametersVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 

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

@@ -10,9 +10,9 @@ import edu.travel.commodity.entity.ShopProduct;
 import edu.travel.commodity.mapper.ShopProductMapper;
 import edu.travel.commodity.service.ShopProductService;
 import edu.travel.commodity.utils.PageUtil;
-import edu.travel.dto.GetProductByTypeDto;
-import edu.travel.dto.SearchProductDto;
-import edu.travel.vo.ShopProductVo;
+import edu.travel.remote.dto.GetProductByTypeDto;
+import edu.travel.remote.dto.SearchProductDto;
+import edu.travel.remote.vo.ShopProductVo;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;

+ 1 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductSkuServiceImpl.java

@@ -5,7 +5,7 @@ import edu.travel.commodity.entity.ShopProductSku;
 import edu.travel.commodity.mapper.ShopProductSkuMapper;
 import edu.travel.commodity.mapper.ShopProductSpecMapper;
 import edu.travel.commodity.service.ShopProductSkuService;
-import edu.travel.vo.ShopSkuSpecValueVo;
+import edu.travel.remote.vo.ShopSkuSpecValueVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.context.request.RequestContextHolder;

+ 2 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductSpecServiceImpl.java

@@ -9,8 +9,8 @@ import edu.travel.commodity.constant.BaseConstant;
 import edu.travel.commodity.entity.*;
 import edu.travel.commodity.mapper.ShopProductSpecMapper;
 import edu.travel.commodity.service.*;
-import edu.travel.dto.ProductSpecDto;
-import edu.travel.vo.*;
+import edu.travel.remote.dto.ProductSpecDto;
+import edu.travel.remote.vo.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.context.request.RequestContextHolder;

+ 56 - 7
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopReviewServiceImpl.java

@@ -1,23 +1,27 @@
 package edu.travel.commodity.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import edu.travel.adapter.service.order.OrderItemAdapter;
 import edu.travel.adapter.service.tenant.TenantAdapter;
 import edu.travel.commodity.entity.ShopReview;
 import edu.travel.commodity.mapper.ShopReviewMapper;
 import edu.travel.commodity.service.ShopReviewService;
 import edu.travel.commodity.utils.PageUtil;
-import edu.travel.commodity.utils.StringToListUtil;
-import edu.travel.dto.ProductSpecDto;
+import edu.travel.commodity.utils.StringUtil;
+import edu.travel.commodity.utils.TokenData;
+import edu.travel.remote.dto.AddReviewDto;
+import edu.travel.remote.dto.GetOrderItemDto;
+import edu.travel.remote.dto.ProductSpecDto;
 import edu.travel.exception.BaseException;
 import edu.travel.remote.feign.mode.vo.tenant.EduTenantVo;
+import edu.travel.remote.vo.*;
 import edu.travel.rpc.RPCBaseResponse;
-import edu.travel.vo.ShopReviewVo;
-import edu.travel.vo.SpecOneVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -31,6 +35,8 @@ import java.util.stream.Collectors;
 public class ShopReviewServiceImpl extends ServiceImpl<ShopReviewMapper, ShopReview> implements ShopReviewService {
     @Autowired
     private TenantAdapter tenantAdapter;
+    @Autowired
+    private OrderItemAdapter orderItemAdapter;
     @Override
     public Page<ShopReviewVo> getShopReview(ProductSpecDto params) {
         LambdaQueryWrapper<ShopReview> query = Wrappers.<ShopReview>lambdaQuery()
@@ -56,13 +62,56 @@ public class ShopReviewServiceImpl extends ServiceImpl<ShopReviewMapper, ShopRev
             users.put(datum.getId(), datum);
         }
         for (ShopReviewVo record : records) {
-            List<String> list = StringToListUtil.toList(record.getImage());
+            List<String> list = StringUtil.toList(record.getImage());
             record.setImageUrls(list);
-            SpecOneVo bean = JSONUtil.toBean(record.getSkuDetails(), SpecOneVo.class);
-            record.setSpecOneVo(bean);
+            if(!ObjectUtil.isEmpty(record.getSkuDetails())){
+                String jsonPrettyStr = JSONUtil.toJsonPrettyStr(record.getSkuDetails());
+                List<SpecOneVo> list1 = JSONUtil.toList(jsonPrettyStr, SpecOneVo.class);
+                record.setSpecOneVo(list1);
+            }
             EduTenantVo eduTenantVo = users.get(record.getUserId());
             record.setEduTenantVo(eduTenantVo);
         }
         return pageEntity;
     }
+
+    @Override
+    public String addReview(AddReviewDto params) {
+        String userId = TokenData.getUserId();
+        LambdaQueryWrapper<ShopReview> query = Wrappers.<ShopReview>lambdaQuery().eq(ShopReview::getUserId, userId)
+                .eq(ShopReview::getOrderId, params.getOrderId())
+                .eq(ShopReview::getProductId, params.getProductId());
+        List<ShopReview> list = list(query);
+        if(!ObjectUtil.isEmpty(list)){
+            return "您已经评价过了";
+        }
+        ShopReview bean = BeanUtil.toBean(params, ShopReview.class);
+        bean.setUserId(Long.valueOf(userId));
+        String image = StringUtil.toListString(params.getImage());
+        bean.setImage(image);
+        //获取商品sku快照 SpecOneVo JSON
+        GetOrderItemDto getOrderItemDto = new GetOrderItemDto();
+        getOrderItemDto.setOrderId(params.getOrderId());
+        getOrderItemDto.setSkuId(params.getSkuId());
+        getOrderItemDto.setProductId(params.getProductId());
+        RPCBaseResponse<OrderItemVo> result = orderItemAdapter.getOrderItemVo(getOrderItemDto);
+        if(result.getCode()!=200){
+            throw new BaseException(result.getCode(), result.getMsg());
+        }
+        OrderItemVo data = result.getData();
+        if(data == null){
+            return "订单信息有误";
+        }
+        String snapshot = data.getSnapshot();
+        if(!ObjectUtil.isEmpty(snapshot)){
+            //订单快照对象
+            ShopSnapshotVo bean1 = JSONUtil.toBean(snapshot, ShopSnapshotVo.class);
+            List<SpecValueVo> snapshot1 = bean1.getSnapshotSpec();
+            String jsonStr = JSONUtil.toJsonStr(snapshot1);
+            bean.setSkuDetails(jsonStr);
+        }
+        bean.setUpdateUserId(userId);
+        save(bean);
+        return "评价成功";
+    }
 }

+ 2 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopSearchRecordsServiceImpl.java

@@ -8,8 +8,8 @@ import edu.travel.commodity.entity.ShopSearchRecords;
 import edu.travel.commodity.mapper.ShopSearchRecordsMapper;
 import edu.travel.commodity.service.ShopSearchRecordsService;
 import edu.travel.commodity.utils.PageUtil;
-import edu.travel.dto.SearchRecordListDto;
-import edu.travel.vo.SearchRecordsVo;
+import edu.travel.remote.dto.SearchRecordListDto;
+import edu.travel.remote.vo.SearchRecordsVo;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;

+ 5 - 5
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopShoppingCartServiceImpl.java

@@ -17,12 +17,12 @@ import edu.travel.commodity.service.ShopProductSkuService;
 import edu.travel.commodity.service.ShopShoppingCartService;
 import edu.travel.commodity.utils.PageUtil;
 import edu.travel.commodity.utils.TokenData;
-import edu.travel.dto.AddShopCartDto;
-import edu.travel.dto.BaseDto;
+import edu.travel.remote.dto.AddShopCartDto;
+import edu.travel.remote.dto.BaseDto;
 import edu.travel.exception.BaseException;
-import edu.travel.vo.ShopCartListVo;
-import edu.travel.vo.ShopSkuSpecValueVo;
-import edu.travel.vo.SpecValueVo;
+import edu.travel.remote.vo.ShopCartListVo;
+import edu.travel.remote.vo.ShopSkuSpecValueVo;
+import edu.travel.remote.vo.SpecValueVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.context.request.RequestContextHolder;

+ 0 - 20
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/utils/StringToListUtil.java

@@ -1,20 +0,0 @@
-package edu.travel.commodity.utils;
-
-import cn.hutool.core.util.ObjectUtil;
-import lombok.Data;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-@Data
-public class StringToListUtil {
-
-    public static List<String> toList(String str){
-        List<String> list = new ArrayList<>();
-        if(ObjectUtil.isEmpty(str)){
-            list = Arrays.asList(str.split(","));
-        }
-        return list;
-    }
-}

+ 26 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/utils/StringUtil.java

@@ -0,0 +1,26 @@
+package edu.travel.commodity.utils;
+
+import cn.hutool.core.util.ObjectUtil;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Data
+public class StringUtil {
+
+    public static List<String> toList(String str){
+        if(!ObjectUtil.isEmpty(str)){
+            return Arrays.asList(str.split(","));
+        }
+        return new ArrayList<>();
+    }
+    public static String toListString(List<String> list){
+        String result="";
+        for (String s : list) {
+            result=s+",";
+        }
+        return result;
+    }
+}

+ 3 - 4
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopAddressController.java

@@ -3,18 +3,17 @@ package edu.travel.commodity.web;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.entity.ShopAddress;
 import edu.travel.commodity.service.ShopAddressService;
-import edu.travel.dto.BaseDto;
-import edu.travel.dto.UpdateAddressDto;
+import edu.travel.remote.dto.BaseDto;
+import edu.travel.remote.dto.UpdateAddressDto;
 import edu.travel.resp.BaseResponse;
 import edu.travel.rpc.RPCBaseResponse;
-import edu.travel.vo.ShopAddressVo;
+import edu.travel.remote.vo.ShopAddressVo;
 import edu.travel.web.BaseController;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.beans.factory.annotation.Autowired;
 
 import static edu.travel.rpc.RPCBaseResponse.success;
-import static org.bouncycastle.asn1.cmc.CMCStatus.success;
 
 /**
 * 地址表(shop_address)表控制层

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

@@ -2,12 +2,12 @@ package edu.travel.commodity.web;
 
 import edu.travel.commodity.entity.ShopCategory;
 import edu.travel.commodity.service.ShopCategoryService;
-import edu.travel.dto.BaseDto;
-import edu.travel.dto.ShopTypeDto;
+import edu.travel.remote.dto.BaseDto;
+import edu.travel.remote.dto.ShopTypeDto;
 import edu.travel.remote.feign.mode.vo.tenant.AddMenuVo;
 import edu.travel.resp.BaseResponse;
 import edu.travel.rpc.RPCBaseResponse;
-import edu.travel.vo.ShopTypeVo;
+import edu.travel.remote.vo.ShopTypeVo;
 import edu.travel.web.BaseController;
 import org.springframework.web.bind.annotation.*;
 

+ 2 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopFavoriteController.java

@@ -2,9 +2,9 @@ package edu.travel.commodity.web;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.service.ShopFavoriteService;
-import edu.travel.dto.BaseDto;
+import edu.travel.remote.dto.BaseDto;
 import edu.travel.rpc.RPCBaseResponse;
-import edu.travel.vo.ShopFavoriteVo;
+import edu.travel.remote.vo.ShopFavoriteVo;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.beans.factory.annotation.Autowired;

+ 0 - 23
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopMgLabelController.java

@@ -1,23 +0,0 @@
-package edu.travel.commodity.web;
-
-import edu.travel.commodity.service.ShopMgLabelService;
-import org.springframework.web.bind.annotation.*;
-
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
-* 商品评论表(shop_mg_label)表控制层
-*
-* @author xxxxx
-*/
-@RestController
-@RequestMapping("/shop_mg_label")
-public class ShopMgLabelController {
-/**
-* 服务对象
-*/
-    @Autowired
-    private ShopMgLabelService shopMgLabelService;
-
-
-}

+ 2 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopParametersController.java

@@ -2,10 +2,10 @@ package edu.travel.commodity.web;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.service.ShopParametersService;
-import edu.travel.dto.ProductSpecDto;
+import edu.travel.remote.dto.ProductSpecDto;
 import edu.travel.resp.BaseResponse;
 import edu.travel.rpc.RPCBaseResponse;
-import edu.travel.vo.ShopParametersVo;
+import edu.travel.remote.vo.ShopParametersVo;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.beans.factory.annotation.Autowired;

+ 3 - 3
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductController.java

@@ -3,11 +3,11 @@ package edu.travel.commodity.web;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.entity.ShopProduct;
 import edu.travel.commodity.service.ShopProductService;
-import edu.travel.dto.GetProductByTypeDto;
-import edu.travel.dto.SearchProductDto;
+import edu.travel.remote.dto.GetProductByTypeDto;
+import edu.travel.remote.dto.SearchProductDto;
 import edu.travel.resp.BaseResponse;
 import edu.travel.rpc.RPCBaseResponse;
-import edu.travel.vo.ShopProductVo;
+import edu.travel.remote.vo.ShopProductVo;
 import edu.travel.web.BaseController;
 import org.springframework.web.bind.annotation.*;
 

+ 11 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductSkuController.java

@@ -2,11 +2,17 @@ package edu.travel.commodity.web;
 
 import edu.travel.commodity.entity.ShopProductSku;
 import edu.travel.commodity.service.ShopProductSkuService;
+import edu.travel.remote.vo.ShopSkuSpecValueVo;
+import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.web.BaseController;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 /**
 * 商品SKU表(shop_product_sku)表控制层
 *
@@ -21,6 +27,11 @@ public class ShopProductSkuController extends BaseController<ShopProductSku> {
     @Autowired
     private ShopProductSkuService shopProductSkuService;
 
+    @GetMapping("/getSkuValuesById")
+    public RPCBaseResponse<Map<String, List<ShopSkuSpecValueVo>>> getSkuValuesById(Set<String> skuId){
+        return RPCBaseResponse.success(shopProductSkuService.getSkuValuesById(skuId));
+    }
+
 
 
 }

+ 3 - 3
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductSpecController.java

@@ -2,10 +2,10 @@ package edu.travel.commodity.web;
 
 import edu.travel.commodity.entity.ShopProductSpec;
 import edu.travel.commodity.service.ShopProductSpecService;
-import edu.travel.dto.ProductSpecDto;
+import edu.travel.remote.dto.ProductSpecDto;
 import edu.travel.resp.BaseResponse;
 import edu.travel.rpc.RPCBaseResponse;
-import edu.travel.vo.ProductSpecVo;
+import edu.travel.remote.vo.ProductSpecVo;
 import edu.travel.web.BaseController;
 import org.springframework.web.bind.annotation.*;
 
@@ -32,7 +32,7 @@ public class ShopProductSpecController extends BaseController<ShopProductSpec> {
     /**
      * 查询商品详情
      * @param param
-     * @return {@link BaseResponse }<{@link List }<{@link ShopProductVo }>>
+     * @return {@link BaseResponse }<{@link List }<{@link ProductSpecVo }>>
      */
     @GetMapping("/getShopSpec")
     public RPCBaseResponse<ProductSpecVo> getShopSpec(ProductSpecDto param){

+ 13 - 3
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopReviewController.java

@@ -2,14 +2,14 @@ package edu.travel.commodity.web;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.service.ShopReviewService;
-import edu.travel.dto.ProductSpecDto;
+import edu.travel.remote.dto.AddReviewDto;
+import edu.travel.remote.dto.ProductSpecDto;
 import edu.travel.rpc.RPCBaseResponse;
-import edu.travel.vo.ShopReviewVo;
+import edu.travel.remote.vo.ShopReviewVo;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.beans.factory.annotation.Autowired;
 
-import java.util.List;
 
 import static edu.travel.rpc.RPCBaseResponse.success;
 
@@ -38,4 +38,14 @@ public class ShopReviewController {
     public RPCBaseResponse<Page<ShopReviewVo>> getShopReview(ProductSpecDto params) {
         return success(shopReviewService.getShopReview(params));
     }
+
+    /**
+     * 发表评论
+     * @param params
+     * @return {@link RPCBaseResponse }<{@link String }>
+     */
+    @PostMapping("/addReview")
+    public RPCBaseResponse<String> addReview(@RequestBody AddReviewDto params) {
+        return success(shopReviewService.addReview(params));
+    }
 }

+ 2 - 2
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopSearchRecordsController.java

@@ -3,9 +3,9 @@ package edu.travel.commodity.web;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.entity.ShopSearchRecords;
 import edu.travel.commodity.service.ShopSearchRecordsService;
-import edu.travel.dto.SearchRecordListDto;
+import edu.travel.remote.dto.SearchRecordListDto;
 import edu.travel.rpc.RPCBaseResponse;
-import edu.travel.vo.SearchRecordsVo;
+import edu.travel.remote.vo.SearchRecordsVo;
 import edu.travel.web.BaseController;
 import org.springframework.web.bind.annotation.*;
 

+ 3 - 3
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopShoppingCartController.java

@@ -2,11 +2,11 @@ package edu.travel.commodity.web;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.commodity.service.ShopShoppingCartService;
-import edu.travel.dto.AddShopCartDto;
-import edu.travel.dto.BaseDto;
+import edu.travel.remote.dto.AddShopCartDto;
+import edu.travel.remote.dto.BaseDto;
 import edu.travel.resp.BaseResponse;
 import edu.travel.rpc.RPCBaseResponse;
-import edu.travel.vo.ShopCartListVo;
+import edu.travel.remote.vo.ShopCartListVo;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.beans.factory.annotation.Autowired;

+ 0 - 22
edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopMgLabelMapper.xml

@@ -1,22 +0,0 @@
-<?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="edu.travel.commodity.mapper.ShopMgLabelMapper">
-  <resultMap id="BaseResultMap" type="edu.travel.commodity.entity.ShopMgLabel">
-    <!--@mbg.generated-->
-    <!--@Table shop_mg_label-->
-    <id column="id" jdbcType="BIGINT" property="id" />
-    <result column="review_id" jdbcType="BIGINT" property="reviewId" />
-    <result column="img_url" jdbcType="VARCHAR" property="imgUrl" />
-    <result column="project" jdbcType="VARCHAR" property="project" />
-    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
-    <result column="create_user_id" jdbcType="VARCHAR" property="createUserId" />
-    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
-    <result column="update_user_id" jdbcType="VARCHAR" property="updateUserId" />
-    <result column="delete_flag" jdbcType="INTEGER" property="deleteFlag" />
-  </resultMap>
-  <sql id="Base_Column_List">
-    <!--@mbg.generated-->
-    id, review_id, img_url, project, create_time, create_user_id, update_time, update_user_id, 
-    delete_flag
-  </sql>
-</mapper>

+ 2 - 1
edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductParametersMapper.xml

@@ -14,10 +14,11 @@
     <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
     <result column="update_user_id" jdbcType="VARCHAR" property="updateUserId" />
     <result column="delete_flag" jdbcType="INTEGER" property="deleteFlag" />
+    <result column="country_id" jdbcType="BIGINT" property="countryId" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, product_id, parameters_id, parameters_value, project, create_time, create_user_id, 
-    update_time, update_user_id, delete_flag
+    update_time, update_user_id, delete_flag,country_id
   </sql>
 </mapper>

+ 6 - 3
edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductSpecMapper.xml

@@ -22,13 +22,13 @@
     delete_flag,sort_order,spec_id
   </sql>
 
-  <select id="getSkuValue" resultType="edu.travel.vo.ShopSkuSpecValueVo">
+  <select id="getSkuValue" resultType="edu.travel.remote.vo.ShopSkuSpecValueVo">
     SELECT sk.id,sk.sku_id,sk.spec_id,sp.spec_name,sk.spec_value_id,sv.spec_value
     FROM
         shop_sku_spec_value  sk
-    inner JOIN shop_product_spec sp
+    INNER JOIN shop_product_spec sp
         on sp.id=sk.spec_id
-    inner JOIN shop_spec_value sv
+    INNER JOIN shop_spec_value sv
         on sv.id=sk.spec_value_id
     WHERE
     sk.project=#{project}
@@ -39,5 +39,8 @@
     <foreach collection="skus" item="sku" open="IN(" separator="," close=")">
       #{sku}
     </foreach>
+    ORDER BY
+    sp.sort_order ASC;
+    sv.sort_order ASC;
     </select>
 </mapper>

+ 2 - 1
edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopSpecMapper.xml

@@ -12,10 +12,11 @@
     <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
     <result column="update_user_id" jdbcType="VARCHAR" property="updateUserId" />
     <result column="delete_flag" jdbcType="INTEGER" property="deleteFlag" />
+    <result column="country_id" jdbcType="BIGINT" property="countryId" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, spec_name, project, create_time, create_user_id, update_time, update_user_id, 
-    delete_flag
+    delete_flag,country_id
   </sql>
 </mapper>

+ 5 - 0
edu-travel-service/edu-travel-service-order/pom.xml

@@ -140,6 +140,11 @@
             <version>1.2.6</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-remote-order</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
         <!--        <dependency>-->
         <!--            <groupId>jakarta.validation</groupId>-->
         <!--            <artifactId>jakarta.validation-api</artifactId>-->

+ 2 - 0
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/OrderApplication.java

@@ -5,11 +5,13 @@ import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 
 @SpringBootApplication
 @EnableDiscoveryClient
 @MapperScan("edu.travel.order.mapper")
 @EnableRedisCache
+@EnableFeignClients
 public class OrderApplication {
     public static void main(String[] args) {
         SpringApplication.run(OrderApplication.class, args);

+ 32 - 3
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/controller/ShopOrderController.java

@@ -1,15 +1,44 @@
 package edu.travel.order.controller;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.order.entity.ShopOrder;
+import edu.travel.order.service.ShopOrderService;
+import edu.travel.remote.dto.AddReviewDto;
+import edu.travel.remote.dto.ShowOrderInfoDto;
+import edu.travel.remote.vo.ShowOrderInfoVo;
+import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.web.BaseController;
-import org.checkerframework.checker.units.qual.A;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+import static edu.travel.rpc.RPCBaseResponse.success;
 
 
 @RestController
 @RequestMapping("/shopOrder")
 public class ShopOrderController extends BaseController<ShopOrder> {
+    @Autowired
+    private ShopOrderService shopOrderService;
 
+    /**
+     *  状态查询我的订单
+     * @param params
+     * @return {@link RPCBaseResponse }<{@link Page }<{@link ShowOrderInfoVo }>>
+     */
+    @GetMapping("/showOrderInfo")
+    public RPCBaseResponse<Page<ShowOrderInfoVo>> showOrderInfo(ShowOrderInfoDto params){
+        return success(shopOrderService.showOrderInfo(params));
+    }
 
+    /**
+     *  下单
+     * @param params
+     * @return {@link RPCBaseResponse }<{@link Void }>
+     */
+    @PostMapping("/addOrder")
+    public RPCBaseResponse<String> addOrder(@RequestBody List<AddReviewDto> params){
+        return success(shopOrderService.addOrder(params));
+    }
 }

+ 39 - 1
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/controller/ShopOrderItemController.java

@@ -1,13 +1,51 @@
 package edu.travel.order.controller;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import edu.travel.order.entity.ShopOrderItem;
+import edu.travel.order.service.ShopOrderItemService;
+import edu.travel.remote.dto.GetOrderItemDto;
+import edu.travel.remote.order.ShopOrderItemRemoteController;
+import edu.travel.remote.vo.OrderItemVo;
+import edu.travel.remote.vo.ShopSnapshotVo;
+import edu.travel.remote.vo.SpecValueVo;
+import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
+import static edu.travel.rpc.RPCBaseResponse.success;
+
 
 @RestController
 @RequestMapping("/shopOrderItem")
-public class ShopOrderItemController extends BaseController<ShopOrderItem> {
+public class ShopOrderItemController extends BaseController<ShopOrderItem> implements ShopOrderItemRemoteController {
+
+    @Autowired
+    private ShopOrderItemService shopOrderItemService;
+
+    @GetMapping("/getOrderItemVo")
+    public RPCBaseResponse<OrderItemVo> getOrderItemVo(@RequestBody GetOrderItemDto params) {
+
+        LambdaQueryChainWrapper<ShopOrderItem> query = shopOrderItemService.lambdaQuery().eq(ShopOrderItem::getSkuId, params.getSkuId())
+                .eq(ShopOrderItem::getOrderId, params.getOrderId())
+                .eq(ShopOrderItem::getProductId, params.getProductId());
+        ShopOrderItem shopOrderItem = query.one();
+        OrderItemVo bean = BeanUtil.toBean(shopOrderItem, OrderItemVo.class);
+        if(!ObjectUtil.isEmpty(shopOrderItem) && !ObjectUtil.isEmpty(shopOrderItem.getSnapshot())){
+            ShopSnapshotVo bean1 = JSONUtil.toBean(shopOrderItem.getSnapshot(), ShopSnapshotVo.class);
+            bean.setShopSnapshotVo(bean1);
+        }
+        //订单快照对象
+        return success(bean);
+    }
+
 
 }

+ 5 - 0
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/controller/ShopOrderTypeChangeController.java

@@ -1,12 +1,17 @@
 package edu.travel.order.controller;
 
 import edu.travel.order.entity.ShopOrderTypeChange;
+import edu.travel.order.service.ShopOrderTypeChangeService;
 import edu.travel.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 @RestController
 @RequestMapping("/shopOrderTypeChange")
 public class ShopOrderTypeChangeController extends BaseController<ShopOrderTypeChange> {
+    @Autowired
+    private ShopOrderTypeChangeService shopOrderTypeChangeService;
+
 
 }

+ 10 - 1
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/entity/ShopOrder.java

@@ -81,6 +81,11 @@ public class ShopOrder extends BaseEntity {
     private Long addressId;
 
     /**
+     * 收货地址
+     */
+    @TableField(value = "address")
+    private String address;
+    /**
      * 订单号
      */
     @TableField(value = "order_number")
@@ -97,7 +102,11 @@ public class ShopOrder extends BaseEntity {
      */
     @TableField(value = "currency_id")
     private Long currencyId;
-
+    /**
+     * 货币
+     */
+    @TableField(value = "currency")
+    private String currency;
     /**
      * 汇率
      */

+ 8 - 1
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/entity/ShopOrderItem.java

@@ -30,7 +30,7 @@ public class ShopOrderItem extends BaseEntity {
      * 订单表ID
      */
     @TableField(value = "order_id")
-    private Long orderId;
+    private String orderId;
 
     /**
      * SKU
@@ -74,4 +74,11 @@ public class ShopOrderItem extends BaseEntity {
     @TableField(value = "`state`")
     private Integer state;
 
+    /**
+     * 商品ID
+     */
+    @TableField(value = "product_id")
+    private Long productId;
+
+
 }

+ 9 - 0
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/ShopOrderService.java

@@ -1,9 +1,18 @@
 package edu.travel.order.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import edu.travel.order.entity.ShopOrder;
+import edu.travel.remote.dto.AddReviewDto;
+import edu.travel.remote.dto.ShowOrderInfoDto;
+import edu.travel.remote.vo.ShowOrderInfoVo;
+
+import java.util.List;
 
 public interface ShopOrderService extends IService<ShopOrder> {
 
 
+    Page<ShowOrderInfoVo> showOrderInfo(ShowOrderInfoDto params);
+
+    String addOrder(List<AddReviewDto> params);
 }

+ 67 - 0
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/impl/ShopOrderServiceImpl.java

@@ -1,13 +1,80 @@
 package edu.travel.order.service.impl;
 
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import edu.travel.order.entity.ShopOrder;
+import edu.travel.order.entity.ShopOrderItem;
 import edu.travel.order.mapper.ShopOrderMapper;
+import edu.travel.order.service.ShopOrderItemService;
 import edu.travel.order.service.ShopOrderService;
+import edu.travel.order.utils.PageUtil;
+import edu.travel.order.utils.TokenData;
+import edu.travel.remote.dto.AddReviewDto;
+import edu.travel.remote.dto.ShowOrderInfoDto;
+import edu.travel.remote.vo.OrderItemVo;
+import edu.travel.remote.vo.ShopSnapshotVo;
+import edu.travel.remote.vo.ShowOrderInfoVo;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
 @Service
 public class ShopOrderServiceImpl extends ServiceImpl<ShopOrderMapper, ShopOrder> implements ShopOrderService {
+    @Autowired
+    private ShopOrderItemService shopOrderItemService;
+
+    @Override
+    public Page<ShowOrderInfoVo> showOrderInfo(ShowOrderInfoDto params) {
+        String userId = TokenData.getUserId();
+        LambdaQueryWrapper<ShopOrder> query = Wrappers.<ShopOrder>lambdaQuery();
+        query.eq(ShopOrder::getCountryId, params.getCountryId());
+        query.eq(ShopOrder::getStatus, params.getState());
+        query.eq(ShopOrder::getUserId, userId);
+        query.orderByDesc(ShopOrder::getCreateTime);
+
+        Page<ShopOrder> page = page(new Page<>(params.getCurrentPage(), params.getPageSize()), query);
+        Page<ShowOrderInfoVo> pageEntity = PageUtil.toPageEntity(page, ShowOrderInfoVo.class);
+        List<ShowOrderInfoVo> records = pageEntity.getRecords();
+
+        if(ObjectUtil.isEmpty(records)){
+            return pageEntity;
+        }
+        //订单号
+        Set<String> orderNums = records.stream().map(ShowOrderInfoVo::getId).collect(Collectors.toSet());
+        LambdaQueryWrapper<ShopOrderItem> itemQuery = Wrappers.<ShopOrderItem>lambdaQuery();
+        itemQuery.in(ShopOrderItem::getOrderId,orderNums);
+        List<ShopOrderItem> list = shopOrderItemService.list();
+        Map<String, List<ShopOrderItem>> itemMap =
+                list.stream().collect(Collectors.groupingBy(ShopOrderItem::getOrderId));
+
+        for (ShowOrderInfoVo record : records) {
+            List<ShopOrderItem> shopOrderItems = itemMap.get(record.getOrderNumber());
+            if(ObjectUtil.isNotEmpty(shopOrderItems)){
+                List<OrderItemVo> orderItemVos = BeanUtil.copyToList(shopOrderItems, OrderItemVo.class);
+
+                for (OrderItemVo orderItemVo : orderItemVos) {
+                    ShopSnapshotVo bean1 = JSONUtil.toBean(orderItemVo.getSnapshot(), ShopSnapshotVo.class);
+                    orderItemVo.setShopSnapshotVo(bean1);
+                }
+                record.setOrderItemVoList(orderItemVos);
+            }
+        }
+        return pageEntity;
+    }
+
+    @Override
+    public String addOrder(List<AddReviewDto> params) {
 
+        return null;
+    }
 }

+ 19 - 0
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/utils/ObjectUtils.java

@@ -0,0 +1,19 @@
+package edu.travel.order.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ObjectUtils {
+
+
+    public static <T> List<T> castList(Object obj, Class<T> clazz) {
+        List<T> result = new ArrayList<T>();
+        if (obj instanceof List<?>) {
+            for (Object o : (List<?>) obj) {
+                result.add(clazz.cast(o));
+            }
+            return result;
+        }
+        return null;
+    }
+}

+ 28 - 0
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/utils/PageUtil.java

@@ -0,0 +1,28 @@
+package edu.travel.order.utils;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.BeanUtils;
+
+public class PageUtil{
+
+    /**
+     * Page类型entity转换
+     * @param source
+     * @param type
+     * @return
+     */
+    public static <T,E> Page<E> toPageEntity(Page<T> source, Class<E> type) {
+        Page<E> target = new Page<E>();
+        BeanUtils.copyProperties(source, target);
+        target.setRecords(BeanUtil.copyToList(source.getRecords(), type));
+        return target;
+    }
+    public static <T,E> Page<E> toPageEntity(IPage<T> source, Class<E> type) {
+        Page<E> target = new Page<E>();
+        BeanUtils.copyProperties(source, target);
+        target.setRecords(BeanUtil.copyToList(source.getRecords(), type));
+        return target;
+    }
+}

+ 36 - 0
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/utils/RedisUtil.java

@@ -0,0 +1,36 @@
+package edu.travel.order.utils;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.TimeUnit;
+
+@Component
+public class RedisUtil {
+    @Autowired
+    private StringRedisTemplate stringRedisTemplate;
+    /**
+     *通过KEY 获取值
+     */
+    public String getString(String key) {
+        return stringRedisTemplate.opsForValue().get(key);
+    }
+    /**
+     * 设置KEY 和 VALUE
+     */
+    public void setString(String key, String value) {
+        stringRedisTemplate.opsForValue().set(key, value);
+    }
+
+    /**
+     * @param key KEY
+     * @param value 值
+     * @param expire 过期时间
+     * @param timeUnit 时间单位
+     */
+    public void setString(String key, String value,long expire,TimeUnit timeUnit) {
+        stringRedisTemplate.opsForValue().set(key, value,expire, timeUnit);
+    }
+
+}

+ 26 - 0
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/utils/StringUtil.java

@@ -0,0 +1,26 @@
+package edu.travel.order.utils;
+
+import cn.hutool.core.util.ObjectUtil;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Data
+public class StringUtil {
+
+    public static List<String> toList(String str){
+        if(!ObjectUtil.isEmpty(str)){
+            return Arrays.asList(str.split(","));
+        }
+        return new ArrayList<>();
+    }
+    public static String toListString(List<String> list){
+        String result="";
+        for (String s : list) {
+            result=s+",";
+        }
+        return result;
+    }
+}

+ 16 - 0
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/utils/TokenData.java

@@ -0,0 +1,16 @@
+package edu.travel.order.utils;
+
+import edu.travel.entity.EduTenantPO;
+import org.springframework.security.core.context.SecurityContextHolder;
+
+public class TokenData {
+
+    /**
+     *  获取用户ID
+     * @return {@link String }
+     */
+    public static String getUserId(){
+        EduTenantPO principal =(EduTenantPO) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
+        return principal.getId().toString();
+    }
+}

+ 161 - 0
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/utils/TreeUtils.java

@@ -0,0 +1,161 @@
+package edu.travel.order.utils;
+
+import java.util.*;
+import java.util.function.BiConsumer;
+import java.util.function.Function;
+
+/**
+ * 通用树形结构构建工具类
+ *
+ * <p><strong>功能特性:</strong></p>
+ * <ul>
+ *   <li>支持任意 Java 对象(实体类/DTO/VO)</li>
+ *   <li>自动检测循环依赖(死循环)</li>
+ *   <li>零依赖(无需继承接口或父类)</li>
+ *   <li>编译期类型安全检查</li>
+ * </ul>
+ *
+ * <p><strong>使用示例:</strong></p>
+ * <pre>{@code
+ * List<Department> tree = TreeUtils.buildTree(
+ *     departments,
+ *     Department::getId,
+ *     Department::getParentId,
+ *     Department::setChildren
+ * );
+ * }</pre>
+ */
+public class TreeUtils {
+
+    /**
+     * 构建树形结构的核心方法
+     *
+     * @param nodes          待处理的节点列表(必须包含所有节点)
+     * @param idGetter       节点ID的获取方法(方法引用,如:User::getId)
+     * @param pidGetter      父节点ID的获取方法(方法引用,如:User::getParentId)
+     * @param childrenSetter 子节点列表的设置方法(如:(node, children) -> node.setChildren(children))
+     * @param <T>            节点类型(如:User.class)
+     * @param <ID>           ID 的类型(需正确实现 equals 和 hashCode)
+     * @return 树形结构的根节点列表
+     *
+     * @throws IllegalArgumentException 如果存在以下情况:
+     *                                  <ul>
+     *                                    <li>节点列表为null</li>
+     *                                    <li>存在重复ID</li>
+     *                                    <li>ID字段为null</li>
+     *                                  </ul>
+     * @throws IllegalStateException    如果检测到循环依赖
+     */
+    public static <T, ID> List<T> buildTree(List<T> nodes,
+                                            Function<T, ID> idGetter,
+                                            Function<T, ID> pidGetter,
+                                            BiConsumer<T, List<T>> childrenSetter) {
+        // 防御性拷贝,避免修改原始数据
+        List<T> copyNodes = new ArrayList<>(Optional.ofNullable(nodes).orElseGet(ArrayList::new));
+
+        //========== 数据校验 ==========//
+        validateNodes(copyNodes, idGetter);
+
+        //========== 初始化数据结构 ==========//
+        Map<ID, T> nodeMap = new HashMap<>(copyNodes.size());
+        List<T> rootNodes = new ArrayList<>();
+
+        // 构建 id -> node 映射表
+        copyNodes.forEach(node -> nodeMap.put(idGetter.apply(node), node));
+
+        //========== 构建父子关系 ==========//
+        for (T node : copyNodes) {
+            ID currentId = idGetter.apply(node);
+            ID parentId = pidGetter.apply(node);
+
+            // 判断根节点条件(父ID为空/等于自身/不存在于Map中)
+            if (isRootNode(parentId, currentId, nodeMap)) {
+                rootNodes.add(node);
+                continue;
+            }
+
+            // 获取父节点并建立关联
+            T parent = nodeMap.get(parentId);
+            if (parent != null) {
+                linkParentAndChild(parent, node, childrenSetter);
+                checkCircularDependency(parent, currentId, idGetter, pidGetter, nodeMap);
+            }
+        }
+
+        return rootNodes;
+    }
+
+    //========== 私有方法 ==========//
+
+    /**
+     * 数据校验
+     */
+    private static <T, ID> void validateNodes(List<T> nodes, Function<T, ID> idGetter) {
+        if (nodes == null) {
+            throw new IllegalArgumentException("节点列表不能为null");
+        }
+
+        Set<ID> idSet = new HashSet<>();
+        for (T node : nodes) {
+            ID id = idGetter.apply(node);
+            if (id == null) {
+                throw new IllegalArgumentException("节点存在空ID: " + node);
+            }
+            if (idSet.contains(id)) {
+                throw new IllegalArgumentException("存在重复ID: " + id);
+            }
+            idSet.add(id);
+        }
+    }
+
+    /**
+     * 判断是否为根节点
+     */
+    private static <ID> boolean isRootNode(ID parentId, ID currentId, Map<ID, ?> nodeMap) {
+        return parentId == null
+                || parentId.equals(currentId)
+                || !nodeMap.containsKey(parentId);
+    }
+
+    /**
+     * 建立父子关联关系
+     */
+    private static <T> void linkParentAndChild(T parent,
+                                               T child,
+                                               BiConsumer<T, List<T>> childrenSetter) {
+        List<T> children = new ArrayList<>();
+        childrenSetter.accept(parent, children);
+        children.add(child);
+    }
+
+    /**
+     * 循环依赖检测(核心安全机制)
+     */
+    private static <T, ID> void checkCircularDependency(T parent,
+                                                        ID childId,
+                                                        Function<T, ID> idGetter,
+                                                        Function<T, ID> pidGetter,
+                                                        Map<ID, T> nodeMap) {
+        Set<ID> visited = new HashSet<>();
+        T current = parent;
+
+        while (current != null) {
+            ID currentParentId = pidGetter.apply(current);
+            if (currentParentId == null) break;
+
+            // 发现直接循环(A→B→A)
+            if (currentParentId.equals(childId)) {
+                throw new IllegalStateException("检测到循环依赖:节点 "
+                        + idGetter.apply(current) + " → " + childId);
+            }
+
+            // 发现间接循环(A→B→C→A)
+            if (visited.contains(currentParentId)) {
+                throw new IllegalStateException("检测到循环依赖路径:" + visited);
+            }
+
+            visited.add(currentParentId);
+            current = nodeMap.get(currentParentId);
+        }
+    }
+}

+ 3 - 2
edu-travel-service/edu-travel-service-order/src/main/resources/mapper/ShopOrderItemMapper.xml

@@ -5,7 +5,7 @@
     <!--@mbg.generated-->
     <!--@Table shop_order_item-->
     <id column="id" jdbcType="BIGINT" property="id" />
-    <result column="order_id" jdbcType="BIGINT" property="orderId" />
+    <result column="order_id" jdbcType="VARCHAR" property="orderId" />
     <result column="sku_id" jdbcType="BIGINT" property="skuId" />
     <result column="quantity" jdbcType="INTEGER" property="quantity" />
     <result column="price" jdbcType="DECIMAL" property="price" />
@@ -19,10 +19,11 @@
     <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
     <result column="update_user_id" jdbcType="VARCHAR" property="updateUserId" />
     <result column="delete_flag" jdbcType="INTEGER" property="deleteFlag" />
+    <result column="product_id" jdbcType="BIGINT" property="productId" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, order_id, sku_id, quantity, price, user_coupon_id, coupon_discount, snapshot, 
+    id, order_id, sku_id, quantity, price, user_coupon_id, coupon_discount, snapshot, product_id,
     `state`, project, create_time, create_user_id, update_time, update_user_id, delete_flag
   </sql>
 </mapper>

部分文件因为文件数量过多而无法显示