Ver código fonte

Merge remote-tracking branch 'origin/main'

1 semana atrás
pai
commit
c0ca2efd9a
59 arquivos alterados com 1314 adições e 82 exclusões
  1. 47 0
      edu-travel-adapter/edu-travel-adapter-commodity/pom.xml
  2. 41 0
      edu-travel-adapter/edu-travel-adapter-country/pom.xml
  3. 42 0
      edu-travel-adapter/edu-travel-adapter-country/src/main/java/edu/travel/adapter/service/country/CurrencyAdapter.java
  4. 42 0
      edu-travel-adapter/edu-travel-adapter-currency/pom.xml
  5. 18 0
      edu-travel-adapter/edu-travel-adapter-order/src/main/java/edu/travel/adapter/service/order/OrderAdapter.java
  6. 8 0
      edu-travel-adapter/edu-travel-adapter-order/src/main/java/edu/travel/adapter/service/order/OrderItemAdapter.java
  7. 17 0
      edu-travel-adapter/edu-travel-adapter-order/src/main/java/edu/travel/adapter/service/order/ShopOrderLogAdapter.java
  8. 3 0
      edu-travel-adapter/pom.xml
  9. 5 0
      edu-travel-common/edu-travel-common-cache/pom.xml
  10. 4 4
      edu-travel-oauth/src/main/resources/bootstrap-dev.yml
  11. 0 5
      edu-travel-remote/edu-travel-remote-commodity/pom.xml
  12. 14 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/commodity/ShopProductSkuRemoteController.java
  13. 41 0
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/AddShopOrderDto.java
  14. 1 6
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/dto/AddShopProductOrderDto.java
  15. 1 2
      edu-travel-remote/edu-travel-remote-commodity/src/main/java/edu/travel/remote/vo/ShopReviewVo.java
  16. 0 5
      edu-travel-remote/edu-travel-remote-order/pom.xml
  17. 109 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/AddOrderDto.java
  18. 60 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/AddOrderItemDto.java
  19. 28 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/AddOrderLogDto.java
  20. 6 1
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/dto/ShowOrderInfoDto.java
  21. 12 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/order/ShopOrderItemRemoteController.java
  22. 12 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/order/ShopOrderRemoteController.java
  23. 13 0
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/order/ShopOrderTypeChangeRemoteController.java
  24. 2 2
      edu-travel-remote/edu-travel-remote-order/src/main/java/edu/travel/remote/vo/ShopSnapshotVo.java
  25. 65 0
      edu-travel-remote/edu-travel-remote-warehouse/pom.xml
  26. 17 0
      edu-travel-remote/edu-travel-remote-warehouse/src/main/java/edu/travel/dto/ShopWarehouseDto.java
  27. 80 0
      edu-travel-remote/edu-travel-remote-warehouse/src/main/java/edu/travel/dto/ShopWarehouseSaveDto.java
  28. 4 3
      edu-travel-remote/edu-travel-remote-warehouse/src/main/java/edu/travel/dto/ShopWarehouseStaffDto.java
  29. 4 3
      edu-travel-remote/edu-travel-remote-warehouse/src/main/java/edu/travel/vo/ShopWarehouseStaffVo.java
  30. 1 0
      edu-travel-remote/pom.xml
  31. 20 0
      edu-travel-service/edu-travel-service-commodity/pom.xml
  32. 4 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/constant/RedisKey.java
  33. 46 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/enums/OrderStateEnum.java
  34. 6 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/mapper/ShopProductSkuMapper.java
  35. 2 0
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/ShopProductSkuService.java
  36. 182 2
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopProductSkuServiceImpl.java
  37. 3 1
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/service/impl/ShopReviewServiceImpl.java
  38. 21 3
      edu-travel-service/edu-travel-service-commodity/src/main/java/edu/travel/commodity/web/ShopProductSkuController.java
  39. 12 1
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductSkuMapper.xml
  40. 1 1
      edu-travel-service/edu-travel-service-commodity/src/main/resources/mapper/ShopProductSpecMapper.xml
  41. 21 5
      edu-travel-service/edu-travel-service-order/pom.xml
  42. 10 9
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/controller/ShopOrderController.java
  43. 22 5
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/controller/ShopOrderItemController.java
  44. 13 1
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/controller/ShopOrderTypeChangeController.java
  45. 8 2
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/entity/ShopOrderTypeChange.java
  46. 4 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/ShopOrderItemService.java
  47. 2 4
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/ShopOrderService.java
  48. 2 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/ShopOrderTypeChangeService.java
  49. 11 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/impl/ShopOrderItemServiceImpl.java
  50. 6 3
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/impl/ShopOrderServiceImpl.java
  51. 7 0
      edu-travel-service/edu-travel-service-order/src/main/java/edu/travel/order/service/impl/ShopOrderTypeChangeServiceImpl.java
  52. 3 2
      edu-travel-service/edu-travel-service-order/src/main/resources/mapper/ShopOrderTypeChangeMapper.xml
  53. 18 0
      edu-travel-service/edu-travel-service-warehouse/pom.xml
  54. 3 1
      edu-travel-service/edu-travel-service-warehouse/src/main/java/edu/travel/warehouse/entity/ShopWarehouse.java
  55. 3 1
      edu-travel-service/edu-travel-service-warehouse/src/main/java/edu/travel/warehouse/entity/ShopWarehouseStaff.java
  56. 3 0
      edu-travel-service/edu-travel-service-warehouse/src/main/java/edu/travel/warehouse/mapper/ShopWarehouseStaffMapper.java
  57. 5 0
      edu-travel-service/edu-travel-service-warehouse/src/main/java/edu/travel/warehouse/service/ShopWarehouseService.java
  58. 163 9
      edu-travel-service/edu-travel-service-warehouse/src/main/java/edu/travel/warehouse/service/impl/ShopWarehouseServiceImpl.java
  59. 16 0
      edu-travel-service/edu-travel-service-warehouse/src/main/java/edu/travel/warehouse/web/ShopWarehouseController.java

+ 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>

+ 41 - 0
edu-travel-adapter/edu-travel-adapter-country/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-country</artifactId>
+    <packaging>jar</packaging>
+
+    <name>edu-travel-adapter-country</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-country</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>

+ 42 - 0
edu-travel-adapter/edu-travel-adapter-country/src/main/java/edu/travel/adapter/service/country/CurrencyAdapter.java

@@ -0,0 +1,42 @@
+package edu.travel.adapter.service.country;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import edu.travel.adapter.annotation.AdapterAnnotation;
+import edu.travel.dto.ShopCurrencyDto;
+import edu.travel.remote.ShopCurrencyRemoteController;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.vo.ShopCurrencyVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+@Component
+public class CurrencyAdapter {
+    @Autowired
+    private ShopCurrencyRemoteController currencyRemoteController;
+    //分页
+    @AdapterAnnotation
+    public RPCBaseResponse<IPage<ShopCurrencyVo>> getCurrencyPage(ShopCurrencyDto dto) {
+        return currencyRemoteController.getCurrencyPage(dto);
+    }
+    @AdapterAnnotation
+    public RPCBaseResponse<ShopCurrencyVo> getFormId(String id) {
+        return currencyRemoteController.getFormId(id);
+    }
+    @AdapterAnnotation
+    public RPCBaseResponse<ShopCurrencyVo> updateTargetFormId(ShopCurrencyDto entity) {
+        return currencyRemoteController.updateTargetFormId(entity);
+    }
+    @AdapterAnnotation
+    public RPCBaseResponse<ShopCurrencyVo> deleteTargetFormId(List<String> ids) {
+        return currencyRemoteController.deleteTargetFormId(ids);
+    }
+    @AdapterAnnotation
+    public RPCBaseResponse<List<ShopCurrencyVo>> getAllForm() {
+        return currencyRemoteController.getAllForm();
+    }
+    @AdapterAnnotation
+    public RPCBaseResponse<ShopCurrencyVo> saveFormTarget(ShopCurrencyDto entity) {
+        return currencyRemoteController.saveFormTarget(entity);
+    }
+}

+ 42 - 0
edu-travel-adapter/edu-travel-adapter-currency/pom.xml

@@ -0,0 +1,42 @@
+<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-currency</artifactId>
+    <packaging>jar</packaging>
+
+    <name>edu-travel-adapter-currency</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-country</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>

+ 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);
+    }
+}

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

@@ -15,7 +15,10 @@
     <modules>
         <module>edu-travel-adapter-upload</module>
         <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>

+ 4 - 4
edu-travel-oauth/src/main/resources/bootstrap-dev.yml

@@ -2,13 +2,13 @@ spring:
   cloud:
     nacos:
       discovery:
-        server-addr: localhost:8848,localhost:8849,localhost:8858
-        namespace: edu-@env@
+        server-addr: 192.168.1.44:8848,192.168.1.44:8849,192.168.1.44:8858
+        namespace: yangzheng-@env@
       config:
         file-extension: yaml
-        server-addr: localhost:8848,localhost:8849,localhost:8858
+        server-addr: 192.168.1.44:8848,192.168.1.44:8849,192.168.1.44:8858
         refresh-enabled: true
-        namespace: edu-@env@
+        namespace: yangzheng-@env@
         shared-configs:
           - data-id: mybatis-config-dev.yaml
             group: DEFAULT_GROUP

+ 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;
 
 }

+ 65 - 0
edu-travel-remote/edu-travel-remote-warehouse/pom.xml

@@ -0,0 +1,65 @@
+<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-warehouse</artifactId>
+    <packaging>jar</packaging>
+
+    <name>edu-travel-remote-warehouse</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>
+    </dependencies>
+</project>

+ 17 - 0
edu-travel-remote/edu-travel-remote-warehouse/src/main/java/edu/travel/dto/ShopWarehouseDto.java

@@ -4,6 +4,7 @@ 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 com.fasterxml.jackson.annotation.JsonFormat;
 import edu.travel.po.PagePO;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -60,4 +61,20 @@ public class ShopWarehouseDto extends PagePO {
      * 删除标记 0正常 1删除
      */
     private Integer deleteFlag;
+    /**
+     * 项目标识
+     */
+    private String project;
+    /**
+     *
+     * 创建时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+    /**
+     * 更新时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
 }

+ 80 - 0
edu-travel-remote/edu-travel-remote-warehouse/src/main/java/edu/travel/dto/ShopWarehouseSaveDto.java

@@ -0,0 +1,80 @@
+package edu.travel.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import edu.travel.po.PagePO;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+@Data
+public class ShopWarehouseSaveDto extends PagePO{
+    /**
+     * 库房表ID
+     */
+    private Long id;
+
+    /**
+     * 0是总仓
+     */
+    private Long parentId;
+
+    /**
+     * 库房名称
+     */
+    private String warehouseName;
+
+    /**
+     * 经度
+     */
+    private String longitude;
+
+    /**
+     * 维度
+     */
+    private String latitude;
+
+    /**
+     * 国家ID
+     */
+    private String countryServeId;
+
+    /**
+     * 库房详细地址
+     */
+    private String detailedAddress;
+
+    /**
+     * '启用禁用 0 启用 1禁用'
+     */
+    private Integer status;
+
+    /**
+     * 删除标记 0正常 1删除
+     */
+    private Integer deleteFlag;
+    /**
+     * 项目标识
+     */
+    private String project;
+    /**
+     * 创建人
+     */
+    private String createUserId;
+    /**
+     * 更新人
+     */
+    private String updateUserId;
+    /**
+     *
+     * 创建时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+    /**
+     * 更新时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    private List<ShopWarehouseStaffDto> staffList; // 员工角色信息
+}

+ 4 - 3
edu-travel-remote/edu-travel-remote-warehouse/src/main/java/edu/travel/dto/ShopWarehouseStaffDto.java

@@ -4,6 +4,7 @@ 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 com.fasterxml.jackson.annotation.JsonFormat;
 import edu.travel.po.PagePO;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -15,9 +16,6 @@ import java.util.Date;
  * 库房人员关联表
  */
 @Data
-@AllArgsConstructor
-@NoArgsConstructor
-@TableName(value = "shop_warehouse_staff")
 public class ShopWarehouseStaffDto extends PagePO {
     /**
      * ID
@@ -47,6 +45,7 @@ public class ShopWarehouseStaffDto extends PagePO {
     /**
      * 创建时间
      */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
     /**
@@ -57,6 +56,7 @@ public class ShopWarehouseStaffDto extends PagePO {
     /**
      * 更新时间
      */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
 
     /**
@@ -68,4 +68,5 @@ public class ShopWarehouseStaffDto extends PagePO {
      * 删除标记 0正常 1删除
      */
     private Integer deleteFlag;
+
 }

+ 4 - 3
edu-travel-remote/edu-travel-remote-warehouse/src/main/java/edu/travel/vo/ShopWarehouseStaffVo.java

@@ -13,9 +13,6 @@ import java.util.Date;
  * 库房人员关联表
  */
 @Data
-@AllArgsConstructor
-@NoArgsConstructor
-@TableName(value = "shop_warehouse_staff")
 public class ShopWarehouseStaffVo extends BaseEntity {
     /**
      * ID
@@ -57,4 +54,8 @@ public class ShopWarehouseStaffVo extends BaseEntity {
      * 删除标记 0正常 1删除
      */
     private Integer deleteFlag;
+    /**
+     * 项目标识
+     */
+    private String project;
 }

+ 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-warehouse</module>
         <module>edu-travel-remote-order</module>
     </modules>
 

+ 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>

+ 18 - 0
edu-travel-service/edu-travel-service-warehouse/pom.xml

@@ -139,6 +139,24 @@
             <version>1.2.6</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-remote-warehouse</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-adapter-country</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-adapter-tenant</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
         <!--        <dependency>-->
         <!--            <groupId>jakarta.validation</groupId>-->
         <!--            <artifactId>jakarta.validation-api</artifactId>-->

+ 3 - 1
edu-travel-service/edu-travel-service-warehouse/src/main/java/edu/travel/warehouse/entity/ShopWarehouse.java

@@ -5,6 +5,8 @@ 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;
@@ -16,7 +18,7 @@ import lombok.NoArgsConstructor;
 @AllArgsConstructor
 @NoArgsConstructor
 @TableName(value = "shop_warehouse")
-public class ShopWarehouse {
+public class ShopWarehouse extends BaseEntity {
     /**
      * 库房表ID
      */

+ 3 - 1
edu-travel-service/edu-travel-service-warehouse/src/main/java/edu/travel/warehouse/entity/ShopWarehouseStaff.java

@@ -5,6 +5,8 @@ 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;
@@ -16,7 +18,7 @@ import lombok.NoArgsConstructor;
 @AllArgsConstructor
 @NoArgsConstructor
 @TableName(value = "shop_warehouse_staff")
-public class ShopWarehouseStaff {
+public class ShopWarehouseStaff extends BaseEntity {
     /**
      * ID
      */

+ 3 - 0
edu-travel-service/edu-travel-service-warehouse/src/main/java/edu/travel/warehouse/mapper/ShopWarehouseStaffMapper.java

@@ -2,6 +2,9 @@ package edu.travel.warehouse.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import edu.travel.warehouse.entity.ShopWarehouseStaff;
+import org.apache.ibatis.annotations.Update;
 
 public interface ShopWarehouseStaffMapper extends BaseMapper<ShopWarehouseStaff> {
+    @Update("UPDATE shop_warehouse_staff SET delete_flag = 1 WHERE warehouse_id = #{warehouseId}")
+    void deleteByWarehouseId(Long warehouseId);
 }

+ 5 - 0
edu-travel-service/edu-travel-service-warehouse/src/main/java/edu/travel/warehouse/service/ShopWarehouseService.java

@@ -3,6 +3,7 @@ package edu.travel.warehouse.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import edu.travel.dto.ShopWarehouseDto;
+import edu.travel.dto.ShopWarehouseSaveDto;
 import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.vo.ShopWarehouseStaffVo;
 import edu.travel.vo.ShopWarehouseVo;
@@ -18,4 +19,8 @@ public interface ShopWarehouseService extends IService<ShopWarehouse> {
 
     //库房关联人员(角色)查询
     RPCBaseResponse<List<ShopWarehouseStaffVo>> getWarehouseTenantRole(String id);
+//连表新增
+    RPCBaseResponse<ShopWarehouseVo> saveAllForm(ShopWarehouseSaveDto entity);
+
+    RPCBaseResponse<ShopWarehouseVo> updateWarehouse(ShopWarehouseSaveDto entity);
 }

+ 163 - 9
edu-travel-service/edu-travel-service-warehouse/src/main/java/edu/travel/warehouse/service/impl/ShopWarehouseServiceImpl.java

@@ -1,5 +1,7 @@
 package edu.travel.warehouse.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -7,6 +9,8 @@ import edu.travel.adapter.service.country.CountryAdapter;
 import edu.travel.adapter.service.tenant.SysRoleAdapter;
 import edu.travel.adapter.service.tenant.TenantAdapter;
 import edu.travel.dto.ShopWarehouseDto;
+import edu.travel.dto.ShopWarehouseSaveDto;
+import edu.travel.dto.ShopWarehouseStaffDto;
 import edu.travel.remote.feign.mode.vo.tenant.EduTenantVo;
 import edu.travel.remote.feign.mode.vo.tenant.SysRoleVo;
 import edu.travel.rpc.RPCBaseResponse;
@@ -21,7 +25,10 @@ import edu.travel.warehouse.mapper.ShopWarehouseStaffMapper;
 import edu.travel.warehouse.service.ShopWarehouseService;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -40,13 +47,6 @@ public class ShopWarehouseServiceImpl extends SysServiceImpl<ShopWarehouseMapper
     private ShopWarehouseStaffMapper shopWarehouseStaffMapper;
     /**
      * 树形结构查询(连表)
-     * @param dto
-     * @return
-     */
-    /**
-     * 树形结构查询(连表)
-     * @param dto
-     * @return
      */
     @Override
     public RPCBaseResponse<List<ShopWarehouseVo>> getWarehouseCountryForm(ShopWarehouseDto dto) {
@@ -82,6 +82,9 @@ public class ShopWarehouseServiceImpl extends SysServiceImpl<ShopWarehouseMapper
         return new RPCBaseResponse<>(200, "SUCCESS", tree);
     }
 
+    /**
+     * 分页动态查询(连表)
+     */
     @Override
     public RPCBaseResponse<IPage<ShopWarehouseVo>> getWarehouseCountryPageForm(ShopWarehouseDto dto) {
         // 创建分页对象
@@ -93,7 +96,7 @@ public class ShopWarehouseServiceImpl extends SysServiceImpl<ShopWarehouseMapper
                 dto.getStatus(),
                 dto.getParentId(),
                 dto.getPageSize(),
-                (int) ((dto.getCurrentPage() - 1) * dto.getPageSize())
+                (dto.getCurrentPage() - 1) * dto.getPageSize()
         );
         int total = shopWarehouseMapper.countWarehouseWithCountry(dto.getWarehouseName(), dto.getStatus(), dto.getParentId());
 
@@ -134,6 +137,9 @@ public class ShopWarehouseServiceImpl extends SysServiceImpl<ShopWarehouseMapper
         return new RPCBaseResponse<>(200, "SUCCESS", pageVoLink);
     }
 
+    /**
+     * 提取国家数据
+     */
     private Map<String, BaseCountryServeVo> fetchCountryData(Set<String> countryServeIds) {
         Map<String, BaseCountryServeVo> countryMap = new HashMap<>();
         if (!countryServeIds.isEmpty()) {
@@ -147,6 +153,9 @@ public class ShopWarehouseServiceImpl extends SysServiceImpl<ShopWarehouseMapper
         return countryMap;
     }
 
+    /**
+     * 提取仓库数据
+     */
     private Map<Long, List<ShopWarehouseStaffVo>> fetchWarehouseTenantRoles(Set<Long> ids) {
         Map<Long, List<ShopWarehouseStaffVo>> staffMap = new HashMap<>();
         if (!ids.isEmpty()) {
@@ -160,6 +169,9 @@ public class ShopWarehouseServiceImpl extends SysServiceImpl<ShopWarehouseMapper
         return staffMap;
     }
 
+    /**
+     *生成map
+     */
     private ShopWarehouseVo mapToWarehouseVo(ShopWarehouse shopWarehouse,
                                              Map<String, BaseCountryServeVo> countryMap,
                                              Map<Long, List<ShopWarehouseStaffVo>> staffMap) {
@@ -171,6 +183,7 @@ public class ShopWarehouseServiceImpl extends SysServiceImpl<ShopWarehouseMapper
         shopWarehouseVo.setLatitude(shopWarehouse.getLatitude());
         shopWarehouseVo.setDetailedAddress(shopWarehouse.getDetailedAddress());
         shopWarehouseVo.setStatus(shopWarehouse.getStatus());
+        shopWarehouseVo.setProject(shopWarehouse.getProject());
         shopWarehouseVo.setParentId(shopWarehouse.getParentId());
         shopWarehouseVo.setDeleteFlag(shopWarehouse.getDeleteFlag());
         shopWarehouseVo.setMap(new HashMap<>());
@@ -184,6 +197,9 @@ public class ShopWarehouseServiceImpl extends SysServiceImpl<ShopWarehouseMapper
         return shopWarehouseVo;
     }
 
+    /**
+     * 构建树
+     */
     private void addToTree(List<ShopWarehouseVo> tree, ShopWarehouseVo warehouseVo, Map<Long, ShopWarehouseVo> warehouseVoMap) {
         if (warehouseVo.getParentId() == null || warehouseVo.getParentId() == 0) {
             tree.add(warehouseVo);
@@ -201,7 +217,6 @@ public class ShopWarehouseServiceImpl extends SysServiceImpl<ShopWarehouseMapper
 
     /**
      * 库房关联人员(角色)查询,通过库房id,查询用户以及角色
-     * @return
      */
     @Override
     public RPCBaseResponse<List<ShopWarehouseStaffVo>> getWarehouseTenantRole(String id) {
@@ -278,4 +293,143 @@ public class ShopWarehouseServiceImpl extends SysServiceImpl<ShopWarehouseMapper
         return new RPCBaseResponse<>(200, "SUCCESS", resultList);
     }
 
+    /**
+     * 新增连表
+     * @param entity
+     * @return
+     */
+    @Override
+    @Transactional // 确保方法在事务中执行
+    public RPCBaseResponse<ShopWarehouseVo> saveAllForm(ShopWarehouseSaveDto entity) {
+        // 创建一个新的 ShopWarehouse 实体
+        ShopWarehouse warehouse = new ShopWarehouse();
+
+        // 获取当前用户 ID
+        Long currentUserId = getCurrentUserId(); // 获取当前用户 ID
+
+        // 将 DTO 中的属性复制到实体对象中
+        copyWarehouseProperties(entity, warehouse);
+        warehouse.setCreateUserId(String.valueOf(currentUserId)); // 填充创建人 ID
+
+        // 插入仓库信息到数据库
+        shopWarehouseMapper.insert(warehouse);
+
+        // 如果存在员工列表,则保存员工角色信息
+        if (entity.getStaffList() != null && !entity.getStaffList().isEmpty()) {
+            saveStaffRoles(entity.getStaffList(), warehouse.getId(), currentUserId); // 传入用户 ID
+        }
+
+        // 构建并返回响应对象
+        ShopWarehouseVo warehouseVo = new ShopWarehouseVo();
+        warehouseVo.setId(warehouse.getId());
+        warehouseVo.setWarehouseName(warehouse.getWarehouseName());
+        warehouseVo.setProject(warehouse.getProject());
+        warehouseVo.setCreateTime(warehouse.getCreateTime());
+        warehouseVo.setCreateUserId(warehouse.getCreateUserId());
+        warehouseVo.setUpdateTime(warehouse.getUpdateTime());
+        warehouseVo.setUpdateUserId(warehouse.getUpdateUserId());
+        warehouseVo.setDeleteFlag(warehouse.getDeleteFlag());
+        warehouseVo.setParentId(warehouse.getParentId());
+        warehouseVo.setLongitude(warehouse.getLongitude());
+        warehouseVo.setLatitude(warehouse.getLatitude());
+        warehouseVo.setCountryServeId(warehouse.getCountryServeId());
+        warehouseVo.setDetailedAddress(warehouse.getDetailedAddress());
+        warehouseVo.setStatus(warehouse.getStatus());
+        // 其他字段映射...
+
+        // 返回成功的响应
+        return new RPCBaseResponse<>(200, "SUCCESS", warehouseVo);
+    }
+
+    @Override
+    @Transactional // 确保方法在事务中执行
+    public RPCBaseResponse<ShopWarehouseVo> updateWarehouse(ShopWarehouseSaveDto entity) {
+        // 根据 ID 查找现有的仓库信息
+        ShopWarehouse existingWarehouse = shopWarehouseMapper.selectById(entity.getId());
+
+        // 如果找不到该仓库,返回错误响应
+        if (existingWarehouse == null) {
+            return new RPCBaseResponse<>(404, "NULL", null);
+        }
+
+        // 更新现有仓库的属性
+        copyWarehouseProperties(entity, existingWarehouse);
+
+        // 获取当前用户 ID
+        Long currentUserId = getCurrentUserId(); // 获取当前用户 ID
+        existingWarehouse.setUpdateUserId(String.valueOf(currentUserId)); // 填充更新人 ID
+
+        // 更新仓库信息到数据库
+        shopWarehouseMapper.updateById(existingWarehouse);
+
+        // 更新员工角色信息
+        if (entity.getStaffList() != null) {
+            // 先删除原有员工信息
+            shopWarehouseStaffMapper.deleteByWarehouseId(existingWarehouse.getId());
+            // 然后插入新的员工角色信息
+            saveStaffRoles(entity.getStaffList(), existingWarehouse.getId(), currentUserId); // 传入用户 ID
+        }
+
+        // 构建并返回响应对象
+        ShopWarehouseVo warehouseVo = new ShopWarehouseVo();
+        warehouseVo.setId(existingWarehouse.getId());
+        warehouseVo.setWarehouseName(existingWarehouse.getWarehouseName());
+        warehouseVo.setProject(existingWarehouse.getProject());
+        warehouseVo.setCreateTime(existingWarehouse.getCreateTime());
+        warehouseVo.setCreateUserId(existingWarehouse.getCreateUserId());
+        warehouseVo.setUpdateTime(existingWarehouse.getUpdateTime());
+        warehouseVo.setUpdateUserId(existingWarehouse.getUpdateUserId());
+        warehouseVo.setDeleteFlag(existingWarehouse.getDeleteFlag());
+        warehouseVo.setParentId(existingWarehouse.getParentId());
+        warehouseVo.setLongitude(existingWarehouse.getLongitude());
+        warehouseVo.setLatitude(existingWarehouse.getLatitude());
+        warehouseVo.setCountryServeId(existingWarehouse.getCountryServeId());
+        warehouseVo.setDetailedAddress(existingWarehouse.getDetailedAddress());
+        warehouseVo.setStatus(existingWarehouse.getStatus());
+        // 其他字段映射...
+
+        // 返回成功的响应
+        return new RPCBaseResponse<>(200, "更新成功", warehouseVo);
+    }
+
+    // 复制仓库属性的方法
+    private void copyWarehouseProperties(ShopWarehouseSaveDto source, ShopWarehouse target) {
+        target.setParentId(source.getParentId());
+        target.setWarehouseName(source.getWarehouseName());
+        target.setLongitude(source.getLongitude());
+        target.setLatitude(source.getLatitude());
+        target.setCountryServeId(source.getCountryServeId());
+        target.setDetailedAddress(source.getDetailedAddress());
+        target.setStatus(source.getStatus());
+        if (source.getProject() != null) {
+            target.setProject(source.getProject());
+        }
+        // 其他需要设置的字段...
+    }
+
+    // 获取当前用户 ID 的方法
+    private Long getCurrentUserId() {
+        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+        Object principal = authentication.getPrincipal();
+        Long userId = null;
+
+        if (!(principal instanceof String && "anonymousUser".equals(principal))) {
+            String jsonString = JSON.toJSONString(principal);
+            JSONObject jsonObject = JSON.parseObject(jsonString);
+            userId = jsonObject.getLong("id");
+        }
+
+        return userId;
+    }
+    // 保存员工角色信息的方法
+    private void saveStaffRoles(List<ShopWarehouseStaffDto> staffList, Long warehouseId, Long currentUserId) {
+        for (ShopWarehouseStaffDto staffDto : staffList) {
+            ShopWarehouseStaff staff = new ShopWarehouseStaff();
+            staff.setWarehouseId(warehouseId);
+            staff.setUserId(staffDto.getUserId());
+            staff.setRoleId(staffDto.getRoleId());
+            staff.setCreateUserId(String.valueOf(currentUserId)); // 设置创建用户 ID
+            shopWarehouseStaffMapper.insert(staff);
+        }
+    }
 }

+ 16 - 0
edu-travel-service/edu-travel-service-warehouse/src/main/java/edu/travel/warehouse/web/ShopWarehouseController.java

@@ -2,6 +2,7 @@ package edu.travel.warehouse.web;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import edu.travel.dto.ShopWarehouseDto;
+import edu.travel.dto.ShopWarehouseSaveDto;
 import edu.travel.remote.ShopWarehouseRemoteController;
 import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.vo.ShopWarehouseStaffVo;
@@ -51,6 +52,21 @@ public class ShopWarehouseController extends BaseController<ShopWarehouse> imple
     public RPCBaseResponse<List<ShopWarehouseStaffVo>> getWarehouseTenantRole(String id) {
         return shopWarehouseService.getWarehouseTenantRole(id);
     }
+    /**
+     * 库房连表新增
+     */
+    @PostMapping("/saveAllForm")
+    public RPCBaseResponse<ShopWarehouseVo> saveAllForm(@RequestBody ShopWarehouseSaveDto entity){
+        return shopWarehouseService.saveAllForm(entity);
+    }
+    /**
+     * 库房连表修改
+     */
+    @PostMapping("/updateWarehouse")
+    public RPCBaseResponse<ShopWarehouseVo> updateWarehouse(@RequestBody ShopWarehouseSaveDto entity){
+        return shopWarehouseService.updateWarehouse(entity);
+    }
+
 
     /**
      * 查询库房详情