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

承运订单-获取运单详情
承运订单-分包托运

lengfaqiang 2 лет назад
Родитель
Сommit
76b81e2bb0
30 измененных файлов с 601 добавлено и 274 удалено
  1. 1 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/StringConstant.java
  2. 11 2
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwWaybillOrder.java
  3. 3 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/AddressInfoDetailRes.java
  4. 3 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/GoodsInfoDetailRes.java
  5. 2 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderDetailRes.java
  6. 2 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderListRes.java
  7. 3 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/UnitInfoDetailRes.java
  8. 5 0
      sckw-modules/sckw-transport/pom.xml
  9. 1 55
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/AcceptCarriageOrderController.java
  10. 0 15
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwoTradeOrderMapper.java
  11. 1 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderMapper.java
  12. 0 80
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwoTradeOrder.java
  13. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwoTradeOrderAddress.java
  14. 6 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrder.java
  15. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderAddress.java
  16. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderCirculate.java
  17. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderContract.java
  18. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderGoods.java
  19. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderSubcontract.java
  20. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderTrack.java
  21. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderUnit.java
  22. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrder.java
  23. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTicket.java
  24. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTrack.java
  25. 16 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsConsignmentParam.java
  26. 2 11
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillDetailVO.java
  27. 435 8
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java
  28. 96 75
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java
  29. 0 9
      sckw-modules/sckw-transport/src/main/resources/mapper/KwoTradeOrderMapper.xml
  30. 3 0
      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";

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

+ 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

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

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

@@ -1,17 +1,11 @@
 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.excel.easyexcel.RequestHolder;
-import com.sckw.excel.utils.ExcelUtil;
 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.service.AcceptCarriageOrderService;
-import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.annotations.Param;
@@ -22,8 +16,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
@@ -38,51 +30,6 @@ public class AcceptCarriageOrderController {
     @Autowired
     AcceptCarriageOrderService acceptCarriageOrderService;
 
-    /**
-     * 承运订单首页条件查询
-     * @param query 查询参数
-     * @return
-     */
-    @RequestMapping(value = "/list", method = RequestMethod.GET)
-    public HttpResult acceptCarriageOrderList(AcceptCarriageOrderQuery query) {
-        try {
-            return acceptCarriageOrderService.list(query);
-        } catch (Exception e) {
-            log.error("承运订单查询失败:{}", e.getMessage(), e);
-            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
-        }
-    }
-
-    /**
-     * 承运订单首页统计查询
-     * @return
-     */
-    @RequestMapping(value = "/statistics", method = RequestMethod.GET)
-    public HttpResult acceptCarriageOrderCount(AcceptCarriageOrderQuery query) {
-        try {
-            return acceptCarriageOrderService.count(query);
-        } catch (Exception e) {
-            log.error("承运订单首页统计查询:{}", e.getMessage(), e);
-            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
-        }
-    }
-
-    /**
-     * 承运订单导出
-     * @param query
-     * @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();
-        }
-        return HttpResult.error("没有可导出的数据");
-    }
-
     /**
      * 承运订单-接单
      * @param orderDTO
@@ -131,8 +78,7 @@ public class AcceptCarriageOrderController {
     @RequestMapping(value = "/getWaybillData", method = RequestMethod.GET)
     public HttpResult getWaybillData(@Param("wOrderId") String wOrderId) {
         try {
-//            return acceptCarriageOrderService.getWaybillData(wOrderId);
-            return null;
+            return acceptCarriageOrderService.getWaybillData(wOrderId);
         } catch (Exception e) {
             log.error("承运订单-获取运单详情 error:{}", e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());

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

+ 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 {
     /**
      * 主键

+ 1 - 1
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 {
     /**
      * 主键

+ 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 {
     /**
      * 主键

+ 16 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsConsignmentParam.java

@@ -19,6 +19,10 @@ import java.util.Date;
 @Data
 @Accessors(chain = true)
 public class LogisticsConsignmentParam {
+    /**
+     *总量
+     */
+    private Long amount;
     /**
      * 分配承运量
      */
@@ -134,15 +138,25 @@ public class LogisticsConsignmentParam {
     @NotNull(message = "是否全量不能为空")
     private Boolean isFullDose;
     /**
-     * 订单id
+     * 订单id-分包时要使用
      */
     @JsonProperty("lOrderId")
     private String lOrderId;
     /**
-     * 订单编号
+     * 订单编号-分包时要使用
      */
     @JsonProperty("lOrderNo")
     private String lOrderNo;
+    /**
+     * 贸易订单id
+     */
+    @JsonProperty("tOrderId")
+    private String tOrderId;
+    /**
+     * 贸易订单编号
+     */
+    @JsonProperty("lOrderNo")
+    private String tOrderNo;
     /**
      * 运价
      */

+ 2 - 11
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillDetailVO.java

@@ -25,11 +25,11 @@ public class WaybillDetailVO {
      */
     private BigDecimal unloadAmount;
     /**
-     * 装货时间
+     * 实际装货时间
      */
     private Date stowageDateTime;
     /**
-     * 卸货时间
+     * 实际卸货时间
      */
     private Date unloadDateTime;
     /**
@@ -73,14 +73,5 @@ public class WaybillDetailVO {
      */
     private Date endTime;
 
-    /**
-     * 计划开始时间
-     */
-    private Date loadTime;
-    /**
-     * 计划结束时间
-     */
-    private Date unloadTime;
-
 }
 

+ 435 - 8
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,7 +19,13 @@ 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;
@@ -24,7 +33,6 @@ import com.sckw.transport.common.enums.LogisticsOrderEnum;
 import com.sckw.transport.dao.*;
 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;
@@ -32,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;
@@ -55,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;
@@ -76,9 +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);
+    }
+
+    /**
+     * 分包托运-承运订单-装卸货地址信息
+     *
+     * @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);
     }
 
-    public List acceptOrder(OrderDTO orderDTO) {
+    /**
+     * 分包托运-承运订单-单位信息
+     *
+     * @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);
+    }
 
-        return null;
+    /**
+     * 分包托运-承运订单-合同信息
+     *
+     * @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);
     }
 
+
     /**
      * 是否接单
      *
@@ -233,6 +632,7 @@ public class AcceptCarriageOrderService {
         }
         return result;
     }
+
     private void sendMongoDbData(List<SckwWaybillOrder> list, KwtLogisticsOrder logisticsOrder
             , CarListDTO carListDTO, SendCarDTO sendCarDTO, String type) {
         //放入mongodb实体
@@ -382,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);
+    }
 }

+ 96 - 75
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;
@@ -94,14 +97,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 +136,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 +163,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 +176,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 +190,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 +322,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 +337,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,13 +349,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);
     }
 
@@ -374,51 +395,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);
     }
 

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

+ 3 - 0
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

@@ -89,4 +89,7 @@
         </where>
         group by lOrderId
     </select>
+    <select id="getWaybillData" resultType="com.sckw.transport.model.vo.WaybillDetailVO">
+
+    </select>
 </mapper>