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

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

czh 2 лет назад
Родитель
Сommit
b82070809f
85 измененных файлов с 3666 добавлено и 201 удалено
  1. 6 3
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java
  2. 1 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictTypeEnum.java
  3. 37 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillEnum.java
  4. 64 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/GlobalTransactionalEnum.java
  5. 2 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/LogisticsOrderEnum.java
  6. 20 0
      sckw-gateway/src/main/resources/bootstrap-test.yml
  7. 1 1
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/dubbo/PayCenterDubboService.java
  8. 11 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/CashDetail.java
  9. 15 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/CashDetailItem.java
  10. 24 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/CashItem.java
  11. 18 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Channel.java
  12. 26 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Detail.java
  13. 14 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Filter.java
  14. 17 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Freeze.java
  15. 24 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/LogItem.java
  16. 37 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/MemberCreate.java
  17. 20 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/MemberRes.java
  18. 20 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Money.java
  19. 59 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Operate.java
  20. 22 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/OperateDown.java
  21. 19 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Order.java
  22. 24 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PatchPay.java
  23. 23 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PayIndex.java
  24. 39 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PayRecord.java
  25. 18 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PayRecordPage.java
  26. 31 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PrePayIndex.java
  27. 32 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Record.java
  28. 21 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/RrePayDetail.java
  29. 10 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Tips.java
  30. 44 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/WalletInfo.java
  31. 21 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/common/BusinessNo.java
  32. 23 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/common/Page.java
  33. 1 1
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/common/R.java
  34. 22 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/page/CashPage.java
  35. 20 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/page/PrePayIndexPage.java
  36. 20 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/page/RecordPage.java
  37. 1 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfFleetService.java
  38. 1 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckReportService.java
  39. 1 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java
  40. 24 0
      sckw-modules/sckw-message/src/main/resources/bootstrap-test.yml
  41. 154 0
      sckw-modules/sckw-message/src/main/resources/log4j2.xml
  42. 4 4
      sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderController.java
  43. 169 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTransportDemandController.java
  44. 1 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTransportDemandMapper.java
  45. 45 14
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTransportDemand.java
  46. 59 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/TransportDemandExport.java
  47. 112 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AddTransportDemandDraftParam.java
  48. 120 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AddTransportDemandParam.java
  49. 49 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/ExportTransportDemandParam.java
  50. 75 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/PurchaseOrderDraftParam.java
  51. 63 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/SelectTransportDemandParam.java
  52. 57 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/StatisticTransportDemandParam.java
  53. 20 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/TransportDemandSquaresParam.java
  54. 115 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/UpdateTransportDemandParam.java
  55. 21 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/ValetOrderDraftParam.java
  56. 148 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/TransportDemandDetailRes.java
  57. 7 7
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  58. 153 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTransportDemandService.java
  59. 0 20
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwpTransportDemandService.java
  60. 24 0
      sckw-modules/sckw-order/src/main/resources/bootstrap-test.yml
  61. 154 0
      sckw-modules/sckw-order/src/main/resources/log4j2.xml
  62. 5 3
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java
  63. 24 0
      sckw-modules/sckw-product/src/main/resources/bootstrap-test.yml
  64. 154 0
      sckw-modules/sckw-product/src/main/resources/log4j2.xml
  65. 18 6
      sckw-modules/sckw-report/src/main/java/com/sckw/report/consumer/SckwBusSumConsumer.java
  66. 0 14
      sckw-modules/sckw-report/src/main/java/com/sckw/report/controller/KwTransportController.java
  67. 18 6
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderService.java
  68. 11 1
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/param/TradeOrderListStatisticParam.java
  69. 26 0
      sckw-modules/sckw-report/src/main/resources/bootstrap-test.yml
  70. 6 0
      sckw-modules/sckw-transport/pom.xml
  71. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/AcceptCarriageOrderController.java
  72. 38 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java
  73. 93 17
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/LogisticsConsignmentController.java
  74. 4 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderCirculateMapper.java
  75. 49 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/ConfirmRefuseSendCarDto.java
  76. 4 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderDTO.java
  77. 42 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OrderFinishDTO.java
  78. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/SendCarDto1.java
  79. 3 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/StopOrderTakingDTO.java
  80. 62 24
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java
  81. 490 38
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java
  82. 195 14
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java
  83. 23 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java
  84. 10 9
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderCirculateMapper.xml
  85. 6 4
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml

+ 6 - 3
sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java

@@ -49,8 +49,8 @@ public enum DictEnum {
     TORDER_STATUS_5("tOrder_status", "5", "已完结"),
     TORDER_STATUS_6("tOrder_status", "6", "已对账"),
     TORDER_STATUS_7("tOrder_status", "7", "已结算"),
-    CONTRACT_STATUS_0("contract_status", "0", "待签约"),
-    CONTRACT_STATUS_1("contract_status", "1", "已签约"),
+    CONTRACT_STATUS_0("contract_status", "1", "待签约"),
+    CONTRACT_STATUS_1("contract_status", "0", "已签约"),
     SETTLEMENT_CYCLE_0("settlement_cycle", "0", "周结"),
     SETTLEMENT_CYCLE_1("settlement_cycle", "1", "月结"),
     SETTLEMENT_CYCLE_2("settlement_cycle", "2", "季结"),
@@ -72,7 +72,10 @@ public enum DictEnum {
     CHARGING_TYPE_2("charging_type", "2", "按卸货量") ,
     CHARGING_TYPE_3("charging_type", "3", "按车次"),
     SIGNING_WAY_1("signing_way", "1", "线上签约"),
-    SIGNING_WAY_2("signing_way", "2", "线下签约");
+    SIGNING_WAY_2("signing_way", "2", "线下签约"),
+    TRANSPORT_DEMAND_STATUS_0("transport_demand_status", "0","已保存"),
+    TRANSPORT_DEMAND_STATUS_1("transport_demand_status", "1","已上架"),
+    TRANSPORT_DEMAND_STATUS_2("transport_demand_status", "2","已下架");
 
     private final String type;
     private final String value;

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

@@ -39,6 +39,7 @@ public enum DictTypeEnum {
     USE_TYPE("use_type", "使用性质"),
     SIGNING_WAY("signing_way", "签约方式"),
     WEIGHT_CAR("weight_car", "以车的限重"),
+    TRANSPORT_DEMAND_STATUS("transport_demand_status", "运需状态"),
     ;
 
     private final String type;

+ 37 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillEnum.java

@@ -6,15 +6,51 @@ package com.sckw.core.model.enums;
  * @date 2023-07-14 14:07:23
  */
 public enum CarWaybillEnum {
+    /**
+     * 待接单
+     */
     PENDING_ORDER(1, "pendingOrder", "1", "待接单"),
+    /**
+     * 待出车
+     */
     PENDING_VEHICLE(2, "pendingVehicle", "2", "待出车"),
+    /**
+     * 已出车
+     */
     EXIT_COMPLETED(3, "exitCompleted", "3", "已出车"),
+    /**
+     * 到达装货点
+     */
     WAIT_LOADING(4, "waitLoading", "4", "到达装货点"),
+    /**
+     * 已装货
+     */
     COMPLETION_LOADING(5, "completionLoading", "5", "已装货"),
+    /**
+     * 到达卸货点
+     */
     WAIT_UNLOADING(6, "waitUnloading", "6", "到达卸货点"),
+    /**
+     * 已卸货
+     */
     COMPLETION_UNLOADING(7, "completionUnloading", "7", "已卸货"),
+    /**
+     * 已核单
+     */
     APPROVAL_COMPLETED(8, "approvalCompleted", "8", "已核单"),
-    REJECT_ORDER(9, "rejectOrder", "9", "拒接单");
+    /**
+     * 拒接单
+     */
+    REJECT_ORDER(9, "rejectOrder", "9", "拒接单"),
+    /**
+     * 拒出车
+     */
+    REFUSE_TRAFFIC(10, "refuseTraffic", "10", "拒出车"),
+    /**
+     * 已撤销
+     */
+    REVOKED(11, "revoked", "11", "已撤销"),
+    ;
 
     private final Integer code;
     private final String value;

+ 64 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/GlobalTransactionalEnum.java

@@ -0,0 +1,64 @@
+package com.sckw.core.model.enums;
+
+import org.springframework.util.ObjectUtils;
+
+/**
+ * @author lfdc
+ * @version 1.0
+ * @className GlobalTransactionalEnum
+ * @description 全局事务枚举值
+ * @company sckw
+ * @date 2023-06-05 13:06:54
+ */
+public enum GlobalTransactionalEnum {
+    /**
+     * 默认全局事务
+     */
+    DEFAULT_TX_GROUP(1, "default_tx_group"),
+    /**
+     * 对应系统服务全局事务
+     */
+    SCKW_SYSTEM_SEATA_SERVICE_GROUP(2, "sckw-system-seata-service-group"),
+    /**
+     * 对应报表服务全局事务
+     */
+    SCKW_REPORT_SEATA_SERVICE_GROUP(3, "sckw-report-seata-service-group"),
+    /**
+     * 对应运输服务全局事务
+     */
+    SCKW_TRANSPORT_SEATA_SERVICE_GROUP(4, "sckw-transport-seata-service-group"),
+    ;
+
+    private final Integer code;
+    private final String name;
+
+    GlobalTransactionalEnum(Integer code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+    public Integer getCode() {
+        return code;
+    }
+    public String getName() {
+        return name;
+    }
+    public static String getValue(Integer code) {
+        for (GlobalTransactionalEnum ele : GlobalTransactionalEnum.values()) {
+            if (ele.getCode().equals(code)) {
+                return ele.getName();
+            }
+        }
+        return null;
+    }
+    String getGlobalTransactionalEnum(Integer code) {
+        if (ObjectUtils.isEmpty(code)) {
+            return null;
+        }
+        for (GlobalTransactionalEnum globalTransactionalEnum : GlobalTransactionalEnum.values()) {
+            if (globalTransactionalEnum.getCode().equals(code)) {
+                return globalTransactionalEnum.getName();
+            }
+        }
+        return null;
+    }
+}

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

@@ -1,6 +1,7 @@
 package com.sckw.core.model.enums;
 
 import com.sckw.core.common.enums.NumberConstant;
+import lombok.Getter;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -10,6 +11,7 @@ import java.util.List;
  * @description 物流订单-单据状态
  * @date 2023-07-07 14:07:23
  */
+@Getter
 public enum LogisticsOrderEnum {
     /**
      * 物流订单-待签约

+ 20 - 0
sckw-gateway/src/main/resources/bootstrap-test.yml

@@ -0,0 +1,20 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: 10.10.10.224:8848
+        # 命名空间
+        namespace: sckw-service-platform
+        # 共享配置
+        group: sckw-service-platform
+      config:
+        # 配置中心地址
+        server-addr: 10.10.10.224:8848
+        # 配置文件格式
+        file-extension: yaml
+        # 命名空间
+        namespace: sckw-service-platform
+        # 共享配置
+        group: sckw-service-platform
+

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

@@ -2,8 +2,8 @@ package com.sckw.payment.api.dubbo;
 
 import com.sckw.payment.api.model.constant.ChannelEnum;
 import com.sckw.payment.api.model.dto.MemberDetail;
-import com.sckw.payment.api.model.dto.R;
 import com.sckw.payment.api.model.dto.WalletDto;
+import com.sckw.payment.api.model.dto.common.R;
 
 import java.util.List;
 

+ 11 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/CashDetail.java

@@ -0,0 +1,11 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CashDetail {
+    private List<CashDetailItem> timeline;
+    private List<List<CashDetailItem>> content;
+}

+ 15 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/CashDetailItem.java

@@ -0,0 +1,15 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class CashDetailItem implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 7233982475006805580L;
+    private String color;
+    private String title;
+    private String value;
+}

+ 24 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/CashItem.java

@@ -0,0 +1,24 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 15:19:14
+ */
+@NoArgsConstructor
+@Data
+public class CashItem implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 856945436214113979L;
+    private String orderNo;
+    private Integer status;
+    private Integer money;
+    private Integer balance;
+    private String remarks;
+    private String createTime;
+}

+ 18 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Channel.java

@@ -0,0 +1,18 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class Channel implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1366768042884725288L;
+    private String image;
+    private String code;
+    private String name;
+    private String logo;
+}

+ 26 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Detail.java

@@ -0,0 +1,26 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class Detail implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -261200729891413350L;
+    @JSONField(name = "order_no")
+    private String orderNo;
+
+    @JSONField(name = "create_time")
+    private String createTime;
+
+    @JSONField(name = "money")
+    private int money;
+
+    @JSONField(name = "status")
+    private String status;
+}

+ 14 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Filter.java

@@ -0,0 +1,14 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class Filter implements Serializable {
+	@Serial
+	private static final long serialVersionUID = 4605531733184843818L;
+	private String uid;
+	private String text;
+}

+ 17 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Freeze.java

@@ -0,0 +1,17 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class Freeze implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 5111111815474400770L;
+    private String filter;
+    private int money;
+    private int balance;
+    private String businessNo;
+    private String channel;
+}

+ 24 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/LogItem.java

@@ -0,0 +1,24 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class LogItem implements Serializable {
+	@Serial
+
+	private static final long serialVersionUID = 1822937785140299845L;
+	@JSONField(name="create_time")
+	private String createTime;
+
+	@JSONField(name="title")
+	private String title;
+
+	@JSONField(name="content")
+	private String content;
+}

+ 37 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/MemberCreate.java

@@ -0,0 +1,37 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 16:34:32
+ */
+@Data
+public class MemberCreate implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -6655826243958219906L;
+    @JSONField(name = "company_name")
+    private String companyName;
+    @JSONField(name = "license")
+    private String license;
+    @JSONField(name = "legalName")
+    private String legalName;
+    @JSONField(name = "legalPhone")
+    private String legalPhone;
+    @JSONField(name = "legalIds")
+    private String legalIds;
+    @JSONField(name = "accountNo")
+    private String accountNo;
+    @JSONField(name = "parentBankName")
+    private String parentBankName;
+    @JSONField(name = "unionBank")
+    private String unionBank;
+    @JSONField(name = "bankName")
+    private String bankName;
+    @JSONField(name = "channel")
+    private String channel;
+}

+ 20 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/MemberRes.java

@@ -0,0 +1,20 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 16:42:36
+ */
+@Getter
+@Setter
+public class MemberRes implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 5099179450696261534L;
+    private String uid;
+    private String url;
+}

+ 20 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Money.java

@@ -0,0 +1,20 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class Money implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 5979366827536068774L;
+    /**
+     * 可用余额
+     */
+    private int value;
+    /**
+     * 提示
+     */
+    private Tips tips;
+}

+ 59 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Operate.java

@@ -0,0 +1,59 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class Operate {
+    @JSONField(name = "create_time")
+    private String createTime;
+    @JSONField(name = "wd_money")
+    private Money wdMoney;
+    /**
+     * 类型对应文案
+     */
+    @JSONField(name = "type_text")
+    private String typeText;
+    /**
+     * 类型
+     */
+    private String type;
+    /**
+     * 预付金额
+     */
+    @JSONField(name = "ap_money")
+    private Money apMoney;
+    /**
+     * 对方
+     */
+    private Filter filter;
+    /**
+     * 自身uid
+     */
+    private String uid;
+    /**
+     * 下载文件
+     */
+    private List<String> file;
+    private Money money;
+    /**
+     * 操作金额
+     */
+    @JSONField(name = "operate_money")
+    private int operateMoney;
+    /**
+     * 总冻结金额
+     */
+    @JSONField(name = "freeze_money")
+    private Money freezeMoney;
+    /**
+     * 备注
+     */
+    private String remarks;
+    /**
+     * 当前状态:0:关闭,1:已完成,2:进行中
+     */
+    private int status;
+}

+ 22 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/OperateDown.java

@@ -0,0 +1,22 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 15:37:46
+ */
+@Getter
+@Setter
+public class OperateDown implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 2389472385575103413L;
+    private String url;
+    @JSONField(name = "expire_time")
+    private String expireTime;
+}

+ 19 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Order.java

@@ -0,0 +1,19 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 15:30:59
+ */
+@Getter
+@Setter
+public class Order implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -3148504181066374194L;
+    private String order_no;
+}

+ 24 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PatchPay.java

@@ -0,0 +1,24 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 17:09:42
+ */
+@Data
+public class PatchPay implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -719246443006291337L;
+
+    @JSONField(name = "uid")
+    private String uid;
+    @JSONField(name = "money")
+    private Integer money;
+    @JSONField(name = "remark")
+    private String remark;
+}

+ 23 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PayIndex.java

@@ -0,0 +1,23 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class PayIndex implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -114261812502553262L;
+    @JSONField(name = "order_no")
+    private String orderNo;
+
+    @JSONField(name = "uid")
+    private String uid;
+
+    @JSONField(name = "pay_url")
+    private String payUrl;
+}

+ 39 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PayRecord.java

@@ -0,0 +1,39 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class PayRecord implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 2380188390683973411L;
+    @JSONField(name = "order_no")
+    private String orderNo;
+
+    @JSONField(name = "filter")
+    private String filter;
+
+    @JSONField(name = "uid")
+    private String uid;
+
+    @JSONField(name = "money")
+    private int money;
+
+    @JSONField(name = "create_time")
+    private String createTime;
+
+    @JSONField(name = "pay_url")
+    private String payUrl;
+
+    @JSONField(name = "pay_time")
+    private Object payTime;
+
+    @JSONField(name = "status")
+    private int status;
+}

+ 18 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PayRecordPage.java

@@ -0,0 +1,18 @@
+package com.sckw.payment.api.model.dto;
+
+import com.sckw.payment.api.model.dto.common.Page;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 16:30:37
+ */
+@Getter
+@Setter
+public class PayRecordPage extends Page<PayRecord> {
+    @Serial
+    private static final long serialVersionUID = 3222385805745628754L;
+}

+ 31 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/PrePayIndex.java

@@ -0,0 +1,31 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class PrePayIndex implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 7340075510663637767L;
+
+    @JSONField(name = "order_no")
+    private String orderNo;
+
+    @JSONField(name = "money")
+    private int money;
+
+    @JSONField(name = "create_time")
+    private String createTime;
+
+    @JSONField(name = "status_text")
+    private String statusText;
+
+    @JSONField(name = "status")
+    private int status;
+
+}

+ 32 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Record.java

@@ -0,0 +1,32 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class Record implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 2168264969431548187L;
+    @JSONField(name = "money")
+    private int money;
+
+    @JSONField(name = "balance")
+    private int balance;
+
+    @JSONField(name = "create_time")
+    private String createTime;
+
+    @JSONField(name = "channel")
+    private String channel;
+
+    @JSONField(name = "type")
+    private int type;
+
+    @JSONField(name = "content")
+    private String content;
+}

+ 21 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/RrePayDetail.java

@@ -0,0 +1,21 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+@Getter
+@Setter
+public class RrePayDetail implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 159112379752575265L;
+    @JSONField(name = "log")
+    private List<LogItem> log;
+
+    @JSONField(name = "detail")
+    private Detail detail;
+}

+ 10 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/Tips.java

@@ -0,0 +1,10 @@
+package com.sckw.payment.api.model.dto;
+
+import lombok.Data;
+
+@Data
+public class Tips{
+	private String color;
+	private String title;
+	private int value;
+}

+ 44 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/WalletInfo.java

@@ -0,0 +1,44 @@
+package com.sckw.payment.api.model.dto;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 钱包清单
+ */
+@Data
+public class WalletInfo implements Serializable {
+    /**
+     * 企业名称
+     */
+    private String name;
+    /**
+     * 钱包名称
+     */
+    @JSONField(name = "wallet_name")
+    private String walletName;
+
+    /**
+     * 渠道
+     */
+    private String channel;
+
+    private Integer status;
+
+    /**
+     * 预付金额(分)
+     */
+    @JSONField(name = "ap_money")
+    private Long apMoney;
+    /**
+     * 提现余额
+     */
+    @JSONField(name = "wd_money")
+    private Long wdMoney;
+    /**
+     * 可用余额
+     */
+    private Long money;
+}

+ 21 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/common/BusinessNo.java

@@ -0,0 +1,21 @@
+package com.sckw.payment.api.model.dto.common;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 16:59:59
+ */
+@Getter
+@Setter
+public class BusinessNo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -8283758459410298302L;
+    @JSONField(name = "business_no")
+    private String businessNo;
+}

+ 23 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/common/Page.java

@@ -0,0 +1,23 @@
+package com.sckw.payment.api.model.dto.common;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 15:17:23
+ */
+@Getter
+@Setter
+public class Page<T> implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 8540276865834437578L;
+    private long total;
+    private long page;
+    private long pageSize;
+    private List<T> rows;
+}

+ 1 - 1
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/R.java → sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/common/R.java

@@ -1,4 +1,4 @@
-package com.sckw.payment.api.model.dto;
+package com.sckw.payment.api.model.dto.common;
 
 import lombok.*;
 import lombok.experimental.Accessors;

+ 22 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/page/CashPage.java

@@ -0,0 +1,22 @@
+package com.sckw.payment.api.model.dto.page;
+
+import com.sckw.payment.api.model.dto.CashItem;
+import com.sckw.payment.api.model.dto.common.Page;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 15:21:05
+ */
+@Getter
+@Setter
+public class CashPage extends Page<CashItem> {
+    @Serial
+    private static final long serialVersionUID = 8737528173711734529L;
+
+    private long total_withdraw_money;
+    private long total_balance;
+}

+ 20 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/page/PrePayIndexPage.java

@@ -0,0 +1,20 @@
+package com.sckw.payment.api.model.dto.page;
+
+import com.sckw.payment.api.model.dto.PrePayIndex;
+import com.sckw.payment.api.model.dto.common.Page;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 16:23:34
+ */
+@Getter
+@Setter
+public class PrePayIndexPage extends Page<PrePayIndex> {
+
+    @Serial
+    private static final long serialVersionUID = 1163213440816151568L;
+}

+ 20 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/dto/page/RecordPage.java

@@ -0,0 +1,20 @@
+package com.sckw.payment.api.model.dto.page;
+
+import com.sckw.payment.api.model.dto.Record;
+import com.sckw.payment.api.model.dto.common.Page;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-25 15:21:05
+ */
+@Getter
+@Setter
+public class RecordPage extends Page<Record> {
+    @Serial
+    private static final long serialVersionUID = 8737528173711734529L;
+
+}

+ 1 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfFleetService.java

@@ -151,7 +151,7 @@ public class KwfFleetService {
                     throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.DELETE_FAIL);
                 }
             } else {
-                HttpResult.error("选择删除的数据已不存在!");
+                return HttpResult.error("选择删除的数据已不存在!");
             }
         }
         return HttpResult.ok("删除成功!");

+ 1 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckReportService.java

@@ -323,7 +323,7 @@ public class KwfTruckReportService {
                     throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.DELETE_FAIL);
                 }
             } else {
-                HttpResult.error("选择删除的数据已不存在!");
+                return HttpResult.error("选择删除的数据已不存在!");
             }
         }
         return HttpResult.ok("删除成功!");

+ 1 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java

@@ -296,7 +296,7 @@ public class KwfTruckService {
                     throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.DELETE_FAIL);
                 }
             } else {
-                HttpResult.error("选择删除的数据已不存在!");
+                return HttpResult.error("选择删除的数据已不存在!");
             }
         }
         return HttpResult.ok("删除成功!");

+ 24 - 0
sckw-modules/sckw-message/src/main/resources/bootstrap-test.yml

@@ -0,0 +1,24 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: 10.10.10.224:8848
+        # 命名空间
+        namespace: sckw-service-platform
+        # 共享配置
+        group: sckw-service-platform
+      config:
+        # 配置中心地址
+        server-addr: 10.10.10.224:8848
+        # 配置文件格式
+        file-extension: yaml
+        # 命名空间
+        namespace: sckw-service-platform
+        # 共享配置
+        group: sckw-service-platform
+        #可以读多个配置文件  需要在同一个命名空间下面可以是不同的组
+        extension-configs:
+          - dataId: sckw-common.yml
+            group: sckw-service-platform
+            refresh: true

+ 154 - 0
sckw-modules/sckw-message/src/main/resources/log4j2.xml

@@ -0,0 +1,154 @@
+<?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-message"/>
+    </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="100MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名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="100MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名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="100MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名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="100MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名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="100MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名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>

+ 4 - 4
sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderController.java

@@ -30,8 +30,8 @@ public class KwoTradeOrderController {
      */
     @GlobalTransactional(name = "default_tx_group")
     @PostMapping(value = "/addPurchaseOrderDraft", produces = MediaType.APPLICATION_JSON_VALUE)
-    public HttpResult addPurchaseOrderDraft(@RequestBody PurchaseOrderParam purchaseOrderParam) {
-        kwoTradeOrderService.addPurchaseOrderDraft(purchaseOrderParam);
+    public HttpResult addPurchaseOrderDraft(@RequestBody @Validated PurchaseOrderDraftParam param) {
+        kwoTradeOrderService.addPurchaseOrderDraft(param);
         return HttpResult.ok("采购下单草稿保存成功");
     }
 
@@ -58,8 +58,8 @@ public class KwoTradeOrderController {
      */
     @GlobalTransactional(name = "default_tx_group")
     @PostMapping(value = "/addValetOrderDraft", produces = MediaType.APPLICATION_JSON_VALUE)
-    public HttpResult addValetOrderDraft(@RequestBody ValetOrderParam valetOrderParam) {
-        kwoTradeOrderService.addValetOrderDraft(valetOrderParam);
+    public HttpResult addValetOrderDraft(@RequestBody @Validated ValetOrderDraftParam param) {
+        kwoTradeOrderService.addValetOrderDraft(param);
         return HttpResult.ok("代客下单草稿保存成功");
     }
 

+ 169 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTransportDemandController.java

@@ -0,0 +1,169 @@
+package com.sckw.order.controller;
+
+import com.sckw.core.exception.BusinessException;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.utils.ExcelUtil;
+import com.sckw.order.model.dto.TransportDemandExport;
+import com.sckw.order.model.vo.req.*;
+import com.sckw.order.serivce.KwoTransportDemandService;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.MediaType;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @desc: 运需controller
+ * @author: yzc
+ * @date: 2023-07-25 16:21
+ */
+@RestController
+@RequestMapping(value = "/kwoTransportDemand")
+@RequiredArgsConstructor
+public class KwoTransportDemandController {
+
+    private final KwoTransportDemandService kwoTransportDemandService;
+
+    /**
+     * @desc: 新增运需草稿
+     * @author: yzc
+     * @date: 2023-07-26 9:42
+     * @Param param:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/addDraft", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult addDraft(@RequestBody @Validated AddTransportDemandDraftParam param) {
+        kwoTransportDemandService.addDraft(param);
+        return HttpResult.ok("新增运需草稿成功");
+    }
+
+
+    /**
+     * @desc: 新增运需上架
+     * @author: yzc
+     * @date: 2023-07-26 9:42
+     * @Param param:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/addShelves", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult addShelves(@RequestBody @Validated AddTransportDemandParam param) {
+        kwoTransportDemandService.addShelves(param);
+        return HttpResult.ok("新增运需上架成功");
+    }
+
+
+    /**
+     * @desc: 运需详情
+     * @author: yzc
+     * @date: 2023-07-26 9:43
+     * @Param id:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @GetMapping("/detail")
+    public HttpResult detail(@RequestParam Long id) {
+        return HttpResult.ok(kwoTransportDemandService.detail(id));
+    }
+
+    /**
+     * @desc: 运需修改
+     * @author: yzc
+     * @date: 2023-07-26 9:43
+     * @Param param:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/update", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult update(@RequestBody @Validated UpdateTransportDemandParam param) {
+        kwoTransportDemandService.update(param);
+        return HttpResult.ok("运需修改成功!");
+    }
+
+    /**
+     * @desc: 运需分页查询
+     * @author: yzc
+     * @date: 2023-07-26 10:05
+     * @Param param:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/select", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult select(@RequestBody @Validated SelectTransportDemandParam param) {
+        return HttpResult.ok(kwoTransportDemandService.select(param));
+    }
+
+    /**
+     * @desc: 运需统计
+     * @author: yzc
+     * @date: 2023-07-26 10:09
+     * @Param param:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/statistic", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult statistic(@RequestBody StatisticTransportDemandParam param) {
+        return HttpResult.ok(kwoTransportDemandService.statistic(param));
+    }
+
+    /**
+     * @desc: 运需导出
+     * @author: yzc
+     * @date: 2023-07-26 10:09
+     * @Param params:
+     * @Param response:
+     * @return: void
+     */
+    @PostMapping(value = "/export", produces = MediaType.APPLICATION_JSON_VALUE)
+    public void export(@RequestBody ExportTransportDemandParam param, HttpServletResponse response) {
+        List<TransportDemandExport> list = kwoTransportDemandService.export(param);
+        if (CollectionUtils.isEmpty(list)) {
+            throw new BusinessException("导出数据为空!");
+        }
+        ExcelUtil.downData(response, TransportDemandExport.class, list);
+    }
+
+    /**
+     * @desc: 运需上架
+     * @author: yzc
+     * @date: 2023-07-26 10:24
+     * @Param id:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @GetMapping("/putOnShelves")
+    public HttpResult putOnShelves(@RequestParam Long id) {
+        kwoTransportDemandService.putOnShelves(id);
+        return HttpResult.ok("上架成功");
+    }
+
+    /**
+     * @desc: 运需批量下架
+     * @author: yzc
+     * @date: 2023-07-26 10:25
+     * @Param ids:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @GetMapping("/batchTakeOffShelves")
+    public HttpResult batchTakeOffShelves(@RequestParam List<Long> ids) {
+        kwoTransportDemandService.batchTakeOffShelves(ids);
+        return HttpResult.ok("批量下架成功");
+    }
+
+    /**
+     * @desc: 运需批量删除
+     * @author: yzc
+     * @date: 2023-07-26 10:26
+     * @Param ids:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @GetMapping("/batchDelete")
+    public HttpResult batchDelete(@RequestParam List<Long> ids) {
+        kwoTransportDemandService.batchDelete(ids);
+        return HttpResult.ok("批量删除成功");
+    }
+
+    @PostMapping(value = "/demandSquaresList", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult demandSquaresList(@RequestBody @Validated TransportDemandSquaresParam param) {
+        return HttpResult.ok(kwoTransportDemandService.demandSquaresList(param));
+    }
+
+
+}

+ 1 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwpTransportDemandMapper.java → sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTransportDemandMapper.java

@@ -10,5 +10,5 @@ import org.apache.ibatis.annotations.Mapper;
  * @date: 2023-06-25 14:45
  */
 @Mapper
-public interface KwpTransportDemandMapper extends BaseMapper<KwoTransportDemand> {
+public interface KwoTransportDemandMapper extends BaseMapper<KwoTransportDemand> {
 }

+ 45 - 14
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTransportDemand.java

@@ -9,7 +9,7 @@ import lombok.experimental.Accessors;
 
 import java.io.Serial;
 import java.io.Serializable;
-import java.math.BigDecimal;
+import java.time.LocalDate;
 
 /**
  * @desc: 运需
@@ -42,14 +42,9 @@ public class KwoTransportDemand extends BaseModel implements Serializable {
     private String goodsType;
 
     /**
-     * 尺寸大小
+     * 商品规格
      */
-    private String size;
-
-    /**
-     * 单位(吨、方、件、箱、其他)
-     */
-    private String unit;
+    private String spec;
 
     /**
      * 交易方式(预付款、货到付款、线下付款)
@@ -59,20 +54,56 @@ public class KwoTransportDemand extends BaseModel implements Serializable {
     /**
      * 运需单价(元)
      */
-    private BigDecimal price;
+    private String price;
 
     /**
      * 运输总量
      */
-    private BigDecimal totalNum;
+    private String amount;
 
     /**
-     * 装货地址id
+     * 截止时间(yyyy-MM-dd)
      */
-    private Long shippingAddressId;
+    private LocalDate deadline;
 
     /**
-     * 卸货地址id
+     * 联系人姓名
      */
-    private Long unloadingAddressId;
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 装货区域code
+     */
+    private Integer loadAreaCode;
+
+    /**
+     * 装货区域名称
+     */
+    private String loadAreaName;
+
+    /**
+     * 装货详细地址
+     */
+    private String loadDetailAddress;
+
+    /**
+     * 卸货区域code
+     */
+    private Integer unloadAreaCode;
+
+    /**
+     * 卸货区域名称
+     */
+    private String unloadAreaName;
+
+    /**
+     * 卸货详细地址
+     */
+    private String unloadDetailAddress;
+
 }

+ 59 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/TransportDemandExport.java

@@ -0,0 +1,59 @@
+package com.sckw.order.model.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.sckw.excel.annotation.ExcelContext;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @desc: TODO
+ * @author: yzc
+ * @date: 2023-07-26 10:14
+ */
+@Data
+@Accessors(chain = true)
+@ExcelContext(fileName = "运需列表信息", sheetName = "运需列表信息")
+public class TransportDemandExport implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -7951209824419422786L;
+
+    @ExcelProperty(value = "状态", index = 0)
+    private String statusLabel;
+
+    @ExcelProperty(value = "商品名称", index = 1)
+    private String name;
+
+    @ExcelProperty(value = "分类", index = 2)
+    private String goodsTypeLabel;
+
+    @ExcelProperty(value = "规格", index = 3)
+    private String spec;
+
+    @ExcelProperty(value = "运需单价", index = 4)
+    private String price;
+
+    @ExcelProperty(value = "总计划量", index = 5)
+    private String amount;
+
+    @ExcelProperty(value = "装货地址", index = 6)
+    private String loadAddress;
+
+    @ExcelProperty(value = "卸货地址", index = 7)
+    private String unloadAddress;
+
+    @ExcelProperty(value = "截止时间", index = 8)
+    private String deadline;
+
+    @ExcelProperty(value = "创建时间", index = 9)
+    private String createTime;
+
+    @ExcelProperty(value = "更新时间", index = 10)
+    private String updateTime;
+
+    @ExcelProperty(value = "备注", index = 11)
+    private String remark;
+
+}

+ 112 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AddTransportDemandDraftParam.java

@@ -0,0 +1,112 @@
+package com.sckw.order.model.vo.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.Pattern;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Length;
+
+import java.time.LocalDate;
+
+/**
+ * @desc: 添加运需草稿请求参数
+ * @author: yzc
+ * @date: 2023-07-26 9:16
+ */
+@Getter
+@Setter
+@ToString
+public class AddTransportDemandDraftParam {
+
+    /**
+     * 商品名称
+     */
+    @Length(max = 50, message = "商品名称最多支持50字")
+    private String name;
+
+    /**
+     * 商品分类
+     */
+    private String goodsType;
+
+    /**
+     * 商品规格
+     */
+    @Length(max = 20, message = "商品规格最多支持20字")
+    private String spec;
+
+    /**
+     * 交易方式(预付款、货到付款、线下付款)
+     */
+    private String trading;
+
+    /**
+     * 运需单价
+     */
+    @Length(max = 20, message = "运需单价最多支持20字")
+    private String price;
+
+    /**
+     * 运输总量
+     */
+    @Length(max = 20, message = "运输总量最多支持20字")
+    private String amount;
+
+    /**
+     * 截止时间(yyyy-MM-dd)
+     */
+    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate deadline;
+
+    /**
+     * 联系人姓名
+     */
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    @Pattern(regexp = "^1[3456789]\\d{9}$", message = "非法手机号格式")
+    private String phone;
+
+    /**
+     * 装货区域code
+     */
+    private Integer loadAreaCode;
+
+    /**
+     * 装货区域名称
+     */
+    private String loadAreaName;
+
+    /**
+     * 装货详细地址
+     */
+    @Length(max = 255, message = "装货详细地址最多支持255字")
+    private String loadDetailAddress;
+
+    /**
+     * 卸货区域code
+     */
+    private Integer unloadAreaCode;
+
+    /**
+     * 卸货区域名称
+     */
+    private String unloadAreaName;
+
+    /**
+     * 卸货详细地址
+     */
+    @Length(max = 255, message = "卸货详细地址最多支持255字")
+    private String unloadDetailAddress;
+
+    /**
+     * 备注
+     */
+    @Length(max = 200, message = "备注最多支持200字")
+    private String remark;
+
+
+}

+ 120 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AddTransportDemandParam.java

@@ -0,0 +1,120 @@
+package com.sckw.order.model.vo.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Pattern;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Length;
+
+import java.time.LocalDate;
+
+/**
+ * @desc: 添加运需请求参数
+ * @author: yzc
+ * @date: 2023-07-26 9:16
+ */
+@Getter
+@Setter
+@ToString
+public class AddTransportDemandParam {
+    /**
+     * 商品名称
+     */
+    @Length(max = 50, message = "商品名称最多支持50字")
+    @NotBlank(message = "商品名称不能为空")
+    private String name;
+
+    /**
+     * 商品分类
+     */
+    private String goodsType;
+
+    /**
+     * 商品规格
+     */
+    @Length(max = 20, message = "商品规格最多支持20字")
+    private String spec;
+
+    /**
+     * 交易方式(预付款、货到付款、线下付款)
+     */
+    private String trading;
+
+    /**
+     * 运需单价
+     */
+    @Length(max = 20, message = "运需单价最多支持20字")
+    @NotBlank(message = "运需单价不能为空")
+    private String price;
+
+    /**
+     * 运输总量
+     */
+    @Length(max = 20, message = "运输总量最多支持20字")
+    @NotBlank(message = "运输总量不能为空")
+    private String amount;
+
+    /**
+     * 截止时间(yyyy-MM-dd)
+     */
+    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate deadline;
+
+    /**
+     * 联系人姓名
+     */
+    @NotBlank(message = "联系人姓名不能为空")
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    @Pattern(regexp = "^1[3456789]\\d{9}$", message = "非法手机号格式")
+    @NotBlank(message = "联系人电话不能为空")
+    private String phone;
+
+    /**
+     * 装货区域code
+     */
+    @NotNull(message = "装货区域code不能为空")
+    private Integer loadAreaCode;
+
+    /**
+     * 装货区域名称
+     */
+    @NotBlank(message = "装货区域名称不能为空")
+    private String loadAreaName;
+
+    /**
+     * 装货详细地址
+     */
+    @Length(max = 255, message = "装货详细地址最多支持255字")
+    private String loadDetailAddress;
+
+    /**
+     * 卸货区域code
+     */
+    @NotBlank(message = "卸货区域code不能为空")
+    private Integer unloadAreaCode;
+
+    /**
+     * 卸货区域名称
+     */
+    @NotBlank(message = "卸货区域名称不能为空")
+    private String unloadAreaName;
+
+    /**
+     * 卸货详细地址
+     */
+    @Length(max = 255, message = "卸货详细地址最多支持255字")
+    private String unloadDetailAddress;
+
+    /**
+     * 备注
+     */
+    @Length(max = 200, message = "备注最多支持200字")
+    private String remark;
+}

+ 49 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/ExportTransportDemandParam.java

@@ -0,0 +1,49 @@
+package com.sckw.order.model.vo.req;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.util.List;
+
+/**
+ * @desc: 运需导出请求参数
+ * @author: yzc
+ * @date: 2023-07-26 10:07
+ */
+@Getter
+@Setter
+@ToString
+public class ExportTransportDemandParam {
+
+    /**
+     * 关键词模糊匹配 商品名
+     */
+    private String keywords;
+
+    /**
+     * 商品类型集合
+     */
+    private List<String> goodsTypes;
+
+    /**
+     * 装货地区code
+     */
+    private Integer loadAreaCode;
+
+    /**
+     * 装货地区等级
+     */
+    private Integer loadAreaLevel;
+
+    /**
+     * 卸货地区code
+     */
+    private Integer unloadAreaCode;
+
+    /**
+     * 卸货地区等级
+     */
+    private Integer unloadAreaLevel;
+
+}

+ 75 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/PurchaseOrderDraftParam.java

@@ -0,0 +1,75 @@
+package com.sckw.order.model.vo.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.*;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Length;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * @desc: 采购订单草稿请求参数
+ * @author: yzc
+ * @date: 2023-07-07 14:19
+ */
+@Getter
+@Setter
+@ToString
+public class PurchaseOrderDraftParam {
+
+    /**
+     * 商品信息
+     */
+    private GoodsInfo goodsInfo;
+
+    /**
+     * 订单总量
+     */
+    @DecimalMin(value = "0.00",message = "订单总量最小为零")
+    private BigDecimal amount;
+    /**
+     * 订单金额
+     */
+    @DecimalMin(value = "0.00",message = "订单金额最小为零")
+    private BigDecimal price;
+
+    /**
+     * 单位信息
+     */
+    @Size(min = 2, max = 2, message = "单位信息只能有两条")
+    private List<UnitInfo> unitInfo;
+    /**
+     * 地址信息
+     */
+    @Size(min = 2, max = 2, message = "地址信息只能有两条")
+    private List<AddressInfo> addressInfo;
+    /**
+     * 开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate startTime;
+    /**
+     * 结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate endTime;
+    /**
+     * 提货方式(采方自提、供应配送)
+     */
+    private String pickupType;
+
+    /**
+     * 交易方式(预付款、货到付款)
+     */
+    private String trading;
+    /**
+     * 备注
+     */
+    @Length(max = 200, message = "备注最多支持200字")
+    private String remark;
+
+}

+ 63 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/SelectTransportDemandParam.java

@@ -0,0 +1,63 @@
+package com.sckw.order.model.vo.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.sckw.core.model.page.PageRequest;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.util.Date;
+
+/**
+ * @desc: 运需分页查询请求参数
+ * @author: yzc
+ * @date: 2023-07-26 9:59
+ */
+@Getter
+@Setter
+@ToString
+public class SelectTransportDemandParam extends PageRequest {
+
+    /**
+     * 关键词模糊匹配 商品名
+     */
+    private String keywords;
+
+    /**
+     * 创建时间开始
+     */
+    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+    private Date startCreateTime;
+
+    /**
+     * 创建时间结束
+     */
+    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+    private Date endCreateTime;
+
+    /**
+     * 装货地区code
+     */
+    private Integer loadAreaCode;
+
+    /**
+     * 装货地区等级
+     */
+    private Integer loadAreaLevel;
+
+    /**
+     * 卸货地区code
+     */
+    private Integer unloadAreaCode;
+
+    /**
+     * 卸货地区等级
+     */
+    private Integer unloadAreaLevel;
+
+    /**
+     * 运需状态
+     */
+    private Integer status;
+
+}

+ 57 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/StatisticTransportDemandParam.java

@@ -0,0 +1,57 @@
+package com.sckw.order.model.vo.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.util.Date;
+
+/**
+ * @desc: 运需统计请求参数
+ * @author: yzc
+ * @date: 2023-07-26 10:07
+ */
+@Getter
+@Setter
+@ToString
+public class StatisticTransportDemandParam {
+
+    /**
+     * 关键词模糊匹配 商品名
+     */
+    private String keywords;
+
+    /**
+     * 创建时间开始
+     */
+    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+    private Date startCreateTime;
+
+    /**
+     * 创建时间结束
+     */
+    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+    private Date endCreateTime;
+
+    /**
+     * 装货地区code
+     */
+    private Integer loadAreaCode;
+
+    /**
+     * 装货地区等级
+     */
+    private Integer loadAreaLevel;
+
+    /**
+     * 卸货地区code
+     */
+    private Integer unloadAreaCode;
+
+    /**
+     * 卸货地区等级
+     */
+    private Integer unloadAreaLevel;
+
+}

+ 20 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/TransportDemandSquaresParam.java

@@ -0,0 +1,20 @@
+package com.sckw.order.model.vo.req;
+
+import com.sckw.core.model.page.PageRequest;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @desc: TODO
+ * @author: yzc
+ * @date: 2023-07-26 10:27
+ */
+@Getter
+@Setter
+@ToString
+public class TransportDemandSquaresParam extends PageRequest {
+
+
+
+}

+ 115 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/UpdateTransportDemandParam.java

@@ -0,0 +1,115 @@
+package com.sckw.order.model.vo.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Pattern;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Length;
+
+import java.time.LocalDate;
+
+/**
+ * @desc: 更新运需请求参数
+ * @author: yzc
+ * @date: 2023-07-26 9:37
+ */
+@Getter
+@Setter
+@ToString
+public class UpdateTransportDemandParam {
+
+    @NotNull(message = "运需id不能为空")
+    private Long id;
+
+    /**
+     * 商品名称
+     */
+    @Length(max = 50, message = "商品名称最多支持50字")
+    private String name;
+
+    /**
+     * 商品分类
+     */
+    private String goodsType;
+
+    /**
+     * 商品规格
+     */
+    @Length(max = 20, message = "商品规格最多支持20字")
+    private String spec;
+
+    /**
+     * 交易方式(预付款、货到付款、线下付款)
+     */
+    private String trading;
+
+    /**
+     * 运需单价
+     */
+    @Length(max = 20, message = "运需单价最多支持20字")
+    private String price;
+
+    /**
+     * 运输总量
+     */
+    @Length(max = 20, message = "运输总量最多支持20字")
+    private String amount;
+
+    /**
+     * 截止时间(yyyy-MM-dd)
+     */
+    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate deadline;
+
+    /**
+     * 联系人姓名
+     */
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    @Pattern(regexp = "^1[3456789]\\d{9}$", message = "非法手机号格式")
+    private String phone;
+
+    /**
+     * 装货区域code
+     */
+    private Integer loadAreaCode;
+
+    /**
+     * 装货区域名称
+     */
+    private String loadAreaName;
+
+    /**
+     * 装货详细地址
+     */
+    @Length(max = 255, message = "装货详细地址最多支持255字")
+    private String loadDetailAddress;
+
+    /**
+     * 卸货区域code
+     */
+    private Integer unloadAreaCode;
+
+    /**
+     * 卸货区域名称
+     */
+    private String unloadAreaName;
+
+    /**
+     * 卸货详细地址
+     */
+    @Length(max = 255, message = "卸货详细地址最多支持255字")
+    private String unloadDetailAddress;
+
+    /**
+     * 备注
+     */
+    @Length(max = 200, message = "备注最多支持200字")
+    private String remark;
+
+}

+ 21 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/ValetOrderDraftParam.java

@@ -0,0 +1,21 @@
+package com.sckw.order.model.vo.req;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @desc: 代客下单草稿请求参数
+ * @author: yzc
+ * @date: 2023-07-07 14:19
+ */
+@Getter
+@Setter
+@ToString
+public class ValetOrderDraftParam extends PurchaseOrderDraftParam {
+
+    private String deliveryType;
+
+    private ContractInfo contractInfo;
+
+}

+ 148 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/TransportDemandDetailRes.java

@@ -0,0 +1,148 @@
+package com.sckw.order.model.vo.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDate;
+import java.util.Date;
+
+/**
+ * @desc: 运需详情响应
+ * @author: yzc
+ * @date: 2023-07-26 9:48
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class TransportDemandDetailRes {
+
+    private Long id;
+
+    /**
+     * 商品名称
+     */
+    private String name;
+
+    /**
+     * 商品分类
+     */
+    private String goodsType;
+
+    /**
+     * 商品分类Label
+     */
+    private String goodsTypeLabel;
+
+    /**
+     * 商品规格
+     */
+    private String spec;
+
+    /**
+     * 交易方式(预付款、货到付款、线下付款)
+     */
+    private String trading;
+
+    /**
+     * 交易方式Label
+     */
+    private String tradingLabel;
+
+    /**
+     * 运需单价
+     */
+    private String price;
+
+    /**
+     * 运输总量
+     */
+    private String amount;
+
+    /**
+     * 截止时间(yyyy-MM-dd)
+     */
+    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate deadline;
+
+    /**
+     * 联系人姓名
+     */
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 装货区域code
+     */
+    private Integer loadAreaCode;
+
+    /**
+     * 装货区域名称
+     */
+    private String loadAreaName;
+
+    /**
+     * 装货详细地址
+     */
+    private String loadDetailAddress;
+
+    /**
+     * 卸货区域code
+     */
+    private Integer unloadAreaCode;
+
+    /**
+     * 卸货区域名称
+     */
+    private String unloadAreaName;
+
+    /**
+     * 卸货详细地址
+     */
+    private String unloadDetailAddress;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 状态
+     */
+    private Integer status;
+
+    /**
+     * 状态label
+     */
+    private String statusLabel;
+
+    /**
+     * 创建人
+     */
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 更新人
+     */
+    private Long updateBy;
+
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+}

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

@@ -27,8 +27,8 @@ import com.sckw.order.model.vo.res.OrderDetailRes;
 import com.sckw.order.model.vo.res.UnitInfoDetailRes;
 import com.sckw.payment.api.dubbo.PayCenterDubboService;
 import com.sckw.payment.api.model.constant.ChannelEnum;
-import com.sckw.payment.api.model.dto.R;
 import com.sckw.payment.api.model.dto.WalletDto;
+import com.sckw.payment.api.model.dto.common.R;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.product.api.model.KwpGoods;
 import com.sckw.stream.model.SckwBusSum;
@@ -83,7 +83,7 @@ public class KwoTradeOrderService {
      * @Param param:
      * @return: void
      */
-    public void addPurchaseOrderDraft(PurchaseOrderParam param) {
+    public void addPurchaseOrderDraft(PurchaseOrderDraftParam param) {
         KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
         order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
                 .setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null)
@@ -206,7 +206,7 @@ public class KwoTradeOrderService {
      * @Param param:
      * @return: void
      */
-    public void addValetOrderDraft(ValetOrderParam param) {
+    public void addValetOrderDraft(ValetOrderDraftParam param) {
         KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
         order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
                 .setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null)
@@ -470,11 +470,11 @@ public class KwoTradeOrderService {
 
 
     private void checkParams(UpdateOrderParam param, String source) {
-        if (Objects.isNull(param.getAmount()) || param.getAmount().compareTo(BigDecimal.ZERO) < 0) {
-            throw new BusinessException("订单总量不能为空且不能为负数!");
+        if (Objects.isNull(param.getAmount())) {
+            throw new BusinessException("订单总量不能为空且!");
         }
-        if (Objects.isNull(param.getPrice()) || param.getPrice().compareTo(BigDecimal.ZERO) < 0) {
-            throw new BusinessException("订单金额不能为空且不能为负数!");
+        if (Objects.isNull(param.getPrice())) {
+            throw new BusinessException("订单金额不能为空且!");
         }
         if (StringUtils.isBlank(param.getTrading())) {
             throw new BusinessException("交易方式不能为空!");

+ 153 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTransportDemandService.java

@@ -0,0 +1,153 @@
+package com.sckw.order.serivce;
+
+import com.sckw.core.model.page.PageResult;
+import com.sckw.core.model.vo.TableStatisticRes;
+import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.order.dao.KwoTransportDemandMapper;
+import com.sckw.order.model.KwoTransportDemand;
+import com.sckw.order.model.dto.TransportDemandExport;
+import com.sckw.order.model.vo.req.*;
+import com.sckw.order.model.vo.res.TransportDemandDetailRes;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @desc: 运需service
+ * @author: yzc
+ * @date: 2023-06-25 14:53
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class KwoTransportDemandService {
+
+    private final KwoTransportDemandMapper kwoTransportDemandMapper;
+
+
+    /**
+     * @desc: 添加草稿
+     * @author: yzc
+     * @date: 2023-07-26 10:32
+     * @Param param:
+     * @return: void
+     */
+    public void addDraft(AddTransportDemandDraftParam param) {
+        KwoTransportDemand transportDemand = BeanUtils.copyProperties(param, KwoTransportDemand.class);
+        transportDemand.setEntId(LoginUserHolder.getEntId()).setStatus(0);
+        kwoTransportDemandMapper.insert(transportDemand);
+    }
+
+    /**
+     * @desc: 添加上架
+     * @author: yzc
+     * @date: 2023-07-26 10:32
+     * @Param param:
+     * @return: void
+     */
+    public void addShelves(AddTransportDemandParam param) {
+
+    }
+
+    /**
+     * @desc: 运需详情
+     * @author: yzc
+     * @date: 2023-07-26 10:32
+     * @Param id:
+     * @return: com.sckw.order.model.vo.res.TransportDemandDetailRes
+     */
+    public TransportDemandDetailRes detail(Long id) {
+        return null;
+    }
+
+    /**
+     * @desc: 运需修改
+     * @author: yzc
+     * @date: 2023-07-26 10:33
+     * @Param param:
+     * @return: void
+     */
+    public void update(UpdateTransportDemandParam param) {
+
+    }
+
+    /**
+     * @desc: 运需分页查询
+     * @author: yzc
+     * @date: 2023-07-26 10:33
+     * @Param param:
+     * @return: com.sckw.core.model.page.PageResult
+     */
+    public PageResult select(SelectTransportDemandParam param) {
+        return null;
+    }
+
+    /**
+     * @desc: 运需统计
+     * @author: yzc
+     * @date: 2023-07-26 10:33
+     * @Param param:
+     * @return: com.sckw.core.model.vo.TableStatisticRes
+     */
+    public TableStatisticRes statistic(StatisticTransportDemandParam param) {
+        return null;
+    }
+
+    /**
+     * @desc: 运需导出
+     * @author: yzc
+     * @date: 2023-07-26 10:33
+     * @Param param:
+     * @return: java.util.List<com.sckw.order.model.dto.TransportDemandExport>
+     */
+    public List<TransportDemandExport> export(ExportTransportDemandParam param) {
+        return null;
+    }
+
+    /**
+     * @desc: 运需上架
+     * @author: yzc
+     * @date: 2023-07-26 10:34
+     * @Param id:
+     * @return: void
+     */
+    public void putOnShelves(Long id) {
+
+    }
+
+    /**
+     * @desc: 运需批量下架
+     * @author: yzc
+     * @date: 2023-07-26 10:34
+     * @Param id:
+     * @return: void
+     */
+    public void batchTakeOffShelves(List<Long> ids) {
+
+    }
+
+    /**
+     * @desc: 运需批量删除
+     * @author: yzc
+     * @date: 2023-07-26 10:34
+     * @Param id:
+     * @return: void
+     */
+    public void batchDelete(List<Long> ids) {
+
+    }
+
+    /**
+     * @desc: 运需广场列表
+     * @author: yzc
+     * @date: 2023-07-26 10:34
+     * @Param param:
+     * @return: com.sckw.core.model.page.PageResult
+     */
+    public PageResult demandSquaresList(TransportDemandSquaresParam param) {
+        return null;
+    }
+}

+ 0 - 20
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwpTransportDemandService.java

@@ -1,20 +0,0 @@
-package com.sckw.order.serivce;
-
-import com.sckw.order.dao.KwpTransportDemandMapper;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-/**
- * @desc: 运需service
- * @author: yzc
- * @date: 2023-06-25 14:53
- */
-@Service
-@Slf4j
-@RequiredArgsConstructor
-public class KwpTransportDemandService {
-
-    private final KwpTransportDemandMapper kwpTransportDemandMapper;
-
-}

+ 24 - 0
sckw-modules/sckw-order/src/main/resources/bootstrap-test.yml

@@ -0,0 +1,24 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: 10.10.10.224:8848
+        # 命名空间
+        namespace: sckw-service-platform
+        # 共享配置
+        group: sckw-service-platform
+      config:
+        # 配置中心地址
+        server-addr: 10.10.10.224:8848
+        # 配置文件格式
+        file-extension: yaml
+        # 命名空间
+        namespace: sckw-service-platform
+        # 共享配置
+        group: sckw-service-platform
+        #可以读多个配置文件  需要在同一个命名空间下面可以是不同的组
+        extension-configs:
+          - dataId: sckw-common.yml
+            group: sckw-service-platform
+            refresh: true

+ 154 - 0
sckw-modules/sckw-order/src/main/resources/log4j2.xml

@@ -0,0 +1,154 @@
+<?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-order"/>
+    </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="100MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名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="100MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名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="100MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名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="100MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名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="100MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名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>

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

@@ -195,7 +195,9 @@ public class KwpGoodsService {
         //商品地址信息
         KwpGoodsAddress goodsAddress = kwpGoodsAddressService.getByGoodsId(id);
         AddressInfoDetail addressInfo = BeanUtils.copyProperties(goodsAddress, AddressInfoDetail.class);
-        addressInfo.setTypeName(DictEnum.getLabel(DictTypeEnum.ADDRESS_TYPE.getType(), addressInfo.getType()));
+        if (Objects.nonNull(addressInfo)) {
+            addressInfo.setTypeName(DictEnum.getLabel(DictTypeEnum.ADDRESS_TYPE.getType(), addressInfo.getType()));
+        }
         detail.setImages(images).setPriceRanges(ranges).setAttributes(attributes).setAddressInfo(addressInfo);
 
         return detail;
@@ -291,7 +293,7 @@ public class KwpGoodsService {
      */
     private void judgeParameters(UpdateGoodsParam param) {
         if (StringUtils.isBlank(param.getName())) {
-            throw new BusinessException("商品名称不能为空!");
+            throw new BusinessException("商品名称不能为空!");
         }
         if (StringUtils.isBlank(param.getGoodsType())) {
             throw new BusinessException("商品类型不能为空!");
@@ -458,7 +460,7 @@ public class KwpGoodsService {
         if (CollectionUtils.isNotEmpty(params.getIds())) {
             wrapper.in(KwpGoods::getId, params.getIds());
         } else {
-            if (Objects.nonNull(params.getEndCreateTime())){
+            if (Objects.nonNull(params.getEndCreateTime())) {
                 wrapper.le(KwpGoods::getCreateTime, DateUtil.offsetDay(params.getEndCreateTime(), 1));
             }
             wrapper.ge(Objects.nonNull(params.getStartCreateTime()), KwpGoods::getCreateTime, params.getStartCreateTime())

+ 24 - 0
sckw-modules/sckw-product/src/main/resources/bootstrap-test.yml

@@ -0,0 +1,24 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: 10.10.10.224:8848
+        # 命名空间
+        namespace: sckw-service-platform
+        # 共享配置
+        group: sckw-service-platform
+      config:
+        # 配置中心地址
+        server-addr: 10.10.10.224:8848
+        # 配置文件格式
+        file-extension: yaml
+        # 命名空间
+        namespace: sckw-service-platform
+        # 共享配置
+        group: sckw-service-platform
+        #可以读多个配置文件  需要在同一个命名空间下面可以是不同的组
+        extension-configs:
+          - dataId: sckw-common.yml
+            group: sckw-service-platform
+            refresh: true

+ 154 - 0
sckw-modules/sckw-product/src/main/resources/log4j2.xml

@@ -0,0 +1,154 @@
+<?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-product"/>
+    </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="100MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名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="100MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名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="100MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名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="100MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名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="100MB"/>
+                <!--设置日志文件滚动更新的时间,依赖于文件命名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>

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

@@ -88,7 +88,7 @@ public class SckwBusSumConsumer {
                 Optional<SckwTradeOrder> optional = tradeOrderRepository.findById(order.get_id());
                 SckwTradeOrder order1 = optional.get();
                 BeanUtils.copyPropertiesValue(order, order1);
-                tradeOrderRepository.save(order);
+                tradeOrderRepository.save(order1);
             } else {
                 Optional<SckwTradeOrder> sckwTradeOrder = tradeOrderRepository.findById(order.get_id());
                 if (sckwTradeOrder.isPresent()) {
@@ -102,32 +102,44 @@ public class SckwBusSumConsumer {
         /**物流订单**/
         if (busSum.getBusSumType().equals("logisticsOrder")) {
             SckwLogisticsOrder order = JSONObject.parseObject(JSON.toJSONString(busSum.getObject()), SckwLogisticsOrder.class);
-            order.set_id(order.getLOrderId());
             if (busSum.getMethod() == 1) {
                 /**新增**/
+                order.set_id(order.getLOrderId() == null ? order.get_id() : order.getLOrderId());
                 logisticsOrderRepository.insert(order);
             } else {
                 /**更新**/
+                order.set_id(order.getLOrderId() == null ? order.get_id() : order.getLOrderId());
                 Optional<SckwLogisticsOrder> optional = logisticsOrderRepository.findById(order.get_id());
                 SckwLogisticsOrder order1 = optional.get();
                 BeanUtils.copyPropertiesValue(order, order1);
-                logisticsOrderRepository.save(order);
+                logisticsOrderRepository.save(order1);
             }
         }
 
         /**车辆运单**/
         if (busSum.getBusSumType().equals("waybillOrder")) {
             SckwWaybillOrder order = JSONObject.parseObject(JSON.toJSONString(busSum.getObject()), SckwWaybillOrder.class);
-            order.set_id(order.getWOrderId() == null ? order.get_id() : order.getWOrderId());
             if (busSum.getMethod() == 1) {
                 /**新增**/
+                order.set_id(order.getWOrderId() == null ? order.get_id() : order.getWOrderId());
                 waybillOrderRepository.insert(order);
-            } else {
+            } else if (busSum.getMethod() == 2){
                 /**更新**/
+                order.set_id(order.getWOrderId() == null ? order.get_id() : order.getWOrderId());
+                Optional<SckwWaybillOrder> optional = waybillOrderRepository.findById(order.get_id());
+                SckwWaybillOrder order1 = optional.get();
+                BeanUtils.copyPropertiesValue(order, order1);
+                waybillOrderRepository.save(order1);
+            } else {
+                /**替换**/
                 Optional<SckwWaybillOrder> optional = waybillOrderRepository.findById(order.get_id());
                 SckwWaybillOrder order1 = optional.get();
+                //删除
+                waybillOrderRepository.deleteById(order1.get_id());
+                //新增
                 BeanUtils.copyPropertiesValue(order, order1);
-                waybillOrderRepository.save(order);
+                order1.set_id(order1.getWOrderId());
+                waybillOrderRepository.insert(order1);
             }
         }
     }

+ 0 - 14
sckw-modules/sckw-report/src/main/java/com/sckw/report/controller/KwTransportController.java

@@ -92,20 +92,6 @@ public class KwTransportController {
         return HttpResult.ok("没有可导出的数据");
     }
 
-//    /**
-//     * 承运订单-(订单详情)
-//     * @param id
-//     * @return
-//     */
-//    @RequestMapping(value = "/getOrderDetailAcceptCarriage", method = RequestMethod.GET)
-//    public HttpResult getOrderDetailAcceptCarriage(@RequestParam("id") Long id) {
-//        try {
-//            return transportService.getOrderDetail(id);
-//        } catch (Exception e) {
-//            log.error("承运订单-(订单详情)查询失败:{}", e.getMessage(), e);
-//            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
-//        }
-//    }
 
     /**
      * 托运订单首页条件查询

+ 18 - 6
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderService.java

@@ -128,13 +128,25 @@ public class KwOrderService {
             andCriteria.and("createTime").lte(DateUtil.offsetDay(params.getEndCreateTime(), 1));
         }
         //装卸货地址
-        if (StringUtils.isNotBlank(params.getShippingAddressCode())) {
-            Pattern pattern = Pattern.compile("^" + params.getShippingAddressCode().substring(0, 4) + ".*$", Pattern.CASE_INSENSITIVE);
-            andCriteria.and("loadCityCode").regex(pattern);
+        String loadCode = params.getShippingAddressCode();
+        if (StringUtils.isNotBlank(loadCode)) {
+            switch (params.getShippingAddressLevel()) {
+                case 1 -> andCriteria.and("loadCityCode")
+                        .regex(Pattern.compile("^" + loadCode.substring(0, 2) + ".*$", Pattern.CASE_INSENSITIVE));
+                case 2 -> andCriteria.and("loadCityCode")
+                        .regex(Pattern.compile("^" + loadCode.substring(0, 4) + ".*$", Pattern.CASE_INSENSITIVE));
+                case 3 -> andCriteria.and("loadCityCode").is(loadCode);
+            }
         }
-        if (StringUtils.isNotBlank(params.getUnloadingAddressCode())) {
-            Pattern pattern = Pattern.compile("^" + params.getUnloadingAddressCode().substring(0, 4) + ".*$", Pattern.CASE_INSENSITIVE);
-            andCriteria.and("unloadCityCode").regex(pattern);
+        String unloadCode = params.getUnloadingAddressCode();
+        if (StringUtils.isNotBlank(unloadCode)) {
+            switch (params.getUnloadingAddressLevel()) {
+                case 1 -> andCriteria.and("unloadCityCode")
+                        .regex(Pattern.compile("^" + unloadCode.substring(0, 2) + ".*$", Pattern.CASE_INSENSITIVE));
+                case 2 -> andCriteria.and("unloadCityCode")
+                        .regex(Pattern.compile("^" + unloadCode.substring(0, 4) + ".*$", Pattern.CASE_INSENSITIVE));
+                case 3 -> andCriteria.and("unloadCityCode").is(unloadCode);
+            }
         }
         //提货方式
         if (StringUtils.isNotBlank(params.getPickupType())) {

+ 11 - 1
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/param/TradeOrderListStatisticParam.java

@@ -48,11 +48,21 @@ public class TradeOrderListStatisticParam {
      */
     private String shippingAddressCode;
 
+    /**
+     * 装货地址等级
+     */
+    private Integer shippingAddressLevel;
+
     /**
      * 装货地址code
      */
     private String unloadingAddressCode;
 
+    /**
+     * 卸货地址等级
+     */
+    private Integer unloadingAddressLevel;
+
     /**
      * 交易方式(预付款、货到付款)
      */
@@ -69,7 +79,7 @@ public class TradeOrderListStatisticParam {
     private String deliveryType;
 
     /**
-     * 下单方式(0自主下单/1代客下单)
+     * 下单方式(1采购下单/2代客下单)
      */
     private String source;
 

+ 26 - 0
sckw-modules/sckw-report/src/main/resources/bootstrap-test.yml

@@ -0,0 +1,26 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: 10.10.10.224:8848
+        # 命名空间
+#        namespace: sckw_jc
+        namespace:  sckw-service-platform
+        # 共享配置
+        group: sckw-service-platform
+      config:
+        # 配置中心地址
+        server-addr: 10.10.10.224:8848
+        # 配置文件格式
+        file-extension: yaml
+        # 命名空间
+#        namespace: sckw_jc
+        namespace:  sckw-service-platform
+        # 共享配置
+        group: sckw-service-platform
+        #可以读多个配置文件  需要在同一个命名空间下面可以是不同的组
+        extension-configs:
+          - dataId: sckw-common.yml
+            group: sckw-service-platform
+            refresh: true

+ 6 - 0
sckw-modules/sckw-transport/pom.xml

@@ -101,6 +101,12 @@
             <artifactId>sckw-fleet-api</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-contract-api</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
         <!-- validation -->
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/AcceptCarriageOrderController.java

@@ -36,7 +36,7 @@ public class AcceptCarriageOrderController {
     private TransportCommonService transportCommonService;
 
     /**
-     * 获取订单详情-托运订单-承运订单
+     * 获取订单详情-托运订单-承运订单-销售订单-采购订单
      *
      * @param dto
      * @return

+ 38 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java

@@ -1,9 +1,11 @@
 package com.sckw.transport.controller;
 
 import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.model.ValiList;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.transport.model.dto.ConfirmRefuseSendCarDto;
 import com.sckw.transport.model.dto.SendCarDto1;
 import com.sckw.transport.model.dto.UpdateDriverCarDTO;
 import com.sckw.transport.service.DriverService;
@@ -14,6 +16,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
  * @author lfq
  * @desc 车辆运单
@@ -103,6 +107,40 @@ public class KwtWaybillOrderController {
         return waybillOrderService.sendCar(params);
     }
 
+    /**
+     * @param ids 车辆运单主键ID,多个已逗号隔开
+     * @description 取消派车
+     * @author zk
+     * @date 2023/7/24
+     **/
+    @PostMapping("/cancelSendCar")
+    public HttpResult cancelSendCar(@RequestBody List<Long> ids){
+        return waybillOrderService.cancelSendCar(ids);
+    }
+
+    /**
+     * @param params {}
+     * @description 确认接单
+     * @author zk
+     * @date 2023/7/24
+     **/
+    @PostMapping("/confirmSendCar")
+    public HttpResult confirmSendCar(@RequestBody @Valid ConfirmRefuseSendCarDto params){
+        return waybillOrderService.confirmSendCar(params);
+    }
+
+    /**
+     * @param params {}
+     * @description 拒绝接单
+     * @author zk
+     * @date 2023/7/24
+     **/
+    @PostMapping("/refuseSendCar")
+    public HttpResult refuseSendCar(@RequestBody @Valid ConfirmRefuseSendCarDto params){
+        return waybillOrderService.refuseSendCar(params);
+    }
+
+
 
     //取消派车(未接单前)
     //更换车辆(趟次派车(-出车前)/循环派车(接单后-出车前))

+ 93 - 17
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/LogisticsConsignmentController.java

@@ -3,6 +3,7 @@ package com.sckw.transport.controller;
 import com.alibaba.fastjson.JSONObject;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.transport.model.dto.OrderFinishDTO;
 import com.sckw.transport.model.param.LogisticsConsignmentParam;
 import com.sckw.transport.service.LogisticsConsignmentService;
 import jakarta.validation.Valid;
@@ -13,6 +14,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
  * @author lfdc
  * @description 采购订单/销售订单-物流托运Controller
@@ -46,9 +49,9 @@ public class LogisticsConsignmentController {
     }
 
     /**
-     * 采购订单-托运订单详情-销售订单id
+     * 采购订单-托运订单列表-销售订单id
      *
-     * @param id
+     * @param id 销售订单id
      * @return
      */
     @Validated
@@ -56,11 +59,30 @@ public class LogisticsConsignmentController {
     public HttpResult purchaseLogisticsOrder(@RequestParam("id") @NotBlank(message = "单据id不能为空") String id,
                                              @RequestParam("page") @NotBlank(message = "当前页不能为空") int page,
                                              @RequestParam("pageSize") @NotBlank(message = "每页条数不能为空") int pageSize) {
-        log.info("采购订单-托运订单详情 传递参数信息:{}", id);
+        log.info("采购订单-托运订单列表 传递参数信息:{}", id);
         try {
-            return logisticsConsignmentService.purchaseLogisticsOrder(id, page, pageSize);
+            return logisticsConsignmentService.logisticsOrder(id, page, pageSize);
         } catch (Exception e) {
-            log.error("采购订单-托运订单详情 error :{}", e.getMessage(), e);
+            log.error("采购订单-托运订单列表 error :{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
+    /**
+     * 采购订单-托运订单列表-撤销托运
+     *
+     * @param ids 物流运单id
+     * @return
+     */
+    @Validated
+    @RequestMapping(value = "/purchaseCancelConsign", method = RequestMethod.POST)
+//    @GlobalTransactional(name = "default_tx_group")
+    public HttpResult purchaseCancelConsign(@RequestParam("ids") @NotBlank(message = "单据不能为空") List<String> ids) {
+        log.info("采购订单-托运订单列表-撤销托运:{}", JSONObject.toJSONString(ids));
+        try {
+            return logisticsConsignmentService.cancelConsign(ids, "1");
+        } catch (Exception e) {
+            log.error("采购订单-托运订单列表-撤销托运 error :{}", e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }
@@ -68,7 +90,9 @@ public class LogisticsConsignmentController {
     /**
      * 采购订单-车辆详情-销售订单id
      *
-     * @param id
+     * @param id       销售订单id
+     * @param page
+     * @param pageSize
      * @return
      */
     @Validated
@@ -76,15 +100,33 @@ public class LogisticsConsignmentController {
     public HttpResult purchaseLogisticsCar(@RequestParam("id") @NotBlank(message = "单据id不能为空") String id,
                                            @RequestParam("page") @NotBlank(message = "当前页不能为空") int page,
                                            @RequestParam("pageSize") @NotBlank(message = "每页条数不能为空") int pageSize) {
-        log.info("采购订单-托运订单详情 传递参数信息:{}", id);
+        log.info("采购订单-托运订单列表 传递参数信息:{}", id);
         try {
             return logisticsConsignmentService.purchaseLogisticsCar(id, page, pageSize);
         } catch (Exception e) {
-            log.error("采购订单-托运订单详情 error :{}", e.getMessage(), e);
+            log.error("采购订单-托运订单列表 error :{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
+    /**
+     * 采购订单-托运订单列表-完结订单
+     * @param OrderFinishDTO
+     * @return
+     */
+    @Validated
+    @RequestMapping(value = "/purchaseOrderFinish", method = RequestMethod.POST)
+    public HttpResult purchaseOrderFinish(@RequestBody @Validated OrderFinishDTO OrderFinishDTO) {
+        log.info("采购订单-托运订单列表-完结订单 传递参数信息:{}", JSONObject.toJSONString(OrderFinishDTO));
+        try {
+            return logisticsConsignmentService.orderFinish(OrderFinishDTO, "1");
+        } catch (Exception e) {
+            log.error("采购订单-托运订单列表-完结订单 error :{}", e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }
 
+
     /**
      * 销售订单-物流托运生成托运订单
      *
@@ -103,41 +145,75 @@ public class LogisticsConsignmentController {
     }
 
     /**
-     * 销售订单-托运订单详情-销售订单id
+     * 销售订单-托运订单列表-销售订单id
      *
-     * @param id
+     * @param id 销售订单id
      * @return
      */
     @RequestMapping(value = "/sellLogisticsOrder", method = RequestMethod.GET)
     public HttpResult sellLogisticsOrder(@RequestParam("id") @NotBlank(message = "单据id不能为空") String id,
                                          @RequestParam("page") @NotBlank(message = "当前页不能为空") int page,
                                          @RequestParam("pageSize") @NotBlank(message = "每页条数不能为空") int pageSize) {
-        log.info("销售订单-托运订单详情 传递参数信息:{}", id);
+        log.info("销售订单-托运订单列表 传递参数信息:{}", id);
         try {
-            return logisticsConsignmentService.sellLogisticsOrder(id, page, pageSize);
+            return logisticsConsignmentService.logisticsOrder(id, page, pageSize);
         } catch (Exception e) {
-            log.error("销售订单-托运订单详情 error :{}", e.getMessage(), e);
+            log.error("销售订单-托运订单列表 error :{}", e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }
 
     /**
-     * 销售订单-车辆详情-销售订单id
+     * 销售订单-车辆列表-销售订单id
      *
-     * @param id
+     * @param id 销售订单id
      * @return
      */
     @RequestMapping(value = "/sellLogisticsCar", method = RequestMethod.GET)
     public HttpResult sellLogisticsCar(@RequestParam("id") @NotBlank(message = "单据id不能为空") String id,
                                        @RequestParam("page") @NotBlank(message = "当前页不能为空") int page,
                                        @RequestParam("pageSize") @NotBlank(message = "每页条数不能为空") int pageSize) {
-        log.info("销售订单-托运订单详情 传递参数信息:{}", id);
+        log.info("销售订单-车辆列表 传递参数信息:{}", id);
         try {
             return logisticsConsignmentService.sellLogisticsCar(id, page, pageSize);
         } catch (Exception e) {
-            log.error("销售订单-托运订单详情 error :{}", e.getMessage(), e);
+            log.error("销售订单-车辆列表 error :{}", e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }
 
+    /**
+     * 销售订单-托运订单列表-撤销托运
+     *
+     * @param ids 物流订单id
+     * @return
+     */
+    @RequestMapping(value = "/sellCancelConsign", method = RequestMethod.GET)
+//    @GlobalTransactional(name = "default_tx_group")
+    public HttpResult sellCancelConsign(@RequestParam("ids") @NotBlank(message = "单据id不能为空") List<String> ids) {
+        log.info("销售订单-车辆列表 传递参数信息:{}", JSONObject.toJSONString(ids));
+        try {
+            return logisticsConsignmentService.cancelConsign(ids, "2");
+        } catch (Exception e) {
+            log.error("销售订单-车辆列表 error :{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
+    /**
+     * 销售订单-托运订单列表-完结订单
+     * @param orderFinishDTO
+     * @return
+     */
+    @Validated
+    @RequestMapping(value = "/sellOrderFinish", method = RequestMethod.POST)
+    public HttpResult sellOrderFinish(@RequestBody @Validated OrderFinishDTO orderFinishDTO) {
+        log.info("采购订单-托运订单列表-完结订单 传递参数信息:{}", JSONObject.toJSONString(orderFinishDTO));
+        try {
+            return logisticsConsignmentService.orderFinish(orderFinishDTO, "2");
+        } catch (Exception e) {
+            log.error("采购订单-托运订单列表-完结订单 error :{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
 }

+ 4 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderCirculateMapper.java

@@ -30,13 +30,15 @@ public interface KwtLogisticsOrderCirculateMapper extends BaseMapper<KwtLogistic
 
     /**
      * @param lOrderId 物流订单id
-     * @param truckNo 车牌号
+     * @param truckId 车辆ID
      * @param driverId 司机主键id
+     * @param status 循环派车状态(0正常、1失效)
      * @desc 查询物流运单装卸货地址信息
      * @author zk
      * @date 2023/7/20
      **/
-    KwtLogisticsOrderCirculate findCirculate(@Param("lOrderId") Long lOrderId, @Param("truckNo") String truckNo, @Param("driverId") Long driverId);
+    KwtLogisticsOrderCirculate findCirculate(@Param("lOrderId") Long lOrderId, @Param("truckId") Long truckId,
+                                             @Param("driverId") Long driverId, @Param("status") Integer status);
 
     /**
      * 通过物流订单id和车辆运单id查询循环单据进行停止接单

+ 49 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/ConfirmRefuseSendCarDto.java

@@ -0,0 +1,49 @@
+package com.sckw.transport.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * @author zk
+ * @desc 确认/决绝接单
+ * @date 2023/7/25 0025
+ */
+@Data
+public class ConfirmRefuseSendCarDto {
+
+    /**
+     * 派车类型(1:趟次:2:循环)
+     */
+    @JsonProperty("type")
+    @NotNull(message = "派车类型不能为空")
+    private Integer type;
+
+    /**
+     * 车辆订单id
+     */
+    @JsonProperty("wOrderId")
+    @NotNull(message = "车辆订单ID不能为空")
+    private Long wOrderId;
+
+    /**
+     * 物流订单ID
+     */
+    @JsonProperty("lOrderId")
+    @NotNull(message = "物流订单ID不能为空")
+    private Long lOrderId;
+
+    /**
+     * 司机id
+     */
+    @JsonProperty("driverId")
+    @NotNull(message = "司机信息ID不能为空")
+    private Long driverId;
+
+    /**
+     * 车牌号
+     */
+    @JsonProperty("truckId")
+    @NotNull(message = "车辆信息ID不能为空")
+    private Long truckId;
+}

+ 4 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderDTO.java

@@ -2,6 +2,8 @@ package com.sckw.transport.model.dto;
 
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 /**
  * @author lfdc
  * @description 销售订单/采购订单-托运详情
@@ -16,7 +18,7 @@ public class LogisticsOrderDTO {
     private String lOrderId;
     /**
      * 物流订单no
-      */
+     */
     private String lOrderNo;
 
     /**
@@ -38,7 +40,7 @@ public class LogisticsOrderDTO {
     /**
      * 计划量
      */
-    private String amount;
+    private BigDecimal amount;
     /**
      * 运价
      */

+ 42 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OrderFinishDTO.java

@@ -0,0 +1,42 @@
+package com.sckw.transport.model.dto;
+
+import jakarta.validation.constraints.*;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import java.math.BigDecimal;
+
+/**
+ * @author lfdc
+ * @description 完结订单dto
+ * @date 2023-07-25 17:07:09
+ */
+@Data
+public class OrderFinishDTO {
+    /**
+     * 数据id
+     */
+    @NotNull(message = "单据id不能为空")
+    private String id;
+    /**
+     * 备注
+     */
+    @Length(max = 200,message = "单据编号长度错误最大长度:{max}")
+    private String remark;
+    /**
+     * 总量
+     */
+
+    @Digits(integer = 10, fraction=2, message = "总量格式错误")
+    @DecimalMin(value = "0.00", message = "总量最小值不能低于0.00元")
+//    @DecimalMax(value = "10.00", message = "资金最大值不能高于10.00元")
+    @NotNull(message = "总量不可为空")
+    private BigDecimal amount;
+    /**
+     * 交付量
+     */
+    @Digits(integer = 10, fraction=2, message = "交付量格式错误")
+    @DecimalMin(value = "0.00", message = "交付量最小值不能低于0.00元")
+    @NotNull(message = "交付量不可为空")
+    private BigDecimal entrustAmount;
+}

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/SendCarDto1.java

@@ -9,7 +9,7 @@ import java.util.Date;
 
 /**
  * @author zk
- * @desc TODO
+ * @desc 派车
  * @date 2023/7/19 0019
  */
 @Data

+ 3 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/StopOrderTakingDTO.java

@@ -1,6 +1,6 @@
 package com.sckw.transport.model.dto;
 
-import jakarta.validation.constraints.NotBlank;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
@@ -16,12 +16,13 @@ public class StopOrderTakingDTO {
     /**
      * 车辆运单ids
      */
-    @NotBlank(message = "车辆运单id不能为空")
+    @NotNull(message = "车辆运单id不能为空")
     private List<String> ids;
     /**
      * 物流订单id
      */
     @NotNull(message = "物流订单id不能为空")
+    @JsonProperty("lOrderId")
     private String lOrderId;
 
 }

+ 62 - 24
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java

@@ -179,9 +179,9 @@ public class AcceptCarriageOrderService {
         }
         String pids = logisticsOrder.getPids();
         if (StringUtils.isNotBlank(pids)) {
-            pids = pids + StringConstant.SEMICOLON + orderId;
+            pids = pids + StringConstant.COMMA + orderId;
         } else {
-            pids = bo.getLOrderId() + StringConstant.SEMICOLON + orderId;
+            pids = bo.getLOrderId() + StringConstant.COMMA + orderId;
         }
         insertSubcontractLogisticsGoods(bo, lOrderNo, orderId);
         insertSubcontractLogisticsOrder(bo, lOrderNo, order, orderId, pids);
@@ -674,22 +674,23 @@ public class AcceptCarriageOrderService {
                 throw new RuntimeException("司机姓名格式不正确");
             }
         }
-        if (StringUtils.isNotBlank(driverParam.getTruckNo())) {
-            int length = driverParam.getTruckNo().trim().length();
-            if (driverParam.getTruckNo().trim().length() > NumberConstant.EIGHT || driverParam.getTruckNo().trim().length() < NumberConstant.SEVEN) {
-                throw new RuntimeException("车牌号位数不正确");
-            }
-            if (driverParam.getTruckNo().trim().length() == NumberConstant.EIGHT) {
-                if (!RegularUtils.matchs(RegularUtils.TRUCK_NUMBER_SIX, driverParam.getTruckNo())) {
-                    throw new RuntimeException("车牌号格式不正确");
-                }
-            } else if (driverParam.getTruckNo().trim().length() == NumberConstant.SEVEN) {
-                if (!RegularUtils.matchs(RegularUtils.TRUCK_NUMBER_FIVE, driverParam.getTruckNo())) {
-                    throw new RuntimeException("车牌号格式不正确");
-                }
-            }
-
-        }
+        //2023-07-25 去除车牌查询格式校验
+//        if (StringUtils.isNotBlank(driverParam.getTruckNo())) {
+//            int length = driverParam.getTruckNo().trim().length();
+//            if (driverParam.getTruckNo().trim().length() > NumberConstant.EIGHT || driverParam.getTruckNo().trim().length() < NumberConstant.SEVEN) {
+//                throw new RuntimeException("车牌号位数不正确");
+//            }
+//            if (driverParam.getTruckNo().trim().length() == NumberConstant.EIGHT) {
+//                if (!RegularUtils.matchs(RegularUtils.TRUCK_NUMBER_SIX, driverParam.getTruckNo())) {
+//                    throw new RuntimeException("车牌号格式不正确");
+//                }
+//            } else if (driverParam.getTruckNo().trim().length() == NumberConstant.SEVEN) {
+//                if (!RegularUtils.matchs(RegularUtils.TRUCK_NUMBER_FIVE, driverParam.getTruckNo())) {
+//                    throw new RuntimeException("车牌号格式不正确");
+//                }
+//            }
+//
+//        }
         if (StringUtils.isNotBlank(driverParam.getDriverPhone())) {
             if (driverParam.getDriverPhone().trim().length() > NumberConstant.ELEVEN) {
                 throw new RuntimeException("手机号不正确");
@@ -701,21 +702,34 @@ public class AcceptCarriageOrderService {
     }
 
     /**
-     * 设置停止接单
+     * 设置停止接单-针对于循环单
+     *
      * @param stopOrderTakingDTO
      * @return
      */
     @Transactional(rollbackFor = Exception.class)
     public HttpResult stopDocumentCommit(StopOrderTakingDTO stopOrderTakingDTO) {
         List<Long> wOrderIds = logisticsOrderCirculateMapper.selectEntityBylOrderIdAndOrderIds(stopOrderTakingDTO.getLOrderId(), stopOrderTakingDTO.getIds());
+        List<JSONObject> list = new ArrayList<>(stopOrderTakingDTO.getIds().size());
         if (CollectionUtils.isNotEmpty(wOrderIds)) {
             wOrderIds.forEach(wOrderId -> {
-                logisticsOrderCirculateMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrderCirculate>()
-                        .set(KwtLogisticsOrderCirculate::getStatus, NumberConstant.ONE)
-                        .eq(KwtLogisticsOrderCirculate::getWOrderId, wOrderId));
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("wOrderId", wOrderId);
+                KwtWaybillOrder waybillOrder = waybillOrderMapper.selectOne(new LambdaUpdateWrapper<KwtWaybillOrder>().eq(KwtWaybillOrder::getId, wOrderId));
+                if (waybillOrder == null) {
+                    jsonObject.put("status", HttpStatus.GLOBAL_EXCEPTION_CODE);
+                    jsonObject.put("message", "单据不存在或者单据异常");
+                } else {
+                    logisticsOrderCirculateMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrderCirculate>()
+                            .set(KwtLogisticsOrderCirculate::getStatus, NumberConstant.ONE)
+                            .eq(KwtLogisticsOrderCirculate::getWOrderId, wOrderId));
+                    jsonObject.put("status", HttpStatus.SUCCESS_CODE);
+                    jsonObject.put("message", "停止接单成功");
+                }
+                list.add(jsonObject);
             });
         }
-        return HttpResult.ok();
+        return HttpResult.ok(list);
     }
 
     /**
@@ -739,12 +753,36 @@ public class AcceptCarriageOrderService {
                 result.put("status", HttpStatus.GLOBAL_EXCEPTION_CODE);
                 result.put("message", "单据不是待接单状态,不可取消!");
             }
+            /**针对于趟次车,需要将可派单数量溯源回归于物流订单中*/
+            KwtLogisticsOrder logisticsOrder = logisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                    .eq(KwtLogisticsOrder::getId, waybillOrder.getLOrderId()));
+            //已委托量
+            BigDecimal entrustAmount = logisticsOrder.getEntrustAmount().add(waybillOrder.getEntrustAmount());
+            //分包量
+            BigDecimal subcontractAmount = logisticsOrder.getSubcontractAmount().subtract(waybillOrder.getEntrustAmount());
+            logisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
+                    .set(KwtLogisticsOrder::getSubcontractAmount, subcontractAmount)
+                    .set(KwtLogisticsOrder::getEntrustAmount, entrustAmount)
+                    .set(KwtLogisticsOrder::getUpdateTime, new Date())
+                    .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId())
+                    .eq(KwtLogisticsOrder::getId, logisticsOrder.getId()));
             waybillOrderMapper.update(null, new LambdaUpdateWrapper<KwtWaybillOrder>()
                     .eq(KwtWaybillOrder::getType, NumberConstant.ONE)
                     .eq(KwtWaybillOrder::getId, id)
-                    .set(KwtWaybillOrder::getDelFlag, NumberConstant.ONE)
+                    .set(KwtWaybillOrder::getStatus, CarWaybillEnum.REVOKED.getCode())
                     .set(KwtWaybillOrder::getUpdateBy, LoginUserHolder.getUserId())
                     .set(KwtWaybillOrder::getUpdateTime, new Date()));
+            /**变更单据状态*/
+            KwtWaybillOrderTrack orderTrack = new KwtWaybillOrderTrack();
+            orderTrack.setId(new IdWorker(NumberConstant.ONE).nextId());
+            orderTrack.setWOrderId(Long.parseLong(id));
+            orderTrack.setStatus(CarWaybillEnum.REVOKED.getCode());
+            orderTrack.setDelFlag(NumberConstant.ZERO);
+            orderTrack.setCreateBy(LoginUserHolder.getUserId());
+            orderTrack.setCreateTime(new Date());
+            orderTrack.setUpdateBy(LoginUserHolder.getUserId());
+            orderTrack.setUpdateTime(new Date());
+            waybillOrderTrackMapper.insert(orderTrack);
             result.put("status", HttpStatus.SUCCESS_CODE);
             result.put("message", "取消成功");
         }

+ 490 - 38
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java

@@ -1,26 +1,34 @@
 package com.sckw.transport.service;
 
 import com.alibaba.fastjson.JSON;
+import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 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.core.web.response.HttpResult;
 import com.sckw.mongo.enums.BusinessTypeEnum;
+import com.sckw.mongo.model.SckwLogisticsOrder;
 import com.sckw.mongo.model.SckwWaybillOrder;
 import com.sckw.stream.model.SckwBusSum;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
+import com.sckw.transport.model.dto.ConfirmRefuseSendCarDto;
 import com.sckw.transport.model.dto.SendCarDto1;
 import jakarta.annotation.Resource;
+import org.checkerframework.checker.units.qual.K;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.stream.function.StreamBridge;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -36,6 +44,8 @@ public class KwtWaybillOrderService {
     @Autowired
     KwtLogisticsOrderMapper logisticsOrderDao;
     @Autowired
+    KwtLogisticsOrderTrackMapper logisticsOrderTrackDao;
+    @Autowired
     KwtLogisticsOrderAddressMapper logisticsOrderAddressDao;
     @Autowired
     KwtWaybillOrderAddressMapper waybillOrderAddressDao;
@@ -58,9 +68,53 @@ public class KwtWaybillOrderService {
      **/
     @Transactional(rollbackFor = Exception.class)
     public HttpResult sendCar(List<SendCarDto1> params) {
-        /**校验物流运单是否可以派车**/
+        /**校验**/
         //承运单信息
         KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(params.get(0).getLOrderId());
+        HttpResult result = checkWaybillOrder(params, logisticsOrder);
+        if (result.getCode() != HttpStatus.SUCCESS_CODE) {
+            return result;
+        }
+        //下游司机委派量累加(趟次)
+        BigDecimal ranksAmount = (BigDecimal)result.getData();
+
+        /**数据处理**/
+        result = setWaybillOrder(params, logisticsOrder);
+        if (result.getCode() != HttpStatus.SUCCESS_CODE) {
+            return result;
+        }
+        //Mongodb数据存储model
+        List<SckwWaybillOrder> sckwWaybillOrders = (List<SckwWaybillOrder>) result.getData();
+
+        /**变更承运单状态(累计派车量等于剩余可运量)/已委托量entrust_amount**/
+        setLogisticsBySendCar(logisticsOrder.getId(), ranksAmount);
+
+        /**Mongodb数据存储**/
+        for (SckwWaybillOrder waybillOrder:sckwWaybillOrders) {
+            //rabbitMq业务汇总数据发送/消费对象
+            SckwBusSum busSum = new SckwBusSum();
+            //业务汇总类型
+            busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
+            //操作对象(1新增/2修改/3替换数据)
+            busSum.setMethod(1);
+            //业务汇总数据对象
+            busSum.setObject(waybillOrder);
+            streamBridge.send("sckw-busSum", busSum);
+        }
+
+        /**发送消息**/
+        return HttpResult.ok();
+    }
+
+    /**
+     * @param params 派车请求参数
+     * @param logisticsOrder 物流订单
+     * @desc 派车校验
+     * @author zk
+     * @date 2023/7/19
+     **/
+    public HttpResult checkWaybillOrder(List<SendCarDto1> params, KwtLogisticsOrder logisticsOrder) {
+        /**校验物流运单是否可以派车**/
         if (logisticsOrder == null) {
             return HttpResult.error("订单已不存在!" );
         }
@@ -100,14 +154,7 @@ public class KwtWaybillOrderService {
                 }
             }
         }
-
-        /**数据处理**/
-        setWaybillOrder(params, logisticsOrder);
-
-        //变更承运单状态(累计派车量等于剩余可运量)/已委托量entrust_amount
-
-        /**发送消息**/
-        return HttpResult.ok();
+        return HttpResult.ok(ranksAmount);
     }
 
     /**
@@ -138,9 +185,8 @@ public class KwtWaybillOrderService {
 
             /**数据存储**/
             if (sendCarDto.getType() == Global.NUMERICAL_ONE) {
-
                 for (int i=0; i<sendCarDto.getCount(); i++) {
-                    //趟次派车存储
+                    //车辆运单存储
                     ranksSave(waybillOrder, loadAddress, unloadAddress);
 
                     /**SckwWaybillOrder数据组装**/
@@ -150,36 +196,34 @@ public class KwtWaybillOrderService {
                 }
             } else {
                 //循环派车存储
-                boolean bool = circulateSave(waybillOrder);
-                if (bool) {
+                KwtLogisticsOrderCirculate circulate = circulateSave(waybillOrder);
+                if (circulate != null) {
                     /**SckwWaybillOrder数据组装**/
                     SckwWaybillOrder mongoOrder = setSckwWaybillOrder(sendCarDto, waybillOrder, logisticsOrder, loadAddress,
                             unloadAddress, checkEnt, carrierEnt, goods);
+                    mongoOrder.set_id(circulate.getId());
+                    mongoOrder.setWOrderNo(null);
                     sckwWaybillOrders.add(mongoOrder);
                 }
             }
-
-
-
         }
 
-        /**Mongodb数据存储**/
-        for (SckwWaybillOrder waybillOrder:sckwWaybillOrders) {
-            //rabbitMq业务汇总数据发送/消费对象
-            SckwBusSum busSum = new SckwBusSum();
-            //业务汇总类型
-            busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
-            //操作对象(1新增/2修改)
-            busSum.setMethod(1);
-            //业务汇总数据对象
-            busSum.setObject(waybillOrder);
-            streamBridge.send("sckw-busSum", busSum);
-        }
-
-        return HttpResult.ok();
+        /**Mongodb数据存储
+         for (SckwWaybillOrder waybillOrder:sckwWaybillOrders) {
+         //rabbitMq业务汇总数据发送/消费对象
+         SckwBusSum busSum = new SckwBusSum();
+         //业务汇总类型
+         busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
+         //操作对象(1新增/2修改/3替换数据
+         busSum.setMethod(1);
+         //业务汇总数据对象
+         busSum.setObject(waybillOrder);
+         streamBridge.send("sckw-busSum", busSum);
+         }**/
+
+        return HttpResult.ok(sckwWaybillOrders);
     }
 
-
     /**
      * @param waybillOrder 车辆订单信息
      * @param loadAddress 装货地址信息
@@ -215,18 +259,19 @@ public class KwtWaybillOrderService {
      * @author zk
      * @date 2023/7/21
      **/
-    public boolean circulateSave(KwtWaybillOrder waybillOrder) {
+    public KwtLogisticsOrderCirculate circulateSave(KwtWaybillOrder waybillOrder) {
         //循环派车信息
         KwtLogisticsOrderCirculate circulate = logisticsOrderCirculateDao.findCirculate(waybillOrder.getLOrderId(),
-                waybillOrder.getTruckNo(), waybillOrder.getDriverId());
-        if (circulate == null || circulate.getStatus() == Global.UN_READ) {
+                waybillOrder.getTruckId(), waybillOrder.getDriverId(), 0);
+        if (circulate == null) {
             circulate = new KwtLogisticsOrderCirculate();
             BeanUtils.copyProperties(waybillOrder, circulate);
             circulate.setWOrderId(null);
+            circulate.setStatus(0);
             int count = logisticsOrderCirculateDao.insert(circulate);
-            return count > 0 ? true : false;
+            return count > 0 ? circulate : null;
         }
-        return false;
+        return circulate;
     }
 
     /**
@@ -258,12 +303,12 @@ public class KwtWaybillOrderService {
      * @author zk
      * @date 2023/7/20
      **/
-    public boolean setWaybillOrderTrack(Long wOrderId, int status) {
+    public KwtWaybillOrderTrack setWaybillOrderTrack(Long wOrderId, int status) {
         KwtWaybillOrderTrack orderTrack = new KwtWaybillOrderTrack();
         orderTrack.setWOrderId(wOrderId);
         orderTrack.setStatus(status);
         int count = waybillOrderTrackDao.insert(orderTrack);
-        return count > 0 ? true : false;
+        return count > 0 ? orderTrack : null;
     }
 
     /**
@@ -407,4 +452,411 @@ public class KwtWaybillOrderService {
         return order;
     }
 
+    /**
+     * @param lOrderId 承运订单ID
+     * @param ranksAmount 当前派车总量
+     * @description 派车更新承运订单信息
+     * @author zk
+     * @date 2023/7/24
+     **/
+    public void setLogisticsBySendCar(Long lOrderId, BigDecimal ranksAmount) {
+        /**
+         状态判断是否是分包承运单(不考虑该承运单下级分包)
+         存在:更新当前承运订单状态及委派量entrustAmount,并且校验承运订单所有父级状态是否需要修改(是修改状态,否则不修改)
+         不存在:更新当前承运订单状态及委派量entrustAmount
+         **/
+        //承运单信息
+        KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(lOrderId);
+
+        //当前承运订单所属分包层级
+        //int level = checkLogisticsLevel(logisticsOrder);
+        String pids = logisticsOrder.getPids();
+        if (StringUtils.isNotBlank(pids)) {
+            String [] idArray = pids.split(",");
+            for (String id : idArray) {
+                KwtLogisticsOrder order = logisticsOrderDao.selectById(id);
+                //承运订单-待派车
+                if (logisticsOrder.getStatus() == LogisticsOrderEnum.WAIT_DELIVERY.getCode()) {
+                    //承运订单不存在分包:更新当前承运订单状态及委派量entrustAmount
+                    if (order.getId() == logisticsOrder.getId()) {
+                        //承运订单已委派量
+                        BigDecimal entrustAmount = logisticsOrder.getEntrustAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getEntrustAmount();
+                        logisticsOrder.setEntrustAmount(entrustAmount.add(ranksAmount));
+                    }
+                    //承运订单:待派车->运输中
+                    logisticsOrder.setStatus(LogisticsOrderEnum.IN_TRANSIT.getCode());
+                    logisticsOrderDao.updateById(order);
+
+                    //承运订单状态记录
+                    KwtLogisticsOrderTrack orderTrack = new KwtLogisticsOrderTrack();
+                    orderTrack.setLOrderId(order.getId());
+                    orderTrack.setStatus(order.getStatus());
+                    orderTrack.setRemark(LogisticsOrderEnum.getName(order.getStatus()));
+                    logisticsOrderTrackDao.insert(orderTrack);
+                }
+            }
+        }
+    }
+
+    /**
+     * @param logisticsOrder 承运订单
+     * @description 当前承运订单所属分包层级
+     * @author zk
+     * @date 2023/7/24
+     **/
+    public int checkLogisticsLevel(KwtLogisticsOrder logisticsOrder) {
+        String pids = logisticsOrder.getPids();
+        String [] idArrays = StringUtils.isBlank(pids) ? new String[0] : pids.split(Global.COMMA);
+        return idArrays.length <= 1 ? Global.NUMERICAL_ONE : (idArrays.length - Global.NUMERICAL_ONE);
+    }
+
+    /**
+     * @param ids 车辆运单主键ID,多个已逗号隔开
+     * @description 取消派车
+     * @author zk
+     * @date 2023/7/24
+     **/
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult cancelSendCar(List<Long> ids){
+        /**数据校验**/
+        if (CollectionUtils.isEmpty(ids)) {
+            return HttpResult.error("请选择需要撤回的车辆运单!");
+        }
+        //1校验运单ID是否有效/2循环派车才能撤回/3运单当前状态是否可以撤回
+        for (Long id : ids) {
+            KwtWaybillOrder order = waybillOrderDao.selectById(id);
+            //1校验运单ID是否有效
+            if (order != null) {
+                //3待接单的车辆运单才能撤回
+                if (order.getStatus() != CarWaybillEnum.PENDING_ORDER.getCode()) {
+                    return HttpResult.error("运单"+order.getWOrderNo()+"当前状态已不能撤回!");
+                }
+            } else {
+                //循环派车信息
+                KwtLogisticsOrderCirculate circulate = logisticsOrderCirculateDao.selectById(id);
+                //2循环派车才能撤回
+                if (circulate != null) {
+                    return HttpResult.error("循环派车单不能撤回!");
+                }
+                return HttpResult.error("选择撤回车辆运单的数据不存在!");
+            }
+        }
+
+        /**业务处理**/
+        for (Long id : ids) {
+            KwtWaybillOrder order = waybillOrderDao.selectById(id);
+            if (order != null) {
+                //待接单的车辆运单才能撤回
+                if (order.getStatus() == CarWaybillEnum.PENDING_ORDER.getCode()) {
+                    /**1更新车辆运单**/
+                    order.setStatus(CarWaybillEnum.REVOKED.getCode());
+                    waybillOrderDao.updateById(order);
+
+                    /**2新增运单状态记录**/
+                    setWaybillOrderTrack(order.getId(), order.getStatus());
+
+                    /**3回退承运订单entrustAmount**/
+                    KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(order.getLOrderId());
+                    //承运订单已委派量=承运订单原委派量+当前车辆运单委派量
+                    BigDecimal entrustAmount = logisticsOrder.getEntrustAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getEntrustAmount();
+                    logisticsOrder.setEntrustAmount(entrustAmount.subtract(order.getEntrustAmount()));
+                    logisticsOrderDao.updateById(logisticsOrder);
+
+                    /**4Mongodb数据更新**/
+                    //1车辆运单
+                    SckwWaybillOrder wOrder = new SckwWaybillOrder();
+                    wOrder.set_id(order.getId());
+                    wOrder.setWOrderId(order.getId());
+                    wOrder.setStatus(order.getStatus());
+                    wOrder.setUpdateTime(order.getUpdateTime());
+                    wOrder.setUpdateBy(order.getUpdateBy());
+                    //rabbitMq业务汇总数据发送/消费对象
+                    SckwBusSum busSum = new SckwBusSum();
+                    //业务汇总类型
+                    busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
+                    //操作对象(1新增/2修改/3替换数据)
+                    busSum.setMethod(2);
+                    //业务汇总数据对象
+                    busSum.setObject(wOrder);
+                    streamBridge.send("sckw-busSum", busSum);
+
+                    //2承运订单
+                    SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
+                    lOrder.set_id(logisticsOrder.getId());
+                    lOrder.setLOrderId(logisticsOrder.getId());
+                    lOrder.setEntrustAmount(logisticsOrder.getEntrustAmount());
+                    lOrder.setUpdateTime(logisticsOrder.getUpdateTime());
+                    lOrder.setUpdateBy(logisticsOrder.getUpdateBy());
+                    //业务汇总类型
+                    busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+                    //操作对象(1新增/2修改/3替换数据)
+                    busSum.setMethod(2);
+                    //业务汇总数据对象
+                    busSum.setObject(lOrder);
+                    streamBridge.send("sckw-busSum", busSum);
+
+                    /**5发送消息**/
+
+                }
+            } else {
+                return HttpResult.error("选择撤回的数据已不存在!");
+            }
+        }
+
+        return HttpResult.ok("车辆运单撤回成功!");
+    }
+
+    /**
+     * @param params {}
+     * @description 确认接单
+     * @author zk
+     * @date 2023/7/25
+     **/
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult confirmSendCar(ConfirmRefuseSendCarDto params) {
+        /**趟次派车**/
+        if (params.getType() == Global.NUMERICAL_ONE) {
+            /**数据校验**/
+            KwtWaybillOrder order = waybillOrderDao.selectById(params.getWOrderId());
+            if (order == null) {
+                return HttpResult.error("车辆趟次运单不存在!");
+            }
+            //待接单车辆运单才能拒绝接单
+            if (order.getStatus() != CarWaybillEnum.PENDING_ORDER.getCode()) {
+                return HttpResult.error("车辆运单当前状态已不能拒绝接单!");
+            }
+
+            /**业务处理**/
+            /**1更新车辆运单**/
+            order.setStatus(CarWaybillEnum.PENDING_VEHICLE.getCode());
+            waybillOrderDao.updateById(order);
+
+            /**2新增运单状态记录**/
+            setWaybillOrderTrack(order.getId(), order.getStatus());
+
+            /**3Mongodb数据更新**/
+            //1车辆运单
+            SckwWaybillOrder wOrder = new SckwWaybillOrder();
+            wOrder.set_id(order.getId());
+            wOrder.setWOrderId(order.getId());
+            wOrder.setStatus(order.getStatus());
+            wOrder.setUpdateTime(order.getUpdateTime());
+            wOrder.setUpdateBy(order.getUpdateBy());
+            //rabbitMq业务汇总数据发送/消费对象
+            SckwBusSum busSum = new SckwBusSum();
+            //业务汇总类型
+            busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
+            //操作对象(1新增/2修改/3替换数据)
+            busSum.setMethod(2);
+            //业务汇总数据对象
+            busSum.setObject(wOrder);
+            streamBridge.send("sckw-busSum", busSum);
+
+            /**4发送消息**/
+
+        }
+
+        /**循环派车**/
+        if (params.getType() == Global.NUMERICAL_TWO) {
+            /**数据校验**/
+            KwtLogisticsOrderCirculate circulate = logisticsOrderCirculateDao.findCirculate(params.getLOrderId(),
+                    params.getTruckId(), params.getDriverId(), 0);
+            if (circulate == null) {
+                return HttpResult.error("车辆循环运单不存在!");
+            }
+
+            /**获取基础信息**/
+            //装货地址
+            KwtWaybillOrderAddress loadAddress = this.getAddress(params.getLOrderId(), Global.NUMERICAL_ONE);
+            //卸货地址
+            KwtWaybillOrderAddress unloadAddress = this.getAddress(params.getLOrderId(), Global.NUMERICAL_TWO);
+            //KwtWaybillOrder数据组装
+            KwtWaybillOrder waybillOrder = new KwtWaybillOrder();
+            waybillOrder.setEntId(LoginUserHolder.getEntId());
+            waybillOrder.setLOrderId(params.getLOrderId());
+            waybillOrder.setWOrderNo("xxxxxx");
+            waybillOrder.setType(params.getType());
+            waybillOrder.setStartTime(circulate.getStartTime());
+            waybillOrder.setEndTime(circulate.getEndTime());
+            waybillOrder.setTruckId(circulate.getTruckId());
+            waybillOrder.setTruckNo(circulate.getTruckNo());
+            waybillOrder.setDriverId(circulate.getDriverId());
+            waybillOrder.setDriverName(circulate.getDriverName());
+            waybillOrder.setDriverPhone(circulate.getDriverPhone());
+            waybillOrder.setDriverIdcard(circulate.getDriverIdcard());
+            waybillOrder.setEntrustAmount(circulate.getEntrustAmount());
+            waybillOrder.setStatus(CarWaybillEnum.PENDING_VEHICLE.getCode());
+
+            /**业务处理**/
+            /**1车辆运单存储**/
+            ranksSave(waybillOrder, loadAddress, unloadAddress);
+            //补上车辆运单待接单状态
+            setWaybillOrderTrack(circulate, waybillOrder.getId());
+
+
+            /**2更新承运订单信息**/
+            //承运单信息
+            KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(waybillOrder.getLOrderId());
+            //承运订单已委派量:承运订单历史委派量+当前运单委派量
+            BigDecimal entrustAmount = logisticsOrder.getEntrustAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getEntrustAmount();
+            logisticsOrder.setEntrustAmount(entrustAmount.add(waybillOrder.getEntrustAmount()));
+            logisticsOrderDao.updateById(logisticsOrder);
+
+            /**3更新循环派车数据**/
+            circulate.setWOrderId(waybillOrder.getId());
+            logisticsOrderCirculateDao.updateById(circulate);
+
+            /**4Mongodb数据更新**/
+            SckwWaybillOrder wOrder = new SckwWaybillOrder();
+            wOrder.set_id(circulate.getId());
+            wOrder.setWOrderId(waybillOrder.getId());
+            wOrder.setStatus(waybillOrder.getStatus());
+            wOrder.setUpdateTime(waybillOrder.getUpdateTime());
+            wOrder.setUpdateBy(waybillOrder.getUpdateBy());
+            //rabbitMq业务汇总数据发送/消费对象
+            SckwBusSum busSum = new SckwBusSum();
+            //业务汇总类型
+            busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
+            //操作对象(1新增/2修改/3替换数据)
+            busSum.setMethod(3);
+            //业务汇总数据对象
+            busSum.setObject(wOrder);
+            streamBridge.send("sckw-busSum", busSum);
+
+            /**5发送消息**/
+        }
+        return HttpResult.ok("确认接单成功!");
+    }
+
+    /**
+     * @param circulate 循环派车记录
+     * @param wOrderId 车辆订单ID
+     * @desc 新增循环派车接单后车辆运单待接单记录
+     * @author zk
+     * @date 2023/7/26
+     **/
+    public KwtWaybillOrderTrack setWaybillOrderTrack(KwtLogisticsOrderCirculate circulate, Long wOrderId) {
+        KwtWaybillOrderTrack orderTrack = new KwtWaybillOrderTrack();
+        orderTrack.setWOrderId(wOrderId);
+        orderTrack.setStatus(CarWaybillEnum.PENDING_ORDER.getCode());
+        orderTrack.setCreateBy(circulate.getCreateBy());
+        orderTrack.setCreateTime(circulate.getCreateTime());
+        orderTrack.setUpdateBy(circulate.getCreateBy());
+        orderTrack.setUpdateTime(circulate.getUpdateTime());
+        int count = waybillOrderTrackDao.insert(orderTrack);
+        return count > 0 ? orderTrack : null;
+    }
+
+    /**
+     * @param params {}
+     * @description 拒绝接单
+     * @author zk
+     * @date 2023/7/25
+     **/
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult refuseSendCar(ConfirmRefuseSendCarDto params) {
+        /**趟次派车**/
+        if (params.getType() == Global.NUMERICAL_ONE) {
+            /**数据校验**/
+            KwtWaybillOrder order = waybillOrderDao.selectById(params.getWOrderId());
+            if (order == null) {
+                return HttpResult.error("车辆趟次运单不存在!");
+            }
+            //待接单车辆运单才能拒绝接单
+            if (order.getStatus() != CarWaybillEnum.PENDING_ORDER.getCode()) {
+                return HttpResult.error("车辆运单当前状态已不能拒绝接单!");
+            }
+
+            /**业务处理**/
+            /**1更新车辆运单**/
+            order.setStatus(CarWaybillEnum.REVOKED.getCode());
+            waybillOrderDao.updateById(order);
+
+            /**2新增运单状态记录**/
+            setWaybillOrderTrack(order.getId(), order.getStatus());
+
+            /**3回退承运订单entrustAmount**/
+            KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(order.getLOrderId());
+            //承运订单已委派量=承运订单原委派量+当前车辆运单委派量
+            BigDecimal entrustAmount = logisticsOrder.getEntrustAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getEntrustAmount();
+            logisticsOrder.setEntrustAmount(entrustAmount.subtract(order.getEntrustAmount()));
+            logisticsOrderDao.updateById(logisticsOrder);
+
+            /**4Mongodb数据更新**/
+            //1车辆运单
+            SckwWaybillOrder wOrder = new SckwWaybillOrder();
+            wOrder.set_id(order.getId());
+            wOrder.setWOrderId(order.getId());
+            wOrder.setStatus(order.getStatus());
+            wOrder.setUpdateTime(order.getUpdateTime());
+            wOrder.setUpdateBy(order.getUpdateBy());
+            //rabbitMq业务汇总数据发送/消费对象
+            SckwBusSum busSum = new SckwBusSum();
+            //业务汇总类型
+            busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
+            //操作对象(1新增/2修改/3替换数据)
+            busSum.setMethod(2);
+            //业务汇总数据对象
+            busSum.setObject(wOrder);
+            streamBridge.send("sckw-busSum", busSum);
+
+            //2承运订单
+            SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
+            lOrder.set_id(logisticsOrder.getId());
+            lOrder.setLOrderId(logisticsOrder.getId());
+            lOrder.setEntrustAmount(logisticsOrder.getEntrustAmount());
+            lOrder.setUpdateTime(logisticsOrder.getUpdateTime());
+            lOrder.setUpdateBy(logisticsOrder.getUpdateBy());
+            //业务汇总类型
+            busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+            //操作对象(1新增/2修改/3替换数据)
+            busSum.setMethod(2);
+            //业务汇总数据对象
+            busSum.setObject(lOrder);
+            streamBridge.send("sckw-busSum", busSum);
+
+            /**5发送消息**/
+
+        }
+
+        /**循环派车**/
+        if (params.getType() == Global.NUMERICAL_TWO) {
+            /**数据校验**/
+            KwtLogisticsOrderCirculate circulate = logisticsOrderCirculateDao.findCirculate(params.getLOrderId(),
+                    params.getTruckId(), params.getDriverId(), 0);
+            if (circulate == null) {
+                return HttpResult.error("车辆循环运单不存在!");
+            }
+
+            /**1更新循环单状态为失效**/
+            circulate.setStatus(Global.YES);
+            logisticsOrderCirculateDao.updateById(circulate);
+
+            /**2Mongodb数据更新**/
+            SckwWaybillOrder wOrder = new SckwWaybillOrder();
+            wOrder.set_id(circulate.getId());
+            wOrder.setStatus(CarWaybillEnum.REJECT_ORDER.getCode());
+            wOrder.setUpdateTime(circulate.getUpdateTime());
+            wOrder.setUpdateBy(circulate.getUpdateBy());
+            //rabbitMq业务汇总数据发送/消费对象
+            SckwBusSum busSum = new SckwBusSum();
+            //业务汇总类型
+            busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
+            //操作对象(1新增/2修改/3替换数据)
+            busSum.setMethod(2);
+            //业务汇总数据对象
+            busSum.setObject(wOrder);
+            streamBridge.send("sckw-busSum", busSum);
+
+            /**3发送消息**/
+        }
+
+        return HttpResult.ok("拒绝接单成功!");
+    }
+
+
+
+
+
+
 }

+ 195 - 14
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java

@@ -2,8 +2,9 @@ package com.sckw.transport.service;
 
 import cn.hutool.core.util.ArrayUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.core.common.enums.NumberConstant;
-import com.sckw.core.common.enums.StringConstant;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.model.page.PageResult;
@@ -20,6 +21,7 @@ import com.sckw.mongo.model.SckwLogisticsOrder;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.order.api.model.AddressInfoDetail;
 import com.sckw.order.api.model.OrderDetailRes;
+import com.sckw.order.api.model.UpdateOrderAmountParam;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.product.api.model.KwpGoods;
 import com.sckw.stream.model.SckwBusSum;
@@ -28,6 +30,7 @@ import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.LogisticsOrderDTO;
 import com.sckw.transport.model.dto.OrderCarDTO;
+import com.sckw.transport.model.dto.OrderFinishDTO;
 import com.sckw.transport.model.param.LogisticsConsignmentParam;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
@@ -39,8 +42,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * @author lfdc
@@ -356,7 +358,8 @@ public class LogisticsConsignmentService {
         order.setTOrderNo(bo.getTOrderNo());
         order.setLOrderNo(lOrderNo);
         order.setPid(null);
-        order.setPids(orderId + StringConstant.SEMICOLON);
+//        order.setPids(orderId + StringConstant.COMMA);
+        order.setPids(orderId.toString());
         order.setSettlementCycle(bo.getSettlementCycle());
         order.setPrice(new BigDecimal(bo.getPrice()));
         order.setPriceType(remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.PRICE_TYPE.getType(), bo.getPriceType()) == null ?
@@ -471,8 +474,6 @@ public class LogisticsConsignmentService {
     }
 
     /**
-     * 采购订单-获取托运订单数据
-     *
      * @param id
      * @param page
      * @param pageSize
@@ -491,19 +492,51 @@ public class LogisticsConsignmentService {
     }
 
     /**
-     * 销售订单-获取托运订单数据
+     * 销售订单-采购订单-获取托运订单数据
      *
-     * @param id
+     * @param id       销售订单id
      * @param page
      * @param pageSize
      * @return
      */
-    public HttpResult sellLogisticsOrder(String id, Integer page, Integer pageSize) {
-        Long count = getLogisticsOrderCount(id);
-        Integer newPage = page - 1;
-        List<LogisticsOrderDTO> list = getLogisticsOrderData(id, newPage, pageSize);
-        PageResult build = PageResult.build(page, pageSize, count, list);
-        return HttpResult.ok(build);
+    public HttpResult logisticsOrder(String id, Integer page, Integer pageSize) {
+        HttpResult httpResult = new HttpResult();
+        OrderDetailRes orderDetailRes = tradeOrderInfoService.getOrderDetailById(Long.parseLong(id));
+        /**根据下单方式决定托运数据是否展示*/
+        boolean flag = false;
+        if (String.valueOf(NumberConstant.ONE).equals(orderDetailRes.getSource())) {
+            flag = true;
+        } else if (String.valueOf(NumberConstant.TWO).equals(orderDetailRes.getSource())) {
+            flag = true;
+        } else {
+            throw new RuntimeException("获取贸易订单下单方式异常!");
+        }
+        BigDecimal resAmount = orderDetailRes.getAmount();
+        if (flag) {
+            /**数据展示*/
+            //总数
+            Long count = getLogisticsOrderCount(id);
+            Integer newPage = page - 1;
+            List<LogisticsOrderDTO> list = getLogisticsOrderData(id, newPage, pageSize);
+            PageResult build = PageResult.build(page, pageSize, count, list);
+            /**数据统计*/
+            //计划量
+            BigDecimal amount = new BigDecimal(NumberConstant.ZERO);
+            for (LogisticsOrderDTO logisticsOrderDTO : list) {
+                amount = amount.add(logisticsOrderDTO.getAmount() == null ? new BigDecimal(NumberConstant.ZERO) : logisticsOrderDTO.getAmount());
+            }
+            //剩余调度量
+            BigDecimal residue = resAmount.subtract(amount);
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("count", count);
+            jsonObject.put("residue", residue);
+            jsonObject.put("amount", amount);
+            Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN);
+            map.put("dataList", build);
+            map.put("TableBottom", jsonObject);
+            httpResult.setData(map);
+        }
+        return httpResult;
     }
 
     /**
@@ -557,4 +590,152 @@ public class LogisticsConsignmentService {
         List<OrderCarDTO> list = waybillOrderMapper.selectWaybillOrderCarList(id, page, pageSize);
         return list;
     }
+
+    /**
+     * 采购订单/销售订单-托运订单列表-撤销托运
+     *
+     * @param ids  物流订单id
+     * @param type 单据操作类型
+     * @return
+     */
+    public HttpResult cancelConsign(List<String> ids, String type) {
+        if (CollectionUtils.isEmpty(ids) || ids.size() < NumberConstant.ONE) {
+            throw new RuntimeException("单据id不能为空");
+        }
+        List<JSONObject> list = new ArrayList<>();
+        //1采购 2销售
+        if (String.valueOf(NumberConstant.ONE).equals(type)) {
+            cancelConsignByOrder(ids, list);
+        } else if (String.valueOf(NumberConstant.TWO).equals(type)) {
+            cancelConsignBySellOrder(ids, list);
+        } else {
+            throw new RuntimeException("类型错误!");
+        }
+        return HttpResult.ok(list);
+    }
+
+    /**
+     * 销售订单撤销托运
+     *
+     * @param ids
+     */
+    private void cancelConsignBySellOrder(List<String> ids, List<JSONObject> list) {
+        ids.forEach(s -> {
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("id", s);
+            /**当前单据作废
+             * 托运数量回归溯
+             */
+            KwtLogisticsOrder kwtLogisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaUpdateWrapper<KwtLogisticsOrder>()
+                    .eq(KwtLogisticsOrder::getId, s));
+            if (kwtLogisticsOrder == null || (!String.valueOf(LogisticsOrderEnum.PENDING_ORDER.getCode()).equals(kwtLogisticsOrder.getStatus()))) {
+                log.info("物流订单单据id:{}", s);
+                jsonObject.put("message", "单据状态异常或单据不存在");
+                jsonObject.put("status", HttpStatus.GLOBAL_EXCEPTION_CODE);
+            } else {
+                OrderDetailRes orderDetailRes = tradeOrderInfoService.getOrderDetailById(Long.parseLong(s));
+                UpdateOrderAmountParam param = new UpdateOrderAmountParam();
+                param.setTOrderId(Long.parseLong(s));
+                param.setActualAmount(orderDetailRes.getActualAmount().add(kwtLogisticsOrder.getLoadAmount()));
+                param.setEntrustAmount(orderDetailRes.getEntrustAmount().add(kwtLogisticsOrder.getEntrustAmount().subtract(kwtLogisticsOrder.getLoadAmount())));
+                tradeOrderInfoService.updateOrderAmount(param);
+                kwtLogisticsOrder.setDelFlag(1);
+                kwtLogisticsOrder.setUpdateTime(new Date());
+                kwtLogisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+                kwtLogisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
+                        .eq(KwtLogisticsOrder::getId, kwtLogisticsOrder.getId())
+                        .set(KwtLogisticsOrder::getDelFlag, NumberConstant.ONE)
+                        .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId())
+                        .set(KwtLogisticsOrder::getUpdateTime, new Date()));
+                jsonObject.put("status", HttpStatus.SUCCESS_CODE);
+            }
+            list.add(jsonObject);
+        });
+    }
+
+    /**
+     * 采购订单撤销托运
+     *
+     * @param ids
+     */
+    private void cancelConsignByOrder(List<String> ids, List<JSONObject> list) {
+        ids.forEach(s -> {
+            /**当前单据作废
+             * 托运数量回归溯源
+             */
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("id", s);
+            /**当前单据作废
+             * 托运数量回归溯
+             */
+            KwtLogisticsOrder kwtLogisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaUpdateWrapper<KwtLogisticsOrder>()
+                    .eq(KwtLogisticsOrder::getId, s));
+            if (kwtLogisticsOrder == null || (!String.valueOf(LogisticsOrderEnum.PENDING_ORDER.getCode()).equals(kwtLogisticsOrder.getStatus()))) {
+                log.info("物流订单单据id:{}", s);
+                jsonObject.put("message", "单据状态异常或单据不存在");
+                jsonObject.put("status", HttpStatus.GLOBAL_EXCEPTION_CODE);
+            } else {
+                OrderDetailRes orderDetailRes = tradeOrderInfoService.getOrderDetailById(Long.parseLong(s));
+                UpdateOrderAmountParam param = new UpdateOrderAmountParam();
+                param.setTOrderId(Long.parseLong(s));
+                param.setActualAmount(orderDetailRes.getActualAmount().add(kwtLogisticsOrder.getLoadAmount()));
+                param.setEntrustAmount(orderDetailRes.getEntrustAmount().add(kwtLogisticsOrder.getEntrustAmount().subtract(kwtLogisticsOrder.getLoadAmount())));
+                tradeOrderInfoService.updateOrderAmount(param);
+                kwtLogisticsOrder.setDelFlag(1);
+                kwtLogisticsOrder.setUpdateTime(new Date());
+                kwtLogisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+                kwtLogisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
+                        .eq(KwtLogisticsOrder::getId, kwtLogisticsOrder.getId())
+                        .set(KwtLogisticsOrder::getDelFlag, NumberConstant.ONE)
+                        .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId())
+                        .set(KwtLogisticsOrder::getUpdateTime, new Date()));
+                jsonObject.put("status", HttpStatus.SUCCESS_CODE);
+            }
+            list.add(jsonObject);
+        });
+    }
+
+    /**
+     * 采购订单/销售订单-完结订单
+     *
+     * @param orderFinishDTO 数据dto
+     * @param type           类型
+     * @return
+     */
+    public HttpResult orderFinish(OrderFinishDTO orderFinishDTO, String type) {
+        HttpResult httpResult = ValidUtil.serviceValid(orderFinishDTO);
+        if (!String.valueOf(httpResult.getCode()).equals(String.valueOf(HttpStatus.SUCCESS_CODE))) {
+            return HttpResult.error(httpResult.getMsg());
+        }
+        //1采购 2销售
+        if (String.valueOf(NumberConstant.ONE).equals(type)) {
+            purchaseOrderFinish(orderFinishDTO);
+        } else if (String.valueOf(NumberConstant.TWO).equals(type)) {
+            sellOrderFinish(orderFinishDTO);
+        } else {
+            throw new RuntimeException("完结订单-单据类型异常!");
+        }
+        return null;
+    }
+
+    /**
+     * 销售订单-完结订单
+     *
+     * @param orderFinishDTO
+     */
+    private void sellOrderFinish(OrderFinishDTO orderFinishDTO) {
+        /** 订单完结 物流运单状态为【待派车】、【运输中】可操作*/
+        /**完结拦截 必须车辆运单无正在运输中的单据才能完结*/
+        /**完结订单 不做页面填写数量与数据库数量进行计算验证*/
+
+    }
+
+    /**
+     * 采购订单-完结订单
+     *
+     * @param orderFinishDTO
+     */
+    private void purchaseOrderFinish(OrderFinishDTO orderFinishDTO) {
+
+    }
 }

+ 23 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java

@@ -3,6 +3,8 @@ package com.sckw.transport.service;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.sckw.contract.api.RemoteContractService;
+import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
 import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.model.page.PageResult;
@@ -32,8 +34,10 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author lfdc
@@ -50,6 +54,9 @@ public class TransportCommonService {
     @DubboReference(version = "2.0.0", group = "design", check = false)
     TradeOrderInfoService tradeOrderInfoService;
 
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    RemoteContractService remoteContractService;
+
     @Autowired
     public KwtLogisticsOrderGoodsMapper logisticsOrderGoodsMapper;
 
@@ -128,6 +135,14 @@ public class TransportCommonService {
             //承运订单
             OrderDetailVO orderDetailVO = getOrderData(dto);
             httpResult.setData(orderDetailVO);
+        } else if (String.valueOf(NumberConstant.ZERO).equals(dto.getDocumentType())) {
+            //销售订单
+            OrderDetailVO orderDetailVO = getOrderData(dto);
+            httpResult.setData(orderDetailVO);
+        } else if (String.valueOf(NumberConstant.ONE).equals(dto.getDocumentType())) {
+            //采购订单
+            OrderDetailVO orderDetailVO = getOrderData(dto);
+            httpResult.setData(orderDetailVO);
         } else {
             httpResult.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
             httpResult.setMsg("单据类型错误");
@@ -137,6 +152,7 @@ public class TransportCommonService {
 
     /**
      * 获取订单详情
+     *
      * @param dto
      * @return
      */
@@ -171,8 +187,13 @@ public class TransportCommonService {
         if (contract != null) {
             orderDetailVO.setContractId(contract.getContractId() == null ? null : String.valueOf(contract.getContractId()));
             //todo 接口调用合同服务查询合同信息
-//            orderDetailVO.setContractName(contract.getContractId() == null ? null : String.valueOf(contract.getContractId()));
-//            orderDetailVO.setContractNo(contract.getContractId() == null ? null : String.valueOf(contract.getContractId()));
+            List<Long> list = new ArrayList<>(NumberConstant.SIXTEEN);
+            list.add(contract.getContractId());
+            Map<Long, ContractCommonInfoResDto> contractBaseInfo = remoteContractService.queryContractBaseInfo(list);
+            if (CollectionUtils.isNotEmpty(contractBaseInfo) && !ObjectUtils.isEmpty(contractBaseInfo.get(contract.getContractId()))) {
+                orderDetailVO.setContractName(contractBaseInfo.get(contract.getContractId()).getContactName());
+                orderDetailVO.setContractNo(contractBaseInfo.get(contract.getContractId()).getContractCode());
+            }
         }
         if (unitOne != null) {
             orderDetailVO.setConsignCompany(unitOne.getFirmName());

+ 10 - 9
sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderCirculateMapper.xml

@@ -58,22 +58,23 @@
         from kwt_logistics_order_circulate
         where del_flag = 0
         and l_order_id = #{lOrderId, jdbcType=BIGINT}
-        and truck_no = #{truckNo, jdbcType=VARCHAR}
+        and truck_id = #{truckId, jdbcType=BIGINT}
         and driver_id = #{driverId, jdbcType=BIGINT}
+        and status = #{status, jdbcType=INTEGER}
     </select>
 
-    <select id="selectEntityBylOrderIdAndOrderIds" resultMap="BaseResultMap">
+    <select id="selectEntityBylOrderIdAndOrderIds" resultType="java.lang.Long">
         SELECT
-            DISTINCT b.id
+        DISTINCT b.id
         FROM
-            kwt_waybill_order b,
-            kwt_logistics_order_contract c
+        kwt_waybill_order b,
+        kwt_logistics_order_circulate c
         WHERE
-            b.del_flag = 0
-          AND b.type = '2'
-          AND c.`status` = '0'
+        b.del_flag = 0
+        AND b.type = '2'
+        AND c.`status` = '0'
         <if test="lOrderId != null and lOrderId != ''">
-            b.l_order_id=#{l_order_id}
+          and   b.l_order_id=#{lOrderId}
         </if>
         <if test="ids != null and ids.size()>0">
             AND b.id IN

+ 6 - 4
sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml

@@ -47,8 +47,8 @@
     update_time, del_flag
     </sql>
     <select id="selectOrderList" resultType="com.sckw.transport.model.dto.LogisticsOrderDTO">
-        SELECT a.id          as lorderId,
-               a.l_order_no  as lorderNo,
+        SELECT a.id          as lOrderId,
+               a.l_order_no  as lOrderNo,
                b.`status`    as `status`,
                a.t_order_id  as tOrderId,
                a.t_order_no  as tOrderNo,
@@ -310,10 +310,12 @@
             and b.driver_name like concat('%',#{driverParam.driverName},'%')
         </if>
         <if test="driverParam.driverPhone != null and driverParam.driverPhone != ''">
-            AND b.driver_phone =#{driverParam.driverPhone}
+            <!--            AND b.driver_phone =#{driverParam.driverPhone}-->
+            AND b.driver_phone like concat('%',#{driverParam.driverPhone},'%')
         </if>
         <if test="driverParam.truckNo != null and driverParam.truckNo != ''">
-            AND b.truck_no =#{driverParam.truckNo}
+<!--            AND b.truck_no = #{driverParam.truckNo}-->
+            AND b.truck_no like concat('%',#{driverParam.truckNo},'%')
         </if>
         GROUP BY b.truck_no
     </select>