Просмотр исходного кода

Merge remote-tracking branch 'origin/dev' into dev

czh 2 лет назад
Родитель
Сommit
ac496c2628
39 измененных файлов с 1144 добавлено и 33 удалено
  1. 4 2
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java
  2. 1 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictTypeEnum.java
  3. 4 0
      sckw-common/sckw-common-mongo/pom.xml
  4. 16 4
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwTradeOrder.java
  5. 5 0
      sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/constant/RedisConstant.java
  6. 12 0
      sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/utils/RedissonUtils.java
  7. 2 0
      sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/model/SckwBusSum.java
  8. 2 0
      sckw-modules-api/pom.xml
  9. 33 0
      sckw-modules-api/sckw-order-api/pom.xml
  10. 32 0
      sckw-modules-api/sckw-product-api/pom.xml
  11. 42 0
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/dubbo/GoodsInfoService.java
  12. 75 0
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/AddressInfoDetail.java
  13. 28 0
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsAttributesDetail.java
  14. 176 0
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsDetail.java
  15. 29 0
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsImagesDetail.java
  16. 40 0
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsPriceRangesDetail.java
  17. 113 0
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/KwpGoods.java
  18. 16 0
      sckw-modules/sckw-order/pom.xml
  19. 10 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderAddressMapper.java
  20. 14 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderContractMapper.java
  21. 10 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderUnitMapper.java
  22. 2 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrder.java
  23. 1 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrderUnit.java
  24. 3 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/ContractInfo.java
  25. 6 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/GoodsInfo.java
  26. 13 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderAddressService.java
  27. 31 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderContractService.java
  28. 11 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderGoodsService.java
  29. 174 14
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  30. 11 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderTrackService.java
  31. 13 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderUnitService.java
  32. 57 0
      sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderAddressMapper.xml
  33. 47 0
      sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderUnitMapper.xml
  34. 6 1
      sckw-modules/sckw-product/pom.xml
  35. 1 1
      sckw-modules/sckw-product/src/main/java/com/sckw/product/controller/KwpGoodsController.java
  36. 62 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/dubbo/GoodsInfoServiceImpl.java
  37. 37 5
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java
  38. 1 1
      sckw-modules/sckw-report/src/main/java/com/sckw/report/consumer/SckwBusSumConsumer.java
  39. 4 4
      sckw-modules/sckw-report/src/main/java/com/sckw/report/controller/KwFleetController.java

+ 4 - 2
sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java

@@ -34,8 +34,10 @@ public enum DictEnum {
     TORDER_STATUS_5("tOrder_status", "5", "已完结"),
     TORDER_STATUS_6("tOrder_status", "6", "已对账"),
     TORDER_STATUS_7("tOrder_status", "7", "已结算"),
-    TORDER_ADDRESS_TYPE_0("tOrder_address_type", "0", "装货地址"),
-    TORDER_ADDRESS_TYPE_1("tOrder_address_type", "1", "卸货地址"),
+    CONTRACT_STATUS_0("contract_status", "0", "待签约"),
+    CONTRACT_STATUS_1("contract_status", "1", "已签约"),
+    TORDER_ADDRESS_TYPE_1("tOrder_address_type", "1", "装货地址"),
+    TORDER_ADDRESS_TYPE_2("tOrder_address_type", "2", "卸货地址"),
     TORDER_UNIT_TYPE_1("tOrder_unit_type", "1", "销售单位"),
     TORDER_UNIT_TYPE_2("tOrder_unit_type", "2", "采购单位"),
     ADDRESS_TYPE_0("address_type", "0", "矿山"),

+ 1 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictTypeEnum.java

@@ -18,6 +18,7 @@ public enum DictTypeEnum {
     DELIVERY_TYPE("delivery_type", "交付类型"),
     TORDER_SOURCE("tOrder_source", "交易订单来源"),
     TORDER_STATUS("tOrder_status", "交易订单状态"),
+    CONTRACT_STATUS("contract_status", "合同状态"),
     TORDER_ADDRESS_TYPE("tOrder_address_type", "交易订单地址类型"),
     TORDER_UNIT_TYPE("tOrder_unit_type", "交易订单单位类型"),
     ADDRESS_TYPE("address_type", "地址类型"),

+ 4 - 0
sckw-common/sckw-common-mongo/pom.xml

@@ -30,5 +30,9 @@
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-annotation</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 16 - 4
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwTradeOrder.java

@@ -6,7 +6,9 @@ import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 import org.springframework.data.annotation.Id;
 import org.springframework.data.mongodb.core.mapping.Document;
+
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.Date;
 
 /**
@@ -19,7 +21,7 @@ import java.util.Date;
 @NoArgsConstructor
 @Accessors(chain = true)
 @Document(collection = "sckw_trade_order")
-public class SckwTradeOrder{
+public class SckwTradeOrder {
 
     /**
      * 主键
@@ -75,12 +77,12 @@ public class SckwTradeOrder{
     /**
      * 订单开始日期
      */
-    private Date startTime;
+    private LocalDate startTime;
 
     /**
      * 订单结束日期
      */
-    private Date endTime;
+    private LocalDate endTime;
 
     /**
      * 订单已委托量
@@ -120,7 +122,7 @@ public class SckwTradeOrder{
     /**
      * 商品主键
      */
-    private Integer goodsId;
+    private Long goodsId;
 
     /**
      * 商品编号
@@ -178,6 +180,11 @@ public class SckwTradeOrder{
      */
     private Long procureEntId;
 
+    /**
+     * 采购企业一级企业主键ID
+     */
+    private Long procureTopEntId;
+
     /**
      * 采购企业名称
      */
@@ -198,6 +205,11 @@ public class SckwTradeOrder{
      */
     private Long supplyEntId;
 
+    /**
+     * 供应企业一级企业id
+     */
+    private Long supplyTopEntId;
+
     /**
      * 供应企业名称
      */

+ 5 - 0
sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/constant/RedisConstant.java

@@ -25,6 +25,11 @@ public class RedisConstant {
      */
     public static final String MESSAGE_CONSUMER_REQUEST_KEY = "sckw:message:consumer:request:%s";
 
+    /**
+     * 商品更新库存锁key
+     */
+    public static final String GOODS_UPDATE_AMOUNT_KEY = "sckw:product:goods:update:amount:%s";
+
     /**
      * 消费请求有效时间(秒)
      */

+ 12 - 0
sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/utils/RedissonUtils.java

@@ -269,6 +269,18 @@ public class RedissonUtils {
         }
     }
 
+    /**
+     * @desc: 释放锁
+     * @author: yzc
+     * @date: 2023-07-13 15:16
+     * @Param lockKey:
+     * @return: void
+     */
+    public static void unlock(String lockKey) {
+        RLock lock = redissonUtils.redissonClient.getLock(lockKey);
+        lock.unlock();
+    }
+
     public static Long getAtomicLong(String name,Long expired) {
         RAtomicLong atomicLong = redissonUtils.redissonClient.getAtomicLong(name);
         atomicLong.expire(expired <= 0 ? Duration.ofSeconds(DEFAULT_EXPIRED) : Duration.ofSeconds(expired));

+ 2 - 0
sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/model/SckwBusSum.java

@@ -3,6 +3,7 @@ package com.sckw.stream.model;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
 
 /**
  * @author zk
@@ -12,6 +13,7 @@ import lombok.NoArgsConstructor;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
+@Accessors(chain = true)
 public class SckwBusSum {
 
     /**

+ 2 - 0
sckw-modules-api/pom.xml

@@ -17,6 +17,8 @@
         <module>sckw-message-api</module>
         <module>sckw-modules-bom</module>
         <module>sckw-transport-api</module>
+        <module>sckw-product-api</module>
+        <module>sckw-order-api</module>
     </modules>
 
     <properties>

+ 33 - 0
sckw-modules-api/sckw-order-api/pom.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>sckw-modules-api</artifactId>
+        <groupId>com.sckw</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>sckw-order-api</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-openfeign-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-common-core</artifactId>
+        </dependency>
+
+    </dependencies>
+</project>

+ 32 - 0
sckw-modules-api/sckw-product-api/pom.xml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>sckw-modules-api</artifactId>
+        <groupId>com.sckw</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>sckw-product-api</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-openfeign-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-common-core</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 42 - 0
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/dubbo/GoodsInfoService.java

@@ -0,0 +1,42 @@
+package com.sckw.product.api.dubbo;
+
+import com.sckw.product.api.model.GoodsDetail;
+import com.sckw.product.api.model.KwpGoods;
+
+import java.math.BigDecimal;
+
+/**
+ * @desc: 商品相关dubbo
+ * @author: yzc
+ * @date: 2023-07-13 14:09
+ */
+public interface GoodsInfoService {
+
+    /**
+     * @desc: 根据商品id获取商品详情
+     * @author: yzc
+     * @date: 2023-07-13 14:15
+     * @Param id:
+     * @return: com.sckw.product.api.model.GoodsDetail
+     */
+    GoodsDetail getDetailById(Long id);
+
+    /**
+     * @desc: 获取商品基本信息
+     * @author: yzc
+     * @date: 2023-07-13 14:35
+     * @Param id:
+     * @return: com.sckw.product.api.model.KwpGoods
+     */
+    KwpGoods getGoodsById(Long id);
+
+    /**
+     * @desc: 更新库存
+     * @author: yzc
+     * @date: 2023-07-13 14:33
+     * @Param id:
+     * @Param amount:
+     * @return: java.lang.Boolean
+     */
+    void updateGoodsAmount(Long id, BigDecimal amount);
+}

+ 75 - 0
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/AddressInfoDetail.java

@@ -0,0 +1,75 @@
+package com.sckw.product.api.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @desc: 地址详情响应
+ * @author: yzc
+ * @date: 2023-07-10 14:46
+ */
+@Getter
+@Setter
+@ToString
+public class AddressInfoDetail {
+
+    private Long id;
+
+    /**
+     * 地址名称
+     */
+    private String name;
+
+    /**
+     * 地址类型
+     */
+    private String type;
+
+    /**
+     * 地址类型名称
+     */
+    private String typeName;
+
+    /**
+     * 联系人
+     */
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 所在地区
+     */
+    private Integer cityCode;
+
+    /**
+     * 所属区域名称
+     */
+    private String cityName;
+
+    /**
+     * 详细地址
+     */
+    private String detailAddress;
+
+    /**
+     * 纬度
+     */
+    private String lat;
+
+    /**
+     * 经度
+     */
+    private String lng;
+
+    /**
+     * 电子围栏
+     */
+    private String fence;
+
+
+}

+ 28 - 0
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsAttributesDetail.java

@@ -0,0 +1,28 @@
+package com.sckw.product.api.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @desc: 添加商品属性
+ * @author: yzc
+ * @date: 2023-07-03 8:39
+ */
+@Getter
+@Setter
+@ToString
+public class GoodsAttributesDetail {
+
+    private Long id;
+
+    /**
+     * 参数名称
+     */
+    private String name;
+
+    /**
+     * 参数值
+     */
+    private String val;
+}

+ 176 - 0
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsDetail.java

@@ -0,0 +1,176 @@
+package com.sckw.product.api.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @desc: 商品详情响应
+ * @author: yzc
+ * @date: 2023-07-05 11:49
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class GoodsDetail {
+
+    /**
+     * 商品id
+     */
+    private Long id;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 企业名称
+     */
+    private String ent;
+
+    /**
+     * 供应单位id
+     */
+    private Long supplyEntId;
+
+    /**
+     * 供应单位名称
+     */
+    private String supplyEnt;
+
+    /**
+     * 商品编号
+     */
+    private String code;
+
+    /**
+     * 商品名称
+     */
+    private String name;
+
+    /**
+     * 商品类型
+     */
+    private String goodsType;
+
+    /**
+     * 商品类型lab
+     */
+    private String goodsTypeLabel;
+
+    /**
+     * 库存数量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 单位(吨、方、件、箱、其他)
+     */
+    private String unit;
+
+    /**
+     * 尺寸大小
+     */
+    private String spec;
+
+    /**
+     * 发票税率(%)
+     */
+    private BigDecimal taxRate;
+
+    /**
+     * 交易方式(value)(合同采购、直接采购、预付款、货到付款、到款发货)
+     */
+    private String trading;
+
+    /**
+     * 交易方式名称(lab)(合同采购、直接采购、预付款、货到付款、到款发货)
+     */
+    private String tradingLabel;
+
+    /**
+     * 预付款最低限额
+     */
+    private BigDecimal advancePrice;
+
+    /**
+     * 专属客户经理id
+     */
+    private Long manager;
+
+    /**
+     * 专属客户经理姓名
+     */
+    private String managerName;
+
+    /**
+     * 专属客户经理电话
+     */
+    private String managerPhone;
+
+    /**
+     * 成交量
+     */
+    private BigDecimal performedAmount;
+
+    /**
+     * 缩略图
+     */
+    private String thumb;
+
+    /**
+     * 上架时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date addedTime;
+
+    /**
+     * 下架时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date shelfTime;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 状态:0草稿/1上架/2下架
+     */
+    private Integer status;
+
+    /**
+     * 状态label
+     */
+    private String statusLabel;
+
+    /**
+     * 商品详情图片
+     */
+    private List<GoodsImagesDetail> images;
+
+    /**
+     * 地址信息
+     */
+    private AddressInfoDetail addressInfo;
+
+    /**
+     * 价格梯度
+     */
+    private List<GoodsPriceRangesDetail> priceRanges;
+
+    /**
+     * 参数目录
+     */
+    private List<GoodsAttributesDetail> attributes;
+
+}

+ 29 - 0
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsImagesDetail.java

@@ -0,0 +1,29 @@
+package com.sckw.product.api.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @desc: 商品图片
+ * @author: yzc
+ * @date: 2023-07-03 8:39
+ */
+@Getter
+@Setter
+@ToString
+public class GoodsImagesDetail {
+
+
+    private Long id;
+
+    /**
+     * 图片地址
+     */
+    private String image;
+
+    /**
+     * 图片排序
+     */
+    private Integer sort;
+}

+ 40 - 0
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsPriceRangesDetail.java

@@ -0,0 +1,40 @@
+package com.sckw.product.api.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.math.BigDecimal;
+
+/**
+ * @desc: 价格梯度详情响应
+ * @author: yzc
+ * @date: 2023-07-10 14:47
+ */
+@Getter
+@Setter
+@ToString
+public class GoodsPriceRangesDetail {
+
+    private Long id;
+
+    /**
+     * 起售量
+     */
+    private BigDecimal startAmount;
+
+    /**
+     * 上限售量
+     */
+    private BigDecimal endAmount;
+
+    /**
+     * 含税价
+     */
+    private BigDecimal price;
+
+    /**
+     * 序号
+     */
+    private Integer sort;
+}

+ 113 - 0
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/KwpGoods.java

@@ -0,0 +1,113 @@
+package com.sckw.product.api.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.sckw.core.model.base.BaseModel;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @desc: 商品表
+ * @author: yzc
+ * @date: 2023-06-25 9:04
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+@TableName("kwp_goods")
+public class KwpGoods extends BaseModel {
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 供应单位
+     */
+    private Long supplyEntId;
+
+    /**
+     * 商品编号
+     */
+    private String code;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 商品类型
+     */
+    private String goodsType;
+
+    /**
+     * 省份code
+     */
+    private Integer provinceCode;
+
+    /**
+     * 库存数量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 单位(吨、方、件、箱、其他)
+     */
+    private String unit;
+
+    /**
+     * 尺寸大小
+     */
+    private String spec;
+
+    /**
+     * 发票税率(%)
+     */
+    private BigDecimal taxRate;
+
+    /**
+     * 交易方式(合同采购、直接采购、预付款、货到付款、到款发货)
+     */
+    private String trading;
+
+    /**
+     * 预付款最低限额
+     */
+    private BigDecimal advancePrice;
+
+    /**
+     * 专属客户经理(用户ID)
+     */
+    private Long manager;
+
+    /**
+     * 成交量
+     */
+    private BigDecimal performedAmount;
+
+    /**
+     * 缩略图
+     */
+    private String thumb;
+
+    /**
+     * 上架时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date addedTime;
+
+    /**
+     * 下架时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date shelfTime;
+
+}

+ 16 - 0
sckw-modules/sckw-order/pom.xml

@@ -61,6 +61,22 @@
             <groupId>com.sckw</groupId>
             <artifactId>sckw-system-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-common-mongo</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-order-api</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-product-api</artifactId>
+            <version>1.0.0</version>
+        </dependency>
 
     </dependencies>
 

+ 10 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderAddressMapper.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.order.model.KwoTradeOrderAddress;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * @desc: 交易订单装卸货地址信息mapper
  * @author: yzc
@@ -12,4 +14,12 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface KwoTradeOrderAddressMapper extends BaseMapper<KwoTradeOrderAddress> {
 
+    /**
+     * @desc: 批量插入
+     * @author: yzc
+     * @date: 2023-07-13 11:00
+     * @Param list:
+     * @return: void
+     */
+    void insertBatch(List<KwoTradeOrderAddress> list);
 }

+ 14 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderContractMapper.java

@@ -0,0 +1,14 @@
+package com.sckw.order.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.order.model.KwoTradeOrderContract;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @desc: TODO
+ * @author: yzc
+ * @date: 2023-07-13 9:49
+ */
+@Mapper
+public interface KwoTradeOrderContractMapper extends BaseMapper<KwoTradeOrderContract> {
+}

+ 10 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderUnitMapper.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.order.model.KwoTradeOrderUnit;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * @desc: 交易订单采购/销售企业信息mapper
  * @author: yzc
@@ -12,4 +14,12 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface KwoTradeOrderUnitMapper extends BaseMapper<KwoTradeOrderUnit> {
 
+    /**
+     * @desc: 批量插入
+     * @author: yzc
+     * @date: 2023-07-13 11:00
+     * @Param list:
+     * @return: void
+     */
+    void insertBatch(List<KwoTradeOrderUnit> list);
 }

+ 2 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrder.java

@@ -22,6 +22,8 @@ import java.time.LocalDate;
 @TableName("kwo_trade_order")
 public class KwoTradeOrder extends BaseModel {
 
+    private Long entId;
+
     /**
      * 订单编号
      */

+ 1 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrderUnit.java

@@ -32,7 +32,7 @@ public class KwoTradeOrderUnit extends BaseModel {
     /**
      * 单位类型(1销售单位、2采购单位)
      */
-    private Integer unitType;
+    private String unitType;
 
     /**
      * 企业id

+ 3 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/ContractInfo.java

@@ -27,4 +27,7 @@ public class ContractInfo {
 
     @NotBlank(message = "合同签约方式不能为空")
     private String contractSigningWay;
+
+    @NotBlank(message = "合同状态不能为空")
+    private String contractStatus;
 }

+ 6 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/GoodsInfo.java

@@ -47,6 +47,12 @@ public class GoodsInfo {
     @NotNull(message = "商品发票税率不能为空")
     private BigDecimal goodsTaxRate;
 
+    /**
+     * 商品尺寸大小
+     */
+    @NotBlank(message = "商品尺寸大小不能为空")
+    private String goodsSpec;
+
     /**
      * 单位(吨、方、箱、件)
      */

+ 13 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderAddressService.java

@@ -1,10 +1,13 @@
 package com.sckw.order.serivce;
 
 import com.sckw.order.dao.KwoTradeOrderAddressMapper;
+import com.sckw.order.model.KwoTradeOrderAddress;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @desc: 交易订单装卸货地址信息service
  * @author: yzc
@@ -17,4 +20,14 @@ public class KwoTradeOrderAddressService {
 
     private final KwoTradeOrderAddressMapper kwoTradeOrderAddressMapper;
 
+    /**
+     * @desc: 批量插入
+     * @author: yzc
+     * @date: 2023-07-13 9:52
+     * @Param list:
+     * @return: void
+     */
+    public void insertBatch(List<KwoTradeOrderAddress> list) {
+        kwoTradeOrderAddressMapper.insertBatch(list);
+    }
 }

+ 31 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderContractService.java

@@ -0,0 +1,31 @@
+package com.sckw.order.serivce;
+
+import com.sckw.order.dao.KwoTradeOrderContractMapper;
+import com.sckw.order.model.KwoTradeOrderContract;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @desc: 合同信息service
+ * @author: yzc
+ * @date: 2023-07-13 9:48
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class KwoTradeOrderContractService {
+
+    private final KwoTradeOrderContractMapper kwoTradeOrderContractMapper;
+
+    /**
+     * @desc: 插入
+     * @author: yzc
+     * @date: 2023-07-13 9:51
+     * @Param contract:
+     * @return: void
+     */
+    public void insert(KwoTradeOrderContract contract) {
+        kwoTradeOrderContractMapper.insert(contract);
+    }
+}

+ 11 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderGoodsService.java

@@ -1,6 +1,7 @@
 package com.sckw.order.serivce;
 
 import com.sckw.order.dao.KwoTradeOrderGoodsMapper;
+import com.sckw.order.model.KwoTradeOrderGoods;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -17,4 +18,14 @@ public class KwoTradeOrderGoodsService {
 
     private final KwoTradeOrderGoodsMapper kwoTradeOrderGoodsMapper;
 
+    /**
+     * @desc: 插入
+     * @author: yzc
+     * @date: 2023-07-13 9:51
+     * @Param goods:
+     * @return: void
+     */
+    public void insert(KwoTradeOrderGoods goods) {
+        kwoTradeOrderGoodsMapper.insert(goods);
+    }
 }

+ 174 - 14
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -1,21 +1,34 @@
 package com.sckw.order.serivce;
 
+import com.alibaba.fastjson2.JSON;
 import com.sckw.core.common.enums.enums.DictEnum;
+import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.vo.TableStatisticRes;
 import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.OrderGenerateUtils;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.mongo.model.SckwTradeOrder;
 import com.sckw.order.dao.KwoTradeOrderMapper;
-import com.sckw.order.model.KwoTradeOrder;
+import com.sckw.order.model.*;
 import com.sckw.order.model.vo.req.*;
 import com.sckw.order.model.vo.res.OrderDetailRes;
 import com.sckw.order.model.vo.res.OrderListRes;
+import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.product.api.model.KwpGoods;
 import com.sckw.stream.model.SckwBusSum;
+import com.sckw.system.api.RemoteSystemService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.cloud.stream.function.StreamBridge;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @desc: 交易订单(采购订单/销售订单)service
@@ -27,11 +40,18 @@ import java.util.List;
 @RequiredArgsConstructor
 public class KwoTradeOrderService {
 
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    private RemoteSystemService remoteSystemService;
+
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    private GoodsInfoService goodsInfoService;
+
     private final KwoTradeOrderMapper kwoTradeOrderMapper;
     private final StreamBridge streamBridge;
     private final KwoTradeOrderAddressService kwoTradeOrderAddressService;
     private final KwoTradeOrderUnitService kwoTradeOrderUnitService;
     private final KwoTradeOrderGoodsService kwoTradeOrderGoodsService;
+    private final KwoTradeOrderContractService kwoTradeOrderContractService;
     private final KwoTradeOrderTrackService kwoTradeOrderTrackService;
 
     private static final String ORDER_NO_PREFIX = "CD";
@@ -43,47 +63,187 @@ public class KwoTradeOrderService {
      * @Param param:
      * @return: void
      */
+    @Transactional(rollbackFor = Exception.class)
     public void addPurchaseOrderDraft(PurchaseOrderParam param) {
         KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
-        order.setTOrderNo(OrderGenerateUtils.generateOrderNo("CD")).setSource(DictEnum.TORDER_SOURCE_0.getValue())
-                .setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_0.getValue()));
+        order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
+                .setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null)
+                .setSource(DictEnum.TORDER_SOURCE_0.getValue()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_0.getValue()));
         kwoTradeOrderMapper.insert(order);
-        //存MongoD
-        SckwBusSum sckwBusSum = new SckwBusSum();
-        streamBridge.send("sckw-busSum", sckwBusSum);
+        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class));
+
+    }
+
+    /**
+     * @desc: 添加其他订单信息
+     * @author: yzc
+     * @date: 2023-07-13 8:53
+     * @Param id:
+     * @Param tOrderNo:
+     * @Param status:
+     * @Param param:
+     * @return: void
+     */
+    private void addOtherOrderInfo(KwoTradeOrder tradeOrder, ValetOrderParam param) {
+        Long id = tradeOrder.getId();
+        String tOrderNo = tradeOrder.getTOrderNo();
+        SckwTradeOrder order = BeanUtils.copyProperties(tradeOrder, SckwTradeOrder.class);
+        //todo: 当前线程获取企业名称
+        order.setFirmName(String.valueOf(LoginUserHolder.get().getEntId())).setTOrderId(id);
+        //添加商品信息
+        GoodsInfo goodsInfo = param.getGoodsInfo();
+        KwoTradeOrderGoods goods = BeanUtils.copyProperties(goodsInfo, KwoTradeOrderGoods.class);
+        if (Objects.nonNull(goods)) {
+            goods.setTOrderId(id).setTOrderNo(tOrderNo);
+            kwoTradeOrderGoodsService.insert(goods);
+            BeanUtils.copyProperties(goodsInfo, order);
+        }
+        //添加单位信息
+        List<UnitInfo> unitInfos = param.getUnitInfo();
+        if (CollectionUtils.isNotEmpty(unitInfos)) {
+            List<KwoTradeOrderUnit> list = new ArrayList<>(unitInfos.size());
+            List<Long> entIds = unitInfos.stream().map(UnitInfo::getEntId).distinct().toList();
+            //todo: 获取一级企业信息
+            unitInfos.forEach(e -> {
+                KwoTradeOrderUnit unit = BeanUtils.copyProperties(e, KwoTradeOrderUnit.class);
+                unit.setTOrderId(id).setTOrderNo(tOrderNo)
+                        .setTopEntId(e.getEntId());
+                list.add(unit);
+                if (Objects.equals(e.getUnitType(), DictEnum.TORDER_UNIT_TYPE_1.getValue())) {
+                    order.setSupplyEntId(e.getEntId()).setSupplyTopEntId(e.getEntId()).setSupplyFirmName(e.getFirmName())
+                            .setSupplyContacts(e.getContacts()).setSupplyPhone(e.getPhone());
+                } else {
+                    order.setProcureEntId(e.getEntId()).setProcureTopEntId(e.getEntId()).setProcureFirmName(e.getFirmName())
+                            .setProcureContacts(e.getContacts()).setProcurePhone(e.getPhone());
+                }
+            });
+            kwoTradeOrderUnitService.insertBatch(list);
+        }
+        //添加地址信息
+        List<AddressInfo> addressInfos = param.getAddressInfo();
+        if (CollectionUtils.isNotEmpty(addressInfos)) {
+            List<KwoTradeOrderAddress> list = new ArrayList<>(addressInfos.size());
+            addressInfos.forEach(e -> {
+                KwoTradeOrderAddress address = BeanUtils.copyProperties(e, KwoTradeOrderAddress.class);
+                address.setTOrderId(id).setTOrderNo(tOrderNo);
+                list.add(address);
+                if (Objects.equals(e.getAddressType(), DictEnum.TORDER_ADDRESS_TYPE_1.getValue())) {
+                    order.setLoadName(e.getName()).setLoadType(e.getType()).setLoadContacts(e.getContacts())
+                            .setLoadPhone(e.getPhone()).setLoadCityCode(e.getCityCode()).setLoadCityName(e.getCityName())
+                            .setLoadDetailAddress(e.getDetailAddress()).setLoadLat(e.getLat()).setLoadLng(e.getLng());
+                } else {
+                    order.setUnloadName(e.getName()).setUnloadType(e.getType()).setUnloadContacts(e.getContacts())
+                            .setUnloadPhone(e.getPhone()).setUnloadCityCode(e.getCityCode()).setUnloadCityName(e.getCityName())
+                            .setUnloadDetailAddress(e.getDetailAddress()).setUnloadLat(e.getLat()).setUnloadLng(e.getLng());
+                }
+            });
+            kwoTradeOrderAddressService.insertBatch(list);
+        }
+        //添加合同信息
+        ContractInfo contractInfo = param.getContractInfo();
+        KwoTradeOrderContract contract = BeanUtils.copyProperties(contractInfo, KwoTradeOrderContract.class);
+        if (Objects.nonNull(contract)) {
+            contract.setTOrderId(id).setTOrderNo(tOrderNo);
+            kwoTradeOrderContractService.insert(contract);
+            BeanUtils.copyProperties(contractInfo, order);
+        }
+        //添加状态信息
+        KwoTradeOrderTrack track = new KwoTradeOrderTrack();
+        track.setTOrderId(id).setTOrderNo(tOrderNo).setStatus(tradeOrder.getStatus()).setRemark(tradeOrder.getRemark());
+        kwoTradeOrderTrackService.insert(track);
+        order.setDeliveryType("").setProjectName("").setEntrustAmount(BigDecimal.ZERO).setActualAmount(BigDecimal.ZERO)
+                .setContractId(0L).setContractNo("").setContractName("").setContractSigningWay("")
+                .setCreateByName(LoginUserHolder.getUserName()).setUpdateByName(LoginUserHolder.getUserName());
+        //存MongoDb
+        saveMongoDb(1, order);
+    }
+
+    private void saveMongoDb(Integer method, Object order) {
+        SckwBusSum busSum = new SckwBusSum();
+        busSum.setBusSumType("tradeOrder");
+        busSum.setMethod(method);
+        busSum.setObject(order);
+        streamBridge.send("sckw-busSum", JSON.toJSONString(busSum));
     }
 
+
     /**
      * @desc: 代客下单草稿
      * @author: yzc
      * @date: 2023-07-07 15:31
-     * @Param valetOrderParam:
+     * @Param param:
      * @return: void
      */
-    public void addValetOrderDraft(ValetOrderParam valetOrderParam) {
-
+    @Transactional(rollbackFor = Exception.class)
+    public void addValetOrderDraft(ValetOrderParam param) {
+        KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
+        order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
+                .setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null)
+                .setSource(DictEnum.TORDER_SOURCE_1.getValue()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_0.getValue()));
+        kwoTradeOrderMapper.insert(order);
+        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class));
     }
 
     /**
      * @desc: 采购下单提交
      * @author: yzc
      * @date: 2023-07-07 15:31
-     * @Param purchaseOrderParam:
+     * @Param param:
      * @return: void
      */
-    public void addPurchaseOrderSubmit(PurchaseOrderParam purchaseOrderParam) {
+    @Transactional(rollbackFor = Exception.class)
+    public void addPurchaseOrderSubmit(PurchaseOrderParam param) {
+        orderCheck(param);
+        KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
+        order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
+                .setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_0.getValue())
+                .setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_1.getValue()));
+        kwoTradeOrderMapper.insert(order);
+        goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(),param.getAmount());
+        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class));
+    }
 
+    private void orderCheck(PurchaseOrderParam param) {
+        //todo: 则先校验是否存在对供应企业的预付钱包 ;【预计采购金额】是否大于预付清单的【可用预付】金额
+        KwpGoods goods = goodsInfoService.getGoodsById(param.getGoodsInfo().getGoodsId());
+        if (Objects.isNull(goods) || !Objects.equals(goods.getStatus(), 1)) {
+            throw new BusinessException("商品不存在或已下架!");
+        }
+        if (Objects.equals(param.getTrading(), DictEnum.TRADE_TYPE_0.getValue())) {
+            if (param.getPrice().compareTo(goods.getAdvancePrice()) < 0){
+                throw new BusinessException("采购订单金额不能小于商品最低预付款限额!");
+            }
+        }
+        BigDecimal goodsAmount = goods.getAmount();
+        if (goods.getAmount().compareTo(param.getAmount()) < 0) {
+            throw new BusinessException("商品库存量小于采购数量!");
+        }
     }
 
     /**
      * @desc: 代客下单提交
      * @author: yzc
      * @date: 2023-07-07 15:32
-     * @Param valetOrderParam:
+     * @Param param:
      * @return: void
      */
-    public void addValetOrderSubmit(ValetOrderParam valetOrderParam) {
-
+    @Transactional(rollbackFor = Exception.class)
+    public void addValetOrderSubmit(ValetOrderParam param) {
+        orderCheck(param);
+        KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
+        order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
+                .setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_1.getValue());
+        String contractStatus = param.getContractInfo().getContractStatus();
+        if (Objects.equals(contractStatus, DictEnum.CONTRACT_STATUS_0.getValue())) {
+            order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_3.getValue()));
+        } else if (Objects.equals(contractStatus, DictEnum.CONTRACT_STATUS_1.getValue())) {
+            order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_4.getValue()));
+        } else {
+            throw new BusinessException("Invalid contract status");
+        }
+        kwoTradeOrderMapper.insert(order);
+        goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(),param.getAmount());
+        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class));
     }
 
     /**

+ 11 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderTrackService.java

@@ -1,6 +1,7 @@
 package com.sckw.order.serivce;
 
 import com.sckw.order.dao.KwoTradeOrderTrackMapper;
+import com.sckw.order.model.KwoTradeOrderTrack;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -17,4 +18,14 @@ public class KwoTradeOrderTrackService {
 
     private final KwoTradeOrderTrackMapper kwoTradeOrderTrackMapper;
 
+    /**
+     * @desc: 插入
+     * @author: yzc
+     * @date: 2023-07-13 9:51
+     * @Param goods:
+     * @return: void
+     */
+    public void insert(KwoTradeOrderTrack track) {
+        kwoTradeOrderTrackMapper.insert(track);
+    }
 }

+ 13 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderUnitService.java

@@ -1,10 +1,13 @@
 package com.sckw.order.serivce;
 
 import com.sckw.order.dao.KwoTradeOrderUnitMapper;
+import com.sckw.order.model.KwoTradeOrderUnit;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @desc: 交易订单采购/销售企业信息service
  * @author: yzc
@@ -17,4 +20,14 @@ public class KwoTradeOrderUnitService {
 
     private final KwoTradeOrderUnitMapper kwoTradeOrderUnitMapper;
 
+    /**
+     * @desc: 批量插入
+     * @author: yzc
+     * @date: 2023-07-13 9:52
+     * @Param list:
+     * @return: void
+     */
+    public void insertBatch(List<KwoTradeOrderUnit> list) {
+        kwoTradeOrderUnitMapper.insertBatch(list);
+    }
 }

+ 57 - 0
sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderAddressMapper.xml

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sckw.order.dao.KwoTradeOrderAddressMapper">
+
+    <insert id="insertBatch">
+        insert into kwo_trade_order_address
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            id,
+            t_order_id,
+            t_order_no,
+            address_type,
+            name,
+            type,
+            contacts,
+            phone,
+            city_code,
+            city_name,
+            detail_address,
+            lat,
+            lng,
+            fence,
+            remark,
+            status,
+            create_by,
+            create_time,
+            update_by,
+            update_time,
+            del_flag
+        </trim>
+        values
+        <foreach collection="list" item="item" separator=",">
+            <trim prefix="(" suffix=")" suffixOverrides=",">
+                #{item.id,jdbcType=BIGINT},
+                #{item.tOrderId,jdbcType=BIGINT},
+                #{item.tOrderNo,jdbcType=VARCHAR},
+                #{item.addressType,jdbcType=VARCHAR},
+                #{item.name,jdbcType=VARCHAR},
+                #{item.type,jdbcType=VARCHAR},
+                #{item.contacts,jdbcType=VARCHAR},
+                #{item.phone,jdbcType=VARCHAR},
+                #{item.cityCode,jdbcType=VARCHAR},
+                #{item.cityName,jdbcType=VARCHAR},
+                #{item.detailAddress,jdbcType=VARCHAR},
+                #{item.lat,jdbcType=VARCHAR},
+                #{item.lng,jdbcType=VARCHAR},
+                #{item.fence,jdbcType=VARCHAR},
+                #{item.remark,jdbcType=VARCHAR},
+                #{item.status,jdbcType=INTEGER},
+                #{item.createBy,jdbcType=BIGINT},
+                #{item.createTime,jdbcType=TIMESTAMP},
+                #{item.updateBy,jdbcType=BIGINT},
+                #{item.updateTime,jdbcType=TIMESTAMP},
+                #{item.delFlag,jdbcType=INTEGER}
+            </trim>
+        </foreach>
+    </insert>
+</mapper>

+ 47 - 0
sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderUnitMapper.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sckw.order.dao.KwoTradeOrderUnitMapper">
+
+    <insert id="insertBatch">
+        insert into kwo_trade_order_unit
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            id,
+            t_order_id,
+            t_order_no,
+            unit_type,
+            ent_id,
+            top_ent_id,
+            firm_name,
+            contacts,
+            phone,
+            remark,
+            status,
+            create_by,
+            create_time,
+            update_by,
+            update_time,
+            del_flag
+        </trim>
+        values
+        <foreach collection="list" item="item" separator=",">
+            <trim prefix="(" suffix=")" suffixOverrides=",">
+                #{item.id,jdbcType=BIGINT},
+                #{item.tOrderId,jdbcType=BIGINT},
+                #{item.tOrderNo,jdbcType=VARCHAR},
+                #{item.unitType,jdbcType=VARCHAR},
+                #{item.entId,jdbcType=VARCHAR},
+                #{item.topEntId,jdbcType=VARCHAR},
+                #{item.firmName,jdbcType=VARCHAR},
+                #{item.contacts,jdbcType=VARCHAR},
+                #{item.phone,jdbcType=VARCHAR},
+                #{item.remark,jdbcType=VARCHAR},
+                #{item.status,jdbcType=INTEGER},
+                #{item.createBy,jdbcType=BIGINT},
+                #{item.createTime,jdbcType=TIMESTAMP},
+                #{item.updateBy,jdbcType=BIGINT},
+                #{item.updateTime,jdbcType=TIMESTAMP},
+                #{item.delFlag,jdbcType=INTEGER}
+            </trim>
+        </foreach>
+    </insert>
+</mapper>

+ 6 - 1
sckw-modules/sckw-product/pom.xml

@@ -14,7 +14,6 @@
     <properties>
         <maven.compiler.source>17</maven.compiler.source>
         <maven.compiler.target>17</maven.compiler.target>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
 
     <dependencies>
@@ -63,6 +62,12 @@
             <artifactId>sckw-system-api</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-product-api</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
         <dependency>
             <groupId>com.sckw</groupId>
             <artifactId>sckw-common-redis</artifactId>

+ 1 - 1
sckw-modules/sckw-product/src/main/java/com/sckw/product/controller/KwpGoodsController.java

@@ -62,7 +62,7 @@ public class KwpGoodsController {
      */
     @GetMapping("/detail")
     public HttpResult detail(@RequestParam Long id) {
-        return HttpResult.ok(kwpGoodsService.detail(id));
+        return HttpResult.ok(kwpGoodsService.detail(id,false));
     }
 
     /**

+ 62 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/dubbo/GoodsInfoServiceImpl.java

@@ -0,0 +1,62 @@
+package com.sckw.product.dubbo;
+
+import com.sckw.core.exception.BusinessException;
+import com.sckw.core.utils.BeanUtils;
+import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.product.api.model.GoodsDetail;
+import com.sckw.product.api.model.KwpGoods;
+import com.sckw.product.service.KwpGoodsService;
+import com.sckw.redis.constant.RedisConstant;
+import com.sckw.redis.utils.RedissonUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.math.BigDecimal;
+import java.util.Objects;
+
+/**
+ * @desc: TODO
+ * @author: yzc
+ * @date: 2023-07-13 14:17
+ */
+@DubboService(group = "design", version = "2.0.0")
+@Slf4j
+public class GoodsInfoServiceImpl implements GoodsInfoService {
+
+    @Autowired
+    private KwpGoodsService kwpGoodsService;
+
+    @Override
+    public GoodsDetail getDetailById(Long id) {
+        return BeanUtils.copyProperties(kwpGoodsService.detail(id, true), GoodsDetail.class);
+    }
+
+    @Override
+    public KwpGoods getGoodsById(Long id) {
+        return BeanUtils.copyProperties(kwpGoodsService.selectGoodsById(id), KwpGoods.class);
+    }
+
+    @Override
+    public void updateGoodsAmount(Long id, BigDecimal amount) {
+        com.sckw.product.model.KwpGoods goods = kwpGoodsService.selectGoodsById(id);
+        if (Objects.isNull(goods)) {
+            throw new BusinessException("商品不存在!");
+        }
+        String lockKey = String.format(RedisConstant.GOODS_UPDATE_AMOUNT_KEY, id);
+        if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 60L))) {
+            throw new BusinessException("获取更新商品库存锁失败!");
+        }
+        try {
+            BigDecimal goodsAmount = goods.getAmount();
+            if (goods.getAmount().compareTo(amount) < 0) {
+                log.info("库存:{}小于订单量:{}", goods.getAmount(), amount);
+                throw new BusinessException("商品库存小于订单量!");
+            }
+            goods.setAmount(goodsAmount.subtract(amount)).setPerformedAmount(Objects.nonNull(goods.getPerformedAmount()) ? goods.getPerformedAmount().add(amount) : amount);
+            kwpGoodsService.updateById(goods);
+        } finally {
+            RedissonUtils.unlock(lockKey);
+        }
+    }
+}

+ 37 - 5
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java

@@ -158,10 +158,18 @@ public class KwpGoodsService {
      * @Param id:
      * @return: com.sckw.product.model.vo.res.GoodsDetail
      */
-    public GoodsDetail detail(Long id) {
-        KwpGoods goods = getGoodsById(id);
-        if (Objects.isNull(goods)) {
-            throw new BusinessException("当前商品信息为空!");
+    public GoodsDetail detail(Long id,Boolean isDubbo) {
+        KwpGoods goods;
+        if (isDubbo) {
+            goods = kwpGoodsMapper.selectById(id);
+            if (Objects.isNull(goods)) {
+                return null;
+            }
+        }else {
+            goods = getGoodsById(id);
+            if (Objects.isNull(goods)) {
+                throw new BusinessException("当前商品信息为空!");
+            }
         }
         GoodsDetail detail = BeanUtils.copyProperties(goods, GoodsDetail.class);
         List<EntCacheResDto> entCacheList = remoteSystemService.queryEntCacheByIds(Arrays.asList(detail.getEntId(), detail.getSupplyEntId()));
@@ -629,7 +637,7 @@ public class KwpGoodsService {
     }
 
     /**
-     * @desc: 根据商品id获取商品信息
+     * @desc: 根据商品id获取当前企业商品信息
      * @author: yzc
      * @date: 2023-07-05 14:25
      * @Param id:
@@ -641,4 +649,28 @@ public class KwpGoodsService {
                 .eq(KwpGoods::getDelFlag, Global.NO).last("LIMIT 1");
         return kwpGoodsMapper.selectOne(last);
     }
+
+    /**
+     * @desc: 根据商品id获取未删除商品信息
+     * @author: yzc
+     * @date: 2023-07-13 15:08
+     * @Param id:
+     * @return: com.sckw.product.model.KwpGoods
+     */
+    public KwpGoods selectGoodsById(Long id) {
+        LambdaQueryWrapper<KwpGoods> wrapper = new LambdaQueryWrapper<>();
+        LambdaQueryWrapper<KwpGoods> last = wrapper.eq(KwpGoods::getId, id).eq(KwpGoods::getDelFlag, Global.NO).last("LIMIT 1");
+        return kwpGoodsMapper.selectOne(last);
+    }
+
+    /**
+     * @desc: 更新
+     * @author: yzc
+     * @date: 2023-07-13 15:11
+     * @Param goods:
+     * @return: void
+     */
+    public void updateById(KwpGoods goods) {
+        kwpGoodsMapper.updateById(goods);
+    }
 }

+ 1 - 1
sckw-modules/sckw-report/src/main/java/com/sckw/report/consumer/SckwBusSumConsumer.java

@@ -57,7 +57,7 @@ public class SckwBusSumConsumer {
      **/
     public void addMongodb(SckwBusSum busSum) {
         /**初级校验**/
-        if (busSum.getObject() == null || StringUtils.isBlank(busSum.getBusSumType()) || busSum.getMethod() == 0) {
+            if (busSum.getObject() == null || StringUtils.isBlank(busSum.getBusSumType()) || busSum.getMethod() == 0) {
             return;
         }
 

+ 4 - 4
sckw-modules/sckw-report/src/main/java/com/sckw/report/controller/KwFleetController.java

@@ -15,11 +15,11 @@ import org.springframework.data.domain.Pageable;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.util.ArrayList;
+import java.time.LocalDate;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -57,9 +57,9 @@ public class KwFleetController {
             order.setTOrderNo("D" + order.getTOrderId());
             order.setContractName(new Date()+"");
             order.setActualAmount(new BigDecimal(0));
-            order.setContractId(1);
+            order.setContractId(1L);
             order.setContractNo("11");
-            order.setEndTime(new Date());
+            order.setEndTime(LocalDate.now());
             order.setSupplyEntId(1L);
 
             busSum.setBusSumType("tradeOrder");