فهرست منبع

1.新增v4.2版本物流托运接口

lengfaqiang 1 سال پیش
والد
کامیت
645bf58964
39فایلهای تغییر یافته به همراه2056 افزوده شده و 168 حذف شده
  1. 7 4
      sckw-modules-api/sckw-manage-api/src/main/java/com/sckw/manage/api/RemoteManageService.java
  2. 152 0
      sckw-modules-api/sckw-manage-api/src/main/java/com/sckw/manage/api/model/dto/res/LineFreightAddressRes.java
  3. 11 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java
  4. 6 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/AddressInfoDetail.java
  5. 90 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/OrderAddressDetailRes.java
  6. 10 10
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportRemoteService.java
  7. 1 1
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportRemoteStatisticsService.java
  8. 13 9
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/CommonBusinessService.java
  9. 2 2
      sckw-modules/sckw-example/src/main/java/com/sckw/example/service/TransportService.java
  10. 4 4
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java
  11. 30 2
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/dubbo/RemoteManageServiceImpl.java
  12. 3 3
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmCooperateManageService.java
  13. 15 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java
  14. 5 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/AddressInfoDetailRes.java
  15. 45 2
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderAddressService.java
  16. 4 3
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  17. 9 9
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsService.java
  18. 8 5
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementWalletService.java
  19. 4 4
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/operateService/LedgerLogisticsService.java
  20. 2 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/operateService/SettlementWalletService.java
  21. 2 2
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwWorkService.java
  22. 2 2
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsUserService.java
  23. 21 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtLogisticsConsignmentController.java
  24. 14 17
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java
  25. 19 19
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java
  26. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportStatisticsServiceImpl.java
  27. 13 11
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderAmount.java
  28. 5 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderLineFreightRate.java
  29. 47 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/AddressInfoDto.java
  30. 26 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/ContractDto.java
  31. 27 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LineFreightDto.java
  32. 470 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsConsignmentDto.java
  33. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderDto.java
  34. 56 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/UnitInfoDto.java
  35. 94 39
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  36. 758 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderConsignmentService.java
  37. 67 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderGoodsService.java
  38. 5 5
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/operateService/KwtManagementLogisticsOrderService.java
  39. 6 6
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml

+ 7 - 4
sckw-modules-api/sckw-manage-api/src/main/java/com/sckw/manage/api/RemoteManageService.java

@@ -1,9 +1,6 @@
 package com.sckw.manage.api;
 
-import com.sckw.manage.api.model.dto.res.EntAddressResDto;
-import com.sckw.manage.api.model.dto.res.FindCooperateByEntReqVo;
-import com.sckw.manage.api.model.dto.res.FindCooperateByEntResVo;
-import com.sckw.manage.api.model.dto.res.FindEntCooperateResVo;
+import com.sckw.manage.api.model.dto.res.*;
 
 import java.util.List;
 import java.util.Map;
@@ -45,4 +42,10 @@ public interface RemoteManageService {
 
     List<FindCooperateByEntResVo> findCooperateByEnt(FindCooperateByEntReqVo reqVo);
 
+    /**
+     * 获取路线地址信息
+     * @param lineFreightId
+     * @return
+     */
+    Map<Long, LineFreightAddressRes> findLineFreightAddress(List<Long> lineFreightId);
 }

+ 152 - 0
sckw-modules-api/sckw-manage-api/src/main/java/com/sckw/manage/api/model/dto/res/LineFreightAddressRes.java

@@ -0,0 +1,152 @@
+package com.sckw.manage.api.model.dto.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.Size;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author lfdc
+ * @description 线路地址
+ * @date 2024-03-04 13:03:51
+ */
+@Getter
+@Setter
+public class LineFreightAddressRes implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -4571752839456202179L;
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 线路名称
+     */
+    private String name;
+
+    /**
+     * 起始地_名称
+     */
+    private String loadName;
+
+    /**
+     * 起始地-所在地区
+     */
+    private Integer loadCityCode;
+
+    /**
+     * 起始地-所属区域名称
+     */
+    private String loadCityName;
+
+    /**
+     * 起始地-详细地址
+     */
+    private String loadDetailAddress;
+
+    /**
+     * 起始地-纬度
+     */
+    private String loadLat;
+
+    /**
+     * 起始地-经度
+     */
+    private String loadLng;
+
+    /**
+     * 目的地_名称
+     */
+    private String unloadName;
+
+    /**
+     * 目的地-所在地区
+     */
+    private Integer unloadCityCode;
+
+    /**
+     * 目的地-所属区域名称
+     */
+    private String unloadCityName;
+
+    /**
+     * 目的地-详细地址
+     */
+    private String unloadDetailAddress;
+
+    /**
+     * 目的地-纬度
+     */
+    private String unloadLat;
+
+    /**
+     * 目的地-经度
+     */
+    private String unloadLng;
+
+    /**
+     * 运输里程
+     */
+    private BigDecimal transportMileage;
+
+    /**
+     * 运输单价(元/公里)
+     */
+    private BigDecimal transportPrice;
+
+    /**
+     * 运输总价
+     */
+    private BigDecimal transportAmount;
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 备注
+     */
+    @Size(max = 200, message = "备注长度不能超过200")
+    private String remark;
+
+    /**
+     * 状态:0正常/1锁定
+     */
+    private Integer status;
+
+    /**
+     * 创建人
+     */
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 更新人
+     */
+    private Long updateBy;
+
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    /**
+     * 删除标识(0正常/-1删除)
+     */
+    private Integer delFlag;
+
+}

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

@@ -21,6 +21,17 @@ public interface TradeOrderInfoService {
      */
     OrderDetailRes getOrderDetailById(Long tOrderId);
 
+
+
+    /**
+     * @desc: 获取订单详情
+     * @author: yzc
+     * @date: 2023-07-18 18:25
+     * @Param tOrderId:
+     * @return: com.sckw.order.api.model.OrderAddressDetailRes
+     */
+    OrderAddressDetailRes getOrderDetailByTradeOrderIdAndAddressId(Long tOrderId,Long tAddressId);
+
     /**
      * @desc: 更新订单状态
      * @author: yzc

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

@@ -19,6 +19,12 @@ public class AddressInfoDetail implements Serializable {
 
     @Serial
     private static final long serialVersionUID = -7229803070964346948L;
+
+    /**
+     * 地址id
+     */
+    private String id;
+
     /**
      * 地址类型label
      */

+ 90 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/OrderAddressDetailRes.java

@@ -0,0 +1,90 @@
+package com.sckw.order.api.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author lfdc
+ * @description 贸易订单地址id
+ * @date 2024-03-04 10:03:34
+ */
+@Getter
+@Setter
+public class OrderAddressDetailRes implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -2951319997472302360L;
+    /**
+     * 地址id
+     */
+    private String id;
+
+    /**
+     * 地址类型label
+     */
+    private String addressTypeLabel;
+
+    /**
+     * 地址类型label
+     */
+    private String typeLabel;
+
+
+    /**
+     * 地址类型(1装货地址、2卸货地址)
+     */
+    private String addressType;
+
+    /**
+     * 地址名称
+     */
+    private String name;
+
+    /**
+     * 地址类型
+     */
+    private String type;
+
+    /**
+     * 联系人姓名
+     */
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 所在地区
+     */
+    private Integer cityCode;
+
+    /**
+     * 所属区域名称
+     */
+    private String cityName;
+
+    /**
+     * 详细地址
+     */
+    private String detailAddress;
+
+    /**
+     * 纬度
+     */
+    private String lat;
+
+    /**
+     * 经度
+     */
+    private String lng;
+
+    /**
+     * 电子围栏
+     */
+    private String fence;
+}

+ 10 - 10
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportService.java → sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportRemoteService.java

@@ -10,18 +10,18 @@ import com.sckw.transport.api.model.param.LogisticsOrderParam;
 import com.sckw.transport.api.model.vo.KwtLogisticsOrderVO;
 import com.sckw.transport.api.model.vo.RTruckMonitorVo;
 import com.sckw.transport.api.model.vo.RWaybillOrderVo;
+
 import java.util.List;
-import java.util.Map;
 
 /**
  * @author lfdc
  * @version 1.0
- * @className TransportDubboService
+ * @className TransportRemoteService
  * @description 物流订单dubbo
  * @company sckw
  * @date 2023-07-17 10:06:27
  */
-public interface TransportService {
+public interface TransportRemoteService {
 
     /**
      * 根据id 获取主表详情
@@ -70,13 +70,13 @@ public interface TransportService {
      */
     HttpResult checkLogisticsOrderStatusById(LogisticsOrderParam logisticsOrderParam);
 
-    /**
-     * 根据企业id获取物流订单地址信息
-     *
-     * @param entIds 企业id
-     * @return
-     */
-    Map<Long, List<AddressResDTO>> getLogisticsOrderAddressListByEntId(List<Long> entIds);
+//    /**
+//     * 根据企业id获取物流订单地址信息
+//     *
+//     * @param entIds 企业id
+//     * @return
+//     */
+//    Map<Long, List<AddressResDTO>> getLogisticsOrderAddressListByEntId(List<Long> entIds);
 
     /**
      * 运费对账是否进行对账绑定数据

+ 1 - 1
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportStatisticsService.java → sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportRemoteStatisticsService.java

@@ -10,7 +10,7 @@ import java.util.List;
  * @company sckw
  * @date 2023-09-08 10:06:27
  */
-public interface TransportStatisticsService {
+public interface TransportRemoteStatisticsService {
     /**
      * 统计承运订单
      *

+ 13 - 9
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/CommonBusinessService.java

@@ -21,27 +21,31 @@ import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.ClientTypeEnum;
 import com.sckw.core.model.enums.CooperateTypeEnum;
 import com.sckw.core.utils.*;
-import lombok.RequiredArgsConstructor;
-import org.springframework.cloud.stream.function.StreamBridge;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.order.api.model.ContractSignCompletedParam;
+import com.sckw.stream.enums.MessageEnum;
+import com.sckw.stream.model.SckwMessage;
+import com.sckw.stream.model.UserInfo;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
-import com.sckw.transport.api.dubbo.TransportService;
+import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.model.param.ContractSignLogisticsParam;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.stream.function.StreamBridge;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import com.sckw.stream.enums.MessageEnum;
-import com.sckw.stream.model.SckwMessage;
-import com.sckw.stream.model.UserInfo;
-import java.io.*;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.util.*;
@@ -61,7 +65,7 @@ public class CommonBusinessService {
     private TradeOrderInfoService tradeOrderInfoService;
 
     @DubboReference(version = "1.0.0", group = "design", check = false)
-    private TransportService transportDubboService;
+    private TransportRemoteService transportRemoteService;
 
     @Autowired
     private KwcContractTradeMapper kwcContractTradeMapper;
@@ -250,7 +254,7 @@ public class CommonBusinessService {
         contractSignLogisticsParam.setContractId(contractId);
         contractSignLogisticsParam.setUpdateBy(userId);
         contractSignLogisticsParam.setUpdateByName(name);
-        transportDubboService.contractSignLogisticsCompleted(contractSignLogisticsParam);
+        transportRemoteService.contractSignLogisticsCompleted(contractSignLogisticsParam);
     }
 
 

+ 2 - 2
sckw-modules/sckw-example/src/main/java/com/sckw/example/service/TransportService.java

@@ -1,6 +1,6 @@
 package com.sckw.example.service;
 
-import com.sckw.transport.api.dubbo.TransportStatisticsService;
+import com.sckw.transport.api.dubbo.TransportRemoteStatisticsService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Value;
@@ -24,7 +24,7 @@ public class TransportService {
     private String refreshScope;
 
     @DubboReference(version = "1.0.0", group = "design", check = false)
-    private TransportStatisticsService statisticsService;
+    private TransportRemoteStatisticsService statisticsService;
 
     public Integer statisticsLogistics(Long topEntId) {
         return statisticsService.statisticsLogistics(topEntId,new ArrayList<>());

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

@@ -30,7 +30,7 @@ import com.sckw.system.api.RemoteUserService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
-import com.sckw.transport.api.dubbo.TransportService;
+import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.model.dto.RWaybillOrderDto;
 import com.sckw.transport.api.model.vo.RTruckMonitorVo;
 import com.sckw.transport.api.model.vo.RWaybillOrderVo;
@@ -75,7 +75,7 @@ public class KwfTruckService {
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
     private RemoteUserService remoteUserService;
     @DubboReference(version = "1.0.0", group = "design", check = false)
-    private TransportService transportDubboService;
+    private TransportRemoteService transportRemoteService;
 
     /**
      * @param key 主键id
@@ -819,7 +819,7 @@ public class KwfTruckService {
             //托运方
             bool = EntTypeEnum.check(entTypes);
             if (bool != null && bool) {
-                List<RTruckMonitorVo> checkTrucks = transportDubboService.truckInTask(LoginUserHolder.getEntId());
+                List<RTruckMonitorVo> checkTrucks = transportRemoteService.truckInTask(LoginUserHolder.getEntId());
                 checkTrucks.forEach(order -> trucks.add(new KwfTruckMonitorVo(order.getEntId(), order.getTruckNo(), Global.NUMERICAL_ONE)));
             }
 
@@ -1063,7 +1063,7 @@ public class KwfTruckService {
      **/
     public RWaybillOrderVo getWaybillOrder(String truckNo, int busStatus) {
         try {
-            List<RWaybillOrderVo> waybillOrders = transportDubboService.findWaybillOrder(new RWaybillOrderDto(truckNo, busStatus));
+            List<RWaybillOrderVo> waybillOrders = transportRemoteService.findWaybillOrder(new RWaybillOrderDto(truckNo, busStatus));
             if (CollectionUtils.isEmpty(waybillOrders)) {
                 return null;
             }

+ 30 - 2
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/dubbo/RemoteManageServiceImpl.java

@@ -1,19 +1,24 @@
 package com.sckw.manage.dubbo;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.enums.CooperateStatusEnum;
 import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.manage.api.RemoteManageService;
 import com.sckw.manage.api.model.dto.res.EntAddressResDto;
 import com.sckw.manage.api.model.dto.res.FindEntCooperateResVo;
+import com.sckw.manage.api.model.dto.res.LineFreightAddressRes;
 import com.sckw.manage.dao.KwmAddressMapper;
 import com.sckw.manage.dao.KwmCooperateMapper;
 import com.sckw.manage.dao.KwmCooperateTypeMapper;
+import com.sckw.manage.dao.KwmLineFreightRateMapper;
 import com.sckw.manage.model.entity.KwmAddress;
 import com.sckw.manage.model.entity.KwmCooperate;
 import com.sckw.manage.model.entity.KwmCooperateType;
+import com.sckw.manage.model.entity.KwmLineFreightRate;
 import com.sckw.manage.model.vo.req.FindCooperateByEntReqVo;
 import com.sckw.manage.model.vo.req.FindEntCooperateReqVo;
 import com.sckw.manage.model.vo.res.FindCooperateByEntResVo;
@@ -26,6 +31,7 @@ import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -48,6 +54,9 @@ public class RemoteManageServiceImpl implements RemoteManageService {
     @Autowired
     private KwmCooperateMapper kwmCooperateMapper;
 
+    @Autowired
+    private KwmLineFreightRateMapper lineFreightRateMapper;
+
     @Autowired
     private KwmCooperateTypeMapper kwmCooperateTypeMapper;
 
@@ -56,7 +65,7 @@ public class RemoteManageServiceImpl implements RemoteManageService {
 
     /**
      * @param idList 企业id集合
-     * @return Map<Long, List<EntAddressResDto>>
+     * @return Map<Long, List < EntAddressResDto>>
      * @desc: 根据企业id查下面的地址
      * @author: czh
      * @date: 2023/7/31
@@ -66,7 +75,7 @@ public class RemoteManageServiceImpl implements RemoteManageService {
         Map<Long, List<EntAddressResDto>> map = new HashMap<>(4);
         LambdaQueryWrapper<KwmAddress> kwmAddressLambdaQueryWrapper = new LambdaQueryWrapper<>();
         kwmAddressLambdaQueryWrapper.in(KwmAddress::getEntId, idList).
-                                     eq(KwmAddress::getDelFlag, Global.NO);
+                eq(KwmAddress::getDelFlag, Global.NO);
         List<KwmAddress> kwmAddressList = kwmAddressMapper.selectList(kwmAddressLambdaQueryWrapper);
         if (CollectionUtils.isEmpty(kwmAddressList)) {
             return map;
@@ -249,4 +258,23 @@ public class RemoteManageServiceImpl implements RemoteManageService {
         }
         return list;
     }
+
+    @Override
+    public Map<Long, LineFreightAddressRes> findLineFreightAddress(List<Long> lineFreightId) {
+        List<KwmLineFreightRate> list = lineFreightRateMapper.selectList(new LambdaQueryWrapper<KwmLineFreightRate>()
+                .in(KwmLineFreightRate::getId, lineFreightId).eq(KwmLineFreightRate::getDelFlag, 0));
+        Map<Long, LineFreightAddressRes> rateMap = new HashMap<>(NumberConstant.SIXTEEN);
+        List<LineFreightAddressRes> lineFre = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(list)) {
+            for (KwmLineFreightRate kwmLineFreightRate : list) {
+                LineFreightAddressRes lineFreightRate = new LineFreightAddressRes();
+                BeanUtil.copyProperties(kwmLineFreightRate, lineFreightRate);
+                lineFre.add(lineFreightRate);
+            }
+        }
+        if (!CollectionUtils.isEmpty(lineFre)) {
+            rateMap = lineFre.stream().collect(Collectors.toMap(LineFreightAddressRes::getId, Function.identity()));
+        }
+        return rateMap;
+    }
 }

+ 3 - 3
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmCooperateManageService.java

@@ -38,7 +38,7 @@ import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.FindEntUserResDto;
 import com.sckw.system.api.model.dto.res.KwsEnterpriseResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
-import com.sckw.transport.api.dubbo.TransportService;
+import com.sckw.transport.api.dubbo.TransportRemoteService;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -78,7 +78,7 @@ public class KwmCooperateManageService {
     private TradeOrderInfoService tradeOrderInfoService;
 
     @DubboReference(version = "1.0.0", group = "design", check = false)
-    private TransportService transportDubboService;
+    private TransportRemoteService transportRemoteService;
 
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private PaymentDubboService paymentDubboService;
@@ -297,7 +297,7 @@ public class KwmCooperateManageService {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.MSG_031);
         }
         //判断是否可以解除-托运和承运
-        HttpResult response = transportDubboService.checkLogisticsOrderIsFinishByEntId(kwmCooperate.getInviteeEntId(), kwmCooperate.getInviterEntId());
+        HttpResult response = transportRemoteService.checkLogisticsOrderIsFinishByEntId(kwmCooperate.getInviteeEntId(), kwmCooperate.getInviterEntId());
         int receivedResult = response.getCode();
         if (!Integer.toString(receivedResult).equals(String.valueOf(HttpStatus.SUCCESS_CODE))) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.MSG_032);

+ 15 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson2.JSON;
 import com.google.common.collect.Lists;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.NumberConstant;
+import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.response.HttpResult;
@@ -18,6 +19,7 @@ import com.sckw.order.model.KwoTradeOrder;
 import com.sckw.order.model.KwoTradeOrderContract;
 import com.sckw.order.model.KwoTradeOrderGoodsUnit;
 import com.sckw.order.model.KwoTradeOrderTrack;
+import com.sckw.order.model.vo.res.AddressInfoDetailRes;
 import com.sckw.order.serivce.*;
 import com.sckw.redis.constant.RedisConstant;
 import com.sckw.redis.utils.RedissonUtils;
@@ -47,6 +49,8 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
     @Autowired
     private KwoTradeOrderService kwoTradeOrderService;
     @Autowired
+    private KwoTradeOrderAddressService tradeOrderAddressService;
+    @Autowired
     private StreamBridge streamBridge;
     @Autowired
     private KwoTradeOrderTrackService kwoTradeOrderTrackService;
@@ -69,6 +73,17 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         return order;
     }
 
+    @Override
+    public OrderAddressDetailRes getOrderDetailByTradeOrderIdAndAddressId(Long tOrderId, Long tAddressId) {
+        //地址信息
+        AddressInfoDetailRes addressInfoDetailRes = tradeOrderAddressService.getByOrderIdAndAddressId(tOrderId, tAddressId);
+        OrderAddressDetailRes orderAddressDetailRes = new OrderAddressDetailRes();
+        if (addressInfoDetailRes != null) {
+            BeanUtils.copyProperties(addressInfoDetailRes, orderAddressDetailRes);
+        }
+        return orderAddressDetailRes;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateOrderStatus(UpdateOrderStatusParam param) {

+ 5 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/AddressInfoDetailRes.java

@@ -29,4 +29,9 @@ public class AddressInfoDetailRes extends AddressInfo implements Serializable {
      * 地址类型label
      */
     private String typeLabel;
+
+    /**
+     * 地址id
+     */
+    private Long id;
 }

+ 45 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderAddressService.java

@@ -2,16 +2,20 @@ package com.sckw.order.serivce;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.order.dao.KwoTradeOrderAddressMapper;
 import com.sckw.order.model.KwoTradeOrderAddress;
+import com.sckw.order.model.vo.res.AddressInfoDetailRes;
+import com.sckw.system.api.RemoteSystemService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Service;
 
-import java.util.Collection;
-import java.util.List;
+import java.util.*;
 
 /**
  * @desc: 交易订单装卸货地址信息service
@@ -23,6 +27,9 @@ import java.util.List;
 @RequiredArgsConstructor
 public class KwoTradeOrderAddressService {
 
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private RemoteSystemService remoteSystemService;
+
     private final KwoTradeOrderAddressMapper kwoTradeOrderAddressMapper;
 
     /**
@@ -64,6 +71,42 @@ public class KwoTradeOrderAddressService {
         return CollectionUtils.emptyIfNull(list);
     }
 
+    /**
+     * @desc: 根据orderId获取
+     * @author: yzc
+     * @date: 2023-07-18 11:24
+     * @Param torderId:
+     * @return: java.util.List<com.sckw.order.model.KwoTradeOrderAddress>
+     */
+    public AddressInfoDetailRes getByOrderIdAndAddressId(Long tOrderId, Long tAddressId) {
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(
+                List.of(DictTypeEnum.TRADE_TYPE.getType(), DictTypeEnum.PICKUP_TYPE.getType(),
+                        DictTypeEnum.DELIVERY_TYPE.getType(), DictTypeEnum.TORDER_SOURCE.getType(), DictTypeEnum.TORDER_STATUS.getType(),
+                        DictTypeEnum.PRODUCT_NAME_TYPE.getType(), DictTypeEnum.UNIT_TYPE.getType(), DictTypeEnum.TAX_RATE.getType(),
+                        DictTypeEnum.TORDER_UNIT_TYPE.getType(), DictTypeEnum.TORDER_ADDRESS_TYPE.getType(), DictTypeEnum.ADDRESS_TYPE.getType()));
+        Map<String, String> orderAddressMap, addressMap;
+        if (CollectionUtils.isNotEmpty(dict)) {
+            orderAddressMap = dict.get(DictTypeEnum.TORDER_ADDRESS_TYPE.getType());
+            addressMap = dict.get(DictTypeEnum.ADDRESS_TYPE.getType());
+        } else {
+            orderAddressMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            addressMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        }
+        LambdaQueryWrapper<KwoTradeOrderAddress> wrapper = new LambdaQueryWrapper<>();
+        if (tAddressId != null) {
+            wrapper.eq(KwoTradeOrderAddress::getId, tAddressId);
+        }
+        wrapper.eq(KwoTradeOrderAddress::getTOrderId, tOrderId).eq(KwoTradeOrderAddress::getDelFlag, Global.NO);
+        KwoTradeOrderAddress address = kwoTradeOrderAddressMapper.selectOne(wrapper);
+        AddressInfoDetailRes addressInfoDetailRes = new AddressInfoDetailRes();
+        if (address != null) {
+            BeanUtils.copyProperties(address, addressInfoDetailRes);
+            addressInfoDetailRes.setAddressTypeLabel(CollectionUtils.isNotEmpty(orderAddressMap) ? orderAddressMap.get(address.getAddressType()) : null);
+            addressInfoDetailRes.setTypeLabel(CollectionUtils.isNotEmpty(addressMap) ? addressMap.get(address.getType()) : null);
+        }
+        return addressInfoDetailRes;
+    }
+
     /**
      * @desc: 根据orderIds删除
      * @author: yzc

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

@@ -48,13 +48,14 @@ import com.sckw.stream.model.SckwMessage;
 import com.sckw.stream.model.UserInfo;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.*;
-import com.sckw.transport.api.dubbo.TransportService;
+import com.sckw.transport.api.dubbo.TransportRemoteService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.stream.function.StreamBridge;
 import org.springframework.stereotype.Service;
+
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.function.Function;
@@ -89,7 +90,7 @@ public class KwoTradeOrderService {
     private PaymentDubboService paymentDubboService;
 
     @DubboReference(version = "1.0.0", group = "design", check = false)
-    private TransportService transportDubboService;
+    private TransportRemoteService transportRemoteService;
 
     private final KwoTradeOrderMapper kwoTradeOrderMapper;
     private final StreamBridge streamBridge;
@@ -1174,7 +1175,7 @@ public class KwoTradeOrderService {
         if (kwoTradeOrderUnitService.entMatch(param.getId(), LoginUserHolder.getEntId(), OrderUnitTypeEnum.SALE.getType())) {
             throw new BusinessException("无订单操作权限!");
         }
-        if (transportDubboService.checkLogisticsOrderByTradeOrderId(tOrderId)) {
+        if (transportRemoteService.checkLogisticsOrderByTradeOrderId(tOrderId)) {
             throw new CustomPromptException(HttpStatus.COMPLETE_TORDER_FAIL_CODE, "订单存在未完成的物流托运,不可完结!");
         }
         String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, tOrderId);

+ 9 - 9
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsService.java

@@ -3,10 +3,10 @@ package com.sckw.payment.service;
 import com.alibaba.fastjson2.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
-import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.enums.OrderRuleEnum;
 import com.sckw.core.model.enums.RedisOrderGenerateEnum;
 import com.sckw.core.model.page.PageRes;
@@ -32,7 +32,7 @@ import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
-import com.sckw.transport.api.dubbo.TransportService;
+import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.model.dto.AccountCheckingBindDTO;
 import com.sckw.transport.api.model.dto.LogisticsOrderDTO;
 import io.seata.spring.annotation.GlobalTransactional;
@@ -72,7 +72,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private RemoteSystemService remoteSystemService;
     @DubboReference(version = "1.0.0", group = "design", check = false)
-    private TransportService transportDubboService;
+    private TransportRemoteService transportRemoteService;
 
     private void changeDict(List<? extends ILedger> list) {
         List<SysDictResDto> taxRateDict = remoteSystemService.queryDictByType(DictTypeEnum.TAX_RATE.getType());
@@ -285,7 +285,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         List<Long> ids = logisticsSendReq.getIdList();
         //验当前订单是否已存在绑定的对账单
         logisticsOrderService.check(ids);
-        List<LogisticsOrderDTO> acceptCarriageOrderDetail = transportDubboService.getAcceptCarriageOrderList(logisticsSendReq.getIdsList());
+        List<LogisticsOrderDTO> acceptCarriageOrderDetail = transportRemoteService.getAcceptCarriageOrderList(logisticsSendReq.getIdsList());
         if (CollectionUtils.isEmpty(acceptCarriageOrderDetail) || acceptCarriageOrderDetail.size() < ids.size()) {
             throw new BusinessException("未找到物流订单!");
         }
@@ -295,7 +295,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         accountCheckingBindDTO.setStatus("1");
         accountCheckingBindDTO.setUpdateBy(LoginUserHolder.getUserId());
         accountCheckingBindDTO.setUpdateName(LoginUserHolder.getUserName());
-        HttpResult httpResult = transportDubboService.logisticsOrderAccountCheckingBind(accountCheckingBindDTO);
+        HttpResult httpResult = transportRemoteService.logisticsOrderAccountCheckingBind(accountCheckingBindDTO);
         if (httpResult.getCode() != 60200) {
             throw new BusinessException(httpResult.getMsg());
         }
@@ -417,7 +417,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         accountCheckingBindDTO.setStatus("0");
         accountCheckingBindDTO.setUpdateBy(LoginUserHolder.getUserId());
         accountCheckingBindDTO.setUpdateName(LoginUserHolder.getUserName());
-        HttpResult httpResult = transportDubboService.logisticsOrderAccountCheckingBind(accountCheckingBindDTO);
+        HttpResult httpResult = transportRemoteService.logisticsOrderAccountCheckingBind(accountCheckingBindDTO);
         if (httpResult.getCode() != 60200) {
             throw new BusinessException(httpResult.getMsg());
         }
@@ -770,7 +770,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         ledgerLogisticsDetailVo.setRemark(ledgerLogisticsDto.getRemark());
         /*查询物流订单详情*/
         if (!CollectionUtils.isEmpty(kwpLedgerLogisticsOrders)) {
-            List<LogisticsOrderDTO> acceptCarriageOrderList = transportDubboService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> Long.toString(a.getLOrderId())).collect(Collectors.toList()));
+            List<LogisticsOrderDTO> acceptCarriageOrderList = transportRemoteService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> Long.toString(a.getLOrderId())).collect(Collectors.toList()));
             if (CollectionUtils.isEmpty(acceptCarriageOrderList)) {
                 ledgerLogisticsDetailVo.setOrderList(new ArrayList<>());
             } else {
@@ -787,7 +787,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
             return new PageRes<>();
         }
         PageInfo<KwpLedgerLogisticsOrder> pageInfo = new PageInfo<>(kwpLedgerLogisticsOrders);
-        List<LogisticsOrderDTO> acceptCarriageOrderList = transportDubboService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> String.valueOf(a.getLOrderId())).toList());
+        List<LogisticsOrderDTO> acceptCarriageOrderList = transportRemoteService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> String.valueOf(a.getLOrderId())).toList());
         return PageRes.build(pageInfo, acceptCarriageOrderList);
     }
 
@@ -797,7 +797,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         if (CollectionUtils.isEmpty(kwpLedgerLogisticsOrders)) {
             return new ArrayList<>();
         }
-        List<LogisticsOrderDTO> res = transportDubboService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> String.valueOf(a.getLOrderId())).toList());
+        List<LogisticsOrderDTO> res = transportRemoteService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> String.valueOf(a.getLOrderId())).toList());
         if (!CollectionUtils.isEmpty(res)) {
             return res.stream().filter(o -> StringUtils.contains(o.getLOrderNO(), ledgerListReq.getKeywords()) ||
                     StringUtils.contains(o.getGoodsName(), ledgerListReq.getKeywords())).toList();

+ 8 - 5
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementWalletService.java

@@ -3,10 +3,10 @@ package com.sckw.payment.service;
 import com.alibaba.fastjson2.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
-import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.model.page.PageRes;
 import com.sckw.core.utils.IdWorker;
@@ -20,7 +20,10 @@ import com.sckw.order.api.model.UpdateOrderStatusParam;
 import com.sckw.payment.api.model.constant.ChannelEnum;
 import com.sckw.payment.api.model.dto.WalletDto;
 import com.sckw.payment.api.model.dto.common.R;
-import com.sckw.payment.dao.*;
+import com.sckw.payment.dao.KwpLedgerLogisticsMapper;
+import com.sckw.payment.dao.KwpSettlementLogisticsMapper;
+import com.sckw.payment.dao.KwpSettlementLogisticsTrackMapper;
+import com.sckw.payment.dao.KwpSettlementWalletMapper;
 import com.sckw.payment.model.*;
 import com.sckw.payment.model.constant.*;
 import com.sckw.payment.model.dto.LedgerUnitDto;
@@ -38,7 +41,7 @@ import com.sckw.redis.constant.RedisConstant;
 import com.sckw.stream.enums.MessageEnum;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
-import com.sckw.transport.api.dubbo.TransportService;
+import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.model.param.LogisticsOrderParam;
 import io.seata.spring.annotation.GlobalTransactional;
 import jakarta.annotation.Resource;
@@ -87,7 +90,7 @@ public class KwpSettlementWalletService {
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private TradeOrderInfoService tradeOrderInfoService;
     @DubboReference(version = "1.0.0", group = "design", check = false)
-    private TransportService transportDubboService;
+    private TransportRemoteService transportRemoteService;
     private final KwpSettlementLogisticsTrackMapper kwpSettlementLogisticsTrackMapper;
     @Resource
     private KwpLedgerTradeService kwpLedgerTradeService;
@@ -279,7 +282,7 @@ public class KwpSettlementWalletService {
                         logisticsOrderParam.setStatus(LogisticsOrderEnum.HAVE_ALREADY_SETTLED.getStatus());
                         logisticsOrderParam.setUpdateBy(LoginUserHolder.getUserId());
                         logisticsOrderParam.setUpdateTime(new Date());
-                        HttpResult httpResult = transportDubboService.checkLogisticsOrderStatusById(logisticsOrderParam);
+                        HttpResult httpResult = transportRemoteService.checkLogisticsOrderStatusById(logisticsOrderParam);
                         if (httpResult.getCode() != HttpStatus.SUCCESS_CODE) {
                             log.error("更新物流订单状态异常:{}", JSONObject.toJSONString(logisticsOrderParam));
                             throw new BusinessException(httpResult.getMsg());

+ 4 - 4
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/operateService/LedgerLogisticsService.java

@@ -26,7 +26,7 @@ import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.RemoteUserService;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
-import com.sckw.transport.api.dubbo.TransportService;
+import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.model.dto.LogisticsOrderDTO;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
@@ -51,7 +51,7 @@ public class LedgerLogisticsService extends AbsLedger {
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private RemoteSystemService remoteSystemService;
     @DubboReference(version = "1.0.0", group = "design", check = false)
-    private TransportService transportDubboService;
+    private TransportRemoteService transportRemoteService;
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private RemoteUserService remoteUserService;
 
@@ -132,7 +132,7 @@ public class LedgerLogisticsService extends AbsLedger {
             return new PageRes<>();
         }
         PageInfo<KwpLedgerLogisticsOrder> pageInfo = new PageInfo<>(kwpLedgerLogisticsOrders);
-        List<LogisticsOrderDTO> acceptCarriageOrderList = transportDubboService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> String.valueOf(a.getLOrderId())).toList());
+        List<LogisticsOrderDTO> acceptCarriageOrderList = transportRemoteService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> String.valueOf(a.getLOrderId())).toList());
         return PageRes.build(pageInfo, acceptCarriageOrderList);
     }
 
@@ -231,7 +231,7 @@ public class LedgerLogisticsService extends AbsLedger {
         ledgerLogisticsDetailVo.setRemark(ledgerLogisticsDto.getRemark());
         /*查询物流订单详情*/
         if (!CollectionUtils.isEmpty(kwpLedgerLogisticsOrders)) {
-            List<LogisticsOrderDTO> acceptCarriageOrderList = transportDubboService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> Long.toString(a.getLOrderId())).collect(Collectors.toList()));
+            List<LogisticsOrderDTO> acceptCarriageOrderList = transportRemoteService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> Long.toString(a.getLOrderId())).collect(Collectors.toList()));
             if (CollectionUtils.isEmpty(acceptCarriageOrderList)) {
                 ledgerLogisticsDetailVo.setOrderList(new ArrayList<>());
             } else {

+ 2 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/operateService/SettlementWalletService.java

@@ -12,7 +12,7 @@ import com.sckw.payment.model.vo.req.SettlementWalletReq;
 import com.sckw.payment.model.vo.res.SettlementWalletVo;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
-import com.sckw.transport.api.dubbo.TransportService;
+import com.sckw.transport.api.dubbo.TransportRemoteService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -42,7 +42,7 @@ public class SettlementWalletService {
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private TradeOrderInfoService tradeOrderInfoService;
     @DubboReference(version = "1.0.0", group = "design", check = false)
-    private TransportService transportDubboService;
+    private TransportRemoteService transportRemoteService;
     private final KwpSettlementLogisticsTrackMapper kwpSettlementLogisticsTrackMapper;
 
 

+ 2 - 2
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwWorkService.java

@@ -13,7 +13,7 @@ import com.sckw.report.service.vo.QueryBusinessStatisticsResVo;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.RemoteUserService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
-import com.sckw.transport.api.dubbo.TransportStatisticsService;
+import com.sckw.transport.api.dubbo.TransportRemoteStatisticsService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Service;
@@ -30,7 +30,7 @@ import java.util.*;
 public class KwWorkService {
 
     @DubboReference(version = "1.0.0", group = "design", check = false,timeout = 80000)
-    private TransportStatisticsService transportStatisticsService;
+    private TransportRemoteStatisticsService transportStatisticsService;
 
     @DubboReference(version = "1.0.0", group = "design", check = false,timeout = 80000)
     private PaymentDubboService paymentDubboService;

+ 2 - 2
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsUserService.java

@@ -25,7 +25,7 @@ import com.sckw.system.model.report.KwsUserExcel;
 import com.sckw.system.model.vo.req.*;
 import com.sckw.system.model.vo.res.KwsUserResVo;
 import com.sckw.system.model.vo.res.KwsUserSystemTypeVo;
-import com.sckw.transport.api.dubbo.TransportStatisticsService;
+import com.sckw.transport.api.dubbo.TransportRemoteStatisticsService;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -80,7 +80,7 @@ public class KwsUserService {
     private CommonService commonService;
 
     @DubboReference(version = "1.0.0", group = "design", check = false)
-    private TransportStatisticsService transportStatisticsService;
+    private TransportRemoteStatisticsService transportStatisticsService;
 
     /**
      * @param reqVo 入参

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

@@ -13,7 +13,7 @@ import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.utils.ExcelUtil;
-import com.sckw.transport.model.dto.OrderFinishDTO;
+import com.sckw.transport.model.dto.LogisticsConsignmentDto;
 import com.sckw.transport.model.dto.OrderManualCompletionDto;
 import com.sckw.transport.model.param.LogisticsConsignmentParam;
 import com.sckw.transport.model.param.OrderQuery;
@@ -364,4 +364,24 @@ public class KwtLogisticsConsignmentController {
         ExcelUtil.downData(response, SellLogisticOrderExcelVo.class, list);
     }
 
+
+    /**
+     * 采购订单/销售订单-物流托运 V4.2
+     *
+     * @param logisticsConsignmentDto 页面请求参数
+     * @return  响应结果
+     */
+    @Validated
+    @RepeatSubmit(interval = 1000,message ="前方拥堵,请稍后尝试")
+    @RequestMapping(value = "/logisticsOrderConsignment", method = RequestMethod.POST)
+    public HttpResult logisticsOrderConsignment(@Valid @RequestBody LogisticsConsignmentDto logisticsConsignmentDto) {
+        log.info("采购订单传递参数信息:{}", JSONObject.toJSONString(logisticsConsignmentDto));
+        try {
+            return logisticsConsignmentService.logisticsOrderConsignment(logisticsConsignmentDto);
+        } catch (Exception e) {
+            log.error("采购订单-物流托运生成托运订单 error :{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
 }

+ 14 - 17
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java

@@ -2,16 +2,16 @@ package com.sckw.transport.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.mongo.model.TableTops;
-import com.sckw.transport.api.model.dto.AddressResDTO;
 import com.sckw.transport.api.model.dto.LogisticsOrderDTO;
 import com.sckw.transport.api.model.vo.LogisticsOrderVO;
 import com.sckw.transport.model.KwtLogisticsOrder;
+import com.sckw.transport.model.dto.LogisticsOrderDto;
 import com.sckw.transport.model.param.*;
 import com.sckw.transport.model.vo.*;
 import com.sckw.transport.model.vo.execlVo.AcceptCarriageOrderExcelVo;
-import com.sckw.transport.model.vo.AcceptCarriageOrderVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
@@ -20,9 +20,6 @@ import java.util.Map;
 @Mapper
 public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
 
-    @Override
-    int insert(KwtLogisticsOrder record);
-
 
     /**
      * 查询物流订单数据
@@ -50,8 +47,8 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      * @param type
      * @return
      */
-    List<com.sckw.transport.model.dto.LogisticsOrderDTO> selectOrderList(@Param("id") String id, @Param("page") int page,
-                                                                         @Param("pageSize") int pageSize, @Param("type") String type);
+    List<LogisticsOrderDto> selectOrderList(@Param("id") String id, @Param("page") int page,
+                                            @Param("pageSize") int pageSize, @Param("type") String type);
 
     /**
      * 销售订单-采购订单-托运详情
@@ -60,7 +57,7 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      * @param type
      * @return
      */
-    List<com.sckw.transport.model.dto.LogisticsOrderDTO> selectOrderListNotPage(@Param("id") String id, @Param("type") String type);
+    List<LogisticsOrderDto> selectOrderListNotPage(@Param("id") String id, @Param("type") String type);
 
     /**
      * 销售订单-采购订单-托运详情
@@ -69,7 +66,7 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      * @param type
      * @return
      */
-    List<com.sckw.transport.model.dto.LogisticsOrderDTO> selectOrderListNotPageByIds(@Param("ids") List<Long> ids, @Param("type") String type);
+    List<LogisticsOrderDto> selectOrderListNotPageByIds(@Param("ids") List<Long> ids, @Param("type") String type);
 
     List<SckwLogisticsOrderVO> selectOrderListByContractId(@Param("type") String type, @Param("entId") Long entId, @Param("contractIds") List<Long> contractIds);
 
@@ -80,7 +77,7 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      * @param type
      * @return
      */
-    List<com.sckw.transport.model.dto.LogisticsOrderDTO> selectOrderListByIdsAndUnitType(@Param("ids") List<String> ids, @Param("type") String type);
+    List<LogisticsOrderDto> selectOrderListByIdsAndUnitType(@Param("ids") List<String> ids, @Param("type") String type);
 
     /**
      * 销售订单-采购订单-托运列表-数据统计
@@ -88,7 +85,7 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      * @param id
      * @return
      */
-    List<com.sckw.transport.model.dto.LogisticsOrderDTO> selectOrderCountByTorderId(@Param("id") String id, @Param("type") String type);
+    List<LogisticsOrderDto> selectOrderCountByTorderId(@Param("id") String id, @Param("type") String type);
 
     /**
      * @param id   贸易订单id
@@ -178,11 +175,11 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      */
     List<Integer> getAddressList(@Param("entId") Long entId);
 
-    /**
-     * @param entId
-     * @return
-     */
-    List<AddressResDTO> getAddressDetailListByEntId(@Param("entId") Long entId);
+//    /**
+//     * @param entId
+//     * @return
+//     */
+//    List<AddressResDTO> getAddressDetailListByEntId(@Param("entId") Long entId);
 
     /**
      * @param id
@@ -409,7 +406,7 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
                                                                              @Param("typeTwo") String typeTwo
     );
 
-    List<com.sckw.transport.model.dto.LogisticsOrderDTO> selectOrderListByTradeOrderIds(@Param("tradeOrderIds") List<Long> tradeOrderIds, @Param("unitType") String unitType);
+    List<LogisticsOrderDto> selectOrderListByTradeOrderIds(@Param("tradeOrderIds") List<Long> tradeOrderIds, @Param("unitType") String unitType);
 
     /**
      * 承运订单数据查询

+ 19 - 19
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java

@@ -28,7 +28,7 @@ import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
-import com.sckw.transport.api.dubbo.TransportService;
+import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.model.dto.AccountCheckingBindDTO;
 import com.sckw.transport.api.model.dto.AddressResDTO;
 import com.sckw.transport.api.model.dto.LogisticsOrderDTO;
@@ -65,7 +65,7 @@ import java.util.stream.Collectors;
 @Slf4j
 @Service
 @DubboService(group = "design", version = "1.0.0", timeout = 50000)
-public class TransportServiceImpl implements TransportService {
+public class TransportServiceImpl implements TransportRemoteService {
 
     @Autowired
     public KwtCommonService commonService;
@@ -405,23 +405,23 @@ public class TransportServiceImpl implements TransportService {
         return HttpResult.ok();
     }
 
-    /**
-     * 根据企业id 获取物流订单相关地址信息
-     *
-     * @param entIds 企业id集合
-     * @return
-     */
-    @Override
-    public Map<Long, List<AddressResDTO>> getLogisticsOrderAddressListByEntId(List<Long> entIds) {
-        Map<Long, List<AddressResDTO>> map = new HashMap<>(entIds.size());
-        for (Long entId : entIds) {
-            List<AddressResDTO> list = logisticsOrderMapper.getAddressDetailListByEntId(entId);
-            if (Objects.nonNull(list)) {
-                map.put(entId, list);
-            }
-        }
-        return map;
-    }
+//    /**
+//     * 根据企业id 获取物流订单相关地址信息
+//     *
+//     * @param entIds 企业id集合
+//     * @return
+//     */
+//    @Override
+//    public Map<Long, List<AddressResDTO>> getLogisticsOrderAddressListByEntId(List<Long> entIds) {
+//        Map<Long, List<AddressResDTO>> map = new HashMap<>(entIds.size());
+//        for (Long entId : entIds) {
+//            List<AddressResDTO> list = logisticsOrderMapper.getAddressDetailListByEntId(entId);
+//            if (Objects.nonNull(list)) {
+//                map.put(entId, list);
+//            }
+//        }
+//        return map;
+//    }
 
     /**
      * 运费对账是否进行对账绑定数据

+ 2 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportStatisticsServiceImpl.java

@@ -3,7 +3,7 @@ package com.sckw.transport.dubbo;
 import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
-import com.sckw.transport.api.dubbo.TransportStatisticsService;
+import com.sckw.transport.api.dubbo.TransportRemoteStatisticsService;
 import com.sckw.transport.dao.KwtLogisticsOrderMapper;
 import com.sckw.transport.dao.KwtWaybillOrderMapper;
 import lombok.extern.slf4j.Slf4j;
@@ -24,7 +24,7 @@ import java.util.stream.Collectors;
 @Slf4j
 @Service
 @DubboService(group = "design", version = "1.0.0")
-public class TransportStatisticsServiceImpl implements TransportStatisticsService {
+public class TransportStatisticsServiceImpl implements TransportRemoteStatisticsService {
 
     @Autowired
     KwtWaybillOrderMapper waybillOrderMapper;

+ 13 - 11
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderAmount.java

@@ -3,7 +3,9 @@ package com.sckw.transport.model;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.sckw.core.model.base.BaseModel;
 import lombok.Data;
-import java.util.Date;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 
 /**
  * @author zk
@@ -27,50 +29,50 @@ public class KwtLogisticsOrderAmount extends BaseModel {
     /**
      * 货物数量
      */
-    private Double amount;
+    private BigDecimal amount;
 
     /**
      * 分包量(给下游承运商分包的量)
      */
-    private Double subcontractAmount;
+    private BigDecimal subcontractAmount;
 
     /**
      * 已委托量(自己承运,给下游司机分配的量)
      */
-    private Double entrustAmount;
+    private BigDecimal entrustAmount;
 
     /**
      * 装货量(自己承运总装货量)
      */
-    private Double loadAmount;
+    private BigDecimal loadAmount;
 
     /**
      * 卸货量(自己承运总卸货量)
      */
-    private Double unloadAmount;
+    private BigDecimal unloadAmount;
 
     /**
      * 忽略剩余量
      */
-    private Double ignoreAmount;
+    private BigDecimal ignoreAmount;
 
     /**
      * 实际开始时间(装货)
      */
-    private Date loadTime;
+    private LocalDateTime loadTime;
 
     /**
      * 实际结束时间(卸货)
      */
-    private Date unloadTime;
+    private LocalDateTime unloadTime;
 
     /**
      * 装货-履约量(自己下游承运总装货量)
      */
-    private Double totalLoadAmount;
+    private BigDecimal totalLoadAmount;
 
     /**
      * 卸货-履约量(自己下游承运总卸货量)
      */
-    private Double totalUnloadAmount;
+    private BigDecimal totalUnloadAmount;
 }

+ 5 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderLineFreightRate.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.sckw.core.model.base.BaseModel;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 /**
  * @author zk
  * @desc 物流订单-线路运价信息
@@ -86,15 +88,15 @@ public class KwtLogisticsOrderLineFreightRate extends BaseModel {
     /**
      * 运输里程
      */
-    private Double transportMileage;
+    private BigDecimal transportMileage;
 
     /**
      * 运输单价(元/公里)
      */
-    private Double transportPrice;
+    private BigDecimal transportPrice;
 
     /**
      * 结算货物数量
      */
-    private Double settlementAmount;
+    private BigDecimal settlementAmount;
 }

+ 47 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/AddressInfoDto.java

@@ -0,0 +1,47 @@
+package com.sckw.transport.model.dto;
+
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.Digits;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author lfdc
+ * @description 地址信息-v4.2
+ * @date 2024-03-01 17:03:13
+ */
+@Setter
+@Getter
+//@AllArgsConstructor
+public class AddressInfoDto implements Serializable {
+
+    /**
+     * 地址id
+     */
+    @NotBlank(message = "地址id不能为空")
+    private String addressId;
+
+    /**
+     * 地址类型(1装货地址、2卸货地址)
+     */
+    @NotNull(message = "地址类型(1装货地址、2卸货地址)不能为空")
+    private Integer addressType;
+
+    /**
+     * 顺序序号
+     */
+    @NotNull(message = "顺序序号不能为空")
+    private Integer sort;
+
+    /**
+     * 分配量
+     */
+    @Digits(integer = 10,fraction = 2,message = "分配量格式不正确")
+    @DecimalMin(value = "0.00",message = "分配量不能小于{value}")
+    private BigDecimal amount;
+}

+ 26 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/ContractDto.java

@@ -0,0 +1,26 @@
+package com.sckw.transport.model.dto;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @author lfdc
+ * @description 合同信息dto-v4.2
+ * @date 2024-03-01 17:03:06
+ */
+@Setter
+@Getter
+@AllArgsConstructor
+public class ContractDto implements Serializable {
+
+    /**
+     * 合同id
+     */
+    @NotNull(message = "合同id不能为空")
+    private Long contractId;
+
+}

+ 27 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LineFreightDto.java

@@ -0,0 +1,27 @@
+package com.sckw.transport.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author lfdc
+ * @description 线路分配v4.2
+ * @date 2024-03-04 11:03:04
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class LineFreightDto implements Serializable {
+    /**
+     * 线路id
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long lineFreightId;
+}

+ 470 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsConsignmentDto.java

@@ -0,0 +1,470 @@
+package com.sckw.transport.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.sckw.transport.model.param.GoodsUnitParam;
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.Digits;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author lfdc
+ * @description LogisticsConsignmentDto-V4.2
+ * @date 2023-07-06 14:07:50
+ */
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class LogisticsConsignmentDto implements Serializable {
+
+    /**
+     * 单据类型
+     */
+    @NotBlank(message = "单据类型不能为空")
+    private String type;
+
+    /**
+     * 贸易订单id
+     */
+    @NotBlank(message = "贸易订单id不能为空")
+    @com.fasterxml.jackson.annotation.JsonProperty("tOrderId")
+    private String tOrderId;
+
+    /**
+     * 商品ID
+     */
+    private Long goodsId;
+
+    /**
+     * goodsName
+     */
+    private String goodsName;
+
+    /**
+     * skuId
+     */
+    private String skuId;
+
+    /**
+     * 贸易订单编号
+     */
+    @NotBlank(message = "贸易订单编号不能为空")
+    @JsonProperty("tOrderNo")
+    private String tOrderNo;
+
+    /**
+     * 结算周期
+     */
+    @NotBlank(message = "结算周期不能为空")
+    private String settlementCycle;
+
+    /**
+     * 税率
+     */
+    private BigDecimal taxRate;
+
+    /**
+     * 付款方式
+     */
+    @NotBlank(message = "付款方式不能为空")
+    private String payment;
+
+    /**
+     * 分配单位
+     */
+    @NotBlank(message = "分配单位不能为空")
+    private String carryingCapacityUnit;
+
+    /**
+     * 扣亏损值
+     */
+    private BigDecimal goodsPrice;
+
+    /**
+     * 扣亏损值单位
+     */
+    @NotBlank(message = "扣亏损值单位不能为空")
+    private String goodsPriceUnit;
+
+    /**
+     * 合理损耗
+     */
+    private BigDecimal loss;
+
+    /**
+     * 合理损耗单位
+     */
+    @NotBlank(message = "合理损耗单位不能为空")
+    private String lossUnit;
+
+    /**
+     * 计费方式
+     */
+    @NotBlank(message = "计费方式不能为空")
+    private String billingMode;
+
+    /**
+     * 是否全量
+     */
+    private Boolean isFullDose;
+
+    /**
+     * 运价
+     */
+    @Digits(integer = 10, fraction = 2, message = "运价格式不正确")
+    @DecimalMin(value = "0.00", message = "运价不能小于{value}")
+    private BigDecimal price;
+
+    /**
+     * 运价方式
+     */
+    @NotBlank(message = "运价方式不能为空")
+    private String priceType;
+
+    /**
+     * 订单总量
+     */
+    @Digits(integer = 10, fraction = 2, message = "订单总量格式不正确")
+    @DecimalMin(value = "0.00", message = "订单总量不能小于{value}")
+    private BigDecimal amount;
+
+    /**
+     * 开始时间
+     */
+    @NotNull(message = "开始时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime startTime;
+
+    /**
+     * 结束日期(yyyy-MM-dd)
+     */
+    @NotNull(message = "结束时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime endTime;
+
+    /**
+     * 备注信息
+     */
+    private String remark;
+
+    /**
+     * 托运单位
+     */
+    @NotNull(message = "托运单位名称不能为空")
+    private String checkCompany;
+    /**
+     * 托运单位id
+     */
+    @NotNull(message = "托运单位id不能为空")
+    private String checkCompanyId;
+
+    /**
+     * 联系电话
+     */
+    @NotNull(message = "托运联系电话不能为空")
+    private String checkContactPhone;
+    /**
+     * 联系人
+     */
+    @NotNull(message = "托运联系人不能为空")
+    private String checkContacts;
+    /**
+     * 托运联系人id
+     */
+    @NotNull(message = "托运联系人不能为空")
+    private String checkContactsId;
+
+    /**
+     * 承运单位
+     */
+    @NotBlank(message = "承运单位不能为空")
+    private String consignCompany;
+
+    /**
+     * 承运单位ID
+     */
+    @NotBlank(message = "承运单位ID不能为空")
+    private String consignCompanyId;
+
+    /**
+     * 联系电话
+     */
+    @NotNull(message = "承运联系电话不能为空")
+    private String consignContactPhone;
+    /**
+     * 联系人
+     */
+    @NotNull(message = "承运联系人不能为空")
+    private String consignContacts;
+
+    /**
+     * 承运联系人id
+     */
+    @NotNull(message = "承运联系人id不能为空")
+    private String consignContactsId;
+
+
+    /**
+     * 合同信息
+     */
+    @NotNull(message = "合同信息不能为空")
+    private List<ContractDto> contractInfo;
+
+    /**
+     * 地址信息
+     */
+    @NotNull(message = "地址信息不能为空")
+    @JsonProperty("addressInfo")
+    private List<AddressInfoDto> addressInfo;
+
+    /**
+     * 辅助单位
+     */
+    @JsonProperty("assistUnit")
+    private List<GoodsUnitParam> assistUnit;
+
+    /**
+     * 线路分配
+     */
+    @JsonProperty("lineFreightList")
+    private List<LineFreightDto> lineFreightList;
+
+
+//
+//    /**
+//     *总量
+//     */
+//    @Digits(integer = 10,fraction = 2,message = "总量格式不正确")
+//    @DecimalMin(value = "0.00",message = "分配总量量不能小于{value}")
+//    private BigDecimal amount;
+//    /**
+//     * 分配承运量
+//     */
+//    @Digits(integer = 10,fraction = 2,message = "分配承运量格式不正确")
+//    @DecimalMin(value = "0.00",message = "分配承运量不能小于{value}")
+//    private BigDecimal carryingCapacity;
+//    /**
+//     * 分配承运量使用的单位(吨、方、箱、件))
+//     */
+//    @NotNull(message = "分配承运量单位不能为空")
+//    private String carryingCapacityUnit;
+//
+//    /**
+//     * 托运单位
+//     */
+//    @NotNull(message = "托运单位名称不能为空")
+//    private String checkCompany;
+//    /**
+//     * 托运单位id
+//     */
+//    @NotNull(message = "托运单位id不能为空")
+//    private String checkCompanyId;
+//
+//    /**
+//     * 联系电话
+//     */
+//    @NotNull(message = "托运联系电话不能为空")
+//    private String checkContactPhone;
+//    /**
+//     * 联系人
+//     */
+//    @NotNull(message = "托运联系人不能为空")
+//    private String checkContacts;
+//    /**
+//     * 托运联系人id
+//     */
+//    @NotNull(message = "托运联系人不能为空")
+//    private String checkContactsId;
+//
+//    /**
+//     * 合理损耗
+//     */
+////    @NotNull(message = "合理损耗不能为空")
+////    @DecimalMin(value = "0.00",message = "必须为大于0的正整数")
+//    @Digits(integer = 5, fraction = 2, message = "合理损耗超长")
+//    private BigDecimal loss;
+//    /**
+//     * 合理损耗单位
+//     */
+//    private String lossUnit;
+//
+//    /**
+//     * 商品价值(扣亏货值)
+//     */
+////    @NotNull(message = "扣亏货值不能为空")
+////    @DecimalMin(value = "0.00",message = "必须为大于0的正整数")
+//    private BigDecimal goodsPrice;
+//    /**
+//     * 商品价值(扣亏货值)单位
+//     */
+//    private String goodsPriceUnit;
+//    /**
+//     * 承运单位
+//     */
+//    @NotBlank(message = "承运单位不能为空")
+//    private String consignCompany;
+//
+//    /**
+//     * 承运单位ID
+//     */
+//    @NotBlank(message = "承运单位ID不能为空")
+//    private String consignCompanyId;
+//
+//    /**
+//     * 联系电话
+//     */
+//    @NotNull(message = "承运联系电话不能为空")
+//    private String consignContactPhone;
+//    /**
+//     * 联系人
+//     */
+//    @NotNull(message = "承运联系人不能为空")
+//    private String consignContacts;
+//
+//    /**
+//     * 承运联系人id
+//     */
+//    @NotNull(message = "承运联系人id不能为空")
+//    private String consignContactsId;
+//
+//    /**
+//     * 结算周期(周结、月结、季结)
+//     */
+////    @NotNull(message = "结算周期不能为空")
+//    @Digits(integer = 5, fraction = 0, message = "合理损耗超长")
+//    private Long settlementCycle;
+//
+//    /**
+//     * 合同id
+//     */
+//    @NotNull(message = "合同id不能为空")
+//    private String contractId;
+//    /**
+//     * 合同编号
+//     */
+//    @NotNull(message = "合同编号不能为空")
+//    private String contractNo;
+//
+//    /**
+//     * 合同名称
+//     */
+//    @NotNull(message = "合同名称不能为空")
+//    private String contractName;
+//
+//    /**
+//     * 支付方式
+//     */
+//    @NotNull(message = "支付方式不能为空")
+//    private String payment;
+//
+//    /**
+//     * 签约方式
+//     */
+//    @NotNull(message = "签约方式不能为空")
+//    private String signingWay;
+//
+//    /**
+//     * 货物名称
+//     */
+//    @NotNull(message = "货物名称不能为空")
+//    private String goodsName;
+//
+//    /**
+//     * 货物id
+//     */
+//    @NotNull(message = "货物id不能为空")
+//    private String goodsId;
+//
+//    /**
+//     * skuId
+//     */
+//    private String skuId;
+//    /**
+//     * 是否全量
+//     */
+//    @NotNull(message = "是否全量不能为空")
+//    private Boolean isFullDose;
+//    /**
+//     * 订单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;
+//    /**
+//     * 运价
+//     */
+//    @NotNull(message = "运价不能为空")
+//    @DecimalMin(value = "0.00",message = "运价必须为大于0的正整数")
+//    @Digits(integer = 6,fraction = 2,message = "运价格式填写错误")
+//    private BigDecimal price;
+//    /**
+//     * 运价方式
+//     */
+//    @NotNull(message = "运价方式不能为空")
+//    private String priceType;
+//    /**
+//     * 计划卸货时间
+//     */
+//    @NotNull(message = "计划卸货时间不能为空")
+//    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+////    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+//    private LocalDate receiveGoodsDateTime;
+//    /**
+//     * 计划发货时间
+//     */
+//    @NotNull(message = "计划发货时间不能为空")
+//    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+////    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+//    private LocalDate shipmentsDateTime;
+//    /**
+//     * 税率
+//     */
+//    @NotNull(message = "税率不能为空")
+//    private Long taxRate;
+////    /**
+////     * 税率类型
+////     */
+////    @NotNull(message = "税率类型不能为空")
+////    private String taxRateType;
+//    /**
+//     * 备注
+//     */
+//    @Length(max = 100,message = "单据编号长度错误最大长度:{max}")
+//    private String remark;
+//    /**
+//     * 计费方式
+//     */
+//    @NotNull(message = "计费方式不能为空")
+//    private String billingMode;
+
+
+}

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderDTO.java → sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/LogisticsOrderDto.java

@@ -11,7 +11,7 @@ import java.math.BigDecimal;
  * @date 2023-07-17 16:07:10
  */
 @Data
-public class LogisticsOrderDTO {
+public class LogisticsOrderDto {
 
     /**
      * 物流订单id

+ 56 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/UnitInfoDto.java

@@ -0,0 +1,56 @@
+package com.sckw.transport.model.dto;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @author lfdc
+ * @description 单位信息-v4.2
+ * @date 2024-03-01 17:03:17
+ */
+@Setter
+@Getter
+@AllArgsConstructor
+public class UnitInfoDto implements Serializable {
+
+    /**
+     * 单位类型(1采购单位、2销售单位)
+     */
+    @NotNull(message = "单位类型(1采购单位、2销售单位)不能为空")
+    private Integer unitType;
+
+    /**
+     * 企业id
+     */
+    @NotNull(message = "企业id不能为空")
+    private Long entId;
+
+    /**
+     * 企业名称
+     */
+    @NotBlank(message = "企业名称不能为空")
+    private String firmName;
+
+    /**
+     * 联系人id
+     */
+    @NotNull(message = "联系人id不能为空")
+    private Long contactsId;
+
+    /**
+     * 联系人姓名
+     */
+    @NotBlank(message = "联系人姓名不能为空")
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    @NotBlank(message = "联系电话不能为空")
+    private String phone;
+}

+ 94 - 39
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -43,15 +43,12 @@ import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.transport.common.config.MessageUrlConfig;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
-import com.sckw.transport.model.dto.LogisticsOrderDTO;
-import com.sckw.transport.model.dto.OrderCarDTO;
-import com.sckw.transport.model.dto.OrderFinishDTO;
+import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.param.LogisticsConsignmentParam;
 import com.sckw.transport.model.vo.OrderFinishVO;
 import com.sckw.transport.model.vo.PurchaseLogisticOrderExcelVo;
 import com.sckw.transport.model.vo.SellLogisticOrderExcelVo;
 import com.sckw.transport.model.vo.WaybillCountVo;
-import io.seata.core.context.RootContext;
 import io.seata.spring.annotation.GlobalTransactional;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
@@ -113,6 +110,9 @@ public class KwtLogisticsConsignmentService {
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
     RemoteContractService contractService;
 
+    @Autowired
+    public KwtLogisticsOrderConsignmentService logisticsOrderConsignmentService;
+
     @Autowired
     public KwtLogisticsOrderGoodsMapper kwtLogisticsOrderGoodsMapper;
 
@@ -137,8 +137,8 @@ public class KwtLogisticsConsignmentService {
     /**
      * 采购订单-物流托运生成托运订单
      *
-     * @param bo    请求参数
-     * @return  响应数据
+     * @param bo 请求参数
+     * @return 响应数据
      */
     @Transactional(rollbackFor = Exception.class)
     public HttpResult logisticsConsignment(LogisticsConsignmentParam bo, int orderType) {
@@ -165,6 +165,7 @@ public class KwtLogisticsConsignmentService {
 
     /**
      * 参数校验
+     *
      * @param bo 订单参数
      * @return 校验结果
      */
@@ -183,8 +184,29 @@ public class KwtLogisticsConsignmentService {
     }
 
     /**
-     * 创建物流订单
+     * 参数校验
+     *
      * @param bo 订单参数
+     * @return 校验结果
+     */
+    private HttpResult checkParamData(LogisticsConsignmentDto bo) {
+        if (!ObjectUtils.isEmpty(bo.getLoss())) {
+            if (bo.getLoss().compareTo(NumberConstant.ZERO_TWO) < 0) {
+                return HttpResult.error("合理损耗填写时,必须大于0");
+            }
+        }
+        if (!ObjectUtils.isEmpty(bo.getGoodsPrice())) {
+            if (bo.getGoodsPrice().compareTo(NumberConstant.ZERO_TWO) < 0) {
+                return HttpResult.error("扣亏货值填写时,必须大于0");
+            }
+        }
+        return HttpResult.ok();
+    }
+
+    /**
+     * 创建物流订单
+     *
+     * @param bo        订单参数
      * @param orderType 类型
      */
     void logisticsConsignmentInsert(LogisticsConsignmentParam bo, int orderType) {
@@ -263,7 +285,7 @@ public class KwtLogisticsConsignmentService {
         //HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrder(param);*/
         List<GoodsLoadingParam> goodsLoading = logisticsOrderGoodsService.goodsLoadingParams(order, false);
 //        HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(order.getTOrderId(), goodsLoading);
-        HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(LoginUserHolder.getUserId(),LoginUserHolder.getUserName(),order.getTOrderId(), goodsLoading);
+        HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(LoginUserHolder.getUserId(), LoginUserHolder.getUserName(), order.getTOrderId(), goodsLoading);
         if (httpResult.getCode() != HttpStatus.SUCCESS_CODE) {
             log.info("{}生成物流托运失败!,返回信息:{}", tradeOrder.getTOrderNo(), JSONObject.toJSONString(httpResult));
             throw new BusinessException("{" + tradeOrder.getTOrderNo() + "}生成物流托运失败!" + httpResult.getMsg());
@@ -324,13 +346,14 @@ public class KwtLogisticsConsignmentService {
             type = "1";
         }
         //发送消息
-        commonService.newSendLogisticsOrderToMessage( checkUnit, carriageUnit, lOrderNo, LoginUserHolder.getUserId(),
+        commonService.newSendLogisticsOrderToMessage(checkUnit, carriageUnit, lOrderNo, LoginUserHolder.getUserId(),
                 LoginUserHolder.getEntId(), pcConsignUrl, appConsignUrl, pcCarriageUrl, appCarriageUrl,
                 consignMessageEnum, carriageMessageEnum, type);
     }
 
     /**
      * 组装数据发送至mongoDb
+     *
      * @param lOrderNo    物流订单编号
      * @param orderId     物流订单id
      * @param bo          页面请求数据
@@ -505,8 +528,8 @@ public class KwtLogisticsConsignmentService {
     /**
      * 物流订单-状态
      *
-     * @param bo 请求数据
-     * @param orderId   订单状态
+     * @param bo      请求数据
+     * @param orderId 订单状态
      */
     private void insertLogisticsOrderTrack(LogisticsConsignmentParam bo, Long orderId, Integer orderStatus) {
         KwtLogisticsOrderTrack entity = new KwtLogisticsOrderTrack();
@@ -605,7 +628,7 @@ public class KwtLogisticsConsignmentService {
     /**
      * 物流订单-装卸货地址
      *
-     * @param bo    请求数据
+     * @param bo      请求数据
      * @param orderId 订单id
      */
     private void insertLogisticsOrderAddress(LogisticsConsignmentParam bo, Long orderId) {
@@ -683,7 +706,7 @@ public class KwtLogisticsConsignmentService {
     public HttpResult purchaseLogisticsOrder(String id, Integer page, Integer pageSize, String type) {
         Long count = getLogisticsOrderCount(id, type);
         Integer newPage = (page - 1) * pageSize;
-        List<LogisticsOrderDTO> list = getLogisticsOrderData(id, newPage, pageSize, type);
+        List<LogisticsOrderDto> list = getLogisticsOrderData(id, newPage, pageSize, type);
         PageResult build = PageResult.build(page, pageSize, count, list);
         return HttpResult.ok(build);
     }
@@ -729,7 +752,7 @@ public class KwtLogisticsConsignmentService {
         if (CollectionUtils.isEmpty(stringList)) {
             return HttpResult.ok();
         }
-        List<LogisticsOrderDTO> returnList = new ArrayList<>();
+        List<LogisticsOrderDto> returnList = new ArrayList<>();
         stringList = stringList.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
         /**后期分页优化,可以使用此方法*/
 //        PageRes<LogisticsOrderDTO> logisticsOrderListByTradeOrderIds = getLogisticsOrderListByTradeOrderIds(stringList, page, pageSize, type);
@@ -750,7 +773,7 @@ public class KwtLogisticsConsignmentService {
             if (String.valueOf(NumberConstant.ZERO).equals(orderDetailRes.getPickupType())) {
                 flag = true;
             }
-            List<LogisticsOrderDTO> list = new ArrayList<>();
+            List<LogisticsOrderDto> list = new ArrayList<>();
             if (flag) {
                 /**数据展示*/
                 list = kwtLogisticsOrderMapper.selectOrderListNotPage(id, type);
@@ -761,7 +784,7 @@ public class KwtLogisticsConsignmentService {
                 /**合理损耗*/
                 Map<String, String> taxRateTypeDictData = commonService.getDictData(DictTypeEnum.TAX_RATE_TYPE.getType());
                 if (CollectionUtils.isNotEmpty(list)) {
-                    for (LogisticsOrderDTO logisticsOrderDTO : list) {
+                    for (LogisticsOrderDto logisticsOrderDTO : list) {
                         logisticsOrderDTO.setStatusLabel(LogisticsOrderEnum.getDestination(logisticsOrderDTO.getStatus()));
                         String createName = StringUtils.isBlank(logisticsOrderDTO.getCreateBy()) ? null :
                                 (remoteSystemService.queryUserCacheById(Long.parseLong(logisticsOrderDTO.getCreateBy())) == null ? null :
@@ -777,7 +800,7 @@ public class KwtLogisticsConsignmentService {
             }
         }
         /**基于多个传递数据查询->手动分页*/
-        List<LogisticsOrderDTO> subList = new ArrayList<>();
+        List<LogisticsOrderDto> subList = new ArrayList<>();
         if (CollectionUtils.isNotEmpty(returnList)) {
             subList = returnList.stream().skip((page - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
         }
@@ -795,7 +818,7 @@ public class KwtLogisticsConsignmentService {
      * @param type       数据类型 1 采购2销售
      * @return
      */
-    public PageRes<LogisticsOrderDTO> getLogisticsOrderListByTradeOrderIds(List<String> stringList, Integer page, Integer pageSize, String type) {
+    public PageRes<LogisticsOrderDto> getLogisticsOrderListByTradeOrderIds(List<String> stringList, Integer page, Integer pageSize, String type) {
         PageHelper.startPage(page, pageSize);
         List<Long> returnIds = new ArrayList<>();
         for (String id : stringList) {
@@ -817,10 +840,10 @@ public class KwtLogisticsConsignmentService {
                 returnIds.add(Long.parseLong(id));
             }
         }
-        List<LogisticsOrderDTO> orderDTOList = kwtLogisticsOrderMapper.selectOrderListNotPageByIds(returnIds, type);
-        PageInfo<LogisticsOrderDTO> info = new PageInfo<>(orderDTOList);
+        List<LogisticsOrderDto> orderDTOList = kwtLogisticsOrderMapper.selectOrderListNotPageByIds(returnIds, type);
+        PageInfo<LogisticsOrderDto> info = new PageInfo<>(orderDTOList);
         if (CollectionUtils.isEmpty(orderDTOList)) {
-            PageRes<LogisticsOrderDTO> pageRes = new PageRes<>();
+            PageRes<LogisticsOrderDto> pageRes = new PageRes<>();
             pageRes.setPage(page);
             pageRes.setPageSize(pageSize);
             return pageRes;
@@ -831,7 +854,7 @@ public class KwtLogisticsConsignmentService {
         Map<String, String> priceDictData = commonService.getDictData(DictTypeEnum.PRICE_TYPE.getType());
         /**合理损耗*/
         Map<String, String> taxRateTypeDictData = commonService.getDictData(DictTypeEnum.TAX_RATE_TYPE.getType());
-        for (LogisticsOrderDTO logisticsOrderDTO : orderDTOList) {
+        for (LogisticsOrderDto logisticsOrderDTO : orderDTOList) {
             logisticsOrderDTO.setStatusLabel(LogisticsOrderEnum.getDestination(logisticsOrderDTO.getStatus()));
             String createName = StringUtils.isBlank(logisticsOrderDTO.getCreateBy()) ? null :
                     (remoteSystemService.queryUserCacheById(Long.parseLong(logisticsOrderDTO.getCreateBy())) == null ? null :
@@ -867,7 +890,7 @@ public class KwtLogisticsConsignmentService {
             throw new RuntimeException("获取贸易订单下单方式异常!");
         }
         BigDecimal resAmount = orderDetailRes.getAmount();
-        List<LogisticsOrderDTO> list = new ArrayList<>();
+        List<LogisticsOrderDto> list = new ArrayList<>();
         JSONObject jsonObject = new JSONObject();
         //总数
         Long count = 0L;
@@ -879,7 +902,7 @@ public class KwtLogisticsConsignmentService {
             count = getLogisticsOrderCount(id, type);
             list = kwtLogisticsOrderMapper.selectOrderCountByTorderId(id, type);
             /**数据统计*/
-            for (LogisticsOrderDTO logisticsOrderDTO : list) {
+            for (LogisticsOrderDto logisticsOrderDTO : list) {
                 amount = amount.add(logisticsOrderDTO.getAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getAmount());
             }
             residue = resAmount.subtract(amount);
@@ -905,7 +928,7 @@ public class KwtLogisticsConsignmentService {
             return HttpResult.ok();
         }
         stringList = stringList.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
-        List<LogisticsOrderDTO> returnList = new ArrayList<>();
+        List<LogisticsOrderDto> returnList = new ArrayList<>();
         for (String id : stringList) {
             OrderDetailRes orderDetailRes = tradeOrderInfoService.getOrderDetailById(Long.parseLong(id));
             if (orderDetailRes == null) {
@@ -925,7 +948,7 @@ public class KwtLogisticsConsignmentService {
             if (String.valueOf(NumberConstant.ONE).equals(orderDetailRes.getPickupType())) {
                 flag = true;
             }
-            List<LogisticsOrderDTO> list = new ArrayList<>();
+            List<LogisticsOrderDto> list = new ArrayList<>();
             if (flag) {
                 /**数据展示*/
                 list = kwtLogisticsOrderMapper.selectOrderListNotPage(id, "2");
@@ -936,7 +959,7 @@ public class KwtLogisticsConsignmentService {
                 /**合理损耗*/
                 Map<String, String> taxRateTypeDictData = commonService.getDictData(DictTypeEnum.TAX_RATE_TYPE.getType());
                 if (CollectionUtils.isNotEmpty(list)) {
-                    for (LogisticsOrderDTO logisticsOrderDTO : list) {
+                    for (LogisticsOrderDto logisticsOrderDTO : list) {
                         logisticsOrderDTO.setStatusLabel(LogisticsOrderEnum.getDestination(logisticsOrderDTO.getStatus()));
                         String createName = StringUtils.isBlank(logisticsOrderDTO.getCreateBy()) ? null :
                                 (remoteSystemService.queryUserCacheById(Long.parseLong(logisticsOrderDTO.getCreateBy())) == null ? null :
@@ -951,7 +974,7 @@ public class KwtLogisticsConsignmentService {
                 }
             }
         }
-        List<LogisticsOrderDTO> subList = new ArrayList<>();
+        List<LogisticsOrderDto> subList = new ArrayList<>();
         if (CollectionUtils.isNotEmpty(returnList)) {
             subList = returnList.stream().skip((page - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
         }
@@ -964,10 +987,10 @@ public class KwtLogisticsConsignmentService {
      * @param page     当前页
      * @param pageSize 每页条数
      * @param type     采购订单1/销售订单2
-     * @return  物流订单实体
+     * @return 物流订单实体
      */
-    private List<LogisticsOrderDTO> getLogisticsOrderData(String id, Integer page, Integer pageSize, String type) {
-        List<LogisticsOrderDTO> list = kwtLogisticsOrderMapper.selectOrderList(id, page, pageSize, type);
+    private List<LogisticsOrderDto> getLogisticsOrderData(String id, Integer page, Integer pageSize, String type) {
+        List<LogisticsOrderDto> list = kwtLogisticsOrderMapper.selectOrderList(id, page, pageSize, type);
         return list;
     }
 
@@ -991,10 +1014,10 @@ public class KwtLogisticsConsignmentService {
     /**
      * 采购订单获取车辆信息
      *
-     * @param ids 订单ids
-     * @param page 当前页
-     * @param pageSize  每页条数
-     * @return  车辆运单数据
+     * @param ids      订单ids
+     * @param page     当前页
+     * @param pageSize 每页条数
+     * @return 车辆运单数据
      */
     public PageRes<OrderCarDTO> purchaseLogisticsCar(String ids, Integer page, Integer pageSize) {
         PageHelper.startPage(page, pageSize);
@@ -1146,7 +1169,7 @@ public class KwtLogisticsConsignmentService {
             HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrder(param);*/
             List<GoodsLoadingParam> goodsLoading = logisticsOrderGoodsService.goodsLoadingParams(kwtLogisticsOrder, false);
 //            HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(kwtLogisticsOrder.getTOrderId(), goodsLoading);
-            HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(LoginUserHolder.getUserId(),LoginUserHolder.getUserName(),kwtLogisticsOrder.getTOrderId(), goodsLoading);
+            HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(LoginUserHolder.getUserId(), LoginUserHolder.getUserName(), kwtLogisticsOrder.getTOrderId(), goodsLoading);
             log.info("销售订单撤销托运-溯源贸易订单请求数据:{}[],返回数据:{}", kwtLogisticsOrder.getTOrderId(), JSONObject.toJSONString(goodsLoading), JSONObject.toJSONString(httpResult));
             if (HttpStatus.SUCCESS_CODE == httpResult.getCode()) {
 //                    kwtLogisticsOrder.setDelFlag(NumberConstant.ONE);
@@ -1250,7 +1273,7 @@ public class KwtLogisticsConsignmentService {
             HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrder(param);*/
             List<GoodsLoadingParam> goodsLoading = logisticsOrderGoodsService.goodsLoadingParams(kwtLogisticsOrder, false);
 //            HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(kwtLogisticsOrder.getTOrderId(), goodsLoading);
-            HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(LoginUserHolder.getUserId(),LoginUserHolder.getUserName(),kwtLogisticsOrder.getTOrderId(), goodsLoading);
+            HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(LoginUserHolder.getUserId(), LoginUserHolder.getUserName(), kwtLogisticsOrder.getTOrderId(), goodsLoading);
 
             log.info("采购订单撤销托运-溯源贸易订单请求数据:{}[],返回数据:{}", kwtLogisticsOrder.getTOrderId(), JSONObject.toJSONString(goodsLoading), JSONObject.toJSONString(httpResult));
             if (HttpStatus.SUCCESS_CODE == httpResult.getCode()) {
@@ -2050,7 +2073,7 @@ public class KwtLogisticsConsignmentService {
     public List<PurchaseLogisticOrderExcelVo> logisticOrderByPurchaseOrderIdExport(String ids) {
         List<String> idList = StringUtils.splitStrToList(ids, String.class);
         List<PurchaseLogisticOrderExcelVo> logisticOrderExcelVos = new ArrayList<>();
-        List<LogisticsOrderDTO> orders = kwtLogisticsOrderMapper.selectOrderListByIdsAndUnitType(idList, "1");
+        List<LogisticsOrderDto> orders = kwtLogisticsOrderMapper.selectOrderListByIdsAndUnitType(idList, "1");
         AtomicInteger i = new AtomicInteger(1);
         orders.forEach(e -> {
             PurchaseLogisticOrderExcelVo vo = new PurchaseLogisticOrderExcelVo();
@@ -2081,7 +2104,7 @@ public class KwtLogisticsConsignmentService {
     public List<SellLogisticOrderExcelVo> logisticOrderBySellOrderIdExport(String ids) {
         List<String> idList = StringUtils.splitStrToList(ids, String.class);
         List<SellLogisticOrderExcelVo> logisticOrderExcelVos = new ArrayList<>();
-        List<LogisticsOrderDTO> orders = kwtLogisticsOrderMapper.selectOrderListByIdsAndUnitType(idList, "2");
+        List<LogisticsOrderDto> orders = kwtLogisticsOrderMapper.selectOrderListByIdsAndUnitType(idList, "2");
         AtomicInteger i = new AtomicInteger(1);
         orders.forEach(e -> {
             SellLogisticOrderExcelVo vo = new SellLogisticOrderExcelVo();
@@ -2131,4 +2154,36 @@ public class KwtLogisticsConsignmentService {
                 .in(KwtWaybillOrder::getLOrderId, longList));
         return count;
     }
+
+    /**
+     * 采购订单/销售订单-物流托运-v4.2
+     *
+     * @param logisticsConsignmentDto
+     * @return
+     */
+    public HttpResult logisticsOrderConsignment(LogisticsConsignmentDto dto) {
+        HttpResult httpResult = ValidUtil.serviceValid(dto);
+        if (HttpStatus.SUCCESS_CODE != httpResult.getCode()) {
+            return HttpResult.error(httpResult.getMsg());
+        }
+        HttpResult checked = checkParamData(dto);
+        if (checked.getCode() != HttpStatus.SUCCESS_CODE) {
+            return HttpResult.error(checked.getMsg());
+        }
+        String key = String.format(RedisConstant.TRADE_TO_LOGISTICS_NO_GENERATE_KEY, dto.getTOrderId());
+        if (redisLockUtil.tryLock(key)) {
+            try {
+                logisticsConsignmentSave(dto);
+            } finally {
+                redisLockUtil.unlock(key);
+            }
+        } else {
+            return HttpResult.error("请求不可重复操作,请稍后重试");
+        }
+        return HttpResult.ok();
+    }
+
+    private void logisticsConsignmentSave(LogisticsConsignmentDto dto) {
+        logisticsOrderConsignmentService.logisticsConsignmentSave(dto);
+    }
 }

+ 758 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderConsignmentService.java

@@ -0,0 +1,758 @@
+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;
+import com.sckw.contract.api.RemoteContractService;
+import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
+import com.sckw.core.common.enums.enums.DictTypeEnum;
+import com.sckw.core.exception.BusinessException;
+import com.sckw.core.model.constant.NumberConstant;
+import com.sckw.core.model.enums.LogisticsOrderEnum;
+import com.sckw.core.model.enums.OrderRuleEnum;
+import com.sckw.core.model.enums.RedisOrderGenerateEnum;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.IdWorker;
+import com.sckw.core.utils.OrderGenerateSeqNoUtils;
+import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.fleet.api.RemoteFleetService;
+import com.sckw.manage.api.RemoteManageService;
+import com.sckw.manage.api.model.dto.res.LineFreightAddressRes;
+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.*;
+import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.product.api.model.KwpGoods;
+import com.sckw.redis.config.RedisLockUtil;
+import com.sckw.stream.enums.MessageEnum;
+import com.sckw.stream.model.SckwBusSum;
+import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
+import com.sckw.transport.common.config.MessageUrlConfig;
+import com.sckw.transport.dao.*;
+import com.sckw.transport.model.*;
+import com.sckw.transport.model.dto.AddressInfoDto;
+import com.sckw.transport.model.dto.ContractDto;
+import com.sckw.transport.model.dto.LineFreightDto;
+import com.sckw.transport.model.dto.LogisticsConsignmentDto;
+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.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author lfdc
+ * @description 物流订单Service-v4.2
+ * @date 2024-03-04 11:06:07
+ */
+@Slf4j
+@Service
+@SuppressWarnings("all")
+public class KwtLogisticsOrderConsignmentService {
+
+    @Resource
+    private StreamBridge streamBridge;
+
+    @Autowired
+    RedisLockUtil redisLockUtil;
+
+    @Autowired
+    public KwtTransportCommonService transportCommonService;
+
+    @Autowired
+    KwtWaybillOrderService waybillOrderService;
+
+    @Autowired
+    KwtLogisticsOrderGoodsService logisticsOrderGoodsService;
+
+    @Autowired
+    MessageUrlConfig messageUrlConfig;
+
+    @Autowired
+    public KwtCommonService commonService;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
+    RemoteSystemService remoteSystemService;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
+    GoodsInfoService goodsInfoService;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 80000)
+    TradeOrderInfoService tradeOrderInfoService;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
+    RemoteFleetService remoteFleetService;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
+    RemoteContractService contractService;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
+    RemoteManageService manageService;
+
+    @Autowired
+    public KwtLogisticsOrderLineFreightRateMapper logisticsOrderLineFreightRateMapper;
+
+    @Autowired
+    public KwtLogisticsOrderContractMapper kwtLogisticsOrderContractMapper;
+
+    @Autowired
+    public KwtLogisticsOrderAddressMapper kwtLogisticsOrderAddressMapper;
+
+    @Autowired
+    public KwtLogisticsOrderAmountMapper logisticsOrderAmountMapper;
+
+    @Autowired
+    public KwtLogisticsOrderTrackMapper kwtLogisticsOrderTrackMapper;
+
+    @Autowired
+    public KwtLogisticsOrderGoodsMapper kwtLogisticsOrderGoodsMapper;
+
+    @Autowired
+    public KwtLogisticsOrderUnitMapper kwtLogisticsOrderUnitMapper;
+
+    @Autowired
+    public KwtLogisticsOrderMapper kwtLogisticsOrderMapper;
+
+    @Autowired
+    public KwtWaybillOrderMapper waybillOrderMapper;
+
+    /**
+     * 采购订单/销售订单-物流托运-4.2
+     *
+     * @param dto
+     */
+    public void logisticsConsignmentSave(LogisticsConsignmentDto dto) {
+        commonService.getRedisGenerateOrderNo();
+        Long count = kwtLogisticsOrderMapper.selectCount(new LambdaQueryWrapper<KwtLogisticsOrder>().eq(KwtLogisticsOrder::getTOrderId, dto.getTOrderId()));
+        String lOrderNo = OrderGenerateSeqNoUtils.getSeqNo(RedisOrderGenerateEnum.LOGISTICS_ORDER, OrderRuleEnum.LOGISTICS_ORDER, "1", "0", String.valueOf(count + 1));
+        OrderDetailRes tradeOrder = tradeOrderInfoService.getOrderDetailById(Long.parseLong(dto.getTOrderId()));
+        if (tradeOrder == null) {
+            log.error("订单id查找失败:{}", dto.getTOrderId());
+            throw new BusinessException("贸易订单数据不存在");
+        }
+        KwtLogisticsOrder order = new KwtLogisticsOrder();
+        if (!dto.getIsFullDose()) {
+            //BigDecimal amount = tradeOrder.getAmount().subtract(tradeOrder.getEntrustAmount());
+            BigDecimal amount = dto.getAmount();
+            if (amount.compareTo(NumberConstant.ZERO_TWO) == 0) {
+                log.error("可分配量分配错误:{}", dto.getTOrderId());
+                throw new BusinessException("可分配量分配必须填写大于0");
+            }
+            //可运量校验
+            boolean bool = logisticsOrderGoodsService.chenkLogisticsAmount(dto, tradeOrder);
+            if (!bool) {
+                log.error("可分配量分配错误:{}", dto.getTOrderId());
+                throw new BusinessException("可分配量分配错误");
+            }
+            if (ArrayUtil.isEmpty(dto.getAmount())) {
+                throw new BusinessException("不是全量分配时,分配量不能为空!");
+            }
+            order.setAmount(dto.getAmount());
+        } else {
+            order.setAmount(NumberConstant.ZERO_TWO);
+            order.setSubcontractAmount(NumberConstant.ZERO_TWO);
+        }
+        /**验证结算方式*/
+        checkBillingMode(dto);
+        Long orderId = new IdWorker(NumberConstant.ONE).nextId();
+        order.setId(orderId);
+        List<ContractDto> contractInfo = dto.getContractInfo();
+        long contractId = contractInfo.get(0).getContractId();
+        List<Long> contractList = new ArrayList<>();
+        contractList.add(contractId);
+        Map<Long, ContractCommonInfoResDto> longContractCommonInfoResDtoMap = contractService.queryContractBaseInfo(contractList);
+        if (CollectionUtils.isEmpty(longContractCommonInfoResDtoMap)) {
+            throw new BusinessException("物流托运-并未有对应合同,应先签约合同");
+        }
+        if (longContractCommonInfoResDtoMap.get(contractId) == null) {
+            throw new BusinessException("物流托运-并未有对应合同,应先签约合同");
+        }
+        ContractCommonInfoResDto infoResDto = longContractCommonInfoResDtoMap.get(contractId);
+        /**状态判断
+         * 是否是已签约合同
+         * */
+        // 0 已签约 1待签约
+        Integer status = infoResDto.getStatus();
+        Integer orderStatus = LogisticsOrderEnum.PENDING_ORDER.getCode();
+        if (NumberConstant.ONE == status) {
+            orderStatus = LogisticsOrderEnum.TO_BE_PLANNED.getCode();
+        } else if (NumberConstant.ZERO == status) {
+            orderStatus = LogisticsOrderEnum.PENDING_ORDER.getCode();
+        } else {
+            log.info("物流托运创建订单异常");
+            throw new BusinessException("物流托运创建订单异常");
+        }
+        logisticsOrderGoodsService.insertLogisticsGoods(dto, lOrderNo, orderId);
+        saveLogisticsOrder(dto, lOrderNo, order, tradeOrder, orderId, orderStatus);
+        saveLogisticsOrderContract(dto, orderId);
+        saveLogisticsOrderUnit(dto, orderId);
+        saveLogisticsOrderAddressAndAmount(dto, orderId);
+        saveLogisticsOrderTrack(dto, orderId, orderStatus);
+        /**v4.2版本新增*/
+        if (dto.getBillingMode().equals("4")) {
+            saveLogisticsOrderLineFreight(dto, orderId);
+        }
+        saveSendMongoDB(lOrderNo, orderId, dto, tradeOrder, orderStatus);
+
+        /**将生成的分配量->贸易订单*/
+        List<GoodsLoadingParam> goodsLoading = logisticsOrderGoodsService.goodsLoadingParams(order, false);
+        HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrderV1(LoginUserHolder.getUserId(), LoginUserHolder.getUserName(), order.getTOrderId(), goodsLoading);
+        if (httpResult.getCode() != HttpStatus.SUCCESS_CODE) {
+            log.info("{}生成物流托运失败!,返回信息:{}", tradeOrder.getTOrderNo(), JSONObject.toJSONString(httpResult));
+            throw new BusinessException("{" + tradeOrder.getTOrderNo() + "}生成物流托运失败!" + httpResult.getMsg());
+        }
+        pushConsoleMessage(dto, lOrderNo);
+    }
+
+
+    private boolean checkBillingMode(LogisticsConsignmentDto dto) {
+        if ("4".equals(dto.getBillingMode())) {
+            if (dto.getLineFreightList().size() < 1 || CollectionUtils.isEmpty(dto.getLineFreightList())) {
+                throw new BusinessException("计费方式为里程计算时,线路不能为空");
+            }
+        }
+        return true;
+    }
+
+    private void saveLogisticsOrderLineFreight(LogisticsConsignmentDto dto, Long orderId) {
+        List<LineFreightDto> lineFreightList = dto.getLineFreightList();
+        List<Long> lineFreightId = lineFreightList.stream().map(t -> t.getLineFreightId()).distinct().collect(Collectors.toList());
+        Map<Long, LineFreightAddressRes> resMap = manageService.findLineFreightAddress(lineFreightId);
+        if (resMap != null) {
+            lineFreightId.stream().forEach(id->{
+                if (resMap.get(id) != null) {
+                    LineFreightAddressRes res = resMap.get(id);
+                    KwtLogisticsOrderLineFreightRate lineFreightRate = new KwtLogisticsOrderLineFreightRate();
+                    lineFreightRate.setLOrderId(orderId);
+                    lineFreightRate.setName(res.getName());
+                    lineFreightRate.setLoadName(res.getLoadName());
+                    lineFreightRate.setLoadCityCode(res.getLoadCityCode());
+                    lineFreightRate.setLoadCityName(res.getLoadCityName());
+                    lineFreightRate.setLoadDetailAddress(res.getLoadDetailAddress());
+                    lineFreightRate.setLoadLat(res.getLoadLat());
+                    lineFreightRate.setLoadLng(res.getLoadLng());
+                    lineFreightRate.setUnloadName(res.getUnloadName());
+                    lineFreightRate.setUnloadCityCode(res.getUnloadCityCode());
+                    lineFreightRate.setUnloadCityName(res.getUnloadCityName());
+                    lineFreightRate.setUnloadDetailAddress(res.getUnloadDetailAddress());
+                    lineFreightRate.setUnloadLat(res.getUnloadLat());
+                    lineFreightRate.setUnloadLng(res.getUnloadLng());
+                    lineFreightRate.setTransportMileage(res.getTransportMileage());
+                    lineFreightRate.setTransportPrice(res.getTransportPrice());
+                    BigDecimal defultBigDecimal = new BigDecimal("0.00");
+                    lineFreightRate.setSettlementAmount(defultBigDecimal);
+                    lineFreightRate.setId(new IdWorker(NumberConstant.FOUR).nextId());
+                    lineFreightRate.setRemark(res.getRemark());
+                    lineFreightRate.setStatus(res.getStatus());
+                    lineFreightRate.setCreateBy(LoginUserHolder.getUserId());
+                    lineFreightRate.setCreateTime(new Date());
+                    lineFreightRate.setUpdateBy(LoginUserHolder.getUserId());
+                    lineFreightRate.setUpdateTime(new Date());
+                    lineFreightRate.setDelFlag(0);
+                    logisticsOrderLineFreightRateMapper.insert(lineFreightRate);
+                }
+            });
+        }
+
+    }
+
+    private void saveSendMongoDB(String lOrderNo, Long orderId, LogisticsConsignmentDto bo, OrderDetailRes tradeOrder, Integer orderStatus) {
+        SckwLogisticsOrder logisticsOrder = new SckwLogisticsOrder();
+        logisticsOrder.setStatus(String.valueOf(orderStatus));
+        logisticsOrder.setLOrderId(orderId);
+        logisticsOrder.setLOrderNo(lOrderNo);
+        logisticsOrder.setLOrderPid(null);
+        logisticsOrder.setTOrderId(tradeOrder.getId());
+        logisticsOrder.setTOrderNo("D" + com.sckw.transport.utils.StringUtils.getWaybillNoUtil());
+        logisticsOrder.setSettlementCycle(Long.parseLong(bo.getSettlementCycle()));
+        logisticsOrder.setPrice(bo.getPrice());
+        logisticsOrder.setPriceType(remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.PRICE_TYPE.getType(), bo.getPriceType()) == null ?
+                null : Long.parseLong(remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.PRICE_TYPE.getType(), bo.getPriceType()).getValue()));
+
+        if (!bo.getIsFullDose()) {
+            if (ArrayUtil.isEmpty(bo.getAmount())) {
+                throw new RuntimeException("不是全量分配时,分配量不能为空!");
+            }
+            logisticsOrder.setAmount(bo.getAmount());
+            logisticsOrder.setUnit(bo.getCarryingCapacityUnit());
+            logisticsOrder.setCarryingCapacity(bo.getAmount());
+        } else {
+            logisticsOrder.setAmount(NumberConstant.ZERO_TWO);
+            logisticsOrder.setSubcontractAmount(NumberConstant.ZERO_TWO);
+            logisticsOrder.setCarryingCapacity(NumberConstant.ZERO_TWO);
+        }
+        logisticsOrder.setLoss(bo.getLoss() == null ? null : bo.getLoss());
+        logisticsOrder.setLossUnit(bo.getLossUnit());
+        logisticsOrder.setGoodsPrice(bo.getGoodsPrice() == null ? null : 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 : bo.getTaxRate());
+        logisticsOrder.setRemark(bo.getRemark());
+        logisticsOrder.setEntId(LoginUserHolder.getEntId());
+        logisticsOrder.setFirmName(remoteSystemService.queryEntCacheById(LoginUserHolder.getEntId()).getFirmName());
+        logisticsOrder.setGoodsId(bo.getGoodsId());
+        KwpGoods goods = goodsInfoService.getGoodsById(bo.getGoodsId());
+        logisticsOrder.setGoodsType(goods == null ? null : goods.getGoodsType());
+        logisticsOrder.setGoodsSpec(goods == null ? null : goods.getSpec());
+        List<ContractDto> contractInfo = bo.getContractInfo();
+        contractInfo.forEach(contract -> {
+            Long contractId = contract.getContractId();
+            Map<Long, ContractCommonInfoResDto> longContractCommonInfoResDtoMap = contractService.queryContractBaseInfo(Collections.singletonList(contractId));
+            if (longContractCommonInfoResDtoMap != null && (longContractCommonInfoResDtoMap.get(contractId) != null)) {
+                String contractCode = longContractCommonInfoResDtoMap.get(contractId).getContractCode();
+                String contactName = longContractCommonInfoResDtoMap.get(contractId).getContactName();
+                Integer signingWay = longContractCommonInfoResDtoMap.get(contractId).getSigningWay();
+                logisticsOrder.setContractId(String.valueOf(contractId));
+                logisticsOrder.setContractNo(contractCode);
+                logisticsOrder.setContractName(contactName);
+                logisticsOrder.setContractSigningWay(String.valueOf(signingWay));
+            }
+        });
+        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());
+        OrderDetailRes orderDetailRes = tradeOrderInfoService.getOrderDetailById(Long.valueOf(bo.getTOrderId()));
+        // 收货单位+发货单位
+        if (orderDetailRes != null) {
+            List<UnitInfoDetailRes> unitInfo = orderDetailRes.getUnitInfo();
+            if (CollectionUtils.isNotEmpty(unitInfo)) {
+                for (UnitInfoDetailRes unitInfoDetailRes : unitInfo) {
+                    if (String.valueOf(NumberConstant.ONE).equals(unitInfoDetailRes.getUnitType())) {
+                        logisticsOrder.setShipmentsUnitEntId(String.valueOf(unitInfoDetailRes.getEntId()));
+                        logisticsOrder.setShipmentsUnit(unitInfoDetailRes.getFirmName());
+                    } else if (String.valueOf(NumberConstant.TWO).equals(unitInfoDetailRes.getUnitType())) {
+                        logisticsOrder.setReceiveGoodsUnitEntId(String.valueOf(unitInfoDetailRes.getEntId()));
+                        logisticsOrder.setReceiveGoodsUnit(unitInfoDetailRes.getFirmName());
+                    }
+                }
+            }
+        }
+        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.setBillingMode(bo.getBillingMode());
+        logisticsOrder.setStartTime(bo.getStartTime() == null ? null : bo.getStartTime());
+        logisticsOrder.setEndTime(bo.getEndTime() == null ? null : bo.getEndTime());
+        //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));
+
+    }
+
+    private void saveLogisticsOrderTrack(LogisticsConsignmentDto dto, Long orderId, Integer orderStatus) {
+        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(dto.getRemark());
+        kwtLogisticsOrderTrackMapper.insert(entity);
+    }
+
+    private void saveLogisticsOrderAddressAndAmount(LogisticsConsignmentDto dto, Long orderId) {
+        //todo 装卸货地址 通过dubbo查询
+//        OrderDetailRes orderDetailRes = tradeOrderInfoService.getOrderDetailById(Long.parseLong(dto.getTOrderId()));
+//        if (ObjectUtils.isEmpty(orderDetailRes)) {
+//            log.info("dubbp 查询数据 error :orderId:{}", dto.getTOrderId());
+//            throw new RuntimeException("dubbp 查询销售订单数据查找失败!");
+//        }
+//        List<AddressInfoDetail> addressInfo = orderDetailRes.getAddressInfo();
+//        if (CollectionUtils.isEmpty(addressInfo)) {
+//            throw new BusinessException("生成物流托运时,地址信息不存在!");
+//        }
+        List<AddressInfoDto> addressInfo = dto.getAddressInfo();
+        for (AddressInfoDto addressInfoDto : addressInfo) {
+            OrderAddressDetailRes detail = tradeOrderInfoService.getOrderDetailByTradeOrderIdAndAddressId(Long.parseLong(dto.getTOrderId()), Long.parseLong(addressInfoDto.getAddressId()));
+            if (detail != null) {
+                if (String.valueOf(NumberConstant.ONE).equals(detail.getAddressType())) {
+                    long addressId = new IdWorker(NumberConstant.ONE).nextId();
+                    KwtLogisticsOrderAddress loadOrderAddress = new KwtLogisticsOrderAddress();
+                    loadOrderAddress.setId(addressId);
+                    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());
+                    loadOrderAddress.setName(detail.getName());
+                    loadOrderAddress.setType(Long.parseLong(detail.getType()));
+                    loadOrderAddress.setCityCode(detail.getCityCode());
+                    loadOrderAddress.setLng(detail.getLng());
+                    loadOrderAddress.setSort(addressInfoDto.getSort());
+                    kwtLogisticsOrderAddressMapper.insert(loadOrderAddress);
+
+                    KwtLogisticsOrderAmount orderAmount = new KwtLogisticsOrderAmount();
+                    BigDecimal defaultBigDecimal = new BigDecimal("0.00");
+                    orderAmount.setLOrderId(orderId);
+                    orderAmount.setAddressId(addressId);
+                    orderAmount.setAmount(addressInfoDto.getAmount());
+                    orderAmount.setSubcontractAmount(defaultBigDecimal);
+                    orderAmount.setEntrustAmount(defaultBigDecimal);
+                    orderAmount.setLoadAmount(defaultBigDecimal);
+                    orderAmount.setUnloadAmount(defaultBigDecimal);
+                    orderAmount.setIgnoreAmount(defaultBigDecimal);
+                    orderAmount.setId(new IdWorker(NumberConstant.THREE).nextId());
+                    orderAmount.setStatus(0);
+                    orderAmount.setCreateBy(LoginUserHolder.getUserId());
+                    orderAmount.setCreateTime(new Date());
+                    orderAmount.setUpdateBy(LoginUserHolder.getUserId());
+                    orderAmount.setUpdateTime(new Date());
+                    orderAmount.setDelFlag(0);
+                    logisticsOrderAmountMapper.insert(orderAmount);
+                }
+                if (String.valueOf(NumberConstant.TWO).equals(detail.getAddressType())) {
+                    long addressId = new IdWorker(NumberConstant.TWO).nextId();
+                    KwtLogisticsOrderAddress unloadOrderAddress = new KwtLogisticsOrderAddress();
+                    unloadOrderAddress.setId(addressId);
+                    unloadOrderAddress.setAddressType(NumberConstant.TWO);
+                    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.setName(detail.getName());
+                    unloadOrderAddress.setType(Long.valueOf(detail.getType()));
+                    unloadOrderAddress.setCityCode(detail.getCityCode());
+                    unloadOrderAddress.setLng(detail.getLng());
+                    unloadOrderAddress.setSort(addressInfoDto.getSort());
+                    kwtLogisticsOrderAddressMapper.insert(unloadOrderAddress);
+
+                    KwtLogisticsOrderAmount orderAmount = new KwtLogisticsOrderAmount();
+                    BigDecimal defaultBigDecimal = new BigDecimal("0.00");
+                    orderAmount.setLOrderId(orderId);
+                    orderAmount.setAddressId(addressId);
+                    orderAmount.setAmount(addressInfoDto.getAmount());
+                    orderAmount.setSubcontractAmount(defaultBigDecimal);
+                    orderAmount.setEntrustAmount(defaultBigDecimal);
+                    orderAmount.setLoadAmount(defaultBigDecimal);
+                    orderAmount.setUnloadAmount(defaultBigDecimal);
+                    orderAmount.setIgnoreAmount(defaultBigDecimal);
+                    orderAmount.setId(new IdWorker(NumberConstant.THREE).nextId());
+                    orderAmount.setStatus(0);
+                    orderAmount.setCreateBy(LoginUserHolder.getUserId());
+                    orderAmount.setCreateTime(new Date());
+                    orderAmount.setUpdateBy(LoginUserHolder.getUserId());
+                    orderAmount.setUpdateTime(new Date());
+                    orderAmount.setDelFlag(0);
+                    logisticsOrderAmountMapper.insert(orderAmount);
+                }
+            }
+        }
+
+//        if (CollectionUtils.isNotEmpty(addressInfo)) {
+//            for (AddressInfoDetail detail : addressInfo) {
+//                if (String.valueOf(NumberConstant.ONE).equals(detail.getAddressType())) {
+//                    List<AddressInfoDto> orderAddressInfo = dto.getAddressInfo();
+//                    for (AddressInfoDto addressInfoDto : orderAddressInfo) {
+//                        if (addressInfoDto.getAddressId().equals(detail.getId())) {
+//                            KwtLogisticsOrderAddress loadOrderAddress = new KwtLogisticsOrderAddress();
+//                            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());
+//                            loadOrderAddress.setName(detail.getName());
+//                            loadOrderAddress.setType(Long.parseLong(detail.getType()));
+//                            loadOrderAddress.setCityCode(detail.getCityCode());
+//                            loadOrderAddress.setLng(detail.getLng());
+//                            loadOrderAddress.setSort(addressInfoDto.getSort());
+//                            kwtLogisticsOrderAddressMapper.insert(loadOrderAddress);
+//                        }
+//                    }
+//                }
+//                if (String.valueOf(NumberConstant.TWO).equals(detail.getAddressType())) {
+//                    List<AddressInfoDto> orderAddressInfo = dto.getAddressInfo();
+//                    for (AddressInfoDto addressInfoDto : orderAddressInfo) {
+//                        if (addressInfoDto.getAddressId().equals(detail.getId())) {
+//                            KwtLogisticsOrderAddress unloadOrderAddress = new KwtLogisticsOrderAddress();
+//                            unloadOrderAddress.setId(new IdWorker(NumberConstant.TWO).nextId());
+//                            unloadOrderAddress.setAddressType(NumberConstant.TWO);
+//                            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.setName(detail.getName());
+//                            unloadOrderAddress.setType(Long.valueOf(detail.getType()));
+//                            unloadOrderAddress.setCityCode(detail.getCityCode());
+//                            unloadOrderAddress.setLng(detail.getLng());
+//                            unloadOrderAddress.setSort(addressInfoDto.getSort());
+//                            kwtLogisticsOrderAddressMapper.insert(unloadOrderAddress);
+//                        }
+//                    }
+//                }
+//            }
+//        }
+    }
+
+    /**
+     * 消息推送首页信息
+     */
+    private void pushConsoleMessage(LogisticsConsignmentDto dto, String lOrderNo) {
+        /**消息列表
+         * 1 采购 2 销售
+         * */
+        String pcConsignUrl = "", appConsignUrl = "", pcCarriageUrl = "", appCarriageUrl = "";
+        MessageEnum consignMessageEnum = null, carriageMessageEnum = null;
+        //托运单位
+        KwtLogisticsOrderUnit checkUnit = new KwtLogisticsOrderUnit();
+        //承运单位
+        KwtLogisticsOrderUnit carriageUnit = new KwtLogisticsOrderUnit();
+        String type = dto.getType();
+        if (String.valueOf(NumberConstant.ONE).equals(type)) {
+            EntCacheResDto consignentMap = remoteSystemService.queryEntTreeById(Long.parseLong(dto.getConsignCompanyId()));
+            EntCacheResDto checkentMap = remoteSystemService.queryEntTreeById(Long.parseLong(dto.getCheckCompanyId()));
+            //发起方
+            checkUnit.setUnitType(NumberConstant.ONE);
+            checkUnit.setFirmName(dto.getCheckCompany());
+            checkUnit.setEntId(Long.parseLong(dto.getConsignCompanyId()));
+            checkUnit.setTopEntId(consignentMap == null ? null : consignentMap.getId());
+            checkUnit.setContactsId(Long.parseLong(dto.getCheckContactsId()));
+            //接收方
+            carriageUnit.setUnitType(NumberConstant.TWO);
+            carriageUnit.setFirmName(dto.getConsignCompany());
+            carriageUnit.setEntId(Long.parseLong(dto.getCheckCompanyId()));
+            carriageUnit.setTopEntId(checkentMap == null ? null : checkentMap.getId());
+            carriageUnit.setContactsId(Long.parseLong(dto.getConsignContactsId()));
+            pcConsignUrl = messageUrlConfig.getPc().getCarriageLogisticsAddOrderUrl();
+            appConsignUrl = messageUrlConfig.getApp().getCarriageLogisticsAddOrderUrl();
+            pcCarriageUrl = messageUrlConfig.getPc().getConsignLogisticsAddOrderUrl();
+            appCarriageUrl = messageUrlConfig.getApp().getConsignLogisticsAddOrderUrl();
+            consignMessageEnum = MessageEnum.NEW_CARRIAGE_ORDER;
+            carriageMessageEnum = MessageEnum.INITIATING_LOGISTICS_CONSIGNMENT;
+            type = "2";
+        } else if (String.valueOf(NumberConstant.TWO).equals(type)) {
+            EntCacheResDto consignentMap = remoteSystemService.queryEntTreeById(Long.parseLong(dto.getConsignCompanyId()));
+            EntCacheResDto checkentMap = remoteSystemService.queryEntTreeById(Long.parseLong(dto.getCheckCompanyId()));
+            //发起方
+            checkUnit.setUnitType(NumberConstant.ONE);
+            checkUnit.setFirmName(dto.getCheckCompany());
+            checkUnit.setEntId(Long.parseLong(dto.getCheckCompanyId()));
+            checkUnit.setTopEntId(consignentMap == null ? null : consignentMap.getId());
+            checkUnit.setContactsId(Long.parseLong(dto.getConsignContactsId()));
+            //接收方
+            carriageUnit.setUnitType(NumberConstant.TWO);
+            carriageUnit.setFirmName(dto.getConsignCompany());
+            carriageUnit.setEntId(Long.parseLong(dto.getConsignCompanyId()));
+            carriageUnit.setTopEntId(checkentMap == null ? null : checkentMap.getId());
+            carriageUnit.setContactsId(Long.parseLong(dto.getCheckContactsId()));
+            pcConsignUrl = messageUrlConfig.getPc().getConsignLogisticsAddOrderUrl();
+            appConsignUrl = messageUrlConfig.getApp().getConsignLogisticsAddOrderUrl();
+            pcCarriageUrl = messageUrlConfig.getPc().getCarriageLogisticsAddOrderUrl();
+            appCarriageUrl = messageUrlConfig.getApp().getCarriageLogisticsAddOrderUrl();
+            consignMessageEnum = MessageEnum.NEW_CARRIAGE_ORDER;
+            carriageMessageEnum = MessageEnum.INITIATING_LOGISTICS_CONSIGNMENT;
+            type = "1";
+        }
+        //发送消息
+        commonService.newSendLogisticsOrderToMessage(checkUnit, carriageUnit, lOrderNo, LoginUserHolder.getUserId(),
+                LoginUserHolder.getEntId(), pcConsignUrl, appConsignUrl, pcCarriageUrl, appCarriageUrl,
+                consignMessageEnum, carriageMessageEnum, type);
+    }
+
+    private void saveLogisticsOrderUnit(LogisticsConsignmentDto dto, Long orderId) {
+        EntCacheResDto consignentMap = remoteSystemService.queryEntTreeById(Long.parseLong(dto.getConsignCompanyId()));
+        EntCacheResDto checkentMap = remoteSystemService.queryEntTreeById(Long.parseLong(dto.getCheckCompanyId()));
+        if (consignentMap == null || checkentMap == null) {
+            throw new BusinessException("企业对应一级企业不存在");
+        }
+        KwtLogisticsOrderUnit checkUnit = new KwtLogisticsOrderUnit()
+                .setLOrderId(orderId)
+                .setId(new IdWorker(NumberConstant.ONE).nextId())
+                .setUnitType(NumberConstant.ONE)
+                .setFirmName(dto.getCheckCompany())
+                .setRemark(dto.getRemark())
+                .setEntId(Long.parseLong(dto.getCheckCompanyId()))
+                .setTopEntId(checkentMap.getId())
+                .setContacts(dto.getCheckContacts())
+                .setPhone(dto.getCheckContactPhone())
+                .setCreateBy(LoginUserHolder.getUserId())
+                .setCreateTime(new Date())
+                .setUpdateBy(LoginUserHolder.getUserId())
+                .setUpdateTime(new Date())
+                .setContactsId(Long.parseLong(dto.getCheckContactsId()));
+        kwtLogisticsOrderUnitMapper.insert(checkUnit);
+
+        KwtLogisticsOrderUnit consignUnit = new KwtLogisticsOrderUnit()
+                .setLOrderId(orderId)
+                .setId(new IdWorker(NumberConstant.ONE).nextId())
+                .setUnitType(NumberConstant.TWO)
+                .setFirmName(dto.getConsignCompany())
+                .setRemark(dto.getRemark())
+                .setEntId(Long.parseLong(dto.getConsignCompanyId()))
+                .setTopEntId(consignentMap.getId())
+                .setContacts(dto.getConsignContacts())
+                .setPhone(dto.getConsignContactPhone())
+                .setCreateBy(LoginUserHolder.getUserId())
+                .setCreateTime(new Date())
+                .setUpdateBy(LoginUserHolder.getUserId())
+                .setUpdateTime(new Date())
+                .setContactsId(Long.parseLong(dto.getConsignContactsId()));
+        kwtLogisticsOrderUnitMapper.insert(consignUnit);
+    }
+
+    private void saveLogisticsOrderContract(LogisticsConsignmentDto dto, Long orderId) {
+        List<ContractDto> contractInfo = dto.getContractInfo();
+        contractInfo.forEach(contract -> {
+            Long contractId = contract.getContractId();
+            Map<Long, ContractCommonInfoResDto> longContractCommonInfoResDtoMap = contractService.queryContractBaseInfo(Collections.singletonList(contractId));
+            if (longContractCommonInfoResDtoMap != null && (longContractCommonInfoResDtoMap.get(contractId) != null)) {
+                String contractCode = longContractCommonInfoResDtoMap.get(contractId).getContractCode();
+                String contactName = longContractCommonInfoResDtoMap.get(contractId).getContactName();
+                Integer signingWay = longContractCommonInfoResDtoMap.get(contractId).getSigningWay();
+                KwtLogisticsOrderContract kwtLogisticsOrderContract = new KwtLogisticsOrderContract();
+                kwtLogisticsOrderContract.setId(new IdWorker(NumberConstant.ONE).nextId());
+                kwtLogisticsOrderContract.setLOrderId(orderId);
+                kwtLogisticsOrderContract.setContractId(contractId);
+                kwtLogisticsOrderContract.setContractNo(contractCode);
+                kwtLogisticsOrderContract.setContractName(contactName);
+                kwtLogisticsOrderContract.setSigningWay(String.valueOf(signingWay));
+                kwtLogisticsOrderContract.setRemark(dto.getRemark());
+                kwtLogisticsOrderContract.setCreateBy(LoginUserHolder.getUserId());
+                kwtLogisticsOrderContract.setUpdateBy(LoginUserHolder.getUserId());
+                kwtLogisticsOrderContract.setCreateTime(new Date());
+                kwtLogisticsOrderContract.setUpdateTime(new Date());
+                kwtLogisticsOrderContractMapper.insert(kwtLogisticsOrderContract);
+            }
+        });
+    }
+
+    private void saveLogisticsOrder(LogisticsConsignmentDto bo, String lOrderNo, KwtLogisticsOrder order, OrderDetailRes tradeOrder, Long orderId, Integer orderStatus) {
+        order.setId(orderId);
+        order.setEntId(LoginUserHolder.getEntId());
+        order.setType(String.valueOf(NumberConstant.ONE));
+        order.setTOrderId(Long.parseLong(bo.getTOrderId()));
+        order.setTOrderNo(bo.getTOrderNo());
+        order.setLOrderNo(lOrderNo);
+        order.setPid(null);
+//        order.setPids(orderId + StringConstant.COMMA);
+        order.setPids(String.valueOf(orderId));
+        order.setSettlementCycle(Long.parseLong(bo.getSettlementCycle()));
+        order.setPrice(bo.getPrice());
+        order.setPriceType(remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.PRICE_TYPE.getType(), bo.getPriceType()) == null ?
+                null : Long.parseLong(remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.PRICE_TYPE.getType(), bo.getPriceType()).getValue()));
+//        order.setAmount(tradeOrder.getAmount());
+        order.setBillingMode(bo.getBillingMode());
+        order.setUnit(bo.getCarryingCapacityUnit());
+        order.setLoss(bo.getLoss() == null ? null : bo.getLoss());
+//        order.setLossUnit(bo.getLossUnit());
+        order.setLossUnit(remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.UNIT_TYPE.getType(), bo.getLossUnit()) == null ?
+                null : remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.UNIT_TYPE.getType(), bo.getLossUnit()).getValue());
+        order.setGoodsPrice(bo.getGoodsPrice() == null ? null : bo.getGoodsPrice());
+        order.setGoodsPriceUnit(remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.PRICE_TYPE.getType(), bo.getGoodsPriceUnit()) == null ?
+                null : remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.PRICE_TYPE.getType(), bo.getGoodsPriceUnit()).getValue());
+        order.setGoodsPriceUnit(bo.getGoodsPriceUnit());
+        order.setStartTime(bo.getStartTime() == null ? null : bo.getStartTime());
+        order.setEndTime(bo.getEndTime() == null ? null : bo.getEndTime());
+        order.setRemark(bo.getRemark());
+        order.setPayment(Long.parseLong(bo.getPayment()));
+        order.setTaxRate(bo.getTaxRate());
+        order.setCreateBy(LoginUserHolder.getUserId());
+        order.setCreateTime(new Date());
+        order.setUpdateBy(LoginUserHolder.getUserId());
+        order.setUpdateTime(new Date());
+        order.setStatus(orderStatus);
+        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);
+        order.setTotalUnloadAmount(decimal);
+        order.setTotalLoadAmount(decimal);
+        order.setBindStatus(String.valueOf(NumberConstant.ZERO));
+        kwtLogisticsOrderMapper.insert(order);
+    }
+}

+ 67 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderGoodsService.java

@@ -21,6 +21,7 @@ import com.sckw.transport.model.KwtLogisticsOrder;
 import com.sckw.transport.model.KwtLogisticsOrderGoods;
 import com.sckw.transport.model.KwtLogisticsOrderGoodsUnit;
 import com.sckw.transport.model.dto.AddOrderDTO;
+import com.sckw.transport.model.dto.LogisticsConsignmentDto;
 import com.sckw.transport.model.dto.OrderGoodsLoadingDto;
 import com.sckw.transport.model.dto.OrderManualCompletionDto;
 import com.sckw.transport.model.param.GoodsUnitParam;
@@ -88,6 +89,40 @@ public class KwtLogisticsOrderGoodsService {
         }
     }
 
+    /**
+     * 物流订单-商品信息
+     *
+     * @param bo       页面请求数据
+     * @param lOrderNo 物流订单编号
+     * @param orderId  物流订单表编号
+     */
+    public void insertLogisticsGoods(LogisticsConsignmentDto bo, String lOrderNo, Long orderId) {
+        KwtLogisticsOrderGoods kwtLogisticsOrderGoods = new KwtLogisticsOrderGoods();
+        kwtLogisticsOrderGoods.setId(new IdWorker(NumberConstant.ONE).nextId());
+        kwtLogisticsOrderGoods.setGoodsId(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());
+        goodsMapper.insert(kwtLogisticsOrderGoods);
+
+        //辅助单位
+        List<GoodsUnitParam> assistUnit = bo.getAssistUnit();
+        if (CollectionUtils.isNotEmpty(assistUnit)) {
+            assistUnit.forEach(e -> {
+                KwtLogisticsOrderGoodsUnit unit = BeanUtils.copyProperties(e, KwtLogisticsOrderGoodsUnit.class);
+                unit.setGoodsId(kwtLogisticsOrderGoods.getGoodsId());
+                unit.setLOrderId(kwtLogisticsOrderGoods.getLOrderId());
+                unit.setUnit(unit.getFromUnit().equals(bo.getCarryingCapacityUnit()) ? unit.getToUnit() : unit.getFromUnit());
+                goodsUnitMapper.insert(unit);
+            });
+        }
+    }
+
     /**
      * 分包托运-承运订单-商品信息
      *
@@ -400,4 +435,36 @@ public class KwtLogisticsOrderGoodsService {
         return loadingParams;
     }
 
+    public boolean chenkLogisticsAmount(LogisticsConsignmentDto logisticsOrder, OrderDetailRes tradeOrder) {
+        List<GoodsUnitParam> assistUnit = logisticsOrder.getAssistUnit();
+        BigDecimal amount = tradeOrder.getAmount().subtract(tradeOrder.getEntrustAmount());
+        BigDecimal arryingCapacity = logisticsOrder.getAmount();
+        String unit = tradeOrder.getUnit();
+        if (logisticsOrder.getCarryingCapacityUnit().equals(unit)) {
+            if (amount.compareTo(arryingCapacity) >= 0) {
+                return true;
+            }
+        } else {
+            if (CollectionUtils.isEmpty(assistUnit)) {
+                return false;
+            }
+            //辅助单位
+            for (GoodsUnitParam goodsUnit : assistUnit) {
+                BigDecimal conversionValue = goodsUnit.getConversionValue();
+                if (logisticsOrder.getCarryingCapacityUnit().equals(goodsUnit.getFromUnit())) {
+                    BigDecimal value = arryingCapacity.multiply(conversionValue);
+                    if (amount.compareTo(value) >= 0) {
+                        return true;
+                    }
+                }
+                if (logisticsOrder.getCarryingCapacityUnit().equals(goodsUnit.getToUnit())) {
+                    BigDecimal value = arryingCapacity.divide(conversionValue);
+                    if (amount.compareTo(value) >= 0) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
 }

+ 5 - 5
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/operateService/KwtManagementLogisticsOrderService.java

@@ -30,7 +30,7 @@ import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
-import com.sckw.transport.model.dto.LogisticsOrderDTO;
+import com.sckw.transport.model.dto.LogisticsOrderDto;
 import com.sckw.transport.model.param.LogisticsOrderQuery;
 import com.sckw.transport.model.param.ManagementContractParam;
 import com.sckw.transport.model.param.ManagementLogisticsOrderQuery;
@@ -753,10 +753,10 @@ public class KwtManagementLogisticsOrderService {
         if (CollectionUtils.isEmpty(tradeOrderIds)) {
             throw new BusinessException("贸易订单id不能为空");
         }
-        List<LogisticsOrderDTO> returnList = new ArrayList<>();
+        List<LogisticsOrderDto> returnList = new ArrayList<>();
         tradeOrderIds = tradeOrderIds.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
         /**数据展示*/
-        List<LogisticsOrderDTO> list = logisticsOrderMapper.selectOrderListByTradeOrderIds(tradeOrderIds, null);
+        List<LogisticsOrderDto> list = logisticsOrderMapper.selectOrderListByTradeOrderIds(tradeOrderIds, null);
 //        PageInfo<LogisticsOrderDTO> pageInfo = new PageInfo<>(list);
         if (CollectionUtils.isEmpty(list)) {
             return HttpResult.ok();
@@ -768,7 +768,7 @@ public class KwtManagementLogisticsOrderService {
         /**合理损耗*/
         Map<String, String> taxRateTypeDictData = commonService.getDictData(DictTypeEnum.TAX_RATE_TYPE.getType());
         if (CollectionUtils.isNotEmpty(list)) {
-            for (LogisticsOrderDTO logisticsOrderDTO : list) {
+            for (LogisticsOrderDto logisticsOrderDTO : list) {
                 logisticsOrderDTO.setStatusLabel(LogisticsOrderEnum.getDestination(logisticsOrderDTO.getStatus()));
                 String createName = StringUtils.isBlank(logisticsOrderDTO.getCreateBy()) ? null :
                         (remoteSystemService.queryUserCacheById(Long.parseLong(logisticsOrderDTO.getCreateBy())) == null ? null :
@@ -782,7 +782,7 @@ public class KwtManagementLogisticsOrderService {
             returnList.addAll(list);
         }
         /**基于多个传递数据查询->手动分页*/
-        List<LogisticsOrderDTO> subList = new ArrayList<>();
+        List<LogisticsOrderDto> subList = new ArrayList<>();
         if (CollectionUtils.isNotEmpty(returnList)) {
             subList = returnList.stream().skip((page - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
         }

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

@@ -86,7 +86,7 @@
         update_time,
         del_flag
     </sql>
-    <select id="selectOrderList" resultType="com.sckw.transport.model.dto.LogisticsOrderDTO">
+    <select id="selectOrderList" resultType="com.sckw.transport.model.dto.LogisticsOrderDto">
         SELECT a.id as lOrderId,
         a.l_order_no as lOrderNo,
         b.`status` as `status`,
@@ -111,7 +111,7 @@
         , #{pageSize}
     </select>
 
-    <select id="selectOrderListNotPage" resultType="com.sckw.transport.model.dto.LogisticsOrderDTO">
+    <select id="selectOrderListNotPage" resultType="com.sckw.transport.model.dto.LogisticsOrderDto">
         SELECT a.id as lOrderId,
         a.l_order_no as lOrderNo,
         b.`status` as `status`,
@@ -144,7 +144,7 @@
     </select>
 
 
-    <select id="selectOrderListNotPageByIds" resultType="com.sckw.transport.model.dto.LogisticsOrderDTO">
+    <select id="selectOrderListNotPageByIds" resultType="com.sckw.transport.model.dto.LogisticsOrderDto">
         SELECT a.id               as lOrderId,
                a.l_order_no       as lOrderNo,
                b.`status`         as `status`,
@@ -181,7 +181,7 @@
         order by createTime desc
     </select>
 
-    <select id="selectOrderListByTradeOrderIds" resultType="com.sckw.transport.model.dto.LogisticsOrderDTO">
+    <select id="selectOrderListByTradeOrderIds" resultType="com.sckw.transport.model.dto.LogisticsOrderDto">
         SELECT a.id as lOrderId,
         a.l_order_no as lOrderNo,
         a.`status` as `status`,
@@ -922,7 +922,7 @@
         </if>
     </select>
 
-    <select id="selectOrderCountByTorderId" resultType="com.sckw.transport.model.dto.LogisticsOrderDTO">
+    <select id="selectOrderCountByTorderId" resultType="com.sckw.transport.model.dto.LogisticsOrderDto">
         SELECT a.id as lOrderId,
         a.l_order_no as lOrderNo,
         b.`status` as `status`,
@@ -975,7 +975,7 @@
         )
     </select>
 
-    <select id="selectOrderListByIdsAndUnitType" resultType="com.sckw.transport.model.dto.LogisticsOrderDTO">
+    <select id="selectOrderListByIdsAndUnitType" resultType="com.sckw.transport.model.dto.LogisticsOrderDto">
         SELECT a.id as lOrderId,
         a.l_order_no as lOrderNo,
         b.`status` as `status`,