Эх сурвалжийг харах

合并才钦代码解决冲突

sptkw 2 жил өмнө
parent
commit
e710932e87
100 өөрчлөгдсөн 3787 нэмэгдсэн , 709 устгасан
  1. 82 2
      pom.xml
  2. 9 1
      sckw-auth/pom.xml
  3. 4 0
      sckw-common/sckw-common-core/pom.xml
  4. 1 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/StringConstant.java
  5. 16 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java
  6. 7 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictTypeEnum.java
  7. 4 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/exception/BusinessException.java
  8. 140 140
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/auth/context/LoginUserHolder.java
  9. 4 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/Global.java
  10. 1 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillEnum.java
  11. 3 3
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/ContractStatusEnum.java
  12. 7 7
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/ContractTrackEnum.java
  13. 2 2
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/EntTypeEnum.java
  14. 3 3
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/LogisticsOrderEnum.java
  15. 2 2
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/SigningWayEnum.java
  16. 23 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/BeanUtils.java
  17. 90 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/LogUtil.java
  18. 405 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/OkHttpUtils.java
  19. 2 2
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/PasswordUtils.java
  20. 9 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/RegularUtils.java
  21. 4 4
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/model/ValiList.java
  22. 1 1
      sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/annotation/Translates.java
  23. 3 3
      sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/utils/ValidUtil.java
  24. 0 154
      sckw-common/sckw-common-excel/src/main/resources/log4j2.xml
  25. 56 61
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwWaybillOrder.java
  26. 0 206
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/TradeOrderUpdateParam.java
  27. 4 0
      sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/constant/RedisConstant.java
  28. 25 0
      sckw-common/sckw-common-remote/src/main/java/com/sckw/remote/config/AllowClassList.java
  29. 32 0
      sckw-common/sckw-common-remote/src/main/java/com/sckw/remote/constant/DubboAllow.java
  30. 89 0
      sckw-common/sckw-common-remote/src/main/java/com/sckw/remote/filter/DubboExceptionFilter.java
  31. 1 0
      sckw-common/sckw-common-remote/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter
  32. 1 0
      sckw-common/sckw-common-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  33. 2 2
      sckw-gateway/src/main/resources/bootstrap-dev.yml
  34. 1 0
      sckw-modules-api/pom.xml
  35. 35 0
      sckw-modules-api/sckw-contract-api/pom.xml
  36. 23 0
      sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/RemoteContractService.java
  37. 50 0
      sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/dto/res/ContractCommonInfoResDto.java
  38. 28 0
      sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/dto/res/EntInfo.java
  39. 1 0
      sckw-modules-api/sckw-contract-api/src/main/resources/application.properties
  40. 12 1
      sckw-modules-api/sckw-modules-bom/pom.xml
  41. 51 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java
  42. 87 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/AddressInfoDetail.java
  43. 46 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/ContractInfo.java
  44. 37 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/ContractSignCompletedParam.java
  45. 99 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/GoodsInfoDetailRes.java
  46. 156 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/OrderDetailRes.java
  47. 52 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UnitInfoDetailRes.java
  48. 49 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UpdateOrderAmountParam.java
  49. 42 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UpdateOrderStatusParam.java
  50. 22 0
      sckw-modules-api/sckw-payment-api/pom.xml
  51. 15 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/dubbo/PayCenterDubboService.java
  52. 14 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/constant/ChannelEnum.java
  53. 16 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/MemberDetail.java
  54. 14 2
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/dubbo/GoodsInfoService.java
  55. 6 1
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/AddressInfoDetail.java
  56. 7 1
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsAttributesDetail.java
  57. 5 1
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsDetail.java
  58. 7 1
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsImagesDetail.java
  59. 6 1
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsPriceRangesDetail.java
  60. 8 3
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/KwpGoods.java
  61. 1 1
      sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/KwsEnterpriseResDto.java
  62. 34 2
      sckw-modules/sckw-contract/pom.xml
  63. 11 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcCheckedController.java
  64. 157 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcContractSaleController.java
  65. 0 15
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcContractTradeController.java
  66. 66 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcPurchaseController.java
  67. 3 4
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dao/KwcContractLogisticsMapper.java
  68. 14 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dao/KwcContractTradeMapper.java
  69. 95 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dubbo/RemoteContractServiceImpl.java
  70. 116 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/dto/res/QueryListResDto.java
  71. 3 3
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractLogistics.java
  72. 6 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractLogisticsGoods.java
  73. 2 2
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTrade.java
  74. 5 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTradeTrack.java
  75. 5 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTradeUnit.java
  76. 55 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/ContractTradeReqVo.java
  77. 1 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/LogisticsBaseInfoReqVo.java
  78. 5 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/LogisticsGoodsInfoReqVo.java
  79. 6 2
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/QueryListReqVo.java
  80. 81 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/TradeBaseInfoReqVo.java
  81. 41 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/TradeGoodsInfoReqVo.java
  82. 45 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/ContractTradeDetailResVo.java
  83. 34 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/FindListGroupResVo.java
  84. 5 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/LogisticsBaseInfoResVo.java
  85. 34 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/LogisticsGoodsInfoResVo.java
  86. 24 5
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/QueryListResVo.java
  87. 70 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/TradeBaseInfoResVo.java
  88. 36 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/TradeGoodsInfoResVo.java
  89. 10 4
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsGoodsService.java
  90. 175 48
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsService.java
  91. 1 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsTrackService.java
  92. 1 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsUnitService.java
  93. 66 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeGoodsService.java
  94. 434 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeService.java
  95. 35 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeTrackService.java
  96. 95 0
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeUnitService.java
  97. 25 9
      sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractLogisticsMapper.xml
  98. 49 0
      sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractTradeMapper.xml
  99. 8 0
      sckw-modules/sckw-example/pom.xml
  100. 12 1
      sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/MessageApiController.java

+ 82 - 2
pom.xml

@@ -53,6 +53,13 @@
         <junit.version>4.13.2</junit.version>
         <xxljob.version>2.4.0</xxljob.version>
         <project.version>1.0.0</project.version>
+        <!--maven插件版本声明-->
+        <maven-clean-plugin.version>3.2.0</maven-clean-plugin.version>
+        <maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version>
+        <maven-jar-plugin.version>3.3.0</maven-jar-plugin.version>
+        <maven-resources-plugin.version>3.3.0</maven-resources-plugin.version>
+        <maven-install-plugin.version>3.0.1</maven-install-plugin.version>
+        <maven-deploy-plugin.version>3.0.0</maven-deploy-plugin.version>
     </properties>
 
     <dependencyManagement>
@@ -109,7 +116,6 @@
             </dependency>
 
 
-
             <!-- apache dubbo -->
             <dependency>
                 <groupId>org.apache.dubbo</groupId>
@@ -348,17 +354,91 @@
     <build>
         <pluginManagement>
             <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-clean-plugin</artifactId>
+                    <version>${maven-clean-plugin.version}</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-compiler-plugin</artifactId>
+                    <version>${maven-compiler-plugin.version}</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-deploy-plugin</artifactId>
+                    <version>${maven-deploy-plugin.version}</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-install-plugin</artifactId>
+                    <version>${maven-install-plugin.version}</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-jar-plugin</artifactId>
+                    <version>${maven-jar-plugin.version}</version>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-resources-plugin</artifactId>
+                    <version>${maven-resources-plugin.version}</version>
+                    <configuration>
+                        <propertiesEncoding>${project.build.sourceEncoding}</propertiesEncoding>
+                        <delimiters>
+                            <delimiter>@</delimiter>
+                        </delimiters>
+                        <useDefaultDelimiters>false</useDefaultDelimiters>
+                    </configuration>
+                </plugin>
                 <plugin>
                     <groupId>org.springframework.boot</groupId>
                     <artifactId>spring-boot-maven-plugin</artifactId>
-                    <version>3.1.0</version>
+                    <version>${spring-boot.version}</version>
                 </plugin>
             </plugins>
         </pluginManagement>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-clean-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-deploy-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-install-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>17</source>
+                    <target>17</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+        </plugins>
         <resources>
             <resource>
                 <directory>src/main/resources</directory>
+                <!-- 关闭过滤 -->
+                <filtering>false</filtering>
+                <includes>
+                    <include>**/*</include>
+                </includes>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+                <!-- 启用过滤 即该资源中的变量将会被过滤器中的值替换 -->
                 <filtering>true</filtering>
+                <!--资源-->
+                <includes>
+                    <include>**/*.properties</include>
+                    <include>**/*.yml</include>
+                </includes>
             </resource>
         </resources>
     </build>

+ 9 - 1
sckw-auth/pom.xml

@@ -54,7 +54,6 @@
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
-                <version>3.1.0</version>
                 <executions>
                     <execution>
                         <goals>
@@ -62,6 +61,15 @@
                         </goals>
                     </execution>
                 </executions>
+                <configuration>
+                    <excludes>
+                        <exclude>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </exclude>
+                    </excludes>
+                    <mainClass>com.sckw.auth.AuthApplication</mainClass>
+                </configuration>
             </plugin>
         </plugins>
     </build>

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

@@ -170,5 +170,9 @@
             <artifactId>mybatis-plus-extension</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>okhttp</artifactId>
+        </dependency>
     </dependencies>
 </project>

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

@@ -13,6 +13,7 @@ public final class StringConstant {
     public static final String LEFT_SEPARATORS = "//";
     public static final String RIGHT_SEPARATOR = "\\";
     public static final String COLON = ":";
+    public static final String SEMICOLON = ";";
     public static final String POINT = ".";
     public static final String COMMA=",";
     public static final String HTTP_STRING = "http";

+ 16 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java

@@ -17,6 +17,10 @@ import java.util.List;
 public enum DictEnum {
     PRICE_TYPE_0("price_type", "0", "元/吨"),
     PRICE_TYPE_1("price_type", "1", "元/车"),
+    WEIGHT_CAR_0("weight_car", "0", "吨/车"),
+    WEIGHT_CAR_1("weight_car", "1", "公斤/车"),
+    TRANSPORT_TYPE_0("transport_type", "0", "公斤/车"),
+    TRANSPORT_TYPE_1("transport_type", "1", "吨/车"),
     UNIT_TYPE_0("unit_type","0", "吨"),
     UNIT_TYPE_1("unit_type","1", "方"),
     UNIT_TYPE_2("unit_type","2", "箱"),
@@ -45,6 +49,11 @@ public enum DictEnum {
     TORDER_STATUS_7("tOrder_status", "7", "已结算"),
     CONTRACT_STATUS_0("contract_status", "0", "待签约"),
     CONTRACT_STATUS_1("contract_status", "1", "已签约"),
+    SETTLEMENT_CYCLE_0("settlement_cycle", "0", "周结"),
+    SETTLEMENT_CYCLE_1("settlement_cycle", "1", "月结"),
+    SETTLEMENT_CYCLE_2("settlement_cycle", "2", "季结"),
+    SIGNING_TYPE_0("signing_type", "0", "线上签约"),
+    SIGNING_TYPE_1("signing_type", "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", "采购单位"),
@@ -56,7 +65,13 @@ public enum DictEnum {
     PRODUCT_NAME_TYPE_0("product_name_type", "0", "毛石"),
     GOODS_STATUS_0("goods_status", "0", "已保存"),
     GOODS_STATUS_1("goods_status", "1", "已上架"),
-    GOODS_STATUS_2("goods_status", "2", "已下架");
+    GOODS_STATUS_2("goods_status", "2", "已下架"),
+    CHARGING_TYPE_1("charging_type", "1", "按装货量") ,
+    CHARGING_TYPE_2("charging_type", "2", "按卸货量") ,
+    CHARGING_TYPE_3("charging_type", "3", "按车次"),
+    SIGNING_WAY_1("signing_way", "1", "线上签约"),
+    SIGNING_WAY_2("signing_way", "2", "线下签约");
+
     private final String type;
     private final String value;
     private final String label;

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

@@ -19,12 +19,15 @@ public enum DictTypeEnum {
     PICKUP_TYPE("pickup_type", "提货方式"),
     DELIVERY_TYPE("delivery_type", "交付类型"),
     TORDER_SOURCE("tOrder_source", "交易订单来源"),
+    TRANSPORT_TYPE("transport_type", "运输方式"),
     TORDER_STATUS("tOrder_status", "交易订单状态"),
     CONTRACT_STATUS("contract_status", "合同状态"),
     TORDER_ADDRESS_TYPE("tOrder_address_type", "交易订单地址类型"),
     TORDER_UNIT_TYPE("tOrder_unit_type", "交易订单单位类型"),
     ADDRESS_TYPE("address_type", "地址类型"),
     INDUSTRY_TYPE("industry_type", "行业类型"),
+    SETTLEMENT_CYCLE("settlement_cycle", "结算周期"),
+    SIGNING_TYPE("signing_type", "签约方式"),
     CLASSIFICATION_TYPE("classification_type", "分类类型"),
     CATEGORY_TYPE("category_type", "类别类型"),
     PRODUCT_NAME_TYPE("product_name_type", "品名类型"),
@@ -33,7 +36,10 @@ public enum DictTypeEnum {
     COLOR_TYPE("color_type", "车辆颜色"),
     ENERGY_TYPE("energy_type", "能源类型"),
     TRUCK_TYPE("truck_type", "车辆类型"),
-    USE_TYPE("use_type", "使用性质");
+    USE_TYPE("use_type", "使用性质"),
+    SIGNING_WAY("signing_way", "签约方式"),
+    WEIGHT_CAR("weight_car", "以车的限重"),
+    ;
 
     private final String type;
     private final String name;

+ 4 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/exception/BusinessException.java

@@ -2,6 +2,8 @@ package com.sckw.core.exception;
 
 import lombok.Getter;
 
+import java.io.Serial;
+
 /**
  * @Author yzc
  * @Description 自定义业务异常
@@ -9,7 +11,8 @@ import lombok.Getter;
  */
 @Getter
 public class BusinessException extends RuntimeException {
-
+    @Serial
+    private static final long serialVersionUID = 4515565480123536390L;
     /**
      * 异常信息
      **/

+ 140 - 140
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/auth/context/LoginUserHolder.java

@@ -1,140 +1,140 @@
-package com.sckw.core.model.auth.context;
-
-import com.sckw.core.model.auth.LoginUserInfo;
-
-/**
- * 当前登录用户的临时保存容器
- * @Author zhaokang
- * @date 2020/04/13 0021
- */
-public class LoginUserHolder {
-
-    private static final ThreadLocal<LoginUserInfo> LONGIN_USER_HOLDER = new ThreadLocal<LoginUserInfo>();
-
-    /**
-     * 赋值
-     * @author zhaokang
-     * @Date 2020/04/13 0021
-     */
-    public static void set(LoginUserInfo loginUserInfo) {
-        LONGIN_USER_HOLDER.set(loginUserInfo);
-    }
-
-    /**
-     * 取值
-     * @author zhaokang
-     * @Date 2020/04/13 0021
-     */
-    public static LoginUserInfo get() {
-        return LONGIN_USER_HOLDER == null ? null : LONGIN_USER_HOLDER.get();
-    }
-
-    /**
-     * 删除保存的用户
-     * @author zhaokang
-     * @Date 2020/04/13 0021
-     */
-    public static void remove() {
-        LONGIN_USER_HOLDER.remove();
-    }
-
-    /**
-     * 用户id
-     * @author zhaokang
-     * @Date 2020/04/13 0021
-     */
-    public static Long getUserId(){
-        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getId();
-    }
-
-    /**
-     * 用户所属系统
-     * @author zhaokang
-     * @Date 2020/04/13 0021
-     */
-    public static Integer getSystemType(){
-        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getSystemType();
-    }
-
-    /**
-     * 用户账号
-     * @author zhaokang
-     * @Date 2020/04/13 0021
-     */
-    public static String getAccount(){
-        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getAccount();
-    }
-
-    /**
-     * 用户姓名
-     * @author zhaokang
-     * @Date 2020/04/13 0021
-     */
-    public static String getUserName(){
-        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getUserName();
-    }
-
-    /**
-     * 用户电话
-     * @author zhaokang
-     * @Date 2020/04/13 0021
-     */
-    public static String getPhone(){
-        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getPhone();
-    }
-
-    /**
-     * 是否主账号(0是/1否)
-     * @author zhaokang
-     * @Date 2020/04/13 0021
-     */
-    public static Integer getIsMain(){
-        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getIsMain();
-    }
-
-    /**
-     * 用户账号状态(0正常/1锁定)
-     * @author zhaokang
-     * @Date 2020/04/13 0021
-     */
-    public static Integer getStatus(){
-        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getStatus();
-    }
-
-    /**
-     * 用户所属企业
-     * @author zhaokang
-     * @Date 2020/04/13 0021
-     */
-    public static Long getEntId(){
-        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getEntId();
-    }
-
-    /**
-     * 用户登录终端
-     * @author zhaokang
-     * @Date 2020/04/13 0021
-     */
-    public static String getClientType(){
-        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getClientType();
-    }
-
-    /**
-     * 用户机构
-     * @author zhaokang
-     * @Date 2020/04/13 0021
-     */
-    public static Long getDeptId(){
-        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getDeptId();
-    }
-
-    /**
-     * (司机)
-     * @author zhaokang
-     * @Date 2020/04/13 0021
-     */
-    public static String getUserIds(){
-        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getUserIds();
-    }
-
-}
+//package com.sckw.core.model.auth.context;
+//
+//import com.sckw.core.model.auth.LoginUserInfo;
+//
+///**
+// * 当前登录用户的临时保存容器
+// * @Author zhaokang
+// * @date 2020/04/13 0021
+// */
+//public class LoginUserHolder {
+//
+//    private static final ThreadLocal<LoginUserInfo> LONGIN_USER_HOLDER = new ThreadLocal<LoginUserInfo>();
+//
+//    /**
+//     * 赋值
+//     * @author zhaokang
+//     * @Date 2020/04/13 0021
+//     */
+//    public static void set(LoginUserInfo loginUserInfo) {
+//        LONGIN_USER_HOLDER.set(loginUserInfo);
+//    }
+//
+//    /**
+//     * 取值
+//     * @author zhaokang
+//     * @Date 2020/04/13 0021
+//     */
+//    public static LoginUserInfo get() {
+//        return LONGIN_USER_HOLDER == null ? null : LONGIN_USER_HOLDER.get();
+//    }
+//
+//    /**
+//     * 删除保存的用户
+//     * @author zhaokang
+//     * @Date 2020/04/13 0021
+//     */
+//    public static void remove() {
+//        LONGIN_USER_HOLDER.remove();
+//    }
+//
+//    /**
+//     * 用户id
+//     * @author zhaokang
+//     * @Date 2020/04/13 0021
+//     */
+//    public static Long getUserId(){
+//        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getId();
+//    }
+//
+//    /**
+//     * 用户所属系统
+//     * @author zhaokang
+//     * @Date 2020/04/13 0021
+//     */
+//    public static Integer getSystemType(){
+//        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getSystemType();
+//    }
+//
+//    /**
+//     * 用户账号
+//     * @author zhaokang
+//     * @Date 2020/04/13 0021
+//     */
+//    public static String getAccount(){
+//        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getAccount();
+//    }
+//
+//    /**
+//     * 用户姓名
+//     * @author zhaokang
+//     * @Date 2020/04/13 0021
+//     */
+//    public static String getUserName(){
+//        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getUserName();
+//    }
+//
+//    /**
+//     * 用户电话
+//     * @author zhaokang
+//     * @Date 2020/04/13 0021
+//     */
+//    public static String getPhone(){
+//        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getPhone();
+//    }
+//
+//    /**
+//     * 是否主账号(0是/1否)
+//     * @author zhaokang
+//     * @Date 2020/04/13 0021
+//     */
+//    public static Integer getIsMain(){
+//        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getIsMain();
+//    }
+//
+//    /**
+//     * 用户账号状态(0正常/1锁定)
+//     * @author zhaokang
+//     * @Date 2020/04/13 0021
+//     */
+//    public static Integer getStatus(){
+//        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getStatus();
+//    }
+//
+//    /**
+//     * 用户所属企业
+//     * @author zhaokang
+//     * @Date 2020/04/13 0021
+//     */
+//    public static Long getEntId(){
+//        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getEntId();
+//    }
+//
+//    /**
+//     * 用户登录终端
+//     * @author zhaokang
+//     * @Date 2020/04/13 0021
+//     */
+//    public static String getClientType(){
+//        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getClientType();
+//    }
+//
+//    /**
+//     * 用户机构
+//     * @author zhaokang
+//     * @Date 2020/04/13 0021
+//     */
+//    public static Long getDeptId(){
+//        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getDeptId();
+//    }
+//
+//    /**
+//     * (司机)
+//     * @author zhaokang
+//     * @Date 2020/04/13 0021
+//     */
+//    public static String getUserIds(){
+//        return LONGIN_USER_HOLDER.get() == null ? null : LONGIN_USER_HOLDER.get().getUserIds();
+//    }
+//
+//}

+ 4 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/Global.java

@@ -118,9 +118,12 @@ public class Global {
     /**系统初始密码*/
     public static final String PASSWORD = "123456";
 
-    /**逗号*/
+    /**逗号-英文*/
     public static final String COMMA = ",";
 
+    /**逗号-中文*/
+    public static final String COMMA1 = ",";
+
     /**点*/
     public static final String DOT = ".";
 

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/common/enums/CarWaybillEnum.java → sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillEnum.java

@@ -1,4 +1,4 @@
-package com.sckw.transport.common.enums;
+package com.sckw.core.model.enums;
 
 /**
  * @author lfdc

+ 3 - 3
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/ContractStatusEnum.java

@@ -12,11 +12,11 @@ public enum ContractStatusEnum {
     //已签约
     SIGNED(0, "已签约"),
     //已完结
-    COMPLETE(1, "已完结"),
+    COMPLETE(2, "已完结"),
     //已保存
-    SAVE(2, "已保存"),
+    SAVE(3, "已保存"),
     //签约中
-    SUBMIT(3, "签约中");
+    SUBMIT(1, "待签约");
 
     private final int code;
 

+ 7 - 7
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/ContractTrackEnum.java

@@ -10,23 +10,23 @@ import lombok.Getter;
 @Getter
 public enum ContractTrackEnum {
 
-    //审批中
-    APPROVAL(1, "审批中"),
     //签约中
-    SIGNING(2, "签约中"),
-    //履约中
-    PERFORMANCE(3, "履约中");
+    SIGNING(1, "签约中"),
+    //已签约
+    SIGNED(0, "已签约"),
+    //已完结
+    OVER(2, "已完结");
 
     private final int code;
 
     private final String name;
 
-    ContractTrackEnum(int code, String name){
+    ContractTrackEnum(int code, String name) {
         this.code = code;
         this.name = name;
     }
 
-    public static ContractTrackEnum getName(int code){
+    public static ContractTrackEnum getName(int code) {
         for (ContractTrackEnum contractTrackEnum : values()) {
             if (contractTrackEnum.getCode() == code) {
                 return contractTrackEnum;

+ 2 - 2
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/EntTypeEnum.java

@@ -14,9 +14,9 @@ public enum EntTypeEnum {
     SUPPLIER(1, "供应商"),
     //采购商
     PURCHASER(2, "采购商"),
-    //4PL物流
+    //4PL物流  托运
     LOGISTICS3(3, "4PL物流"),
-    //3PL物流
+    //3PL物流  承运
     LOGISTICS4(4, "3PL物流");
 
     private final int code;

+ 3 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/common/enums/LogisticsOrderEnum.java → sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/LogisticsOrderEnum.java

@@ -1,4 +1,4 @@
-package com.sckw.transport.common.enums;
+package com.sckw.core.model.enums;
 
 /**
  * @author lfdc
@@ -14,8 +14,8 @@ public enum LogisticsOrderEnum {
 //    WAIT_UNLOADING(5, "waitUnLoading", "5", "待卸货"),
     HAVE_FINISHED(4, "haveFinished", "4", "已完成"),
     HAVE_RECONCILED(5, "haveReconciled", "5", "已对账"),
-    HAVE_ALREADY_SETTLED(6, "haveAlreadySettled", "5", "已结算"),
-    SEND_BACK(7, "sendBack", "5", "已退回");
+    HAVE_ALREADY_SETTLED(6, "haveAlreadySettled", "6", "已结算"),
+    SEND_BACK(7, "sendBack", "7", "已退回");
 
     private final Integer code;
     private final String value;

+ 2 - 2
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/SigningWayEnum.java

@@ -11,9 +11,9 @@ import lombok.Getter;
 public enum SigningWayEnum {
 
     //线上签约
-    ONLINE(1, "线上签约"),
+    ONLINE(1, "1"),
     //线下签约
-    OFFLINE(2, "线下签约");
+    OFFLINE(2, "2");
 
     private final int code;
 

+ 23 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/BeanUtils.java

@@ -216,4 +216,27 @@ public class BeanUtils extends BeanUtil {
         }
         return false;
     }
+
+    /**
+     * @param source 源对象
+     * @param target 目标对象
+     * @desc source 属性值赋值给target
+     * @author zk
+     * @date 2023/7/18
+     **/
+    public static void copyPropertiesValue(Object source, Object target) {
+        // 获取实体类的所有属性,返回Field数组
+        Field[] field = target.getClass().getDeclaredFields();
+        // 遍历所有属性
+        for (int j = 0; j < field.length; j++) {
+            // 获取属性的名字
+            String fieldName = field[j].getName();
+            // 通过属性名称获取对象属性值
+            Object value = BeanUtils.getProperty(source, fieldName);
+            if (StringUtils.isNotBlank(value)) {
+                // 为对象属性赋值
+                BeanUtils.setProperty(target, fieldName, value);
+            }
+        }
+    }
 }

+ 90 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/LogUtil.java

@@ -0,0 +1,90 @@
+package com.sckw.core.utils;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+/**
+ * @Desc 日志打印工具类
+ * @Author zk
+ * @Date 2019/5/13
+ */
+public class LogUtil {
+    private static Logger logger = LogManager.getLogger(LogUtil.class);
+
+    public static String TITLE = "【矿拉拉平台】=====";
+
+    /**
+     * 获取异常信息
+     * @Author zk
+     * @param e 异常Exception
+     * @Date 2019/5/13
+     * @return
+     */
+    public static synchronized String getStackTraceInfo(Exception e){
+        StringWriter sw = new StringWriter();
+        e.printStackTrace(new PrintWriter(sw, true));
+        return sw.toString();
+    }
+
+    /**
+     * 打印日志
+     * @Author zk
+     * @param message 日志内容
+     * @Date 2019/5/13
+     * @return
+     */
+    public static synchronized void debug(String message){
+        logger.info(TITLE + message);
+    }
+
+    /**
+     * 打印日志
+     * @Author zk
+     * @param message 日志内容
+     * @Date 2019/5/13
+     * @return
+     */
+    public static synchronized void info(String message){
+        logger.info(TITLE + message);
+    }
+
+    public static synchronized void info(String message, Object params){
+        logger.info(TITLE + message,params);
+    }
+
+    /**
+     * 打印异常日志
+     * @Author zk
+     * @param message 日志内容
+     * @Date 2020/03/13
+     * @return
+     */
+    public static synchronized void error(String className, String methodName, String exceptionName, String message, String params){
+        logger.error(TITLE+"异常["+className+"."+methodName+"] 异常代码["+exceptionName+"] 异常信息["+message+"] 请求参数:"+params);
+    }
+
+    /**
+     * 打印异常日志
+     * @Author zk
+     * @param message 日志内容
+     * @Date 2020/03/13
+     * @return
+     */
+    public static synchronized void error(String className, String methodName, String exceptionName, String message){
+        logger.error(TITLE+"异常["+className+"."+methodName+"] 异常代码["+exceptionName+"] 异常信息["+message+"]");
+    }
+
+    /**
+     * 打印异常日志
+     * @Author zk
+     * @param message 日志内容
+     * @Date 2021/01/22
+     * @return
+     */
+    public static synchronized void error(String className, String message){
+        logger.error(TITLE+"异常["+className+"] 异常信息["+message+"]");
+    }
+
+}

+ 405 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/OkHttpUtils.java

@@ -0,0 +1,405 @@
+package com.sckw.core.utils;
+
+import com.alibaba.fastjson2.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
+import org.apache.commons.lang3.StringUtils;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.util.CollectionUtils;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.security.SecureRandom;
+import java.security.cert.X509Certificate;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author xcq
+ * @date 2023-02-21 10:42:20
+ **/
+@Slf4j
+public class OkHttpUtils {
+    private static volatile OkHttpClient okHttpClient = null;
+    private static volatile Semaphore semaphore = null;
+    private Map<String, String> headerMap;
+    private Map<String, String> paraMap;
+    private Map<String, String> bodyParaMap;
+    //json字符串
+    private String bodyParaString;
+    private String url;
+    private Request.Builder request;
+
+    /**
+     * 初始化okHttpClient,并且允许https访问
+     */
+    private OkHttpUtils() {
+        if (okHttpClient == null) {
+            synchronized (OkHttpUtils.class) {
+                if (okHttpClient == null) {
+                    TrustManager[] trustManagers = buildTrustManagers();
+                    okHttpClient = new OkHttpClient.Builder()
+                            .connectTimeout(15, TimeUnit.SECONDS)
+                            .writeTimeout(20, TimeUnit.SECONDS)
+                            .readTimeout(20, TimeUnit.SECONDS)
+                            .sslSocketFactory(createSSLSocketFactory(trustManagers), (X509TrustManager) trustManagers[0])
+                            .hostnameVerifier((hostName, session) -> true)
+                            .retryOnConnectionFailure(true)
+                            .build();
+                    addHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
+                }
+            }
+        }
+    }
+
+    /**
+     * 用于异步请求时,控制访问线程数,返回结果
+     *
+     * @return
+     */
+    private static Semaphore getSemaphoreInstance() {
+        //只能1个线程同时访问
+        synchronized (OkHttpUtils.class) {
+            if (semaphore == null) {
+                semaphore = new Semaphore(0);
+            }
+        }
+        return semaphore;
+    }
+
+    /**
+     * 创建OkHttpUtils
+     *
+     * @return
+     */
+    public static OkHttpUtils builder() {
+        return new OkHttpUtils();
+    }
+
+    /**
+     * 添加url
+     *
+     * @param url
+     * @return
+     */
+    public OkHttpUtils url(String url) {
+        this.url = url;
+        return this;
+    }
+
+    /**
+     * 添加参数
+     *
+     * @param key   参数名
+     * @param value 参数值
+     * @return
+     */
+    public OkHttpUtils addPara(String key, String value) {
+        if (paraMap == null) {
+            paraMap = new LinkedHashMap<>(16);
+        }
+        paraMap.put(key, value);
+        return this;
+    }
+
+    /**
+     * 添加参数
+     *
+     * @param key   参数名
+     * @param value 参数值
+     * @return
+     */
+    public OkHttpUtils addBodyPara(String key, String value) {
+        if (bodyParaMap == null) {
+            bodyParaMap = new LinkedHashMap<>(16);
+        }
+        bodyParaMap.put(key, value);
+        return this;
+    }
+
+    public OkHttpUtils addBodyJsonStr(String string) {
+        bodyParaString = string;
+        return this;
+    }
+
+    /**
+     * 添加请求头
+     *
+     * @param key   参数名
+     * @param value 参数值
+     * @return
+     */
+    public OkHttpUtils addHeader(String key, String value) {
+        if (headerMap == null) {
+            headerMap = new LinkedHashMap<>(16);
+        }
+        headerMap.put(key, value);
+        return this;
+    }
+
+    /**
+     * 初始化get方法
+     *
+     * @return
+     */
+    public OkHttpUtils get() {
+        request = new Request.Builder().get();
+        request.url(buildUrl());
+        return this;
+    }
+
+    /**
+     * 初始化post方法
+     */
+    public OkHttpUtils postForm(JSONObject object, byte[] file) {
+        MultipartBody.Builder formBody = new MultipartBody.Builder();
+        formBody.setType(MultipartBody.FORM);
+
+        for (String s : object.keySet()) {
+            formBody.addFormDataPart(s, StringUtils.isBlank(object.getString(s)) ? "" : object.getString(s));
+        }
+        String fileName = UUIDUtils.get32UUID() + ".zip";
+        log.info("文件名:{}", fileName);
+        formBody.addFormDataPart("file", fileName, RequestBody.create(file));
+
+        RequestBody requestBody = formBody.build();
+        // params参数
+        request = new Request.Builder().post(requestBody).url(buildUrl());
+        return this;
+    }
+
+    /**
+     * 初始化post方法
+     *
+     * @param isJsonPost true等于json的方式提交数据,类似postman里post方法的raw
+     *                   false等于普通的表单提交
+     * @return
+     */
+    public OkHttpUtils post(boolean isJsonPost) {
+        RequestBody requestBody;
+        if (isJsonPost) {
+            String json;
+            if (StringUtils.isNotBlank(bodyParaString)) {
+                json = bodyParaString;
+            } else if (!CollectionUtils.isEmpty(bodyParaMap)) {
+                json = JSONObject.toJSONString(bodyParaMap);
+            } else {
+                json = "{}";
+            }
+            requestBody = RequestBody.create(json, MediaType.parse("application/json; charset=utf-8"));
+        } else {
+            FormBody.Builder formBody = new FormBody.Builder();
+            if (bodyParaMap != null) {
+                bodyParaMap.forEach(formBody::add);
+            }
+            requestBody = formBody.build();
+        }
+        // params参数
+        request = new Request.Builder().post(requestBody).url(buildUrl());
+        return this;
+    }
+
+    private String buildUrl() {
+        StringBuilder urlBuilder = new StringBuilder(url);
+        if (paraMap != null) {
+            urlBuilder.append("?");
+            try {
+                for (Map.Entry<String, String> entry : paraMap.entrySet()) {
+                    urlBuilder.append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8)).
+                            append("=").
+                            append(URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8)).
+                            append("&");
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            urlBuilder.deleteCharAt(urlBuilder.length() - 1);
+        }
+        return urlBuilder.toString();
+    }
+
+    /**
+     * 文件下载同步请求
+     *
+     * @return
+     */
+    public byte[] fileSync() {
+        setHeader(request);
+        try {
+            Response response = okHttpClient.newCall(request.build()).execute();
+            if (response.isSuccessful()) {
+                assert response.body() != null;
+                return response.body().bytes();
+            }
+            return new byte[0];
+        } catch (IOException e) {
+            e.printStackTrace();
+            return new byte[0];
+        }
+    }
+
+    /**
+     * 同步请求
+     *
+     * @return
+     */
+    public String sync() {
+        setHeader(request);
+        try {
+            Response response = okHttpClient.newCall(request.build()).execute();
+            assert response.body() != null;
+            return response.body().string();
+        } catch (IOException e) {
+            e.printStackTrace();
+            return "请求失败:" + e.getMessage();
+        }
+    }
+
+    /**
+     * 异步请求,有返回值
+     */
+    public String async() {
+        StringBuilder buffer = new StringBuilder("");
+        setHeader(request);
+        okHttpClient.newCall(request.build()).enqueue(new Callback() {
+            @Override
+            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
+                assert response.body() != null;
+                buffer.append(response.body().string());
+                getSemaphoreInstance().release();
+            }
+            @Override
+            public void onFailure(@NotNull Call call, @NotNull IOException e) {
+                buffer.append("请求出错:").append(e.getMessage());
+
+            }
+        });
+        try {
+            getSemaphoreInstance().acquire();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        return buffer.toString();
+    }
+
+    /**
+     * 异步请求,带有接口回调
+     *
+     * @param callBack
+     */
+    public void async(ICallBack callBack) {
+        setHeader(request);
+        okHttpClient.newCall(request.build()).enqueue(new Callback() {
+
+            @Override
+            public void onFailure(@NotNull Call call,@NotNull  IOException e) {
+                callBack.onFailure(call, e.getMessage());
+            }
+
+            @Override
+            public void onResponse(Call call, Response response) throws IOException {
+                assert response.body() != null;
+                callBack.onSuccessful(call, response.body().string());
+            }
+        });
+    }
+
+    /**
+     * 为request添加请求头
+     *
+     * @param request
+     */
+    private void setHeader(Request.Builder request) {
+        if (headerMap != null) {
+            try {
+                for (Map.Entry<String, String> entry : headerMap.entrySet()) {
+                    request.addHeader(entry.getKey(), entry.getValue());
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+
+    /**
+     * 生成安全套接字工厂,用于https请求的证书跳过
+     *
+     * @return
+     */
+    private static SSLSocketFactory createSSLSocketFactory(TrustManager[] trustAllCerts) {
+        SSLSocketFactory ssfFactory = null;
+        try {
+            SSLContext sc = SSLContext.getInstance("SSL");
+            sc.init(null, trustAllCerts, new SecureRandom());
+            ssfFactory = sc.getSocketFactory();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return ssfFactory;
+    }
+
+    private static TrustManager[] buildTrustManagers() {
+        return new TrustManager[]{
+                new X509TrustManager() {
+                    @Override
+                    public void checkClientTrusted(X509Certificate[] chain, String authType) {
+                    }
+
+                    @Override
+                    public void checkServerTrusted(X509Certificate[] chain, String authType) {
+                    }
+
+                    @Override
+                    public X509Certificate[] getAcceptedIssuers() {
+                        return new X509Certificate[]{};
+                    }
+                }
+        };
+    }
+
+    /**
+     * 自定义一个接口回调
+     */
+    public interface ICallBack {
+
+        void onSuccessful(Call call, String data);
+
+        void onFailure(Call call, String errorMsg);
+
+    }
+
+
+    /**
+     * 使用示例
+     *
+     * @param args
+     * @author xcq
+     * @date 2023-02-21 10:47:28
+     **/
+    public static void main(String[] args) {
+        String address = "https://file.cloudpnr.com/app-86820a0f-8b13-479b-a466-b261af7290d5%2Fsaturnfile%2F48cf909816b142e5beec68988c1982b1%2F39189ab6-fac3-11ed-9690-0242ac110002.zip?Expires=1685254390&OSSAccessKeyId=LTAI6Yzq9tIYS57h&Signature=oNyqey777CjDk0IH5ZaniwTAdfg%3D";
+        byte[] file = OkHttpUtils.builder().url(address)
+                .get()
+                .fileSync();
+        /*通知中台*/
+        JSONObject tmp = new JSONObject();
+        tmp.put("status", StringUtils.equals("00000000", "00000000") ? "true" : "false");
+        tmp.put("msg", "");
+        log.info("交易确认异步通知中台入参:{}", tmp.toJSONString());
+
+        String sync = OkHttpUtils.builder().url("http://10.10.10.241:9505/notice/huifu/signal_agent_pay/S520267896211968001/00dd5d5dd4682ea3fad88a37ab48223a")
+                .postForm(tmp, file)
+                .sync();
+        log.info("交易确认异步通知中台返回->{}", sync);
+
+
+    }
+}

+ 2 - 2
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/PasswordUtils.java

@@ -122,8 +122,8 @@ public class PasswordUtils {
 
     public static void main(String[] args) {
 
-        String password = PasswordUtils.entryptPassword(PasswordUtils.md5("17358629958"));
-        String md5 = PasswordUtils.md5("123456");
+        String password = PasswordUtils.entryptPassword(PasswordUtils.md5("13868885042"));
+        String md5 = PasswordUtils.md5("13868885042");
         System.out.println(password);
         System.out.println(md5);
         System.out.println(validatePassword(md5, password));

+ 9 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/RegularUtils.java

@@ -43,6 +43,11 @@ public class RegularUtils {
      */
     public static final String DOLLAR_BIG_BRACKETS = "(\\$\\{)([\\w]+)(\\})";
 
+    /**
+     * 身份证
+     */
+    public static final String IDCARD = "(^\\d{18}$)|(^\\d{15}$)";
+
     /**
      * @description 校验
      * @author zk
@@ -56,4 +61,8 @@ public class RegularUtils {
         boolean isMatch = m.matches();
         return isMatch;
     }
+
+    public static void main(String[] args) {
+        System.out.println(matchs(DECIMAL_REG, "111.00"));
+    }
 }

+ 4 - 4
sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/utils/ValidateList.java → sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/model/ValiList.java

@@ -1,4 +1,4 @@
-package com.sckw.excel.utils;
+package com.sckw.core.web.model;
 
 import jakarta.validation.Valid;
 import lombok.Data;
@@ -6,14 +6,14 @@ import lombok.Data;
 import java.util.*;
 
 /**
- * @author JiangPan
+ * @author lfdc
  * @version 1.0.0
- * @ClassName ValidateList.java
+ * @ClassName ValiList.java
  * @Description List集合验证工具类
  * @createTime 2021年10月20日 15:29:00
  */
 @Data
-public class ValidateList<E> implements List<E> {
+public class ValiList<E> implements List<E> {
 
     @Valid
     private List<E> list = new ArrayList<>();

+ 1 - 1
sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/annotation/Translates.java

@@ -7,7 +7,7 @@ import java.lang.annotation.*;
  * 组合注解
  * 用于指定翻译多个字段
  *
- * @author liyue
+ * @author lfdc
  * @version v1
  * @create 2020-11-28 15:37:35
  * @copyright

+ 3 - 3
sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/utils/ValidUtil.java

@@ -1,13 +1,13 @@
 package com.sckw.excel.utils;
 
 import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.model.ValiList;
 import com.sckw.core.web.response.HttpResult;
 import jakarta.validation.ConstraintViolation;
 import jakarta.validation.Validation;
 import jakarta.validation.Validator;
 import org.apache.commons.lang3.StringUtils;
 import org.hibernate.validator.HibernateValidator;
-
 import java.util.List;
 import java.util.Set;
 
@@ -41,7 +41,7 @@ public class ValidUtil {
      */
     public static HttpResult serviceValid(Object object) {
         if (object instanceof List) {
-            ValidateList<Object> validateObj = new ValidateList<>();
+            ValiList<Object> validateObj = new ValiList<>();
             validateObj.addAll((List) object);
             object = validateObj;
         }
@@ -73,7 +73,7 @@ public class ValidUtil {
      */
     public static HttpResult serviceValid(Object object, Class... validateGroup) {
         if (object instanceof List) {
-            ValidateList<Object> validateObj = new ValidateList<>();
+            ValiList<Object> validateObj = new ValiList<>();
             validateObj.addAll((List) object);
             object = validateObj;
         }

+ 0 - 154
sckw-common/sckw-common-excel/src/main/resources/log4j2.xml

@@ -1,154 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration status="info" monitorInterval="30">
-    <properties>
-        <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符 -->
-        <!-- %logger{36} 表示 Logger 名字最长36个字符 -->
-        <property name="LOG_PATTERN"
-                  value="%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%t]}{faint} %clr{%c{1.}}{cyan} %clr{:}{faint} %m%n%xwEx"/>
-        <property name="LOG_WITHOUT_COLOR_PATTERN"
-                  value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${sys:PID}--- [%t] %c{1.} : %m%n%xwEx"/>
-        <property name="LOG_PATH" value="logs/sckw-gateway"/>
-    </properties>
-    <!--DEBUG<INFO<WARNING<ERROR<CRITICAL-->
-    <!-- 先定义所有的appender(附加器)-->
-    <appenders>
-        <!-- 输出控制台的配置 -->
-        <Console name="Console" target="SYSTEM_OUT">
-            <!-- 输出日志的格式 -->
-            <PatternLayout pattern="${LOG_PATTERN}"/>
-        </Console>
-
-        <!--all级别日志-->
-        <RollingFile name="allFileAppender"
-                     fileName="${LOG_PATH}/all.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/all-%d{yyyy-MM-dd}-%i.log.gz">
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <DefaultRolloverStrategy max="100"/>
-        </RollingFile>
-
-        <!--debug级别日志-->
-        <RollingFile name="debugFileAppender"
-                     fileName="${LOG_PATH}/debug.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log.gz">
-            <Filters>
-                <!--过滤掉info及更高级别日志-->
-                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
-            </Filters>
-            <!--设置日志格式-->
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <DefaultRolloverStrategy max="100"/>
-        </RollingFile>
-
-        <!--info级别日志-->
-        <RollingFile name="infoFileAppender"
-                     fileName="${LOG_PATH}/info.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
-            <Filters>
-                <!--过滤掉warn及更高级别日志-->
-                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
-            </Filters>
-            <!--设置日志格式-->
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <!--<DefaultRolloverStrategy max="100"/>-->
-        </RollingFile>
-
-        <!--warn级别日志-->
-        <RollingFile name="warnFileAppender"
-                     fileName="${LOG_PATH}/warn.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz">
-            <Filters>
-                <!--过滤掉error及更高级别日志-->
-                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
-            </Filters>
-            <!--设置日志格式-->
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <DefaultRolloverStrategy max="100"/>
-        </RollingFile>
-
-        <!--error及更高级别日志-->
-        <RollingFile name="errorFileAppender"
-                     fileName="${LOG_PATH}/error.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz">
-            <!--设置日志格式-->
-            <PatternLayout pattern="${LOG_WITHOUT_COLOR_PATTERN}"/>
-            <Policies>
-                <!-- 设置日志文件切分参数 -->
-                <!--<OnStartupTriggeringPolicy/>-->
-                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
-                <TimeBasedTriggeringPolicy/>
-            </Policies>
-            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
-            <DefaultRolloverStrategy max="100"/>
-        </RollingFile>
-
-        <!--json格式error级别日志-->
-        <RollingFile name="errorJsonAppender"
-                     fileName="${LOG_PATH}/error-json.log"
-                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/error-json-%d{yyyy-MM-dd}-%i.log.gz">
-            <JSONLayout compact="true" eventEol="true" locationInfo="true"/>
-            <Policies>
-                <SizeBasedTriggeringPolicy size="100 MB"/>
-                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
-            </Policies>
-        </RollingFile>
-
-    </appenders>
-
-    <loggers>
-        <root level="debug">
-            <AppenderRef ref="allFileAppender" level="all"/>
-            <AppenderRef ref="debugFileAppender" level="debug"/>
-            <AppenderRef ref="infoFileAppender" level="info"/>
-            <AppenderRef ref="warnFileAppender" level="warn"/>
-            <AppenderRef ref="errorFileAppender" level="error"/>
-            <AppenderRef ref="errorJsonAppender" level="error"/>
-            <appender-ref ref="Console" level="info"/>
-        </root>
-        <Logger name="org.springframework" level="info"/>
-        <Logger name="com.alibaba" level="info"/>
-        <Logger name="com.baomidou" level="info"/>
-    </loggers>
-
-</configuration>

+ 56 - 61
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwWaybillOrder.java

@@ -68,6 +68,12 @@ public class SckwWaybillOrder{
      */
     private String firmName;
 
+
+    /**
+     * 车辆id
+     */
+    private Long truckId;
+
     /**
      * 车牌号
      */
@@ -76,32 +82,28 @@ public class SckwWaybillOrder{
     /**
      * 车辆类型(牵引车、自卸、高栏、平板、厢式、集装箱车、罐车、封闭式、专项作业车、其他)
      */
-    private Integer truckType;
+    private String truckType;
 
     /**
      * 车能源类型(柴油、汽油、电动、氢能、天然气、液化石油气、甲醇、油电混动、油气混动、其他)
      */
-    private Integer truckEnergyType;
+    private String truckEnergyType;
 
     /**
      * 车使用性质(营运车、租赁车辆、货运车、危化品运输车、非营运车、其他)
      */
-    private Integer truckUseType;
+    private String truckUseType;
 
     /**
      * 车辆颜色
      */
-    private Integer truckColor;
+    private String truckColor;
 
     /**
      * 车挂车号
      */
     private String truckTrailerNo;
 
-    /**
-     * 车队班组
-     */
-    private String truckFleetName;
 
     /**
      * 司机主键ID
@@ -125,15 +127,30 @@ public class SckwWaybillOrder{
 
 
     /**
-     * 装货日期
+     * 装货日期(实际装货时间)
      */
     private Date loadTime;
 
     /**
-     * 卸货日期
+     * 卸货日期(实际卸货时间)
      */
     private Date unloadTime;
 
+    /**
+     * 循环/趟次
+     */
+    private Integer type;
+
+    /**
+     * 启送时间
+     */
+    private Date startTime;
+
+    /**
+     * 结束时间
+     */
+    private Date endTime;
+
     /**
      * 已委托量
      */
@@ -184,10 +201,31 @@ public class SckwWaybillOrder{
      */
     private BigDecimal deficitAmount;
 
+    /**
+     * 合理损耗
+     */
+    private BigDecimal loss;
+
+    /**
+     * 合理损耗-单位
+     */
+    private String lossUnit;
+
+    /**
+     * 扣亏损值(合理损耗-(实装-实卸))
+     */
+    private BigDecimal goodsPrice;
+
+    /**
+     * 扣亏损值(合理损耗-(实装-实卸))-单位
+     */
+    private String goodsPriceUnit;
+
+
     /**
      * 商品主键
      */
-    private Integer goodsId;
+    private Long goodsId;
 
     /**
      * 商品编号
@@ -214,6 +252,7 @@ public class SckwWaybillOrder{
      */
     private String goodsSpec;
 
+
     /**
      * 托运企业主键ID
      */
@@ -254,6 +293,7 @@ public class SckwWaybillOrder{
      */
     private String carrierPhone;
 
+
     /**
      * 装货地址类型
      */
@@ -334,6 +374,11 @@ public class SckwWaybillOrder{
      */
     private String unloadLng;
 
+
+    /**
+     * 单据状态
+     */
+    private Integer status;
     /**
      * 创建人主键id
      */
@@ -369,54 +414,4 @@ public class SckwWaybillOrder{
      */
     private Integer delFlag;
 
-    /**
-     * 单据状态
-     */
-    private String status;
-
-    /**
-     * 循环/趟次
-     */
-    private String type;
-
-    /**
-     * 车队id
-     */
-    private String fleetId;
-    /**
-     * 车队姓名
-     */
-    private String fleetName;
-
-    /**
-     * 派车时间-创建时间
-     */
-    private Date sendCarTime;
-    /**
-     * 启送时间
-     */
-    private Date startTime;
-    /**
-     * 结束时间
-     */
-    private Date endTime;
-
-    /**
-     * 装货区域
-     */
-    private String loadingCity;
-    /**
-     * 装货详细地址
-     */
-    private String loadingAddress;
-
-    /**
-     * 卸货区域
-     */
-    private String unloadingCity;
-    /**
-     * 卸货详细地址
-     */
-    private String unloadingAddress;
-
 }

+ 0 - 206
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/TradeOrderUpdateParam.java

@@ -1,206 +0,0 @@
-package com.sckw.mongo.model;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
-import lombok.experimental.Accessors;
-import org.springframework.util.StringUtils;
-
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.util.Date;
-import java.util.Objects;
-
-/**
- * @author zk
- * @desc MongoDB-交易订单信息
- * @date 2023/7/8
- */
-
-@Getter
-@Setter
-@ToString
-@Accessors(chain = true)
-public class TradeOrderUpdateParam {
-
-    /**
-     * 订单主键
-     */
-    private Long tOrderId;
-
-    /**
-     * 订单成交数量
-     */
-    private BigDecimal amount;
-
-    /**
-     * 订单成交单价
-     */
-    private BigDecimal unitPrice;
-
-    /**
-     * 订单金额
-     */
-    private BigDecimal price;
-
-    /**
-     * 订单开始日期
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private LocalDate startTime;
-
-    /**
-     * 订单结束日期
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private LocalDate endTime;
-
-    /**
-     * 订单交易方式(预付款、货到付款)
-     */
-    private String trading;
-
-    /**
-     * 订单提货方式(采方自提、供应配送)
-     */
-    private String pickupType;
-
-    /**
-     * 订单交付类型(签发交付、签收交付)
-     */
-    private String deliveryType;
-
-    /**
-     * 订单已委托量
-     */
-    private BigDecimal entrustAmount;
-
-    /**
-     * 订单实际交付量
-     */
-    private BigDecimal actualAmount;
-
-    /**
-     * 状态
-     */
-    private Integer status;
-
-    /**
-     * 订单备注
-     */
-    private String remark;
-
-    /**
-     * 合同主键
-     */
-    private Long contractId;
-
-    /**
-     * 合同编号
-     */
-    private String contractNo;
-
-    /**
-     * 合同mc
-     */
-    private String contractName;
-
-    /**
-     * 合同签约方式
-     */
-    private String contractSigningWay;
-
-    /**
-     * 更新人主键id
-     */
-    private Long updateBy;
-
-    /**
-     * 更新人姓名
-     */
-    private String updateByName;
-
-    /**
-     * 更新时间
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private Date updateTime;
-
-    /**
-     * 是否删除(0未删除,1删除)
-     */
-    private Integer delFlag;
-
-    /**
-     * @desc: 参数转换
-     * @author: yzc
-     * @date: 2023-07-17 9:16
-     * @Param param:
-     * @Param order:
-     * @return: com.sckw.mongo.model.SckwTradeOrder
-     */
-    public void convertSckwTradeOrder(TradeOrderUpdateParam param, SckwTradeOrder order) {
-        if (Objects.nonNull(param.getAmount())) {
-            order.setAmount(param.getAmount());
-        }
-        if (Objects.nonNull(param.getUnitPrice())) {
-            order.setUnitPrice(param.getUnitPrice());
-        }
-        if (Objects.nonNull(param.getPrice())) {
-            order.setPrice(param.getPrice());
-        }
-        if (Objects.nonNull(param.getStartTime())) {
-            order.setStartTime(param.getStartTime());
-        }
-        if (Objects.nonNull(param.getEndTime())) {
-            order.setEndTime(param.getEndTime());
-        }
-        if (StringUtils.hasText(param.getTrading())) {
-            order.setTrading(param.getTrading());
-        }
-        if (StringUtils.hasText(param.getPickupType())) {
-            order.setPickupType(param.getPickupType());
-        }
-        if (StringUtils.hasText(param.getDeliveryType())) {
-            order.setDeliveryType(param.getDeliveryType());
-        }
-        if (Objects.nonNull(param.getEntrustAmount())) {
-            order.setEntrustAmount(param.getEntrustAmount());
-        }
-        if (Objects.nonNull(param.getActualAmount())) {
-            order.setActualAmount(param.getActualAmount());
-        }
-        if (Objects.nonNull(param.getStatus())) {
-            order.setStatus(param.getStatus());
-        }
-        if (StringUtils.hasText(param.getRemark())) {
-            order.setRemark(param.getRemark());
-        }
-        if (Objects.nonNull(param.getContractId())) {
-            order.setContractId(param.getContractId());
-        }
-        if (StringUtils.hasText(param.getContractNo())) {
-            order.setContractNo(param.getContractNo());
-        }
-        if (StringUtils.hasText(param.getContractName())) {
-            order.setContractName(param.getContractName());
-        }
-        if (StringUtils.hasText(param.getContractSigningWay())) {
-            order.setContractSigningWay(param.getContractSigningWay());
-        }
-        if (Objects.nonNull(param.getUpdateBy())) {
-            order.setUpdateBy(param.getUpdateBy());
-        }
-        if (StringUtils.hasText(param.getUpdateByName())) {
-            order.setUpdateByName(param.getUpdateByName());
-        }
-        if (Objects.nonNull(param.getUpdateTime())) {
-            order.setUpdateTime(param.getUpdateTime());
-        }
-        if (Objects.nonNull(param.getDelFlag())) {
-            order.setDelFlag(param.getDelFlag());
-        }
-    }
-
-}

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

@@ -29,6 +29,10 @@ public class RedisConstant {
      * 商品更新库存锁key
      */
     public static final String GOODS_UPDATE_AMOUNT_KEY = "sckw:product:goods:update:amount:%s";
+    /**
+     * 更新贸易订单委托量、已履约量锁key
+     */
+    public static final String TORDER_UPDATE_AMOUNT_KEY = "sckw:trade:order:update:amount:%s";
 
     /**
      * 消费请求有效时间(秒)

+ 25 - 0
sckw-common/sckw-common-remote/src/main/java/com/sckw/remote/config/AllowClassList.java

@@ -0,0 +1,25 @@
+package com.sckw.remote.config;
+
+import com.sckw.remote.constant.DubboAllow;
+import jakarta.annotation.PostConstruct;
+import org.apache.dubbo.common.utils.SerializeSecurityManager;
+import org.apache.dubbo.rpc.model.FrameworkModel;
+import org.springframework.stereotype.Component;
+
+/**
+ * dubbo接口放行处理
+ *
+ * @author xucaiqin
+ */
+@Component
+public class AllowClassList {
+    @PostConstruct
+    public void init() {
+        SerializeSecurityManager serializeSecurityManager = FrameworkModel.defaultModel().getBeanFactory().getBean(SerializeSecurityManager.class);
+        for (String s : DubboAllow.getPacks()) {
+            serializeSecurityManager.addToAllowed(s);
+        }
+
+    }
+
+}

+ 32 - 0
sckw-common/sckw-common-remote/src/main/java/com/sckw/remote/constant/DubboAllow.java

@@ -0,0 +1,32 @@
+package com.sckw.remote.constant;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author xucaiqin
+ */
+public enum DubboAllow {
+    EXCEPTION("com.sckw.core.exception", "异常放行包");
+    private final String pack;
+    private final String desc;
+
+    DubboAllow(String pack, String desc) {
+        this.pack = pack;
+        this.desc = desc;
+    }
+
+    public String getPack() {
+        return pack;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public static List<String> getPacks() {
+        return Arrays.stream(DubboAllow.values()).map(DubboAllow::getPack).toList();
+    }
+
+
+}

+ 89 - 0
sckw-common/sckw-common-remote/src/main/java/com/sckw/remote/filter/DubboExceptionFilter.java

@@ -0,0 +1,89 @@
+package com.sckw.remote.filter;
+
+import org.apache.dubbo.common.constants.CommonConstants;
+import org.apache.dubbo.common.extension.Activate;
+import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
+import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.common.utils.ReflectUtils;
+import org.apache.dubbo.common.utils.StringUtils;
+import org.apache.dubbo.rpc.*;
+import org.apache.dubbo.rpc.filter.ExceptionFilter;
+import org.apache.dubbo.rpc.service.GenericService;
+
+import java.lang.reflect.Method;
+
+import static org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_FILTER_VALIDATION_EXCEPTION;
+
+@Activate(group = CommonConstants.PROVIDER)
+public class DubboExceptionFilter implements Filter, Filter.Listener {
+    private ErrorTypeAwareLogger logger = LoggerFactory.getErrorTypeAwareLogger(ExceptionFilter.class);
+
+    @Override
+    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
+        return invoker.invoke(invocation);
+    }
+
+    @Override
+    public void onResponse(Result appResponse, Invoker<?> invoker, Invocation invocation) {
+        if (appResponse.hasException() && GenericService.class != invoker.getInterface()) {
+            try {
+                Throwable exception = appResponse.getException();
+
+                // directly throw if it's checked exception
+                if (!(exception instanceof RuntimeException) && (exception instanceof Exception)) {
+                    return;
+                }
+                // directly throw if the exception appears in the signature
+                try {
+                    Method method = invoker.getInterface().getMethod(invocation.getMethodName(), invocation.getParameterTypes());
+                    Class<?>[] exceptionClasses = method.getExceptionTypes();
+                    for (Class<?> exceptionClass : exceptionClasses) {
+                        if (exception.getClass().equals(exceptionClass)) {
+                            return;
+                        }
+                    }
+                } catch (NoSuchMethodException e) {
+                    return;
+                }
+
+                // for the exception not found in method's signature, print ERROR message in server's log.
+                logger.error(CONFIG_FILTER_VALIDATION_EXCEPTION, "", "", "Got unchecked and undeclared exception which called by " + RpcContext.getServiceContext().getRemoteHost() + ". service: " + invoker.getInterface().getName() + ", method: " + invocation.getMethodName() + ", exception: " + exception.getClass().getName() + ": " + exception.getMessage(), exception);
+
+                // directly throw if exception class and interface class are in the same jar file.
+                String serviceFile = ReflectUtils.getCodeBase(invoker.getInterface());
+                String exceptionFile = ReflectUtils.getCodeBase(exception.getClass());
+                if (serviceFile == null || exceptionFile == null || serviceFile.equals(exceptionFile)) {
+                    return;
+                }
+                // directly throw if it's JDK exception
+                String className = exception.getClass().getName();
+                if (className.startsWith("java.") || className.startsWith("javax.")) {
+                    return;
+                }
+                //自定义异常处理
+                if (className.startsWith("com.sckw.core.exception")) {
+                    return;
+                }
+                // directly throw if it's dubbo exception
+                if (exception instanceof RpcException) {
+                    return;
+                }
+
+                // otherwise, wrap with RuntimeException and throw back to the client
+                appResponse.setException(new RuntimeException(StringUtils.toString(exception)));
+            } catch (Throwable e) {
+                logger.warn(CONFIG_FILTER_VALIDATION_EXCEPTION, "", "", "Fail to ExceptionFilter when called by " + RpcContext.getServiceContext().getRemoteHost() + ". service: " + invoker.getInterface().getName() + ", method: " + invocation.getMethodName() + ", exception: " + e.getClass().getName() + ": " + e.getMessage(), e);
+            }
+        }
+    }
+
+    @Override
+    public void onError(Throwable e, Invoker<?> invoker, Invocation invocation) {
+        logger.error(CONFIG_FILTER_VALIDATION_EXCEPTION, "", "", "Got unchecked and undeclared exception which called by " + RpcContext.getServiceContext().getRemoteHost() + ". service: " + invoker.getInterface().getName() + ", method: " + invocation.getMethodName() + ", exception: " + e.getClass().getName() + ": " + e.getMessage(), e);
+    }
+
+    // For test purpose
+    public void setLogger(ErrorTypeAwareLogger logger) {
+        this.logger = logger;
+    }
+}

+ 1 - 0
sckw-common/sckw-common-remote/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter

@@ -0,0 +1 @@
+dubboExceptionFilter=com.sckw.remote.filter.DubboExceptionFilter

+ 1 - 0
sckw-common/sckw-common-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -0,0 +1 @@
+com.sckw.remote.config.AllowClassList

+ 2 - 2
sckw-gateway/src/main/resources/bootstrap-dev.yml

@@ -5,7 +5,7 @@ spring:
         # 服务注册地址
         server-addr: 10.10.10.230:8848
         # 命名空间
-        namespace: sckw_zk
+        namespace: sckw-service-platform-dev
         # 共享配置
         group: sckw-service-platform
       config:
@@ -14,7 +14,7 @@ spring:
         # 配置文件格式
         file-extension: yaml
         # 命名空间
-        namespace: sckw_zk
+        namespace: sckw-service-platform-dev
         # 共享配置
         group: sckw-service-platform
 

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

@@ -26,6 +26,7 @@
         <module>sckw-product-api</module>
         <module>sckw-order-api</module>
         <module>sckw-fleet-api</module>
+        <module>sckw-payment-api</module>
     </modules>
 
     <properties>

+ 35 - 0
sckw-modules-api/sckw-contract-api/pom.xml

@@ -0,0 +1,35 @@
+<?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-contract-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>

+ 23 - 0
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/RemoteContractService.java

@@ -0,0 +1,23 @@
+package com.sckw.contract.api;
+
+import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author czh
+ * @desc 合同远程接口
+ * @date 2023/7/19
+ */
+public interface RemoteContractService {
+
+    /**
+     * @param contractId 合同id集合
+     * @return Map<Long, ContractCommonInfoResDto>
+     * @desc: 查合同基本信息
+     * @author: czh
+     * @date: 2023/7/20
+     */
+    Map<Long, ContractCommonInfoResDto> queryContractBaseInfo(List<Long> contractId);
+}

+ 50 - 0
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/dto/res/ContractCommonInfoResDto.java

@@ -0,0 +1,50 @@
+package com.sckw.contract.api.model.dto.res;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author czh
+ * @desc 合同公共信息
+ * @date 2023/7/19
+ */
+@Data
+public class ContractCommonInfoResDto implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 2656035411576510101L;
+
+    /**
+     * 合同id
+     */
+    private Long id;
+
+    /**
+     * 合同名
+     */
+    private String contactName;
+
+    /**
+     * 合同号
+     */
+    private String contractCode;
+
+    /**
+     * 签约方式
+     */
+    private Integer signingWay;
+
+    /**
+     * 签约方式名
+     */
+    private String signingWayName;
+
+    /**
+     * 企业id
+     */
+    private List<EntInfo> entInfoList;
+
+}

+ 28 - 0
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/dto/res/EntInfo.java

@@ -0,0 +1,28 @@
+package com.sckw.contract.api.model.dto.res;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author czh
+ * @desc 企业信息
+ * @date 2023/7/20
+ */
+@Data
+public class EntInfo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -3726894338861128957L;
+
+    /**
+     * 企业名
+     */
+    private String entName;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+}

+ 1 - 0
sckw-modules-api/sckw-contract-api/src/main/resources/application.properties

@@ -0,0 +1 @@
+

+ 12 - 1
sckw-modules-api/sckw-modules-bom/pom.xml

@@ -43,7 +43,18 @@
             <dependency>
                 <groupId>com.sckw</groupId>
                 <artifactId>sckw-transport-api</artifactId>
-                <version>1.0.0</version>
+                <version>${project.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>com.sckw</groupId>
+                <artifactId>sckw-order-api</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.sckw</groupId>
+                <artifactId>sckw-payment-api</artifactId>
+                <version>${project.version}</version>
             </dependency>
         </dependencies>
     </dependencyManagement>

+ 51 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java

@@ -0,0 +1,51 @@
+package com.sckw.order.api.dubbo;
+
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.order.api.model.ContractSignCompletedParam;
+import com.sckw.order.api.model.OrderDetailRes;
+import com.sckw.order.api.model.UpdateOrderAmountParam;
+import com.sckw.order.api.model.UpdateOrderStatusParam;
+
+/**
+ * @desc: 贸易订单信息相关dubbo
+ * @author: yzc
+ * @date: 2023-07-18 18:18
+ */
+public interface TradeOrderInfoService {
+
+    /**
+     * @desc: 获取订单详情
+     * @author: yzc
+     * @date: 2023-07-18 18:25
+     * @Param tOrderId:
+     * @return: com.sckw.order.api.model.OrderDetailRes
+     */
+    OrderDetailRes getOrderDetailById(Long tOrderId);
+
+    /**
+     * @desc: 更新订单状态
+     * @author: yzc
+     * @date: 2023-07-18 18:31
+     * @Param param:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    HttpResult updateOrderStatus(UpdateOrderStatusParam param);
+
+    /**
+     * @desc: 更新订单委托量、已履约量
+     * @author: yzc
+     * @date: 2023-07-18 18:34
+     * @Param param:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    HttpResult updateOrderAmount(UpdateOrderAmountParam param);
+
+    /**
+     * @desc: 合同签约完成
+     * @author: yzc
+     * @date: 2023-07-20 11:42
+     * @Param param:
+     * @return: void
+     */
+    void contractSignCompleted(ContractSignCompletedParam param);
+}

+ 87 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/AddressInfoDetail.java

@@ -0,0 +1,87 @@
+package com.sckw.order.api.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @desc: 地址信息详情
+ * @author: yzc
+ * @date: 2023-07-18 11:10
+ */
+@Getter
+@Setter
+@ToString
+public class AddressInfoDetail implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -7229803070964346948L;
+    /**
+     * 地址类型label
+     */
+    private String addressTypeLabel;
+
+    /**
+     * 地址类型label
+     */
+    private String typeLabel;
+
+
+    /**
+     * 地址类型(1装货地址、2卸货地址)
+     */
+    private String addressType;
+
+    /**
+     * 地址名称
+     */
+    private String name;
+
+    /**
+     * 地址类型
+     */
+    private String type;
+
+    /**
+     * 联系人姓名
+     */
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 所在地区
+     */
+    private Integer cityCode;
+
+    /**
+     * 所属区域名称
+     */
+    private String cityName;
+
+    /**
+     * 详细地址
+     */
+    private String detailAddress;
+
+    /**
+     * 纬度
+     */
+    private String lat;
+
+    /**
+     * 经度
+     */
+    private String lng;
+
+    /**
+     * 电子围栏
+     */
+    private String fence;
+}

+ 46 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/ContractInfo.java

@@ -0,0 +1,46 @@
+package com.sckw.order.api.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @desc: 合同信息
+ * @author: yzc
+ * @date: 2023-07-12 11:00
+ */
+@Getter
+@Setter
+@ToString
+public class ContractInfo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -4803861633092427860L;
+    /**
+     * 合同id
+     */
+    private Long contractId;
+
+    /**
+     * 合同编号
+     */
+    private String contractNo;
+
+    /**
+     * 合同名称
+     */
+    private String contractName;
+
+    /**
+     * 合同签约方式
+     */
+    private String contractSigningWay;
+
+    /**
+     * 合同状态
+     */
+    private String contractStatus;
+}

+ 37 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/ContractSignCompletedParam.java

@@ -0,0 +1,37 @@
+package com.sckw.order.api.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @desc: 合同完成签约请求参数
+ * @author: yzc
+ * @date: 2023-07-20 11:53
+ */
+@Getter
+@Setter
+@ToString
+public class ContractSignCompletedParam implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -5928367556124042097L;
+
+    /**
+     * 合同id
+     */
+    private Long contractId;
+
+
+    /**
+     * 更新用户id
+     */
+    private Long updateBy;
+
+    /**
+     * 更新者姓名
+     */
+    private String updateByName;
+}

+ 99 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/GoodsInfoDetailRes.java

@@ -0,0 +1,99 @@
+package com.sckw.order.api.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @desc: 商品信息详情响应
+ * @author: yzc
+ * @date: 2023-07-18 11:09
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class GoodsInfoDetailRes implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -6117752651158804867L;
+    /**
+     * 商品类型label
+     */
+    private String goodsTypeLabel;
+
+    /**
+     * 商品单位label
+     */
+    private String goodsUnitLabel;
+
+    /**
+     * 商品发票税率label
+     */
+    private String goodsTaxRateLabel;
+
+    /**
+     * 商品id
+     */
+    private Long goodsId;
+
+    /**
+     * 商品编号
+     */
+    private String goodsCode;
+
+    /**
+     * 商品名称
+     */
+    private String goodsName;
+
+    /**
+     * 商品类型
+     */
+    private String goodsType;
+
+    /**
+     * 商品发票税率(%)
+     */
+    private BigDecimal goodsTaxRate;
+
+    /**
+     * 商品尺寸大小
+     */
+    private String goodsSpec;
+
+    /**
+     * 单位(吨、方、箱、件)
+     */
+    private String unit;
+    /**
+     * 价格段id
+     */
+    private Long priceRangeId;
+
+    /**
+     * 订单成交单价
+     */
+    private BigDecimal unitPrice;
+
+    /**
+     * 商品skuId
+     */
+    private Long skuId;
+
+    /**
+     * 收款单位id
+     */
+    private Long collectionUnitId;
+
+    /**
+     * 收款单位名称
+     */
+    private String collectionUnit;
+
+}

+ 156 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/OrderDetailRes.java

@@ -0,0 +1,156 @@
+package com.sckw.order.api.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * @desc: 订单详情响应参数
+ * @author: yzc
+ * @date: 2023-07-07 15:35
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class OrderDetailRes implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -2951319997472302360L;
+    /**
+     * 订单id
+     */
+    private Long id;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 企业名称
+     */
+    private String firmName;
+
+    /**
+     * 订单编号
+     */
+    private String tOrderNo;
+
+    /**
+     * 订单总量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 订单金额
+     */
+    private BigDecimal price;
+
+    /**
+     * 交易方式(预付款、货到付款)
+     */
+    private String trading;
+
+    /**
+     * 交易方式label
+     */
+    private String tradingLabel;
+
+    /**
+     * 提货方式(采方自提、供应配送)
+     */
+    private String pickupType;
+
+    /**
+     * 提货方式label
+     */
+    private String pickupTypeLabel;
+
+    /**
+     * 交付类型(签发交付、签收交付)
+     */
+    private String deliveryType;
+
+    /**
+     * 交付类型label
+     */
+    private String deliveryTypeLabel;
+
+    /**
+     * 开始日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate startTime;
+
+    /**
+     * 结束日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate endTime;
+
+    /**
+     * 已委托量
+     */
+    private BigDecimal entrustAmount;
+
+    /**
+     * 实际交付量
+     */
+    private BigDecimal actualAmount;
+
+    /**
+     * 订单创建来源类型(采购下单/销售代客下单)
+     */
+    private String source;
+
+    /**
+     * 订单创建来源label
+     */
+    private String sourceLabel;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 订单状态
+     */
+    private Integer status;
+
+    /**
+     * 订单状态label
+     */
+    private String statusLabel;
+
+    /**
+     * 商品信息
+     */
+    private GoodsInfoDetailRes goodsInfo;
+
+
+    /**
+     * 单位信息
+     */
+    private List<UnitInfoDetailRes> unitInfo;
+
+    /**
+     * 地址信息
+     */
+    private List<AddressInfoDetail> addressInfo;
+
+    /**
+     * 合同信息
+     */
+    private ContractInfo contractInfo;
+
+}

+ 52 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UnitInfoDetailRes.java

@@ -0,0 +1,52 @@
+package com.sckw.order.api.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @desc: 单位信息详情
+ * @author: yzc
+ * @date: 2023-07-18 11:10
+ */
+@Getter
+@Setter
+@ToString
+public class UnitInfoDetailRes implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 6017070445159402080L;
+    /**
+     * 单位类型label
+     */
+    private String unitTypeLabel;
+
+    /**
+     * 单位类型(1销售单位、2采购单位)
+     */
+    private String unitType;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 企业名称
+     */
+    private String firmName;
+
+    /**
+     * 联系人姓名
+     */
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+}

+ 49 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UpdateOrderAmountParam.java

@@ -0,0 +1,49 @@
+package com.sckw.order.api.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @desc: 更新订单委托量、已履约量
+ * @author: yzc
+ * @date: 2023-07-18 18:33
+ */
+@Getter
+@Setter
+@ToString
+public class UpdateOrderAmountParam implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 6845967309303678160L;
+
+    /**
+     * 订单id
+     */
+    private Long tOrderId;
+
+    /**
+     * 已委托量
+     */
+    private BigDecimal entrustAmount;
+
+    /**
+     * 实际交付量
+     */
+    private BigDecimal actualAmount;
+
+    /**
+     * 更新用户id
+     */
+    private Long updateBy;
+
+    /**
+     * 更新者姓名
+     */
+    private String updateByName;
+
+}

+ 42 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UpdateOrderStatusParam.java

@@ -0,0 +1,42 @@
+package com.sckw.order.api.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @desc: 更新订单状态参数
+ * @author: yzc
+ * @date: 2023-07-20 8:50
+ */
+@Getter
+@Setter
+@ToString
+public class UpdateOrderStatusParam implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 5310063702831276889L;
+
+    /**
+     * 订单id
+     */
+    private Long tOrderId;
+
+    /**
+     * 状态
+     */
+    private Integer status;
+
+    /**
+     * 更新用户id
+     */
+    private Long updateBy;
+
+    /**
+     * 更新者姓名
+     */
+    private String updateByName;
+
+}

+ 22 - 0
sckw-modules-api/sckw-payment-api/pom.xml

@@ -0,0 +1,22 @@
+<?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">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.sckw</groupId>
+        <artifactId>sckw-modules-api</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>sckw-payment-api</artifactId>
+    <description>结算api</description>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+
+</project>

+ 15 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/dubbo/PayCenterDubboService.java

@@ -0,0 +1,15 @@
+package com.sckw.payment.api.dubbo;
+
+import com.sckw.payment.api.model.constant.ChannelEnum;
+import com.sckw.payment.api.model.dto.MemberDetail;
+
+public interface PayCenterDubboService {
+    /**
+     * 获取会员详情
+     *
+     * @param uid     中台用户id
+     * @param channel 渠道
+     * @return
+     */
+    MemberDetail memberDetail(String uid, ChannelEnum channel);
+}

+ 14 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/constant/ChannelEnum.java

@@ -0,0 +1,14 @@
+package com.sckw.payment.api.model.constant;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum ChannelEnum {
+    HF("huifu", "汇付渠道"),
+    XS("newpay", "新生渠道"),
+    ZX("citic", "中信渠道");
+    private String channel;
+    private String desc;
+}

+ 16 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/MemberDetail.java

@@ -0,0 +1,16 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 会员详情
+ */
+@Getter
+@Setter
+public class MemberDetail {
+    private Boolean register;
+    private String uid;
+    private String channel;
+    private Integer status;
+}

+ 14 - 2
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/dubbo/GoodsInfoService.java

@@ -1,9 +1,12 @@
 package com.sckw.product.api.dubbo;
 
+import com.sckw.core.web.response.HttpResult;
 import com.sckw.product.api.model.GoodsDetail;
 import com.sckw.product.api.model.KwpGoods;
 
 import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @desc: 商品相关dubbo
@@ -30,13 +33,22 @@ public interface GoodsInfoService {
      */
     KwpGoods getGoodsById(Long id);
 
+    /**
+     * @desc: 根据商品id获取商品基本信息
+     * @author: yzc
+     * @date: 2023-07-20 10:57
+     * @Param ids:
+     * @return: java.util.Map<java.lang.Long,com.sckw.product.api.model.KwpGoods>
+     */
+    Map<Long, KwpGoods> getGoodsByIds(List<Long> ids);
+
     /**
      * @desc: 更新库存
      * @author: yzc
      * @date: 2023-07-13 14:33
      * @Param id:
      * @Param amount:
-     * @return: java.lang.Boolean
+     * @return: com.sckw.core.web.response.HttpResult
      */
-    void updateGoodsAmount(Long id, BigDecimal amount);
+    HttpResult updateGoodsAmount(Long id, BigDecimal amount);
 }

+ 6 - 1
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/AddressInfoDetail.java

@@ -4,6 +4,9 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+import java.io.Serial;
+import java.io.Serializable;
+
 /**
  * @desc: 地址详情响应
  * @author: yzc
@@ -12,8 +15,10 @@ import lombok.ToString;
 @Getter
 @Setter
 @ToString
-public class AddressInfoDetail {
+public class AddressInfoDetail implements Serializable {
 
+    @Serial
+    private static final long serialVersionUID = 5749966288335891456L;
     private Long id;
 
     /**

+ 7 - 1
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsAttributesDetail.java

@@ -4,6 +4,9 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+import java.io.Serial;
+import java.io.Serializable;
+
 /**
  * @desc: 添加商品属性
  * @author: yzc
@@ -12,7 +15,10 @@ import lombok.ToString;
 @Getter
 @Setter
 @ToString
-public class GoodsAttributesDetail {
+public class GoodsAttributesDetail implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -1280589884405792222L;
 
     private Long id;
 

+ 5 - 1
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsDetail.java

@@ -6,6 +6,8 @@ import lombok.Setter;
 import lombok.ToString;
 import lombok.experimental.Accessors;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
@@ -19,8 +21,10 @@ import java.util.List;
 @Setter
 @ToString
 @Accessors(chain = true)
-public class GoodsDetail {
+public class GoodsDetail implements Serializable {
 
+    @Serial
+    private static final long serialVersionUID = 8591441505622156556L;
     /**
      * 商品id
      */

+ 7 - 1
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsImagesDetail.java

@@ -4,6 +4,9 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+import java.io.Serial;
+import java.io.Serializable;
+
 /**
  * @desc: 商品图片
  * @author: yzc
@@ -12,8 +15,11 @@ import lombok.ToString;
 @Getter
 @Setter
 @ToString
-public class GoodsImagesDetail {
+public class GoodsImagesDetail implements Serializable {
+
 
+    @Serial
+    private static final long serialVersionUID = 5330167246596919833L;
 
     private Long id;
 

+ 6 - 1
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsPriceRangesDetail.java

@@ -4,6 +4,8 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.math.BigDecimal;
 
 /**
@@ -14,7 +16,10 @@ import java.math.BigDecimal;
 @Getter
 @Setter
 @ToString
-public class GoodsPriceRangesDetail {
+public class GoodsPriceRangesDetail implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 2081801564635066851L;
 
     private Long id;
 

+ 8 - 3
sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/KwpGoods.java

@@ -8,6 +8,8 @@ import lombok.Setter;
 import lombok.ToString;
 import lombok.experimental.Accessors;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
 
@@ -21,7 +23,10 @@ import java.util.Date;
 @ToString
 @Accessors(chain = true)
 @TableName("kwp_goods")
-public class KwpGoods extends BaseModel {
+public class KwpGoods extends BaseModel implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -1228344082225456066L;
 
     /**
      * 企业id
@@ -49,9 +54,9 @@ public class KwpGoods extends BaseModel {
     private String goodsType;
 
     /**
-     * 省份code
+     * 区域ode
      */
-    private Integer provinceCode;
+    private Integer areaCode;
 
     /**
      * 库存数量

+ 1 - 1
sckw-modules-api/sckw-system-api/src/main/java/com/sckw/system/api/model/dto/res/KwsEnterpriseResDto.java

@@ -130,7 +130,7 @@ public class KwsEnterpriseResDto implements Serializable {
     /**
      * 企业地址-----区域表id---实际用途?
      */
-    private Integer cityName;
+    private String cityName;
 
     /**
      * 企业详细地址

+ 34 - 2
sckw-modules/sckw-contract/pom.xml

@@ -28,7 +28,10 @@
             <groupId>com.sckw</groupId>
             <artifactId>sckw-common-core</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-common-datasource</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.sckw</groupId>
             <artifactId>sckw-common-remote</artifactId>
@@ -53,7 +56,36 @@
             <groupId>com.sckw</groupId>
             <artifactId>sckw-common-excel</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-product-api</artifactId>
+            <version>1.0.0</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
-
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <excludes>
+                        <exclude>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </exclude>
+                    </excludes>
+                    <mainClass>com.sckw.contract.ContractApplication</mainClass>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>

+ 11 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcCheckedController.java

@@ -157,6 +157,17 @@ public class KwcCheckedController {
         return HttpResult.ok(kwcContractLogisticsService.queryCurrentEntCheckedContractList());
     }
 
+    /**
+     * @return HttpResult
+     * @desc: 分组查询
+     * @author: czh
+     * @date: 2023/7/18
+     */
+    @PostMapping("findListGroup")
+    public HttpResult findListGroup(@RequestBody QueryListReqVo reqVo) throws SystemException {
+        reqVo.setEntType(EntTypeEnum.LOGISTICS3.getCode());
+        return HttpResult.ok(kwcContractLogisticsService.findListGroup(reqVo));
+    }
 
 
 }

+ 157 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcContractSaleController.java

@@ -0,0 +1,157 @@
+package com.sckw.contract.controller;
+
+import com.sckw.contract.model.vo.req.*;
+import com.sckw.contract.service.KwcContractTradeService;
+import com.sckw.core.exception.SystemException;
+import com.sckw.core.model.enums.EntTypeEnum;
+import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.response.HttpResult;
+import jakarta.validation.Valid;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * @author czh
+ * @desc 销售合同
+ * @date 2023/7/13
+ */
+@RestController
+@RequestMapping("kwcSale")
+public class KwcContractSaleController {
+
+    @Autowired
+    private KwcContractTradeService kwcContractTradeService;
+
+    /**
+     * @desc: 分页查询
+     * @param: reqVo 分页入参
+     * @author: sky
+     * @date 2023/7/17
+     * @return HttpResult
+     */
+    @RequestMapping("queryListByPage")
+    public HttpResult queryListByPage(@Valid @RequestBody QueryListReqVo reqVo) throws SystemException {
+        reqVo.setEntType(EntTypeEnum.SUPPLIER.getCode());
+        return HttpResult.ok(kwcContractTradeService.queryListByPage(reqVo));
+    }
+
+    /**
+     * @param reqVo 新增入参
+     * @return HttpResult
+     * @desc: 新增贸易合同
+     * @author: sky
+     * @date: 2023/7/18
+     */
+    @RequestMapping("add")
+    public HttpResult addTradeContract(@Valid @RequestBody ContractTradeReqVo reqVo) throws SystemException {
+        kwcContractTradeService.addTradeContract(reqVo);
+        return HttpResult.ok(HttpStatus.MSG_003);
+    }
+
+    /**
+     * @param reqVo 补充入参
+     * @desc: 补充合同
+     * @author: czh
+     * @date: 2023/7/14
+     */
+    @PostMapping("supplement")
+    public HttpResult supplement(@Valid @RequestBody ContractTradeReqVo reqVo) throws SystemException {
+        kwcContractTradeService.supplement(reqVo);
+        return HttpResult.ok(HttpStatus.MSG_003);
+    }
+
+    /**
+     * @desc: 合同详情
+     * @param reqVo id
+     * @author: czh
+     * @date 2023/7/16
+     * @return HttpResult
+     */
+    @PostMapping("detail")
+    public HttpResult detail(@Valid @RequestBody IdReqVo reqVo) throws SystemException {
+        return HttpResult.ok(kwcContractTradeService.detail(reqVo.getId()));
+    }
+
+
+    /**
+     * @desc: 发起签约
+     * @param reqVo id
+     * @author: czh
+     * @date 2023/7/16
+     * @return HttpResult
+     */
+    @PostMapping("submit")
+    public HttpResult submit(@Valid @RequestBody ContractTradeReqVo reqVo) throws SystemException {
+        kwcContractTradeService.submit(reqVo);
+        return HttpResult.ok();
+    }
+
+    /**
+     * @desc: 修改草稿
+     * @param reqVo id
+     * @author: czh
+     * @date 2023/7/16
+     * @return HttpResult
+     */
+    @PostMapping("update")
+    public HttpResult update(@Valid @RequestBody ContractTradeReqVo reqVo) throws SystemException {
+        kwcContractTradeService.update(reqVo);
+        return HttpResult.ok();
+    }
+
+
+    /**
+     * @desc: 手动完结
+     * @param reqVo ids
+     * @author: czh
+     * @date 2023/7/16
+     * @return HttpResult
+     */
+    @PostMapping("complete")
+    public HttpResult complete(@Valid @RequestBody IdsReqVo reqVo) throws SystemException {
+        kwcContractTradeService.complete(reqVo.getIds());
+        return HttpResult.ok();
+    }
+
+
+    /**
+     * @desc: 删除
+     * @param reqVo ids
+     * @author: czh
+     * @date 2023/7/16
+     * @return HttpResult
+     */
+    @PostMapping("delete")
+    public HttpResult delete(@Valid @RequestBody IdsReqVo reqVo) throws SystemException {
+        kwcContractTradeService.delete(reqVo.getIds());
+        return HttpResult.ok();
+    }
+
+
+    /**
+     * @desc: 导出
+     * @param reqVo 查询入参
+     * @author: czh
+     * @date 2023/7/17
+     */
+    @PostMapping("export")
+    public void export(@Valid @RequestBody QueryListReqVo reqVo) throws SystemException {
+        reqVo.setEntType(EntTypeEnum.SUPPLIER.getCode());
+        kwcContractTradeService.export(reqVo);
+    }
+
+    /**
+     * @return HttpResult
+     * @desc: 查询当前企业的销售合同
+     * @author: czh
+     * @date: 2023/7/18
+     */
+    @PostMapping("queryCurrentEntSaleContractList")
+    public HttpResult queryCurrentEntSaleContractList() throws SystemException {
+        return HttpResult.ok(kwcContractTradeService.queryCurrentEntSaleContractList());
+    }
+}

+ 0 - 15
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcContractTradeController.java

@@ -1,15 +0,0 @@
-package com.sckw.contract.controller;
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author czh
- * @desc 销售合同
- * @date 2023/7/13
- */
-@RestController
-@RequestMapping("kwcContractTrade")
-public class KwcContractTradeController {
-    
-}

+ 66 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/controller/KwcPurchaseController.java

@@ -0,0 +1,66 @@
+package com.sckw.contract.controller;
+
+import com.sckw.contract.model.vo.req.IdReqVo;
+import com.sckw.contract.model.vo.req.QueryListReqVo;
+import com.sckw.contract.service.KwcContractTradeService;
+import com.sckw.core.exception.SystemException;
+import com.sckw.core.model.enums.EntTypeEnum;
+import com.sckw.core.web.response.HttpResult;
+import jakarta.validation.Valid;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author czh
+ * @desc 采购合同
+ * @date 2023/7/13
+ */
+@RestController
+@RequestMapping("kwcPurchase")
+public class KwcPurchaseController {
+
+    @Autowired
+    private KwcContractTradeService kwcContractTradeService;
+
+    /**
+     * @desc: 分页查询
+     * @param: reqVo 分页入参
+     * @author: sky
+     * @date 2023/7/17
+     * @return HttpResult
+     */
+    @RequestMapping("queryListByPage")
+    public HttpResult queryListByPage(@Valid @RequestBody QueryListReqVo reqVo) throws SystemException {
+        reqVo.setEntType(EntTypeEnum.PURCHASER.getCode());
+        return HttpResult.ok(kwcContractTradeService.queryListByPage(reqVo));
+    }
+
+    /**
+     * @desc: 合同详情
+     * @param reqVo id
+     * @author: czh
+     * @date 2023/7/16
+     * @return HttpResult
+     */
+    @PostMapping("detail")
+    public HttpResult detail(@Valid @RequestBody IdReqVo reqVo) throws SystemException {
+        return HttpResult.ok(kwcContractTradeService.detail(reqVo.getId()));
+    }
+
+
+    /**
+     * @desc: 导出
+     * @param reqVo 查询入参
+     * @author: czh
+     * @date 2023/7/17
+     */
+    @PostMapping("export")
+    public void export(@Valid @RequestBody QueryListReqVo reqVo) throws SystemException {
+        reqVo.setEntType(EntTypeEnum.PURCHASER.getCode());
+        kwcContractTradeService.export(reqVo);
+    }
+
+}

+ 3 - 4
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dao/KwcContractLogisticsMapper.java

@@ -2,9 +2,8 @@ package com.sckw.contract.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.contract.model.dto.req.QueryListReqDto;
+import com.sckw.contract.model.dto.res.QueryListResDto;
 import com.sckw.contract.model.entity.KwcContractLogistics;
-import com.sckw.contract.model.vo.req.QueryListReqVo;
-import com.sckw.contract.model.vo.res.QueryListResVo;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
@@ -23,9 +22,9 @@ public interface KwcContractLogisticsMapper extends BaseMapper<KwcContractLogist
      * @param: reqVo
      * @author: czh
      * @date 2023/7/17
-     * @return QueryListResVo
+     * @return QueryListResDto
      */
-    List<QueryListResVo> queryList(QueryListReqDto reqVo);
+    List<QueryListResDto> queryList(QueryListReqDto reqVo);
 }
 
 

+ 14 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dao/KwcContractTradeMapper.java

@@ -1,9 +1,14 @@
 package com.sckw.contract.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.contract.model.dto.req.QueryListReqDto;
+import com.sckw.contract.model.dto.res.QueryListResDto;
 import com.sckw.contract.model.entity.KwcContractTrade;
+import com.sckw.contract.model.vo.req.QueryListReqVo;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
 * @author PC
 * @description 针对表【kwc_contract_trade(交易合同(采购合同/销售合同))】的数据库操作Mapper
@@ -13,6 +18,15 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface KwcContractTradeMapper extends BaseMapper<KwcContractTrade> {
 
+
+    /**
+     * @desc: 查询
+     * @param: reqVo
+     * @author: sky
+     * @date 2023/7/17
+     * @return QueryListResVo
+     */
+    List<QueryListResDto> queryList(QueryListReqDto reqVo);
 }
 
 

+ 95 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dubbo/RemoteContractServiceImpl.java

@@ -0,0 +1,95 @@
+package com.sckw.contract.dubbo;
+import com.google.common.collect.Lists;
+
+import com.sckw.contract.api.RemoteContractService;
+import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
+import com.sckw.contract.api.model.dto.res.EntInfo;
+import com.sckw.contract.dao.KwcContractLogisticsMapper;
+import com.sckw.contract.dao.KwcContractLogisticsUnitMapper;
+import com.sckw.contract.dao.KwcContractTradeMapper;
+import com.sckw.contract.model.entity.KwcContractLogistics;
+import com.sckw.contract.model.entity.KwcContractLogisticsUnit;
+import com.sckw.contract.model.entity.KwcContractTrade;
+import com.sckw.contract.service.KwcContractLogisticsUnitService;
+import com.sckw.core.model.enums.SigningWayEnum;
+import com.sckw.core.utils.CollectionUtils;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+@DubboService(group = "design", version = "2.0.0")
+@Service
+public class RemoteContractServiceImpl implements RemoteContractService {
+
+    @Autowired
+    private KwcContractLogisticsMapper kwcContractLogisticsMapper;
+
+    @Autowired
+    private KwcContractLogisticsUnitService kwcContractLogisticsUnitService;
+
+    @Autowired
+    private KwcContractTradeMapper kwcContractTradeMapper;
+
+    @Override
+    public Map<Long, ContractCommonInfoResDto> queryContractBaseInfo(List<Long> contractIds) {
+        HashMap<Long, ContractCommonInfoResDto> map = new HashMap<>();
+        for (Long contractId : contractIds) {
+            KwcContractLogistics kwcContractLogistics = kwcContractLogisticsMapper.selectById(contractId);
+            if (Objects.nonNull(kwcContractLogistics)) {
+                map.put(contractId, fillContractLogistics(kwcContractLogistics));
+                continue;
+            }
+
+            KwcContractTrade kwcContractTrade = kwcContractTradeMapper.selectById(contractId);
+            if (Objects.nonNull(kwcContractTrade)) {
+                map.put(contractId, fillContractTrade(kwcContractTrade));
+            }
+        }
+        return map;
+    }
+
+    private ContractCommonInfoResDto fillContractLogistics(KwcContractLogistics kwcContractLogistics) {
+        ContractCommonInfoResDto contractCommonInfoResDto = new ContractCommonInfoResDto();
+        List<EntInfo> entList = new ArrayList<>();
+        contractCommonInfoResDto.setId(kwcContractLogistics.getId());
+        contractCommonInfoResDto.setContactName(kwcContractLogistics.getName());
+        contractCommonInfoResDto.setContractCode(kwcContractLogistics.getContractNo());
+        contractCommonInfoResDto.setSigningWay(kwcContractLogistics.getSigningWay());
+        contractCommonInfoResDto.setSigningWayName(SigningWayEnum.getName(kwcContractLogistics.getSigningWay()).getName());
+        contractCommonInfoResDto.setEntInfoList(entList);
+        List<KwcContractLogisticsUnit> kwcContractLogisticsUnits = kwcContractLogisticsUnitService.queryByContractId(kwcContractLogistics.getId());
+        if (CollectionUtils.isNotEmpty(kwcContractLogisticsUnits)) {
+            for (KwcContractLogisticsUnit kwcContractLogisticsUnit : kwcContractLogisticsUnits) {
+                EntInfo entInfo = new EntInfo();
+                entInfo.setEntId(kwcContractLogisticsUnit.getEntId());
+                entInfo.setEntName(kwcContractLogisticsUnit.getFirmName());
+                entList.add(entInfo);
+            }
+        }
+        return contractCommonInfoResDto;
+    }
+
+
+    private ContractCommonInfoResDto fillContractTrade(KwcContractTrade kwcContractTrade) {
+        List<EntInfo> entList = new ArrayList<>();
+        ContractCommonInfoResDto contractCommonInfoResDto = new ContractCommonInfoResDto();
+        contractCommonInfoResDto.setId(kwcContractTrade.getId());
+        contractCommonInfoResDto.setContactName(kwcContractTrade.getName());
+        contractCommonInfoResDto.setContractCode(kwcContractTrade.getContractNo());
+        contractCommonInfoResDto.setSigningWay(kwcContractTrade.getSigningWay());
+        contractCommonInfoResDto.setSigningWayName(SigningWayEnum.getName(kwcContractTrade.getSigningWay()).getName());
+        contractCommonInfoResDto.setEntInfoList(entList);
+        List<KwcContractLogisticsUnit> kwcContractLogisticsUnits = kwcContractLogisticsUnitService.queryByContractId(kwcContractTrade.getId());
+        if (CollectionUtils.isNotEmpty(kwcContractLogisticsUnits)) {
+            for (KwcContractLogisticsUnit kwcContractLogisticsUnit : kwcContractLogisticsUnits) {
+                EntInfo entInfo = new EntInfo();
+                entInfo.setEntId(kwcContractLogisticsUnit.getEntId());
+                entInfo.setEntName(kwcContractLogisticsUnit.getFirmName());
+                entList.add(entInfo);
+            }
+        }
+        return contractCommonInfoResDto;
+    }
+}

+ 116 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/dto/res/QueryListResDto.java

@@ -0,0 +1,116 @@
+package com.sckw.contract.model.dto.res;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author czh
+ * @desc 查询返参
+ * @date 2023/7/18
+ */
+@Data
+public class QueryListResDto {
+
+    /**
+     * 合同总量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 计费方式(按装货量、按卸货量、按车次)
+     */
+    private Integer charging;
+
+    /**
+     * 计费方式(按装货量、按卸货量、按车次)
+     */
+    private Integer trading;
+
+    /**
+     * 合同名
+     */
+    private String contactName;
+
+    /**
+     * 合同号
+     */
+    private String contractNo;
+
+    /**
+     * 发起人id
+     */
+    private Long initiateBy;
+
+    /**
+     * 发起时间
+     */
+    private Date initiateTime;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 起始时间
+     */
+    private Date startTime;
+
+    /**
+     * 结束时间
+     */
+    private Date endTime;
+
+    /**
+     * 合同id
+     */
+    private Long id;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 签约方式
+     */
+    private String signingWay;
+
+    /**
+     * 签约时间
+     */
+    private Date signTime;
+
+    /**
+     * 合同状态
+     */
+    private Integer status;
+
+    /**
+     * 单位类型(3托运商,4承运商)
+     */
+    private Integer unitType;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 企业名
+     */
+    private String entName;
+
+    /**
+     * 对方企业id
+     */
+    private Long targetEntId;
+
+    /**
+     * 对方企业名
+     */
+    private String targetEntName;
+
+}

+ 3 - 3
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractLogistics.java

@@ -38,17 +38,17 @@ public class KwcContractLogistics implements Serializable {
     /**
      * 签约方式
      */
-    private String signingWay;
+    private Integer signingWay;
 
     /**
      * 计费方式(1按装货量、2按卸货量、3按车次)
      */
-    private Long charging;
+    private Integer charging;
 
     /**
      * 交易方式(1预付款、2货到付款)
      */
-    private Long trading;
+    private Integer trading;
 
     /**
      * 开始日期

+ 6 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractLogisticsGoods.java

@@ -46,10 +46,15 @@ public class KwcContractLogisticsGoods implements Serializable {
     private String unit;
 
     /**
-     * 
+     * 运价
      */
     private BigDecimal price;
 
+    /**
+     * 运价单位
+     */
+    private String priceUnit;
+
     /**
      * 履行量
      */

+ 2 - 2
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTrade.java

@@ -38,12 +38,12 @@ public class KwcContractTrade implements Serializable {
     /**
      * 签约方式(1线上签约、2线下签约)
      */
-    private Long signingWay;
+    private Integer signingWay;
 
     /**
      * 交易方式(1预付款、2货到付款)
      */
-    private Long trading;
+    private Integer trading;
 
     /**
      * 开始日期

+ 5 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTradeTrack.java

@@ -25,6 +25,11 @@ public class KwcContractTradeTrack implements Serializable {
      */
     private Long contractId;
 
+    /**
+     * 状态类型(1审批状态、2签约状态、3履约状态)
+     */
+    private Integer type;
+
     /**
      * 备注
      */

+ 5 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTradeUnit.java

@@ -89,4 +89,9 @@ public class KwcContractTradeUnit implements Serializable {
      */
     private Integer delFlag;
 
+    /**
+     * 签约电话
+     */
+    private String signPhone;
+
 }

+ 55 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/ContractTradeReqVo.java

@@ -0,0 +1,55 @@
+package com.sckw.contract.model.vo.req;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author czh
+ * @desc 贸易合同
+ * @date 2023/7/19
+ */
+@Data
+public class ContractTradeReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -3838851258036291498L;
+
+    /**
+     * 合同id 修改时必传
+     */
+    private Long id;
+
+    /**
+     * 父合同ID 补充合同
+     */
+    private Long pId;
+
+    /**
+     * 基础信息
+     */
+    @NotNull(message = "基础信息不能为空")
+    private TradeBaseInfoReqVo baseInfo;
+
+    /**
+     * 合同文件
+     */
+
+    @NotBlank(message = "合同文件不能为空")
+    private String contractFile;
+
+    /**
+     * 标的信息
+     */
+    @NotNull(message = "标的信息不能为空")
+    private List<TradeGoodsInfoReqVo> goodsInfo;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 1 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/LogisticsBaseInfoReqVo.java

@@ -35,7 +35,7 @@ public class LogisticsBaseInfoReqVo implements Serializable {
      * 计费方式(1按装货量、2按卸货量、3按车次)
      */
     @NotNull(message = "计费方式不能为空")
-    private String charging;
+    private Integer charging;
 
     /**
      * 托运单位id

+ 5 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/LogisticsGoodsInfoReqVo.java

@@ -39,6 +39,11 @@ public class LogisticsGoodsInfoReqVo implements Serializable {
      */
     private BigDecimal price;
 
+    /**
+     * 运价单位字典value
+     */
+    private String priceUnit;
+
     /**
      * 合理损耗
      */

+ 6 - 2
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/QueryListReqVo.java

@@ -6,8 +6,12 @@ import lombok.Data;
 import java.io.Serial;
 import java.io.Serializable;
 import java.util.Date;
-import java.util.List;
 
+/**
+ * @author czh
+ * @desc 查询入参
+ * @date 2023/7/13
+ */
 @Data
 public class QueryListReqVo extends PageRequest implements Serializable {
 
@@ -40,7 +44,7 @@ public class QueryListReqVo extends PageRequest implements Serializable {
     private Integer status;
 
     /**
-     * 合同单位类型 3托运  4承运
+     * 合同单位类型 1供应 2采购 3托运 4承运
      */
     private Integer entType;
 

+ 81 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/TradeBaseInfoReqVo.java

@@ -0,0 +1,81 @@
+package com.sckw.contract.model.vo.req;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author czh
+ * @desc 贸易合同基础信息
+ * @date 2023/7/19
+ */
+@Data
+public class TradeBaseInfoReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -5828478625710244673L;
+
+    /**
+     * 采购单位id
+     */
+    @NotNull(message = "采购单位不能为空")
+    private Long purchaseEntId;
+
+    /**
+     * 采购单位联系电话
+     */
+    @NotBlank(message = "采购单位联系电话不能为空")
+    private String purchasePhone;
+
+    /**
+     * 付款方式 1预付款、2货到付款
+     */
+    @NotNull(message = "付款方式不能为空")
+    private Integer trading;
+
+    /**
+     * 供应单位id
+     */
+    @NotNull(message = "供应单位不能为空")
+    private Long provideEntId;
+
+    /**
+     * 供应单位联系电话
+     */
+    @NotBlank(message = "供应单位联系电话不能为空")
+    private String providePhone;
+
+    /**
+     * 合同编号
+     */
+    @NotBlank(message = "合同编号不能为空")
+    private String contractCode;
+
+    /**
+     * 合同名称
+     */
+    @NotBlank(message = "合同名称不能为空")
+    private String contractName;
+
+    /**
+     * 终止时间
+     */
+    private Date endTime;
+
+    /**
+     * 签约方式(1线上签约、2线下签约)
+     */
+    @NotNull(message = "签约方式不能为空")
+    private Integer signingWay;
+
+    /**
+     * 生效时间
+     */
+    @NotNull(message = "生效时间不能为空")
+    private Date startTime;
+
+}

+ 41 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/req/TradeGoodsInfoReqVo.java

@@ -0,0 +1,41 @@
+package com.sckw.contract.model.vo.req;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author czh
+ * @desc 贸易标的信息
+ * @date 2023/7/19
+ */
+@Data
+public class TradeGoodsInfoReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -7003603561892852639L;
+
+    /**
+     * 商品id
+     */
+    @NotNull(message = "商品不能为空")
+    private Long goodsId;
+
+    /**
+     * 采购数量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+
+    /**
+     * 单位
+     */
+    private String unit;
+}

+ 45 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/ContractTradeDetailResVo.java

@@ -0,0 +1,45 @@
+package com.sckw.contract.model.vo.res;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author czh
+ * @desc 贸易合同详情返参
+ * @date 2023/7/13
+ */
+@Data
+public class ContractTradeDetailResVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 6017739590774002010L;
+
+    /**
+     * 基础信息
+     */
+    private TradeBaseInfoResVo baseInfo;
+
+    /**
+     * 合同文件
+     */
+    private List<String> contractFile;
+
+    /**
+     * 标的信息
+     */
+    private List<TradeGoodsInfoResVo> goodsInfo;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 补充合同
+     */
+    private List<ContractTradeDetailResVo> child;
+
+}

+ 34 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/FindListGroupResVo.java

@@ -0,0 +1,34 @@
+package com.sckw.contract.model.vo.res;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author czh
+ * @desc 分组查询返参
+ * @date 2023/7/17
+ */
+@Data
+public class FindListGroupResVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 7143305943655450894L;
+
+    /**
+     * 状态
+     */
+    private Integer status;
+
+    /**
+     * 状态名
+     */
+    private String statusName;
+
+    /**
+     * 数量
+     */
+    private Integer count;
+
+}

+ 5 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/LogisticsBaseInfoResVo.java

@@ -6,6 +6,11 @@ import java.io.Serial;
 import java.io.Serializable;
 import java.util.Date;
 
+/**
+ * @author czh
+ * @desc 物流合同基础信息
+ * @date 2023/7/13
+ */
 @Data
 public class LogisticsBaseInfoResVo implements Serializable {
 

+ 34 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/LogisticsGoodsInfoResVo.java

@@ -6,6 +6,11 @@ import java.io.Serial;
 import java.io.Serializable;
 import java.math.BigDecimal;
 
+/**
+ * @author czh
+ * @desc 物流合同标的信息
+ * @date 2023/7/13
+ */
 @Data
 public class LogisticsGoodsInfoResVo implements Serializable {
 
@@ -22,6 +27,11 @@ public class LogisticsGoodsInfoResVo implements Serializable {
      */
     private String unit;
 
+    /**
+     * 单位(运量为 X ,运价为 元/X)
+     */
+    private String unitName;
+
     /**
      * 运价
      */
@@ -32,6 +42,11 @@ public class LogisticsGoodsInfoResVo implements Serializable {
      */
     private String priceUnit;
 
+    /**
+     * 运价单位
+     */
+    private String priceUnitName;
+
     /**
      * 亏吨扣款
      */
@@ -42,6 +57,11 @@ public class LogisticsGoodsInfoResVo implements Serializable {
      */
     private String deficitUnit;
 
+    /**
+     * 亏吨扣款单位
+     */
+    private String deficitUnitName;
+
     /**
      * 商品
      */
@@ -57,5 +77,19 @@ public class LogisticsGoodsInfoResVo implements Serializable {
      */
     private String lossUnit;
 
+    /**
+     * 合理损耗单位
+     */
+    private String lossUnitName;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 商品id
+     */
+    private Long goodsId;
 
 }

+ 24 - 5
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/QueryListResVo.java

@@ -9,7 +9,11 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
 
-
+/**
+ * @author czh
+ * @desc 合同查询返参
+ * @date 2023/7/13
+ */
 @Data
 public class QueryListResVo implements Serializable {
 
@@ -26,15 +30,30 @@ public class QueryListResVo implements Serializable {
      */
     private String carrierEntName;
 
+    /**
+     * 托运单位名
+     */
+    private String checkedEntName;
+
+    /**
+     * 采购单位名
+     */
+    private String purchaseEntName;
+
+    /**
+     * 供应单位名
+     */
+    private String provideEntName;
+
     /**
      * 计费方式中文名
      */
     private String chargingName;
 
     /**
-     * 托运单位名
+     * 付款方式中文
      */
-    private String checkedEntName;
+    private String tradingName;
 
     /**
      * 合同名称
@@ -49,12 +68,12 @@ public class QueryListResVo implements Serializable {
     /**
      * 发起人
      */
-    private String createByName;
+    private String initiateName;
 
     /**
      * 发起单位
      */
-    private String createEntName;
+    private String initiateEntName;
 
     /**
      * 创建时间

+ 70 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/TradeBaseInfoResVo.java

@@ -0,0 +1,70 @@
+package com.sckw.contract.model.vo.res;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author czh
+ * @desc 贸易合同基本信息
+ * @date 2023/7/20
+ */
+@Data
+public class TradeBaseInfoResVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -3038691487691609131L;
+
+    /**
+     * 合同编号
+     */
+    private String contractCode;
+
+    /**
+     * 合同名称
+     */
+    private String contractName;
+
+    /**
+     * 终止时间
+     */
+    private Date endTime;
+
+    /**
+     * 供应单位
+     */
+    private String provideEntName;
+
+    /**
+     * 供应单位联系电话
+     */
+    private String providePhone;
+
+    /**
+     * 采购单位
+     */
+    private String purchaseEntName;
+
+    /**
+     * 采购单位联系电话
+     */
+    private String purchasePhone;
+
+    /**
+     * 签约方式
+     */
+    private String signingWayName;
+
+    /**
+     * 生效时间
+     */
+    private Date startTime;
+
+    /**
+     * 付款方式
+     */
+    private String tradingName;
+
+}

+ 36 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/vo/res/TradeGoodsInfoResVo.java

@@ -0,0 +1,36 @@
+package com.sckw.contract.model.vo.res;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author czh
+ * @desc 贸易合同标的信息
+ * @date 2023/7/20
+ */
+@Data
+public class TradeGoodsInfoResVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 6864786253115975328L;
+
+    /**
+     * 采购数量
+     */
+    private BigDecimal amount;
+    /**
+     * 商品
+     */
+    private String goodsName;
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+    /**
+     * 单位
+     */
+    private String unit;
+}

+ 10 - 4
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsGoodsService.java

@@ -2,9 +2,7 @@ package com.sckw.contract.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.sckw.contract.dao.KwcContractLogisticsGoodsMapper;
-import com.sckw.contract.dao.KwcContractTradeGoodsMapper;
 import com.sckw.contract.model.entity.KwcContractLogisticsGoods;
-import com.sckw.contract.model.entity.KwcContractTradeGoods;
 import com.sckw.contract.model.vo.req.LogisticsGoodsInfoReqVo;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
@@ -12,12 +10,17 @@ import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.IdWorker;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.product.api.model.KwpGoods;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * @author PC
@@ -31,6 +34,9 @@ public class KwcContractLogisticsGoodsService {
     @Autowired
     private KwcContractLogisticsGoodsMapper kwcContractLogisticsGoodsMapper;
 
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    private GoodsInfoService goodsInfoService;
+
 
     /**
      * @param contractId 合同id, goodsInfoList标的信息
@@ -40,8 +46,8 @@ public class KwcContractLogisticsGoodsService {
      */
     public void saveContractLogisticsGoods(Long contractId, List<LogisticsGoodsInfoReqVo> goodsInfoList) throws SystemException {
         //todo 调dubbo接口返回商品详情 填充sku
-        List<Long> goodsIdList = goodsInfoList.stream().map(LogisticsGoodsInfoReqVo::getGoodsId).toList();
-
+//        List<Long> goodsIdList = goodsInfoList.stream().map(LogisticsGoodsInfoReqVo::getGoodsId).toList();
+//        Map<Long, KwpGoods> goodsMap = goodsInfoService.getGoodsByIds(goodsIdList);
         Long userId = LoginUserHolder.getUserId();
         Date date = new Date();
         for (LogisticsGoodsInfoReqVo logisticsGoodsInfoReqVo : goodsInfoList) {

+ 175 - 48
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsService.java

@@ -1,30 +1,32 @@
 package com.sckw.contract.service;
 
+import java.util.Date;
+
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.sckw.contract.dao.KwcContractLogisticsMapper;
 import com.sckw.contract.model.dto.req.QueryListReqDto;
+import com.sckw.contract.model.dto.res.QueryListResDto;
 import com.sckw.contract.model.entity.KwcContractLogistics;
 import com.sckw.contract.model.entity.KwcContractLogisticsGoods;
 import com.sckw.contract.model.entity.KwcContractLogisticsUnit;
 import com.sckw.contract.model.vo.req.ContractLogisticsReqVo;
 import com.sckw.contract.model.vo.req.LogisticsBaseInfoReqVo;
 import com.sckw.contract.model.vo.req.QueryListReqVo;
-import com.sckw.contract.model.vo.res.ContractLogisticsDetailResVo;
-import com.sckw.contract.model.vo.res.LogisticsBaseInfoResVo;
-import com.sckw.contract.model.vo.res.LogisticsGoodsInfoResVo;
-import com.sckw.contract.model.vo.res.QueryListResVo;
+import com.sckw.contract.model.vo.res.*;
+import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.ContractStatusEnum;
 import com.sckw.core.model.enums.CooperateTypeEnum;
-import com.sckw.core.model.enums.SigningWayEnum;
+import com.sckw.core.model.enums.EntTypeEnum;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.BeanUtils;
@@ -34,8 +36,11 @@ import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.excel.utils.EasyExcelUtil;
+import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.product.api.model.KwpGoods;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -67,6 +72,9 @@ public class KwcContractLogisticsService {
     @DubboReference(version = "2.0.0", group = "design", check = false)
     private RemoteSystemService remoteSystemService;
 
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    private GoodsInfoService goodsInfoService;
+
     /**
      * @param reqVo 新增入参
      * @desc: 新增托运合同
@@ -76,7 +84,7 @@ public class KwcContractLogisticsService {
     @Transactional(rollbackFor = {})
     public Long addCheckedContract(ContractLogisticsReqVo reqVo) {
         LogisticsBaseInfoReqVo baseInfo = reqVo.getBaseInfo();
-
+        
         //创建合同
         KwcContractLogistics kwcContractLogistics = getKwcContractLogistics(baseInfo, reqVo.getRemark(), reqVo.getPId());
         long contactId = new IdWorker(1L).nextId();
@@ -102,21 +110,12 @@ public class KwcContractLogisticsService {
         kwcContractLogistics.setEntId(LoginUserHolder.getEntId());
         kwcContractLogistics.setContractNo(baseInfo.getContractCode());
         kwcContractLogistics.setName(baseInfo.getContractName());
-        kwcContractLogistics.setSigningWay(SigningWayEnum.getName(baseInfo.getSigningWay()).getName());
-        SysDictResDto sysDictResDto = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.CHARGING_TYPE.getType(), baseInfo.getCharging());
-        if (Objects.nonNull(sysDictResDto)) {
-            kwcContractLogistics.setCharging(sysDictResDto.getId());
-        }
-
-//        remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.TRADE_TYPE, baseInfo.getT)
-//        kwcContractLogistics.setTrading(pid);
+        kwcContractLogistics.setSigningWay(baseInfo.getSigningWay());
+        kwcContractLogistics.setCharging(baseInfo.getCharging());
         kwcContractLogistics.setStartTime(baseInfo.getStartTime());
         kwcContractLogistics.setEndTime(baseInfo.getEndTime());
         kwcContractLogistics.setAmount(new BigDecimal("0"));
         kwcContractLogistics.setPerformedAmount(new BigDecimal("0"));
-        kwcContractLogistics.setSigningUrl("");
-        kwcContractLogistics.setSignedUrl("");
-        kwcContractLogistics.setSigningNo("");
         kwcContractLogistics.setContractPid(pid);
         kwcContractLogistics.setRemark(remark);
         kwcContractLogistics.setCreateBy(LoginUserHolder.getUserId());
@@ -145,9 +144,9 @@ public class KwcContractLogisticsService {
     }
 
     /**
+     * @param id 主键
      * @return ContractLogisticsDetailResVo
      * @desc 合同详情
-     * @param  id 主键
      * @author czh
      * @date 2023/7/16
      */
@@ -179,11 +178,11 @@ public class KwcContractLogisticsService {
                 }
             }
 
-            //logisticsBaseInfoResVo.setChargingName();
+            logisticsBaseInfoResVo.setChargingName(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(), String.valueOf(kwcContractLogistics.getCharging())));
             logisticsBaseInfoResVo.setContractCode(kwcContractLogistics.getContractNo());
             logisticsBaseInfoResVo.setContractName(kwcContractLogistics.getName());
             logisticsBaseInfoResVo.setEndTime(kwcContractLogistics.getEndTime());
-            logisticsBaseInfoResVo.setSigningWayName(kwcContractLogistics.getSigningWay());
+            logisticsBaseInfoResVo.setSigningWayName(DictEnum.getLabel(DictTypeEnum.SIGNING_WAY.getType(), String.valueOf(kwcContractLogistics.getSigningWay())));
             logisticsBaseInfoResVo.setStartTime(kwcContractLogistics.getStartTime());
             contractLogisticsDetailResVo.setBaseInfo(logisticsBaseInfoResVo);
         }
@@ -192,18 +191,56 @@ public class KwcContractLogisticsService {
         List<KwcContractLogisticsGoods> kwcContractLogisticsGoodsList = kwcContractLogisticsGoodsService.queryGoodsInfoByContractId(kwcContractLogistics.getId());
         if (CollectionUtils.isNotEmpty(kwcContractLogisticsGoodsList)) {
             List<Long> goodsIdList = kwcContractLogisticsGoodsList.stream().map(KwcContractLogisticsGoods::getGoodsId).toList();
+            Map<Long, KwpGoods> goodsMap = goodsInfoService.getGoodsByIds(goodsIdList);
+
+            String keys = "";
+           for (KwcContractLogisticsGoods item :kwcContractLogisticsGoodsList){
+                keys += DictTypeEnum.UNIT_TYPE.getType() + Global.POUND + item.getUnit() + Global.COMMA;
+                keys += DictTypeEnum.PRICE_TYPE.getType() + Global.POUND + item.getPriceUnit() + Global.COMMA;
+                keys += DictTypeEnum.WEIGHT_CAR.getType() + Global.POUND + item.getLossUnit() + Global.COMMA;
+                keys += DictTypeEnum.WEIGHT_CAR.getType() + Global.POUND + item.getDeficitUnit() + Global.COMMA;
+            };
+
+            Map<String, SysDictResDto> stringSysDictResDtoMap = remoteSystemService.queryDictMapByTypeValues(keys);
+
             List<LogisticsGoodsInfoResVo> goodsInfo = new ArrayList<>();
             for (KwcContractLogisticsGoods kwcContractLogisticsGoods : kwcContractLogisticsGoodsList) {
                 LogisticsGoodsInfoResVo logisticsGoodsInfoResVo = new LogisticsGoodsInfoResVo();
                 logisticsGoodsInfoResVo.setAmount(kwcContractLogisticsGoods.getAmount());
                 logisticsGoodsInfoResVo.setUnit(kwcContractLogisticsGoods.getUnit());
                 logisticsGoodsInfoResVo.setPrice(kwcContractLogisticsGoods.getPrice());
-                //logisticsGoodsInfoResVo.setPriceUnit();
+                logisticsGoodsInfoResVo.setPriceUnit(kwcContractLogisticsGoods.getPriceUnit());
                 logisticsGoodsInfoResVo.setDeficitPrice(kwcContractLogisticsGoods.getDeficitPrice());
                 logisticsGoodsInfoResVo.setDeficitUnit(kwcContractLogisticsGoods.getDeficitUnit());
-                //logisticsGoodsInfoResVo.setGoodsName();
+                logisticsGoodsInfoResVo.setGoodsId(kwcContractLogisticsGoods.getGoodsId());
+                logisticsGoodsInfoResVo.setId(kwcContractLogisticsGoods.getId());
+                KwpGoods kwpGoods = goodsMap.get(kwcContractLogisticsGoods.getGoodsId());
+                if (Objects.nonNull(kwpGoods)) {
+                    logisticsGoodsInfoResVo.setGoodsName(kwpGoods.getName());
+                }
                 logisticsGoodsInfoResVo.setLoss(kwcContractLogisticsGoods.getLoss());
                 logisticsGoodsInfoResVo.setLossUnit(kwcContractLogisticsGoods.getLossUnit());
+
+                SysDictResDto unitType = stringSysDictResDtoMap.get(DictTypeEnum.UNIT_TYPE.getType() + Global.POUND + kwcContractLogisticsGoods.getUnit());
+                if (Objects.nonNull(unitType)) {
+                    logisticsGoodsInfoResVo.setUnitName(unitType.getValue());
+                }
+
+                SysDictResDto priceType = stringSysDictResDtoMap.get(DictTypeEnum.PRICE_TYPE.getType() + Global.POUND + kwcContractLogisticsGoods.getPriceUnit());
+                if (Objects.nonNull(priceType)) {
+                    logisticsGoodsInfoResVo.setPriceUnitName(priceType.getValue());
+                }
+
+                SysDictResDto weightCar1 = stringSysDictResDtoMap.get(DictTypeEnum.WEIGHT_CAR.getType() + Global.POUND + kwcContractLogisticsGoods.getLossUnit());
+                if (Objects.nonNull(weightCar1)) {
+                    logisticsGoodsInfoResVo.setLossUnitName(weightCar1.getValue());
+                }
+
+                SysDictResDto weightCar2 = stringSysDictResDtoMap.get(DictTypeEnum.WEIGHT_CAR.getType() + Global.POUND + kwcContractLogisticsGoods.getDeficitUnit());
+                if (Objects.nonNull(weightCar2)) {
+                    logisticsGoodsInfoResVo.setDeficitUnitName(weightCar2.getValue());
+                }
+
                 goodsInfo.add(logisticsGoodsInfoResVo);
             }
             contractLogisticsDetailResVo.setGoodsInfo(goodsInfo);
@@ -213,7 +250,7 @@ public class KwcContractLogisticsService {
         List<String> fileList = new ArrayList<>();
         fileList.add(kwcContractLogistics.getSignedUrl());
         fileList.add(kwcContractLogistics.getSigningUrl());
-        contractLogisticsDetailResVo.setContractFile(fileList);
+        contractLogisticsDetailResVo.setContractFile(fileList.stream().filter(StringUtils::isNotBlank).toList());
 
         //补充合同
         List<KwcContractLogistics> supplementList = getSupplementList(kwcContractLogistics);
@@ -246,24 +283,28 @@ public class KwcContractLogisticsService {
     @Transactional(rollbackFor = {})
     public void submit(ContractLogisticsReqVo reqVo) {
         Long id = reqVo.getId();
+        //直接签约先存草稿再修改状态
         if (Objects.isNull(id)) {
-            //创建合同
-            KwcContractLogistics kwcContractLogistics = getKwcContractLogistics(reqVo.getBaseInfo(), reqVo.getRemark(), reqVo.getPId());
-            id = new IdWorker(1L).nextId();
-            kwcContractLogistics.setId(id);
-            kwcContractLogistics.setStatus(ContractStatusEnum.SUBMIT.getCode());
-            kwcContractLogistics.setSigningUrl(reqVo.getContractFile());
-            if (kwcContractLogisticsMapper.insert(kwcContractLogistics) <= 0) {
-                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
-            }
-
-            //存审批记录
-            kwcContractLogisticsTrackService.saveContractLogisticsTrack(id);
+            id = addCheckedContract(reqVo);
+            changeToSubmit(id);
             return;
         }
+        update(reqVo);
+        changeToSubmit(id);
+    }
 
-        id = addCheckedContract(reqVo);
-        //存审批记录
+    /**
+     * @param id 合同id
+     * @desc: 更新合同为发起
+     * @author: czh
+     * @date: 2023/7/20
+     */
+    private void changeToSubmit(Long id) {
+        KwcContractLogistics kwcContractLogistics = kwcContractLogisticsMapper.selectById(id);
+        kwcContractLogistics.setStatus(ContractStatusEnum.SUBMIT.getCode());
+        if (kwcContractLogisticsMapper.updateById(kwcContractLogistics) <= 0) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+        }
         kwcContractLogisticsTrackService.saveContractLogisticsTrack(id);
     }
 
@@ -299,8 +340,8 @@ public class KwcContractLogisticsService {
             Date date = new Date();
             kwcContractLogisticsGoodsList.forEach(item -> {
                 item.setDelFlag(Global.YES);
-                item.setCreateBy(LoginUserHolder.getUserId());
-                item.setCreateTime(date);
+                item.setUpdateBy(LoginUserHolder.getUserId());
+                item.setUpdateTime(date);
             });
 
             if (kwcContractLogisticsGoodsService.updateBatch(kwcContractLogisticsGoodsList) != kwcContractLogisticsGoodsList.size()) {
@@ -308,7 +349,6 @@ public class KwcContractLogisticsService {
             }
         }
         kwcContractLogisticsGoodsService.saveContractLogisticsGoods(kwcContractLogistics.getId(), reqVo.getGoodsInfo());
-
     }
 
     /**
@@ -330,7 +370,6 @@ public class KwcContractLogisticsService {
                 throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
             }
         });
-
     }
 
 
@@ -349,7 +388,7 @@ public class KwcContractLogisticsService {
             if (item.getStatus() != ContractStatusEnum.SAVE.getCode()) {
                 throw new SystemException(HttpStatus.CODE_10301, HttpStatus.MSG_022);
             }
-            item.setStatus(ContractStatusEnum.COMPLETE.getCode());
+            item.setDelFlag(Global.YES);
             item.setUpdateBy(LoginUserHolder.getUserId());
             item.setUpdateTime(date);
             if (kwcContractLogisticsMapper.updateById(item) <= 0) {
@@ -359,29 +398,75 @@ public class KwcContractLogisticsService {
     }
 
     /**
+     * @return PageResult
      * @desc: 分页查询
-     * @param:  reqVo
+     * @param: reqVo
      * @author: czh
      * @date 2023/7/17
-     * @return PageResult
      */
     public PageResult queryListByPage(QueryListReqVo reqVo) {
         PageHelper.startPage(reqVo.getPage(), reqVo.getPageSize());
         QueryListReqDto queryListReqDto = new QueryListReqDto();
         BeanUtils.copyProperties(reqVo, queryListReqDto);
-        List<QueryListResVo> list = kwcContractLogisticsMapper.queryList(queryListReqDto);
+        queryListReqDto.setEntId(LoginUserHolder.getEntId());
+        List<QueryListResDto> queryListResDtos = kwcContractLogisticsMapper.queryList(queryListReqDto);
+        if (CollectionUtils.isEmpty(queryListResDtos)) {
+            return PageHelperUtil.getPageResult(new PageInfo<>());
+        }
+        List<QueryListResVo> list = getQueryListResVos(queryListResDtos);
         return PageHelperUtil.getPageResult(new PageInfo<>(list));
     }
 
+
+    /**
+     * @param queryListResDtos 入参
+     * @return QueryListResVo
+     * @desc: 抽取公共部分
+     * @author: czh
+     * @date: 2023/7/18
+     */
+    private List<QueryListResVo> getQueryListResVos(List<QueryListResDto> queryListResDtos) {
+        Map<Long, UserCacheResDto> longUserCacheResDtoMap = new HashMap<>();
+        List<Long> initiateByList = queryListResDtos.stream().map(QueryListResDto::getInitiateBy).toList();
+        if (CollectionUtils.isNotEmpty(initiateByList)) {
+            longUserCacheResDtoMap = remoteSystemService.queryUserCacheMapByIds(initiateByList);
+        }
+
+        List<QueryListResVo> list = new ArrayList<>();
+        for (QueryListResDto queryListResDto : queryListResDtos) {
+            QueryListResVo queryListResVo = new QueryListResVo();
+            queryListResVo.setCheckedEntName(queryListResDto.getUnitType().compareTo(EntTypeEnum.LOGISTICS3.getCode()) == 0 ? queryListResDto.getEntName() : queryListResDto.getTargetEntName());
+            queryListResVo.setCarrierEntName(queryListResDto.getUnitType().compareTo(EntTypeEnum.LOGISTICS3.getCode()) == 0 ? queryListResDto.getTargetEntName() : queryListResDto.getEntName());
+
+            UserCacheResDto userCacheResDto = longUserCacheResDtoMap.get(queryListResDto.getInitiateBy());
+            if (Objects.nonNull(userCacheResDto)) {
+                queryListResVo.setInitiateName(userCacheResDto.getName());
+                queryListResVo.setInitiateEntName(Objects.isNull(userCacheResDto.getEntInfo()) ? "" : userCacheResDto.getEntInfo().getFirmName());
+            }
+            queryListResVo.setChargingName(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(), String.valueOf(queryListResDto.getCharging())));
+            queryListResVo.setStatusName(ContractStatusEnum.getName(queryListResDto.getStatus()).getName());
+
+            queryListResVo.setPerformedAmount(new BigDecimal("0"));
+            list.add(queryListResVo);
+        }
+        return list;
+    }
+
     public void export(QueryListReqVo reqVo) {
         QueryListReqDto queryListReqDto = new QueryListReqDto();
         BeanUtils.copyProperties(reqVo, queryListReqDto);
-
+        queryListReqDto.setEntId(LoginUserHolder.getEntId());
         if (StringUtils.isNotBlank(reqVo.getIds())) {
             List<Long> idList = Arrays.stream(reqVo.getIds().split(Global.COMMA)).map(Long::parseLong).toList();
             queryListReqDto.setIdList(idList);
         }
-        List<QueryListResVo> queryListResVos = kwcContractLogisticsMapper.queryList(queryListReqDto);
+
+        List<QueryListResVo> queryListResVos = new ArrayList<>();
+        List<QueryListResDto> queryListResDtos = kwcContractLogisticsMapper.queryList(queryListReqDto);
+        if (CollectionUtils.isNotEmpty(queryListResDtos)) {
+            queryListResVos = getQueryListResVos(queryListResDtos);
+        }
+
         try {
             EasyExcelUtil.writeSingleExcel("物流合同.xlsx", "sheet1", queryListResVos, QueryListResVo.class);
         } catch (IOException e) {
@@ -401,7 +486,49 @@ public class KwcContractLogisticsService {
         Long entId = LoginUserHolder.getEntId();
         QueryListReqDto queryListReqDto = new QueryListReqDto();
         queryListReqDto.setEntId(entId);
-        return kwcContractLogisticsMapper.queryList(queryListReqDto);
+        queryListReqDto.setStatus(ContractStatusEnum.SIGNED.getCode());
+        queryListReqDto.setEntType(EntTypeEnum.LOGISTICS3.getCode());
+        List<QueryListResDto> queryListResDtos = kwcContractLogisticsMapper.queryList(queryListReqDto);
+        if (CollectionUtils.isEmpty(queryListResDtos)) {
+            return Collections.emptyList();
+        }
+        return getQueryListResVos(queryListResDtos);
     }
 
+
+    /**
+     * @return HttpResult
+     * @desc: 分组查询
+     * @author: czh
+     * @date: 2023/7/18
+     */
+    public List<FindListGroupResVo> findListGroup(QueryListReqVo reqVo) {
+        ContractStatusEnum[] values = ContractStatusEnum.values();
+        List<FindListGroupResVo> list = new ArrayList<>();
+        FindListGroupResVo total = new FindListGroupResVo();
+        total.setCount(0);
+        list.add(total);
+        for (ContractStatusEnum contractStatusEnum : values) {
+            FindListGroupResVo findListGroupResVo = new FindListGroupResVo();
+            findListGroupResVo.setStatus(contractStatusEnum.getCode());
+            findListGroupResVo.setStatusName(contractStatusEnum.getName());
+            findListGroupResVo.setCount(0);
+            list.add(findListGroupResVo);
+        }
+
+        QueryListReqDto queryListReqDto = new QueryListReqDto();
+        BeanUtils.copyProperties(reqVo, queryListReqDto);
+        queryListReqDto.setEntId(LoginUserHolder.getEntId());
+        List<QueryListResDto> queryListResDtoList = kwcContractLogisticsMapper.queryList(queryListReqDto);
+        if (CollectionUtils.isNotEmpty(queryListResDtoList)) {
+            Map<Integer, List<QueryListResDto>> collect = queryListResDtoList.stream().collect(Collectors.groupingBy(QueryListResDto::getStatus));
+            for (FindListGroupResVo findListGroupResVo : list) {
+                List<QueryListResDto> queryListResDtos = collect.get(findListGroupResVo.getStatus());
+                findListGroupResVo.setCount(CollectionUtils.isEmpty(queryListResDtos) ? Global.NUMERICAL_ZERO : queryListResDtos.size());
+            }
+            //给汇总项求和
+            list.get(0).setCount(queryListResDtoList.size());
+        }
+        return list;
+    }
 }

+ 1 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsTrackService.java

@@ -34,7 +34,7 @@ public class KwcContractLogisticsTrackService {
         Date date = new Date();
         kwcContractLogisticsTrack.setId(new IdWorker(1L).nextId());
         kwcContractLogisticsTrack.setContractId(contractId);
-        kwcContractLogisticsTrack.setType(ContractTrackEnum.APPROVAL.getCode());
+        kwcContractLogisticsTrack.setType(ContractTrackEnum.SIGNING.getCode());
         kwcContractLogisticsTrack.setRemark("");
         kwcContractLogisticsTrack.setStatus(Global.NO);
         kwcContractLogisticsTrack.setCreateBy(LoginUserHolder.getUserId());

+ 1 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsUnitService.java

@@ -74,7 +74,7 @@ public class KwcContractLogisticsUnitService {
         //存承运运企业
         kwcContractLogisticsUnit.setId(new IdWorker(1L).nextId());
         kwcContractLogisticsUnit.setUnitType(CooperateTypeEnum.CARRIAGE.getCode());
-        kwcContractLogisticsUnit.setEntId(logisticsBaseInfoReqVo.getCheckedEntId());
+        kwcContractLogisticsUnit.setEntId(logisticsBaseInfoReqVo.getCarrierEntId());
         saveEnt(entCacheResDtoMap, kwcContractLogisticsUnit);
         kwcContractLogisticsUnit.setSignPhone(logisticsBaseInfoReqVo.getCarrierPhone());
         if (kwcContractLogisticsUnitMapper.insert(kwcContractLogisticsUnit) <= 0) {

+ 66 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeGoodsService.java

@@ -1,7 +1,22 @@
 package com.sckw.contract.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sckw.contract.dao.KwcContractTradeGoodsMapper;
+import com.sckw.contract.model.entity.KwcContractTradeGoods;
+import com.sckw.contract.model.vo.req.TradeGoodsInfoReqVo;
+import com.sckw.core.exception.SystemException;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.utils.IdWorker;
+import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.context.LoginUserHolder;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
 
 /**
 * @author PC
@@ -11,6 +26,57 @@ import org.springframework.stereotype.Service;
 @Service
 public class KwcContractTradeGoodsService {
 
+    @Autowired
+    private KwcContractTradeGoodsMapper kwcContractLogisticsGoodsMapper;
+
+
+    public void saveContractTradeGoods(long contractId, List<TradeGoodsInfoReqVo> goodsInfoList) {
+        //todo 调dubbo接口返回商品详情 填充sku
+        //List<Long> goodsIdList = goodsInfoList.stream().map(TradeGoodsInfoReqVo::getGoodsId).toList();
+
+        Long userId = LoginUserHolder.getUserId();
+        Date date = new Date();
+        for (TradeGoodsInfoReqVo tradeGoodsInfoReqVo : goodsInfoList) {
+            KwcContractTradeGoods kwcContractTradeGoods = new KwcContractTradeGoods();
+            BeanUtils.copyProperties(tradeGoodsInfoReqVo, kwcContractTradeGoods);
+            kwcContractTradeGoods.setId(new IdWorker(1L).nextId());
+            kwcContractTradeGoods.setContractId(contractId);
+            kwcContractTradeGoods.setSkuId(0L);
+            kwcContractTradeGoods.setPerformedAmount(new BigDecimal("0"));
+            kwcContractTradeGoods.setStatus(Global.NO);
+            kwcContractTradeGoods.setCreateBy(userId);
+            kwcContractTradeGoods.setCreateTime(date);
+            kwcContractTradeGoods.setUpdateBy(userId);
+            kwcContractTradeGoods.setUpdateTime(date);
+            kwcContractTradeGoods.setDelFlag(Global.NO);
+            if (kwcContractLogisticsGoodsMapper.insert(kwcContractTradeGoods) <= 0) {
+                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+            }
+        }
+    }
+
+    /**
+     * @param contractId 合同id
+     * @return KwcContractTradeGoods
+     * @desc: 根据合同id查标的信息
+     * @author: czh
+     * @date: 2023/7/20
+     */
+    public List<KwcContractTradeGoods> queryGoodsInfoByContractId(Long contractId) {
+        LambdaQueryWrapper<KwcContractTradeGoods> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwcContractTradeGoods::getContractId, contractId);
+        wrapper.eq(KwcContractTradeGoods::getDelFlag, Global.NO);
+        wrapper.eq(KwcContractTradeGoods::getStatus, Global.NO);
+        return kwcContractLogisticsGoodsMapper.selectList(wrapper);
+    }
+
+    public int updateBatch(List<KwcContractTradeGoods> list) {
+        int count = 0;
+        for (KwcContractTradeGoods kwcContractTradeGoods : list) {
+            count += kwcContractLogisticsGoodsMapper.updateById(kwcContractTradeGoods);
+        }
+        return count;
+    }
 }
 
 

+ 434 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeService.java

@@ -1,6 +1,43 @@
 package com.sckw.contract.service;
+import java.io.IOException;
+import java.util.Date;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.sckw.contract.model.dto.req.QueryListReqDto;
+import com.sckw.contract.model.dto.res.QueryListResDto;
+import com.sckw.contract.model.entity.*;
+import com.sckw.contract.model.vo.req.*;
+
+import com.sckw.contract.model.vo.res.*;
+import com.sckw.core.common.enums.enums.DictEnum;
+import com.sckw.core.common.enums.enums.DictTypeEnum;
+import com.sckw.core.exception.SystemException;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.enums.ContractStatusEnum;
+import com.sckw.core.model.enums.EntTypeEnum;
+import com.sckw.core.model.page.PageHelperUtil;
+import com.sckw.core.model.page.PageResult;
+import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.IdWorker;
+import com.sckw.core.utils.StringUtils;
+import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.excel.utils.EasyExcelUtil;
+import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.sckw.system.api.RemoteSystemService;
+import java.math.BigDecimal;
+import java.util.*;
+
+import com.sckw.contract.dao.KwcContractTradeMapper;
 
 /**
 * @author PC
@@ -8,8 +45,405 @@ import org.springframework.stereotype.Service;
 * @createDate 2023-07-13 13:36:19
 */
 @Service
+@Slf4j
 public class KwcContractTradeService {
 
+
+    @Autowired
+    private KwcContractTradeMapper kwcContractTradeMapper;
+
+    @Autowired
+    private KwcContractTradeGoodsService kwcContractTradeGoodsService;
+
+    @Autowired
+    private KwcContractTradeTrackService kwcContractTradeTrackService;
+
+    @Autowired
+    private KwcContractTradeUnitService kwcContractTradeUnitService;
+
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    private RemoteSystemService remoteSystemService;
+
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    private GoodsInfoService goodsInfoService;
+
+    /**
+     * @desc: 分页查询
+     * @param:  reqVo
+     * @author: sky
+     * @date 2023/7/17
+     * @return PageResult
+     */
+    public PageResult queryListByPage(QueryListReqVo reqVo) {
+        PageHelper.startPage(reqVo.getPage(), reqVo.getPageSize());
+        QueryListReqDto queryListReqDto = new QueryListReqDto();
+        BeanUtils.copyProperties(reqVo, queryListReqDto);
+        queryListReqDto.setEntId(LoginUserHolder.getEntId());
+        List<QueryListResDto> queryListResDtos = kwcContractTradeMapper.queryList(queryListReqDto);
+        if (CollectionUtils.isEmpty(queryListResDtos)) {
+            return PageHelperUtil.getPageResult(new PageInfo<>());
+        }
+        List<QueryListResVo> list = getQueryListResVos(queryListResDtos);
+        return PageHelperUtil.getPageResult(new PageInfo<>(list), queryListResDtos, reqVo.getPageSize());
+    }
+
+
+    /**
+     * @param queryListResDtos 入参
+     * @return QueryListResVo
+     * @desc: 抽取公共部分
+     * @author: czh
+     * @date: 2023/7/18
+     */
+    private List<QueryListResVo> getQueryListResVos(List<QueryListResDto> queryListResDtos) {
+        Map<Long, UserCacheResDto> longUserCacheResDtoMap = new HashMap<>();
+        List<Long> initiateByList = queryListResDtos.stream().map(QueryListResDto::getInitiateBy).toList();
+        if (CollectionUtils.isNotEmpty(initiateByList)) {
+            longUserCacheResDtoMap = remoteSystemService.queryUserCacheMapByIds(initiateByList);
+        }
+
+        List<QueryListResVo> list = new ArrayList<>();
+        for (QueryListResDto queryListResDto : queryListResDtos) {
+            QueryListResVo queryListResVo = new QueryListResVo();
+            queryListResVo.setProvideEntName(queryListResDto.getUnitType().compareTo(EntTypeEnum.SUPPLIER.getCode()) == 0 ? queryListResDto.getEntName() : queryListResDto.getTargetEntName());
+            queryListResVo.setPurchaseEntName(queryListResDto.getUnitType().compareTo(EntTypeEnum.SUPPLIER.getCode()) == 0 ? queryListResDto.getTargetEntName() : queryListResDto.getEntName());
+
+            UserCacheResDto userCacheResDto = longUserCacheResDtoMap.get(queryListResDto.getInitiateBy());
+            if (Objects.nonNull(userCacheResDto)) {
+                queryListResVo.setInitiateName(userCacheResDto.getName());
+                queryListResVo.setInitiateEntName(Objects.isNull(userCacheResDto.getEntInfo()) ? "" : userCacheResDto.getEntInfo().getFirmName());
+            }
+            queryListResVo.setTradingName(DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), String.valueOf(queryListResDto.getTrading())));
+            queryListResVo.setStatusName(ContractStatusEnum.getName(queryListResDto.getStatus()).getName());
+
+            // todo
+            queryListResVo.setPerformedAmount(new BigDecimal("0"));
+            list.add(queryListResVo);
+        }
+        return list;
+    }
+
+    @Transactional(rollbackFor = {})
+    public Long addTradeContract(ContractTradeReqVo reqVo) {
+        TradeBaseInfoReqVo baseInfo = reqVo.getBaseInfo();
+        List<TradeGoodsInfoReqVo> goodsInfoList = reqVo.getGoodsInfo();
+
+        //创建合同
+        KwcContractTrade kwcContractTrade = getKwcContractTrade(baseInfo, reqVo.getRemark(), reqVo.getPId());
+        long contactId = new IdWorker(1L).nextId();
+        kwcContractTrade.setId(contactId);
+        kwcContractTrade.setStatus(ContractStatusEnum.SAVE.getCode());
+        kwcContractTrade.setSigningUrl(reqVo.getContractFile());
+        if (kwcContractTradeMapper.insert(kwcContractTrade) <= 0) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+        }
+
+        //保存交易合同商品信息
+        kwcContractTradeGoodsService.saveContractTradeGoods(contactId, goodsInfoList);
+
+        //存单位信息
+        kwcContractTradeUnitService.saveContractTradeUnit(contactId, baseInfo);
+        return contactId;
+    }
+
+    /**
+     * @param baseInfo 贸易基本信息 remark备注  pid父id
+     * @return KwcContractTrade
+     * @desc: 抽取公共
+     * @author: czh
+     * @date: 2023/7/20
+     */
+    public KwcContractTrade getKwcContractTrade(TradeBaseInfoReqVo baseInfo, String remark, Long pid) {
+        Date date = new Date();
+        KwcContractTrade kwcContractTrade = new KwcContractTrade();
+        kwcContractTrade.setEntId(LoginUserHolder.getEntId());
+        kwcContractTrade.setContractNo(baseInfo.getContractCode());
+        kwcContractTrade.setName(baseInfo.getContractName());
+        kwcContractTrade.setSigningWay(baseInfo.getSigningWay());
+        kwcContractTrade.setTrading(baseInfo.getTrading());
+        kwcContractTrade.setStartTime(baseInfo.getStartTime());
+        kwcContractTrade.setEndTime(baseInfo.getEndTime());
+        kwcContractTrade.setPerformedAmount(new BigDecimal("0"));
+        kwcContractTrade.setContractPid(pid);
+        kwcContractTrade.setRemark(remark);
+        kwcContractTrade.setCreateBy(LoginUserHolder.getUserId());
+        kwcContractTrade.setCreateTime(date);
+        kwcContractTrade.setUpdateBy(LoginUserHolder.getUserId());
+        kwcContractTrade.setUpdateTime(date);
+        kwcContractTrade.setDelFlag(Global.NO);
+        return kwcContractTrade;
+    }
+
+    /**
+     * @param reqVo 补充入参
+     * @desc: 补充合同
+     * @author: czh
+     * @date: 2023/7/14
+     */
+    public void supplement(ContractTradeReqVo reqVo) {
+        Long id = reqVo.getPId();
+        KwcContractTrade KwcContractTrade = kwcContractTradeMapper.selectById(id);
+        if (Objects.isNull(KwcContractTrade)) {
+            throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.CONTRACT_NOT_EXISTS);
+        }
+
+        addTradeContract(reqVo);
+    }
+
+
+    /**
+     * @desc: 合同详情
+     * @param  id 合同id
+     * @author: czh
+     * @date 2023/7/16
+     * @return ContractTradeDetailResVo
+     */
+    public ContractTradeDetailResVo detail(Long id) {
+        //基础信息
+        KwcContractTrade kwcContractTrade = kwcContractTradeMapper.selectById(id);
+        if (Objects.isNull(kwcContractTrade)) {
+            return null;
+        }
+
+        return buildContractTradeDetailResVo(kwcContractTrade);
+    }
+
+
+    /**
+     * @param kwcContractTrade 合同实体
+     * @return ContractTradeDetailResVo
+     * @desc: 构建返参
+     * @author: czh
+     * @date: 2023/7/20
+     */
+    private ContractTradeDetailResVo buildContractTradeDetailResVo(KwcContractTrade kwcContractTrade) {
+        Long id = kwcContractTrade.getId();
+        TradeBaseInfoResVo tradeBaseInfoResVo = new TradeBaseInfoResVo();
+        tradeBaseInfoResVo.setContractCode(kwcContractTrade.getContractNo());
+        tradeBaseInfoResVo.setContractName(kwcContractTrade.getName());
+        tradeBaseInfoResVo.setEndTime(kwcContractTrade.getEndTime());
+        tradeBaseInfoResVo.setSigningWayName(DictEnum.getLabel(DictTypeEnum.SIGNING_WAY.getType(), String.valueOf(kwcContractTrade.getSigningWay())));
+        tradeBaseInfoResVo.setStartTime(kwcContractTrade.getStartTime());
+        tradeBaseInfoResVo.setTradingName(DictEnum.getLabel(DictTypeEnum.TRADE_TYPE.getType(), String.valueOf(kwcContractTrade.getTrading())));
+
+        ContractTradeDetailResVo contractTradeDetailResVo = new ContractTradeDetailResVo();
+        List<KwcContractTradeUnit> kwcContractTradeUnits = kwcContractTradeUnitService.queryByContractId(id);
+        if (CollectionUtils.isNotEmpty(kwcContractTradeUnits)) {
+            for (KwcContractTradeUnit kwcContractTradeUnit : kwcContractTradeUnits) {
+                if (kwcContractTradeUnit.getUnitType().compareTo(EntTypeEnum.SUPPLIER.getCode()) == 0) {
+                    tradeBaseInfoResVo.setProvideEntName(kwcContractTradeUnit.getFirmName());
+                    tradeBaseInfoResVo.setProvidePhone(kwcContractTradeUnit.getSignPhone());
+                }
+
+                if (kwcContractTradeUnit.getUnitType().compareTo(EntTypeEnum.PURCHASER.getCode()) == 0) {
+                    tradeBaseInfoResVo.setPurchaseEntName(kwcContractTradeUnit.getFirmName());
+                    tradeBaseInfoResVo.setPurchasePhone(kwcContractTradeUnit.getPhone());
+                }
+            }
+        }
+        contractTradeDetailResVo.setBaseInfo(tradeBaseInfoResVo);
+
+        //标的信息
+        List<KwcContractTradeGoods> kwcContractTradeGoodsList = kwcContractTradeGoodsService.queryGoodsInfoByContractId(id);
+        if (CollectionUtils.isNotEmpty(kwcContractTradeGoodsList)) {
+            //todo 通过商品id查商品信息,填充商品名
+            List<TradeGoodsInfoResVo> tradeGoodsInfoResVoList = new ArrayList<>();
+            for (KwcContractTradeGoods kwcContractTradeGoods : kwcContractTradeGoodsList) {
+                TradeGoodsInfoResVo tradeGoodsInfoResVo = new TradeGoodsInfoResVo();
+                tradeGoodsInfoResVo.setAmount(kwcContractTradeGoods.getAmount());
+//                tradeGoodsInfoResVo.setGoodsName();
+                tradeGoodsInfoResVo.setPrice(kwcContractTradeGoods.getPrice());
+//                tradeGoodsInfoResVo.setUnit(0);
+                tradeGoodsInfoResVoList.add(tradeGoodsInfoResVo);
+            }
+            contractTradeDetailResVo.setGoodsInfo(tradeGoodsInfoResVoList);
+        }
+
+        List<String> fileList = new ArrayList<>();
+        fileList.add(kwcContractTrade.getSigningUrl());
+        fileList.add(kwcContractTrade.getSignedUrl());
+        contractTradeDetailResVo.setContractFile(fileList);
+
+        List<KwcContractTrade> supplementList = getSupplementList(id);
+        if (CollectionUtils.isNotEmpty(supplementList)) {
+            List<ContractTradeDetailResVo> child = new ArrayList<>();
+            for (KwcContractTrade supplement : supplementList) {
+                child.add(buildContractTradeDetailResVo(supplement));
+            }
+            contractTradeDetailResVo.setChild(child);
+        }
+        return contractTradeDetailResVo;
+    }
+
+
+    private List<KwcContractTrade> getSupplementList(Long id) {
+        LambdaQueryWrapper<KwcContractTrade> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwcContractTrade::getContractPid, id);
+        wrapper.eq(KwcContractTrade::getDelFlag, Global.NO);
+        wrapper.eq(KwcContractTrade::getStatus, Global.NO);
+        return kwcContractTradeMapper.selectList(wrapper);
+    }
+
+
+    /**
+     * @desc: 发起签约
+     * @param reqVo id
+     * @author: czh
+     * @date 2023/7/16
+     */
+    public void submit(ContractTradeReqVo reqVo) {
+        Long id = reqVo.getId();
+        if (Objects.isNull(id)) {
+            //创建合同
+            KwcContractTrade kwcContractLogistics = getKwcContractTrade(reqVo.getBaseInfo(), reqVo.getRemark(), reqVo.getPId());
+            id = new IdWorker(1L).nextId();
+            kwcContractLogistics.setId(id);
+            kwcContractLogistics.setStatus(ContractStatusEnum.SUBMIT.getCode());
+            kwcContractLogistics.setSigningUrl(reqVo.getContractFile());
+            if (kwcContractTradeMapper.insert(kwcContractLogistics) <= 0) {
+                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+            }
+
+            //存审批记录
+            kwcContractTradeTrackService.saveContractTradeTrack(id);
+            return;
+        }
+
+        id = addTradeContract(reqVo);
+        //存审批记录
+        kwcContractTradeTrackService.saveContractTradeTrack(id);
+    }
+
+
+    /**
+     * @desc: 修改草稿
+     * @param: reqVo 入参
+     * @author: czh
+     * @date 2023/7/16
+     */
+    @Transactional(rollbackFor = {})
+    public void update(ContractTradeReqVo reqVo) {
+        Long contractId = reqVo.getId();
+        KwcContractTrade kwcContractTrade = kwcContractTradeMapper.selectById(contractId);
+        if (Objects.isNull(kwcContractTrade)) {
+            throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.CONTRACT_NOT_EXISTS);
+        }
+
+        KwcContractTrade param = getKwcContractTrade(reqVo.getBaseInfo(), reqVo.getRemark(), reqVo.getPId());
+        param.setId(contractId);
+        param.setSigningUrl(reqVo.getContractFile());
+        param.setStatus(ContractStatusEnum.SAVE.getCode());
+        param.setUpdateBy(LoginUserHolder.getUserId());
+        param.setUpdateTime(new Date());
+        if (kwcContractTradeMapper.updateById(param) <= 0) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+        }
+
+
+        //保存交易合同商品信息-先把以前的删除
+        List<KwcContractTradeGoods> kwcContractTradeGoodsList = kwcContractTradeGoodsService.queryGoodsInfoByContractId(contractId);
+        if (CollectionUtils.isNotEmpty(kwcContractTradeGoodsList)) {
+            Date date = new Date();
+            kwcContractTradeGoodsList.forEach(item -> {
+                item.setDelFlag(Global.YES);
+                item.setUpdateBy(LoginUserHolder.getUserId());
+                item.setUpdateTime(date);
+            });
+
+            if (kwcContractTradeGoodsService.updateBatch(kwcContractTradeGoodsList) != kwcContractTradeGoodsList.size()) {
+                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+            }
+        }
+        kwcContractTradeGoodsService.saveContractTradeGoods(kwcContractTrade.getId(), reqVo.getGoodsInfo());
+    }
+
+
+    /**
+     * @desc: 手动完结
+     * @param: reqVo ids
+     * @author: czh
+     * @date 2023/7/16
+     */
+    @Transactional(rollbackFor = {})
+    public void complete(String ids) {
+        List<Long> contractIdList = Arrays.stream(ids.split(Global.COMMA)).map(Long::parseLong).toList();
+        List<KwcContractTrade> kwcContractTradeList = kwcContractTradeMapper.selectBatchIds(contractIdList);
+        Date date = new Date();
+        kwcContractTradeList.forEach(item -> {
+            item.setStatus(ContractStatusEnum.COMPLETE.getCode());
+            item.setUpdateBy(LoginUserHolder.getUserId());
+            item.setUpdateTime(date);
+            if (kwcContractTradeMapper.updateById(item) <= 0) {
+                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+            }
+        });
+    }
+
+
+    /**
+     * @desc: 手动完结
+     * @param: reqVo ids
+     * @author: czh
+     * @date 2023/7/16
+     */
+    @Transactional(rollbackFor = {})
+    public void delete(String ids) {
+        List<Long> contractIdList = Arrays.stream(ids.split(Global.COMMA)).map(Long::parseLong).toList();
+        List<KwcContractTrade> kwcContractTradeList = kwcContractTradeMapper.selectBatchIds(contractIdList);
+        Date date = new Date();
+        kwcContractTradeList.forEach(item -> {
+            if (item.getStatus() != ContractStatusEnum.SAVE.getCode()) {
+                throw new SystemException(HttpStatus.CODE_10301, HttpStatus.MSG_022);
+            }
+            item.setStatus(ContractStatusEnum.COMPLETE.getCode());
+            item.setUpdateBy(LoginUserHolder.getUserId());
+            item.setUpdateTime(date);
+            if (kwcContractTradeMapper.updateById(item) <= 0) {
+                throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+            }
+        });
+    }
+
+    public void export(QueryListReqVo reqVo) {
+        QueryListReqDto queryListReqDto = new QueryListReqDto();
+        BeanUtils.copyProperties(reqVo, queryListReqDto);
+        queryListReqDto.setEntId(LoginUserHolder.getEntId());
+        if (StringUtils.isNotBlank(reqVo.getIds())) {
+            List<Long> idList = Arrays.stream(reqVo.getIds().split(Global.COMMA)).map(Long::parseLong).toList();
+            queryListReqDto.setIdList(idList);
+        }
+
+        List<QueryListResVo> queryListResVos = new ArrayList<>();
+        List<QueryListResDto> queryListResDtos = kwcContractTradeMapper.queryList(queryListReqDto);
+        if (CollectionUtils.isNotEmpty(queryListResDtos)) {
+            queryListResVos = getQueryListResVos(queryListResDtos);
+        }
+        try {
+            EasyExcelUtil.writeSingleExcel("贸易合同.xlsx", "sheet1", queryListResVos, QueryListResVo.class);
+        } catch (IOException e) {
+            log.error("导出失败:", e);
+            throw new SystemException(HttpStatus.CODE_10301, HttpStatus.MSG_014);
+        }
+    }
+
+    /**
+     * @return HttpResult
+     * @desc: 查询当前企业的销售合同
+     * @author: czh
+     * @date: 2023/7/18
+     */
+    public List<QueryListResVo> queryCurrentEntSaleContractList() {
+        Long entId = LoginUserHolder.getEntId();
+        QueryListReqDto queryListReqDto = new QueryListReqDto();
+        queryListReqDto.setEntId(entId);
+        queryListReqDto.setStatus(ContractStatusEnum.SIGNED.getCode());
+        queryListReqDto.setEntType(EntTypeEnum.SUPPLIER.getCode());
+        List<QueryListResDto> queryListResDtos = kwcContractTradeMapper.queryList(queryListReqDto);
+        if (CollectionUtils.isEmpty(queryListResDtos)) {
+            return Collections.emptyList();
+        }
+        return getQueryListResVos(queryListResDtos);
+    }
 }
 
 

+ 35 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeTrackService.java

@@ -1,7 +1,21 @@
 package com.sckw.contract.service;
 
+import com.sckw.contract.dao.KwcContractLogisticsTrackMapper;
+import com.sckw.contract.dao.KwcContractTradeMapper;
+import com.sckw.contract.dao.KwcContractTradeTrackMapper;
+import com.sckw.contract.model.entity.KwcContractLogisticsTrack;
+import com.sckw.contract.model.entity.KwcContractTradeTrack;
+import com.sckw.core.exception.SystemException;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.enums.ContractTrackEnum;
+import com.sckw.core.utils.IdWorker;
+import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.context.LoginUserHolder;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+
 /**
 * @author PC
 * @description 针对表【kwc_contract_trade_track(交易合同(采购合同/销售合同)-交易订单(采购订单/销售订单))】的数据库操作Service实现
@@ -10,6 +24,27 @@ import org.springframework.stereotype.Service;
 @Service
 public class KwcContractTradeTrackService {
 
+    @Autowired
+    private KwcContractTradeTrackMapper kwcContractTradeTrackMapper;
+
+
+    public void saveContractTradeTrack(Long contractId) {
+        Date date = new Date();
+        KwcContractTradeTrack kwcContractTradeTrack = new KwcContractTradeTrack();
+        kwcContractTradeTrack.setId(new IdWorker(1L).nextId());
+        kwcContractTradeTrack.setContractId(contractId);
+        kwcContractTradeTrack.setType(ContractTrackEnum.SIGNING.getCode());
+        kwcContractTradeTrack.setRemark("");
+        kwcContractTradeTrack.setStatus(Global.NO);
+        kwcContractTradeTrack.setCreateBy(LoginUserHolder.getUserId());
+        kwcContractTradeTrack.setCreateTime(date);
+        kwcContractTradeTrack.setUpdateBy(LoginUserHolder.getUserId());
+        kwcContractTradeTrack.setUpdateTime(date);
+        kwcContractTradeTrack.setDelFlag(Global.NO);
+        if (kwcContractTradeTrackMapper.insert(kwcContractTradeTrack) <= 0) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+        }
+    }
 }
 
 

+ 95 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractTradeUnitService.java

@@ -1,7 +1,22 @@
 package com.sckw.contract.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sckw.contract.dao.KwcContractTradeUnitMapper;
+import com.sckw.contract.model.entity.KwcContractLogisticsUnit;
+import com.sckw.contract.model.entity.KwcContractTradeUnit;
+import com.sckw.contract.model.vo.req.TradeBaseInfoReqVo;
+import com.sckw.core.exception.SystemException;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.enums.CooperateTypeEnum;
+import com.sckw.core.utils.IdWorker;
+import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.*;
+
 /**
 * @author PC
 * @description 针对表【kwc_contract_trade_unit(交易合同采购/销售企业信息)】的数据库操作Service实现
@@ -10,6 +25,86 @@ import org.springframework.stereotype.Service;
 @Service
 public class KwcContractTradeUnitService {
 
+    @Autowired
+    private KwcContractTradeUnitMapper kwcContractTradeUnitMapper;
+
+    @Autowired
+    private CommonBusinessService commonBusinessService;
+
+    /**
+     * @desc: 保存合同单位
+     * @param: contractId 合同id, baseInfo基础信息
+     * @author: czh
+     * @date 2023/7/16
+     */
+    public void saveContractTradeUnit(long contractId, TradeBaseInfoReqVo baseInfo) {
+        List<Long> entIdList = new ArrayList<>();
+        entIdList.add(baseInfo.getProvideEntId());
+        entIdList.add(baseInfo.getPurchaseEntId());
+        Map<Long, EntCacheResDto> entCacheResDtoMap = commonBusinessService.queryEntCacheMapByIds(entIdList);
+
+        Date date = new Date();
+        saveProvideAndPurchase(contractId, entCacheResDtoMap, date, baseInfo);
+    }
+
+    private void saveProvideAndPurchase(long contractId, Map<Long, EntCacheResDto> entCacheResDtoMap, Date date, TradeBaseInfoReqVo baseInfo) {
+        //存供应商
+        KwcContractTradeUnit kwcContractTradeUnit = new KwcContractTradeUnit();
+        kwcContractTradeUnit.setId(new IdWorker(1L).nextId());
+        kwcContractTradeUnit.setContractId(contractId);
+        kwcContractTradeUnit.setUnitType(CooperateTypeEnum.SUPPLIER.getCode());
+        kwcContractTradeUnit.setEntId(baseInfo.getProvideEntId());
+        saveEnt(entCacheResDtoMap, kwcContractTradeUnit);
+        kwcContractTradeUnit.setSignPhone(baseInfo.getProvidePhone());
+        kwcContractTradeUnit.setStatus(Global.NO);
+        kwcContractTradeUnit.setCreateBy(LoginUserHolder.getUserId());
+        kwcContractTradeUnit.setCreateTime(date);
+        kwcContractTradeUnit.setUpdateBy(LoginUserHolder.getUserId());
+        kwcContractTradeUnit.setUpdateTime(date);
+        kwcContractTradeUnit.setDelFlag(Global.NO);
+        if (kwcContractTradeUnitMapper.insert(kwcContractTradeUnit) <= 0) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+        }
+
+        //存采购商
+        kwcContractTradeUnit.setId(new IdWorker(1L).nextId());
+        kwcContractTradeUnit.setUnitType(CooperateTypeEnum.PURCHASER.getCode());
+        kwcContractTradeUnit.setEntId(baseInfo.getPurchaseEntId());
+        saveEnt(entCacheResDtoMap, kwcContractTradeUnit);
+        kwcContractTradeUnit.setSignPhone(baseInfo.getPurchasePhone());
+        if (kwcContractTradeUnitMapper.insert(kwcContractTradeUnit) <= 0) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
+        }
+    }
+
+    /**
+     * @desc: 保存合同企业
+     * @author: czh
+     * @date 2023/7/16
+     */
+    private void saveEnt(Map<Long, EntCacheResDto> entCacheResDtoMap, KwcContractTradeUnit kwcContractTradeUnit) {
+        EntCacheResDto entCacheResDto = entCacheResDtoMap.get(kwcContractTradeUnit.getEntId());
+        if (Objects.nonNull(entCacheResDto)) {
+            kwcContractTradeUnit.setFirmName(entCacheResDto.getFirmName());
+        }
+        kwcContractTradeUnit.setContacts(entCacheResDto.getContacts());
+        kwcContractTradeUnit.setPhone(entCacheResDto.getPhone());
+    }
+
+    /**
+     * @param id 合同id
+     * @return KwcContractTradeUnit
+     * @desc: 根据合同id查企业记录
+     * @author: czh
+     * @date: 2023/7/20
+     */
+    public List<KwcContractTradeUnit> queryByContractId(Long id) {
+        LambdaQueryWrapper<KwcContractTradeUnit> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwcContractTradeUnit::getContractId, id);
+        wrapper.eq(KwcContractTradeUnit::getDelFlag, Global.NO);
+        wrapper.eq(KwcContractTradeUnit::getStatus, Global.NO);
+        return kwcContractTradeUnitMapper.selectList(wrapper);
+    }
 }
 
 

+ 25 - 9
sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractLogisticsMapper.xml

@@ -40,18 +40,34 @@
         del_flag
     </sql>
 
-    <select id="queryList" resultType="com.sckw.contract.model.vo.res.QueryListResVo">
-        select distinct a.*
+    <select id="queryList" resultType="com.sckw.contract.model.dto.res.QueryListResDto">
+         select a.amount,
+                a.charging,
+                a.name contactName,
+                a.contract_no,
+                c.create_by initiateBy,
+                c.create_time initiateTime,
+                a.create_time,
+                a.start_time,
+                a.end_time,
+                a.id,
+                a.remark,
+                a.signing_way,
+                d.create_time signTime,
+                a.status,
+                b.unit_type,
+                b.ent_id,
+                b.firm_name entName,
+                e.ent_id targetEntId,
+                e.firm_name targetEntName
           from kwc_contract_logistics a
-          left join kwc_contract_logistics_unit b on a.id = b.contractId
+          left join kwc_contract_logistics_unit b on a.id = b.contract_id and b.unit_type = #{entType}
+          left join kwc_contract_logistics_track c on a.id = c.contract_id and c.del_flag = 0 and c.type = 1
+          left join kwc_contract_logistics_track d on a.id = d.contract_id and d.del_flag = 0 and d.type = 0
+          left join kwc_contract_logistics_unit e on a.id = b.contract_id and b.unit_type != #{entType}
         where a.del_flag = 0
           and b.del_flag = 0
-          <if test="entType != null">
-              and b.unit_type = #{entType}
-          </if>
-          <if test="entId != null">
-              and b.ent_id = #{entId}
-          </if>
+          and b.ent_id = #{entId}
           <if test="startTime != null">
               and a.create_time >= #{startTime}
           </if>

+ 49 - 0
sckw-modules/sckw-contract/src/main/resources/mapper/KwcContractTradeMapper.xml

@@ -37,4 +37,53 @@
         status,create_by,create_time,
         update_by,update_time,del_flag
     </sql>
+
+
+    <select id="queryList" resultType="com.sckw.contract.model.dto.res.QueryListResDto">
+        select a.amount,
+               a.trading,
+               a.name contactName,
+               a.contract_no,
+               c.create_by initiateBy,
+               c.create_time initiateTime,
+               a.create_time,
+               a.start_time,
+               a.end_time,
+               a.id,
+               a.remark,
+               a.signing_way,
+               d.create_time signTime,
+               a.status,
+               b.unit_type,
+               b.ent_id,
+               b.firm_name entName,
+               e.ent_id targetEntId,
+               e.firm_name targetEntName
+          from kwc_contract_trade a
+          left join kwc_contract_trade_unit b on a.id = b.contract_id and b.unit_type = #{entType}
+          left join kwc_contract_trade_track c on a.id = c.contract_id and c.del_flag = 0 and c.type = 1
+          left join kwc_contract_trade_track d on a.id = d.contract_id and d.del_flag = 0 and d.type = 0
+          left join kwc_contract_trade_unit e on a.id = b.contract_id and b.unit_type != #{entType}
+         where a.del_flag = 0
+           and b.del_flag = 0
+           and b.ent_id = #{entId}
+        <if test="startTime != null">
+            and a.create_time >= #{startTime}
+        </if>
+        <if test="endTime != null">
+            and a.create_time &lt;= #{endTime}
+        </if>
+        <if test="status != null">
+            and a.status = #{status}
+        </if>
+        <if test="keywords != null and keywords != ''">
+            and (b.firm_name like concat('%', #{keywords}, '%') or b.contacts like concat('%', #{keywords}, '%') or b.phone like concat('%', #{keywords}, '%'))
+        </if>
+        <if test="idList != null and idList.size() > 0">
+            and a.id in
+            <foreach collection="idList" open="(" close=")" separator="," item="item">
+                #{item}
+            </foreach>
+        </if>
+    </select>
 </mapper>

+ 8 - 0
sckw-modules/sckw-example/pom.xml

@@ -88,6 +88,14 @@
             <artifactId>sckw-message-api</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-order-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-payment-api</artifactId>
+        </dependency>
         <!--junit-->
         <dependency>
             <groupId>junit</groupId>

+ 12 - 1
sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/MessageApiController.java

@@ -2,6 +2,8 @@ package com.sckw.example.controller;
 
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.message.api.dubbo.SmsInfoService;
+import com.sckw.order.api.dubbo.TradeOrderInfoService;
+import com.sckw.order.api.model.OrderDetailRes;
 import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -9,7 +11,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
- * @desc: TODO
+ * @desc: 测试
  * @author: yzc
  * @date: 2023-06-13 14:20
  */
@@ -20,9 +22,18 @@ public class MessageApiController {
     @DubboReference(version = "2.0.0", group = "design", check = false)
     private SmsInfoService smsInfoService;
 
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    private TradeOrderInfoService tradeOrderInfoService;
+
     @GetMapping("/getVerifyCode")
     public HttpResult getVerifyCode() {
         String verifyCode = smsInfoService.getVerifyCode("17780832879");
         return HttpResult.ok("获取验证码成功", verifyCode);
     }
+
+    @GetMapping("/getOrderDetail")
+    public HttpResult getOrderDetail() {
+        OrderDetailRes orderDetailById = tradeOrderInfoService.getOrderDetailById(162213167693303808L);
+        return HttpResult.ok("获取订单详情成功", orderDetailById);
+    }
 }

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно