Parcourir la source

feat:商城订单

zhangwei il y a 1 semaine
Parent
commit
4531dbaadd
42 fichiers modifiés avec 802 ajouts et 61 suppressions
  1. 47 0
      edu-travel-adapter/edu-travel-adapter-commodity/pom.xml
  2. 18 0
      edu-travel-adapter/edu-travel-adapter-order/src/main/java/edu/travel/adapter/service/order/OrderAdapter.java
  3. 8 0
      edu-travel-adapter/edu-travel-adapter-order/src/main/java/edu/travel/adapter/service/order/OrderItemAdapter.java
  4. 17 0
      edu-travel-adapter/edu-travel-adapter-order/src/main/java/edu/travel/adapter/service/order/ShopOrderLogAdapter.java
  5. 2 0
      edu-travel-adapter/pom.xml
  6. 5 0
      edu-travel-common/edu-travel-common-cache/pom.xml
  7. 0 5
      edu-travel-remote/edu-travel-remote-commodity/pom.xml
  8. 14 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/commodity/ShopProductSkuRemoteController.java
  9. 41 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/AddShopOrderDto.java
  10. 1 6
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/AddShopProductOrderDto.java
  11. 1 2
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopReviewVo.java
  12. 0 5
      edu-travel-remote/edu-travel-remote-order/pom.xml
  13. 109 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/AddOrderDto.java
  14. 60 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/AddOrderItemDto.java
  15. 28 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/AddOrderLogDto.java
  16. 6 1
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/ShowOrderInfoDto.java
  17. 12 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/order/ShopOrderItemRemoteController.java
  18. 12 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/order/ShopOrderRemoteController.java
  19. 13 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/order/ShopOrderTypeChangeRemoteController.java
  20. 2 2
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/vo/ShopSnapshotVo.java
  21. 20 0
      edu-travel-service/edu-travel-service-commodity/pom.xml
  22. 4 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/constant/RedisKey.java
  23. 46 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/enums/OrderStateEnum.java
  24. 6 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/mapper/ShopProductSkuMapper.java
  25. 2 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductSkuService.java
  26. 182 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductSkuServiceImpl.java
  27. 3 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopReviewServiceImpl.java
  28. 21 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductSkuController.java
  29. 12 1
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductSkuMapper.xml
  30. 1 1
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductSpecMapper.xml
  31. 21 5
      edu-travel-service/edu-travel-service-order/pom.xml
  32. 10 9
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/controller/ShopOrderController.java
  33. 22 5
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/controller/ShopOrderItemController.java
  34. 13 1
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/controller/ShopOrderTypeChangeController.java
  35. 8 2
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/entity/ShopOrderTypeChange.java
  36. 4 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/ShopOrderItemService.java
  37. 2 4
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/ShopOrderService.java
  38. 2 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/ShopOrderTypeChangeService.java
  39. 11 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/impl/ShopOrderItemServiceImpl.java
  40. 6 3
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/impl/ShopOrderServiceImpl.java
  41. 7 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/impl/ShopOrderTypeChangeServiceImpl.java
  42. 3 2
      edu-travel-service/edu-travel-service-order/src/main/resources/mapper/ShopOrderTypeChangeMapper.xml

+ 47 - 0
edu-travel-adapter/edu-travel-adapter-commodity/pom.xml

@@ -0,0 +1,47 @@
+<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-commodity</artifactId>
+    <packaging>jar</packaging>
+
+    <name>edu-travel-adapter-commodity</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-commodity</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-common-adapter</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-remote-order</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+</project>

+ 18 - 0
edu-travel-adapter/edu-travel-adapter-order/src/main/java/edu/travel/adapter/service/order/OrderAdapter.java

@@ -0,0 +1,18 @@
+package edu.travel.adapter.service.order;
+
+import edu.travel.adapter.annotation.AdapterAnnotation;
+import edu.travel.remote.dto.AddOrderDto;
+import edu.travel.remote.order.ShopOrderRemoteController;
+import edu.travel.rpc.RPCBaseResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class OrderAdapter {
+    @Autowired
+    private ShopOrderRemoteController shopOrderRemoteController;
+    @AdapterAnnotation
+    public RPCBaseResponse<Void> addShopOrder(AddOrderDto params) {
+        return shopOrderRemoteController.addShopOrder(params);
+    }
+}

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

@@ -1,6 +1,8 @@
 package edu.travel.adapter.service.order;
 
 import edu.travel.adapter.annotation.AdapterAnnotation;
+import edu.travel.remote.dto.AddOrderDto;
+import edu.travel.remote.dto.AddOrderItemDto;
 import edu.travel.remote.dto.GetOrderItemDto;
 import edu.travel.remote.order.ShopOrderItemRemoteController;
 import edu.travel.remote.vo.OrderItemVo;
@@ -8,6 +10,8 @@ import edu.travel.rpc.RPCBaseResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+
 @Component
 public class OrderItemAdapter {
     @Autowired
@@ -17,4 +21,8 @@ public class OrderItemAdapter {
     public RPCBaseResponse<OrderItemVo> getOrderItemVo(GetOrderItemDto params) {
         return shopOrderItemRemoteController.getOrderItemVo(params);
     }
+    @AdapterAnnotation
+    public RPCBaseResponse<Void> addShopOrderItem(List<AddOrderItemDto> params) {
+        return shopOrderItemRemoteController.addShopOrderItem(params);
+    }
 }

+ 17 - 0
edu-travel-adapter/edu-travel-adapter-order/src/main/java/edu/travel/adapter/service/order/ShopOrderLogAdapter.java

@@ -0,0 +1,17 @@
+package edu.travel.adapter.service.order;
+
+import edu.travel.remote.dto.AddOrderLogDto;
+import edu.travel.remote.order.ShopOrderTypeChangeRemoteController;
+import edu.travel.rpc.RPCBaseResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ShopOrderLogAdapter {
+    @Autowired
+    private ShopOrderTypeChangeRemoteController shopOrderTypeChangeRemoteController;
+
+    public RPCBaseResponse<Void> addOrderLog(AddOrderLogDto params){
+        return shopOrderTypeChangeRemoteController.addOrderLog(params);
+    }
+}

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

@@ -17,6 +17,8 @@
         <module>edu-travel-adapter-tenant</module>
         <module>edu-travel-adapter-country</module>
         <module>edu-travel-adapter-order</module>
+        <module>edu-travel-adapter-commodity</module>
+        <module>edu-travel-adapter-currency</module>
     </modules>
 
     <properties>

+ 5 - 0
edu-travel-common/edu-travel-common-cache/pom.xml

@@ -38,6 +38,11 @@
             <artifactId>jedis</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson-spring-boot-starter</artifactId>
+            <version>3.23.1</version>
+        </dependency>
         <!--spring2.0集成redis所需common-pool2-->
         <!-- 必须加上,jedis依赖此  -->
         <dependency>

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

@@ -61,11 +61,6 @@
             <artifactId>edu-travel-remote-base</artifactId>
             <version>1.0-SNAPSHOT</version>
         </dependency>
-        <dependency>
-            <groupId>edu.travel</groupId>
-            <artifactId>edu-travel-remote-tenant</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
 
     </dependencies>
 </project>

+ 14 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/commodity/ShopProductSkuRemoteController.java

@@ -0,0 +1,14 @@
+package edu.travel.remote.commodity;
+
+import edu.travel.remote.vo.ProductSkuVo;
+import edu.travel.rpc.RPCBaseResponse;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+import java.util.List;
+
+
+@FeignClient(name="commodity",path = "/shopProductSku")
+public interface ShopProductSkuRemoteController {
+
+}

+ 41 - 0
edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/AddShopOrderDto.java

@@ -0,0 +1,41 @@
+package edu.travel.remote.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AddShopOrderDto {
+    /**
+     * 商品
+     */
+    private List<AddShopProductOrderDto> products;
+
+    /**
+     * 地址ID
+     */
+    private String addressId;
+
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 国家
+     */
+    private String country;
+    /**
+     * 支付方式
+     */
+    private String payId;
+
+    /**
+     * 货币
+     */
+    private String currencyId;
+
+    /**
+     * 优惠券ID
+     */
+    private String globalCouponId;
+}

+ 1 - 6
edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/AddShopOrderDto.java → edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/AddShopProductOrderDto.java

@@ -3,7 +3,7 @@ package edu.travel.remote.dto;
 import lombok.Data;
 
 @Data
-public class AddShopOrderDto {
+public class AddShopProductOrderDto {
 
     /**地区id*/
     private String countryId;
@@ -20,9 +20,4 @@ public class AddShopOrderDto {
      * 数量
      */
     private Integer quantity;
-
-    /**
-     * 备注
-     */
-    private String remark;
 }

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

@@ -1,6 +1,5 @@
 package edu.travel.remote.vo;
 
-import edu.travel.remote.feign.mode.vo.tenant.EduTenantVo;
 import lombok.Data;
 
 import java.util.List;
@@ -24,7 +23,7 @@ public class ShopReviewVo {
     /**
      * 用户详情
      */
-    private EduTenantVo eduTenantVo;
+    private Object eduTenantVo;
     /**
      * 商品ID
      */

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

@@ -61,10 +61,5 @@
             <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>

+ 109 - 0
edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/AddOrderDto.java

@@ -0,0 +1,109 @@
+package edu.travel.remote.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 类功能描述:
+ *  新增订单Dto
+ * @author 大春
+ * @date 2025/03/06
+ */
+@Data
+public class AddOrderDto {
+
+
+    /**
+     * 仓库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 String currency;
+    /**
+     * 汇率
+     */
+    private BigDecimal exchangeRate;
+
+    /**
+     * 0待付款, 1已下单, 2待发货,3待收货,4待评价,5已完成,6已取消
+     */
+    private Integer status;
+
+    /**
+     * 支付时间
+     */
+    private Date paymentTime;
+
+    /**
+     * 优惠券抵扣金额
+     */
+    private BigDecimal couponDiscount;
+
+    /**
+     * 平台优惠券ID
+     */
+    private String globalCouponId;
+}

+ 60 - 0
edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/AddOrderItemDto.java

@@ -0,0 +1,60 @@
+package edu.travel.remote.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 类功能描述:
+ *  新增订单子类
+ * @author 大春
+ * @date 2025/03/06
+ */
+
+@Data
+public class AddOrderItemDto {
+    /**
+     * 订单表ID
+     */
+    private String orderId;
+
+    /**
+     * SKU
+     */
+    private String skuId;
+
+    /**
+     * 数量
+     */
+    private Integer quantity;
+
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+
+    /**
+     * 使用的用户优惠券ID
+     */
+    private String userCouponId;
+
+    /**
+     * 优惠券抵扣金额
+     */
+    private BigDecimal couponDiscount;
+
+    /**
+     * 商品快照
+     */
+    private String snapshot;
+
+    /**
+     * 订单商品状态 默认0 -0正常;-1退货
+     */
+    private Integer state;
+
+    /**
+     * 商品ID
+     */
+    private String productId;
+}

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

@@ -0,0 +1,28 @@
+package edu.travel.remote.dto;
+
+import lombok.Data;
+
+/**
+ * 类功能描述:
+ *  订单日志
+ * @author 大春
+ * @date 2025/03/06
+ */
+
+@Data
+public class AddOrderLogDto {
+    /**
+     * 订单号
+     */
+    private String orderId;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 0待付款, 1已下单, 2待发货,3待收货,4待评价,5已完成,6已取消
+     */
+    private Integer status;
+}

+ 6 - 1
edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/ShowOrderInfoDto.java

@@ -1,11 +1,16 @@
 package edu.travel.remote.dto;
 
+import edu.travel.po.PagePO;
 import lombok.Data;
 
 @Data
-public class ShowOrderInfoDto extends BaseDto{
+public class ShowOrderInfoDto extends PagePO {
     /**
      * 状态
      */
     private String state;
+    /**
+     * 国家id
+     */
+    private String CountryId;
 }

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

@@ -1,10 +1,14 @@
 package edu.travel.remote.order;
 
+import edu.travel.remote.dto.AddOrderItemDto;
 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;
+import org.springframework.web.bind.annotation.PostMapping;
+
+import java.util.List;
 
 @FeignClient(name = "order-dev",path = "/shopOrderItem")
 public interface ShopOrderItemRemoteController {
@@ -17,4 +21,12 @@ public interface ShopOrderItemRemoteController {
     @GetMapping("/getOrderItemVo")
     public RPCBaseResponse<OrderItemVo> getOrderItemVo(GetOrderItemDto params);
 
+    /**
+     *  新增订单商品信息
+     * @param params
+     * @return {@link RPCBaseResponse }<{@link Void }>
+     */
+
+    @PostMapping("/addShopOrderItem")
+    RPCBaseResponse<Void> addShopOrderItem(List<AddOrderItemDto> params);
 }

+ 12 - 0
edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/order/ShopOrderRemoteController.java

@@ -0,0 +1,12 @@
+package edu.travel.remote.order;
+
+import edu.travel.remote.dto.AddOrderDto;
+import edu.travel.rpc.RPCBaseResponse;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+@FeignClient(name = "order-dev",path = "/shopOrder")
+public interface ShopOrderRemoteController {
+    @PostMapping("/addShopOrder")
+    RPCBaseResponse<Void> addShopOrder(AddOrderDto params);
+}

+ 13 - 0
edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/order/ShopOrderTypeChangeRemoteController.java

@@ -0,0 +1,13 @@
+package edu.travel.remote.order;
+
+import edu.travel.remote.dto.AddOrderLogDto;
+import edu.travel.rpc.RPCBaseResponse;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+@FeignClient(name = "order-dev",path = "/shopOrderTypeChange")
+public interface ShopOrderTypeChangeRemoteController {
+
+    @PostMapping("/addOrderLog")
+    public RPCBaseResponse<Void> addOrderLog(AddOrderLogDto params);
+}

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

@@ -33,8 +33,8 @@ public class ShopSnapshotVo {
      */
     private String imageUrl;
     /**
-     * 商品快照规格
+     * 商品快照规格 SpecValueVo
      */
-    private List<SpecValueVo> snapshotSpec;
+    private List snapshotSpec;
 
 }

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

@@ -160,9 +160,29 @@
         </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-remote-country</artifactId>
             <version>1.0-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-adapter-country</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </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-adapter-currency</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
         <!--        <dependency>-->
         <!--            <groupId>jakarta.validation</groupId>-->
         <!--            <artifactId>jakarta.validation-api</artifactId>-->

+ 4 - 1
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/constant/RedisKey.java

@@ -2,7 +2,7 @@ package edu.travel.commodity.constant;
 
 public interface RedisKey {
     /**商品类型*/
-    String BASH = "shop";
+    String BASH = "shop:";
     /**商品类型*/
    String PRODUCT_TYPE = BASH +"product:type";
    /**热门商品类型*/
@@ -13,4 +13,7 @@ public interface RedisKey {
      * 加上国家
      */
 
+
+    String PRODUCT_ORDER = BASH +"product:order";
+
 }

+ 46 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/enums/OrderStateEnum.java

@@ -0,0 +1,46 @@
+package edu.travel.commodity.enums;
+
+import lombok.Getter;
+
+/**
+ * 类功能描述:
+ *  订单状态枚举
+ * @author 大春
+ * @date 2025/03/06
+ */
+@Getter
+public enum OrderStateEnum {
+    WAITING_FOR_PAYMENT(0, "待付款"),
+    ORDERED(1, "已下单"),
+    AWAITING_SHIPMENT(2, "待发货"),
+    AWAITING_RECEIPT(3, "待收货"),
+    AWAITING_EVALUATION(4, "待评价"),
+    COMPLETED(5, "已完成"),
+    CANCELLED(6, "已取消");
+
+    private final int state;
+    private final String name;
+
+    OrderStateEnum(int state, String name) {
+        this.state = state;
+        this.name = name;
+    }
+
+    public int getState() {
+        return state;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public static OrderStateEnum fromState(int state) {
+        for (OrderStateEnum orderState : values()) {
+            if (orderState.getState() == state) {
+                return orderState;
+            }
+        }
+        throw new IllegalArgumentException("No matching enum found for state: " + state);
+    }
+
+}

+ 6 - 0
edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/mapper/ShopProductSkuMapper.java

@@ -1,9 +1,15 @@
 package edu.travel.commodity.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import edu.travel.commodity.entity.ShopProduct;
 import edu.travel.commodity.entity.ShopProductSku;
+import edu.travel.remote.dto.AddShopProductOrderDto;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 
 public interface ShopProductSkuMapper extends BaseMapper<ShopProductSku> {
 
+    List<ShopProductSku> getByProductSkus(@Param("list") List<AddShopProductOrderDto> params);
 }

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

@@ -2,6 +2,7 @@ package edu.travel.commodity.service;
 
 import edu.travel.commodity.entity.ShopProductSku;
 import com.baomidou.mybatisplus.extension.service.IService;
+import edu.travel.remote.dto.AddShopOrderDto;
 import edu.travel.remote.vo.ShopSkuSpecValueVo;
 
 import java.util.List;
@@ -13,4 +14,5 @@ public interface ShopProductSkuService extends IService<ShopProductSku>{
     Map<String, List<ShopSkuSpecValueVo>> getSkuValuesById(Set<String> skuId);
 
 
+    String shopProductSku(AddShopOrderDto params);
 }

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

@@ -1,27 +1,74 @@
 package edu.travel.commodity.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Snowflake;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import edu.travel.adapter.service.country.CountryAdapter;
+import edu.travel.adapter.service.currency.CurrencyAdapter;
+import edu.travel.adapter.service.order.OrderAdapter;
+import edu.travel.adapter.service.order.OrderItemAdapter;
+import edu.travel.adapter.service.order.ShopOrderLogAdapter;
+import edu.travel.commodity.constant.RedisKey;
+import edu.travel.commodity.entity.ShopAddress;
+import edu.travel.commodity.entity.ShopProduct;
 import edu.travel.commodity.entity.ShopProductSku;
+import edu.travel.commodity.enums.OrderStateEnum;
 import edu.travel.commodity.mapper.ShopProductSkuMapper;
 import edu.travel.commodity.mapper.ShopProductSpecMapper;
+import edu.travel.commodity.service.ShopAddressService;
+import edu.travel.commodity.service.ShopProductService;
 import edu.travel.commodity.service.ShopProductSkuService;
+import edu.travel.exception.BaseException;
+import edu.travel.remote.dto.*;
 import edu.travel.remote.vo.ShopSkuSpecValueVo;
+import edu.travel.remote.vo.ShopSnapshotVo;
+import edu.travel.remote.vo.SpecValueVo;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.vo.BaseCountryServeVo;
+import edu.travel.vo.ShopCurrencyVo;
+import io.seata.spring.annotation.GlobalTransactional;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
+
 @Service
 public class ShopProductSkuServiceImpl extends ServiceImpl<ShopProductSkuMapper, ShopProductSku> implements ShopProductSkuService {
 
 
     @Autowired
     private ShopProductSpecMapper shopProductSpecMapper;
-
+    @Autowired
+    private ShopProductService  shopProductService;
+    @Autowired
+    private RedissonClient redissonClient;
+    @Autowired
+    private ShopProductSkuMapper shopProductSkuMapper;
+    @Autowired
+    private ShopAddressService shopAddressService;
+    @Autowired
+    private CountryAdapter countryAdapter;
+    @Autowired
+    private CurrencyAdapter currencyAdapter;
+    @Autowired
+    private OrderAdapter orderAdapter;
+    @Autowired
+    private OrderItemAdapter orderItemAdapter;
+    @Autowired
+    private ShopOrderLogAdapter shopOrderLogAdapter;
+    @Autowired
+    private ShopProductSkuService shopProductSkuService;
     /**
      *  查询SKU下的规格和对应的规格值 规格 排序  规格值排序
      *  sku -> 规格 ->规格值
@@ -36,5 +83,138 @@ public class ShopProductSkuServiceImpl extends ServiceImpl<ShopProductSkuMapper,
         return  list.stream().collect(Collectors.groupingBy(ShopSkuSpecValueVo::getSkuId));
     }
 
+    @Override
+    @GlobalTransactional
+    public String shopProductSku(AddShopOrderDto params) {
+        List<AddShopProductOrderDto> products = params.getProducts();
+        //商品ID
+        Set<String> product = products.stream().map(AddShopProductOrderDto::getProductId).collect(Collectors.toSet());
+        List<ShopProduct> list1 = shopProductService.lambdaQuery().in(ShopProduct::getId, product).eq(ShopProduct::getStatus, 0).list();
+        if(list1.size()<products.size()){
+            throw new BaseException("商品不存在");
+        }
+        HashMap<String, ShopProduct> productMap = new HashMap<>();
+        for (ShopProduct shopProduct : list1) {
+            productMap.put(shopProduct.getId().toString(), shopProduct);
+        }
+        List<ShopProductSku> list = shopProductSkuMapper.getByProductSkus(products);
+        if(list.size()<products.size()){
+            throw new BaseException("商品规格已下架");
+        }
+        ShopAddress address = shopAddressService.getById(params.getAddressId());
+        if(ObjectUtil.isEmpty(address)){
+            throw new BaseException("地址不存在");
+        }
+        RPCBaseResponse<ShopCurrencyVo> formId1 = currencyAdapter.getFormId(params.getCurrencyId());
+        ShopCurrencyVo currency = formId1.getData();
+        RPCBaseResponse<BaseCountryServeVo> formId =
+                countryAdapter.getFormId(params.getCountry());
+        BaseCountryServeVo country = formId.getData();
+        //product+skuId 升序
+        List<String> collect = list.stream().map(item -> item.getProductId()+":"+ item.getSkuId()).sorted().collect(Collectors.toList());
+        RLock[] locks=new RLock[products.size()];
+        for (int i = 0; i < locks.length; i++) {
+            String s = collect.get(i);
+            locks[i] = redissonClient.getFairLock(RedisKey.PRODUCT_ORDER+s);
+        }
+        RLock multiLock = redissonClient.getMultiLock(locks);
+
+
+        try {
+            if(multiLock.tryLock(20, TimeUnit.SECONDS)){
+                List<ShopProductSku> ls = shopProductSkuMapper.getByProductSkus(products);
+                HashMap<String, ShopProductSku> map = new HashMap<>();
+                for (ShopProductSku l : ls) {
+                    map.put(l.getProductId().toString()+l.getSkuId(),l);
+                }
+                BigDecimal all = new BigDecimal(0L);
+
+                ArrayList<AddOrderItemDto> orderItems = new ArrayList<>();
+                Snowflake snowflake = IdUtil.createSnowflake(1, 1);
+                long orderNum = snowflake.nextId();
+                for (AddShopProductOrderDto dto : products) {
+                    if(dto.getQuantity()<=0) {
+                        throw new BaseException("购买数量异常");
+                    }
+                    ShopProduct shopProduct = productMap.get(dto.getProductId());
+                    ShopProductSku shopProductSku = map.get(dto.getProductId() + dto.getSkuId());
+                    if(ObjectUtil.isEmpty(shopProductSku)||ObjectUtil.isEmpty(shopProduct)){
+                        throw new BaseException("商品"+shopProduct.getProductName()+"已下架");
+                    }
+                    //冻结量
+                    Integer freeze = shopProductSku.getFreeze();
+                    //库存
+                    Integer inventory = shopProductSku.getInventory();
+                    //可用数量
+                    int i = inventory - freeze;
+
+                    if(i<dto.getQuantity()){
+                        throw new BaseException(shopProduct.getProductName()+"库存不足");
+                    }
+                    //修改数量
+                    shopProductSku.setFreeze(shopProductSku.getFreeze()+dto.getQuantity());
+                    //库存数量
+                    shopProductSku.setInventory(shopProductSku.getInventory()-dto.getQuantity());
+                    //商品价格
+                    BigDecimal multiply = shopProductSku.getPrice().multiply(new BigDecimal(dto.getQuantity()));
+                    //总价
+                    all=all.add(multiply);
+
+                    AddOrderItemDto addOrderItemDto = new AddOrderItemDto();
+                    addOrderItemDto.setProductId(shopProduct.getId().toString());
+                    addOrderItemDto.setSkuId(shopProductSku.getSkuId().toString());
+                    addOrderItemDto.setPrice(shopProductSku.getPrice());
+                    addOrderItemDto.setQuantity(dto.getQuantity());
+                    addOrderItemDto.setOrderId(orderNum+"");
+                    //快照信息 ShopSnapshotVo
+
+                    //addOrderItemDto.setSnapshot();
+
+                    orderItems.add(addOrderItemDto);
+                }
+                updateBatchById(ls);
+
+                AddOrderDto order = new AddOrderDto();
+                order.setCountryId(params.getCountry());
+                order.setTotalAmount(all);
+                order.setStatus(OrderStateEnum.WAITING_FOR_PAYMENT.getState());
+                order.setAddressId(params.getAddressId());
+                order.setAddress(address.getDetailedAddress());
+                order.setGlobalCouponId(params.getGlobalCouponId());
+                order.setGlobalCouponId(country.getServiceChargeValue().toString());
+                order.setOrderNumber(orderNum+"");
+                order.setCurrency(currency.getCurrencySymbol());
+                order.setCurrencyId(currency.getId().toString());
+
+                orderAdapter.addShopOrder(order);
+                orderItemAdapter.addShopOrderItem(orderItems);
+                AddOrderLogDto addOrderLogDto = new AddOrderLogDto();
+                addOrderLogDto.setOrderId(orderNum+"");
+                addOrderLogDto.setDescription("下单成功");
+                addOrderLogDto.setStatus(OrderStateEnum.WAITING_FOR_PAYMENT.getState());
+                shopOrderLogAdapter.addOrderLog(addOrderLogDto);
+            }
+        } catch (InterruptedException e) {
+            throw new BaseException(e);
+        }
+        return "下单成功";
+    }
+
+    //获取商品快照信息
+    public Map<String,ShopSnapshotVo> getSnapshot(Set<String> skuId) {
+        Map<String, List<ShopSkuSpecValueVo>> specs = shopProductSkuService.getSkuValuesById(skuId);
+        HashMap<String, ShopSnapshotVo> map = new HashMap<>();
+        specs.forEach((k,v)->{
+            ShopSnapshotVo shopSnapshotVo = new ShopSnapshotVo();
+            List<SpecValueVo> specValueVos = BeanUtil.copyToList(v, SpecValueVo.class);
+            shopSnapshotVo.setSnapshotSpec(specValueVos);
+            map.put(k,shopSnapshotVo);
+        });
+
 
-}
+
+        return map;
+    }
+
+
+    }

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

@@ -12,6 +12,7 @@ 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.ObjectUtils;
 import edu.travel.commodity.utils.PageUtil;
 import edu.travel.commodity.utils.StringUtil;
 import edu.travel.commodity.utils.TokenData;
@@ -106,7 +107,8 @@ public class ShopReviewServiceImpl extends ServiceImpl<ShopReviewMapper, ShopRev
         if(!ObjectUtil.isEmpty(snapshot)){
             //订单快照对象
             ShopSnapshotVo bean1 = JSONUtil.toBean(snapshot, ShopSnapshotVo.class);
-            List<SpecValueVo> snapshot1 = bean1.getSnapshotSpec();
+            List<Object> snapshotSpec = bean1.getSnapshotSpec();
+            List<SpecValueVo> snapshot1 = ObjectUtils.castList(snapshotSpec, SpecValueVo.class);
             String jsonStr = JSONUtil.toJsonStr(snapshot1);
             bean.setSkuDetails(jsonStr);
         }

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

@@ -2,6 +2,8 @@ package edu.travel.commodity.web;
 
 import edu.travel.commodity.entity.ShopProductSku;
 import edu.travel.commodity.service.ShopProductSkuService;
+import edu.travel.remote.commodity.ShopProductSkuRemoteController;
+import edu.travel.remote.dto.AddShopOrderDto;
 import edu.travel.remote.vo.ShopSkuSpecValueVo;
 import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.web.BaseController;
@@ -19,19 +21,35 @@ import java.util.Set;
 * @author xxxxx
 */
 @RestController
-@RequestMapping("/shop_product_sku")
-public class ShopProductSkuController extends BaseController<ShopProductSku> {
+@RequestMapping("/shopProductSku")
+public class ShopProductSkuController extends BaseController<ShopProductSku> implements ShopProductSkuRemoteController {
 /**
 * 服务对象
 */
     @Autowired
     private ShopProductSkuService shopProductSkuService;
 
+
+    /**
+     *  通过sku查询sku规格值
+     * @param skuId
+     * @return {@link RPCBaseResponse }<{@link Map }<{@link String }, {@link List }<{@link ShopSkuSpecValueVo }>>>
+     */
+
     @GetMapping("/getSkuValuesById")
-    public RPCBaseResponse<Map<String, List<ShopSkuSpecValueVo>>> getSkuValuesById(Set<String> skuId){
+    public RPCBaseResponse<Map<String, List<ShopSkuSpecValueVo>>> getSkuValuesById(@RequestParam Set<String> skuId){
         return RPCBaseResponse.success(shopProductSkuService.getSkuValuesById(skuId));
     }
 
+    /**
+     *  商品下单
+     * @param params
+     * @return {@link RPCBaseResponse }<{@link String }>
+     */
 
+    @GetMapping("/shopProductSku")
+    public RPCBaseResponse<String> shopProductSku(@RequestBody AddShopOrderDto params){
+        return RPCBaseResponse.success(shopProductSkuService.shopProductSku(params));
+    }
 
 }

+ 12 - 1
edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductSkuMapper.xml

@@ -26,8 +26,19 @@
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, sku_id, product_id, warehouse_id, `freeze`, inventory, `status`, price, project, image_url,sales_volume,barcodes,
+    SELECT id, sku_id, product_id, warehouse_id, `freeze`, inventory, `status`, price, project, image_url,sales_volume,barcodes,
     create_time, create_user_id, update_time, update_user_id, delete_flag,cost_price,unit_id
+    FROM shop_product_sku
   </sql>
 
+  <select id="getByProductSkus" resultType="edu.travel.commodity.entity.ShopProductSku">
+    <include refid="Base_Column_List"/>
+    <where>
+    <if test="list !=null and list.size()>0">(sku_id, product_id) IN
+      <foreach collection="list" item="item" open="(" separator="," close=")">
+        (#{item.skuId}, #{item.productId})
+      </foreach>
+    </if>
+    </where>
+    </select>
 </mapper>

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

@@ -40,7 +40,7 @@
       #{sku}
     </foreach>
     ORDER BY
-    sp.sort_order ASC;
+    sp.sort_order ASC,
     sv.sort_order ASC;
     </select>
 </mapper>

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

@@ -99,11 +99,7 @@
             <groupId>com.alibaba.csp</groupId>
             <artifactId>sentinel-web-servlet</artifactId>
         </dependency>
-        <dependency>
-            <groupId>edu.travel</groupId>
-            <artifactId>edu-travel-remote-tenant</artifactId>
-            <version>1.0-SNAPSHOT</version>
-        </dependency>
+
         <dependency>
             <groupId>edu.travel</groupId>
             <artifactId>edu-travel-common-util</artifactId>
@@ -145,6 +141,26 @@
             <artifactId>edu-travel-remote-order</artifactId>
             <version>1.0-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-adapter-commodity</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-remote-commodity</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-remote-tenant</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-adapter-tenant</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
         <!--        <dependency>-->
         <!--            <groupId>jakarta.validation</groupId>-->
         <!--            <artifactId>jakarta.validation-api</artifactId>-->

+ 10 - 9
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/controller/ShopOrderController.java

@@ -3,22 +3,21 @@ 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.AddOrderDto;
 import edu.travel.remote.dto.ShowOrderInfoDto;
+import edu.travel.remote.order.ShopOrderRemoteController;
 import edu.travel.remote.vo.ShowOrderInfoVo;
 import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.web.BaseController;
 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> {
+public class ShopOrderController extends BaseController<ShopOrder> implements ShopOrderRemoteController {
     @Autowired
     private ShopOrderService shopOrderService;
 
@@ -31,14 +30,16 @@ public class ShopOrderController extends BaseController<ShopOrder> {
     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));
+    @Override
+    public RPCBaseResponse<Void> addShopOrder(AddOrderDto params) {
+        shopOrderService.addShopOrder(params);
+        return success();
     }
+
+
+
 }

+ 22 - 5
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/controller/ShopOrderItemController.java

@@ -6,6 +6,7 @@ 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.AddOrderItemDto;
 import edu.travel.remote.dto.GetOrderItemDto;
 import edu.travel.remote.order.ShopOrderItemRemoteController;
 import edu.travel.remote.vo.OrderItemVo;
@@ -14,10 +15,7 @@ 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 org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -31,6 +29,13 @@ public class ShopOrderItemController extends BaseController<ShopOrderItem> imple
     @Autowired
     private ShopOrderItemService shopOrderItemService;
 
+    /**
+     *  获取订单商品详情
+     * @param params
+     * @return {@link RPCBaseResponse }<{@link OrderItemVo }>
+     */
+
+    @Override
     @GetMapping("/getOrderItemVo")
     public RPCBaseResponse<OrderItemVo> getOrderItemVo(@RequestBody GetOrderItemDto params) {
 
@@ -43,9 +48,21 @@ public class ShopOrderItemController extends BaseController<ShopOrderItem> imple
             ShopSnapshotVo bean1 = JSONUtil.toBean(shopOrderItem.getSnapshot(), ShopSnapshotVo.class);
             bean.setShopSnapshotVo(bean1);
         }
-        //订单快照对象
         return success(bean);
     }
 
+    /**
+     *  添加订单商品信息
+     * @param params
+     * @return {@link RPCBaseResponse }<{@link Void }>
+     */
+
+    @Override
+    @PostMapping("/addShopOrderItem")
+    public RPCBaseResponse<Void> addShopOrderItem(@RequestBody List<AddOrderItemDto> params) {
+        shopOrderItemService.addShopOrderItem(params);
+        return success();
+    }
+
 
 }

+ 13 - 1
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/controller/ShopOrderTypeChangeController.java

@@ -2,16 +2,28 @@ package edu.travel.order.controller;
 
 import edu.travel.order.entity.ShopOrderTypeChange;
 import edu.travel.order.service.ShopOrderTypeChangeService;
+import edu.travel.remote.dto.AddOrderLogDto;
+import edu.travel.remote.order.ShopOrderTypeChangeRemoteController;
+import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.web.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import static edu.travel.rpc.RPCBaseResponse.success;
+
 @RestController
 @RequestMapping("/shopOrderTypeChange")
-public class ShopOrderTypeChangeController extends BaseController<ShopOrderTypeChange> {
+public class ShopOrderTypeChangeController extends BaseController<ShopOrderTypeChange> implements ShopOrderTypeChangeRemoteController {
     @Autowired
     private ShopOrderTypeChangeService shopOrderTypeChangeService;
 
 
+    @Override
+    @PostMapping("/addOrderLog")
+    public RPCBaseResponse<Void> addOrderLog(AddOrderLogDto params) {
+        shopOrderTypeChangeService.addOrderLog(params);
+        return success();
+    }
 }

+ 8 - 2
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/entity/ShopOrderTypeChange.java

@@ -26,10 +26,16 @@ public class ShopOrderTypeChange extends BaseEntity {
     private Long id;
 
     /**
-     * 订单表ID
+     * 订单
      */
     @TableField(value = "order_id")
-    private Long orderId;
+    private String orderId;
+
+    /**
+     * 描述
+     */
+    @TableField(value = "description")
+    private String description;
 
     /**
      * 0待付款, 1已下单, 2待发货,3待收货,4待评价,5已完成,6已取消

+ 4 - 0
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/ShopOrderItemService.java

@@ -2,8 +2,12 @@ package edu.travel.order.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import edu.travel.order.entity.ShopOrderItem;
+import edu.travel.remote.dto.AddOrderItemDto;
+
+import java.util.List;
 
 public interface ShopOrderItemService extends IService<ShopOrderItem> {
 
 
+    void addShopOrderItem(List<AddOrderItemDto> params);
 }

+ 2 - 4
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/ShopOrderService.java

@@ -3,16 +3,14 @@ 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.AddOrderDto;
 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);
+    void addShopOrder(AddOrderDto params);
 }

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

@@ -2,8 +2,10 @@ package edu.travel.order.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import edu.travel.order.entity.ShopOrderTypeChange;
+import edu.travel.remote.dto.AddOrderLogDto;
 
 public interface ShopOrderTypeChangeService extends IService<ShopOrderTypeChange> {
 
 
+    void addOrderLog(AddOrderLogDto params);
 }

+ 11 - 0
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/impl/ShopOrderItemServiceImpl.java

@@ -1,12 +1,23 @@
 package edu.travel.order.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import edu.travel.order.entity.ShopOrderItem;
 import edu.travel.order.mapper.ShopOrderItemMapper;
 import edu.travel.order.service.ShopOrderItemService;
+import edu.travel.remote.dto.AddOrderItemDto;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
+
 @Service
 public class ShopOrderItemServiceImpl extends ServiceImpl<ShopOrderItemMapper, ShopOrderItem> implements ShopOrderItemService {
 
+
+    @Override
+    public void addShopOrderItem(List<AddOrderItemDto> params) {
+        List<ShopOrderItem> shopOrderItems = BeanUtil.copyToList(params, ShopOrderItem.class);
+        saveBatch(shopOrderItems);
+    }
 }

+ 6 - 3
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/impl/ShopOrderServiceImpl.java

@@ -15,7 +15,7 @@ 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.AddOrderDto;
 import edu.travel.remote.dto.ShowOrderInfoDto;
 import edu.travel.remote.vo.OrderItemVo;
 import edu.travel.remote.vo.ShopSnapshotVo;
@@ -33,6 +33,7 @@ public class ShopOrderServiceImpl extends ServiceImpl<ShopOrderMapper, ShopOrder
     @Autowired
     private ShopOrderItemService shopOrderItemService;
 
+
     @Override
     public Page<ShowOrderInfoVo> showOrderInfo(ShowOrderInfoDto params) {
         String userId = TokenData.getUserId();
@@ -73,8 +74,10 @@ public class ShopOrderServiceImpl extends ServiceImpl<ShopOrderMapper, ShopOrder
     }
 
     @Override
-    public String addOrder(List<AddReviewDto> params) {
+    public void addShopOrder(AddOrderDto params) {
+
 
-        return null;
     }
+
+
 }

+ 7 - 0
edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/impl/ShopOrderTypeChangeServiceImpl.java

@@ -1,12 +1,19 @@
 package edu.travel.order.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import edu.travel.order.entity.ShopOrderTypeChange;
 import edu.travel.order.mapper.ShopOrderTypeChangeMapper;
 import edu.travel.order.service.ShopOrderTypeChangeService;
+import edu.travel.remote.dto.AddOrderLogDto;
 import org.springframework.stereotype.Service;
 
 @Service
 public class ShopOrderTypeChangeServiceImpl extends ServiceImpl<ShopOrderTypeChangeMapper, ShopOrderTypeChange> implements ShopOrderTypeChangeService {
 
+    @Override
+    public void addOrderLog(AddOrderLogDto params) {
+        ShopOrderTypeChange bean = BeanUtil.toBean(params, ShopOrderTypeChange.class);
+        save(bean);
+    }
 }

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

@@ -5,7 +5,7 @@
     <!--@mbg.generated-->
     <!--@Table shop_order_type_change-->
     <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="status" jdbcType="INTEGER" property="status" />
     <result column="project" jdbcType="VARCHAR" property="project" />
     <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
@@ -13,10 +13,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="description" jdbcType="VARCHAR" property="description" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, order_id, `status`,project, create_time, create_user_id, update_time, update_user_id,
-    delete_flag
+    delete_flag,description
   </sql>
 </mapper>