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

托运订单-页面自建订单

lengfaqiang 2 лет назад
Родитель
Сommit
ffe3d63d8c

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

@@ -272,7 +272,7 @@ public class AcceptCarriageOrderController {
      * @return
      */
     @RequestMapping(value = "/addOrder", method = RequestMethod.POST)
-    public HttpResult addOrder(@Validated @RequestBody AddOrderDTO addOrderDTO) {
+    public HttpResult addOrder(@Valid @RequestBody AddOrderDTO addOrderDTO) {
         try {
             return acceptCarriageOrderService.addOrder(addOrderDTO);
         } catch (Exception e) {

+ 18 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/ConsignOrderController.java

@@ -2,9 +2,11 @@ package com.sckw.transport.controller;
 
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.transport.model.dto.AddOrderDTO;
 import com.sckw.transport.model.dto.OrderDTO;
 import com.sckw.transport.model.dto.OrderFinishDTO;
 import com.sckw.transport.service.ConsignOrderService;
+import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.RequiredArgsConstructor;
@@ -103,4 +105,20 @@ public class ConsignOrderController {
         }
     }
 
+    /**
+     * 托运订单-新建订单
+     *
+     * @param addOrderDTO 页面传递参数
+     * @return
+     */
+    @RequestMapping(value = "/addOrder", method = RequestMethod.POST)
+    public HttpResult addOrder(@Valid @RequestBody AddOrderDTO addOrderDTO) {
+        try {
+            return consignOrderService.addOrder(addOrderDTO);
+        } catch (Exception e) {
+            log.error("托运订单-新建订单 error:{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
 }

+ 8 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrder.java

@@ -2,6 +2,10 @@ package com.sckw.transport.model;
 
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.Digits;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -73,11 +77,15 @@ public class KwtLogisticsOrder implements Serializable {
     /**
      * 运价方式(元/吨、元/车)
      */
+    @Min(value = 0,message = "运价方式类型不能大于等于{value}")
+    @Max(value = 4,message = "运价方式类型不能大于等于{value}")
     private Long priceType;
 
     /**
      * 已委托量
      */
+    @Digits(integer = 10,fraction = 2,message = "委托量格式不正确")
+    @DecimalMin(value = "0.00",message = "委托量不能小于{value}")
     private BigDecimal amount;
 
     /**

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

@@ -1,9 +1,6 @@
 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 jakarta.validation.constraints.*;
 import lombok.Data;
 import org.hibernate.validator.constraints.Length;
 
@@ -95,7 +92,7 @@ public class AddOrderDTO {
     /**
      * 运价
      */
-    @NotBlank(message = "运价不能为空")
+    @NotNull(message = "运价不能为空")
     @Digits(integer = 10, fraction = 2, message = "装货量格式错误")
     @DecimalMin(value = "0.00", message = "运价最小为{value}")
     private BigDecimal price;
@@ -104,7 +101,9 @@ public class AddOrderDTO {
      * 运价方式
      */
     @NotNull(message = "运价方式不能为空")
-    private String priceType;
+    @Min(value = 0, message = "必须大于等于{value}")
+    @Max(value = 4, message = "必须小于等于{value}")
+    private Long priceType;
 
     /**
      * 税率
@@ -117,15 +116,15 @@ public class AddOrderDTO {
     /**
      * 税率单位
      */
-    @NotBlank(message = "税率单位不能为空")
-    private Long taxRateUnit;
+    @NotNull(message = "税率单位不能为空")
+    private String taxRateUnit;
 
     /**
      * 总量
      */
     @NotNull(message = "总量不能为空")
     @Digits(integer = 10, fraction = 2, message = "总量格式错误")
-    @DecimalMin(value = "0.00",message = "总量最小值为{value}")
+    @DecimalMin(value = "0.00", message = "总量最小值为{value}")
     private BigDecimal amount;
 
     /**
@@ -138,7 +137,7 @@ public class AddOrderDTO {
      * 合理损耗
      */
     @Digits(integer = 10, fraction = 2, message = "合理损耗格式错误")
-    @DecimalMin(value = "0.00",message = "合理损耗最小值为{value}")
+    @DecimalMin(value = "0.00", message = "合理损耗最小值为{value}")
     private BigDecimal loss;
 
     /**
@@ -150,8 +149,8 @@ public class AddOrderDTO {
      * 商品价值(扣亏货值)
      */
     @Digits(integer = 10, fraction = 2, message = "扣亏货值格式错误")
-    @DecimalMin(value = "0.00",message = "扣亏货值最小值为{value}")
-    private Long goodsPrice;
+    @DecimalMin(value = "0.00", message = "扣亏货值最小值为{value}")
+    private BigDecimal goodsPrice;
     /**
      * 商品价值(扣亏货值)单位
      */
@@ -173,8 +172,9 @@ public class AddOrderDTO {
     /**
      * 结算周期(周结、月结、季结)
      */
-    @NotNull(message = "结算周期不能为空")
-    private String settlementCycle;
+    @Min(value = 0, message = "必须大于等于{value}")
+    @Max(value = 4, message = "必须小于等于{value}")
+    private Long settlementCycle;
 
     /**
      * 合同id
@@ -197,8 +197,10 @@ public class AddOrderDTO {
     /**
      * 合同签约方式
      */
-    @NotBlank(message = "合同签约方式不能为空")
-    private String payment;
+    @NotNull(message = "合同签约方式不能为空")
+    @Min(value = 0,message = "合同签约方式必须大于等于{value}")
+    @Max(value = 4,message = "合同签约方式必须小于等于{value}")
+    private Long payment;
 
     /**
      * 备注
@@ -221,8 +223,10 @@ public class AddOrderDTO {
     /**
      * 装货城市编码
      */
-    @NotBlank(message = "装货城市编码不能为空")
-    private String loadCityCode;
+    @NotNull(message = "装货城市编码不能为空")
+    @Min(value = 0,message = "城市编码必须大于等于{value}")
+    @Max(value = 999,message = "城市编码必须小于等于{value}")
+    private Integer loadCityCode;
 
     /**
      * 装货城市名称
@@ -249,8 +253,10 @@ public class AddOrderDTO {
     /**
      * 卸货城市编码
      */
-    @NotBlank(message = "卸货城市编码不能为空")
-    private String unloadCityCode;
+    @NotNull(message = "卸货城市编码不能为空")
+    @Min(value = 0,message = "卸货城市编码必须大于等于{value}")
+    @Max(value = 999,message = "卸货城市编码必须小于等于{value}")
+    private Integer unloadCityCode;
 
     /**
      * 卸货城市名称

+ 87 - 38
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java

@@ -10,6 +10,7 @@ import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
 import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.common.enums.StringConstant;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
+import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.utils.*;
@@ -1093,6 +1094,11 @@ public class AcceptCarriageOrderService {
      */
     @Transactional(rollbackFor = Exception.class)
     public HttpResult addOrder(AddOrderDTO orderDTO) throws ParseException {
+        HttpResult httpResult = ValidUtil.serviceValid(orderDTO);
+        if (!String.valueOf(HttpStatus.SUCCESS_CODE).equals(String.valueOf(httpResult.getCode()))) {
+            return HttpResult.error(httpResult.getMsg());
+        }
+        checkAddOrderParam(orderDTO);
         /**保存新建数据*/
         Long lOrderId = new IdWorker(NumberConstant.ONE).nextId();
         /**生成订单编号*/
@@ -1123,15 +1129,69 @@ public class AcceptCarriageOrderService {
             log.info("承运订单创建订单异常");
             throw new RuntimeException("自建订单异常");
         }
+        //todo dubbo根据企业获取地址信息
+        /**获取商品信息*/
+        KwpGoods goods = goodsInfoService.getGoodsById(Long.parseLong(orderDTO.getGoodsId()));
+        if (goods == null) {
+            log.info("自建订单获取商品信息失败 商品id:{},商品名称:{}", orderDTO.getGoodsId(), orderDTO.getGoodsName());
+            throw new BusinessException("商品信息获取失败");
+        }
         saveLogisticsOrder(orderDTO, lOrderId, orderStatus, lOrderNo);
         saveLogisticsOrderAddress(orderDTO, lOrderId);
+        saveLogisticsOrderGoods(orderDTO, lOrderId, lOrderNo, goods);
         saveLogisticsOrderContract(orderDTO, lOrderId, status);
         saveLogisticsOrderTrack(lOrderId, orderStatus);
         saveLogisticsOrderUnit(orderDTO, lOrderId);
-        saveMongoDb(orderDTO, orderStatus, lOrderId, lOrderNo, infoResDto);
+        saveMongoDb(orderDTO, orderStatus, lOrderId, lOrderNo, infoResDto, goods);
         return HttpResult.ok();
     }
 
+    /**
+     * 承运订单-页面新增订单-商品信息
+     *
+     * @param orderDTO 页面参数
+     * @param lOrderId 订单id
+     * @param lOrderNo 订单编号
+     * @param kwpGoods 商品信息
+     */
+    private void saveLogisticsOrderGoods(AddOrderDTO orderDTO, Long lOrderId, String lOrderNo, KwpGoods kwpGoods) {
+        KwtLogisticsOrderGoods goods = new KwtLogisticsOrderGoods();
+        goods.setId(new IdWorker(NumberConstant.ONE).nextId());
+        goods.setLOrderId(lOrderId);
+        goods.setLOrderNo(lOrderNo);
+        goods.setGoodsId(Long.parseLong(orderDTO.getGoodsId()));
+        goods.setGoodsName(kwpGoods.getName());
+        goods.setStatus(kwpGoods.getStatus());
+        goods.setCreateBy(LoginUserHolder.getUserId());
+        goods.setCreateTime(new Date());
+        goods.setUpdateBy(LoginUserHolder.getUserId());
+        goods.setUpdateTime(new Date());
+        kwtLogisticsOrderGoodsMapper.insert(goods);
+    }
+
+    /**
+     * 校验请求参数
+     *
+     * @param orderDTO
+     */
+    private void checkAddOrderParam(AddOrderDTO orderDTO) {
+        if (!ObjectUtils.isEmpty(orderDTO.getTaxRate())) {
+            if (orderDTO.getTaxRate().compareTo(new BigDecimal(NumberConstant.ZERO)) < 0) {
+                throw new BusinessException("税率填写格式错误!");
+            }
+        }
+        if (!ObjectUtils.isEmpty(orderDTO.getLoss())) {
+            if (orderDTO.getTaxRate().compareTo(new BigDecimal(NumberConstant.ZERO)) < 0) {
+                throw new BusinessException("税率填写格式错误!");
+            }
+        }
+        if (!ObjectUtils.isEmpty(orderDTO.getGoodsPrice())) {
+            if (orderDTO.getTaxRate().compareTo(new BigDecimal(NumberConstant.ZERO)) < 0) {
+                throw new BusinessException("税率填写格式错误!");
+            }
+        }
+    }
+
     /**
      * 承运订单-新建订单-保存mongodb
      *
@@ -1140,8 +1200,9 @@ public class AcceptCarriageOrderService {
      * @param lOrderId    主体订单id
      * @param lOrderNo    主体订单编号
      * @param infoResDto  合同信息
+     * @param goods       商品信息
      */
-    private void saveMongoDb(AddOrderDTO orderDTO, Integer orderStatus, Long lOrderId, String lOrderNo, ContractCommonInfoResDto infoResDto) {
+    private void saveMongoDb(AddOrderDTO orderDTO, Integer orderStatus, Long lOrderId, String lOrderNo, ContractCommonInfoResDto infoResDto, KwpGoods goods) {
         SckwLogisticsOrder order = new SckwLogisticsOrder();
         order.set_id(lOrderId);
         order.setLOrderId(lOrderId);
@@ -1149,14 +1210,14 @@ public class AcceptCarriageOrderService {
         order.setLOrderPid(null);
         order.setLOrderPids(String.valueOf(lOrderId));
         order.setType(NumberConstant.TWO);
-        order.setSettlementCycle(Long.parseLong(orderDTO.getSettlementCycle()));
+        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 : new BigDecimal(orderDTO.getGoodsPrice()));
+        order.setGoodsPrice(orderDTO.getGoodsPrice() == null ? null : orderDTO.getGoodsPrice());
         order.setGoodsPriceUnit(orderDTO.getGoodsPriceUnit());
         BigDecimal decimal = new BigDecimal(NumberConstant.ZERO);
         order.setSubcontractAmount(decimal);
@@ -1166,14 +1227,13 @@ public class AcceptCarriageOrderService {
         order.setIgnoreAmount(decimal);
         order.setDeficitAmount(decimal);
         order.setDeficitPrice(decimal);
-        order.setPayment(StringUtils.isBlank(orderDTO.getPayment()) ? null : Long.parseLong(orderDTO.getPayment()));
+        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()));
-        KwpGoods goods = goodsInfoService.getGoodsById(Long.parseLong(orderDTO.getGoodsId()));
         order.setGoodsCode(goods == null ? null : goods.getCode());
         order.setGoodsName(goods == null ? null : goods.getName());
         order.setGoodsType(goods == null ? null : goods.getGoodsType());
@@ -1297,9 +1357,9 @@ public class AcceptCarriageOrderService {
         loadAddress.setAddressType(NumberConstant.ONE);
 //        loadAddress.setName();
 //        loadAddress.setType();
-//        loadAddress.setContacts();
-//        loadAddress.setPhone();
-        loadAddress.setCityCode(Integer.valueOf(orderDTO.getLoadCityCode()));
+        loadAddress.setContacts(orderDTO.getContacts());
+        loadAddress.setPhone(orderDTO.getConsignContactPhone());
+        loadAddress.setCityCode(orderDTO.getLoadCityCode());
         loadAddress.setCityName(orderDTO.getLoadCityName());
         loadAddress.setDetailAddress(orderDTO.getLoadDetailAddress());
         loadAddress.setLat(orderDTO.getLoadLat());
@@ -1318,9 +1378,9 @@ public class AcceptCarriageOrderService {
         unloadAddress.setAddressType(NumberConstant.TWO);
 //        unloadAddress.setName();
 //        unloadAddress.setType();
-//        unloadAddress.setContacts();
-//        unloadAddress.setPhone();
-        unloadAddress.setCityCode(Integer.valueOf(orderDTO.getUnloadCityCode()));
+        unloadAddress.setContacts(orderDTO.getContacts());
+        unloadAddress.setPhone(orderDTO.getAcceptContactPhone());
+        unloadAddress.setCityCode(orderDTO.getUnloadCityCode());
         unloadAddress.setCityName(orderDTO.getUnloadCityName());
         unloadAddress.setDetailAddress(orderDTO.getUnloadDetailAddress());
         unloadAddress.setLat(orderDTO.getUnloadLat());
@@ -1343,28 +1403,16 @@ public class AcceptCarriageOrderService {
      * @param status   合同状态
      */
     private void saveLogisticsOrderContract(AddOrderDTO orderDTO, Long lOrderId, Integer status) {
-        //托运
-        KwtLogisticsOrderContract consignContract = new KwtLogisticsOrderContract();
-        consignContract.setId(new IdWorker(NumberConstant.ONE).nextId());
-        consignContract.setContractId(Long.parseLong(orderDTO.getContractId()));
-        consignContract.setLOrderId(lOrderId);
-        consignContract.setStatus(status);
-        consignContract.setCreateBy(LoginUserHolder.getUserId());
-        consignContract.setCreateTime(new Date());
-        consignContract.setUpdateBy(LoginUserHolder.getUserId());
-        consignContract.setUpdateTime(new Date());
-        //承运
-        KwtLogisticsOrderContract acceptContract = new KwtLogisticsOrderContract();
-        acceptContract.setId(new IdWorker(NumberConstant.TWO).nextId());
-        acceptContract.setContractId(Long.parseLong(orderDTO.getContractId()));
-        acceptContract.setLOrderId(lOrderId);
-        acceptContract.setStatus(status);
-        acceptContract.setCreateBy(LoginUserHolder.getUserId());
-        acceptContract.setCreateTime(new Date());
-        acceptContract.setUpdateBy(LoginUserHolder.getUserId());
-        acceptContract.setUpdateTime(new Date());
-        kwtLogisticsOrderContractMapper.insert(consignContract);
-        kwtLogisticsOrderContractMapper.insert(acceptContract);
+        KwtLogisticsOrderContract contract = new KwtLogisticsOrderContract();
+        contract.setId(new IdWorker(NumberConstant.ONE).nextId());
+        contract.setContractId(Long.parseLong(orderDTO.getContractId()));
+        contract.setLOrderId(lOrderId);
+        contract.setStatus(status);
+        contract.setCreateBy(LoginUserHolder.getUserId());
+        contract.setCreateTime(new Date());
+        contract.setUpdateBy(LoginUserHolder.getUserId());
+        contract.setUpdateTime(new Date());
+        kwtLogisticsOrderContractMapper.insert(contract);
     }
 
     /**
@@ -1382,15 +1430,16 @@ public class AcceptCarriageOrderService {
         order.setType(String.valueOf(NumberConstant.TWO));
         order.setLOrderNo(lOrderNo);
         order.setPids(lOrderId.toString());
-        order.setSettlementCycle(Long.parseLong(orderDTO.getSettlementCycle()));
+        order.setSettlementCycle(orderDTO.getSettlementCycle());
         order.setBillingMode(orderDTO.getBillingMode());
         order.setPrice(orderDTO.getPrice());
-        order.setPriceType(Long.parseLong(orderDTO.getPriceType()));
+        order.setPriceType(orderDTO.getPriceType());
+        order.setPayment(orderDTO.getPayment());
         order.setAmount(orderDTO.getAmount());
         order.setUnit(orderDTO.getAmountUnit());
-        order.setLoss(orderDTO.getLossUnit() == null ? null : new BigDecimal((orderDTO.getLossUnit())));
+        order.setLoss(orderDTO.getLoss() == null ? null : orderDTO.getLoss());
         order.setLossUnit(orderDTO.getLossUnit());
-        order.setGoodsPrice(orderDTO.getGoodsPrice() == null ? null : new BigDecimal((orderDTO.getGoodsPrice())));
+        order.setGoodsPrice(orderDTO.getGoodsPrice() == null ? null : orderDTO.getGoodsPrice());
         order.setGoodsPriceUnit(orderDTO.getGoodsPriceUnit());
         order.setStartTime(org.apache.commons.lang3.StringUtils.isBlank(orderDTO.getStartTime()) ?
                 null : DateUtil.strToDate(StringTimeUtil.fillStart(orderDTO.getStartTime()), StringConstant.DEFAULT_DATE_PATTERN));

+ 366 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ConsignOrderService.java

@@ -2,12 +2,16 @@ package com.sckw.transport.service;
 
 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.NumberConstant;
 import com.sckw.core.common.enums.StringConstant;
+import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.IdWorker;
+import com.sckw.core.utils.StringTimeUtil;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
@@ -16,10 +20,13 @@ import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.fleet.api.model.vo.RTruckVo;
 import com.sckw.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.model.SckwLogisticsOrder;
+import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.product.api.model.KwpGoods;
 import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
+import com.sckw.transport.model.dto.AddOrderDTO;
 import com.sckw.transport.model.dto.OrderDTO;
 import com.sckw.transport.model.dto.OrderFinishDTO;
 import com.sckw.transport.model.vo.CarDataVO;
@@ -35,6 +42,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
 import java.math.BigDecimal;
+import java.text.ParseException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -49,6 +57,11 @@ public class ConsignOrderService {
 
     @DubboReference(version = "2.0.0", group = "design", check = false)
     RemoteSystemService remoteSystemService;
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    RemoteContractService remoteContractService;
+
+    @DubboReference(version = "2.0.0", group = "design", check = false, timeout = 8000)
+    GoodsInfoService goodsInfoService;
 
     @DubboReference(version = "2.0.0", group = "design", check = false)
     RemoteFleetService remoteFleetService;
@@ -65,12 +78,18 @@ public class ConsignOrderService {
     @Autowired
     public KwtLogisticsOrderAddressMapper kwtLogisticsOrderAddressMapper;
 
+    @Autowired
+    public KwtLogisticsOrderContractMapper logisticsOrderContractMapper;
+
     @Autowired
     public KwtLogisticsOrderUnitMapper kwtLogisticsOrderUnitMapper;
 
     @Autowired
     public KwtLogisticsOrderTrackMapper kwtLogisticsOrderTrackMapper;
 
+    @Autowired
+    public KwtLogisticsOrderGoodsMapper logisticsOrderGoodsMapper;
+
     @Autowired
     public KwtWaybillOrderMapper kwtWaybillOrderMapper;
 
@@ -499,11 +518,357 @@ public class ConsignOrderService {
 
     /**
      * 托运订单-完结订单-数据查询展示
-     * @param orderId   物流订单id
+     *
+     * @param orderId 物流订单id
      * @return
      */
     public HttpResult consignOrderFinishDetail(String orderId) {
         OrderFinishVO orderFinishVO = kwtLogisticsOrderMapper.selectOrderFinishData(orderId);
         return HttpResult.ok(orderFinishVO);
     }
+
+    /**
+     * 托运订单-完结订单
+     *
+     * @param addOrderDTO
+     * @return
+     */
+    public HttpResult addOrder(AddOrderDTO addOrderDTO) throws ParseException {
+        /**保存新建数据*/
+        Long lOrderId = new IdWorker(NumberConstant.ONE).nextId();
+        /**生成订单编号*/
+        String lOrderNo = com.sckw.transport.utils.StringUtils.getLOrderNo();
+        /**根据合同计算当前单据状态*/
+        /**判断生成物流订单应生成哪一种单据状态*/
+        List<Long> contractList = new ArrayList<>();
+        contractList.add(Long.parseLong(addOrderDTO.getContractId()));
+        Map<Long, ContractCommonInfoResDto> longContractCommonInfoResDtoMap = remoteContractService.queryContractBaseInfo(contractList);
+        if (CollectionUtils.isEmpty(longContractCommonInfoResDtoMap)) {
+            throw new RuntimeException("托运订单新建订单-并未有对应合同,应先签约合同");
+        }
+        if (longContractCommonInfoResDtoMap.get(Long.parseLong(addOrderDTO.getContractId())) == null) {
+            throw new RuntimeException("托运订单新建订单-并未有对应合同,应先签约合同");
+        }
+        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.PENDING_ORDER.getCode();
+        } else {
+            log.info("托运订单创建订单异常");
+            throw new RuntimeException("自建订单异常");
+        }
+        /**获取商品信息*/
+        KwpGoods goods = goodsInfoService.getGoodsById(Long.parseLong(addOrderDTO.getGoodsId()));
+        if (goods == null) {
+            log.info("自建订单获取商品信息失败 商品id:{},商品名称:{}", addOrderDTO.getGoodsId(), addOrderDTO.getGoodsName());
+            throw new BusinessException("商品信息获取失败");
+        }
+        saveConsignLogisticsOrder(addOrderDTO, lOrderId, orderStatus, lOrderNo);
+        saveConsignLogisticsOrderAddress(addOrderDTO, lOrderId);
+        saveConsignLogisticsOrderGoods(addOrderDTO, lOrderId, lOrderNo, goods);
+        saveConsignLogisticsOrderContract(addOrderDTO, lOrderId, status);
+        saveConsignLogisticsOrderTrack(lOrderId, orderStatus);
+        saveConsignLogisticsOrderUnit(addOrderDTO, lOrderId);
+        saveMongoDb(addOrderDTO, orderStatus, lOrderId, lOrderNo, infoResDto, goods);
+        return HttpResult.ok();
+    }
+
+    /**
+     * 托运订单-页面新增订单-商品信息
+     *
+     * @param addOrderDTO 页面参数
+     * @param lOrderId    订单id
+     * @param lOrderNo    订单编号
+     */
+    private void saveConsignLogisticsOrderGoods(AddOrderDTO addOrderDTO, Long lOrderId, String lOrderNo, KwpGoods kwpGoods) {
+        KwtLogisticsOrderGoods goods = new KwtLogisticsOrderGoods();
+        goods.setId(new IdWorker(NumberConstant.ONE).nextId());
+        goods.setLOrderId(lOrderId);
+        goods.setLOrderNo(lOrderNo);
+        goods.setGoodsId(Long.parseLong(addOrderDTO.getGoodsId()));
+        goods.setGoodsName(kwpGoods.getName());
+        goods.setStatus(kwpGoods.getStatus());
+        goods.setCreateBy(LoginUserHolder.getUserId());
+        goods.setCreateTime(new Date());
+        goods.setUpdateBy(LoginUserHolder.getUserId());
+        goods.setUpdateTime(new Date());
+        logisticsOrderGoodsMapper.insert(goods);
+    }
+
+    /**
+     * 托运订单-页面新增订单-订单主体
+     *
+     * @param addOrderDTO 页面请求参数
+     * @param lOrderId    主体id
+     * @param orderStatus 订单状态
+     * @param lOrderNo    主体订单编号
+     */
+    private void saveConsignLogisticsOrder(AddOrderDTO addOrderDTO, Long lOrderId, Integer orderStatus, String lOrderNo) throws ParseException {
+        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(addOrderDTO.getSettlementCycle());
+        order.setBillingMode(addOrderDTO.getBillingMode());
+        order.setPrice(addOrderDTO.getPrice());
+        order.setPayment(addOrderDTO.getPayment());
+        order.setPriceType(addOrderDTO.getPriceType());
+        order.setAmount(addOrderDTO.getAmount());
+        order.setUnit(addOrderDTO.getAmountUnit());
+        order.setLoss(addOrderDTO.getLoss() == null ? null : addOrderDTO.getLoss());
+        order.setLossUnit(addOrderDTO.getLossUnit());
+        order.setGoodsPrice(addOrderDTO.getGoodsPrice() == null ? null : addOrderDTO.getGoodsPrice());
+        order.setGoodsPriceUnit(addOrderDTO.getGoodsPriceUnit());
+        order.setStartTime(org.apache.commons.lang3.StringUtils.isBlank(addOrderDTO.getStartTime()) ?
+                null : DateUtil.strToDate(StringTimeUtil.fillStart(addOrderDTO.getStartTime()), StringConstant.DEFAULT_DATE_PATTERN));
+        order.setEndTime(org.apache.commons.lang3.StringUtils.isBlank(addOrderDTO.getEndTime()) ?
+                null : DateUtil.strToDate(StringTimeUtil.fillStart(addOrderDTO.getEndTime()), StringConstant.DEFAULT_DATE_PATTERN));
+        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(addOrderDTO.getTaxRate());
+        order.setRemark(addOrderDTO.getRemark());
+        order.setStatus(orderStatus);
+        order.setCreateBy(LoginUserHolder.getUserId());
+        order.setCreateTime(new Date());
+        order.setUpdateBy(LoginUserHolder.getUserId());
+        order.setUpdateTime(new Date());
+        kwtLogisticsOrderMapper.insert(order);
+    }
+
+    /**
+     * 托运订单-新建订单-地址信息保存
+     *
+     * @param addOrderDTO 页面请求参数
+     * @param lOrderId    主体id
+     */
+    private void saveConsignLogisticsOrderAddress(AddOrderDTO addOrderDTO, Long lOrderId) {
+        KwtLogisticsOrderAddress loadAddress = new KwtLogisticsOrderAddress();
+        loadAddress.setId(new IdWorker(NumberConstant.ONE).nextId());
+        loadAddress.setLOrderId(lOrderId);
+        loadAddress.setAddressType(NumberConstant.ONE);
+//        loadAddress.setName();
+//        loadAddress.setType();
+//        loadAddress.setContacts();
+//        loadAddress.setPhone();
+        loadAddress.setCityCode(addOrderDTO.getLoadCityCode());
+        loadAddress.setCityName(addOrderDTO.getLoadCityName());
+        loadAddress.setDetailAddress(addOrderDTO.getLoadDetailAddress());
+        loadAddress.setLat(addOrderDTO.getLoadLat());
+        loadAddress.setLng(addOrderDTO.getLoadLng());
+        loadAddress.setEntryType(NumberConstant.FOUR);
+        loadAddress.setStatus(NumberConstant.ZERO);
+        loadAddress.setCreateBy(LoginUserHolder.getUserId());
+        Date date = new Date();
+        loadAddress.setCreateTime(date);
+        loadAddress.setUpdateBy(LoginUserHolder.getUserId());
+        loadAddress.setUpdateTime(date);
+
+        KwtLogisticsOrderAddress unloadAddress = new KwtLogisticsOrderAddress();
+        unloadAddress.setId(new IdWorker(NumberConstant.TWO).nextId());
+        unloadAddress.setLOrderId(lOrderId);
+        unloadAddress.setAddressType(NumberConstant.TWO);
+//        unloadAddress.setName();
+//        unloadAddress.setType();
+//        unloadAddress.setContacts();
+//        unloadAddress.setPhone();
+        unloadAddress.setCityCode(addOrderDTO.getUnloadCityCode());
+        unloadAddress.setCityName(addOrderDTO.getUnloadCityName());
+        unloadAddress.setDetailAddress(addOrderDTO.getUnloadDetailAddress());
+        unloadAddress.setLat(addOrderDTO.getUnloadLat());
+        unloadAddress.setLng(addOrderDTO.getUnloadLng());
+        unloadAddress.setEntryType(NumberConstant.FOUR);
+        unloadAddress.setStatus(NumberConstant.ZERO);
+        unloadAddress.setCreateBy(LoginUserHolder.getUserId());
+        unloadAddress.setCreateTime(date);
+        unloadAddress.setUpdateBy(LoginUserHolder.getUserId());
+        unloadAddress.setUpdateTime(date);
+        kwtLogisticsOrderAddressMapper.insert(loadAddress);
+        kwtLogisticsOrderAddressMapper.insert(unloadAddress);
+    }
+
+    /**
+     * 托运订单-新建订单-合体主体
+     *
+     * @param addOrderDTO 页面请求参数
+     * @param lOrderId    主体id
+     * @param status      合同状态
+     */
+    private void saveConsignLogisticsOrderContract(AddOrderDTO addOrderDTO, Long lOrderId, Integer status) {
+        //托运
+        KwtLogisticsOrderContract consignContract = new KwtLogisticsOrderContract();
+        consignContract.setId(new IdWorker(NumberConstant.ONE).nextId());
+        consignContract.setContractId(Long.parseLong(addOrderDTO.getContractId()));
+        consignContract.setLOrderId(lOrderId);
+        consignContract.setStatus(status);
+        consignContract.setCreateBy(LoginUserHolder.getUserId());
+        consignContract.setCreateTime(new Date());
+        consignContract.setUpdateBy(LoginUserHolder.getUserId());
+        consignContract.setUpdateTime(new Date());
+        logisticsOrderContractMapper.insert(consignContract);
+    }
+
+    /**
+     * 托运订单-页面新增订单-订单状态
+     *
+     * @param lOrderId    主体id
+     * @param orderStatus 主体单据状态
+     */
+    private void saveConsignLogisticsOrderTrack(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());
+        kwtLogisticsOrderTrackMapper.insert(track);
+    }
+
+    /**
+     * 托运订单-页面新增订单-订单对应企业单位
+     *
+     * @param addOrderDTO 页面请求参数
+     * @param lOrderId    主体id
+     */
+    private void saveConsignLogisticsOrderUnit(AddOrderDTO addOrderDTO, Long lOrderId) {
+        //托运
+        KwtLogisticsOrderUnit consignUnit = new KwtLogisticsOrderUnit();
+        consignUnit.setId(new IdWorker(NumberConstant.ONE).nextId());
+        consignUnit.setLOrderId(lOrderId);
+        consignUnit.setUnitType(NumberConstant.ONE);
+        consignUnit.setEntId(Long.parseLong(addOrderDTO.getConsignCompanyId()));
+        consignUnit.setFirmName(addOrderDTO.getConsignCompany());
+        consignUnit.setContacts(addOrderDTO.getConsignContacts());
+        consignUnit.setPhone(addOrderDTO.getConsignContactPhone());
+        consignUnit.setRemark(addOrderDTO.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(addOrderDTO.getAcceptCompanyId()));
+        unit.setFirmName(addOrderDTO.getAcceptCompany());
+        unit.setContacts(addOrderDTO.getAcceptContacts());
+        unit.setPhone(addOrderDTO.getAcceptContactPhone());
+        unit.setRemark(addOrderDTO.getRemark());
+        unit.setStatus(NumberConstant.ZERO);
+        unit.setCreateBy(LoginUserHolder.getUserId());
+        unit.setCreateTime(new Date());
+        unit.setUpdateBy(LoginUserHolder.getUserId());
+        unit.setUpdateTime(new Date());
+        kwtLogisticsOrderUnitMapper.insert(consignUnit);
+        kwtLogisticsOrderUnitMapper.insert(unit);
+    }
+
+    /**
+     * 托运订单-新建订单-保存mongodb
+     *
+     * @param addOrderDTO 页面请求参数
+     * @param orderStatus 主体单据状态
+     * @param lOrderId    主体订单id
+     * @param lOrderNo    主体订单编号
+     * @param infoResDto  合同信息
+     * @param goods       商品信息
+     */
+    private void saveMongoDb(AddOrderDTO addOrderDTO, Integer orderStatus, Long lOrderId, String lOrderNo, ContractCommonInfoResDto infoResDto, KwpGoods goods) {
+        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(addOrderDTO.getSettlementCycle());
+        order.setPrice(addOrderDTO.getPrice());
+        order.setPriceType(order.getPriceType());
+        order.setAmount(addOrderDTO.getAmount());
+        order.setUnit(addOrderDTO.getAmountUnit());
+        order.setLoss(addOrderDTO.getLoss());
+        order.setLossUnit(addOrderDTO.getLossUnit());
+        order.setGoodsPrice(addOrderDTO.getGoodsPrice() == null ? null : addOrderDTO.getGoodsPrice());
+        order.setGoodsPriceUnit(addOrderDTO.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(addOrderDTO.getPayment());
+        order.setTaxRate(addOrderDTO.getTaxRate());
+        order.setRemark(addOrderDTO.getRemark());
+        order.setStatus(String.valueOf(orderStatus));
+        order.setEntId(LoginUserHolder.getEntId());
+        order.setFirmName(LoginUserHolder.getEntName());
+        order.setGoodsId(Long.parseLong(addOrderDTO.getGoodsId()));
+        order.setGoodsCode(goods == null ? null : goods.getCode());
+        order.setGoodsName(goods == null ? null : goods.getName());
+        order.setGoodsType(goods == null ? null : goods.getGoodsType());
+//        order.setGoodsIndustry(goods == null ? null : goods.get);
+        order.setGoodsSpec(goods == null ? null : goods.getSpec());
+        order.setContractId(addOrderDTO.getContractId());
+        order.setContractNo(infoResDto.getContractCode());
+        order.setContractName(infoResDto.getContactName());
+        order.setContractSigningWay(String.valueOf(infoResDto.getSigningWay()));
+        order.setCheckEntId(Long.parseLong(addOrderDTO.getConsignCompanyId()));
+        order.setCheckFirmName(addOrderDTO.getConsignCompany());
+        order.setCheckContacts(addOrderDTO.getConsignContacts());
+        order.setCheckPhone(addOrderDTO.getConsignContactPhone());
+        order.setCarrierEntId(Long.parseLong(addOrderDTO.getAcceptCompanyId()));
+        order.setCarrierFirmName(addOrderDTO.getAcceptCompany());
+        order.setCarrierContacts(addOrderDTO.getAcceptContacts());
+        order.setCarrierPhone(addOrderDTO.getAcceptContactPhone());
+//        order.setLoadType();
+//        order.setLoadContacts();
+//        order.setLoadPhone();
+//        order.setLoadCityCode();
+//        order.setLoadCityName();
+//        order.setLoadDetailAddress();
+//        order.setLoadLat();
+//        order.setLoadLng();
+//        order.setUnloadType();
+//        order.setUnloadContacts();
+//        order.setUnloadPhone();
+//        order.setUnloadCityCode();
+//        order.setUnloadCityName();
+//        order.setUnloadDetailAddress();
+//        order.setUnloadLat();
+//        order.setUnloadLng();
+        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(addOrderDTO.getAmount().longValue());
+        order.setBillingMode(addOrderDTO.getBillingMode());
+        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));
+    }
 }