Ver Fonte

1.新增v4.2版本物流订单自建接口

lengfaqiang há 1 ano atrás
pai
commit
c4db89ce19
16 ficheiros alterados com 992 adições e 49 exclusões
  1. 7 0
      sckw-modules-api/sckw-manage-api/src/main/java/com/sckw/manage/api/RemoteManageService.java
  2. 2 2
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportRemoteService.java
  3. 1 1
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/dto/AcceptCarriageLogisticsOrderDto.java
  4. 19 0
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/dubbo/RemoteManageServiceImpl.java
  5. 2 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/LedgerLogisticsDetailVo.java
  6. 7 7
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsService.java
  7. 4 4
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/operateService/LedgerLogisticsService.java
  8. 24 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtLogisticsConsignmentController.java
  9. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java
  10. 5 8
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java
  11. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/AddOrderDTO.java
  12. 284 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/AddLogisticsOrderParam.java
  13. 4 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtCommonService.java
  14. 11 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  15. 618 15
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderConsignmentService.java
  16. 1 1
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml

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

@@ -48,4 +48,11 @@ public interface RemoteManageService {
      * @return
      */
     Map<Long, LineFreightAddressRes> findLineFreightAddress(List<Long> lineFreightId);
+
+    /**
+     * 通过ids获取地址信息
+     *
+     * @param addressIds
+     */
+    Map<Long, EntAddressResDto> queryAddressListByAddressIdList(List<String> addressIds);
 }

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

@@ -3,7 +3,7 @@ package com.sckw.transport.api.dubbo;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.transport.api.model.dto.AccountCheckingBindDTO;
 import com.sckw.transport.api.model.dto.AddressResDTO;
-import com.sckw.transport.api.model.dto.LogisticsOrderDTO;
+import com.sckw.transport.api.model.dto.AcceptCarriageLogisticsOrderDto;
 import com.sckw.transport.api.model.dto.RWaybillOrderDto;
 import com.sckw.transport.api.model.param.ContractSignLogisticsParam;
 import com.sckw.transport.api.model.param.LogisticsOrderParam;
@@ -37,7 +37,7 @@ public interface TransportRemoteService {
      * @param ids
      * @return
      */
-    List<LogisticsOrderDTO> getAcceptCarriageOrderList(List<String> ids);
+    List<AcceptCarriageLogisticsOrderDto> getAcceptCarriageOrderList(List<String> ids);
 
     /**
      * 获取物流订单中地址信息

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

@@ -15,7 +15,7 @@ import java.util.Date;
  * @date 2023-07-17 11:07:08
  */
 @Data
-public class LogisticsOrderDTO implements Serializable {
+public class AcceptCarriageLogisticsOrderDto implements Serializable {
 
     /**
      * 物流订单id

+ 19 - 0
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/dubbo/RemoteManageServiceImpl.java

@@ -277,4 +277,23 @@ public class RemoteManageServiceImpl implements RemoteManageService {
         }
         return rateMap;
     }
+
+    /**
+     * 通过ids获取地址信息
+     * @param addressIds
+     */
+    @Override
+    public Map<Long, EntAddressResDto> queryAddressListByAddressIdList(List<String> addressIds) {
+        Map<Long, EntAddressResDto> map = new HashMap<>(4);
+        LambdaQueryWrapper<KwmAddress> kwmAddressLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        kwmAddressLambdaQueryWrapper.in(KwmAddress::getId, addressIds).
+                eq(KwmAddress::getDelFlag, Global.NO);
+        List<KwmAddress> kwmAddressList = kwmAddressMapper.selectList(kwmAddressLambdaQueryWrapper);
+        if (CollectionUtils.isEmpty(kwmAddressList)) {
+            return map;
+        }
+
+        List<EntAddressResDto> entAddressResDtoList = BeanUtils.copyToList(kwmAddressList, EntAddressResDto.class);
+        return entAddressResDtoList.stream().collect(Collectors.toMap(EntAddressResDto::getId,Function.identity()));
+    }
 }

+ 2 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/LedgerLogisticsDetailVo.java

@@ -2,7 +2,7 @@ package com.sckw.payment.model.vo.res;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import com.sckw.transport.api.model.dto.LogisticsOrderDTO;
+import com.sckw.transport.api.model.dto.AcceptCarriageLogisticsOrderDto;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -41,7 +41,7 @@ public class LedgerLogisticsDetailVo {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime endTime;
 
-    private List<LogisticsOrderDTO> orderList = new ArrayList<>();
+    private List<AcceptCarriageLogisticsOrderDto> orderList = new ArrayList<>();
     private String remark;
 
     /**

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

@@ -33,8 +33,8 @@ 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.TransportRemoteService;
+import com.sckw.transport.api.model.dto.AcceptCarriageLogisticsOrderDto;
 import com.sckw.transport.api.model.dto.AccountCheckingBindDTO;
-import com.sckw.transport.api.model.dto.LogisticsOrderDTO;
 import io.seata.spring.annotation.GlobalTransactional;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
@@ -285,7 +285,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         List<Long> ids = logisticsSendReq.getIdList();
         //验当前订单是否已存在绑定的对账单
         logisticsOrderService.check(ids);
-        List<LogisticsOrderDTO> acceptCarriageOrderDetail = transportRemoteService.getAcceptCarriageOrderList(logisticsSendReq.getIdsList());
+        List<AcceptCarriageLogisticsOrderDto> acceptCarriageOrderDetail = transportRemoteService.getAcceptCarriageOrderList(logisticsSendReq.getIdsList());
         if (CollectionUtils.isEmpty(acceptCarriageOrderDetail) || acceptCarriageOrderDetail.size() < ids.size()) {
             throw new BusinessException("未找到物流订单!");
         }
@@ -770,7 +770,7 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         ledgerLogisticsDetailVo.setRemark(ledgerLogisticsDto.getRemark());
         /*查询物流订单详情*/
         if (!CollectionUtils.isEmpty(kwpLedgerLogisticsOrders)) {
-            List<LogisticsOrderDTO> acceptCarriageOrderList = transportRemoteService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> Long.toString(a.getLOrderId())).collect(Collectors.toList()));
+            List<AcceptCarriageLogisticsOrderDto> acceptCarriageOrderList = transportRemoteService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> Long.toString(a.getLOrderId())).collect(Collectors.toList()));
             if (CollectionUtils.isEmpty(acceptCarriageOrderList)) {
                 ledgerLogisticsDetailVo.setOrderList(new ArrayList<>());
             } else {
@@ -780,24 +780,24 @@ public class KwpLedgerLogisticsService extends AbsLedger {
         return ledgerLogisticsDetailVo;
     }
 
-    public PageRes<LogisticsOrderDTO> orderList(LedgerListReq ledgerListReq) {
+    public PageRes<AcceptCarriageLogisticsOrderDto> orderList(LedgerListReq ledgerListReq) {
         PageHelper.startPage(ledgerListReq.getPage(), ledgerListReq.getPageSize());
         List<KwpLedgerLogisticsOrder> kwpLedgerLogisticsOrders = logisticsOrderService.queryList(ledgerListReq.getIdLong());
         if (CollectionUtils.isEmpty(kwpLedgerLogisticsOrders)) {
             return new PageRes<>();
         }
         PageInfo<KwpLedgerLogisticsOrder> pageInfo = new PageInfo<>(kwpLedgerLogisticsOrders);
-        List<LogisticsOrderDTO> acceptCarriageOrderList = transportRemoteService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> String.valueOf(a.getLOrderId())).toList());
+        List<AcceptCarriageLogisticsOrderDto> acceptCarriageOrderList = transportRemoteService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> String.valueOf(a.getLOrderId())).toList());
         return PageRes.build(pageInfo, acceptCarriageOrderList);
     }
 
 
-    public List<LogisticsOrderDTO> queryOrderList(LedgerListReq ledgerListReq) {
+    public List<AcceptCarriageLogisticsOrderDto> queryOrderList(LedgerListReq ledgerListReq) {
         List<KwpLedgerLogisticsOrder> kwpLedgerLogisticsOrders = logisticsOrderService.queryList(ledgerListReq.getIdLong());
         if (CollectionUtils.isEmpty(kwpLedgerLogisticsOrders)) {
             return new ArrayList<>();
         }
-        List<LogisticsOrderDTO> res = transportRemoteService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> String.valueOf(a.getLOrderId())).toList());
+        List<AcceptCarriageLogisticsOrderDto> 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();

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

@@ -27,7 +27,7 @@ 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.TransportRemoteService;
-import com.sckw.transport.api.model.dto.LogisticsOrderDTO;
+import com.sckw.transport.api.model.dto.AcceptCarriageLogisticsOrderDto;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -125,14 +125,14 @@ public class LedgerLogisticsService extends AbsLedger {
         return new PageRes<>(ledgerShipperDtoPageInfo);
     }
 
-    public PageRes<LogisticsOrderDTO> orderList(LedgerListReq ledgerListReq) {
+    public PageRes<AcceptCarriageLogisticsOrderDto> orderList(LedgerListReq ledgerListReq) {
         PageHelper.startPage(ledgerListReq.getPage(), ledgerListReq.getPageSize());
         List<KwpLedgerLogisticsOrder> kwpLedgerLogisticsOrders = logisticsOrderService.queryList(ledgerListReq.getIdLong());
         if (CollectionUtils.isEmpty(kwpLedgerLogisticsOrders)) {
             return new PageRes<>();
         }
         PageInfo<KwpLedgerLogisticsOrder> pageInfo = new PageInfo<>(kwpLedgerLogisticsOrders);
-        List<LogisticsOrderDTO> acceptCarriageOrderList = transportRemoteService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> String.valueOf(a.getLOrderId())).toList());
+        List<AcceptCarriageLogisticsOrderDto> 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 = transportRemoteService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> Long.toString(a.getLOrderId())).collect(Collectors.toList()));
+            List<AcceptCarriageLogisticsOrderDto> acceptCarriageOrderList = transportRemoteService.getAcceptCarriageOrderList(kwpLedgerLogisticsOrders.stream().map(a -> Long.toString(a.getLOrderId())).collect(Collectors.toList()));
             if (CollectionUtils.isEmpty(acceptCarriageOrderList)) {
                 ledgerLogisticsDetailVo.setOrderList(new ArrayList<>());
             } else {

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

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

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

@@ -2,7 +2,7 @@ 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.LogisticsOrderDTO;
+import com.sckw.transport.api.model.dto.AcceptCarriageLogisticsOrderDto;
 import com.sckw.transport.api.model.vo.LogisticsOrderVO;
 import com.sckw.transport.model.KwtLogisticsOrder;
 import com.sckw.transport.model.dto.LogisticsOrderDto;
@@ -150,7 +150,7 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      * @param ids
      * @return
      */
-    List<LogisticsOrderDTO> selectLogisticOrderList(@Param("ids") List<String> ids,@Param("status") Integer status);
+    List<AcceptCarriageLogisticsOrderDto> selectLogisticOrderList(@Param("ids") List<String> ids, @Param("status") Integer status);
 
     /**
      * 通过物流订单id获取统计数据

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

@@ -5,11 +5,11 @@ import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.google.common.collect.Lists;
-import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.common.enums.enums.DictEnum;
 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.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.utils.CollectionUtils;
@@ -29,10 +29,7 @@ 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.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;
-import com.sckw.transport.api.model.dto.RWaybillOrderDto;
+import com.sckw.transport.api.model.dto.*;
 import com.sckw.transport.api.model.param.ContractSignLogisticsParam;
 import com.sckw.transport.api.model.param.LogisticsOrderParam;
 import com.sckw.transport.api.model.vo.KwtLogisticsOrderVO;
@@ -130,8 +127,8 @@ public class TransportServiceImpl implements TransportRemoteService {
      * @return
      */
     @Override
-    public List<LogisticsOrderDTO> getAcceptCarriageOrderList(List<String> ids) {
-        List<LogisticsOrderDTO> list = logisticsOrderMapper.selectLogisticOrderList(ids, LogisticsOrderEnum.HAVE_FINISHED.getCode());
+    public List<AcceptCarriageLogisticsOrderDto> getAcceptCarriageOrderList(List<String> ids) {
+        List<AcceptCarriageLogisticsOrderDto> list = logisticsOrderMapper.selectLogisticOrderList(ids, LogisticsOrderEnum.HAVE_FINISHED.getCode());
         /**计量单位*/
         Map<String, String> unitTypeDictData = getDictData(DictTypeEnum.UNIT_TYPE.getType());
         /**运价方式*/
@@ -143,7 +140,7 @@ public class TransportServiceImpl implements TransportRemoteService {
         /**合理损耗*/
         Map<String, String> taxRateTypeDictData = getDictData(DictTypeEnum.TAX_RATE_TYPE.getType());
         if (CollectionUtils.isNotEmpty(list)) {
-            for (LogisticsOrderDTO logisticsOrderDTO : list) {
+            for (AcceptCarriageLogisticsOrderDto logisticsOrderDTO : list) {
                 String tOrderId = logisticsOrderDTO.getTOrderId();
                 if (StringUtils.isNotBlank(tOrderId)) {
                     try {

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

@@ -187,7 +187,7 @@ public class AddOrderDTO {
      * 结算周期(周结、月结、季结)
      */
     @Min(value = 0, message = "必须大于等于{value}")
-    @Max(value = 4, message = "必须小于等于{value}")
+    @Max(value = 5, message = "必须小于等于{value}")
     private Long settlementCycle;
 
     /**

+ 284 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/AddLogisticsOrderParam.java

@@ -0,0 +1,284 @@
+package com.sckw.transport.model.param;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.sckw.transport.model.dto.AddressInfoDto;
+import com.sckw.transport.model.dto.LineFreightDto;
+import jakarta.validation.constraints.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.validator.constraints.Length;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * @author lfdc
+ * @description 物流订单自建订单v4.2
+ * @date 2024-03-05 09:03:01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AddLogisticsOrderParam implements Serializable {
+
+    /**
+     * 订单类型 托运订单:1/承运订单新建:2
+     */
+    private String type;
+    /**
+     * 托运单位
+     */
+    @NotBlank(message = "托运单位名称不能为空")
+    private String consignCompany;
+    /**
+     * 托运单位id
+     */
+    @NotBlank(message = "托运单位id不能为空")
+    private String consignCompanyId;
+
+    /**
+     * 托运联系电话
+     */
+    @NotBlank(message = "托运联系电话不能为空")
+    private String consignContactPhone;
+
+    /**
+     * 托运联系人
+     */
+    @NotBlank(message = "托运联系人不能为空")
+    private String consignContacts;
+
+    /**
+     * 托运联系人id
+     */
+    @NotBlank(message = "托运联系人id不能为空")
+    private String consignContactsId;
+
+    /**
+     * 承运单位
+     */
+    @NotBlank(message = "承运单位不能为空")
+    private String acceptCompany;
+
+    /**
+     * 承运单位ID
+     */
+    @NotBlank(message = "承运单位ID不能为空")
+    private String acceptCompanyId;
+
+    /**
+     * 承运联系电话
+     */
+    @NotBlank(message = "承运联系电话不能为空")
+    private String acceptContactPhone;
+
+
+    /**
+     * 承运联系人
+     */
+    @NotBlank(message = "承运联系人id不能为空")
+    private String acceptContacts;
+
+    /**
+     * 承运联系人id
+     */
+    @NotBlank(message = "承运联系人id不能为空")
+    private String acceptContactsId;
+
+
+    /**
+     * goodsId
+     */
+    @NotNull(message = "goodsId不能为空")
+    private Long goodsId;
+
+    /**
+     * skuId
+     */
+//    @NotNull(message = "goodsId不能为空")
+    private Long skuId;
+
+    /**
+     * 货物名称
+     */
+    @NotNull(message = "货物名称不能为空")
+    private String goodsName;
+
+    /**
+     * 货物类型
+     */
+    @NotBlank(message = "货物类型不能为空")
+    private String goodsType;
+
+    /**
+     * 计费方式
+     */
+    @NotNull(message = "计费方式不能为空")
+    private String billingMode;
+
+    /**
+     * 计费方式类型
+     */
+    @NotNull(message = "计费方式类型不能为空")
+    private String billingModeType;
+
+    /**
+     * 运价
+     */
+    @NotNull(message = "运价不能为空")
+    @Digits(integer = 10, fraction = 2, message = "装货量格式错误")
+    @DecimalMin(value = "0.00", message = "运价最小为{value}")
+    private BigDecimal price;
+
+    /**
+     * 运价方式
+     */
+    @NotNull(message = "运价方式不能为空")
+    @Min(value = 0, message = "必须大于等于{value}")
+    @Max(value = 10, message = "必须小于等于{value}")
+    private Long priceType;
+
+    /**
+     * 税率
+     */
+//    @NotNull(message = "税率不能为空")
+//    @Digits(integer = 10,fraction = 2,message = "税率格式错误")
+//    @DecimalMin(value = "0.00",message = "税率最小为{value}")
+    private BigDecimal taxRate;
+
+    /**
+     * 税率单位
+     */
+    @NotNull(message = "税率单位不能为空")
+    private String taxRateUnit;
+
+    /**
+     * 总量
+     */
+    @NotNull(message = "总量不能为空")
+    @Digits(integer = 10, fraction = 2, message = "总量格式错误")
+    @DecimalMin(value = "0.00", message = "总量最小值为{value}")
+    private BigDecimal amount;
+
+    /**
+     * 总量单位
+     */
+    @NotBlank(message = "总量单位不能为空")
+    private String amountUnit;
+
+    /**
+     * 合理损耗
+     */
+    @Digits(integer = 5, fraction = 2, message = "合理损耗格式错误")
+    @DecimalMin(value = "0.00", message = "合理损耗最小值为{value}")
+    private BigDecimal loss;
+
+    /**
+     * 合理损耗单位
+     */
+    @NotBlank(message = "合理损耗单位不能为空")
+    private String lossUnit;
+
+    /**
+     * 商品价值(扣亏货值)
+     */
+    @Digits(integer = 5, fraction = 2, message = "扣亏货值格式错误")
+    @DecimalMin(value = "0.00", message = "扣亏货值最小值为{value}")
+    private BigDecimal goodsPrice;
+    /**
+     * 商品价值(扣亏货值)单位
+     */
+    @NotBlank(message = "扣亏货值不能为空")
+    private String goodsPriceUnit;
+
+    /**
+     * 计划卸货时间
+     */
+    @NotNull(message = "计划卸货时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate endTime;
+
+    /**
+     * 计划发货时间
+     */
+    @NotNull(message = "计划发货时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate startTime;
+
+    /**
+     * 结算周期(周结、月结、季结)
+     */
+    @Min(value = 0, message = "必须大于等于{value}")
+    @Max(value = 5, message = "必须小于等于{value}")
+    private Long settlementCycle;
+
+    /**
+     * 合同id
+     */
+    @NotNull(message = "合同id不能为空")
+    private String contractId;
+
+    /**
+     * 合同编号
+     */
+    @NotBlank(message = "合同编号不能为空")
+    private String contractNo;
+
+    /**
+     * 合同名称
+     */
+    @NotBlank(message = "合同名称不能为空")
+    private String contractName;
+
+    /**
+     * 支付方式
+     */
+    @NotNull(message = "支付方式不能为空")
+    @Min(value = 0, message = "支付方式必须大于等于{value}")
+//    @Max(value = 4, message = "支付方式必须小于等于{value}")
+    private Long payment;
+
+
+    /**
+     * 签约方式
+     */
+    @NotNull(message = "签约方式不能为空")
+    @Min(value = 0, message = "签约方式必须大于等于{value}")
+    @Max(value = 10, message = "签约方式必须小于等于{value}")
+    private String signingWay;
+
+    /**
+     * 备注
+     */
+    @Length(max = 200, message = "单据编号长度错误最大长度:{max}")
+    private String remark;
+
+//    /**
+//     * 合同信息
+//     */
+//    @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;
+}

+ 4 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtCommonService.java

@@ -334,7 +334,7 @@ public class KwtCommonService {
      * @param appUrl app调整地址
      * @param messageEnum 消息模板
      */
-    private void sendLogisticsCreateByMessage(Long createBy, Long entId, Map<String, Object> map, String pcUrl, String appUrl, MessageEnum messageEnum) {
+    public void sendLogisticsCreateByMessage(Long createBy, Long entId, Map<String, Object> map, String pcUrl, String appUrl, MessageEnum messageEnum) {
         UserCacheResDto userCacheResDto = remoteSystemService.queryUserCacheById(createBy);
         String name = remoteSystemService.queryUserCacheById(createBy).getName();
         //给订单创建人发消息
@@ -367,7 +367,7 @@ public class KwtCommonService {
      * @param appUrl app调整地址
      * @param messageEnum 消息模板
      */
-    private void sendLogisticsCarriageMessage(KwtLogisticsOrderUnit carriageUnit, Map<String, Object> map, String pcUrl, String appUrl, MessageEnum messageEnum) {
+    public void sendLogisticsCarriageMessage(KwtLogisticsOrderUnit carriageUnit, Map<String, Object> map, String pcUrl, String appUrl, MessageEnum messageEnum) {
         //给业务联系人发消息[承运方]
         List<UserInfo> userInfoList = new ArrayList<>();
         UserInfo userInfo = new UserInfo();
@@ -398,7 +398,7 @@ public class KwtCommonService {
      * @param appUrl app调整地址
      * @param messageEnum 消息模板
      */
-    private void sendLogisticsConsignMessage(KwtLogisticsOrderUnit consignUnit, Map<String, Object> map, String pcUrl, String appUrl, MessageEnum messageEnum) {
+    public void sendLogisticsConsignMessage(KwtLogisticsOrderUnit consignUnit, Map<String, Object> map, String pcUrl, String appUrl, MessageEnum messageEnum) {
         //给业务联系人发消息[托运方]
         List<UserInfo> list = new ArrayList<>();
         UserInfo userInfo = new UserInfo();
@@ -427,7 +427,7 @@ public class KwtCommonService {
      * @param carriageUnit 承运单位
      * @param map 消息参数
      */
-    private void sendMessageLogistics(KwtLogisticsOrderUnit checkUnit, KwtLogisticsOrderUnit carriageUnit, Map map) {
+    public void sendMessageLogistics(KwtLogisticsOrderUnit checkUnit, KwtLogisticsOrderUnit carriageUnit, Map map) {
         //给业务联系人发消息[承运方]
         List<UserInfo> userInfoList = new ArrayList<>();
         UserInfo userInfo = new UserInfo();

+ 11 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -44,6 +44,7 @@ import com.sckw.transport.common.config.MessageUrlConfig;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.*;
+import com.sckw.transport.model.param.AddLogisticsOrderParam;
 import com.sckw.transport.model.param.LogisticsConsignmentParam;
 import com.sckw.transport.model.vo.OrderFinishVO;
 import com.sckw.transport.model.vo.PurchaseLogisticOrderExcelVo;
@@ -2161,6 +2162,7 @@ public class KwtLogisticsConsignmentService {
      * @param logisticsConsignmentDto
      * @return
      */
+    @GlobalTransactional
     public HttpResult logisticsOrderConsignment(LogisticsConsignmentDto dto) {
         HttpResult httpResult = ValidUtil.serviceValid(dto);
         if (HttpStatus.SUCCESS_CODE != httpResult.getCode()) {
@@ -2186,4 +2188,13 @@ public class KwtLogisticsConsignmentService {
     private void logisticsConsignmentSave(LogisticsConsignmentDto dto) {
         logisticsOrderConsignmentService.logisticsConsignmentSave(dto);
     }
+
+    /**
+     * 物流订单-自建订单-v4.2
+     * @param addLogisticsOrderParam
+     * @return
+     */
+    public HttpResult addLogisticsOrder(AddLogisticsOrderParam addLogisticsOrderParam) {
+        return logisticsOrderConsignmentService.addLogisticsOrder(addLogisticsOrderParam);
+    }
 }

+ 618 - 15
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderConsignmentService.java

@@ -9,17 +9,23 @@ 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.CooperateTypeEnum;
 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.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.utils.DateUtil;
+import com.sckw.excel.utils.ValidUtil;
 import com.sckw.fleet.api.RemoteFleetService;
 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.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.model.SckwLogisticsOrder;
@@ -39,12 +45,15 @@ 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 com.sckw.transport.model.param.AddLogisticsOrderParam;
 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 org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
 
 import java.math.BigDecimal;
 import java.util.*;
@@ -103,29 +112,32 @@ public class KwtLogisticsOrderConsignmentService {
     public KwtLogisticsOrderLineFreightRateMapper logisticsOrderLineFreightRateMapper;
 
     @Autowired
-    public KwtLogisticsOrderContractMapper kwtLogisticsOrderContractMapper;
+    public KwtLogisticsOrderContractMapper logisticsOrderContractMapper;
 
     @Autowired
-    public KwtLogisticsOrderAddressMapper kwtLogisticsOrderAddressMapper;
+    public KwtLogisticsOrderAddressMapper logisticsOrderAddressMapper;
 
     @Autowired
     public KwtLogisticsOrderAmountMapper logisticsOrderAmountMapper;
 
     @Autowired
-    public KwtLogisticsOrderTrackMapper kwtLogisticsOrderTrackMapper;
+    public KwtLogisticsOrderTrackMapper logisticsOrderTrackMapper;
 
     @Autowired
-    public KwtLogisticsOrderGoodsMapper kwtLogisticsOrderGoodsMapper;
+    public KwtLogisticsOrderGoodsMapper logisticsOrderGoodsMapper;
 
     @Autowired
-    public KwtLogisticsOrderUnitMapper kwtLogisticsOrderUnitMapper;
+    public KwtLogisticsOrderUnitMapper logisticsOrderUnitMapper;
 
     @Autowired
-    public KwtLogisticsOrderMapper kwtLogisticsOrderMapper;
+    public KwtLogisticsOrderMapper logisticsOrderMapper;
 
     @Autowired
     public KwtWaybillOrderMapper waybillOrderMapper;
 
+    @Autowired
+    public KwtLogisticsOrderGoodsMapper goodsMapper;
+
     /**
      * 采购订单/销售订单-物流托运-4.2
      *
@@ -133,7 +145,7 @@ public class KwtLogisticsOrderConsignmentService {
      */
     public void logisticsConsignmentSave(LogisticsConsignmentDto dto) {
         commonService.getRedisGenerateOrderNo();
-        Long count = kwtLogisticsOrderMapper.selectCount(new LambdaQueryWrapper<KwtLogisticsOrder>().eq(KwtLogisticsOrder::getTOrderId, dto.getTOrderId()));
+        Long count = logisticsOrderMapper.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) {
@@ -229,7 +241,7 @@ public class KwtLogisticsOrderConsignmentService {
         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->{
+            lineFreightId.stream().forEach(id -> {
                 if (resMap.get(id) != null) {
                     LineFreightAddressRes res = resMap.get(id);
                     KwtLogisticsOrderLineFreightRate lineFreightRate = new KwtLogisticsOrderLineFreightRate();
@@ -405,7 +417,7 @@ public class KwtLogisticsOrderConsignmentService {
         entity.setCreateBy(LoginUserHolder.getUserId());
         entity.setUpdateBy(LoginUserHolder.getUserId());
         entity.setRemark(dto.getRemark());
-        kwtLogisticsOrderTrackMapper.insert(entity);
+        logisticsOrderTrackMapper.insert(entity);
     }
 
     private void saveLogisticsOrderAddressAndAmount(LogisticsConsignmentDto dto, Long orderId) {
@@ -445,7 +457,7 @@ public class KwtLogisticsOrderConsignmentService {
                     loadOrderAddress.setCityCode(detail.getCityCode());
                     loadOrderAddress.setLng(detail.getLng());
                     loadOrderAddress.setSort(addressInfoDto.getSort());
-                    kwtLogisticsOrderAddressMapper.insert(loadOrderAddress);
+                    logisticsOrderAddressMapper.insert(loadOrderAddress);
 
                     KwtLogisticsOrderAmount orderAmount = new KwtLogisticsOrderAmount();
                     BigDecimal defaultBigDecimal = new BigDecimal("0.00");
@@ -488,7 +500,7 @@ public class KwtLogisticsOrderConsignmentService {
                     unloadOrderAddress.setCityCode(detail.getCityCode());
                     unloadOrderAddress.setLng(detail.getLng());
                     unloadOrderAddress.setSort(addressInfoDto.getSort());
-                    kwtLogisticsOrderAddressMapper.insert(unloadOrderAddress);
+                    logisticsOrderAddressMapper.insert(unloadOrderAddress);
 
                     KwtLogisticsOrderAmount orderAmount = new KwtLogisticsOrderAmount();
                     BigDecimal defaultBigDecimal = new BigDecimal("0.00");
@@ -660,7 +672,7 @@ public class KwtLogisticsOrderConsignmentService {
                 .setUpdateBy(LoginUserHolder.getUserId())
                 .setUpdateTime(new Date())
                 .setContactsId(Long.parseLong(dto.getCheckContactsId()));
-        kwtLogisticsOrderUnitMapper.insert(checkUnit);
+        logisticsOrderUnitMapper.insert(checkUnit);
 
         KwtLogisticsOrderUnit consignUnit = new KwtLogisticsOrderUnit()
                 .setLOrderId(orderId)
@@ -677,7 +689,7 @@ public class KwtLogisticsOrderConsignmentService {
                 .setUpdateBy(LoginUserHolder.getUserId())
                 .setUpdateTime(new Date())
                 .setContactsId(Long.parseLong(dto.getConsignContactsId()));
-        kwtLogisticsOrderUnitMapper.insert(consignUnit);
+        logisticsOrderUnitMapper.insert(consignUnit);
     }
 
     private void saveLogisticsOrderContract(LogisticsConsignmentDto dto, Long orderId) {
@@ -701,7 +713,7 @@ public class KwtLogisticsOrderConsignmentService {
                 kwtLogisticsOrderContract.setUpdateBy(LoginUserHolder.getUserId());
                 kwtLogisticsOrderContract.setCreateTime(new Date());
                 kwtLogisticsOrderContract.setUpdateTime(new Date());
-                kwtLogisticsOrderContractMapper.insert(kwtLogisticsOrderContract);
+                logisticsOrderContractMapper.insert(kwtLogisticsOrderContract);
             }
         });
     }
@@ -753,6 +765,597 @@ public class KwtLogisticsOrderConsignmentService {
         order.setTotalUnloadAmount(decimal);
         order.setTotalLoadAmount(decimal);
         order.setBindStatus(String.valueOf(NumberConstant.ZERO));
-        kwtLogisticsOrderMapper.insert(order);
+        logisticsOrderMapper.insert(order);
+    }
+
+    /**
+     * 物流订单-自建订单-v4.2
+     *
+     * @param addLogisticsOrderParam
+     * @return
+     */
+    @Transactional
+    public HttpResult addLogisticsOrder(AddLogisticsOrderParam addOrderDTO) {
+        commonService.getRedisGenerateOrderNo();
+        /**生成订单编号*/
+        String lOrderNo = OrderGenerateSeqNoUtils.getSeqNo(RedisOrderGenerateEnum.LOGISTICS_ORDER, OrderRuleEnum.LOGISTICS_ORDER, "2", "0", "0");
+        HttpResult httpResult = ValidUtil.serviceValid(addOrderDTO);
+        if (!String.valueOf(HttpStatus.SUCCESS_CODE).equals(String.valueOf(httpResult.getCode()))) {
+            return HttpResult.error(httpResult.getMsg());
+        }
+        checkCreateLogisticOrderParam(addOrderDTO);
+        String consignCompanyId = addOrderDTO.getConsignCompanyId();
+        String acceptCompanyId = addOrderDTO.getAcceptCompanyId();
+        List<FindEntCooperateResVo> entCooperate = manageService.findEntCooperate(Long.parseLong(consignCompanyId), Long.parseLong(acceptCompanyId), CooperateTypeEnum.CARRIAGE.getCode());
+//        if (CollectionUtils.isEmpty(entCooperate)) {
+//            return HttpResult.error("该承运企业与我方企业并无合作关系!");
+//        }
+        /**保存新建数据*/
+        Long lOrderId = new IdWorker(NumberConstant.ONE).nextId();
+        /**根据合同计算当前单据状态*/
+        /**判断生成物流订单应生成哪一种单据状态*/
+        List<Long> contractList = new ArrayList<>();
+        contractList.add(Long.parseLong(addOrderDTO.getContractId()));
+        Map<Long, ContractCommonInfoResDto> longContractCommonInfoResDtoMap = contractService.queryContractBaseInfo(contractList);
+        if (CollectionUtils.isEmpty(longContractCommonInfoResDtoMap)) {
+            throw new BusinessException("新建订单-并未有对应合同,应先签约合同");
+        }
+        if (longContractCommonInfoResDtoMap.get(Long.parseLong(addOrderDTO.getContractId())) == null) {
+            throw new BusinessException("新建订单-并未有对应合同,应先签约合同");
+        }
+        ContractCommonInfoResDto infoResDto = longContractCommonInfoResDtoMap.get(Long.parseLong(addOrderDTO.getContractId()));
+        /**状态判断
+         * 是否是已签约合同
+         * */
+        // 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.WAIT_DELIVERY.getCode();
+        } else {
+            log.info("创建订单异常");
+            throw new BusinessException("自建订单异常");
+        }
+        /**数据保存*/
+        saveCreateLogisticsOrder(addOrderDTO, lOrderId, orderStatus, lOrderNo);
+        saveCreateLogisticsOrderAddressAndAmount(addOrderDTO, lOrderId);
+        saveConsignLogisticsOrderGoods(addOrderDTO, lOrderId, lOrderNo);
+        saveCreateLogisticsOrderContract(addOrderDTO, lOrderId, infoResDto);
+        saveCreateLogisticsOrderTrack(lOrderId, orderStatus);
+        saveCreateLogisticsOrderUnit(addOrderDTO, lOrderId);
+        if ("4".equals(addOrderDTO.getBillingMode())) {
+            saveCreateLogisticsOrderLineFreight(addOrderDTO, lOrderId);
+        }
+        /**保存mongodb*/
+        saveCreateLogisticsOrderToMongoDb(addOrderDTO, orderStatus, lOrderId, lOrderNo, infoResDto);
+        /**消息主体*/
+        String type = addOrderDTO.getType();
+        if (type.equals("1")) {
+            logisticsOrderPush(addOrderDTO, lOrderNo, LoginUserHolder.getUserId(), LoginUserHolder.getEntId());
+        } else if (type.equals("2")) {
+            //托运单位
+            EntCacheResDto entCacheResDto = remoteSystemService.queryEntCacheById(Long.parseLong(addOrderDTO.getConsignCompanyId()));
+            KwtLogisticsOrderUnit consignUnit = new KwtLogisticsOrderUnit();
+            consignUnit.setUnitType(NumberConstant.ONE);
+            consignUnit.setEntId(Long.parseLong(addOrderDTO.getConsignCompanyId()));
+            consignUnit.setTopEntId(entCacheResDto == null ? null : entCacheResDto.getId());
+            consignUnit.setFirmName(addOrderDTO.getConsignCompany());
+            consignUnit.setContactsId(Long.parseLong(addOrderDTO.getConsignContactsId()));
+            //承运单位
+            EntCacheResDto entCacheResDto1 = remoteSystemService.queryEntCacheById(Long.parseLong(addOrderDTO.getAcceptCompanyId()));
+            KwtLogisticsOrderUnit carriageUnit = new KwtLogisticsOrderUnit();
+            carriageUnit.setUnitType(NumberConstant.TWO);
+            carriageUnit.setEntId(Long.parseLong(addOrderDTO.getAcceptCompanyId()));
+            carriageUnit.setTopEntId(entCacheResDto1 == null ? null : entCacheResDto1.getId());
+            carriageUnit.setFirmName(addOrderDTO.getAcceptCompany());
+            carriageUnit.setContactsId(Long.parseLong(addOrderDTO.getAcceptContactsId()));
+            commonService.newSendLogisticsOrderToMessage(consignUnit, carriageUnit, lOrderNo, LoginUserHolder.getUserId(), LoginUserHolder.getEntId()
+                    , messageUrlConfig.getPc().getConsignLogisticsAddOrderUrl(), messageUrlConfig.getApp().getConsignLogisticsAddOrderUrl()
+                    , messageUrlConfig.getPc().getCarriageLogisticsAddOrderUrl(), messageUrlConfig.getApp().getCarriageLogisticsAddOrderUrl()
+                    , MessageEnum.NEW_LOGISTICS_ORDER, MessageEnum.NEW_CARRIAGE_ORDER
+                    , "1"
+            );
+        }
+        return HttpResult.ok();
+    }
+
+    private void saveCreateLogisticsOrderLineFreight(AddLogisticsOrderParam addOrderDTO, Long lOrderId) {
+        List<LineFreightDto> lineFreightList = addOrderDTO.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(lOrderId);
+                    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 saveCreateLogisticsOrderToMongoDb(AddLogisticsOrderParam orderDTO, Integer orderStatus, Long lOrderId, String lOrderNo, ContractCommonInfoResDto infoResDto) {
+        SckwLogisticsOrder order = new SckwLogisticsOrder();
+        order.set_id(lOrderId);
+        order.setLOrderId(lOrderId);
+        order.setLOrderNo(lOrderNo);
+        order.setLOrderPid(null);
+        order.setLOrderPids(String.valueOf(lOrderId));
+        order.setType(NumberConstant.TWO);
+        order.setSettlementCycle(orderDTO.getSettlementCycle());
+        order.setPrice(orderDTO.getPrice());
+        order.setPriceType(order.getPriceType());
+        order.setAmount(orderDTO.getAmount());
+        order.setUnit(orderDTO.getAmountUnit());
+        order.setLoss(orderDTO.getLoss());
+        order.setLossUnit(orderDTO.getLossUnit());
+        order.setGoodsPrice(orderDTO.getGoodsPrice() == null ? null : orderDTO.getGoodsPrice());
+        order.setGoodsPriceUnit(orderDTO.getGoodsPriceUnit());
+        BigDecimal decimal = new BigDecimal(NumberConstant.ZERO);
+        order.setSubcontractAmount(decimal);
+        order.setEntrustAmount(decimal);
+        order.setUnloadAmount(decimal);
+        order.setLoadAmount(decimal);
+        order.setIgnoreAmount(decimal);
+        order.setDeficitAmount(decimal);
+        order.setDeficitPrice(decimal);
+        order.setPayment(orderDTO.getPayment());
+        order.setTaxRate(orderDTO.getTaxRate());
+        order.setRemark(orderDTO.getRemark());
+        order.setStatus(String.valueOf(orderStatus));
+        order.setEntId(LoginUserHolder.getEntId());
+        order.setFirmName(LoginUserHolder.getEntName());
+//        order.setGoodsId(Long.parseLong(orderDTO.getGoodsId()));
+//        order.setGoodsCode(goods == null ? null : goods.getCode());
+        order.setGoodsName(orderDTO.getGoodsName());
+//        order.setGoodsType(goods == null ? null : goods.getGoodsType());
+////        order.setGoodsIndustry(goods == null ? null : goods.get);
+//        order.setGoodsSpec(goods == null ? null : goods.getSpec());
+        order.setContractId(orderDTO.getContractId());
+        order.setContractNo(infoResDto.getContractCode());
+        order.setContractName(infoResDto.getContactName());
+        order.setContractSigningWay(String.valueOf(infoResDto.getSigningWay()));
+        order.setCheckEntId(Long.parseLong(orderDTO.getConsignCompanyId()));
+        Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(Collections.singletonList(Long.parseLong(orderDTO.getConsignCompanyId())));
+        EntCacheResDto ent = entMap.get(Long.parseLong(orderDTO.getConsignCompanyId()));
+        if (Objects.isNull(ent)) {
+            throw new BusinessException("企业:" + orderDTO.getConsignCompany() + "的一级企业信息不存在!");
+        }
+        order.setCheckTopEntId(ent.getId());
+        order.setCheckFirmName(orderDTO.getConsignCompany());
+        order.setCheckContacts(orderDTO.getConsignContacts());
+        order.setCheckPhone(orderDTO.getConsignContactPhone());
+        order.setCarrierEntId(Long.parseLong(orderDTO.getAcceptCompanyId()));
+        Map<Long, EntCacheResDto> entMap1 = remoteSystemService.queryEntTreeByIds(Collections.singletonList(Long.parseLong(orderDTO.getAcceptCompanyId())));
+        EntCacheResDto ent1 = entMap1.get(Long.parseLong(orderDTO.getAcceptCompanyId()));
+        if (Objects.isNull(ent1)) {
+            throw new BusinessException("企业:" + orderDTO.getConsignCompany() + "的一级企业信息不存在!");
+        }
+        order.setCarrierTopEntId(ent1.getId());
+        order.setCarrierFirmName(orderDTO.getAcceptCompany());
+        order.setCarrierContacts(orderDTO.getAcceptContacts());
+        order.setCarrierPhone(orderDTO.getAcceptContactPhone());
+//        order.setLoadType();
+//        order.setLoadContacts(orderDTO.getLoadContacts());
+//        order.setLoadPhone(orderDTO.getLoadPhone());
+//        order.setLoadCityCode(orderDTO.getLoadCityCode());
+//        order.setLoadCityName(orderDTO.getLoadCityName());
+//        order.setLoadDetailAddress(orderDTO.getLoadDetailAddress());
+//        order.setLoadLat(orderDTO.getLoadLat());
+//        order.setLoadLng(orderDTO.getLoadLng());
+////        order.setUnloadType();
+//        order.setUnloadContacts(orderDTO.getUnloadContacts());
+//        order.setUnloadPhone(orderDTO.getUnloadPhone());
+//        order.setUnloadCityCode(orderDTO.getUnloadCityCode());
+//        order.setUnloadCityName(orderDTO.getUnloadCityName());
+//        order.setUnloadDetailAddress(orderDTO.getUnloadDetailAddress());
+//        order.setUnloadLat(orderDTO.getUnloadLat());
+//        order.setUnloadLng(orderDTO.getUnloadLng());
+        order.setCreateBy(LoginUserHolder.getUserId());
+        order.setCreateByName(LoginUserHolder.getUserName());
+        order.setCreateTime(new Date());
+        order.setUpdateBy(LoginUserHolder.getUserId());
+        order.setUpdateByName(LoginUserHolder.getUserName());
+        order.setUpdateTime(new Date());
+//        order.setWOrderNo(lOrderNo);
+        order.setCarryingCapacity(orderDTO.getAmount());
+        order.setBillingMode(orderDTO.getBillingMode());
+        order.setDelFlag(String.valueOf(NumberConstant.ZERO));
+        order.setStartTime(orderDTO.getStartTime() == null ? null : DateUtil.localDateToLocalDateTimeStart(orderDTO.getStartTime()));
+        order.setEndTime(orderDTO.getEndTime() == null ? null : DateUtil.localDateToLocalDateTimeEnd(orderDTO.getEndTime()));
+        SckwBusSum busSum = new SckwBusSum();
+        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+        busSum.setMethod(NumberConstant.ONE);
+        busSum.setObject(order);
+        streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
+
+    }
+
+    private void saveCreateLogisticsOrderUnit(AddLogisticsOrderParam orderDTO, Long lOrderId) {
+        //托运
+        KwtLogisticsOrderUnit consignUnit = new KwtLogisticsOrderUnit();
+        consignUnit.setId(new IdWorker(NumberConstant.ONE).nextId());
+        consignUnit.setLOrderId(lOrderId);
+        consignUnit.setUnitType(NumberConstant.ONE);
+        consignUnit.setEntId(Long.parseLong(orderDTO.getConsignCompanyId()));
+        List<Long> entIds = new ArrayList<>();
+        entIds.add(Long.parseLong(orderDTO.getConsignCompanyId()));
+        entIds.add(Long.parseLong(orderDTO.getAcceptCompanyId()));
+        Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(entIds);
+        EntCacheResDto ent = entMap.get(Long.parseLong(orderDTO.getConsignCompanyId()));
+        if (Objects.isNull(ent)) {
+            throw new BusinessException("企业:" + orderDTO.getConsignCompany() + "的一级企业信息不存在!");
+        }
+        consignUnit.setContactsId(Long.parseLong(orderDTO.getConsignContactsId()));
+        consignUnit.setTopEntId(ent.getId());
+        consignUnit.setFirmName(orderDTO.getConsignCompany());
+        consignUnit.setContacts(orderDTO.getConsignContacts());
+        consignUnit.setPhone(orderDTO.getConsignContactPhone());
+//        consignUnit.setRemark(orderDTO.getRemark());
+        consignUnit.setStatus(NumberConstant.ZERO);
+        consignUnit.setCreateBy(LoginUserHolder.getUserId());
+        consignUnit.setCreateTime(new Date());
+        consignUnit.setUpdateBy(LoginUserHolder.getUserId());
+        consignUnit.setUpdateTime(new Date());
+        //承运
+        KwtLogisticsOrderUnit unit = new KwtLogisticsOrderUnit();
+        unit.setId(new IdWorker(NumberConstant.TWO).nextId());
+        unit.setLOrderId(lOrderId);
+        unit.setUnitType(NumberConstant.TWO);
+        unit.setEntId(Long.parseLong(orderDTO.getAcceptCompanyId()));
+        EntCacheResDto ent1 = entMap.get(Long.parseLong(orderDTO.getAcceptCompanyId()));
+        if (Objects.isNull(ent1)) {
+            throw new BusinessException("企业:" + orderDTO.getAcceptCompany() + "的一级企业信息不存在!");
+        }
+        unit.setContactsId(Long.parseLong(orderDTO.getAcceptContactsId()));
+        unit.setTopEntId(ent1.getId());
+        unit.setFirmName(orderDTO.getAcceptCompany());
+        unit.setContacts(orderDTO.getAcceptContacts());
+        unit.setPhone(orderDTO.getAcceptContactPhone());
+//        unit.setRemark(orderDTO.getRemark());
+        unit.setStatus(NumberConstant.ZERO);
+        unit.setCreateBy(LoginUserHolder.getUserId());
+        unit.setCreateTime(new Date());
+        unit.setUpdateBy(LoginUserHolder.getUserId());
+        unit.setUpdateTime(new Date());
+        logisticsOrderUnitMapper.insert(consignUnit);
+        logisticsOrderUnitMapper.insert(unit);
+
+    }
+
+    private void saveCreateLogisticsOrderTrack(Long lOrderId, Integer orderStatus) {
+        KwtLogisticsOrderTrack track = new KwtLogisticsOrderTrack();
+        track.setId(new IdWorker(NumberConstant.ONE).nextId());
+        track.setLOrderId(lOrderId);
+        track.setStatus(orderStatus);
+        track.setCreateBy(LoginUserHolder.getUserId());
+        track.setCreateTime(new Date());
+        track.setUpdateBy(LoginUserHolder.getUserId());
+        track.setUpdateTime(new Date());
+        logisticsOrderTrackMapper.insert(track);
+    }
+
+    private void saveCreateLogisticsOrderContract(AddLogisticsOrderParam orderDTO, Long lOrderId, ContractCommonInfoResDto infoResDto) {
+        KwtLogisticsOrderContract contract = new KwtLogisticsOrderContract();
+        contract.setId(new IdWorker(NumberConstant.ONE).nextId());
+        contract.setContractId(Long.parseLong(orderDTO.getContractId()));
+        contract.setLOrderId(lOrderId);
+        contract.setContractNo(orderDTO.getContractNo() == null ? infoResDto.getContractCode() : orderDTO.getContractNo());
+        contract.setContractName(orderDTO.getContractName() == null ? infoResDto.getContactName() : orderDTO.getContractName());
+        contract.setSigningWay(orderDTO.getSigningWay() == null ? String.valueOf(infoResDto.getSigningWay()) : orderDTO.getSigningWay());
+        contract.setStatus(NumberConstant.ZERO);
+        contract.setCreateBy(LoginUserHolder.getUserId());
+        contract.setCreateTime(new Date());
+        contract.setUpdateBy(LoginUserHolder.getUserId());
+        contract.setUpdateTime(new Date());
+        logisticsOrderContractMapper.insert(contract);
+    }
+
+    private void saveCreateLogisticsOrderAddressAndAmount(AddLogisticsOrderParam orderDTO, Long lOrderId) {
+        List<AddressInfoDto> addressInfo = orderDTO.getAddressInfo();
+        List<String> addressIds = addressInfo.stream().map(AddressInfoDto::getAddressId).collect(Collectors.toList());
+        Map<Long, EntAddressResDto> addressDetailMap = manageService.queryAddressListByAddressIdList(addressIds);
+        if (addressDetailMap.isEmpty()){
+            return;
+        }
+        Map<Integer, List<AddressInfoDto>> addressMap = addressInfo.stream().collect(Collectors.groupingBy(AddressInfoDto::getAddressType));
+        List<AddressInfoDto> loadAddressInfoDtos = addressMap.get(1);
+        loadAddressInfoDtos.forEach(address -> {
+            EntAddressResDto entAddressResDtos = addressDetailMap.get(Long.parseLong(address.getAddressId()));
+            if (entAddressResDtos.getId() != null) {
+                KwtLogisticsOrderAddress loadAddress = new KwtLogisticsOrderAddress();
+                long addressId = new IdWorker(NumberConstant.ONE).nextId();
+                loadAddress.setId(addressId);
+                loadAddress.setLOrderId(lOrderId);
+                loadAddress.setAddressType(NumberConstant.ONE);
+                loadAddress.setName(entAddressResDtos.getName() == null ? null : entAddressResDtos.getName());
+                loadAddress.setContacts(entAddressResDtos.getContacts());
+                loadAddress.setPhone(entAddressResDtos.getPhone());
+                loadAddress.setCityCode(entAddressResDtos.getCityCode());
+                loadAddress.setCityName(entAddressResDtos.getCityName());
+                loadAddress.setDetailAddress(entAddressResDtos.getDetailAddress());
+                loadAddress.setLat(entAddressResDtos.getLat());
+                loadAddress.setLng(entAddressResDtos.getLng());
+                loadAddress.setEntryType(NumberConstant.FOUR);
+                loadAddress.setStatus(NumberConstant.ZERO);
+                loadAddress.setCreateBy(LoginUserHolder.getUserId());
+                loadAddress.setSort(address.getSort());
+                Date date = new Date();
+                loadAddress.setCreateTime(date);
+                loadAddress.setUpdateBy(LoginUserHolder.getUserId());
+                loadAddress.setUpdateTime(date);
+                logisticsOrderAddressMapper.insert(loadAddress);
+
+                KwtLogisticsOrderAmount orderAmount = new KwtLogisticsOrderAmount();
+                BigDecimal defaultBigDecimal = new BigDecimal("0.00");
+                orderAmount.setLOrderId(lOrderId);
+                orderAmount.setAddressId(addressId);
+                orderAmount.setAmount(address.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);
+            }
+        });
+
+        List<AddressInfoDto> unloadAddressInfoDtos = addressMap.get(2);
+        unloadAddressInfoDtos.forEach(address -> {
+            EntAddressResDto entAddressResDtos = addressDetailMap.get(Long.parseLong(address.getAddressId()));
+            if (entAddressResDtos.getId() != null) {
+                KwtLogisticsOrderAddress unloadAddress = new KwtLogisticsOrderAddress();
+                long addressId = new IdWorker(NumberConstant.ONE).nextId();
+                unloadAddress.setId(addressId);
+                unloadAddress.setLOrderId(lOrderId);
+                unloadAddress.setAddressType(NumberConstant.ONE);
+                unloadAddress.setName(entAddressResDtos.getName() == null ? null : entAddressResDtos.getName());
+                unloadAddress.setContacts(entAddressResDtos.getContacts());
+                unloadAddress.setPhone(entAddressResDtos.getPhone());
+                unloadAddress.setCityCode(entAddressResDtos.getCityCode());
+                unloadAddress.setCityName(entAddressResDtos.getCityName());
+                unloadAddress.setDetailAddress(entAddressResDtos.getDetailAddress());
+                unloadAddress.setLat(entAddressResDtos.getLat());
+                unloadAddress.setLng(entAddressResDtos.getLng());
+                unloadAddress.setEntryType(NumberConstant.FOUR);
+                unloadAddress.setStatus(NumberConstant.ZERO);
+                unloadAddress.setCreateBy(LoginUserHolder.getUserId());
+                unloadAddress.setSort(address.getSort());
+                Date date = new Date();
+                unloadAddress.setCreateTime(date);
+                unloadAddress.setUpdateBy(LoginUserHolder.getUserId());
+                unloadAddress.setUpdateTime(date);
+                logisticsOrderAddressMapper.insert(unloadAddress);
+
+                KwtLogisticsOrderAmount orderAmount = new KwtLogisticsOrderAmount();
+                BigDecimal defaultBigDecimal = new BigDecimal("0.00");
+                orderAmount.setLOrderId(lOrderId);
+                orderAmount.setAddressId(addressId);
+                orderAmount.setAmount(address.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);
+            }
+        });
+    }
+
+    private void saveCreateLogisticsOrder(AddLogisticsOrderParam orderDTO, Long lOrderId, Integer orderStatus, String lOrderNo) {
+        KwtLogisticsOrder order = new KwtLogisticsOrder();
+        order.setId(lOrderId);
+        order.setEntId(LoginUserHolder.getEntId());
+        order.setType(String.valueOf(NumberConstant.TWO));
+        order.setLOrderNo(lOrderNo);
+        order.setPids(lOrderId.toString());
+        order.setSettlementCycle(orderDTO.getSettlementCycle());
+        order.setBillingMode(orderDTO.getBillingMode());
+        order.setPrice(orderDTO.getPrice());
+        order.setPriceType(orderDTO.getPriceType());
+        order.setPayment(orderDTO.getPayment());
+        order.setAmount(orderDTO.getAmount());
+        order.setUnit(orderDTO.getAmountUnit());
+        order.setLoss(orderDTO.getLoss() == null ? null : orderDTO.getLoss());
+        order.setLossUnit(orderDTO.getLossUnit());
+        order.setGoodsPrice(orderDTO.getGoodsPrice() == null ? null : orderDTO.getGoodsPrice());
+        order.setGoodsPriceUnit(orderDTO.getGoodsPriceUnit());
+        order.setStartTime(org.apache.commons.lang3.ObjectUtils.isEmpty(orderDTO.getStartTime()) ?
+                null : DateUtil.localDateToLocalDateTimeStart(orderDTO.getStartTime()));
+        order.setEndTime(org.apache.commons.lang3.ObjectUtils.isEmpty(orderDTO.getEndTime()) ?
+                null : DateUtil.localDateToLocalDateTimeEnd(orderDTO.getEndTime()));
+        BigDecimal decimal = new BigDecimal(NumberConstant.ZERO);
+        order.setSubcontractAmount(decimal);
+        order.setEntrustAmount(decimal);
+        order.setUnloadAmount(decimal);
+        order.setLoadAmount(decimal);
+        order.setIgnoreAmount(decimal);
+        order.setDeficitAmount(decimal);
+        order.setDeficitPrice(decimal);
+        order.setTaxRate(orderDTO.getTaxRate());
+        order.setRemark(orderDTO.getRemark());
+        order.setStatus(orderStatus);
+        order.setCreateBy(LoginUserHolder.getUserId());
+        order.setCreateTime(new Date());
+        order.setUpdateBy(LoginUserHolder.getUserId());
+        order.setUpdateTime(new Date());
+        order.setBindStatus(String.valueOf(NumberConstant.ZERO));
+        order.setTotalUnloadAmount(decimal);
+        order.setTotalLoadAmount(decimal);
+        logisticsOrderMapper.insert(order);
+
+    }
+
+    /**
+     * 物流订单-商品信息
+     *
+     * @param bo       页面请求数据
+     * @param orderId  物流订单表编号
+     * @param lOrderNo 物流订单编号
+     */
+    public void saveConsignLogisticsOrderGoods(AddLogisticsOrderParam bo, Long orderId, String lOrderNo) {
+        KwtLogisticsOrderGoods goods = new KwtLogisticsOrderGoods();
+        goods.setId(new IdWorker(NumberConstant.ONE).nextId());
+//        kwtLogisticsOrderGoods.setGoodsId(bo.getGoodsId());
+        goods.setGoodsName(bo.getGoodsName());
+        goods.setGoodsType(bo.getGoodsType());
+        goods.setSkuId(StringUtils.isBlank(bo.getSkuId()) ? null : bo.getSkuId());
+        goods.setLOrderId(orderId);
+        goods.setLOrderNo(lOrderNo);
+        goods.setUpdateBy(LoginUserHolder.getUserId());
+        goods.setUpdateTime(new Date());
+        goods.setCreateBy(LoginUserHolder.getUserId());
+        goods.setCreateTime(new Date());
+        goodsMapper.insert(goods);
+
+//        //辅助单位
+//        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);
+//            });
+//        }
+    }
+
+
+    public void logisticsOrderPush(AddLogisticsOrderParam addOrderDTO, String lOrderNo, Long createBy, Long entId) {
+        //发起方
+        EntCacheResDto entCacheResDto = remoteSystemService.queryEntCacheById(Long.parseLong(addOrderDTO.getConsignCompanyId()));
+        KwtLogisticsOrderUnit consignUnit = new KwtLogisticsOrderUnit();
+        consignUnit.setUnitType(NumberConstant.ONE);
+        consignUnit.setEntId(Long.parseLong(addOrderDTO.getConsignCompanyId()));
+        consignUnit.setTopEntId(entCacheResDto == null ? null : entCacheResDto.getId());
+        consignUnit.setFirmName(addOrderDTO.getAcceptCompany());
+        consignUnit.setContactsId(Long.parseLong(addOrderDTO.getConsignContactsId()));
+
+        //接收方
+        EntCacheResDto entCacheResDto1 = remoteSystemService.queryEntCacheById(Long.parseLong(addOrderDTO.getAcceptCompanyId()));
+        KwtLogisticsOrderUnit carriageUnit = new KwtLogisticsOrderUnit();
+        carriageUnit.setUnitType(NumberConstant.TWO);
+        carriageUnit.setEntId(Long.parseLong(addOrderDTO.getAcceptCompanyId()));
+        carriageUnit.setTopEntId(entCacheResDto1 == null ? null : entCacheResDto1.getId());
+        carriageUnit.setFirmName(addOrderDTO.getConsignCompany());
+        carriageUnit.setContactsId(Long.parseLong(addOrderDTO.getAcceptContactsId()));
+
+        sendLogisticsOrderToMessage(consignUnit, carriageUnit, lOrderNo, createBy, entId
+                , messageUrlConfig.getPc().getConsignLogisticsAddOrderUrl(), messageUrlConfig.getApp().getConsignLogisticsAddOrderUrl(),
+                messageUrlConfig.getPc().getCarriageLogisticsAddOrderUrl(), messageUrlConfig.getApp().getCarriageLogisticsAddOrderUrl(),
+                MessageEnum.NEW_LOGISTICS_ORDER, MessageEnum.NEW_CARRIAGE_ORDER, "1"
+        );
+
+    }
+
+    /**
+     * 发起物流托运-[贸易订单物流托运确认/承运订单分包托运确认]
+     *
+     * @param consignUnit    托运单位
+     * @param carriageUnit   承运单位
+     * @param orderNo        单据号
+     * @param createBy       创建人
+     * @param entId          创建数据的企业id
+     * @param pcConsignUrl   PC托运地址
+     * @param appConsignUrl  app托运地址
+     * @param pcCarriageUrl  PC承运地址
+     * @param appCarriageUrl app承运地址
+     * @param type           1代表给托运创建人发 2代表给承运创建人发
+     */
+    public void sendLogisticsOrderToMessage(KwtLogisticsOrderUnit consignUnit, KwtLogisticsOrderUnit carriageUnit,
+                                            String orderNo, Long createBy, Long entId,
+                                            String pcConsignUrl, String appConsignUrl,
+                                            String pcCarriageUrl, String appCarriageUrl,
+                                            MessageEnum consignMessageEnum,
+                                            MessageEnum carriageMessageEnum,
+                                            String type) {
+        boolean flag = createBy.equals(consignUnit.getContactsId()) || createBy.equals(carriageUnit.getContactsId());
+        Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN);
+        map.put("orderNo", orderNo);
+        if (flag && createBy.equals(consignUnit.getContactsId())) {
+            commonService.sendLogisticsConsignMessage(consignUnit, map, pcConsignUrl, appConsignUrl, consignMessageEnum);
+            commonService.sendLogisticsCarriageMessage(carriageUnit, map, pcCarriageUrl, appCarriageUrl, carriageMessageEnum);
+        } else if (flag && createBy.equals(carriageUnit.getContactsId())) {
+            commonService.sendLogisticsCarriageMessage(carriageUnit, map, pcCarriageUrl, appCarriageUrl, carriageMessageEnum);
+            commonService.sendLogisticsConsignMessage(consignUnit, map, pcConsignUrl, appConsignUrl, consignMessageEnum);
+        } else {
+            commonService.sendLogisticsConsignMessage(consignUnit, map, pcConsignUrl, appConsignUrl, consignMessageEnum);
+            commonService.sendLogisticsCarriageMessage(carriageUnit, map, pcCarriageUrl, appCarriageUrl, carriageMessageEnum);
+            if ("1".equals(type)) {
+                map.put("companyName", consignUnit.getFirmName());
+                commonService.sendLogisticsCreateByMessage(createBy, entId, map, pcConsignUrl, appConsignUrl, consignMessageEnum);
+            } else {
+                map.put("companyName", carriageUnit.getFirmName());
+                commonService.sendLogisticsCreateByMessage(createBy, entId, map, pcCarriageUrl, appCarriageUrl, carriageMessageEnum);
+            }
+        }
+    }
+
+
+    /**
+     * 校验请求参数
+     *
+     * @param addLogisticsOrderParam
+     */
+    private void checkCreateLogisticOrderParam(AddLogisticsOrderParam addLogisticsOrderParam) {
+
+        if (!ObjectUtils.isEmpty(addLogisticsOrderParam.getTaxRate())) {
+            if (addLogisticsOrderParam.getTaxRate().compareTo(new BigDecimal(NumberConstant.ZERO)) < 0) {
+                throw new BusinessException("税率填写格式错误!");
+            }
+        }
+        if (!ObjectUtils.isEmpty(addLogisticsOrderParam.getLoss())) {
+            if (addLogisticsOrderParam.getLoss().compareTo(new BigDecimal(NumberConstant.ZERO)) < 0) {
+                throw new BusinessException("合理损耗填写格式错误!");
+            }
+        }
+        if (!ObjectUtils.isEmpty(addLogisticsOrderParam.getGoodsPrice())) {
+            if (addLogisticsOrderParam.getGoodsPrice().compareTo(new BigDecimal(NumberConstant.ZERO)) < 0) {
+                throw new BusinessException("扣亏货值填写格式错误!");
+            }
+        }
     }
 }

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

@@ -786,7 +786,7 @@
         </where>
     </select>
 
-    <select id="selectLogisticOrderList" resultType="com.sckw.transport.api.model.dto.LogisticsOrderDTO">
+    <select id="selectLogisticOrderList" resultType="com.sckw.transport.api.model.dto.AcceptCarriageLogisticsOrderDto">
         SELECT DISTINCT a.id                  AS lOrderId,
                         a.l_order_no          AS lOrderNO,
                         a.t_order_id          AS tOrderId,