Răsfoiți Sursa

Merge branch 'dev' into dev-xucaiqin

xucaiqin 2 ani în urmă
părinte
comite
f85ee98e38
93 a modificat fișierele cu 1881 adăugiri și 790 ștergeri
  1. 1 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/StringConstant.java
  2. 90 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/LogUtil.java
  3. 3 3
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/model/ValiList.java
  4. 1 1
      sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/annotation/Translates.java
  5. 3 3
      sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/utils/ValidUtil.java
  6. 11 2
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwWaybillOrder.java
  7. 4 0
      sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/constant/RedisConstant.java
  8. 2 2
      sckw-gateway/src/main/resources/bootstrap-dev.yml
  9. 7 6
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java
  10. 6 1
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/AddressInfoDetail.java
  11. 6 1
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/ContractInfo.java
  12. 5 1
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/GoodsInfoDetailRes.java
  13. 5 1
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/OrderDetailRes.java
  14. 6 1
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UnitInfoDetailRes.java
  15. 17 1
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UpdateOrderAmountParam.java
  16. 42 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UpdateOrderStatusParam.java
  17. 14 2
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/dubbo/GoodsInfoService.java
  18. 6 1
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/AddressInfoDetail.java
  19. 7 1
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsAttributesDetail.java
  20. 5 1
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsDetail.java
  21. 7 1
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsImagesDetail.java
  22. 6 1
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/GoodsPriceRangesDetail.java
  23. 6 1
      sckw-modules-api/sckw-product-api/src/main/java/com/sckw/product/api/model/KwpGoods.java
  24. 5 0
      sckw-modules/sckw-example/pom.xml
  25. 12 1
      sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/MessageApiController.java
  26. 2 2
      sckw-modules/sckw-example/src/main/resources/bootstrap-dev.yml
  27. 5 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfDriverController.java
  28. 7 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/dto/KwfDriverDto.java
  29. 2 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfDriverService.java
  30. 2 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfFleetService.java
  31. 2 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckReportService.java
  32. 2 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java
  33. 11 9
      sckw-modules/sckw-fleet/src/main/resources/mapper/KwfDriverMapper.xml
  34. 3 3
      sckw-modules/sckw-fleet/src/main/resources/mapper/KwfFleetMapper.xml
  35. 3 3
      sckw-modules/sckw-fleet/src/main/resources/mapper/KwfTruckMapper.xml
  36. 9 9
      sckw-modules/sckw-fleet/src/main/resources/mapper/KwfTruckReportMapper.xml
  37. 81 7
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java
  38. 5 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/CompleteOrderParam.java
  39. 3 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/AddressInfoDetailRes.java
  40. 3 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/GoodsInfoDetailRes.java
  41. 2 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderDetailRes.java
  42. 2 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderListRes.java
  43. 3 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/UnitInfoDetailRes.java
  44. 59 18
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  45. 5 5
      sckw-modules/sckw-product/src/main/java/com/sckw/product/controller/KwpGoodsController.java
  46. 29 19
      sckw-modules/sckw-product/src/main/java/com/sckw/product/dubbo/GoodsInfoServiceImpl.java
  47. 5 3
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/AddGoodsParam.java
  48. 6 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/AddressInfo.java
  49. 3 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/GoodsAttributes.java
  50. 4 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/GoodsPriceRanges.java
  51. 4 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/UpdateGoodsParam.java
  52. 127 27
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java
  53. 1 1
      sckw-modules/sckw-report/src/main/java/com/sckw/report/consumer/SckwBusSumConsumer.java
  54. 4 0
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwTransportService.java
  55. 2 2
      sckw-modules/sckw-report/src/main/resources/bootstrap-dev.yml
  56. 5 0
      sckw-modules/sckw-transport/pom.xml
  57. 0 21
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/AcceptCarriageLogisticsController.java
  58. 63 29
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/AcceptCarriageOrderController.java
  59. 0 19
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/ConsignLogisticsController.java
  60. 3 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/ConsignOrderController.java
  61. 43 10
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java
  62. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/LogisticsConsignmentController.java
  63. 0 80
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/TransportCommonController.java
  64. 0 20
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/WaybillManagementController.java
  65. 0 15
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwoTradeOrderAddressMapper.java
  66. 0 15
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwoTradeOrderMapper.java
  67. 10 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderCirculateMapper.java
  68. 1 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderMapper.java
  69. 0 80
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwoTradeOrder.java
  70. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwoTradeOrderAddress.java
  71. 6 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrder.java
  72. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderAddress.java
  73. 10 17
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderCirculate.java
  74. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderContract.java
  75. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderGoods.java
  76. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderSubcontract.java
  77. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderTrack.java
  78. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderUnit.java
  79. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrder.java
  80. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTicket.java
  81. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTrack.java
  82. 77 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/SendCarDto1.java
  83. 37 6
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsConsignmentParam.java
  84. 77 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillDetailVO.java
  85. 10 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderVO.java
  86. 497 22
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java
  87. 129 14
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/DriverService.java
  88. 70 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java
  89. 97 78
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java
  90. 16 10
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java
  91. 0 9
      sckw-modules/sckw-transport/src/main/resources/mapper/KwoTradeOrderMapper.xml
  92. 40 184
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderCirculateMapper.xml
  93. 5 1
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

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

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

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

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

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

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

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

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

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

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

+ 11 - 2
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwWaybillOrder.java

@@ -125,12 +125,12 @@ public class SckwWaybillOrder{
 
 
     /**
-     * 装货日期
+     * 装货日期(实际装货时间)
      */
     private Date loadTime;
 
     /**
-     * 卸货日期
+     * 卸货日期(实际卸货时间)
      */
     private Date unloadTime;
 
@@ -418,5 +418,14 @@ public class SckwWaybillOrder{
      * 卸货详细地址
      */
     private String unloadingAddress;
+    /**
+     * 合理损耗
+     */
+    private BigDecimal loss;
+    /**
+     * 扣亏损值(合理损耗-(实装-实卸))
+     */
+    private BigDecimal goodsPrice;
+
 
 }

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

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

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

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

+ 7 - 6
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java

@@ -1,7 +1,9 @@
 package com.sckw.order.api.dubbo;
 
+import com.sckw.core.web.response.HttpResult;
 import com.sckw.order.api.model.OrderDetailRes;
 import com.sckw.order.api.model.UpdateOrderAmountParam;
+import com.sckw.order.api.model.UpdateOrderStatusParam;
 
 /**
  * @desc: 贸易订单信息相关dubbo
@@ -23,18 +25,17 @@ public interface TradeOrderInfoService {
      * @desc: 更新订单状态
      * @author: yzc
      * @date: 2023-07-18 18:31
-     * @Param tOrderId:
-     * @Param status:
-     * @return: void
+     * @Param param:
+     * @return: com.sckw.core.web.response.HttpResult
      */
-    void updateOrderStatus(Long tOrderId, Integer status);
+    HttpResult updateOrderStatus(UpdateOrderStatusParam param);
 
     /**
      * @desc: 更新订单委托量、已履约量
      * @author: yzc
      * @date: 2023-07-18 18:34
      * @Param param:
-     * @return: void
+     * @return: com.sckw.core.web.response.HttpResult
      */
-    void updateOrderAmount(UpdateOrderAmountParam param);
+    HttpResult updateOrderAmount(UpdateOrderAmountParam param);
 }

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

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

+ 6 - 1
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/ContractInfo.java

@@ -4,6 +4,9 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+import java.io.Serial;
+import java.io.Serializable;
+
 /**
  * @desc: 合同信息
  * @author: yzc
@@ -12,8 +15,10 @@ import lombok.ToString;
 @Getter
 @Setter
 @ToString
-public class ContractInfo {
+public class ContractInfo implements Serializable {
 
+    @Serial
+    private static final long serialVersionUID = -4803861633092427860L;
     /**
      * 合同id
      */

+ 5 - 1
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/GoodsInfoDetailRes.java

@@ -5,6 +5,8 @@ import lombok.Setter;
 import lombok.ToString;
 import lombok.experimental.Accessors;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.math.BigDecimal;
 
 /**
@@ -16,8 +18,10 @@ import java.math.BigDecimal;
 @Setter
 @ToString
 @Accessors(chain = true)
-public class GoodsInfoDetailRes {
+public class GoodsInfoDetailRes implements Serializable {
 
+    @Serial
+    private static final long serialVersionUID = -6117752651158804867L;
     /**
      * 商品类型label
      */

+ 5 - 1
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/OrderDetailRes.java

@@ -6,6 +6,8 @@ import lombok.Setter;
 import lombok.ToString;
 import lombok.experimental.Accessors;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.List;
@@ -19,8 +21,10 @@ import java.util.List;
 @Setter
 @ToString
 @Accessors(chain = true)
-public class OrderDetailRes {
+public class OrderDetailRes implements Serializable {
 
+    @Serial
+    private static final long serialVersionUID = -2951319997472302360L;
     /**
      * 订单id
      */

+ 6 - 1
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UnitInfoDetailRes.java

@@ -4,6 +4,9 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+import java.io.Serial;
+import java.io.Serializable;
+
 /**
  * @desc: 单位信息详情
  * @author: yzc
@@ -12,8 +15,10 @@ import lombok.ToString;
 @Getter
 @Setter
 @ToString
-public class UnitInfoDetailRes {
+public class UnitInfoDetailRes implements Serializable {
 
+    @Serial
+    private static final long serialVersionUID = 6017070445159402080L;
     /**
      * 单位类型label
      */

+ 17 - 1
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UpdateOrderAmountParam.java

@@ -4,6 +4,8 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.math.BigDecimal;
 
 /**
@@ -14,7 +16,10 @@ import java.math.BigDecimal;
 @Getter
 @Setter
 @ToString
-public class UpdateOrderAmountParam {
+public class UpdateOrderAmountParam implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 6845967309303678160L;
 
     /**
      * 订单id
@@ -30,4 +35,15 @@ public class UpdateOrderAmountParam {
      * 实际交付量
      */
     private BigDecimal actualAmount;
+
+    /**
+     * 更新用户id
+     */
+    private Long updateBy;
+
+    /**
+     * 更新者姓名
+     */
+    private String updateByName;
+
 }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@@ -8,6 +8,8 @@ import lombok.Setter;
 import lombok.ToString;
 import lombok.experimental.Accessors;
 
+import java.io.Serial;
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
 
@@ -21,7 +23,10 @@ import java.util.Date;
 @ToString
 @Accessors(chain = true)
 @TableName("kwp_goods")
-public class KwpGoods extends BaseModel {
+public class KwpGoods extends BaseModel implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -1228344082225456066L;
 
     /**
      * 企业id

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

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

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

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

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

@@ -5,7 +5,7 @@ spring:
         # 服务注册地址
         server-addr: 10.10.10.230:8848
         # 命名空间
-        namespace: sckw_lfdc
+        namespace: sckw-service-platform-dev
         # 共享配置
         group: sckw-service-platform
       config:
@@ -14,7 +14,7 @@ spring:
         # 配置文件格式
         file-extension: yaml
         # 命名空间
-        namespace: sckw_lfdc
+        namespace: sckw-service-platform-dev
         # 共享配置
         group: sckw-service-platform
         #可以读多个配置文件  需要在同一个命名空间下面可以是不同的组

+ 5 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfDriverController.java

@@ -76,6 +76,11 @@ public class KwfDriverController {
      **/
     @GetMapping("/findByPhone")
     public HttpResult findByPhone(String phone) throws SystemException {
+        if (StringUtils.isBlank(phone)) {
+            return HttpResult.error("手机号不能为空!");
+        }
+
+        //获取司机信息
         Long id = null;
         List<Map<String, Object>> drivers = driverService.findList(new HashMap(){{ put("phone", phone); }});
         if (com.sckw.core.utils.CollectionUtils.isEmpty(drivers)) {

+ 7 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/dto/KwfDriverDto.java

@@ -34,6 +34,7 @@ public class KwfDriverDto {
     /**
      * 身份证号
      */
+    @NotBlank(message = "司机身份证号不能为空!")
     @Pattern(regexp = "[0-9A-Za-z]{18}", message = "身份证号码格式不正确!")
     private String idcard;
 
@@ -42,6 +43,12 @@ public class KwfDriverDto {
      */
     private Long fleetId;
 
+    /**
+     * 备注
+     */
+    @Size(max=200, message = "remark长度不能大于200个字符!")
+    private String remark;
+
     /**
      * 身份证信息
      */

+ 2 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfDriverService.java

@@ -279,6 +279,8 @@ public class KwfDriverService {
                 if (driverEntDao.updateById(driverEnt) <= 0) {
                     throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.DELETE_FAIL);
                 }
+            } else {
+                HttpResult.error("选择删除的数据已不存在!");
             }
         }
         return HttpResult.ok("删除成功!");

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

@@ -150,6 +150,8 @@ public class KwfFleetService {
                 if (fleetDao.updateById(fleet) <= 0) {
                     throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.DELETE_FAIL);
                 }
+            } else {
+                HttpResult.error("选择删除的数据已不存在!");
             }
         }
         return HttpResult.ok("删除成功!");

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

@@ -304,6 +304,8 @@ public class KwfTruckReportService {
                 if (truckReportDao.updateById(truckReport) <= 0) {
                     throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.DELETE_FAIL);
                 }
+            } else {
+                HttpResult.error("选择删除的数据已不存在!");
             }
         }
         return HttpResult.ok("删除成功!");

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

@@ -277,6 +277,8 @@ public class KwfTruckService {
                 if (truckEntDao.updateById(truckEnt) <= 0) {
                     throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.DELETE_FAIL);
                 }
+            } else {
+                HttpResult.error("选择删除的数据已不存在!");
             }
         }
         return HttpResult.ok("删除成功!");

+ 11 - 9
sckw-modules/sckw-fleet/src/main/resources/mapper/KwfDriverMapper.xml

@@ -11,6 +11,7 @@
         left join kwf_driver_license drl on drl.driver_id = dr.id and drl.del_flag = 0
         left join kwf_driver_qualification drq on drq.driver_id = dr.id and drq.del_flag = 0
         left join kwf_truck_report trr on trr.ent_id = dre.ent_id and trr.driver_id = dr.id
+        left join kwf_truck tr on tr.id = trr.truck_id
         left join kwf_fleet_driver flr on flr.id = dr.id and flr.del_flag = 0
         left join kwf_fleet fl on fl.id = flr.fleet_id and fl.del_flag = 0
         where dr.del_flag = 0 and dre.del_flag = 0
@@ -43,8 +44,8 @@
         </if>
         <if test="keywords != null and keywords != ''">
             and (
-            dr.name like concat('%',#{keyWords},'%')
-            or dr.phone like concat('%',#{keyWords},'%')
+            dr.name like concat('%',#{keywords},'%')
+            or dr.phone like concat('%',#{keywords},'%')
             )
         </if>
         GROUP BY dr.`status`
@@ -55,13 +56,14 @@
         dr.id, dr.name, dr.phone, dr.idcard, dr.status, drc.expire_time idcardExpireTime, drc.address, drl.driver_no driverNo,
         drl.type licenseType, drl.expire_time licenseExpireTime, drl.grant_unit licenseGrantUnit,
         drq.quali_no qualiNo, dr.ent_id entId, dr.create_by createBy, dr.create_time createTime,
-        dr.update_time updateTime, dr.remark, trr.truck_no truckNo, fl.name fleetName
+        dr.update_time updateTime, dr.remark, tr.truck_no truckNo, fl.name fleetName
         from kwf_driver dr
         left join kwf_driver_ent dre on dre.driver_id = dr.id
         left join kwf_driver_card drc on drc.driver_id = dr.id and drc.del_flag = 0
         left join kwf_driver_license drl on drl.driver_id = dr.id and drl.del_flag = 0
         left join kwf_driver_qualification drq on drq.driver_id = dr.id and drq.del_flag = 0
         left join kwf_truck_report trr on trr.ent_id = dre.ent_id and trr.driver_id = dr.id
+        left join kwf_truck tr on tr.id = trr.truck_id
         left join kwf_fleet_driver flr on flr.id = dr.id and flr.del_flag = 0
         left join kwf_fleet fl on fl.id = flr.fleet_id and fl.del_flag = 0
         where dr.del_flag = 0 and dre.del_flag = 0
@@ -90,15 +92,15 @@
             and dr.status = #{status, jdbcType=VARCHAR}
         </if>
         <if test="startTime != null and startTime != '' " >
-            and DATE( fl.create_time) <![CDATA[ >= ]]> #{startTime,jdbcType=TIMESTAMP}
+            and DATE( dr.create_time) <![CDATA[ >= ]]> #{startTime,jdbcType=TIMESTAMP}
         </if>
         <if test="endTime != null and endTime != '' " >
-            and DATE( fl.create_time ) <![CDATA[ <= ]]> #{endTime,jdbcType=TIMESTAMP}
+            and DATE( dr.create_time ) <![CDATA[ <= ]]> #{endTime,jdbcType=TIMESTAMP}
         </if>
         <if test="keywords != null and keywords != ''">
             and (
-            dr.name like concat('%',#{keyWords},'%')
-            or dr.phone like concat('%',#{keyWords},'%')
+            dr.name like concat('%',#{keywords},'%')
+            or dr.phone like concat('%',#{keywords},'%')
             )
         </if>
         ORDER BY dr.create_time desc
@@ -137,8 +139,8 @@
         <if test="keywords != null and keywords != ''">
             and (
             dr.name like concat('%',#{keyWords},'%')
-            or dr.idcard like concat('%',#{keyWords},'%')
-            or dr.phone like concat('%',#{keyWords},'%')
+            or dr.idcard like concat('%',#{keywords},'%')
+            or dr.phone like concat('%',#{keywords},'%')
             )
         </if>
         ORDER BY dr.create_time desc

+ 3 - 3
sckw-modules/sckw-fleet/src/main/resources/mapper/KwfFleetMapper.xml

@@ -55,9 +55,9 @@
         </if>
         <if test="keywords != null and keywords != ''">
             and (
-                fl.name like concat('%',#{keyWords},'%')
-                or fl.contacts like concat('%',#{keyWords},'%')
-                or fl.phone like concat('%',#{keyWords},'%')
+                fl.name like concat('%',#{keywords},'%')
+                or fl.contacts like concat('%',#{keywords},'%')
+                or fl.phone like concat('%',#{keywords},'%')
             )
         </if>
         ORDER BY fl.create_time desc

+ 3 - 3
sckw-modules/sckw-fleet/src/main/resources/mapper/KwfTruckMapper.xml

@@ -44,7 +44,7 @@
         </if>
         <if test="keywords != null and keywords != ''">
             and (
-            tr.truck_no like concat('%',#{keyWords},'%')
+            tr.truck_no like concat('%',#{keywords},'%')
             )
         </if>
         GROUP BY tr.`status`
@@ -99,7 +99,7 @@
         </if>
         <if test="keywords != null and keywords != ''">
             and (
-            tr.truck_no like concat('%',#{keyWords},'%')
+            tr.truck_no like concat('%',#{keywords},'%')
             )
         </if>
         ORDER BY tr.create_time desc
@@ -144,7 +144,7 @@
         </if>
         <if test="keywords != null and keywords != ''">
             and (
-            tr.truck_no like concat('%',#{keyWords},'%')
+            tr.truck_no like concat('%',#{keywords},'%')
             )
         </if>
         ORDER BY tr.create_time desc

+ 9 - 9
sckw-modules/sckw-fleet/src/main/resources/mapper/KwfTruckReportMapper.xml

@@ -37,9 +37,9 @@
         </if>
         <if test="keywords != null and keywords != ''">
             and (
-            tr.truck_no like concat('%',#{keyWords},'%')
-            or dr.name like concat('%',#{keyWords},'%')
-            or dr.phone like concat('%',#{keyWords},'%')
+            tr.truck_no like concat('%',#{keywords},'%')
+            or dr.name like concat('%',#{keywords},'%')
+            or dr.phone like concat('%',#{keywords},'%')
             )
         </if>
         GROUP BY tr.`status`
@@ -84,9 +84,9 @@
         </if>
         <if test="keywords != null and keywords != ''">
             and (
-            tr.truck_no like concat('%',#{keyWords},'%')
-            or dr.name like concat('%',#{keyWords},'%')
-            or dr.phone like concat('%',#{keyWords},'%')
+            tr.truck_no like concat('%',#{keywords},'%')
+            or dr.name like concat('%',#{keywords},'%')
+            or dr.phone like concat('%',#{keywords},'%')
             )
         </if>
         ORDER BY tr.create_time desc
@@ -120,9 +120,9 @@
         </if>
         <if test="keywords != null and keywords != ''">
             and (
-            tr.truck_no like concat('%',#{keyWords},'%')
-            or dr.name like concat('%',#{keyWords},'%')
-            or dr.phone like concat('%',#{keyWords},'%')
+            tr.truck_no like concat('%',#{keywords},'%')
+            or dr.name like concat('%',#{keywords},'%')
+            or dr.phone like concat('%',#{keywords},'%')
             )
         </if>
         ORDER BY tr.create_time desc

+ 81 - 7
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java

@@ -1,20 +1,28 @@
 package com.sckw.order.dubbo;
 
 import com.alibaba.fastjson2.JSON;
-import com.sckw.core.exception.BusinessException;
+import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.mongo.model.SckwTradeOrder;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.order.api.model.OrderDetailRes;
 import com.sckw.order.api.model.UpdateOrderAmountParam;
+import com.sckw.order.api.model.UpdateOrderStatusParam;
 import com.sckw.order.model.KwoTradeOrder;
+import com.sckw.order.model.KwoTradeOrderTrack;
 import com.sckw.order.serivce.KwoTradeOrderService;
 import com.sckw.order.serivce.KwoTradeOrderTrackService;
+import com.sckw.redis.constant.RedisConstant;
+import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.stream.model.SckwBusSum;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.stream.function.StreamBridge;
 
+import java.math.BigDecimal;
+import java.util.Date;
 import java.util.Objects;
 
 /**
@@ -40,19 +48,85 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
     }
 
     @Override
-    public void updateOrderStatus(Long tOrderId, Integer status) {
-        KwoTradeOrder order = kwoTradeOrderService.getById(tOrderId);
+    public HttpResult updateOrderStatus(UpdateOrderStatusParam param) {
+        KwoTradeOrder order = kwoTradeOrderService.getById(param.getTOrderId());
         if (Objects.isNull(order)) {
-            throw new BusinessException("订单不存在!");
+            return HttpResult.error("订单不存在!");
+        }
+        Integer status = param.getStatus();
+        Long updateBy = param.getUpdateBy();
+        if (Objects.equals(String.valueOf(status), DictEnum.TORDER_STATUS_6.getValue())) {
+            if (!Objects.equals(String.valueOf(status), DictEnum.TORDER_STATUS_5.getValue())) {
+                return HttpResult.error("已完结的订单才可对账!");
+            }
+        } else if (Objects.equals(String.valueOf(status), DictEnum.TORDER_STATUS_7.getValue())) {
+            if (!Objects.equals(String.valueOf(status), DictEnum.TORDER_STATUS_6.getValue())) {
+                return HttpResult.error("已对账的订单才可结算!");
+            }
+        } else {
+            return HttpResult.error("非法订单状态操作!");
         }
+        order.setStatus(status).setUpdateBy(updateBy);
+        kwoTradeOrderService.updateById(order);
+        //订单状态记录
+        KwoTradeOrderTrack track = new KwoTradeOrderTrack();
+        track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setStatus(order.getStatus())
+                .setCreateBy(updateBy).setUpdateBy(updateBy);
+        kwoTradeOrderTrackService.insert(track);
+        //更新mongodb
+        SckwTradeOrder updateParam = new SckwTradeOrder();
+        updateParam.setTOrderId(order.getId()).setStatus(order.getStatus()).setUpdateBy(param.getUpdateBy())
+                .setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
+        saveMongoDb(3, updateParam);
+        return HttpResult.ok();
     }
 
     @Override
-    public void updateOrderAmount(UpdateOrderAmountParam param) {
-        KwoTradeOrder order = kwoTradeOrderService.getById(param.getTOrderId());
+    public HttpResult updateOrderAmount(UpdateOrderAmountParam param) {
+        Long id = param.getTOrderId();
+        Long updateBy = param.getUpdateBy();
+        String lockKey = String.format(RedisConstant.GOODS_UPDATE_AMOUNT_KEY, id);
+        if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 3L, 3L))) {
+            return HttpResult.error("业务繁忙,请稍后再试!");
+        }
+        KwoTradeOrder order = kwoTradeOrderService.getById(id);
         if (Objects.isNull(order)) {
-            throw new BusinessException("订单不存在!");
+            return HttpResult.error("订单不存在!");
+        }
+        if (!Objects.equals(String.valueOf(order.getStatus()), DictEnum.TORDER_STATUS_4.getValue())) {
+            return HttpResult.error("执行中的订单才可物流托运!");
+        }
+        BigDecimal amount = order.getAmount();
+        BigDecimal addEntrustAmount = order.getEntrustAmount();
+        if (Objects.nonNull(param.getEntrustAmount())) {
+            addEntrustAmount = addEntrustAmount.add(param.getActualAmount());
+            if (amount.compareTo(addEntrustAmount) < 0) {
+                return HttpResult.error("物流已委托总量不可大于订单总量!");
+            }
+        }
+        BigDecimal addActualAmount = order.getActualAmount();
+        if (Objects.nonNull(param.getActualAmount())) {
+            addActualAmount = addActualAmount.add(param.getActualAmount());
+            if (amount.compareTo(addActualAmount) < 0) {
+                return HttpResult.error("物流实际交付总量不可大于订单总量!");
+            }
+        }
+        order.setEntrustAmount(addEntrustAmount).setActualAmount(addActualAmount).setUpdateBy(param.getUpdateBy());
+        //已履约量等于订单总量自动完结订单
+        if (amount.compareTo(addActualAmount) == 0) {
+            order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue()));
+            KwoTradeOrderTrack track = new KwoTradeOrderTrack();
+            track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setStatus(order.getStatus())
+                    .setCreateBy(updateBy).setUpdateBy(updateBy);
+            kwoTradeOrderTrackService.insert(track);
         }
+        kwoTradeOrderService.updateById(order);
+        //更新mongodb
+        SckwTradeOrder updateParam = new SckwTradeOrder();
+        updateParam.setTOrderId(order.getId()).setEntrustAmount(addEntrustAmount).setActualAmount(addActualAmount)
+                .setStatus(order.getStatus()).setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
+        saveMongoDb(3, updateParam);
+        return HttpResult.ok();
     }
 
     /**

+ 5 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/CompleteOrderParam.java

@@ -26,6 +26,11 @@ public class CompleteOrderParam {
     @Min(value = 0, message = "实际交付量不能为负数")
     private BigDecimal actualAmount;
 
+    /**
+     * 已委托量
+     */
+    private BigDecimal entrustAmount;
+
     @Length(max = 200, message = "备注最多200字")
     private String remark;
 

+ 3 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/AddressInfoDetailRes.java

@@ -5,6 +5,8 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+import java.io.Serializable;
+
 /**
  * @desc: 地址信息详情
  * @author: yzc
@@ -13,7 +15,7 @@ import lombok.ToString;
 @Getter
 @Setter
 @ToString
-public class AddressInfoDetailRes extends AddressInfo {
+public class AddressInfoDetailRes extends AddressInfo implements Serializable {
 
     /**
      * 地址类型label

+ 3 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/GoodsInfoDetailRes.java

@@ -6,6 +6,8 @@ import lombok.Setter;
 import lombok.ToString;
 import lombok.experimental.Accessors;
 
+import java.io.Serializable;
+
 /**
  * @desc: 商品信息详情响应
  * @author: yzc
@@ -15,7 +17,7 @@ import lombok.experimental.Accessors;
 @Setter
 @ToString
 @Accessors(chain = true)
-public class GoodsInfoDetailRes extends GoodsInfo {
+public class GoodsInfoDetailRes extends GoodsInfo implements Serializable {
 
     /**
      * 商品类型label

+ 2 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderDetailRes.java

@@ -7,6 +7,7 @@ import lombok.Setter;
 import lombok.ToString;
 import lombok.experimental.Accessors;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.List;
@@ -20,7 +21,7 @@ import java.util.List;
 @Setter
 @ToString
 @Accessors(chain = true)
-public class OrderDetailRes {
+public class OrderDetailRes implements Serializable {
 
     /**
      * 订单id

+ 2 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderListRes.java

@@ -5,6 +5,7 @@ import lombok.Setter;
 import lombok.ToString;
 import lombok.experimental.Accessors;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 
 /**
@@ -16,7 +17,7 @@ import java.math.BigDecimal;
 @Setter
 @ToString
 @Accessors(chain = true)
-public class OrderListRes {
+public class OrderListRes implements Serializable {
 
     /**
      * 订单id

+ 3 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/UnitInfoDetailRes.java

@@ -5,6 +5,8 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+import java.io.Serializable;
+
 /**
  * @desc: 单位信息详情
  * @author: yzc
@@ -13,7 +15,7 @@ import lombok.ToString;
 @Getter
 @Setter
 @ToString
-public class UnitInfoDetailRes extends UnitInfo {
+public class UnitInfoDetailRes extends UnitInfo implements Serializable {
 
     /**
      * 单位类型label

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

@@ -11,7 +11,9 @@ import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.OrderGenerateUtils;
 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.model.SckwTradeOrder;
 import com.sckw.order.dao.KwoTradeOrderMapper;
 import com.sckw.order.model.*;
@@ -216,7 +218,10 @@ public class KwoTradeOrderService {
                 .setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_1.getValue()));
         kwoTradeOrderMapper.insert(order);
         //扣减库存
-        goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
+        HttpResult updateResult = goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
+        if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
+            throw new BusinessException(updateResult.getMsg());
+        }
         addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
     }
 
@@ -237,15 +242,15 @@ public class KwoTradeOrderService {
         }
         //todo: 则先校验是否存在对供应企业的预付钱包 ;【预计采购金额】是否大于预付清单的【可用预付】金额
         KwpGoods goods = goodsInfoService.getGoodsById(goodId);
-        if (Objects.isNull(goods) || !Objects.equals(goods.getStatus(), 1)) {
+        if (Objects.isNull(goods) || Objects.equals(goods.getDelFlag(), Global.YES) || !Objects.equals(goods.getStatus(), 1)) {
             throw new BusinessException("商品不存在或已下架!");
         }
+        if (goods.getAmount().compareTo(amount) < 0) {
+            throw new BusinessException("商品库存不足,请联系供应方!");
+        }
         //受理订单不校验预付款限额
         if (!isAcceptanceOrder && Objects.equals(trading, DictEnum.TRADE_TYPE_0.getValue()) && price.compareTo(goods.getAdvancePrice()) < 0) {
-            throw new BusinessException("采购订单金额不能小于商品最低预付款限额!");
-        }
-        if (goods.getAmount().compareTo(amount) < 0) {
-            throw new BusinessException("商品库存量小于采购数量!");
+            throw new BusinessException("您的订单总额未达到预付限额,请确认");
         }
     }
 
@@ -272,7 +277,10 @@ public class KwoTradeOrderService {
         }
         kwoTradeOrderMapper.insert(order);
         //扣减库存
-        goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
+        HttpResult updateResult = goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
+        if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
+            throw new BusinessException(updateResult.getMsg());
+        }
         addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
     }
 
@@ -385,7 +393,10 @@ public class KwoTradeOrderService {
             }
             orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount(), param.getGoodsInfo().getUnitPrice(), false);
             //扣减库存
-            goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
+            HttpResult updateResult = goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
+            if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
+                throw new BusinessException(updateResult.getMsg());
+            }
         }
         order.setAmount(param.getAmount()).setUnit(Objects.isNull(param.getGoodsInfo()) ? null : param.getGoodsInfo().getUnit())
                 .setPrice(param.getPrice()).setTrading(param.getTrading()).setPickupType(param.getPickupType())
@@ -586,7 +597,10 @@ public class KwoTradeOrderService {
         kwoTradeOrderTrackService.insert(track);
         //更新库存
         if (amount.compareTo(BigDecimal.ZERO) != 0) {
-            goodsInfoService.updateGoodsAmount(goods.getGoodsId(), amount);
+            HttpResult updateResult = goodsInfoService.updateGoodsAmount(goods.getGoodsId(), amount);
+            if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
+                throw new BusinessException(updateResult.getMsg());
+            }
         }
         //更新mongodb
         SckwTradeOrder updateParam = BeanUtils.copyProperties(param, SckwTradeOrder.class);
@@ -624,7 +638,10 @@ public class KwoTradeOrderService {
         kwoTradeOrderTrackService.insert(track);
         //释放商品库存
         KwoTradeOrderGoods goods = kwoTradeOrderGoodsService.getByOrderId(order.getId());
-        goodsInfoService.updateGoodsAmount(goods.getGoodsId(), order.getAmount().negate());
+        HttpResult updateResult = goodsInfoService.updateGoodsAmount(goods.getGoodsId(), order.getAmount().negate());
+        if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
+            throw new BusinessException(updateResult.getMsg());
+        }
         //mongodb更新订单状态
         SckwTradeOrder updateParam = new SckwTradeOrder();
         updateParam.setTOrderId(order.getId()).setStatus(order.getStatus()).setUpdateBy(LoginUserHolder.getUserId())
@@ -667,22 +684,27 @@ public class KwoTradeOrderService {
         if (!Objects.equals(String.valueOf(order.getStatus()), DictEnum.TORDER_STATUS_4.getValue())) {
             throw new BusinessException("执行中的订单才能完结订单!");
         }
-        if (kwoTradeOrderUnitService.entMatch(param.getId(),LoginUserHolder.getEntId(),DictEnum.TORDER_UNIT_TYPE_2.getValue())){
+        if (kwoTradeOrderUnitService.entMatch(param.getId(), LoginUserHolder.getEntId(), DictEnum.TORDER_UNIT_TYPE_2.getValue())) {
             throw new BusinessException("无订单操作权限!");
         }
-        KwoTradeOrderGoods goods = kwoTradeOrderGoodsService.getByOrderId(param.getId());
-        if (Objects.isNull(goods)) {
-            throw new BusinessException("商品信息异常!");
-        }
         order.setActualAmount(param.getActualAmount()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue()));
         kwoTradeOrderMapper.updateById(order);
         //订单状态记录
         KwoTradeOrderTrack track = new KwoTradeOrderTrack();
         track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setRemark(param.getRemark()).setStatus(order.getStatus());
         kwoTradeOrderTrackService.insert(track);
-        //更新库存
-        BigDecimal amount = param.getActualAmount().subtract(order.getAmount());
-        goodsInfoService.updateGoodsAmount(goods.getGoodsId(), amount);
+        if (param.getActualAmount().compareTo(order.getActualAmount()) != 0) {
+            KwoTradeOrderGoods goods = kwoTradeOrderGoodsService.getByOrderId(param.getId());
+            if (Objects.isNull(goods)) {
+                throw new BusinessException("商品信息异常!");
+            }
+            //更新库存
+            BigDecimal amount = param.getActualAmount().subtract(order.getAmount());
+            HttpResult updateResult = goodsInfoService.updateGoodsAmount(goods.getGoodsId(), amount);
+            if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
+                throw new BusinessException(updateResult.getMsg());
+            }
+        }
         //mongodb更新订单状态
         SckwTradeOrder updateParam = new SckwTradeOrder();
         updateParam.setTOrderId(order.getId()).setStatus(order.getStatus()).setUpdateBy(LoginUserHolder.getUserId())
@@ -717,6 +739,14 @@ public class KwoTradeOrderService {
         kwoTradeOrderUnitService.delByOrderIds(ids);
         kwoTradeOrderAddressService.delByOrderIds(ids);
         kwoTradeOrderContractService.delByOrderIds(ids);
+        //更新mongodb
+        ids.forEach(id -> {
+            SckwTradeOrder updateParam = new SckwTradeOrder();
+            updateParam.setTOrderId(id).setDelFlag(Global.YES).setUpdateBy(LoginUserHolder.getUserId())
+                    .setUpdateByName(LoginUserHolder.getUserName()).setUpdateTime(new Date());
+            saveMongoDb(3, updateParam);
+        });
+
     }
 
     /**
@@ -731,4 +761,15 @@ public class KwoTradeOrderService {
         wrapper.eq(KwoTradeOrder::getId, id).eq(KwoTradeOrder::getDelFlag, Global.NO).last("LIMIT 1");
         return kwoTradeOrderMapper.selectOne(wrapper);
     }
+
+    /**
+     * @desc: 根据id更新
+     * @author: yzc
+     * @date: 2023-07-20 10:24
+     * @Param order:
+     * @return: void
+     */
+    public void updateById(KwoTradeOrder order) {
+        kwoTradeOrderMapper.updateById(order);
+    }
 }

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

@@ -123,16 +123,16 @@ public class KwpGoodsController {
 
 
     /**
-     * @desc: 批量上架
+     * @desc: 单个上架
      * @author: yzc
      * @date: 2023-07-06 8:56
-     * @Param ids:
+     * @Param id:
      * @return: com.sckw.core.web.response.HttpResult
      */
     @GetMapping("/batchPutOnShelves")
-    public HttpResult batchPutOnShelves(@RequestParam List<Long> ids) {
-        kwpGoodsService.batchPutOnShelves(ids);
-        return HttpResult.ok("批量上架成功");
+    public HttpResult batchPutOnShelves(@RequestParam Long id) {
+        kwpGoodsService.batchPutOnShelves(id);
+        return HttpResult.ok("上架成功");
     }
 
     /**

+ 29 - 19
sckw-modules/sckw-product/src/main/java/com/sckw/product/dubbo/GoodsInfoServiceImpl.java

@@ -1,7 +1,8 @@
 package com.sckw.product.dubbo;
 
-import com.sckw.core.exception.BusinessException;
 import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.web.response.HttpResult;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.product.api.model.GoodsDetail;
 import com.sckw.product.api.model.KwpGoods;
@@ -13,10 +14,14 @@ import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.math.BigDecimal;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
- * @desc: TODO
+ * @desc: 商品信息dubbo接口
  * @author: yzc
  * @date: 2023-07-13 14:17
  */
@@ -34,29 +39,34 @@ public class GoodsInfoServiceImpl implements GoodsInfoService {
 
     @Override
     public KwpGoods getGoodsById(Long id) {
-        return BeanUtils.copyProperties(kwpGoodsService.selectGoodsById(id), KwpGoods.class);
+        return BeanUtils.copyProperties(kwpGoodsService.selectById(id), KwpGoods.class);
     }
 
     @Override
-    public void updateGoodsAmount(Long id, BigDecimal amount) {
-        com.sckw.product.model.KwpGoods goods = kwpGoodsService.selectGoodsById(id);
-        if (Objects.isNull(goods)) {
-            throw new BusinessException("商品不存在!");
+    public Map<Long, KwpGoods> getGoodsByIds(List<Long> ids) {
+        List<KwpGoods> list = BeanUtils.copyToList(kwpGoodsService.selectByIds(ids), KwpGoods.class);
+        if (CollectionUtils.isEmpty(list)) {
+            return Collections.emptyMap();
         }
+        return list.stream().collect(Collectors.toMap(KwpGoods::getId, e->e, (k1, k2) -> k1));
+    }
+
+    @Override
+    public HttpResult updateGoodsAmount(Long id, BigDecimal amount) {
         String lockKey = String.format(RedisConstant.GOODS_UPDATE_AMOUNT_KEY, id);
-        if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 60L))) {
-            throw new BusinessException("获取更新商品库存锁失败!");
+        if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 3L, 3L))) {
+            return HttpResult.error("业务繁忙,请稍后再试!");
+        }
+        com.sckw.product.model.KwpGoods goods = kwpGoodsService.selectGoodsById(id);
+        if (Objects.isNull(goods)) {
+            return HttpResult.error("商品不存在或已下架!");
         }
-        try {
-            BigDecimal goodsAmount = goods.getAmount();
-            if (goods.getAmount().compareTo(amount) < 0) {
-                log.info("库存:{}小于订单量:{}", goods.getAmount(), amount);
-                throw new BusinessException("商品库存小于订单量!");
-            }
-            goods.setAmount(goodsAmount.subtract(amount)).setPerformedAmount(Objects.nonNull(goods.getPerformedAmount()) ? goods.getPerformedAmount().add(amount) : amount);
-            kwpGoodsService.updateById(goods);
-        } finally {
-            RedissonUtils.unlock(lockKey);
+        BigDecimal goodsAmount = goods.getAmount();
+        if (goods.getAmount().compareTo(amount) < 0) {
+            return HttpResult.error("商品库存不足,请联系供应方!");
         }
+        goods.setAmount(goodsAmount.subtract(amount)).setPerformedAmount(Objects.nonNull(goods.getPerformedAmount()) ? goods.getPerformedAmount().add(amount) : amount);
+        kwpGoodsService.updateById(goods);
+        return HttpResult.ok();
     }
 }

+ 5 - 3
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/AddGoodsParam.java

@@ -1,9 +1,7 @@
 package com.sckw.product.model.vo.req;
 
 import jakarta.validation.Valid;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Size;
+import jakarta.validation.constraints.*;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -26,6 +24,7 @@ public class AddGoodsParam {
      * 商品名称
      */
     @NotBlank(message = "商品名称不能为空")
+    @Length(max = 100, message = "商品名称最多支持100字")
     private String name;
 
     /**
@@ -50,6 +49,7 @@ public class AddGoodsParam {
      * 库存数量
      */
     @NotNull(message = "库存数量不能为空")
+    @DecimalMin(value = "0.00",message = "库存数量最小为零")
     private BigDecimal amount;
 
     /**
@@ -62,6 +62,7 @@ public class AddGoodsParam {
      * 发票税率(%)
      */
     @NotNull(message = "发票税率不能为空")
+    @DecimalMin(value = "0.00",message = "发票税率最小为零")
     private BigDecimal taxRate;
 
     /**
@@ -73,6 +74,7 @@ public class AddGoodsParam {
     /**
      * 预付款最低限额(万元)
      */
+    @DecimalMin(value = "0.00",message = "预付款最低限额最小为零")
     private BigDecimal advancePrice;
 
     /**

+ 6 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/AddressInfo.java

@@ -1,10 +1,12 @@
 package com.sckw.product.model.vo.req;
 
 import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Pattern;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 import org.apache.logging.log4j.core.config.plugins.validation.constraints.NotBlank;
+import org.hibernate.validator.constraints.Length;
 
 /**
  * @desc: 地址信息
@@ -20,6 +22,7 @@ public class AddressInfo {
      * 地址名称
      */
     @NotBlank(message = "地址名称不能为空")
+    @Length(max = 60,message = "地址名称最长60字符")
     private String name;
 
     /**
@@ -38,6 +41,7 @@ public class AddressInfo {
      * 联系电话
      */
     @NotBlank(message = "联系电话不能为空")
+    @Pattern(regexp = "^1[3456789]\\d{9}$", message = "非法手机号格式")
     private String phone;
 
     /**
@@ -50,12 +54,14 @@ public class AddressInfo {
      * 所属区域名称
      */
     @NotBlank(message = "所属区域名称不能为空")
+    @Length(max = 40,message = "所属区域名称最长40字符")
     private String cityName;
 
     /**
      * 详细地址
      */
     @NotBlank(message = "详细地址不能为空")
+    @Length(max = 40,message = "详细地址最长40字符")
     private String detailAddress;
 
     /**

+ 3 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/GoodsAttributes.java

@@ -3,6 +3,7 @@ package com.sckw.product.model.vo.req;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
+import org.hibernate.validator.constraints.Length;
 
 /**
  * @desc: 添加商品属性
@@ -17,10 +18,12 @@ public class GoodsAttributes {
     /**
      * 参数名称
      */
+    @Length(max = 40,message = "参数名称最长40字符")
     private String name;
 
     /**
      * 参数值
      */
+    @Length(max = 40,message = "参数值最长40字符")
     private String val;
 }

+ 4 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/GoodsPriceRanges.java

@@ -1,5 +1,6 @@
 package com.sckw.product.model.vo.req;
 
+import jakarta.validation.constraints.DecimalMin;
 import jakarta.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
@@ -20,18 +21,21 @@ public class GoodsPriceRanges {
      * 起售量
      */
     @NotNull(message = "起售量不能为空")
+    @DecimalMin(value = "0.00",message = "起售量最小为零")
     private BigDecimal startAmount;
 
     /**
      * 上限售量
      */
     @NotNull(message = "上限售量不能为空")
+    @DecimalMin(value = "-1.00",message = "上限售量最小为零")
     private BigDecimal endAmount;
 
     /**
      * 含税价
      */
     @NotNull(message = "含税价不能为空")
+    @DecimalMin(value = "0.00", message = "含税价最低为零")
     private BigDecimal price;
 
     /**

+ 4 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/UpdateGoodsParam.java

@@ -1,5 +1,6 @@
 package com.sckw.product.model.vo.req;
 
+import jakarta.validation.constraints.DecimalMin;
 import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.Size;
 import lombok.Getter;
@@ -29,6 +30,7 @@ public class UpdateGoodsParam {
     /**
      * 商品名称
      */
+    @Length(max = 100, message = "商品名称最多支持100字")
     private String name;
 
     /**
@@ -49,6 +51,7 @@ public class UpdateGoodsParam {
     /**
      * 库存数量
      */
+    @DecimalMin(value = "0.00",message = "库存数量最小为零")
     private BigDecimal amount;
 
     /**
@@ -60,6 +63,7 @@ public class UpdateGoodsParam {
     /**
      * 发票税率(%)
      */
+    @DecimalMin(value = "0.00",message = "发票税率最小为零")
     private BigDecimal taxRate;
 
     /**

+ 127 - 27
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java

@@ -34,11 +34,12 @@ import org.jetbrains.annotations.NotNull;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
 /**
- * @desc: 商品service TODO
+ * @desc: 商品service
  * @author: yzc
  * @date: 2023-06-25 14:47
  */
@@ -159,14 +160,14 @@ public class KwpGoodsService {
      * @Param id:
      * @return: com.sckw.product.model.vo.res.GoodsDetail
      */
-    public GoodsDetail detail(Long id,Boolean isDubbo) {
+    public GoodsDetail detail(Long id, Boolean isDubbo) {
         KwpGoods goods;
         if (isDubbo) {
             goods = kwpGoodsMapper.selectById(id);
             if (Objects.isNull(goods)) {
                 return null;
             }
-        }else {
+        } else {
             goods = getGoodsById(id);
             if (Objects.isNull(goods)) {
                 throw new BusinessException("当前商品信息为空!");
@@ -293,8 +294,8 @@ public class KwpGoodsService {
      * @return: void
      */
     private void judgeParameters(@NotNull UpdateGoodsParam param) {
-        if (StringUtils.isBlank(param.getName())) {
-            throw new BusinessException("商品名称不能为空!");
+        if (StringUtils.isBlank(param.getName()) || param.getName().length() > 100) {
+            throw new BusinessException("商品名称不能为空且最长100字符!");
         }
         if (StringUtils.isBlank(param.getGoodsType())) {
             throw new BusinessException("商品类型不能为空!");
@@ -305,8 +306,8 @@ public class KwpGoodsService {
         if (StringUtils.isBlank(param.getSpec())) {
             throw new BusinessException("规格尺寸不能为空!");
         }
-        if (Objects.isNull(param.getAmount())) {
-            throw new BusinessException("库存数量不能为空!");
+        if (Objects.isNull(param.getAmount()) || param.getAmount().compareTo(BigDecimal.ZERO) < 0) {
+            throw new BusinessException("库存数量不能为空且最小为零!");
         }
         if (Objects.isNull(param.getTaxRate())) {
             throw new BusinessException("发票税率不能为空!");
@@ -317,22 +318,84 @@ public class KwpGoodsService {
         if (Objects.equals(param.getTrading(), DictEnum.TRADE_TYPE_0.getValue()) && Objects.isNull(param.getAdvancePrice())) {
             throw new BusinessException("交易方式为预付款时,预付款最低限额不能为空!");
         }
-        if (CollectionUtils.isEmpty(param.getPriceRanges())) {
+
+        List<GoodsAttributes> attributes = param.getAttributes();
+        if (CollectionUtils.isNotEmpty(attributes)) {
+            attributes.forEach(e -> {
+                if (StringUtils.isBlank(e.getName()) || e.getName().length() > 40) {
+                    throw new BusinessException("参数名称不能为空且最长40字符!");
+                }
+                if (StringUtils.isBlank(e.getVal()) || e.getVal().length() > 40) {
+                    throw new BusinessException("参数值不能为空且最长40字符!");
+                }
+            });
+        }
+        List<GoodsImages> images = param.getImages();
+        if (CollectionUtils.isNotEmpty(images)) {
+            images.forEach(e -> {
+                if (StringUtils.isBlank(e.getImage())) {
+                    throw new BusinessException("商品图片地址不能为空!");
+                }
+                if (Objects.isNull(e.getSort())) {
+                    throw new BusinessException("商品图片排序不能为空!");
+                }
+            });
+        }
+        List<GoodsPriceRanges> priceRanges = param.getPriceRanges();
+        if (CollectionUtils.isEmpty(priceRanges)) {
             throw new BusinessException("价格梯度不能为空!");
         }
+        priceRanges.forEach(e -> {
+            if (Objects.isNull(e.getStartAmount()) || e.getStartAmount().compareTo(BigDecimal.ZERO) < 0) {
+                throw new BusinessException("起售量最小为零!");
+            }
+            if (Objects.isNull(e.getEndAmount()) || e.getEndAmount().compareTo(new BigDecimal("-1.00")) < 0) {
+                throw new BusinessException("上限售量最小为零!");
+            }
+            if (Objects.isNull(e.getPrice()) || e.getStartAmount().compareTo(BigDecimal.ZERO) < 0) {
+                throw new BusinessException("含税价最低为零!");
+            }
+            if (Objects.isNull(e.getSort())) {
+                throw new BusinessException("梯度顺序不能为空!");
+            }
+        });
+        AddressInfo address = param.getAddressInfo();
+        if (Objects.isNull(address)) {
+            throw new BusinessException("地址信息不能为空!");
+        }
+        if (StringUtils.isBlank(address.getName()) || address.getName().length() > 60) {
+            throw new BusinessException("参数名称不能为空且最长60字符!");
+        }
+        if (StringUtils.isBlank(address.getType())) {
+            throw new BusinessException("地址类型不能为空!");
+        }
+        if (StringUtils.isBlank(address.getContacts())) {
+            throw new BusinessException("联系人不能为空!");
+        }
+        if (StringUtils.isBlank(address.getPhone())) {
+            throw new BusinessException("联系电话不能为空!");
+        }
+        if (Objects.isNull(address.getCityCode())) {
+            throw new BusinessException("所在地区code不能为空!");
+        }
+        if (StringUtils.isBlank(address.getCityName()) || address.getCityName().length() > 40) {
+            throw new BusinessException("所属区域名称不能为空最长40字符!");
+        }
+        if (Objects.isNull(address.getLat())) {
+            throw new BusinessException("纬度不能为空!");
+        }
+        if (Objects.isNull(address.getLng())) {
+            throw new BusinessException("经度不能为空!");
+        }
         if (Objects.isNull(param.getSupplyEntId())) {
             throw new BusinessException("供应企业不能为空!");
         }
-        if (Objects.isNull(param.getAddressInfo())) {
-            throw new BusinessException("地址信息不能为空!");
-        }
         if (Objects.isNull(param.getManager())) {
             throw new BusinessException("客户经理不能为空!");
         }
-        if (StringUtils.isBlank(param.getAmount())) {
-            throw new BusinessException("商品缩略图不能为空!");
+        if (StringUtils.isNotBlank(param.getRemark()) && param.getRemark().length() > 200) {
+            throw new BusinessException("备注最多支持200字!");
         }
-
     }
 
     /**
@@ -484,26 +547,38 @@ public class KwpGoodsService {
     }
 
     /**
-     * @desc: 批量上架
+     * @desc: 单个上架
      * @author: yzc
      * @date: 2023-07-06 8:56
-     * @Param ids:
+     * @Param id:
      * @return: void
      */
-    public void batchPutOnShelves(List<Long> ids) {
+    public void batchPutOnShelves(Long id) {
         LambdaQueryWrapper<KwpGoods> wrapper = new LambdaQueryWrapper<>();
-        wrapper.in(KwpGoods::getId, ids).in(KwpGoods::getStatus, 0, 2)
-                .eq(KwpGoods::getEntId, LoginUserHolder.getEntId()).eq(KwpGoods::getDelFlag, Global.NO);
-        List<KwpGoods> list = kwpGoodsMapper.selectList(wrapper);
-        if (!Objects.equals(ids.size(), list.size())) {
-            throw new BusinessException("上架操作仅针对“已下架”“草稿”状态的单据");
+        wrapper.eq(KwpGoods::getId, id).eq(KwpGoods::getEntId, LoginUserHolder.getEntId())
+                .eq(KwpGoods::getDelFlag, Global.NO).last("LIMIT 1");
+        KwpGoods goods = kwpGoodsMapper.selectOne(wrapper);
+        if (Objects.isNull(goods)) {
+            throw new BusinessException("商品不存在!");
+        }
+        if (Objects.equals(GoodsStatusEnum.PUT_ON_SHELVES.getCode(), goods.getStatus())) {
+            throw new BusinessException("上架操作仅针对“已下架”“草稿”状态的单据!");
+        }
+        if (Objects.equals(GoodsStatusEnum.SAVED.getCode(), goods.getStatus())) {
+            UpdateGoodsParam updateParam = BeanUtils.copyProperties(goods, UpdateGoodsParam.class);
+            updateParam.setAttributes(BeanUtils.copyToList(kwpGoodsAttributeService.getByGoodsId(id), GoodsAttributes.class));
+            updateParam.setPriceRanges(BeanUtils.copyToList(kwpGoodsPriceRangeService.getByGoodsId(id), GoodsPriceRanges.class));
+            updateParam.setImages(BeanUtils.copyToList(kwpGoodsImageService.getByGoodsId(id), GoodsImages.class));
+            updateParam.setAddressInfo(BeanUtils.copyProperties(kwpGoodsAddressService.getByGoodsId(id), AddressInfo.class));
+            judgeParameters(updateParam);
         }
         LambdaUpdateWrapper<KwpGoods> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(KwpGoods::getStatus, GoodsStatusEnum.PUT_ON_SHELVES.getCode()).set(KwpGoods::getAddedTime, new Date())
-                .in(KwpGoods::getId, ids);
+                .eq(KwpGoods::getId, id);
         kwpGoodsMapper.update(null, updateWrapper);
     }
 
+
     /**
      * @desc: 批量下架
      * @author: yzc
@@ -544,10 +619,11 @@ public class KwpGoodsService {
         LambdaUpdateWrapper<KwpGoods> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(KwpGoods::getDelFlag, Global.YES).in(KwpGoods::getId, ids);
         kwpGoodsMapper.update(null, updateWrapper);
-        kwpGoodsAddressService.delByGoodsIds(ids);
-        kwpGoodsAttributeService.delByGoodsIds(ids);
-        kwpGoodsImageService.delByGoodsIds(ids);
-        kwpGoodsPriceRangeService.delByGoodsIds(ids);
+        //不作删除,防止订单详情查不出相关信息或查出以往被删除的相关信息
+//        kwpGoodsAddressService.delByGoodsIds(ids);
+//        kwpGoodsAttributeService.delByGoodsIds(ids);
+//        kwpGoodsImageService.delByGoodsIds(ids);
+//        kwpGoodsPriceRangeService.delByGoodsIds(ids);
     }
 
 
@@ -668,6 +744,30 @@ public class KwpGoodsService {
         return kwpGoodsMapper.selectOne(last);
     }
 
+    /**
+     * @desc: 根据商品id获取商品信息
+     * @author: yzc
+     * @date: 2023-07-20 11:16
+     * @Param ids:
+     * @return: java.util.List<com.sckw.product.model.KwpGoods>
+     */
+    public KwpGoods selectById(Long id) {
+        return kwpGoodsMapper.selectById(id);
+    }
+
+
+    /**
+     * @desc: 根据商品ids获取商品信息
+     * @author: yzc
+     * @date: 2023-07-20 11:16
+     * @Param ids:
+     * @return: java.util.List<com.sckw.product.model.KwpGoods>
+     */
+    public List<KwpGoods> selectByIds(List<Long> ids) {
+        List<KwpGoods> list = kwpGoodsMapper.selectBatchIds(ids);
+        return CollectionUtils.emptyIfNull(list);
+    }
+
     /**
      * @desc: 更新
      * @author: yzc

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

@@ -118,7 +118,7 @@ public class SckwBusSumConsumer {
         /**车辆运单**/
         if (busSum.getBusSumType().equals("waybillOrder")) {
             SckwWaybillOrder order = JSONObject.parseObject(JSON.toJSONString(busSum.getObject()), SckwWaybillOrder.class);
-            order.set_id(order.getWOrderId());
+            order.set_id(order.getWOrderId() == null ? order.get_id() : order.getWOrderId());
             if (busSum.getMethod() == 1) {
                 /**新增**/
                 waybillOrderRepository.insert(order);

+ 4 - 0
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwTransportService.java

@@ -5,6 +5,7 @@ import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.CollectionUtils;
 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.excel.utils.DateUtil;
 import com.sckw.mongo.model.SckwLogisticsOrder;
@@ -57,6 +58,7 @@ public class KwTransportService {
         // 创建条件对象
         Criteria criteria = new Criteria();
         // 1. 全等于
+        criteria.and("entId").is(LoginUserHolder.getEntId());
         if (StringUtils.isNotBlank(query.getLoadAddress())) {
             criteria.and("loadDetailAddress").is(query.getLoadAddress());
         }
@@ -116,6 +118,7 @@ public class KwTransportService {
         // 创建条件对象
         Criteria criteria = new Criteria();
         // 1. 全等于
+        criteria.and("entId").is(LoginUserHolder.getEntId());
         if (StringUtils.isNotBlank(param.getLoadAddress())) {
             criteria.and("loadDetailAddress").is(param.getLoadAddress());
         }
@@ -167,6 +170,7 @@ public class KwTransportService {
         // 创建条件对象
         Criteria criteria = new Criteria();
         // 1. 全等于
+        criteria.and("entId").is(LoginUserHolder.getEntId());
         if (StringUtils.isNotBlank(query.getLoadAddress())) {
             criteria.and("loadDetailAddress").is(query.getLoadAddress());
         }

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

@@ -5,7 +5,7 @@ spring:
         # 服务注册地址
         server-addr: 10.10.10.230:8848
         # 命名空间
-        namespace: sckw_zk
+        namespace: sckw-service-platform-dev
         # 共享配置
         group: sckw-service-platform
       config:
@@ -14,7 +14,7 @@ spring:
         # 配置文件格式
         file-extension: yaml
         # 命名空间
-        namespace: sckw_zk
+        namespace: sckw-service-platform-dev
         # 共享配置
         group: sckw-service-platform
         #可以读多个配置文件  需要在同一个命名空间下面可以是不同的组

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

@@ -86,6 +86,11 @@
             <version>1.0.0</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-order-api</artifactId>
+        </dependency>
+
         <!-- validation -->
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 0 - 21
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/AcceptCarriageLogisticsController.java

@@ -1,21 +0,0 @@
-package com.sckw.transport.controller;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author lfdc
- * @description 承运物流Controller
- * @date 2023-06-26 16:06:07
- */
-@Slf4j
-@RestController
-@RequiredArgsConstructor
-@RequestMapping(value = "/kwtAcceptCarriageLogistics")
-public class AcceptCarriageLogisticsController {
-
-
-
-}

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

@@ -1,19 +1,19 @@
 package com.sckw.transport.controller;
 
-import com.sckw.core.utils.CollectionUtils;
+import com.alibaba.fastjson.JSONObject;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
-import com.sckw.excel.easyexcel.RequestHolder;
-import com.sckw.excel.utils.ExcelUtil;
+import com.sckw.transport.model.dto.DocumentParamDTO;
+import com.sckw.transport.model.dto.OrderDTO;
 import com.sckw.transport.model.dto.OrderTakingDTO;
 import com.sckw.transport.model.dto.SendCarDTO;
-import com.sckw.transport.model.param.AcceptCarriageOrderQuery;
 import com.sckw.transport.model.param.LogisticsConsignmentParam;
-import com.sckw.transport.model.vo.ConsignOrderVO;
+import com.sckw.transport.model.param.LogisticsOrderParam;
 import com.sckw.transport.service.AcceptCarriageOrderService;
-import jakarta.servlet.http.HttpServletResponse;
+import com.sckw.transport.service.TransportCommonService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -21,8 +21,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.List;
-
 /**
  * @author lfdc
  * @description 承运订单controller
@@ -37,49 +35,56 @@ public class AcceptCarriageOrderController {
     @Autowired
     AcceptCarriageOrderService acceptCarriageOrderService;
 
+    @Autowired
+    private TransportCommonService transportCommonService;
+
     /**
-     * 承运订单首页条件查询
-     * @param query 查询参数
+     * 获取订单详情-托运订单-承运订单
+     *
+     * @param dto
      * @return
      */
-    @RequestMapping(value = "/list", method = RequestMethod.GET)
-    public HttpResult acceptCarriageOrderList(AcceptCarriageOrderQuery query) {
+    @RequestMapping(value = "/getOrderDetail", method = RequestMethod.POST)
+    public HttpResult getOrderDetail(@Validated @RequestBody DocumentParamDTO dto) {
+        log.info("获取订单详情参数:{}", JSONObject.toJSONString(dto));
         try {
-            return acceptCarriageOrderService.list(query);
+            return transportCommonService.getOrderDetail(dto);
         } catch (Exception e) {
-            log.error("承运订单查询失败:{}", e.getMessage(), e);
+            log.error("获取订单详情失败:error {} ", e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }
 
     /**
-     * 承运订单首页统计查询
+     * 托运订单/承运订单-撤销托运
+     *
+     * @param orderDto
      * @return
      */
-    @RequestMapping(value = "/statistics", method = RequestMethod.GET)
-    public HttpResult acceptCarriageOrderCount(AcceptCarriageOrderQuery query) {
+    @RequestMapping(value = "/cancelConsign", method = RequestMethod.POST)
+    public HttpResult cancelConsign(@Validated @RequestBody OrderDTO orderDto) {
         try {
-            return acceptCarriageOrderService.count(query);
+            return transportCommonService.cancelConsign(orderDto);
         } catch (Exception e) {
-            log.error("承运订单首页统计查询:{}", e.getMessage(), e);
+            log.error("托运订单-撤销托运运单失败:订单id {},error {} ", orderDto.getId(), e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }
 
     /**
-     * 承运订单导出
-     * @param query
+     * 对账管理-运费收款对账界面查询接口
+     * @param logisticsOrderParam
      * @return
      */
-    @RequestMapping(value = "/export", method = RequestMethod.GET)
-    public HttpResult export(AcceptCarriageOrderQuery query) {
-        HttpServletResponse response = RequestHolder.getResponse();
-        List list = acceptCarriageOrderService.export(query);
-        if (CollectionUtils.isNotEmpty(list)){
-            ExcelUtil.download(response, ConsignOrderVO.class, list);
-            return HttpResult.ok();
+    @RequestMapping(value = "/getAcceptCarriageOrder", method = RequestMethod.POST)
+    public HttpResult getAcceptCarriageOrder(@RequestBody @Validated LogisticsOrderParam logisticsOrderParam) {
+        try {
+            return transportCommonService.getAcceptCarriageOrder(logisticsOrderParam);
+        } catch (Exception e) {
+            log.error("派车给当前司机单据查询 error:{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
-        return HttpResult.error("没有可导出的数据");
+
     }
 
     /**
@@ -122,4 +127,33 @@ public class AcceptCarriageOrderController {
         }
     }
 
+    /**
+     * 承运订单-获取运单详情
+     * @param wOrderId 运单id
+     * @return
+     */
+    @RequestMapping(value = "/getWaybillData", method = RequestMethod.GET)
+    public HttpResult getWaybillData(@Param("wOrderId") String wOrderId) {
+        try {
+            return acceptCarriageOrderService.getWaybillData(wOrderId);
+        } catch (Exception e) {
+            log.error("承运订单-获取运单详情 error:{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
+    /**
+     * 承运订单-获取运单详情
+     * @param wOrderId 运单id
+     * @return
+     */
+    @RequestMapping(value = "/updateDriver", method = RequestMethod.GET)
+    public HttpResult updateDriver(@Param("wOrderId") String wOrderId) {
+        try {
+            return acceptCarriageOrderService.getWaybillData(wOrderId);
+        } catch (Exception e) {
+            log.error("承运订单-获取运单详情 error:{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
 }

+ 0 - 19
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/ConsignLogisticsController.java

@@ -1,19 +0,0 @@
-package com.sckw.transport.controller;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author lfdc
- * @description 托运物流Controller
- * @date 2023-06-26 16:06:05
- */
-@Slf4j
-@RestController
-@RequiredArgsConstructor
-@RequestMapping(value = "/kwtConsignLogistics")
-public class ConsignLogisticsController {
-
-}

+ 3 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/ConsignOrderController.java

@@ -27,7 +27,7 @@ public class ConsignOrderController {
     @Autowired
     ConsignOrderService consignOrderService;
     /**
-     * 托运订单获取车辆运单
+     * 托运订单/承运订单-获取车辆运单
      *
      * @param orderDto
      * @return
@@ -69,8 +69,9 @@ public class ConsignOrderController {
         try {
             return null;
         } catch (Exception e) {
-            log.error("托运订单-撤销托运运单失败:订单id {},error {} ", orderDto.getId(), e.getMessage(), e);
+            log.error("托运订单-完结订单失败:订单id {},error {} ", orderDto.getId(), e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }
+
 }

+ 43 - 10
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/DriverController.java → sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java

@@ -1,30 +1,35 @@
 package com.sckw.transport.controller;
 
+import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.core.web.model.ValiList;
+import com.sckw.transport.model.dto.SendCarDto1;
 import com.sckw.transport.service.DriverService;
+import com.sckw.transport.service.KwtWaybillOrderService;
+import jakarta.validation.Valid;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
- * @author lfdc
- * @description 司机端操作controller
- * @date 2023-07-14 11:07:10
+ * @author lfq
+ * @desc 车辆运单
+ * @date 2023/7/19 0019
  */
 @Slf4j
 @RestController
-@RequestMapping("/kwtDriverController")
-public class DriverController {
+@RequestMapping("/kwtWaybillOrder")
+public class KwtWaybillOrderController {
+
+    @Autowired
+    KwtWaybillOrderService waybillOrderService;
 
     @Autowired
     private DriverService driverService;
 
     /**
-     * 根据当前登录 id获取派给当前id的车辆运单
+     * 司机端 根据当前登录 id获取派给当前id的车辆运单
      *
      * @return
      */
@@ -54,4 +59,32 @@ public class DriverController {
         }
     }
 
+    //
+    /**
+     * @param params {}
+     * @description 派车-趟次/循环
+     * @author zk
+     * @date 2023/5/30
+     **/
+    @PostMapping("/sendCar")
+    public HttpResult commitSendCar(@RequestBody @Valid ValiList<SendCarDto1> params){
+        if (CollectionUtils.isEmpty(params)) {
+            return HttpResult.error("请选择委派车辆信息!");
+        }
+        return waybillOrderService.commitSendCar(params);
+    }
+
+
+    //取消派车(未接单前)
+    //更换车辆(趟次派车(-出车前)/循环派车(接单后-出车前))
+    //更换司机(趟次派车(-卸货前)/循环派车(接单后-卸货前))
+    //确认接单-趟次/循环
+    //拒绝接单-趟次/循环
+    //确认/拒绝出车
+    //到达装货地点
+    //确认装货
+    //到达卸货地点
+    //确认卸货
+
+
 }

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

@@ -27,7 +27,7 @@ public class LogisticsConsignmentController {
     LogisticsConsignmentService logisticsConsignmentService;
 
     /**
-     * 采购订单-物流托运
+     * 采购订单-物流托运生成托运订单
      * @param logisticsConsignmentParam
      * @return
      */
@@ -78,7 +78,7 @@ public class LogisticsConsignmentController {
     }
 
     /**
-     * 销售订单-物流托运
+     * 销售订单-物流托运生成托运订单
      * @param logisticsConsignmentParam
      * @return
      */

+ 0 - 80
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/TransportCommonController.java

@@ -1,80 +0,0 @@
-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.DocumentParamDTO;
-import com.sckw.transport.model.dto.OrderDTO;
-import com.sckw.transport.model.param.LogisticsOrderParam;
-import com.sckw.transport.service.TransportCommonService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author lfdc
- * @description 运输服务公共接口调用查询Controller
- * @date 2023-07-12 09:07:42
- */
-@Slf4j
-@RestController
-@RequestMapping(value = "/kwtTransport")
-public class TransportCommonController {
-    @Autowired
-    private TransportCommonService transportCommonService;
-
-    /**
-     * 获取订单详情-托运订单-承运订单
-     *
-     * @param dto
-     * @return
-     */
-    @RequestMapping(value = "/getOrderDetail", method = RequestMethod.POST)
-    public HttpResult getOrderDetail(@Validated @RequestBody DocumentParamDTO dto) {
-        log.info("获取订单详情参数:{}", JSONObject.toJSONString(dto));
-        try {
-            return transportCommonService.getOrderDetail(dto);
-        } catch (Exception e) {
-            log.error("获取订单详情失败:error {} ", e.getMessage(), e);
-            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
-        }
-    }
-
-    /**
-     * 托运订单/承运订单-撤销托运
-     *
-     * @param orderDto
-     * @return
-     */
-    @RequestMapping(value = "/cancelConsign", method = RequestMethod.POST)
-    public HttpResult cancelConsign(@Validated @RequestBody OrderDTO orderDto) {
-        try {
-            return transportCommonService.cancelConsign(orderDto);
-        } catch (Exception e) {
-            log.error("托运订单-撤销托运运单失败:订单id {},error {} ", orderDto.getId(), e.getMessage(), e);
-            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
-        }
-    }
-
-    /**
-     * 对账管理-运费收款对账界面查询接口
-     * @param logisticsOrderParam
-     * @return
-     */
-    @RequestMapping(value = "/getAcceptCarriageOrder", method = RequestMethod.POST)
-    public HttpResult getAcceptCarriageOrder(@RequestBody @Validated LogisticsOrderParam logisticsOrderParam) {
-        try {
-            return transportCommonService.getAcceptCarriageOrder(logisticsOrderParam);
-        } catch (Exception e) {
-            log.error("派车给当前司机单据查询 error:{}", e.getMessage(), e);
-            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
-        }
-
-    }
-
-
-}

+ 0 - 20
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/WaybillManagementController.java

@@ -1,20 +0,0 @@
-package com.sckw.transport.controller;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author lfdc
- * @description 运单管理controller
- * @date 2023-07-05 10:07:50
- */
-
-@Slf4j
-@RestController
-@RequiredArgsConstructor
-@RequestMapping(value = "/kwtWaybillManagement")
-public class WaybillManagementController {
-
-}

+ 0 - 15
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwoTradeOrderAddressMapper.java

@@ -1,15 +0,0 @@
-package com.sckw.transport.dao;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.sckw.transport.model.KwoTradeOrderAddress;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * @desc: 交易订单装卸货地址信息mapper
- * @author: yzc
- * @date: 2023-06-25 14:18
- */
-@Mapper
-public interface KwoTradeOrderAddressMapper extends BaseMapper<KwoTradeOrderAddress> {
-
-}

+ 0 - 15
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwoTradeOrderMapper.java

@@ -1,15 +0,0 @@
-package com.sckw.transport.dao;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.sckw.transport.model.KwoTradeOrder;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * @desc: 交易订单(采购订单/销售订单)mapper
- * @author: yzc
- * @date: 2023-06-25 14:18
- */
-@Mapper
-public interface KwoTradeOrderMapper extends BaseMapper<KwoTradeOrder> {
-
-}

+ 10 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderCirculateMapper.java

@@ -3,6 +3,9 @@ package com.sckw.transport.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.transport.model.KwtLogisticsOrderCirculate;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 @Mapper
 public interface KwtLogisticsOrderCirculateMapper extends BaseMapper<KwtLogisticsOrderCirculate> {
@@ -17,4 +20,11 @@ public interface KwtLogisticsOrderCirculateMapper extends BaseMapper<KwtLogistic
     int updateByPrimaryKeySelective(KwtLogisticsOrderCirculate record);
 
     int updateByPrimaryKey(KwtLogisticsOrderCirculate record);
+    /**
+     * 查询循环单-根据司机id单据状态-联查表
+     * @param id
+     * @param loopStatus
+     * @return
+     */
+    List<Long> selectDriverOrderByStatus(@Param("id") Long id, @Param("status") List<Long> loopStatus);
 }

+ 1 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.mongo.model.TobleTop;
 import com.sckw.transport.model.KwtWaybillOrder;
 import com.sckw.transport.model.dto.OrderCarDTO;
+import com.sckw.transport.model.vo.WaybillDetailVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 

+ 0 - 80
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwoTradeOrder.java

@@ -1,80 +0,0 @@
-package com.sckw.transport.model;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.sckw.core.model.base.BaseModel;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
-import lombok.experimental.Accessors;
-
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-
-/**
- * @desc: 交易订单(采购订单/销售订单)
- * @author: yzc
- * @date: 2023-06-25 9:31
- */
-@Getter
-@Setter
-@ToString
-@Accessors(chain = true)
-@TableName("sckw_order.kwo_trade_order")
-public class KwoTradeOrder extends BaseModel {
-
-    /**
-     * 订单编号
-     */
-    private String tOrderNo;
-
-    /**
-     * 货物数量
-     */
-    private BigDecimal amount;
-
-    /**
-     * 单位(吨、方、件、箱、其他)
-     */
-    private String unit;
-
-    /**
-     * 价格
-     */
-    private BigDecimal price;
-
-    /**
-     * 交易方式(预付款、货到付款)
-     */
-    private Long trading;
-
-    /**
-     * 提货方式(采方自提、供应配送)
-     */
-    private Long pickupType;
-
-    /**
-     * 计划开始日期
-     */
-    private LocalDateTime startTime;
-
-    /**
-     * 计划结束日期
-     */
-    private LocalDateTime endTime;
-
-    /**
-     * 已委托量
-     */
-    private BigDecimal entrustAmount;
-
-    /**
-     * 实际交付量
-     */
-    private BigDecimal actualAmount;
-
-    /**
-     * 订单创建来源类型(采购下单/销售代客下单)
-     */
-    private Integer source;
-
-}

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

@@ -16,7 +16,7 @@ import lombok.experimental.Accessors;
 @Setter
 @ToString
 @Accessors(chain = true)
-@TableName("sckw_order.kwo_trade_order_address")
+@TableName("kwo_trade_order_address")
 public class KwoTradeOrderAddress extends BaseModel {
 
     /**

+ 6 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrder.java

@@ -14,7 +14,7 @@ import java.util.Date;
  * @date 2023-06-26 16:06:12
  */
 @Data
-@TableName("sckw_transport.kwt_logistics_order")
+@TableName("kwt_logistics_order")
 public class KwtLogisticsOrder implements Serializable {
     /**
      * 主键
@@ -46,6 +46,11 @@ public class KwtLogisticsOrder implements Serializable {
      */
     private Long pid;
 
+    /**
+     * 分包所有物流订单id
+     */
+    private String pids;
+
     /**
      * 结算周期(周结、月结、季结)
      */

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

@@ -13,7 +13,7 @@ import java.util.Date;
  * @date 2023-06-26 16:06:12
  */
 @Data
-@TableName("sckw_transport.kwt_logistics_order_address")
+@TableName("kwt_logistics_order_address")
 public class KwtLogisticsOrderAddress implements Serializable {
     /**
      * 主键

+ 10 - 17
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderCirculate.java

@@ -15,7 +15,7 @@ import java.util.Date;
  * @date 2023-06-26 16:06:12
  */
 @Data
-@TableName("sckw_transport.kwt_logistics_order_circulate")
+@TableName("kwt_logistics_order_circulate")
 public class KwtLogisticsOrderCirculate implements Serializable {
     /**
      * 主键
@@ -31,11 +31,19 @@ public class KwtLogisticsOrderCirculate implements Serializable {
      * 物流订单id
      */
     private Long lOrderId;
+    /**
+     * 物流订单id
+     */
+    private Long wOrderId;
 
     /**
      * 车牌号
      */
     private String truckNo;
+    /**
+     * 0趟次1循环
+     */
+    private String type;
 
     /**
      * 司机id
@@ -54,28 +62,13 @@ public class KwtLogisticsOrderCirculate implements Serializable {
 
     private Date entrustDate;
 
-    /**
-     * 卸货量
-     */
-    private BigDecimal unloadAmount;
-
-    /**
-     * 装货量
-     */
-    private BigDecimal loadAmount;
-
-    /**
-     * 亏吨量(装货量-卸货量)
-     */
-    private BigDecimal deficitAmount;
-
     /**
      * 备注
      */
     private String remark;
 
     /**
-     * 用户状态(0正常、1已锁
+     * 用户状态(0正常、1失效)
      */
     private Integer status;
 

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

@@ -13,7 +13,7 @@ import java.util.Date;
  * @date 2023-07-06 16:06:12
  */
 @Data
-@TableName("sckw_transport.kwt_logistics_order_contract")
+@TableName("kwt_logistics_order_contract")
 public class KwtLogisticsOrderContract implements Serializable {
     /**
      * 主键

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

@@ -14,7 +14,7 @@ import java.util.Date;
  * @date 2023-06-26 16:06:12
  */
 @Data
-@TableName("sckw_transport.kwt_logistics_order_goods")
+@TableName("kwt_logistics_order_goods")
 public class KwtLogisticsOrderGoods implements Serializable {
     /**
      * 主键

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

@@ -13,7 +13,7 @@ import java.util.Date;
  * @date 2023-06-26 16:06:12
  */
 @Data
-//@TableName("sckw_transport.kwt_logistics_order_address")
+//@TableName("kwt_logistics_order_address")
 public class KwtLogisticsOrderSubcontract implements Serializable {
     /**
      * 主键

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

@@ -14,7 +14,7 @@ import java.util.Date;
  * @date 2023-06-26 16:06:12
  */
 @Data
-@TableName("sckw_transport.kwt_logistics_order_track")
+@TableName("kwt_logistics_order_track")
 public class KwtLogisticsOrderTrack implements Serializable {
     /**
      * 主键

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

@@ -16,7 +16,7 @@ import java.util.Date;
  */
 @Data
 @Accessors(chain = true)
-@TableName("sckw_transport.kwt_logistics_order_unit")
+@TableName("kwt_logistics_order_unit")
 public class KwtLogisticsOrderUnit implements Serializable {
     /**
      * 主键

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

@@ -15,7 +15,7 @@ import java.util.Date;
  * @date 2023-06-26 16:06:12
  */
 @Data
-@TableName("sckw_transport.kwt_waybill_order")
+@TableName("kwt_waybill_order")
 public class KwtWaybillOrder implements Serializable {
     /**
      * 主键

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

@@ -14,7 +14,7 @@ import java.util.Date;
  * @date 2023-06-26 16:06:12
  */
 @Data
-@TableName("sckw_transport.kwt_waybill_order_ticket")
+@TableName("kwt_waybill_order_ticket")
 public class KwtWaybillOrderTicket implements Serializable {
     /**
      * 主键

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

@@ -13,7 +13,7 @@ import java.util.Date;
  * @date 2023-06-26 16:06:12
  */
 @Data
-@TableName("sckw_transport.kwt_waybill_order_track")
+@TableName("kwt_waybill_order_track")
 public class KwtWaybillOrderTrack implements Serializable {
     /**
      * 主键

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

@@ -0,0 +1,77 @@
+package com.sckw.transport.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import jakarta.validation.constraints.*;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+
+/**
+ * @author zk
+ * @desc TODO
+ * @date 2023/7/19 0019
+ */
+@Data
+public class SendCarDto1 {
+
+    /**
+     * 派车类型(1:趟次:2:循环)
+     */
+    @JsonProperty("type")
+    @NotNull(message = "派车类型不能为空")
+    private Integer type;
+
+    /**
+     * 物流订单id
+     */
+    @JsonProperty("lOrderId")
+    @NotNull(message = "物流订单ID不能为空")
+    private Long lOrderId;
+
+    /**
+     * 司机id
+     */
+    @JsonProperty("driverId")
+    @NotNull(message = "司机信息ID不能为空")
+    private Long driverId;
+
+    /**
+     * 车牌号
+     */
+    @JsonProperty("truckNo")
+    @NotBlank(message = "车牌号不能为空")
+    private String truckNo;
+
+    /**
+     * 上游给运单委派量
+     */
+    @JsonProperty("entrustAmount")
+    @NotNull(message = "核定载量不能为空")
+    @DecimalMin(value= "0", inclusive=false, message = "核定载量必须等于或大于0")
+    private Double entrustAmount;
+
+    /**
+     * 趟次
+     */
+    @JsonProperty("count")
+    @DecimalMin(value= "0", inclusive=false, message = "趟次必须等于或大于0")
+    private Integer count;
+
+    /**
+     * 装货时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @NotNull(message = "开始时间不能为空")
+    private Date loadDateTime;
+
+    /**
+     * 卸货时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @NotNull(message = "结束时间不能为空")
+    private Date unloadDateTime;
+
+}

+ 37 - 6
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsConsignmentParam.java

@@ -6,6 +6,7 @@ import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 import lombok.experimental.Accessors;
+import org.hibernate.validator.constraints.Length;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
@@ -19,6 +20,10 @@ import java.util.Date;
 @Data
 @Accessors(chain = true)
 public class LogisticsConsignmentParam {
+    /**
+     *总量
+     */
+    private Long amount;
     /**
      * 分配承运量
      */
@@ -42,15 +47,18 @@ public class LogisticsConsignmentParam {
     /**
      * 联系电话
      */
+    @NotNull(message = "托运联系电话不能为空")
     private String checkContactPhone;
     /**
      * 联系人
      */
+    @NotNull(message = "托运联系人不能为空")
     private String checkContacts;
 
     /**
      * 合理损耗
      */
+    @NotNull(message = "合理损耗不能为空")
     private Long loss;
     /**
      * 合理损耗单位
@@ -60,6 +68,7 @@ public class LogisticsConsignmentParam {
     /**
      * 商品价值(扣亏货值)
      */
+    @NotNull(message = "扣亏货值不能为空")
     private Long goodsPrice;
     /**
      * 商品价值(扣亏货值)单位
@@ -80,32 +89,35 @@ public class LogisticsConsignmentParam {
     /**
      * 联系电话
      */
+    @NotNull(message = "承运联系电话不能为空")
     private String consignContactPhone;
     /**
      * 联系人
      */
+    @NotNull(message = "承运联系人不能为空")
     private String consignContacts;
 
     /**
      * 结算周期(周结、月结、季结)
      */
+    @NotNull(message = "结算周期不能为空")
     private Long settlementCycle;
-    /**
-     * 合同
-     */
-    private String contract;
+
     /**
      * 合同id
      */
+    @NotNull(message = "合同id不能为空")
     private String contractId;
     /**
      * 合同编号
      */
+    @NotNull(message = "合同编号不能为空")
     private String contractNo;
 
     /**
      * 合同名称
      */
+    @NotNull(message = "合同名称不能为空")
     private String contractName;
 
     /**
@@ -116,6 +128,7 @@ public class LogisticsConsignmentParam {
     /**
      * 货物名称
      */
+    @NotNull(message = "货物名称不能为空")
     private String goodsName;
 
     /**
@@ -134,15 +147,27 @@ public class LogisticsConsignmentParam {
     @NotNull(message = "是否全量不能为空")
     private Boolean isFullDose;
     /**
-     * 订单id
+     * 订单id-分包时要使用
      */
     @JsonProperty("lOrderId")
     private String lOrderId;
     /**
-     * 订单编号
+     * 订单编号-分包时要使用
      */
     @JsonProperty("lOrderNo")
     private String lOrderNo;
+    /**
+     * 贸易订单id
+     */
+    @JsonProperty("tOrderId")
+    @NotNull(message = "贸易订单id不能为空")
+    private String tOrderId;
+    /**
+     * 贸易订单编号
+     */
+    @JsonProperty("tOrderNo")
+    @NotNull(message = "贸易订单编号不能为空")
+    private String tOrderNo;
     /**
      * 运价
      */
@@ -151,30 +176,36 @@ public class LogisticsConsignmentParam {
     /**
      * 运价方式
      */
+    @NotNull(message = "运价方式不能为空")
     private String priceType;
     /**
      * 计划卸货时间
      */
+    @NotNull(message = "计划卸货时间不能为空")
     @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date receiveGoodsDateTime;
     /**
      * 计划发货时间
      */
+    @NotNull(message = "计划发货时间不能为空")
     @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date shipmentsDateTime;
     /**
      * 税率
      */
+    @NotNull(message = "税率不能为空")
     private Long taxRate;
     /**
      * 备注
      */
+    @Length(max = 400,message = "单据编号长度错误最大长度:{max}")
     private String remark;
     /**
      * 计费方式
      */
+    @NotNull(message = "计费方式不能为空")
     private String billingMode;
 
 }

+ 77 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillDetailVO.java

@@ -0,0 +1,77 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author lfdc
+ * @description 运单详情vo
+ * @date 2023-07-18 16:07:54
+ */
+@Data
+public class WaybillDetailVO {
+    /**
+     * 派车量
+     */
+    private BigDecimal sendCarWeigh;
+    /**
+     * 实装量
+     */
+    private BigDecimal loadAmount;
+    /**
+     * 实卸量
+     */
+    private BigDecimal unloadAmount;
+    /**
+     * 实际装货时间
+     */
+    private Date stowageDateTime;
+    /**
+     * 实际卸货时间
+     */
+    private Date unloadDateTime;
+    /**
+     * 运单类型
+     */
+    private String waybillType;
+    /**
+     * 亏吨量
+     */
+    private BigDecimal deficitAmount;
+    /**
+     * 亏吨量
+     */
+    private BigDecimal loss;
+    /**
+     * 扣亏损值
+     */
+    private BigDecimal goodsPrice;
+    /**
+     * 派车人
+     */
+    private String appointor;
+    /**
+     * 承运车队
+     */
+    private String fleetName;
+    /**
+     * 车牌号
+     */
+    private String truckNo;
+    /**
+     * 司机姓名
+     */
+    private String driverName;
+    /**
+     * 计划开始时间
+     */
+    private Date startTime;
+    /**
+     * 计划结束时间
+     */
+    private Date endTime;
+
+}
+

+ 10 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderVO.java

@@ -242,6 +242,16 @@ public class WaybillOrderVO {
      */
     private String fleetName;
 
+    /**
+     * 企业名称(指的是物流公司)
+     */
+    private String firmName;
+
+    /**
+     * 企业id
+     */
+    private String entId;
+
     /**
      * 计划结束时间
      */

+ 497 - 22
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java

@@ -1,5 +1,6 @@
 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.query.LambdaQueryWrapper;
@@ -7,6 +8,8 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.sckw.core.common.enums.NumberConstant;
+import com.sckw.core.common.enums.StringConstant;
+import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.CollectionUtils;
@@ -16,18 +19,20 @@ 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.order.api.dubbo.TradeOrderInfoService;
+import com.sckw.order.api.model.AddressInfoDetail;
+import com.sckw.order.api.model.OrderDetailRes;
+import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.product.api.model.KwpGoods;
 import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.transport.common.enums.CarWaybillEnum;
 import com.sckw.transport.common.enums.LogisticsOrderEnum;
 import com.sckw.transport.dao.*;
-import com.sckw.transport.model.KwtLogisticsOrder;
-import com.sckw.transport.model.KwtLogisticsOrderTrack;
-import com.sckw.transport.model.KwtWaybillOrder;
-import com.sckw.transport.model.KwtWaybillOrderTrack;
+import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.CarListDTO;
-import com.sckw.transport.model.dto.OrderDTO;
 import com.sckw.transport.model.dto.OrderTakingDTO;
 import com.sckw.transport.model.dto.SendCarDTO;
 import com.sckw.transport.model.param.AcceptCarriageOrderQuery;
@@ -35,11 +40,13 @@ import com.sckw.transport.model.param.LogisticsConsignmentParam;
 import com.sckw.transport.model.vo.AcceptCarriageOrderVO;
 import com.sckw.transport.model.vo.CarWaybillVO;
 import com.sckw.transport.model.vo.ConsignmentVO;
+import com.sckw.transport.model.vo.WaybillDetailVO;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.stream.function.StreamBridge;
+import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
@@ -58,8 +65,13 @@ import java.util.List;
 @Service
 public class AcceptCarriageOrderService {
 
-    @DubboReference(version = "2.0.0", group = "design", check = false)
+    @DubboReference(version = "2.0.0", group = "design", check = false, timeout = 8000)
     RemoteSystemService remoteSystemService;
+    @DubboReference(version = "2.0.0", group = "design", check = false, timeout = 8000)
+    TradeOrderInfoService tradeOrderInfoService;
+
+    @DubboReference(version = "2.0.0", group = "design", check = false, timeout = 8000)
+    GoodsInfoService goodsInfoService;
 
     @Resource
     private StreamBridge streamBridge;
@@ -79,6 +91,27 @@ public class AcceptCarriageOrderService {
     @Autowired
     private KwtWaybillOrderTicketMapper waybillOrderTicketMapper;
 
+    @Autowired
+    public KwtLogisticsOrderGoodsMapper kwtLogisticsOrderGoodsMapper;
+
+    @Autowired
+    public KwtLogisticsOrderContractMapper kwtLogisticsOrderContractMapper;
+
+    @Autowired
+    public KwtLogisticsOrderMapper kwtLogisticsOrderMapper;
+
+    @Autowired
+    private KwtLogisticsOrderCirculateMapper logisticsOrderCirculateMapper;
+
+    @Autowired
+    private KwtLogisticsOrderAddressMapper logisticsOrderAddressMapper;
+
+    @Autowired
+    public KwtLogisticsOrderUnitMapper logisticsOrderUnitMapper;
+
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
     public HttpResult list(AcceptCarriageOrderQuery query) {
         List<AcceptCarriageOrderVO> list = new ArrayList<>();
         AcceptCarriageOrderVO acceptCarriageOrderVo = new AcceptCarriageOrderVO();
@@ -100,20 +133,386 @@ public class AcceptCarriageOrderService {
         return null;
     }
 
-    public HttpResult subcontractConsignment(LogisticsConsignmentParam query) {
+    /**
+     * 承运订单分包托运
+     *
+     * @param bo
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult subcontractConsignment(LogisticsConsignmentParam bo) {
+        OrderDetailRes tradeOrder = tradeOrderInfoService.getOrderDetailById(Long.parseLong(bo.getTOrderId()));
+        if (tradeOrder == null) {
+            log.error("订单id查找失败:{}", bo.getTOrderId());
+            throw new RuntimeException("单据错误,数据不存在");
+        }
+        KwtLogisticsOrder order = new KwtLogisticsOrder();
+        if (!bo.getIsFullDose()) {
+            Long amount = bo.getAmount();
+            Long carryingCapacity = bo.getCarryingCapacity();
+            if (carryingCapacity > amount) {
+                log.error("运订单分包托运-可分配量分配错误:{}", bo.getTOrderId());
+                throw new RuntimeException("可分配量分配错误");
+            }
+            if (ArrayUtil.isEmpty(bo.getCarryingCapacity())) {
+                throw new RuntimeException("不是全量分配时,分配量不能为空!");
+            }
+            order.setAmount(new BigDecimal(bo.getCarryingCapacity()));
+        } else {
+            order.setAmount(new BigDecimal(NumberConstant.ZERO));
+            order.setSubcontractAmount(new BigDecimal(NumberConstant.ZERO));
+        }
+        String lOrderNo = com.sckw.transport.utils.StringUtils.getLOrderNo();
+        Long orderId = new IdWorker(NumberConstant.ONE).nextId();
+        /**分包托运需要判断处于哪一级分包托运
+         * 需要记录当前分包数据-分包上游数据
+         * */
+        /**
+         * 判断是否已存在分包【当前分包只允许加上主单一共三级】*/
+        Long count = logisticsOrderMapper.selectCount(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .in(KwtLogisticsOrder::getPids, bo.getLOrderId()));
+        if (count >= NumberConstant.TWO) {
+            throw new RuntimeException("分包次数已达上限!");
+        }
+        KwtLogisticsOrder logisticsOrder = logisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getId, bo.getLOrderId()));
+        String pids = logisticsOrder.getPids();
+        if (StringUtils.isNotBlank(pids)) {
+            pids = pids + StringConstant.SEMICOLON + orderId;
+        } else {
+            pids = bo.getLOrderId() + StringConstant.SEMICOLON + orderId;
+        }
+        insertSubcontractLogisticsGoods(bo, lOrderNo, orderId);
+        insertSubcontractLogisticsOrder(bo, lOrderNo, order, tradeOrder, orderId, pids);
+        insertSubcontractLogisticsOrderContract(bo, orderId);
+        insertSubcontractLogisticsOrderUnit(bo, orderId);
+        insertSubcontractLogisticsOrderAddress(bo, orderId);
+        insertLogisticsOrderTrack(bo, orderId);
+        //修改上级分配量以及可分配量委托量等
+        logisticsOrder.setSubcontractAmount(logisticsOrder.getSubcontractAmount().add(new BigDecimal(bo.getCarryingCapacity())));
+        subcontractSendMongoDB(lOrderNo, orderId, bo, tradeOrder);
+        return HttpResult.ok();
+    }
 
-        return null;
+    /**
+     * 推送数据到MongoDB
+     *
+     * @param lOrderNo   物流订单编号
+     * @param orderId    物流订单id
+     * @param bo         页面传输实体
+     * @param tradeOrder 贸易订单信息
+     */
+    private void subcontractSendMongoDB(String lOrderNo, Long orderId, LogisticsConsignmentParam bo, OrderDetailRes tradeOrder) {
+        SckwLogisticsOrder logisticsOrder = new SckwLogisticsOrder();
+        logisticsOrder.setLOrderId(orderId);
+        logisticsOrder.setLOrderNo(lOrderNo);
+        logisticsOrder.setLOrderPid(Long.parseLong(bo.getLOrderId()));
+        logisticsOrder.setTOrderId(tradeOrder.getId());
+        logisticsOrder.setTOrderNo("D" + com.sckw.transport.utils.StringUtils.getWaybillNoUtil());
+        logisticsOrder.setSettlementCycle(bo.getSettlementCycle());
+        logisticsOrder.setPrice(new BigDecimal(bo.getPrice()));
+        logisticsOrder.setPriceType(remoteSystemService.queryDictByTypeAndValue(DictEnum.PRICE_TYPE_0.getType(), bo.getPriceType()) == null ?
+                null : Long.parseLong(remoteSystemService.queryDictByTypeAndValue(DictEnum.PRICE_TYPE_0.getType(), bo.getPriceType()).getValue()));
+        if (!bo.getIsFullDose()) {
+            if (ArrayUtil.isEmpty(bo.getCarryingCapacity())) {
+                throw new RuntimeException("不是全量分配时,分配量不能为空!");
+            }
+            logisticsOrder.setAmount(new BigDecimal(bo.getCarryingCapacity()));
+            logisticsOrder.setUnit(bo.getCarryingCapacityUnit());
+            logisticsOrder.setCarryingCapacity(bo.getCarryingCapacity());
+        } else {
+            logisticsOrder.setAmount(new BigDecimal(NumberConstant.ZERO));
+            logisticsOrder.setSubcontractAmount(new BigDecimal(NumberConstant.ZERO));
+            logisticsOrder.setCarryingCapacity(0L);
+        }
+        logisticsOrder.setLoss(bo.getLoss() == null ? null : new BigDecimal(bo.getLoss()));
+        logisticsOrder.setLossUnit(bo.getLossUnit());
+        logisticsOrder.setGoodsPrice(bo.getGoodsPrice() == null ? null : new BigDecimal(bo.getGoodsPrice()));
+        BigDecimal decimal = new BigDecimal(NumberConstant.ZERO);
+        logisticsOrder.setSubcontractAmount(decimal);
+        logisticsOrder.setEntrustAmount(decimal);
+        logisticsOrder.setUnloadAmount(decimal);
+        logisticsOrder.setLoadAmount(decimal);
+        logisticsOrder.setIgnoreAmount(decimal);
+        logisticsOrder.setDeficitPrice(decimal);
+        logisticsOrder.setPayment(Long.parseLong(bo.getPayment()));
+        logisticsOrder.setTaxRate(bo.getTaxRate() == null ? null : new BigDecimal(bo.getTaxRate()));
+        logisticsOrder.setRemark(bo.getRemark());
+        logisticsOrder.setEntId(LoginUserHolder.getEntId());
+        logisticsOrder.setFirmName(remoteSystemService.queryEntCacheById(LoginUserHolder.getEntId()).getFirmName());
+        logisticsOrder.setGoodsId(Integer.parseInt(bo.getGoodsId()));
+        KwpGoods goods = goodsInfoService.getGoodsById(Long.parseLong(bo.getGoodsId()));
+        logisticsOrder.setGoodsType(goods == null ? null : goods.getGoodsType());
+        logisticsOrder.setGoodsSpec(goods == null ? null : goods.getSpec());
+        logisticsOrder.setContractId(Integer.parseInt(bo.getContractId()));
+        logisticsOrder.setContractNo(bo.getContractNo());
+        logisticsOrder.setContractName(bo.getContractName());
+        logisticsOrder.setContractSigningWay(bo.getPayment());
+        logisticsOrder.setCheckEntId(Long.parseLong(bo.getCheckCompanyId()));
+        logisticsOrder.setCheckFirmName(bo.getCheckCompany());
+        logisticsOrder.setCheckContacts(bo.getCheckContacts());
+        logisticsOrder.setCheckPhone(bo.getCheckContactPhone());
+        logisticsOrder.setCarrierEntId(Long.parseLong(bo.getConsignCompanyId()));
+        logisticsOrder.setCarrierFirmName(bo.getConsignCompany());
+        logisticsOrder.setCarrierContacts(bo.getConsignContacts());
+        List<AddressInfoDetail> addressInfo = tradeOrder.getAddressInfo();
+        for (AddressInfoDetail detail : addressInfo) {
+            if (String.valueOf(NumberConstant.ONE).equals(detail.getAddressType())) {
+                logisticsOrder.setLoadType(Long.parseLong(detail.getType()));
+                logisticsOrder.setLoadCityCode(detail.getCityCode());
+                logisticsOrder.setLoadCityName(detail.getCityName());
+                logisticsOrder.setLoadDetailAddress(detail.getDetailAddress());
+                logisticsOrder.setLoadLat(detail.getLat());
+                logisticsOrder.setLoadPhone(detail.getPhone());
+                logisticsOrder.setLoadLng(detail.getLng());
+                logisticsOrder.setLoadContacts(detail.getContacts());
+            }
+            if (String.valueOf(NumberConstant.TWO).equals(detail.getAddressType())) {
+                logisticsOrder.setUnloadType(Long.parseLong(detail.getType()));
+                logisticsOrder.setUnloadPhone(detail.getPhone());
+                logisticsOrder.setUnloadCityCode(detail.getCityCode());
+                logisticsOrder.setUnloadCityName(detail.getCityName());
+                logisticsOrder.setUnloadDetailAddress(detail.getDetailAddress());
+                logisticsOrder.setUnloadLat(detail.getLat());
+                logisticsOrder.setUnloadLng(detail.getLng());
+                logisticsOrder.setUnloadContacts(detail.getContacts());
+            }
+        }
+        //TODO 生成时并无时间
+//        logisticsOrder.setLoadTime();
+//        logisticsOrder.setunLoadTime();
+        logisticsOrder.setCreateBy(LoginUserHolder.getUserId());
+        logisticsOrder.setCreateByName(LoginUserHolder.getUserName());
+        logisticsOrder.setCreateTime(new Date());
+        logisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+        logisticsOrder.setUpdateByName(LoginUserHolder.getUserName());
+        logisticsOrder.setUpdateTime(new Date());
+        logisticsOrder.setGoodsPriceUnit(bo.getGoodsPriceUnit());
+        logisticsOrder.setContractName(bo.getContractName());
+        logisticsOrder.setBillingMode(bo.getBillingMode());
+        //rabbitMq业务汇总数据发送/消费对象
+        SckwBusSum busSum = new SckwBusSum();
+        //业务汇总类型
+        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+        //操作对象(1新增/2修改)
+        busSum.setMethod(1);
+        //业务汇总数据对象
+        busSum.setObject(logisticsOrder);
+        streamBridge.send("sckw-busSum", JSON.toJSONString(busSum));
     }
 
-    public List export(AcceptCarriageOrderQuery query) {
-        return null;
+    /**
+     * 分包托运-承运订单-单据状态
+     *
+     * @param bo
+     * @param orderId
+     */
+    private void insertLogisticsOrderTrack(LogisticsConsignmentParam bo, Long orderId) {
+        KwtLogisticsOrderTrack entity = new KwtLogisticsOrderTrack();
+        entity.setId(new IdWorker(NumberConstant.ONE).nextId());
+        entity.setLOrderId(orderId);
+        entity.setStatus(LogisticsOrderEnum.PENDING_ORDER.getCode());
+        entity.setCreateTime(new Date());
+        entity.setUpdateTime(new Date());
+        entity.setCreateBy(LoginUserHolder.getUserId());
+        entity.setUpdateBy(LoginUserHolder.getUserId());
+        entity.setRemark(bo.getRemark());
+        logisticsOrderTrackMapper.insert(entity);
     }
 
-    public List acceptOrder(OrderDTO orderDTO) {
+    /**
+     * 分包托运-承运订单-装卸货地址信息
+     *
+     * @param bo
+     * @param orderId
+     */
+    private void insertSubcontractLogisticsOrderAddress(LogisticsConsignmentParam bo, Long orderId) {
+        KwtLogisticsOrderAddress loadOrderAddress = new KwtLogisticsOrderAddress();
+        KwtLogisticsOrderAddress unloadOrderAddress = new KwtLogisticsOrderAddress();
+        OrderDetailRes orderDetailRes = tradeOrderInfoService.getOrderDetailById(Long.parseLong(bo.getTOrderId()));
+        if (ObjectUtils.isEmpty(orderDetailRes)) {
+            log.info("dubbp 查询数据 error :orderId:{}", bo.getTOrderId());
+            throw new RuntimeException("dubbp 查询销售订单数据查找失败!");
+        }
+        List<AddressInfoDetail> addressInfo = orderDetailRes.getAddressInfo();
+        if (CollectionUtils.isNotEmpty(addressInfo)) {
+            for (AddressInfoDetail detail : addressInfo) {
+                if (String.valueOf(NumberConstant.ONE).equals(detail.getAddressType())) {
+                    loadOrderAddress.setId(new IdWorker(NumberConstant.ONE).nextId());
+                    loadOrderAddress.setAddressType(NumberConstant.ONE);
+                    loadOrderAddress.setDetailAddress(detail.getDetailAddress());
+                    loadOrderAddress.setContacts(detail.getContacts());
+                    loadOrderAddress.setLOrderId(orderId);
+                    loadOrderAddress.setLat(detail.getLat());
+                    loadOrderAddress.setFence(detail.getFence());
+                    loadOrderAddress.setCityName(detail.getCityName());
+                    loadOrderAddress.setEntryType(NumberConstant.FOUR);
+                    loadOrderAddress.setCreateTime(new Date());
+                    loadOrderAddress.setPhone(detail.getPhone());
+                    loadOrderAddress.setCreateBy(LoginUserHolder.getUserId());
+                    loadOrderAddress.setUpdateBy(LoginUserHolder.getUserId());
+                    loadOrderAddress.setUpdateTime(new Date());
+                }
+                if (String.valueOf(NumberConstant.TWO).equals(detail.getAddressType())) {
+                    unloadOrderAddress.setId(new IdWorker(NumberConstant.ONE).nextId());
+                    unloadOrderAddress.setAddressType(NumberConstant.TWO);
+                    unloadOrderAddress.setId(new IdWorker(NumberConstant.ONE).nextId());
+                    unloadOrderAddress.setContacts(detail.getContacts());
+                    unloadOrderAddress.setLOrderId(orderId);
+                    unloadOrderAddress.setLat(detail.getLat());
+                    unloadOrderAddress.setFence(detail.getFence());
+                    unloadOrderAddress.setCityName(detail.getCityName());
+                    unloadOrderAddress.setEntryType(NumberConstant.FOUR);
+                    unloadOrderAddress.setPhone(detail.getPhone());
+                    unloadOrderAddress.setDetailAddress(detail.getDetailAddress());
+                    unloadOrderAddress.setCreateTime(new Date());
+                    unloadOrderAddress.setCreateBy(LoginUserHolder.getUserId());
+                    unloadOrderAddress.setUpdateBy(LoginUserHolder.getUserId());
+                    unloadOrderAddress.setUpdateTime(new Date());
+                }
+            }
+        }
+        logisticsOrderAddressMapper.insert(loadOrderAddress);
+        logisticsOrderAddressMapper.insert(unloadOrderAddress);
+    }
 
-        return null;
+    /**
+     * 分包托运-承运订单-单位信息
+     *
+     * @param bo
+     * @param orderId
+     */
+    private void insertSubcontractLogisticsOrderUnit(LogisticsConsignmentParam bo, Long orderId) {
+        KwtLogisticsOrderUnit checkUnit = new KwtLogisticsOrderUnit()
+                .setLOrderId(orderId)
+                .setId(new IdWorker(NumberConstant.ONE).nextId())
+                .setUnitType(NumberConstant.ONE)
+                .setFirmName(bo.getCheckCompany())
+                .setRemark(bo.getRemark())
+                .setEntId(Long.parseLong(bo.getCheckCompanyId()))
+                .setContacts(bo.getCheckContacts())
+                .setPhone(bo.getCheckContactPhone())
+                .setCreateBy(LoginUserHolder.getUserId())
+                .setCreateTime(new Date())
+                .setUpdateBy(LoginUserHolder.getUserId())
+                .setUpdateTime(new Date());
+        logisticsOrderUnitMapper.insert(checkUnit);
+
+        KwtLogisticsOrderUnit consignUnit = new KwtLogisticsOrderUnit()
+                .setLOrderId(orderId)
+                .setId(new IdWorker(NumberConstant.ONE).nextId())
+                .setUnitType(NumberConstant.TWO)
+                .setFirmName(bo.getConsignCompany())
+                .setRemark(bo.getRemark())
+                .setEntId(Long.parseLong(bo.getConsignCompanyId()))
+                .setContacts(bo.getConsignContacts())
+                .setPhone(bo.getConsignContactPhone())
+                .setCreateBy(LoginUserHolder.getUserId())
+                .setCreateTime(new Date())
+                .setUpdateBy(LoginUserHolder.getUserId())
+                .setUpdateTime(new Date());
+        logisticsOrderUnitMapper.insert(consignUnit);
+    }
+
+    /**
+     * 分包托运-承运订单-合同信息
+     *
+     * @param bo
+     * @param orderId
+     */
+    private void insertSubcontractLogisticsOrderContract(LogisticsConsignmentParam bo, Long orderId) {
+        KwtLogisticsOrderContract kwtLogisticsOrderContract = new KwtLogisticsOrderContract();
+        kwtLogisticsOrderContract.setId(new IdWorker(NumberConstant.ONE).nextId());
+        kwtLogisticsOrderContract.setLOrderId(orderId);
+        kwtLogisticsOrderContract.setContractId(Long.parseLong(bo.getContractId()));
+        kwtLogisticsOrderContract.setRemark(bo.getRemark());
+        kwtLogisticsOrderContract.setCreateBy(LoginUserHolder.getUserId());
+        kwtLogisticsOrderContract.setUpdateBy(LoginUserHolder.getUserId());
+        kwtLogisticsOrderContract.setCreateTime(new Date());
+        kwtLogisticsOrderContract.setUpdateTime(new Date());
+        kwtLogisticsOrderContractMapper.insert(kwtLogisticsOrderContract);
+    }
+
+    /**
+     * 分包托运-承运订单-主体
+     *
+     * @param bo
+     * @param lOrderNo
+     * @param order
+     * @param tradeOrder
+     * @param orderId
+     * @param pids
+     */
+    private void insertSubcontractLogisticsOrder(LogisticsConsignmentParam bo, String lOrderNo,
+                                                 KwtLogisticsOrder order, OrderDetailRes tradeOrder,
+                                                 Long orderId, String pids) {
+        order.setId(orderId);
+        order.setEntId(LoginUserHolder.getEntId());
+        order.setTOrderId(Long.parseLong(bo.getTOrderId()));
+        order.setTOrderNo(bo.getTOrderNo());
+        order.setLOrderNo(lOrderNo);
+        //分包时,存放分包上级id
+        order.setPid(Long.parseLong(bo.getLOrderId()));
+        //存放所有的分包的父级id
+        order.setPids(pids);
+        order.setSettlementCycle(bo.getSettlementCycle());
+        order.setPrice(new BigDecimal(bo.getPrice()));
+        order.setPriceType(remoteSystemService.queryDictByTypeAndValue(DictEnum.PRICE_TYPE_0.getType(), bo.getPriceType()) == null ?
+                null : Long.parseLong(remoteSystemService.queryDictByTypeAndValue(DictEnum.PRICE_TYPE_0.getType(), bo.getPriceType()).getValue()));
+        order.setAmount(new BigDecimal(bo.getCarryingCapacity()));
+        order.setBillingMode(bo.getBillingMode());
+        order.setLoss(new BigDecimal(bo.getLoss()));
+        order.setLossUnit(bo.getLossUnit());
+        order.setLossUnit(remoteSystemService.queryDictByTypeAndValue(DictEnum.UNIT_TYPE_0.getType(), bo.getLossUnit()) == null ?
+                null : remoteSystemService.queryDictByTypeAndValue(DictEnum.UNIT_TYPE_0.getType(), bo.getLossUnit()).getValue());
+        order.setGoodsPrice(new BigDecimal(bo.getGoodsPrice()));
+        order.setGoodsPriceUnit(remoteSystemService.queryDictByTypeAndValue(DictEnum.PRICE_TYPE_0.getType(), bo.getGoodsPriceUnit()) == null ?
+                null : remoteSystemService.queryDictByTypeAndValue(DictEnum.PRICE_TYPE_0.getType(), bo.getGoodsPriceUnit()).getValue());
+        order.setGoodsPriceUnit(bo.getGoodsPriceUnit());
+        order.setStartTime(bo.getShipmentsDateTime());
+        order.setEntTime(bo.getReceiveGoodsDateTime());
+        order.setRemark(bo.getRemark());
+        order.setPayment(Long.parseLong(tradeOrder.getTrading()));
+        order.setTaxRate(new BigDecimal(bo.getTaxRate()));
+        order.setCreateBy(LoginUserHolder.getUserId());
+        order.setCreateTime(new Date());
+        order.setUpdateBy(LoginUserHolder.getUserId());
+        order.setUpdateTime(new Date());
+        order.setStatus(LogisticsOrderEnum.PENDING_ORDER.getCode());
+        BigDecimal decimal = new BigDecimal(NumberConstant.ZERO);
+        order.setEntrustAmount(decimal);
+        order.setSubcontractAmount(decimal);
+        order.setLoadAmount(decimal);
+        order.setUnloadAmount(decimal);
+        order.setIgnoreAmount(decimal);
+        order.setDeficitPrice(decimal);
+        order.setDeficitAmount(decimal);
+        kwtLogisticsOrderMapper.insert(order);
+    }
+
+    /**
+     * 分包托运-承运订单-商品信息
+     *
+     * @param bo
+     * @param lOrderNo
+     * @param orderId
+     */
+    private void insertSubcontractLogisticsGoods(LogisticsConsignmentParam bo, String lOrderNo, Long orderId) {
+        KwtLogisticsOrderGoods kwtLogisticsOrderGoods = new KwtLogisticsOrderGoods();
+        kwtLogisticsOrderGoods.setId(new IdWorker(NumberConstant.ONE).nextId());
+        kwtLogisticsOrderGoods.setGoodsId(Long.parseLong(bo.getGoodsId()));
+        kwtLogisticsOrderGoods.setGoodsName(bo.getGoodsName());
+        kwtLogisticsOrderGoods.setSkuId(StringUtils.isBlank(bo.getSkuId()) ? null : Long.parseLong(bo.getSkuId()));
+        kwtLogisticsOrderGoods.setLOrderId(orderId);
+        kwtLogisticsOrderGoods.setLOrderNo(lOrderNo);
+        kwtLogisticsOrderGoods.setUpdateBy(LoginUserHolder.getUserId());
+        kwtLogisticsOrderGoods.setUpdateTime(new Date());
+        kwtLogisticsOrderGoods.setCreateBy(LoginUserHolder.getUserId());
+        kwtLogisticsOrderGoods.setCreateTime(new Date());
+        kwtLogisticsOrderGoodsMapper.insert(kwtLogisticsOrderGoods);
     }
 
+
     /**
      * 是否接单
      *
@@ -172,7 +571,7 @@ public class AcceptCarriageOrderService {
             return result;
         }
         List<SckwWaybillOrder> list = new ArrayList<>();
-        if (String.valueOf(NumberConstant.ZERO).equals(sendCarDTO.getType())) {
+        if (String.valueOf(NumberConstant.ONE).equals(sendCarDTO.getType())) {
             for (CarListDTO car : sendCarDTO.getCarList()) {
                 if (ObjectUtils.isEmpty(car.getCount())) {
                     throw new RuntimeException("趟次派车时,趟次次数不能为空");
@@ -189,20 +588,28 @@ public class AcceptCarriageOrderService {
 //                    insertWaybillOrderTrack(wOrderId);
                 }
             }
-        } else if (String.valueOf(NumberConstant.ONE).equals(sendCarDTO.getType())) {
+        } else if (String.valueOf(NumberConstant.TWO).equals(sendCarDTO.getType())) {
             for (CarListDTO car : sendCarDTO.getCarList()) {
                 if (ObjectUtils.isEmpty(sendCarDTO.getWaitingVolume())) {
                     throw new RuntimeException("循环派车时,剩余可运量不能为空");
                 }
                 for (int i = 0; i < car.getCount(); i++) {
-                    Long wOrderId = new IdWorker(NumberConstant.ONE).nextId();
-                    String wOrderNo = com.sckw.transport.utils.StringUtils.getWaybillNoUtil() + i;
-                    KwtWaybillOrder waybillOrder = new KwtWaybillOrder();
-                    String type = String.valueOf(NumberConstant.ONE);
-                    waybillOrder.setType(type);
-                    waybillOrder.setEntrustAmount(new BigDecimal(sendCarDTO.getWaitingVolume()));
-                    insertWaybillOrder(waybillOrder, wOrderId, wOrderNo, logisticsOrder, car, sendCarDTO, list, type);
-//                    insertWaybillOrderTrack(wOrderId);
+                    KwtLogisticsOrderCirculate circulate = new KwtLogisticsOrderCirculate();
+                    circulate.setId(new IdWorker(NumberConstant.ONE).nextId());
+                    circulate.setEntId(logisticsOrder.getEntId());
+                    circulate.setLOrderId(Long.parseLong(sendCarDTO.getLOrderId()));
+                    circulate.setTruckNo(car.getTruckNo());
+                    circulate.setDriverId(Long.parseLong(car.getDriverId()));
+                    circulate.setActualAmount(new BigDecimal(car.getLoadAmount()));
+                    circulate.setEntrustAmount(new BigDecimal(sendCarDTO.getWaitingVolume()));
+                    circulate.setEntrustDate(new Date());
+                    circulate.setCreateBy(LoginUserHolder.getUserId());
+                    circulate.setCreateTime(new Date());
+                    circulate.setUpdateBy(LoginUserHolder.getUserId());
+                    circulate.setUpdateTime(new Date());
+                    circulate.setType(String.valueOf(NumberConstant.ONE));
+                    logisticsOrderCirculateMapper.insert(circulate);
+                    sendMongoDbData(list, logisticsOrder, car, sendCarDTO, String.valueOf(NumberConstant.ONE));
                 }
             }
         } else {
@@ -226,6 +633,46 @@ public class AcceptCarriageOrderService {
         return result;
     }
 
+    private void sendMongoDbData(List<SckwWaybillOrder> list, KwtLogisticsOrder logisticsOrder
+            , CarListDTO carListDTO, SendCarDTO sendCarDTO, String type) {
+        //放入mongodb实体
+        SckwWaybillOrder waybillCarDTO = new SckwWaybillOrder();
+        waybillCarDTO.set_id(new IdWorker(NumberConstant.ONE).nextId());
+        waybillCarDTO.setStatus(CarWaybillEnum.PENDING_ORDER.getCode().toString());
+        waybillCarDTO.setType(type);
+        waybillCarDTO.setLOrderId(StringUtils.isBlank(sendCarDTO.getLOrderId()) ? null : Long.parseLong(sendCarDTO.getLOrderId()));
+        waybillCarDTO.setLOrderNo(sendCarDTO.getLOrderNo());
+        waybillCarDTO.setTOrderId(logisticsOrder.getTOrderId());
+        waybillCarDTO.setTOrderNo(logisticsOrder.getTOrderNo());
+        waybillCarDTO.setEntId(logisticsOrder.getEntId());
+        waybillCarDTO.setFirmName(remoteSystemService.queryEntCacheById(logisticsOrder.getEntId()).getFirmName());
+        waybillCarDTO.setTruckNo(carListDTO.getTruckNo());
+        //todo 司机dubbo查询
+//        waybillCarDTO.setTruckType();
+//        waybillCarDTO.setTruckEnergyType();
+//        waybillCarDTO.setTruckColor()
+//        waybillCarDTO.setTruckTrailerNo();
+//        waybillCarDTO.setTruckFleetName();
+        waybillCarDTO.setDriverId(StringUtils.isBlank(carListDTO.getDriverId()) ? null : Long.parseLong(carListDTO.getDriverId()));
+//        waybillCarDTO.setDriverPhone();
+//        waybillCarDTO.setDriverIdcard();
+        waybillCarDTO.setDriverName(carListDTO.getDriverName());
+        waybillCarDTO.setStartTime(sendCarDTO.getLoadDateTime());
+        waybillCarDTO.setEndTime(sendCarDTO.getUnloadDateTime());
+        waybillCarDTO.setFleetId(carListDTO.getFleetId());
+        waybillCarDTO.setFleetName(carListDTO.getFleetName());
+        waybillCarDTO.setGoodsName(sendCarDTO.getGoodsName());
+        waybillCarDTO.setGoodsId(StringUtils.isBlank(sendCarDTO.getGoodsId()) ? null : Integer.valueOf(sendCarDTO.getGoodsId()));
+        waybillCarDTO.setLoadingCity(sendCarDTO.getLoadCity());
+        waybillCarDTO.setLoadTime(sendCarDTO.getLoadDateTime());
+        waybillCarDTO.setLoadingAddress(sendCarDTO.getLoadAddress());
+        waybillCarDTO.setUnloadingCity(sendCarDTO.getUnloadCity());
+        waybillCarDTO.setUnloadTime(sendCarDTO.getUnloadDateTime());
+        waybillCarDTO.setUnloadingAddress(sendCarDTO.getUnloadAddress());
+        waybillCarDTO.setDelFlag(Integer.valueOf(NumberConstant.ZERO));
+        list.add(waybillCarDTO);
+    }
+
     /**
      * 保存车辆运单状态信息
      *
@@ -281,6 +728,7 @@ public class AcceptCarriageOrderService {
         waybillOrder.setCreateTime(createTime);
         waybillOrder.setUpdateTime(new Date());
         waybillOrder.setUpdateBy(LoginUserHolder.getUserId());
+        waybillOrder.setStatus(CarWaybillEnum.PENDING_ORDER.getCode());
         waybillOrderMapper.insert(waybillOrder);
 
         //状态表保存
@@ -334,4 +782,31 @@ public class AcceptCarriageOrderService {
         waybillCarDTO.setDelFlag(Integer.valueOf(NumberConstant.ZERO));
         list.add(waybillCarDTO);
     }
+
+    /**
+     * 承运订单-获取运单详情
+     * @param wOrderId
+     * @return
+     */
+    public HttpResult getWaybillData(String wOrderId) {
+        SckwWaybillOrder sckwWaybillOrder = mongoTemplate.findById(Long.parseLong(wOrderId), SckwWaybillOrder.class);
+        WaybillDetailVO vo = new WaybillDetailVO();
+        if (!ObjectUtils.isEmpty(sckwWaybillOrder)) {
+            vo.setFleetName(sckwWaybillOrder.getFleetName());
+            vo.setTruckNo(sckwWaybillOrder.getTruckNo());
+            vo.setDriverName(sckwWaybillOrder.getDriverName());
+            vo.setSendCarWeigh(sckwWaybillOrder.getEntrustAmount());
+            vo.setLoadAmount(sckwWaybillOrder.getLoadAmount());
+            vo.setStowageDateTime(sckwWaybillOrder.getLoadTime());
+            vo.setWaybillType(sckwWaybillOrder.getType());
+            vo.setUnloadAmount(sckwWaybillOrder.getUnloadAmount());
+            vo.setUnloadDateTime(sckwWaybillOrder.getUnloadTime());
+            vo.setAppointor(sckwWaybillOrder.getCreateByName());
+            vo.setLoss(sckwWaybillOrder.getLoss());
+            vo.setGoodsPrice(sckwWaybillOrder.getGoodsPrice());
+            vo.setStartTime(sckwWaybillOrder.getStartTime());
+            vo.setEndTime(sckwWaybillOrder.getEndTime());
+        }
+        return HttpResult.ok(vo);
+    }
 }

+ 129 - 14
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/DriverService.java

@@ -6,13 +6,16 @@ import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.mongo.model.TobleTop;
+import com.sckw.system.api.RemoteSystemService;
 import com.sckw.transport.common.enums.CarWaybillEnum;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.KwtLogisticsOrderAddress;
+import com.sckw.transport.model.KwtLogisticsOrderCirculate;
 import com.sckw.transport.model.KwtLogisticsOrderGoods;
 import com.sckw.transport.model.KwtWaybillOrder;
 import com.sckw.transport.model.vo.WaybillOrderVO;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -30,6 +33,9 @@ import java.util.stream.Collectors;
 @Service
 public class DriverService {
 
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    RemoteSystemService remoteSystemService;
+
     @Autowired
     private KwtWaybillOrderMapper waybillOrderMapper;
 
@@ -51,6 +57,9 @@ public class DriverService {
     @Autowired
     private KwtLogisticsOrderGoodsMapper logisticsOrderGoodsMapper;
 
+    @Autowired
+    private KwtLogisticsOrderCirculateMapper logisticsOrderCirculateMapper;
+
 
     /**
      * @param id
@@ -98,8 +107,9 @@ public class DriverService {
 
     /**
      * 根据当前登录 id获取派给当前id的车辆运单
-     * @param id 司机id
-     * @param type  展示页签类型
+     *
+     * @param id   司机id
+     * @param type 展示页签类型
      * @return
      */
     public HttpResult getWaybillDriverDetail(Long id, String type) {
@@ -111,26 +121,131 @@ public class DriverService {
          * 完结: 对应[已卸货]、[已核单]
          * */
         HttpResult result = new HttpResult();
-        List<Long> status = new ArrayList<>();
+        List<Long> tripStatus = new ArrayList<>();
+        List<Long> loopStatus = new ArrayList<>();
         if (String.valueOf(NumberConstant.ONE).equals(type)) {
-            status.add(CarWaybillEnum.PENDING_ORDER.getCode().longValue());
+            tripStatus.add(CarWaybillEnum.PENDING_ORDER.getCode().longValue());
         } else if (String.valueOf(NumberConstant.TWO).equals(type)) {
-            status.add(CarWaybillEnum.PENDING_VEHICLE.getCode().longValue());
+            tripStatus.add(CarWaybillEnum.PENDING_VEHICLE.getCode().longValue());
+            loopStatus.add(CarWaybillEnum.PENDING_VEHICLE.getCode().longValue());
         } else if (String.valueOf(NumberConstant.THREE).equals(type)) {
-            status.add(CarWaybillEnum.EXIT_COMPLETED.getCode().longValue());
-            status.add(CarWaybillEnum.WAIT_LOADING.getCode().longValue());
-            status.add(CarWaybillEnum.COMPLETION_LOADING.getCode().longValue());
-            status.add(CarWaybillEnum.WAIT_UNLOADING.getCode().longValue());
+            tripStatus.add(CarWaybillEnum.EXIT_COMPLETED.getCode().longValue());
+            tripStatus.add(CarWaybillEnum.WAIT_LOADING.getCode().longValue());
+            tripStatus.add(CarWaybillEnum.COMPLETION_LOADING.getCode().longValue());
+            tripStatus.add(CarWaybillEnum.WAIT_UNLOADING.getCode().longValue());
+
+            loopStatus.add(CarWaybillEnum.EXIT_COMPLETED.getCode().longValue());
+            loopStatus.add(CarWaybillEnum.WAIT_LOADING.getCode().longValue());
+            loopStatus.add(CarWaybillEnum.COMPLETION_LOADING.getCode().longValue());
+            loopStatus.add(CarWaybillEnum.WAIT_UNLOADING.getCode().longValue());
         } else if (String.valueOf(NumberConstant.FOUR).equals(type)) {
-            status.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode().longValue());
-            status.add(CarWaybillEnum.APPROVAL_COMPLETED.getCode().longValue());
+            tripStatus.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode().longValue());
+            tripStatus.add(CarWaybillEnum.APPROVAL_COMPLETED.getCode().longValue());
+
+            loopStatus.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode().longValue());
+            loopStatus.add(CarWaybillEnum.APPROVAL_COMPLETED.getCode().longValue());
         } else {
             result.setMsg("类型错误");
             result.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
             return result;
         }
-        List<Long> list = waybillOrderMapper.selectDriverOrder(id, status);
         List<WaybillOrderVO> orderVOList = new ArrayList<>();
+        /**趟次*/
+        tripPackageData(id, tripStatus, orderVOList);
+        /**循环*/
+        loopPackageData(id,loopStatus,orderVOList);
+        orderVOList = orderVOList.stream().sorted(Comparator.comparing(WaybillOrderVO::getCreateTime)).collect(Collectors.toList());
+        return HttpResult.ok(orderVOList);
+    }
+    private void loopPackageData(Long id, List<Long> loopStatus, List<WaybillOrderVO> orderVOList) {
+        if(CollectionUtils.isEmpty(loopStatus)){
+            List<KwtLogisticsOrderCirculate> list = logisticsOrderCirculateMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrderCirculate>()
+                    .eq(KwtLogisticsOrderCirculate::getDriverId,id)
+                    .isNull(KwtLogisticsOrderCirculate::getWOrderId)
+                    .eq(KwtLogisticsOrderCirculate::getStatus,NumberConstant.ZERO));
+            if (CollectionUtils.isNotEmpty(list)){
+                for (KwtLogisticsOrderCirculate circulate : list) {
+                    KwtLogisticsOrderAddress loadAddress = logisticsOrderAddressMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
+                            .eq(KwtLogisticsOrderAddress::getLOrderId, circulate.getLOrderId()).eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.ONE));
+                    KwtLogisticsOrderAddress unloadAddress = logisticsOrderAddressMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
+                            .eq(KwtLogisticsOrderAddress::getLOrderId, circulate.getLOrderId()).eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.TWO));
+                    KwtLogisticsOrderGoods orderGoods = logisticsOrderGoodsMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderGoods>()
+                            .eq(KwtLogisticsOrderGoods::getLOrderId, circulate.getLOrderId()));
+                    List<KwtWaybillOrder> waybillOrders = waybillOrderMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrder>()
+                            .eq(KwtWaybillOrder::getLOrderId, circulate.getLOrderId()).eq(KwtWaybillOrder::getDriverId, id));
+                    for (KwtWaybillOrder waybill : waybillOrders) {
+                        WaybillOrderVO vo = new WaybillOrderVO();
+                        vo.setLOrderId(circulate.getLOrderId());
+                        vo.setLoadCityCode(loadAddress.getCityCode());
+                        vo.setLoadCityName(loadAddress.getCityName());
+                        vo.setLoadDetailAddress(loadAddress.getDetailAddress());
+                        vo.setUnloadCityName(unloadAddress.getCityName());
+                        vo.setUnloadCityCode(unloadAddress.getCityCode());
+                        vo.setEntId(String.valueOf(waybill.getEntId()));
+                        vo.setFirmName(remoteSystemService.queryEntCacheById(waybill.getEntId()).getFirmName());
+                        vo.setGoodsName(orderGoods == null ? null : (orderGoods.getGoodsName() == null ? null : orderGoods.getGoodsName()));
+                        vo.setGoodsCode(orderGoods == null ? null : (orderGoods.getSkuId() == null ? null : String.valueOf(orderGoods.getSkuId())));
+                        vo.setWOrderId(waybill.getId());
+                        vo.setWOrderNo(waybill.getWOrderNo());
+                        vo.setCreateTime(waybill.getCreateTime());
+                        vo.setStartTime(waybill.getStartTime());
+                        vo.setEndTime(waybill.getEndTime());
+                        //todo 查询车队服务dubbo
+//                    vo.setFleetName();
+//                    vo.setFleetId();
+//                    vo.setTruckFleetName();
+                        vo.setEntrustAmount(waybill.getEntrustAmount());
+                        vo.setType(waybill.getType());
+                        vo.setTruckNo(waybill.getTruckNo());
+                        orderVOList.add(vo);
+                    }
+                }
+            }
+        }else {
+            List<Long> list = logisticsOrderCirculateMapper.selectDriverOrderByStatus(id, loopStatus);
+            if (CollectionUtils.isNotEmpty(list)){
+                for (Long aLong : list) {
+                    KwtLogisticsOrderAddress loadAddress = logisticsOrderAddressMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
+                            .eq(KwtLogisticsOrderAddress::getLOrderId, aLong).eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.ONE));
+                    KwtLogisticsOrderAddress unloadAddress = logisticsOrderAddressMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
+                            .eq(KwtLogisticsOrderAddress::getLOrderId, aLong).eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.TWO));
+                    KwtLogisticsOrderGoods orderGoods = logisticsOrderGoodsMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderGoods>()
+                            .eq(KwtLogisticsOrderGoods::getLOrderId, aLong));
+                    List<KwtWaybillOrder> waybillOrders = waybillOrderMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrder>()
+                            .eq(KwtWaybillOrder::getLOrderId, aLong).eq(KwtWaybillOrder::getDriverId, id));
+                    for (KwtWaybillOrder waybill : waybillOrders) {
+                        WaybillOrderVO vo = new WaybillOrderVO();
+                        vo.setLOrderId(aLong);
+                        vo.setLoadCityCode(loadAddress.getCityCode());
+                        vo.setLoadCityName(loadAddress.getCityName());
+                        vo.setLoadDetailAddress(loadAddress.getDetailAddress());
+                        vo.setUnloadCityName(unloadAddress.getCityName());
+                        vo.setUnloadCityCode(unloadAddress.getCityCode());
+                        vo.setEntId(String.valueOf(waybill.getEntId()));
+                        vo.setFirmName(remoteSystemService.queryEntCacheById(waybill.getEntId()).getFirmName());
+                        vo.setGoodsName(orderGoods == null ? null : (orderGoods.getGoodsName() == null ? null : orderGoods.getGoodsName()));
+                        vo.setGoodsCode(orderGoods == null ? null : (orderGoods.getSkuId() == null ? null : String.valueOf(orderGoods.getSkuId())));
+                        vo.setWOrderId(waybill.getId());
+                        vo.setWOrderNo(waybill.getWOrderNo());
+                        vo.setCreateTime(waybill.getCreateTime());
+                        vo.setStartTime(waybill.getStartTime());
+                        vo.setEndTime(waybill.getEndTime());
+                        //todo 查询车队服务dubbo
+//                    vo.setFleetName();
+//                    vo.setFleetId();
+//                    vo.setTruckFleetName();
+                        vo.setEntrustAmount(waybill.getEntrustAmount());
+                        vo.setType(waybill.getType());
+                        vo.setTruckNo(waybill.getTruckNo());
+                        orderVOList.add(vo);
+                    }
+                }
+            }
+        }
+    }
+
+    private void tripPackageData(Long id, List<Long> tripStatus, List<WaybillOrderVO> orderVOList) {
+        List<Long> list = waybillOrderMapper.selectDriverOrder(id, tripStatus);
         if (CollectionUtils.isNotEmpty(list)) {
             for (Long aLong : list) {
                 KwtLogisticsOrderAddress loadAddress = logisticsOrderAddressMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
@@ -149,6 +264,8 @@ public class DriverService {
                     vo.setLoadDetailAddress(loadAddress.getDetailAddress());
                     vo.setUnloadCityName(unloadAddress.getCityName());
                     vo.setUnloadCityCode(unloadAddress.getCityCode());
+                    vo.setEntId(String.valueOf(waybill.getEntId()));
+                    vo.setFirmName(remoteSystemService.queryEntCacheById(waybill.getEntId()).getFirmName());
                     vo.setGoodsName(orderGoods == null ? null : (orderGoods.getGoodsName() == null ? null : orderGoods.getGoodsName()));
                     vo.setGoodsCode(orderGoods == null ? null : (orderGoods.getSkuId() == null ? null : String.valueOf(orderGoods.getSkuId())));
                     vo.setWOrderId(waybill.getId());
@@ -166,8 +283,6 @@ public class DriverService {
                     orderVOList.add(vo);
                 }
             }
-            orderVOList = orderVOList.stream().sorted(Comparator.comparing(WaybillOrderVO::getCreateTime)).collect(Collectors.toList());
         }
-        return HttpResult.ok(orderVOList);
     }
 }

+ 70 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java

@@ -0,0 +1,70 @@
+package com.sckw.transport.service;
+
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.transport.dao.KwtLogisticsOrderMapper;
+import com.sckw.transport.model.KwtLogisticsOrder;
+import com.sckw.transport.model.dto.SendCarDto1;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author zk
+ * @desc TODO
+ * @date 2023/7/19 0019
+ */
+@Service
+public class KwtWaybillOrderService {
+
+    @Autowired
+    KwtLogisticsOrderMapper logisticsOrderDao;
+
+    /**
+     * @param params
+     * @desc 派车
+     * @author zk
+     * @date 2023/7/19
+     **/
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult commitSendCar(List<SendCarDto1> params) {
+        /**校验是车辆委托量否超过物流订单剩余量**/
+        //承运单信息
+        KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(params.get(0).getLOrderId());
+        if (logisticsOrder == null) {
+            return HttpResult.error("订单已不存在!" );
+        }
+
+        //下游司机委派量累加
+        BigDecimal ranksAmount = new BigDecimal(0);
+        for (SendCarDto1 sendCarDto:params) {
+            if (sendCarDto.getEntrustAmount() == null || sendCarDto.getEntrustAmount() <= 0) {
+                return HttpResult.error(sendCarDto.getTruckNo() + "核定载量必须大于0,请确认!" );
+            }
+            if (sendCarDto.getType() == Global.NUMERICAL_ONE) {
+                ranksAmount.add(new BigDecimal(sendCarDto.getEntrustAmount()));
+
+                if (sendCarDto.getCount() == null || sendCarDto.getCount() <= 0) {
+                    return HttpResult.error(sendCarDto.getTruckNo() + "趟次必须等于或大于0!" );
+                }
+            }
+        }
+
+        //当前下游司机委派量 + 历史下游司机委派量 + 分包量
+        ranksAmount.add(logisticsOrder.getEntrustAmount()).add(logisticsOrder.getSubcontractAmount());
+        if (ranksAmount.compareTo(logisticsOrder.getAmount()) > 0) {
+            return HttpResult.error("派车量已大于剩余可运量!" );
+        }
+
+        /**数据处理**/
+
+
+
+
+        return HttpResult.ok();
+    }
+
+}

+ 97 - 78
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java

@@ -2,16 +2,19 @@ package com.sckw.transport.service;
 
 import cn.hutool.core.util.ArrayUtil;
 import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.model.page.PageResult;
+import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.StringUtils;
 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.order.api.dubbo.TradeOrderInfoService;
+import com.sckw.order.api.model.AddressInfoDetail;
+import com.sckw.order.api.model.OrderDetailRes;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.product.api.model.KwpGoods;
 import com.sckw.stream.model.SckwBusSum;
@@ -53,8 +56,8 @@ public class LogisticsConsignmentService {
     @DubboReference(version = "2.0.0", group = "design", check = false)
     GoodsInfoService goodsInfoService;
 
-    @Autowired
-    public KwoTradeOrderMapper kwoTradeOrderMapper;
+    @DubboReference(version = "2.0.0", group = "design", check = false,timeout = 6000)
+    TradeOrderInfoService tradeOrderInfoService;
 
     @Autowired
     public KwtLogisticsOrderGoodsMapper kwtLogisticsOrderGoodsMapper;
@@ -65,9 +68,6 @@ public class LogisticsConsignmentService {
     @Autowired
     public KwtLogisticsOrderMapper kwtLogisticsOrderMapper;
 
-    @Autowired
-    public KwoTradeOrderAddressMapper kwoTradeOrderAddressMapper;
-
     @Autowired
     public KwtLogisticsOrderAddressMapper kwtLogisticsOrderAddressMapper;
 
@@ -94,14 +94,19 @@ public class LogisticsConsignmentService {
     }
 
     void logisticsConsignmentInsert(LogisticsConsignmentParam bo) {
-        //todo 后续改成调用dubbo接口
-        KwoTradeOrder tradeOrder = kwoTradeOrderMapper.selectOne(new LambdaQueryWrapper<KwoTradeOrder>().eq(StringUtils.isNotBlank(bo.getLOrderId()), KwoTradeOrder::getId, bo.getLOrderId()));
+        OrderDetailRes tradeOrder = tradeOrderInfoService.getOrderDetailById(Long.parseLong(bo.getTOrderId()));
         if (tradeOrder == null) {
-            log.error("订单id查找失败:{}", bo.getLOrderId());
+            log.error("订单id查找失败:{}", bo.getTOrderId());
             throw new RuntimeException("单据错误,数据不存在");
         }
         KwtLogisticsOrder order = new KwtLogisticsOrder();
         if (!bo.getIsFullDose()) {
+            Long amount = bo.getAmount();
+            Long carryingCapacity = bo.getCarryingCapacity();
+            if (carryingCapacity > amount) {
+                log.error("可分配量分配错误:{}", bo.getTOrderId());
+                throw new RuntimeException("可分配量分配错误");
+            }
             if (ArrayUtil.isEmpty(bo.getCarryingCapacity())) {
                 throw new RuntimeException("不是全量分配时,分配量不能为空!");
             }
@@ -128,7 +133,7 @@ public class LogisticsConsignmentService {
      * @param orderId
      * @param bo
      */
-    private void sendMongoDB(String lOrderNo, Long orderId, LogisticsConsignmentParam bo, KwoTradeOrder tradeOrder) {
+    private void sendMongoDB(String lOrderNo, Long orderId, LogisticsConsignmentParam bo, OrderDetailRes tradeOrder) {
         SckwLogisticsOrder logisticsOrder = new SckwLogisticsOrder();
         logisticsOrder.setLOrderId(orderId);
         logisticsOrder.setLOrderNo(lOrderNo);
@@ -155,10 +160,6 @@ public class LogisticsConsignmentService {
         logisticsOrder.setLoss(bo.getLoss() == null ? null : new BigDecimal(bo.getLoss()));
         logisticsOrder.setLossUnit(bo.getLossUnit());
         logisticsOrder.setGoodsPrice(bo.getGoodsPrice() == null ? null : new BigDecimal(bo.getGoodsPrice()));
-        //TODO 生成时并无时间
-//        logisticsOrder.setUnloadTime();
-//        logisticsOrder.setLoadTime();
-//        logisticsOrder.setWOrderNo();
         BigDecimal decimal = new BigDecimal(NumberConstant.ZERO);
         logisticsOrder.setSubcontractAmount(decimal);
         logisticsOrder.setEntrustAmount(decimal);
@@ -172,7 +173,6 @@ public class LogisticsConsignmentService {
         logisticsOrder.setEntId(LoginUserHolder.getEntId());
         logisticsOrder.setFirmName(remoteSystemService.queryEntCacheById(LoginUserHolder.getEntId()).getFirmName());
         logisticsOrder.setGoodsId(Integer.parseInt(bo.getGoodsId()));
-        //todo dubbo调用商品服务
         KwpGoods goods = goodsInfoService.getGoodsById(Long.parseLong(bo.getGoodsId()));
         logisticsOrder.setGoodsType(goods == null ? null : goods.getGoodsType());
         logisticsOrder.setGoodsSpec(goods == null ? null : goods.getSpec());
@@ -187,22 +187,32 @@ public class LogisticsConsignmentService {
         logisticsOrder.setCarrierEntId(Long.parseLong(bo.getConsignCompanyId()));
         logisticsOrder.setCarrierFirmName(bo.getConsignCompany());
         logisticsOrder.setCarrierContacts(bo.getConsignContacts());
-        //todo dubbo调用订单服务
-//        logisticsOrder.setLoadType();
-//        logisticsOrder.setLoadCityCode();
-//        logisticsOrder.setLoadCityName();
-//        logisticsOrder.setLoadDetailAddress();
-//        logisticsOrder.setLoadLat();
-//        logisticsOrder.setLoadLng();
+        List<AddressInfoDetail> addressInfo = tradeOrder.getAddressInfo();
+        for (AddressInfoDetail detail : addressInfo) {
+            if (String.valueOf(NumberConstant.ONE).equals(detail.getAddressType())){
+                logisticsOrder.setLoadType(Long.parseLong(detail.getType()));
+                logisticsOrder.setLoadCityCode(detail.getCityCode());
+                logisticsOrder.setLoadCityName(detail.getCityName());
+                logisticsOrder.setLoadDetailAddress(detail.getDetailAddress());
+                logisticsOrder.setLoadLat(detail.getLat());
+                logisticsOrder.setLoadPhone(detail.getPhone());
+                logisticsOrder.setLoadLng(detail.getLng());
+                logisticsOrder.setLoadContacts(detail.getContacts());
+            }
+            if (String.valueOf(NumberConstant.TWO).equals(detail.getAddressType())){
+                logisticsOrder.setUnloadType(Long.parseLong(detail.getType()));
+                logisticsOrder.setUnloadPhone(detail.getPhone());
+                logisticsOrder.setUnloadCityCode(detail.getCityCode());
+                logisticsOrder.setUnloadCityName(detail.getCityName());
+                logisticsOrder.setUnloadDetailAddress(detail.getDetailAddress());
+                logisticsOrder.setUnloadLat(detail.getLat());
+                logisticsOrder.setUnloadLng(detail.getLng());
+                logisticsOrder.setUnloadContacts(detail.getContacts());
+            }
+        }
+        //TODO 生成时并无时间
 //        logisticsOrder.setLoadTime();
-//        logisticsOrder.setUnloadType();
-//        logisticsOrder.setUnloadPhone();
-//        logisticsOrder.setUnloadCityCode();
-//        logisticsOrder.setUnloadCityCode();
-//        logisticsOrder.setUnloadCityName();
-//        logisticsOrder.setUnloadDetailAddress();
-//        logisticsOrder.setUnloadLat();
-//        logisticsOrder.setUnloadLng();
+//        logisticsOrder.setunLoadTime();
         logisticsOrder.setCreateBy(LoginUserHolder.getUserId());
         logisticsOrder.setCreateByName(LoginUserHolder.getUserName());
         logisticsOrder.setCreateTime(new Date());
@@ -309,11 +319,11 @@ public class LogisticsConsignmentService {
      * @param order
      * @param tradeOrder
      */
-    private void insertLogisticsOrder(LogisticsConsignmentParam bo, String lOrderNo, KwtLogisticsOrder order, KwoTradeOrder tradeOrder, Long orderId) {
+    private void insertLogisticsOrder(LogisticsConsignmentParam bo, String lOrderNo, KwtLogisticsOrder order, OrderDetailRes tradeOrder, Long orderId) {
         order.setId(orderId);
         order.setEntId(LoginUserHolder.getEntId());
-        order.setTOrderId(Long.parseLong(bo.getLOrderId()));
-        order.setTOrderNo(bo.getLOrderNo());
+        order.setTOrderId(Long.parseLong(bo.getTOrderId()));
+        order.setTOrderNo(bo.getTOrderNo());
         order.setLOrderNo(lOrderNo);
         order.setPid(null);
         order.setSettlementCycle(bo.getSettlementCycle());
@@ -324,7 +334,7 @@ public class LogisticsConsignmentService {
 //        order.setPriceType(Long.parseLong(new ConvertDictTypeUtils().getDictType(LogisticsTypeEnum.PRICE_TYPE_0, bo.getPriceType())));
         order.setAmount(tradeOrder.getAmount());
         order.setBillingMode(bo.getBillingMode());
-        order.setUnit(tradeOrder.getUnit());
+//        order.setUnit(tradeOrder.getUnit());
         order.setLoss(new BigDecimal(bo.getLoss()));
         order.setLossUnit(bo.getLossUnit());
         order.setLossUnit(remoteSystemService.queryDictByTypeAndValue(DictEnum.UNIT_TYPE_0.getType(), bo.getLossUnit()) == null ?
@@ -336,12 +346,21 @@ public class LogisticsConsignmentService {
         order.setStartTime(bo.getShipmentsDateTime());
         order.setEntTime(bo.getReceiveGoodsDateTime());
         order.setRemark(bo.getRemark());
-        order.setPayment(tradeOrder.getTrading());
+        order.setPayment(Long.parseLong(tradeOrder.getTrading()));
         order.setTaxRate(new BigDecimal(bo.getTaxRate()));
         order.setCreateBy(LoginUserHolder.getUserId());
         order.setCreateTime(new Date());
         order.setUpdateBy(LoginUserHolder.getUserId());
         order.setUpdateTime(new Date());
+        order.setStatus(LogisticsOrderEnum.PENDING_ORDER.getCode());
+        BigDecimal decimal = new BigDecimal(NumberConstant.ZERO);
+        order.setEntrustAmount(decimal);
+        order.setSubcontractAmount(decimal);
+        order.setLoadAmount(decimal);
+        order.setUnloadAmount(decimal);
+        order.setIgnoreAmount(decimal);
+        order.setDeficitPrice(decimal);
+        order.setDeficitAmount(decimal);
         kwtLogisticsOrderMapper.insert(order);
     }
 
@@ -373,51 +392,51 @@ public class LogisticsConsignmentService {
         KwtLogisticsOrderAddress loadOrderAddress = new KwtLogisticsOrderAddress();
         KwtLogisticsOrderAddress unloadOrderAddress = new KwtLogisticsOrderAddress();
         //todo 装卸货地址 通过dubbo查询
-        KwoTradeOrderAddress loadkwoTradeOrderAddress = kwoTradeOrderAddressMapper.selectOne(new LambdaQueryWrapper<KwoTradeOrderAddress>()
-                .eq(StringUtils.isNotBlank(bo.getLOrderId()), KwoTradeOrderAddress::getTOrderId, bo.getLOrderId())
-                .eq(KwoTradeOrderAddress::getAddressType, NumberConstant.ONE));
-        if (ObjectUtils.isEmpty(loadkwoTradeOrderAddress)) {
-            log.info("查询数据:orderId:{},type:{}", bo.getLOrderId(), bo.getPriceType());
-            throw new RuntimeException("装货地址查找失败!");
+        OrderDetailRes orderDetailRes = tradeOrderInfoService.getOrderDetailById(Long.parseLong(bo.getTOrderId()));
+        if (ObjectUtils.isEmpty(orderDetailRes)) {
+            log.info("dubbp 查询数据 error :orderId:{}", bo.getTOrderId());
+            throw new RuntimeException("dubbp 查询销售订单数据查找失败!");
         }
-        loadOrderAddress.setId(new IdWorker(NumberConstant.ONE).nextId());
-        loadOrderAddress.setAddressType(NumberConstant.ONE);
-        loadOrderAddress.setDetailAddress(loadkwoTradeOrderAddress.getDetailAddress());
-        loadOrderAddress.setContacts(loadkwoTradeOrderAddress.getContacts());
-        loadOrderAddress.setLOrderId(orderId);
-        loadOrderAddress.setLat(loadkwoTradeOrderAddress.getLat());
-        loadOrderAddress.setFence(loadkwoTradeOrderAddress.getFence());
-        loadOrderAddress.setCityName(loadkwoTradeOrderAddress.getCityName());
-        loadOrderAddress.setEntryType(NumberConstant.FOUR);
-        loadOrderAddress.setCreateTime(new Date());
-        loadOrderAddress.setPhone(loadkwoTradeOrderAddress.getPhone());
-        loadOrderAddress.setCreateBy(LoginUserHolder.getUserId());
-        loadOrderAddress.setUpdateBy(LoginUserHolder.getUserId());
-        loadOrderAddress.setUpdateTime(new Date());
-        kwtLogisticsOrderAddressMapper.insert(loadOrderAddress);
-
-        KwoTradeOrderAddress unloadkwoTradeOrderAddress = kwoTradeOrderAddressMapper.selectOne(new LambdaQueryWrapper<KwoTradeOrderAddress>()
-                .eq(StringUtils.isNotBlank(bo.getLOrderId()), KwoTradeOrderAddress::getTOrderId, bo.getLOrderId())
-                .eq(KwoTradeOrderAddress::getAddressType, NumberConstant.TWO));
-        if (ObjectUtils.isEmpty(unloadkwoTradeOrderAddress)) {
-            log.info("查询数据:orderId:{},type:{}", bo.getLOrderId(), bo.getPriceType());
-            throw new RuntimeException("卸货地址查找失败!");
+        List<AddressInfoDetail> addressInfo = orderDetailRes.getAddressInfo();
+        if (CollectionUtils.isNotEmpty(addressInfo)){
+            for (AddressInfoDetail detail : addressInfo) {
+                if (String.valueOf(NumberConstant.ONE).equals(detail.getAddressType())){
+                    loadOrderAddress.setId(new IdWorker(NumberConstant.ONE).nextId());
+                    loadOrderAddress.setAddressType(NumberConstant.ONE);
+                    loadOrderAddress.setDetailAddress(detail.getDetailAddress());
+                    loadOrderAddress.setContacts(detail.getContacts());
+                    loadOrderAddress.setLOrderId(orderId);
+                    loadOrderAddress.setLat(detail.getLat());
+                    loadOrderAddress.setFence(detail.getFence());
+                    loadOrderAddress.setCityName(detail.getCityName());
+                    loadOrderAddress.setEntryType(NumberConstant.FOUR);
+                    loadOrderAddress.setCreateTime(new Date());
+                    loadOrderAddress.setPhone(detail.getPhone());
+                    loadOrderAddress.setCreateBy(LoginUserHolder.getUserId());
+                    loadOrderAddress.setUpdateBy(LoginUserHolder.getUserId());
+                    loadOrderAddress.setUpdateTime(new Date());
+                }
+                if (String.valueOf(NumberConstant.TWO).equals(detail.getAddressType())){
+                    unloadOrderAddress.setId(new IdWorker(NumberConstant.ONE).nextId());
+                    unloadOrderAddress.setAddressType(NumberConstant.TWO);
+                    unloadOrderAddress.setId(new IdWorker(NumberConstant.ONE).nextId());
+                    unloadOrderAddress.setContacts(detail.getContacts());
+                    unloadOrderAddress.setLOrderId(orderId);
+                    unloadOrderAddress.setLat(detail.getLat());
+                    unloadOrderAddress.setFence(detail.getFence());
+                    unloadOrderAddress.setCityName(detail.getCityName());
+                    unloadOrderAddress.setEntryType(NumberConstant.FOUR);
+                    unloadOrderAddress.setPhone(detail.getPhone());
+                    unloadOrderAddress.setDetailAddress(detail.getDetailAddress());
+                    unloadOrderAddress.setCreateTime(new Date());
+                    unloadOrderAddress.setCreateBy(LoginUserHolder.getUserId());
+                    unloadOrderAddress.setUpdateBy(LoginUserHolder.getUserId());
+                    unloadOrderAddress.setUpdateTime(new Date());
+                }
+            }
         }
-        unloadOrderAddress.setId(new IdWorker(NumberConstant.ONE).nextId());
-        unloadOrderAddress.setAddressType(NumberConstant.TWO);
-        unloadOrderAddress.setId(new IdWorker(NumberConstant.ONE).nextId());
-        unloadOrderAddress.setContacts(loadkwoTradeOrderAddress.getContacts());
-        unloadOrderAddress.setLOrderId(orderId);
-        unloadOrderAddress.setLat(loadkwoTradeOrderAddress.getLat());
-        unloadOrderAddress.setFence(loadkwoTradeOrderAddress.getFence());
-        unloadOrderAddress.setCityName(loadkwoTradeOrderAddress.getCityName());
-        unloadOrderAddress.setEntryType(NumberConstant.FOUR);
-        unloadOrderAddress.setPhone(loadkwoTradeOrderAddress.getPhone());
-        unloadOrderAddress.setDetailAddress(loadkwoTradeOrderAddress.getDetailAddress());
-        unloadOrderAddress.setCreateTime(new Date());
-        unloadOrderAddress.setCreateBy(LoginUserHolder.getUserId());
-        unloadOrderAddress.setUpdateBy(LoginUserHolder.getUserId());
-        unloadOrderAddress.setUpdateTime(new Date());
+
+        kwtLogisticsOrderAddressMapper.insert(loadOrderAddress);
         kwtLogisticsOrderAddressMapper.insert(unloadOrderAddress);
     }
 

+ 16 - 10
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java

@@ -11,6 +11,9 @@ import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.utils.DateUtil;
+import com.sckw.order.api.dubbo.TradeOrderInfoService;
+import com.sckw.order.api.model.OrderDetailRes;
+import com.sckw.order.api.model.UpdateOrderAmountParam;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.transport.api.model.dto.vo.LogisticsOrderDTO;
@@ -44,8 +47,8 @@ public class TransportCommonService {
     @DubboReference(version = "2.0.0", group = "design", check = false)
     RemoteSystemService remoteSystemService;
 
-    @Autowired
-    public KwoTradeOrderMapper tradeOrderMapper;
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    TradeOrderInfoService tradeOrderInfoService;
 
     @Autowired
     public KwtLogisticsOrderGoodsMapper logisticsOrderGoodsMapper;
@@ -56,9 +59,6 @@ public class TransportCommonService {
     @Autowired
     public KwtLogisticsOrderMapper logisticsOrderMapper;
 
-    @Autowired
-    public KwoTradeOrderAddressMapper tradeOrderAddressMapper;
-
     @Autowired
     public KwtLogisticsOrderAddressMapper logisticsOrderAddressMapper;
 
@@ -228,9 +228,14 @@ public class TransportCommonService {
         /**以此字段判别是否存在分包操作*/
         if (ObjectUtils.isEmpty(logisticsOrder.getPid())) {
             /**并不存在分包,撤销数据回归到贸易订单,[待接单状态]下才能撤销托运*/
-            //todo 调用dubbo 修改数值
+            /**调用dubbo 修改数值*/
             Long tOrderId = logisticsOrder.getTOrderId();
-            String tOrderNo = logisticsOrder.getTOrderNo();
+            OrderDetailRes orderDetailRes = tradeOrderInfoService.getOrderDetailById(tOrderId);
+            UpdateOrderAmountParam param = new UpdateOrderAmountParam();
+            param.setTOrderId(tOrderId);
+            param.setActualAmount(orderDetailRes.getActualAmount().add(logisticsOrder.getLoadAmount()));
+            param.setEntrustAmount(orderDetailRes.getEntrustAmount().add(logisticsOrder.getEntrustAmount().subtract(logisticsOrder.getLoadAmount())));
+            tradeOrderInfoService.updateOrderAmount(param);
             logisticsOrder.setDelFlag(1);
             logisticsOrder.setUpdateTime(new Date());
             logisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
@@ -242,6 +247,7 @@ public class TransportCommonService {
         } else {
             /**即代表存在分包,当次是属于被分包.需要将数据回归到上游数据。*/
             Long pid = logisticsOrder.getPid();
+            /**指的是上游单据进行回归*/
             KwtLogisticsOrder order = logisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
                     .eq(KwtLogisticsOrder::getId, pid));
             //上游分配量
@@ -254,11 +260,11 @@ public class TransportCommonService {
             BigDecimal add = order.getSubcontractAmount().add(subtract);
             logisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
                     .eq(KwtLogisticsOrder::getId, order.getId())
-                    .set(KwtLogisticsOrder::getDelFlag, NumberConstant.ONE)
+                    .set(KwtLogisticsOrder::getDelFlag, NumberConstant.ZERO)
                     .set(KwtLogisticsOrder::getSubcontractAmount, add)
                     .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId())
                     .set(KwtLogisticsOrder::getUpdateTime, new Date()));
-
+            /**下游订单进行删除*/
             logisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
                     .eq(KwtLogisticsOrder::getId, logisticsOrder.getId())
                     .set(KwtLogisticsOrder::getDelFlag, NumberConstant.ONE)
@@ -278,7 +284,7 @@ public class TransportCommonService {
             logisticsOrderParam.setEndTime(logisticsOrderParam.getEndTime() + " 23:59:59");
         }
         Integer page = logisticsOrderParam.getPage();
-        logisticsOrderParam.setPage(logisticsOrderParam.getPage()-1);
+        logisticsOrderParam.setPage(logisticsOrderParam.getPage() - 1);
         List<LogisticsOrderDTO> list = logisticsOrderMapper.selectLogisticOrderData(logisticsOrderParam, dictId);
         Long count = logisticsOrderMapper.selectLogisticOrderCount(logisticsOrderParam, dictId);
         if (CollectionUtils.isNotEmpty(list)) {

+ 0 - 9
sckw-modules/sckw-transport/src/main/resources/mapper/KwoTradeOrderMapper.xml

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.sckw.transport.dao.KwoTradeOrderMapper">
-    <resultMap id="BaseResultMap" type="com.sckw.transport.model.KwoTradeOrder">
-        <id column="id" jdbcType="BIGINT" property="id" />
-        <result column="t_order_no" jdbcType="BIGINT" property="tOrderNo" />
-        <result column="amount" jdbcType="INTEGER" property="amount" />
-    </resultMap>
-</mapper>

+ 40 - 184
sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderCirculateMapper.xml

@@ -1,188 +1,44 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.sckw.transport.dao.KwtLogisticsOrderCirculateMapper">
-  <resultMap id="BaseResultMap" type="com.sckw.transport.model.KwtLogisticsOrderCirculate">
-    <id column="id" jdbcType="BIGINT" property="id" />
-    <result column="ent_id" jdbcType="BIGINT" property="entId" />
-    <result column="order_id" jdbcType="BIGINT" property="orderId" />
-    <result column="car_num" jdbcType="VARCHAR" property="carNum" />
-    <result column="driver_id" jdbcType="BIGINT" property="driverId" />
-    <result column="entrust_amount" jdbcType="DECIMAL" property="entrustAmount" />
-    <result column="remark" jdbcType="VARCHAR" property="remark" />
-    <result column="status" jdbcType="INTEGER" property="status" />
-    <result column="create_by" jdbcType="BIGINT" property="createBy" />
-    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
-    <result column="update_by" jdbcType="BIGINT" property="updateBy" />
-    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
-    <result column="del_flag" jdbcType="INTEGER" property="delFlag" />
-  </resultMap>
-  <sql id="Base_Column_List">
-    id, ent_id, order_id, car_num, driver_id, entrust_amount, remark, `status`, create_by, 
-    create_time, update_by, update_time, del_flag
-  </sql>
-  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
-    select 
-    <include refid="Base_Column_List" />
-    from kwt_logistics_order_circulate
-    where id = #{id,jdbcType=BIGINT}
-  </select>
-  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
-    delete from kwt_logistics_order_circulate
-    where id = #{id,jdbcType=BIGINT}
-  </delete>
-  <insert id="insert" parameterType="com.sckw.transport.model.KwtLogisticsOrderCirculate">
-    insert into kwt_logistics_order_circulate (id, ent_id, order_id, 
-      car_num, driver_id, entrust_amount, 
-      remark, `status`, create_by, 
-      create_time, update_by, update_time, 
-      del_flag)
-    values (#{id,jdbcType=BIGINT}, #{entId,jdbcType=BIGINT}, #{orderId,jdbcType=BIGINT}, 
-      #{carNum,jdbcType=VARCHAR}, #{driverId,jdbcType=BIGINT}, #{entrustAmount,jdbcType=DECIMAL}, 
-      #{remark,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, #{createBy,jdbcType=BIGINT}, 
-      #{createTime,jdbcType=TIMESTAMP}, #{updateBy,jdbcType=BIGINT}, #{updateTime,jdbcType=TIMESTAMP}, 
-      #{delFlag,jdbcType=INTEGER})
-  </insert>
-  <insert id="insertSelective" parameterType="com.sckw.transport.model.KwtLogisticsOrderCirculate">
-    insert into kwt_logistics_order_circulate
-    <trim prefix="(" suffix=")" suffixOverrides=",">
-      <if test="id != null">
-        id,
-      </if>
-      <if test="entId != null">
-        ent_id,
-      </if>
-      <if test="orderId != null">
-        order_id,
-      </if>
-      <if test="carNum != null">
-        car_num,
-      </if>
-      <if test="driverId != null">
-        driver_id,
-      </if>
-      <if test="entrustAmount != null">
-        entrust_amount,
-      </if>
-      <if test="remark != null">
-        remark,
-      </if>
-      <if test="status != null">
-        `status`,
-      </if>
-      <if test="createBy != null">
-        create_by,
-      </if>
-      <if test="createTime != null">
-        create_time,
-      </if>
-      <if test="updateBy != null">
-        update_by,
-      </if>
-      <if test="updateTime != null">
-        update_time,
-      </if>
-      <if test="delFlag != null">
-        del_flag,
-      </if>
-    </trim>
-    <trim prefix="values (" suffix=")" suffixOverrides=",">
-      <if test="id != null">
-        #{id,jdbcType=BIGINT},
-      </if>
-      <if test="entId != null">
-        #{entId,jdbcType=BIGINT},
-      </if>
-      <if test="orderId != null">
-        #{orderId,jdbcType=BIGINT},
-      </if>
-      <if test="carNum != null">
-        #{carNum,jdbcType=VARCHAR},
-      </if>
-      <if test="driverId != null">
-        #{driverId,jdbcType=BIGINT},
-      </if>
-      <if test="entrustAmount != null">
-        #{entrustAmount,jdbcType=DECIMAL},
-      </if>
-      <if test="remark != null">
-        #{remark,jdbcType=VARCHAR},
-      </if>
-      <if test="status != null">
-        #{status,jdbcType=INTEGER},
-      </if>
-      <if test="createBy != null">
-        #{createBy,jdbcType=BIGINT},
-      </if>
-      <if test="createTime != null">
-        #{createTime,jdbcType=TIMESTAMP},
-      </if>
-      <if test="updateBy != null">
-        #{updateBy,jdbcType=BIGINT},
-      </if>
-      <if test="updateTime != null">
-        #{updateTime,jdbcType=TIMESTAMP},
-      </if>
-      <if test="delFlag != null">
-        #{delFlag,jdbcType=INTEGER},
-      </if>
-    </trim>
-  </insert>
-  <update id="updateByPrimaryKeySelective" parameterType="com.sckw.transport.model.KwtLogisticsOrderCirculate">
-    update kwt_logistics_order_circulate
-    <set>
-      <if test="entId != null">
-        ent_id = #{entId,jdbcType=BIGINT},
-      </if>
-      <if test="orderId != null">
-        order_id = #{orderId,jdbcType=BIGINT},
-      </if>
-      <if test="carNum != null">
-        car_num = #{carNum,jdbcType=VARCHAR},
-      </if>
-      <if test="driverId != null">
-        driver_id = #{driverId,jdbcType=BIGINT},
-      </if>
-      <if test="entrustAmount != null">
-        entrust_amount = #{entrustAmount,jdbcType=DECIMAL},
-      </if>
-      <if test="remark != null">
-        remark = #{remark,jdbcType=VARCHAR},
-      </if>
-      <if test="status != null">
-        `status` = #{status,jdbcType=INTEGER},
-      </if>
-      <if test="createBy != null">
-        create_by = #{createBy,jdbcType=BIGINT},
-      </if>
-      <if test="createTime != null">
-        create_time = #{createTime,jdbcType=TIMESTAMP},
-      </if>
-      <if test="updateBy != null">
-        update_by = #{updateBy,jdbcType=BIGINT},
-      </if>
-      <if test="updateTime != null">
-        update_time = #{updateTime,jdbcType=TIMESTAMP},
-      </if>
-      <if test="delFlag != null">
-        del_flag = #{delFlag,jdbcType=INTEGER},
-      </if>
-    </set>
-    where id = #{id,jdbcType=BIGINT}
-  </update>
-  <update id="updateByPrimaryKey" parameterType="com.sckw.transport.model.KwtLogisticsOrderCirculate">
-    update kwt_logistics_order_circulate
-    set ent_id = #{entId,jdbcType=BIGINT},
-      order_id = #{orderId,jdbcType=BIGINT},
-      car_num = #{carNum,jdbcType=VARCHAR},
-      driver_id = #{driverId,jdbcType=BIGINT},
-      entrust_amount = #{entrustAmount,jdbcType=DECIMAL},
-      remark = #{remark,jdbcType=VARCHAR},
-      `status` = #{status,jdbcType=INTEGER},
-      create_by = #{createBy,jdbcType=BIGINT},
-      create_time = #{createTime,jdbcType=TIMESTAMP},
-      update_by = #{updateBy,jdbcType=BIGINT},
-      update_time = #{updateTime,jdbcType=TIMESTAMP},
-      del_flag = #{delFlag,jdbcType=INTEGER}
-    where id = #{id,jdbcType=BIGINT}
-  </update>
+    <resultMap id="BaseResultMap" type="com.sckw.transport.model.KwtLogisticsOrderCirculate">
+        <id column="id" jdbcType="BIGINT" property="id" />
+        <result column="ent_id" jdbcType="BIGINT" property="entId" />
+        <result column="l_order_id" jdbcType="BIGINT" property="lOrderId" />
+        <result column="w_order_id" jdbcType="BIGINT" property="wOrderId" />
+        <result column="truck_no" jdbcType="VARCHAR" property="truckNo" />
+        <result column="driver_id" jdbcType="BIGINT" property="driverId" />
+        <result column="type" jdbcType="BIGINT" property="type" />
+        <result column="actual_amount" jdbcType="DECIMAL" property="actualAmount" />
+        <result column="entrust_amount" jdbcType="DECIMAL" property="entrustAmount" />
+        <result column="entrust_date" jdbcType="TIMESTAMP" property="entrustDate" />
+        <result column="remark" jdbcType="VARCHAR" property="remark" />
+        <result column="status" jdbcType="INTEGER" property="status" />
+        <result column="create_by" jdbcType="BIGINT" property="createBy" />
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+        <result column="update_by" jdbcType="BIGINT" property="updateBy" />
+        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+        <result column="del_flag" jdbcType="INTEGER" property="delFlag" />
+    </resultMap>
+    <sql id="Base_Column_List">
+        id, ent_id, l_order_id, w_order_id, truck_no,type, driver_id, actual_amount, entrust_amount,
+    entrust_date, remark, `status`, create_by, create_time, update_by, update_time, del_flag
+    </sql>
+    <select id="selectDriverOrderByStatus" resultType="java.lang.Long">
+        SELECT b.w_order_id as wOrderId
+        FROM kwt_waybill_order a
+        LEFT JOIN `kwt_logistics_order_circulate` b ON a.id = b.w_order_id
+        WHERE a.del_flag = '0'
+        AND b.`status` = '0'
+        AND a.type = '1'
+        <if test="id != null and id !=''">
+           and  b.driver_id = #{id,jdbcType=BIGINT}
+        </if>
+        <if test="status != null and status.size() > 0">
+            AND a.`status` IN
+            <foreach collection="status" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+    </select>
 </mapper>

+ 5 - 1
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

@@ -75,12 +75,13 @@
         LEFT JOIN kwt_waybill_order_track b ON a.id = b.w_order_id
         AND a.del_flag = '0'
         AND b.del_flag = '0'
+        AND a.type='0'
         <where>
             <if test="id != null and id !=''">
                 a.driver_id = #{id,jdbcType=BIGINT}
             </if>
             <if test="status != null and status.size() > 0">
-                AND b.`status` IN
+                AND a.`status` IN
                 <foreach collection="status" item="item" open="(" close=")" separator=",">
                     #{item}
                 </foreach>
@@ -88,4 +89,7 @@
         </where>
         group by lOrderId
     </select>
+    <select id="getWaybillData" resultType="com.sckw.transport.model.vo.WaybillDetailVO">
+
+    </select>
 </mapper>