Bladeren bron

1、完结订单;
2、代码格式调整0.00;

zk 2 jaren geleden
bovenliggende
commit
fca14d331f
39 gewijzigde bestanden met toevoegingen van 1133 en 319 verwijderingen
  1. 3 2
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/StringUtils.java
  2. 18 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java
  3. 46 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/CompleteLogisticsOrderV1Param.java
  4. 48 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/CreateOrCancelLogisticsOrderV1Param.java
  5. 31 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/GoodsLoadingParam.java
  6. 37 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/GoodsLoadingV1Param.java
  7. 5 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/OrderDetailRes.java
  8. 9 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderGoodsUnitMapper.java
  9. 123 4
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java
  10. 5 4
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrder.java
  11. 11 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrderGoodsUnit.java
  12. 2 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/GoodsInfo.java
  13. 3 2
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/PurchaseOrderDraftParam.java
  14. 3 2
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/UpdateOrderParam.java
  15. 5 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderDetailRes.java
  16. 21 9
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderGoodsUnitService.java
  17. 1 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  18. 18 2
      sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderGoodsUnitMapper.xml
  19. 3 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/MoneyChange.java
  20. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/WalletService.java
  21. 6 4
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/utils/DecimalUtils.java
  22. 2 1
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderService.java
  23. 1 1
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderStatisticsService.java
  24. 4 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtAcceptCarriageOrderController.java
  25. 9 8
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtConsignOrderController.java
  26. 12 5
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtLogisticsConsignmentController.java
  27. 12 12
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java
  28. 37 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OrderGoodsLoadingDto.java
  29. 32 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OrderManualCompletionDto.java
  30. 2 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/GoodsUnitParam.java
  31. 91 79
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtAcceptCarriageOrderService.java
  32. 68 79
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtConsignOrderService.java
  33. 37 47
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  34. 65 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderGoodsService.java
  35. 13 13
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtManagementLogisticsOrderService.java
  36. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtManagementWaybillOrderService.java
  37. 340 28
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtTransportCommonService.java
  38. 4 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillManagementService.java
  39. 3 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java

+ 3 - 2
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/StringUtils.java

@@ -2,6 +2,7 @@ package com.sckw.core.utils;
 
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.constant.NumberConstant;
 
 import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
@@ -795,7 +796,7 @@ public class StringUtils {
      */
     private BigDecimal setScale(Double d) {
         if (Objects.isNull(d) || BigDecimal.ZERO.compareTo(BigDecimal.valueOf(d)) == 0) {
-            return new BigDecimal("0.00");
+            return NumberConstant.ZERO_TWO;
         }
         return BigDecimal.valueOf(d).setScale(2, RoundingMode.HALF_UP);
     }
@@ -809,7 +810,7 @@ public class StringUtils {
      */
     private BigDecimal setScale(BigDecimal d) {
         if (Objects.isNull(d) || BigDecimal.ZERO.compareTo(d) == 0) {
-            return new BigDecimal("0.00");
+            return NumberConstant.ZERO_TWO;
         }
         return d.setScale(2, RoundingMode.HALF_UP);
     }

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

@@ -37,6 +37,15 @@ public interface TradeOrderInfoService {
      */
     HttpResult createOrCancelLogisticsOrder(CreateOrCancelLogisticsOrderParam param);
 
+    /**
+     * @desc: 生成或撤销物流订单
+     * @author: yzc
+     * @date: 2023-08-03 10:57
+     * @Param param:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    HttpResult createOrCancelLogisticsOrderV1(CreateOrCancelLogisticsOrderV1Param param);
+
     /**
      * @desc: 完结物流订单
      * @author: yzc
@@ -46,6 +55,15 @@ public interface TradeOrderInfoService {
      */
     HttpResult completeLogisticsOrder(CompleteLogisticsOrderParam param);
 
+    /**
+     * @desc: 完结物流订单
+     * @author: yzc
+     * @date: 2023-08-03 11:11
+     * @Param param:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    HttpResult completeLogisticsOrderV1(CompleteLogisticsOrderV1Param param);
+
     /**
      * @desc: 更新订单实际交付量
      * @author: yzc

+ 46 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/CompleteLogisticsOrderV1Param.java

@@ -0,0 +1,46 @@
+package com.sckw.order.api.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @desc: 更新订单委托量、已履约量
+ * @author: yzc
+ * @date: 2023-08-03 10:52
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class CompleteLogisticsOrderV1Param implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 8425395587373735142L;
+
+    /**
+     * 订单id
+     */
+    @JsonProperty("tOrderId")
+    private Long tOrderId;
+
+    /**
+     * 实装变量 减少传负数,增加传正数
+     */
+    List<GoodsLoadingV1Param> loading;
+
+    /**
+     * 更新用户id 需传,订单状态变化记录需要
+     */
+    private Long updateBy;
+
+    /**
+     * 更新者姓名 需传,订单状态变化记录需要
+     */
+    private String updateByName;
+
+}

+ 48 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/CreateOrCancelLogisticsOrderV1Param.java

@@ -0,0 +1,48 @@
+package com.sckw.order.api.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @desc: 更新订单委托量、已履约量
+ * @author: yzc
+ * @date: 2023-08-03 10:52
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class CreateOrCancelLogisticsOrderV1Param implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 8425395587373735142L;
+
+    /**
+     * 订单id
+     */
+    @JsonProperty("tOrderId")
+    private Long tOrderId;
+
+    /**
+     * 任务量  生成物流订单传正数,撤销物流订单传负数
+     */
+    List<GoodsLoadingParam> loading;
+
+    /**
+     * 更新用户id 需传,订单状态变化记录需要
+     */
+    private Long updateBy;
+
+    /**
+     * 更新者姓名 需传,订单状态变化记录需要
+     */
+    private String updateByName;
+
+}

+ 31 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/GoodsLoadingParam.java

@@ -0,0 +1,31 @@
+package com.sckw.order.api.model;
+
+import lombok.Data;
+import java.math.BigDecimal;
+
+/**
+ * @desc 运单装载信息
+ * @author zk
+ * @date 2023/12/7 0007
+ */
+@Data
+public class GoodsLoadingParam {
+
+    /**
+     * 装卸货单位
+     */
+    private String unit;
+
+    /**
+     * 装卸货数量
+     */
+    private BigDecimal amount;
+
+    public GoodsLoadingParam() {
+    }
+
+    public GoodsLoadingParam(String unit, BigDecimal amount) {
+        this.unit = unit;
+        this.amount = amount;
+    }
+}

+ 37 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/GoodsLoadingV1Param.java

@@ -0,0 +1,37 @@
+package com.sckw.order.api.model;
+
+import lombok.Data;
+import java.math.BigDecimal;
+
+/**
+ * @desc 运单装载信息
+ * @author zk
+ * @date 2023/12/7 0007
+ */
+@Data
+public class GoodsLoadingV1Param {
+
+    /**
+     * 装卸货单位
+     */
+    private String unit;
+
+    /**
+     * 装货数量
+     */
+    private BigDecimal actualLoadAmount;
+
+    /**
+     * 卸货数量
+     */
+    private BigDecimal actualUnloadAmount;
+
+    public GoodsLoadingV1Param() {
+    }
+
+    public GoodsLoadingV1Param(String unit, BigDecimal actualLoadAmount, BigDecimal actualUnloadAmount) {
+        this.unit = unit;
+        this.actualLoadAmount = actualLoadAmount;
+        this.actualUnloadAmount = actualUnloadAmount;
+    }
+}

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

@@ -48,6 +48,11 @@ public class OrderDetailRes implements Serializable {
     @JsonProperty("tOrderNo")
     private String tOrderNo;
 
+    /**
+     * 单位(吨、方、件、箱、其他)
+     */
+    private String unit;
+
     /**
      * 订单总量
      */

+ 9 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderGoodsUnitMapper.java

@@ -3,6 +3,7 @@ package com.sckw.order.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.order.model.KwoTradeOrderGoodsUnit;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import java.util.List;
 import java.util.Map;
 
@@ -20,4 +21,12 @@ public interface KwoTradeOrderGoodsUnitMapper extends BaseMapper<KwoTradeOrderGo
      * @return 交易订单商品-单位换算信息
      */
     List<KwoTradeOrderGoodsUnit> findGoodsUnit(Map<String, Object> params);
+
+    /**
+     * 查询交易订单商品信息-单位换算
+     * @param tOrderId 贸易订单
+     * @param unit 单位
+     * @return 交易订单商品信息-单位换算
+     */
+    KwoTradeOrderGoodsUnit findByIdAndUnit(@Param("tOrderId") Long tOrderId, @Param("unit") String unit);
 }

+ 123 - 4
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java

@@ -15,11 +15,9 @@ import com.sckw.order.enums.DeliveryTypeEnum;
 import com.sckw.order.enums.OrderStatusEnum;
 import com.sckw.order.model.KwoTradeOrder;
 import com.sckw.order.model.KwoTradeOrderContract;
+import com.sckw.order.model.KwoTradeOrderGoodsUnit;
 import com.sckw.order.model.KwoTradeOrderTrack;
-import com.sckw.order.serivce.KwoTradeOrderContractService;
-import com.sckw.order.serivce.KwoTradeOrderService;
-import com.sckw.order.serivce.KwoTradeOrderTrackService;
-import com.sckw.order.serivce.KwoTradeOrderUnitService;
+import com.sckw.order.serivce.*;
 import com.sckw.redis.constant.RedisConstant;
 import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.stream.model.SckwBusSum;
@@ -55,6 +53,8 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
     private KwoTradeOrderContractService kwoTradeOrderContractService;
     @Autowired
     private KwoTradeOrderUnitService tradeOrderUnitService;
+    @Autowired
+    private KwoTradeOrderGoodsUnitService tradeOrderGoodsUnitService;
 
     @Override
     public OrderDetailRes getOrderDetailById(Long tOrderId) {
@@ -145,6 +145,60 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         return HttpResult.ok();
     }
 
+    @Override
+    public HttpResult createOrCancelLogisticsOrderV1(CreateOrCancelLogisticsOrderV1Param param) {
+        /*1、数据校验*/
+        Long id = param.getTOrderId();
+        Long updateBy = param.getUpdateBy();
+        String updateByName = param.getUpdateByName();
+        List<GoodsLoadingParam> loading = param.getLoading();
+        if (Objects.isNull(updateBy) || StringUtils.isBlank(updateByName)) {
+            return HttpResult.error("操作人信息不能为空!");
+        }
+        if (CollectionUtils.isEmpty(loading)) {
+            return HttpResult.error("任务量不能为空!");
+        }
+        for (GoodsLoadingParam goodsLoading:loading) {
+            if (StringUtils.isBlank(goodsLoading.getUnit()) || goodsLoading.getAmount() == null) {
+                return HttpResult.error("任务量不能为空!");
+            }
+        }
+
+        /*2、数据处理*/
+        String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, id);
+        if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
+            return HttpResult.error("业务繁忙,请稍后再试!");
+        }
+        try {
+            KwoTradeOrder order = kwoTradeOrderService.getById(id);
+            if (Objects.isNull(order)) {
+                return HttpResult.error("订单不存在!");
+            }
+            if (!Objects.equals(order.getStatus(), OrderStatusEnum.EXECUTING.getCode())) {
+                return HttpResult.error("执行中的订单才可物流托运!");
+            }
+
+            //更新贸易订单/商品辅助单位
+            for (GoodsLoadingParam goodsLoading:loading) {
+                BigDecimal amount = goodsLoading.getAmount();
+                BigDecimal totalEntrustAmount = Objects.isNull(order.getEntrustAmount()) ? amount : amount.add(order.getEntrustAmount());
+                if (goodsLoading.getUnit().equals(order.getUnit())) {
+                    order.setEntrustAmount(totalEntrustAmount).setUpdateBy(param.getUpdateBy());
+                    kwoTradeOrderService.updateById(order);
+
+                    //更新mongodb
+                    SckwTradeOrder updateParam = new SckwTradeOrder();
+                    updateParam.setTOrderId(order.getId()).setEntrustAmount(totalEntrustAmount.doubleValue())
+                            .setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
+                    saveMongoDb(updateParam);
+                }
+            }
+        } finally {
+            RedissonUtils.unlock(lockKey);
+        }
+        return HttpResult.ok();
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResult completeLogisticsOrder(CompleteLogisticsOrderParam param) {
@@ -189,6 +243,71 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         return HttpResult.ok();
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult completeLogisticsOrderV1(CompleteLogisticsOrderV1Param param) {
+        /*1、数据校验*/
+        Long id = param.getTOrderId();
+        Long updateBy = param.getUpdateBy();
+        String updateByName = param.getUpdateByName();
+        List<GoodsLoadingV1Param> loading = param.getLoading();
+        if (Objects.isNull(updateBy) || StringUtils.isBlank(updateByName)) {
+            return HttpResult.error("操作人信息不能为空!");
+        }
+        if (CollectionUtils.isEmpty(loading)) {
+            return HttpResult.error("任务量不能为空!");
+        }
+        for (GoodsLoadingV1Param goodsLoading:loading) {
+            if (StringUtils.isBlank(goodsLoading.getUnit())
+                    || goodsLoading.getActualLoadAmount() == null
+                    || goodsLoading.getActualUnloadAmount() == null) {
+                return HttpResult.error("任务量不能为空!");
+            }
+        }
+
+        /*2、数据处理*/
+        String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, id);
+        if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
+            return HttpResult.error("业务繁忙,请稍后再试!");
+        }
+        KwoTradeOrder order = kwoTradeOrderService.getById(id);
+        if (Objects.isNull(order)) {
+            return HttpResult.error("订单不存在!");
+        }
+        if (!Objects.equals(order.getStatus(), OrderStatusEnum.EXECUTING.getCode())) {
+            return HttpResult.error("执行中的订单才可物流托运!");
+        }
+        try {
+            //更新贸易订单/商品辅助单位
+            for (GoodsLoadingV1Param goodsLoading:loading) {
+                BigDecimal actualLoadAmount = goodsLoading.getActualLoadAmount();
+                BigDecimal actualUnloadAmount = goodsLoading.getActualUnloadAmount();
+
+                BigDecimal actualAmount = Objects.isNull(order.getActualAmount()) ? BigDecimal.ZERO : order.getActualAmount();
+                BigDecimal addActualAmount = Objects.equals(order.getDeliveryType(), DeliveryTypeEnum.ISSUE.getType())
+                        ? actualLoadAmount : actualUnloadAmount;
+                BigDecimal totalActualAmount = actualAmount.add(addActualAmount);
+                if (goodsLoading.getUnit().equals(order.getUnit())) {
+                    order.setActualAmount(totalActualAmount).setUpdateBy(param.getUpdateBy());
+                    kwoTradeOrderService.updateById(order);
+
+                    //更新mongodb
+                    SckwTradeOrder updateParam = new SckwTradeOrder();
+                    updateParam.setTOrderId(order.getId()).setActualAmount(totalActualAmount.doubleValue()).setStatus(order.getStatus())
+                            .setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
+                    saveMongoDb(updateParam);
+                } else {
+                    KwoTradeOrderGoodsUnit goodsUnit = tradeOrderGoodsUnitService.findByIdAndUnit(param.getTOrderId(), goodsLoading.getUnit());
+                    goodsUnit.setActualAmount(totalActualAmount).setUpdateBy(param.getUpdateBy());
+                    tradeOrderGoodsUnitService.updateById(goodsUnit);
+                }
+            }
+        } finally {
+            RedissonUtils.unlock(lockKey);
+        }
+        return HttpResult.ok();
+    }
+
     @Override
     public HttpResult updateActualAmount(UpdateActualAmountParam param) {
         Long id = param.getTOrderId();

+ 5 - 4
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrder.java

@@ -3,6 +3,7 @@ package com.sckw.order.model;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.sckw.core.model.base.BaseModel;
+import com.sckw.core.model.constant.NumberConstant;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -26,10 +27,10 @@ import java.util.Date;
 public class KwoTradeOrder extends BaseModel implements Serializable {
 
     public KwoTradeOrder(){
-        this.amount = new BigDecimal("0.00");
-        this.price = new BigDecimal("0.00");
-        this.entrustAmount = new BigDecimal("0.00");
-        this.actualAmount = new BigDecimal("0.00");
+        this.amount = NumberConstant.ZERO_TWO;
+        this.price = NumberConstant.ZERO_TWO;
+        this.entrustAmount = NumberConstant.ZERO_TWO;
+        this.actualAmount = NumberConstant.ZERO_TWO;
         this.associateStatement = 0;
     }
 

+ 11 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrderGoodsUnit.java

@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import java.io.Serial;
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * @desc 交易订单商品信息-单位换算
@@ -46,4 +47,14 @@ public class KwoTradeOrderGoodsUnit extends BaseModel implements Serializable {
      * 换算值
      */
     private Double conversionValue;
+
+    /**
+     * 实际交付量单位
+     */
+    private String unit;
+
+    /**
+     * 实际交付量
+     */
+    private BigDecimal actualAmount;
 }

+ 2 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/GoodsInfo.java

@@ -1,5 +1,6 @@
 package com.sckw.order.model.vo.req;
 
+import com.sckw.core.model.constant.NumberConstant;
 import jakarta.validation.constraints.DecimalMin;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
@@ -22,7 +23,7 @@ import java.math.BigDecimal;
 public class GoodsInfo {
 
     public GoodsInfo(){
-        this.unitPrice = new BigDecimal("0.00");
+        this.unitPrice = NumberConstant.ZERO_TWO;
     }
     /**
      * 商品id

+ 3 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/PurchaseOrderDraftParam.java

@@ -1,6 +1,7 @@
 package com.sckw.order.model.vo.req;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.sckw.core.model.constant.NumberConstant;
 import jakarta.validation.constraints.*;
 import lombok.Getter;
 import lombok.Setter;
@@ -21,8 +22,8 @@ import java.util.List;
 @ToString
 public class PurchaseOrderDraftParam {
     public PurchaseOrderDraftParam(){
-        this.amount = new BigDecimal("0.00");
-        this.price = new BigDecimal("0.00");
+        this.amount = NumberConstant.ZERO_TWO;
+        this.price = NumberConstant.ZERO_TWO;
     }
     /**
      * 商品信息

+ 3 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/UpdateOrderParam.java

@@ -1,6 +1,7 @@
 package com.sckw.order.model.vo.req;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.sckw.core.model.constant.NumberConstant;
 import jakarta.validation.constraints.*;
 import lombok.Getter;
 import lombok.Setter;
@@ -22,8 +23,8 @@ import java.util.List;
 @ToString
 public class UpdateOrderParam {
     public UpdateOrderParam(){
-        this.amount = new BigDecimal("0.00");
-        this.price = new BigDecimal("0.00");
+        this.amount = NumberConstant.ZERO_TWO;
+        this.price = NumberConstant.ZERO_TWO;
     }
 
     @NotNull(message = "订单id不能为空")

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

@@ -48,6 +48,11 @@ public class OrderDetailRes implements Serializable {
     @JsonProperty("tOrderNo")
     private String tOrderNo;
 
+    /**
+     * 单位(吨、方、件、箱、其他)
+     */
+    private String unit;
+
     /**
      * 订单总量
      */

+ 21 - 9
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderGoodsUnitService.java

@@ -1,24 +1,18 @@
 package com.sckw.order.serivce;
 
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.order.dao.KwoTradeOrderGoodsUnitMapper;
 import com.sckw.order.model.KwoTradeOrderGoodsUnit;
-import com.sckw.order.model.KwoTradeOrderUnit;
 import com.sckw.order.model.vo.res.GoodsUnitDetailRes;
-import com.sckw.system.api.RemoteSystemService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Service;
-
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
 /**
@@ -31,9 +25,6 @@ import java.util.concurrent.atomic.AtomicInteger;
 @RequiredArgsConstructor
 public class KwoTradeOrderGoodsUnitService {
 
-    @DubboReference(version = "1.0.0", group = "design", check = false)
-    private RemoteSystemService remoteSystemService;
-
     private final KwoTradeOrderGoodsUnitMapper goodsUnitMapper;
 
     /**
@@ -84,4 +75,25 @@ public class KwoTradeOrderGoodsUnitService {
         return units;
     }
 
+    /**
+     * @param tOrderId 贸易订单
+     * @param unit 单位
+     * @desc 查询交易订单商品信息-单位换算
+     * @author zk
+     * @date 2023/12/8
+     **/
+    public KwoTradeOrderGoodsUnit findByIdAndUnit(Long tOrderId, String unit) {
+        return goodsUnitMapper.findByIdAndUnit(tOrderId, unit);
+    }
+
+    /**
+     * @param params 辅助单位信息
+     * @desc 更新
+     * @author zk
+     * @date 2023/12/8
+     **/
+    public int updateById(KwoTradeOrderGoodsUnit params){
+        return goodsUnitMapper.updateById(params);
+    }
+
 }

+ 1 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -184,6 +184,7 @@ public class KwoTradeOrderService {
                         KwoTradeOrderGoodsUnit unit = BeanUtils.copyProperties(e, KwoTradeOrderGoodsUnit.class);
                         unit.setGoodsId(goodsDetail.getId());
                         unit.setTOrderId(id);
+                        unit.setUnit(order.getUnit().equals(e.getFromUnit()) ? e.getToUnit() : e.getFromUnit());
                         units.add(unit);
                     });
                     kwoTradeOrderGoodsUnitService.insertBatch(units);

+ 18 - 2
sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderGoodsUnitMapper.xml

@@ -5,8 +5,8 @@
     <select id="findGoodsUnit" resultType="com.sckw.order.model.KwoTradeOrderGoodsUnit" parameterType="java.util.Map" >
         SELECT
         id, t_order_id tOrderId, goods_id goodsId, from_unit fromUnit, to_unit toUnit,
-        conversion_value conversionValue, remark, status, create_by createBy,
-        create_time createTime, update_by updateBy, update_time updateTime
+        conversion_value conversionValue, unit, actual_amount actualAmount, remark, status,
+        create_by createBy, create_time createTime, update_by updateBy, update_time updateTime
         from kwo_trade_order_goods_unit
         where del_flag = 0
         <if test="tOrderId != null and tOrderId != ''">
@@ -14,4 +14,20 @@
         </if>
         ORDER BY create_time desc
     </select>
+
+    <select id="findByIdAndUnit" resultType="com.sckw.order.model.KwoTradeOrderGoodsUnit" parameterType="java.util.Map" >
+        SELECT
+        id, t_order_id tOrderId, goods_id goodsId, from_unit fromUnit, to_unit toUnit,
+        conversion_value conversionValue, unit, actual_amount actualAmount, remark, status,
+        create_by createBy, create_time createTime, update_by updateBy, update_time updateTime
+        from kwo_trade_order_goods_unit
+        where del_flag = 0
+        <if test="tOrderId != null and tOrderId != ''">
+            and t_order_id = #{tOrderId, jdbcType=BIGINT}
+        </if>
+        <if test="unit != null and unit != ''">
+            and unit = #{unit, jdbcType=VARCHAR}
+        </if>
+        ORDER BY create_time desc
+    </select>
 </mapper>

+ 3 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/MoneyChange.java

@@ -1,5 +1,7 @@
 package com.sckw.payment.model.vo.res;
 
+import com.sckw.core.model.constant.NumberConstant;
+
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.Objects;
@@ -33,7 +35,7 @@ public interface MoneyChange {
      */
     default BigDecimal smallMoney(BigDecimal big) {
         if (Objects.isNull(big)) {
-            return new BigDecimal("0.00");
+            return NumberConstant.ZERO_TWO;
         }
         return big.divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
     }

+ 1 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/WalletService.java

@@ -800,7 +800,7 @@ public class WalletService {
      */
     private BigDecimal smallMoney(BigDecimal big) {
         if (Objects.isNull(big)) {
-            return new BigDecimal("0.00");
+            return NumberConstant.ZERO_TWO;
         }
         return big.divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
     }

+ 6 - 4
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/utils/DecimalUtils.java

@@ -1,5 +1,7 @@
 package com.sckw.payment.utils;
 
+import com.sckw.core.model.constant.NumberConstant;
+
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
@@ -19,11 +21,11 @@ public class DecimalUtils {
      */
     public static String percent(BigDecimal dividend, BigDecimal divisor) {
         if (Objects.isNull(dividend)) {
-            dividend = new BigDecimal("0.00");
+            dividend = NumberConstant.ZERO_TWO;
         }
         //除数为0
         if (Objects.isNull(divisor)) {
-            divisor = new BigDecimal("0.00");
+            divisor = NumberConstant.ZERO_TWO;
         }
 
         if (BigDecimal.ZERO.compareTo(dividend) != 0 && BigDecimal.ZERO.compareTo(divisor) == 0) {
@@ -37,11 +39,11 @@ public class DecimalUtils {
 
     public static String financePercent(BigDecimal dividend, BigDecimal divisor) {
         if (Objects.isNull(dividend)) {
-            dividend = new BigDecimal("0.00");
+            dividend = NumberConstant.ZERO_TWO;
         }
         //除数为0
         if (Objects.isNull(divisor)) {
-            divisor = new BigDecimal("0.00");
+            divisor = NumberConstant.ZERO_TWO;
         }
 
         if (BigDecimal.ZERO.compareTo(dividend) != 0 && BigDecimal.ZERO.compareTo(divisor) == 0) {

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

@@ -2,6 +2,7 @@ package com.sckw.report.service;
 
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.model.vo.TableBottom;
 import com.sckw.core.model.vo.TableStatisticRes;
@@ -163,7 +164,7 @@ public class KwOrderService {
      */
     private BigDecimal setScale(Double d) {
         if (Objects.isNull(d) || BigDecimal.ZERO.compareTo(BigDecimal.valueOf(d)) == 0) {
-            return new BigDecimal("0.00");
+            return NumberConstant.ZERO_TWO;
         }
         return BigDecimal.valueOf(d).setScale(2, RoundingMode.HALF_UP);
     }

+ 1 - 1
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderStatisticsService.java

@@ -243,7 +243,7 @@ public class KwOrderStatisticsService {
      */
     private BigDecimal setScale(Double d) {
         if (Objects.isNull(d) || BigDecimal.ZERO.compareTo(BigDecimal.valueOf(d)) == 0) {
-            return new BigDecimal("0.00");
+            return NumberConstant.ZERO_TWO;
         }
         return BigDecimal.valueOf(d).setScale(2, RoundingMode.HALF_UP);
     }

+ 4 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtAcceptCarriageOrderController.java

@@ -32,7 +32,7 @@ import java.util.List;
 
 /**
  * @author lfdc
- * @description 承运订单controller
+ * @desc 承运订单controller
  * @date 2023-06-26 16:06:07
  */
 @Slf4j
@@ -341,9 +341,10 @@ public class KwtAcceptCarriageOrderController {
      */
     @RequestMapping(value = "/commitAcceptCarriageOrderFinish", method = RequestMethod.POST)
     @RepeatSubmit(interval = 1000,message ="前方拥堵,请稍后尝试")
-    public HttpResult commitAcceptCarriageOrderFinish(@Valid @RequestBody OrderFinishDTO orderFinishDTO) {
+    public HttpResult commitAcceptCarriageOrderFinish(@Valid @RequestBody OrderManualCompletionDto orderFinishDTO) {
         try {
-            return acceptCarriageOrderService.commitAcceptCarriageOrderFinish(orderFinishDTO);
+            //return acceptCarriageOrderService.commitAcceptCarriageOrderFinish(orderFinishDTO);
+            return transportCommonService.orderFinish(orderFinishDTO);
         } catch (Exception e) {
             log.error("托运订单-完结订单失败:订单id {},error {} ", orderFinishDTO.getId(), e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());

+ 9 - 8
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtConsignOrderController.java

@@ -13,16 +13,15 @@ import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.config.easyexcel.RequestHolder;
 import com.sckw.excel.utils.ExcelUtil;
-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.dto.StopOrderTakingDTO;
+import com.sckw.transport.api.dubbo.TransportService;
+import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.param.AcceptCarriageOrderQuery;
 import com.sckw.transport.model.param.ConsignOrderQuery;
 import com.sckw.transport.model.param.DriverParam;
 import com.sckw.transport.model.param.LogisticsOrderStatisticsParam;
 import com.sckw.transport.model.vo.execlVo.ConsignOrderExcelVo;
 import com.sckw.transport.service.KwtConsignOrderService;
+import com.sckw.transport.service.KwtTransportCommonService;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
@@ -32,12 +31,11 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
-
 import java.util.List;
 
 /**
  * @author lfdc
- * @description 托运订单controller
+ * @desc 托运订单controller
  * @date 2023-06-26 16:06:04
  */
 @Slf4j
@@ -48,6 +46,8 @@ public class KwtConsignOrderController {
 
     @Autowired
     KwtConsignOrderService consignOrderService;
+    @Autowired
+    KwtTransportCommonService transportCommonService;
 
     /**
      * 托运订单首页条件查询
@@ -233,10 +233,11 @@ public class KwtConsignOrderController {
      * @return  响应结果
      */
     @RequestMapping(value = "/commitConsignOrderFinish", method = RequestMethod.POST)
-    public HttpResult commitConsignOrderFinish(@Validated @RequestBody OrderFinishDTO orderFinishDTO) {
+    public HttpResult commitConsignOrderFinish(@Validated @RequestBody OrderManualCompletionDto orderFinishDTO) {
         log.error("托运订单-完结订单:订单 {}", JSONObject.toJSONString(orderFinishDTO));
         try {
-            return consignOrderService.commitConsignOrderFinish(orderFinishDTO);
+            //return consignOrderService.commitConsignOrderFinish(orderFinishDTO);
+            return transportCommonService.orderFinish(orderFinishDTO);
         } catch (Exception e) {
             log.error("托运订单-完结订单失败:订单id {},error {} ", orderFinishDTO.getId(), e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());

+ 12 - 5
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtLogisticsConsignmentController.java

@@ -14,11 +14,13 @@ import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.transport.model.dto.OrderFinishDTO;
+import com.sckw.transport.model.dto.OrderManualCompletionDto;
 import com.sckw.transport.model.param.LogisticsConsignmentParam;
 import com.sckw.transport.model.param.OrderQuery;
 import com.sckw.transport.model.vo.PurchaseLogisticOrderExcelVo;
 import com.sckw.transport.model.vo.SellLogisticOrderExcelVo;
 import com.sckw.transport.service.KwtLogisticsConsignmentService;
+import com.sckw.transport.service.KwtTransportCommonService;
 import io.seata.spring.annotation.GlobalTransactional;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
@@ -34,7 +36,7 @@ import java.util.List;
 
 /**
  * @author lfdc
- * @description 采购订单/销售订单-物流托运Controller
+ * @desc 采购订单/销售订单-物流托运Controller
  * @date 2023-06-28 11:06:06
  */
 @Slf4j
@@ -47,6 +49,9 @@ public class KwtLogisticsConsignmentController {
     @Autowired
     KwtLogisticsConsignmentService logisticsConsignmentService;
 
+    @Autowired
+    KwtTransportCommonService transportCommonService;
+
     /**
      * 采购订单-物流托运生成托运订单
      *
@@ -185,10 +190,11 @@ public class KwtLogisticsConsignmentController {
     @Validated
     @RepeatSubmit(interval = 1000,message ="前方拥堵,请稍后尝试")
     @RequestMapping(value = "/purchaseOrderFinish", method = RequestMethod.POST)
-    public HttpResult purchaseOrderFinish(@RequestBody @Validated OrderFinishDTO orderFinishDTO) {
+    public HttpResult purchaseOrderFinish(@RequestBody @Validated OrderManualCompletionDto orderFinishDTO) {
         log.info("采购订单-托运订单列表-完结订单 传递参数信息:{}", JSONObject.toJSONString(orderFinishDTO));
         try {
-            return logisticsConsignmentService.orderFinish(orderFinishDTO, "1");
+            //return logisticsConsignmentService.orderFinish(orderFinishDTO, "1");
+            return transportCommonService.orderFinish(orderFinishDTO);
         } catch (Exception e) {
             log.error("采购订单-托运订单列表-完结订单 error :{}", e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
@@ -313,10 +319,11 @@ public class KwtLogisticsConsignmentController {
     @Validated
     @RequestMapping(value = "/sellOrderFinish", method = RequestMethod.POST)
     @RepeatSubmit(interval = 1000,message ="前方拥堵,请稍后尝试")
-    public HttpResult sellOrderFinish(@RequestBody @Validated OrderFinishDTO orderFinishDTO) {
+    public HttpResult sellOrderFinish(@RequestBody @Validated OrderManualCompletionDto orderFinishDTO) {
         log.info("销售订单-托运订单列表-完结订单 传递参数信息:{}", JSONObject.toJSONString(orderFinishDTO));
         try {
-            return logisticsConsignmentService.orderFinish(orderFinishDTO, "2");
+            //return logisticsConsignmentService.orderFinish(orderFinishDTO, "2");
+            return transportCommonService.orderFinish(orderFinishDTO);
         } catch (Exception e) {
             log.error("销售订单-托运订单列表-完结订单 error :{}", e.getMessage(), e);
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());

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

@@ -203,28 +203,28 @@ public class TransportServiceImpl implements TransportService {
                  * 3、按趟次:总运价=运价*趟次【后期加】
                  */
                 //运价
-                BigDecimal price = logisticsOrderDTO.getPrice() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getPrice();
+                BigDecimal price = logisticsOrderDTO.getPrice() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getPrice();
 
 
                 /**亏吨量/吨->装货量-卸货量
                  扣亏量/吨->亏吨量-合理损耗值
                  扣亏量/吨->亏吨量-合理损耗值(装货量*合理损耗)*/
-                BigDecimal loadAmount = logisticsOrderDTO.getTotalLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalLoadAmount();
-                BigDecimal unloadAmount = logisticsOrderDTO.getTotalUnloadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalUnloadAmount();
+                BigDecimal loadAmount = logisticsOrderDTO.getTotalLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalLoadAmount();
+                BigDecimal unloadAmount = logisticsOrderDTO.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalUnloadAmount();
 
-                BigDecimal loss = logisticsOrderDTO.getLoss() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getLoss();
+                BigDecimal loss = logisticsOrderDTO.getLoss() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getLoss();
                 //亏吨量
                 BigDecimal defectiveWeighNumber = loadAmount.subtract(unloadAmount);
                 //合理损耗值
-                BigDecimal lossAmount = loadAmount.multiply(logisticsOrderDTO.getLoss() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getLoss());
+                BigDecimal lossAmount = loadAmount.multiply(logisticsOrderDTO.getLoss() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getLoss());
                 //扣亏量
 //                BigDecimal deductWeighNumber = defectiveWeighNumber.subtract(lossAmount);
                 BigDecimal deductWeighNumber = commonService.deficitLossAmount(loadAmount, defectiveWeighNumber, loss, logisticsOrderDTO.getLossUnit());
                 if (deductWeighNumber.compareTo(new BigDecimal("0")) < 0) {
-                    deductWeighNumber = new BigDecimal("0.00");
+                    deductWeighNumber = NumberConstant.ZERO_TWO;
                 }
                 //罚款值
-                BigDecimal fineValue = (logisticsOrderDTO.getGoodsPrice() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getGoodsPrice()).multiply(deductWeighNumber);
+                BigDecimal fineValue = (logisticsOrderDTO.getGoodsPrice() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getGoodsPrice()).multiply(deductWeighNumber);
                 /**
                  *
                  * 二、运价计算:
@@ -233,13 +233,13 @@ public class TransportServiceImpl implements TransportService {
                  * 3、按趟次:总运价=运价*趟次【后期加】
                  */
                 //todo 2023-10-10 含税金额不减去罚款值 另指定罚款值进行返回数据
-                BigDecimal actualAmount = new BigDecimal("0.00");
+                BigDecimal actualAmount = NumberConstant.ZERO_TWO;
                 if (DictEnum.CHARGING_TYPE_1.getValue().equals(billingMode)) {
-                    actualAmount = (logisticsOrderDTO.getTotalLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalLoadAmount()).multiply(price);
-//                    actualAmount = (logisticsOrderDTO.getTotalLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalLoadAmount()).multiply(price).subtract(fineValue);
+                    actualAmount = (logisticsOrderDTO.getTotalLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalLoadAmount()).multiply(price);
+//                    actualAmount = (logisticsOrderDTO.getTotalLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalLoadAmount()).multiply(price).subtract(fineValue);
                 } else if (DictEnum.CHARGING_TYPE_2.getValue().equals(billingMode)) {
-                    actualAmount = (logisticsOrderDTO.getTotalUnloadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalUnloadAmount()).multiply(price);
-//                    actualAmount = (logisticsOrderDTO.getTotalUnloadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalUnloadAmount()).multiply(price).subtract(fineValue);
+                    actualAmount = (logisticsOrderDTO.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalUnloadAmount()).multiply(price);
+//                    actualAmount = (logisticsOrderDTO.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalUnloadAmount()).multiply(price).subtract(fineValue);
                 } else if (DictEnum.CHARGING_TYPE_3.getValue().equals(billingMode)) {
                     // 物流订单运单趟次数量
                     Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN){{

+ 37 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OrderGoodsLoadingDto.java

@@ -0,0 +1,37 @@
+package com.sckw.transport.model.dto;
+
+import lombok.Data;
+import java.math.BigDecimal;
+
+/**
+ * @desc 手动完结
+ * @author zk
+ * @date 2023/12/8 0008
+ */
+@Data
+public class OrderGoodsLoadingDto {
+
+    /**
+     * 装卸货单位
+     */
+    private String unit;
+
+    /**
+     * 装货数量
+     */
+    private BigDecimal loadAmount;
+
+    /**
+     * 卸货数量
+     */
+    private BigDecimal unloadAmount;
+
+    public OrderGoodsLoadingDto() {
+    }
+
+    public OrderGoodsLoadingDto(String unit, BigDecimal loadAmount, BigDecimal unloadAmount) {
+        this.unit = unit;
+        this.loadAmount = loadAmount;
+        this.unloadAmount = unloadAmount;
+    }
+}

+ 32 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OrderManualCompletionDto.java

@@ -0,0 +1,32 @@
+package com.sckw.transport.model.dto;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+import java.util.List;
+
+/**
+ * @desc 手动完结
+ * @author zk
+ * @date 2023/12/8 0008
+ */
+@Data
+public class OrderManualCompletionDto {
+
+    /**
+     * 数据id
+     */
+    @NotNull(message = "单据id不能为空")
+    private Long id;
+
+    /**
+     * 备注
+     */
+    @Length(max = 200,message = "单据编号长度错误最大长度:{max}")
+    private String remark;
+
+    /**
+     * 住卸货信息
+     */
+    List<OrderGoodsLoadingDto> loading;
+}

+ 2 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/GoodsUnitParam.java

@@ -3,6 +3,7 @@ package com.sckw.transport.model.param;
 import lombok.Data;
 import java.io.Serial;
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * @desc 商品-单位换算
@@ -28,5 +29,5 @@ public class GoodsUnitParam implements Serializable {
     /**
      * 换算值
      */
-    private Double conversionValue;
+    private BigDecimal conversionValue;
 }

+ 91 - 79
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtAcceptCarriageOrderService.java

@@ -33,10 +33,7 @@ import com.sckw.mongo.model.SckwLogisticsOrder;
 import com.sckw.mongo.model.SckwWaybillOrder;
 import com.sckw.mongo.model.TableTops;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
-import com.sckw.order.api.model.CompleteLogisticsOrderParam;
-import com.sckw.order.api.model.CreateOrCancelLogisticsOrderParam;
-import com.sckw.order.api.model.OrderDetailRes;
-import com.sckw.order.api.model.UnitInfoDetailRes;
+import com.sckw.order.api.model.*;
 import com.sckw.payment.api.dubbo.PaymentDubboService;
 import com.sckw.payment.api.model.dto.SettlementMoney;
 import com.sckw.product.api.dubbo.GoodsInfoService;
@@ -195,10 +192,10 @@ public class KwtAcceptCarriageOrderService {
                 if (!entCacheResDto.getEntTypes().contains(String.valueOf(NumberConstant.THREE))) {
                     throw new BusinessException("当前用户企业不具有分包功能权限!");
                 }
-                if (bo.getCarryingCapacity().compareTo(new BigDecimal("0.00")) == 0) {
+                if (bo.getCarryingCapacity().compareTo(NumberConstant.ZERO_TWO) == 0) {
                     throw new BusinessException("分配承运量必须填写大于0.00");
                 }
-                BigDecimal subtract = logisticsOrder.getAmount().subtract((logisticsOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getEntrustAmount()));
+                BigDecimal subtract = logisticsOrder.getAmount().subtract((logisticsOrder.getEntrustAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getEntrustAmount()));
                 if (bo.getCarryingCapacity().compareTo(subtract) == 1) {
                     throw new BusinessException("分配承运量必须可待分配量");
                 }
@@ -220,10 +217,10 @@ public class KwtAcceptCarriageOrderService {
                     order.setSubcontractAmount(new BigDecimal(NumberConstant.ZERO));
                     order.setUnit(bo.getCarryingCapacityUnit());
                 }
-                BigDecimal subcontractAmount = logisticsOrder.getSubcontractAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getSubcontractAmount();
-                BigDecimal entrustAmount = logisticsOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getEntrustAmount();
+                BigDecimal subcontractAmount = logisticsOrder.getSubcontractAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getSubcontractAmount();
+                BigDecimal entrustAmount = logisticsOrder.getEntrustAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getEntrustAmount();
                 BigDecimal waitDistributionAmount = logisticsOrder.getAmount().subtract(subcontractAmount).subtract(entrustAmount);
-                if (waitDistributionAmount.compareTo(new BigDecimal("0.00")) == 0) {
+                if (waitDistributionAmount.compareTo(NumberConstant.ZERO_TWO) == 0) {
                     throw new RuntimeException("剩余可分配量为0,不可进行分包操作!");
                 }
 //        int level = logisticsLevel(logisticsOrder);
@@ -373,9 +370,9 @@ public class KwtAcceptCarriageOrderService {
             logisticsOrder.setUnit(bo.getCarryingCapacityUnit());
             logisticsOrder.setCarryingCapacity(bo.getCarryingCapacity());
         } else {
-            logisticsOrder.setAmount(new BigDecimal("0.00"));
-            logisticsOrder.setSubcontractAmount(new BigDecimal("0.00"));
-            logisticsOrder.setCarryingCapacity(new BigDecimal("0.00"));
+            logisticsOrder.setAmount(NumberConstant.ZERO_TWO);
+            logisticsOrder.setSubcontractAmount(NumberConstant.ZERO_TWO);
+            logisticsOrder.setCarryingCapacity(NumberConstant.ZERO_TWO);
         }
         logisticsOrder.setLoss(bo.getLoss() == null ? null : bo.getLoss());
         logisticsOrder.setLossUnit(bo.getLossUnit());
@@ -1479,35 +1476,24 @@ public class KwtAcceptCarriageOrderService {
                 if (logisticsOrder == null) {
                     throw new RuntimeException("承运订单-完结订单-物流单据不存在!");
                 }
-//        BigDecimal totalLoadAmount = logisticsOrder.getTotalLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getTotalLoadAmount();
-//        if (totalLoadAmount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
-//            throw new BusinessException("完结订单,实装量不能大于分配量");
-//        }
-
+                /*BigDecimal totalLoadAmount = logisticsOrder.getTotalLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getTotalLoadAmount();
+                if (totalLoadAmount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
+                    throw new BusinessException("完结订单,实装量不能大于分配量");
+                }
                 //todo 2023-09-01 根据要求去除校验 物流订单手动完结,实装量可大于分配量,实卸量目前暂定不可大于实装量;根据计费方式,当对应实装或实卸大于分配量时自然完结
-//        BigDecimal amount = logisticsOrder.getAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getAmount();
-//        if (amount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
-//            throw new BusinessException("完结订单,装货量不能大于运输总量");
-//        }
-//        if (orderFinishDTO.getUnloadAmount().compareTo(orderFinishDTO.getLoadAmount()) > 0) {
-//            throw new BusinessException("完结订单,填写卸货量不能大于装货量");
-//        }
+                BigDecimal amount = logisticsOrder.getAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getAmount();
+                if (amount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
+                    throw new BusinessException("完结订单,装货量不能大于运输总量");
+                }
+                if (orderFinishDTO.getUnloadAmount().compareTo(orderFinishDTO.getLoadAmount()) > 0) {
+                    throw new BusinessException("完结订单,填写卸货量不能大于装货量");
+                }*/
                 /**订单状态验证*/
                 if (!LogisticsOrderEnum.WAIT_DELIVERY.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))
                         && !LogisticsOrderEnum.IN_TRANSIT.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))) {
                     throw new RuntimeException("当前订单并不属于【待派车】,【运输中】状态");
                 }
-                /**完结拦截*/
-//        List<Integer> statusList = new ArrayList<>();
-//        statusList.add(CarWaybillEnum.PENDING_VEHICLE.getCode());
-//        statusList.add(CarWaybillEnum.EXIT_COMPLETED.getCode());
-//        statusList.add(CarWaybillEnum.WAIT_LOADING.getCode());
-//        statusList.add(CarWaybillEnum.COMPLETION_LOADING.getCode());
-//        statusList.add(CarWaybillEnum.WAIT_UNLOADING.getCode());
-//        statusList.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
-//        statusList.add(CarWaybillEnum.APPROVAL_IN.getCode());
-//        statusList.add(CarWaybillEnum.APPROVAL_NO_PASS.getCode());
-//        int count = waybillOrderMapper.selectDataByLorderId(id, statusList);
+                //验证当前物流订单是否还存在进行的车辆运单
                 boolean flag = commonService.judgmentWaybillOrderIsFinish(id);
                 if (flag) {
                     throw new BusinessException("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕");
@@ -1515,6 +1501,7 @@ public class KwtAcceptCarriageOrderService {
                 BigDecimal ignoreAmount = logisticsOrder.getAmount().subtract(logisticsOrder.getTotalLoadAmount());
                 //修改单据本身数据
                 updateDataByItself(logisticsOrder, orderFinishDTO, ignoreAmount);
+
                 //获取物流订单下的子单
                 /**完结订单-对应物流订单下子订单都要进行完结*/
                 List<KwtLogisticsOrder> kwtLogisticsOrders = logisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
@@ -1524,8 +1511,6 @@ public class KwtAcceptCarriageOrderService {
                 //需要修改的mongodb数据
                 List<Map<String, Object>> list = new ArrayList<>();
                 if (!org.springframework.util.CollectionUtils.isEmpty(kwtLogisticsOrders)) {
-                    //修改单据状态
-//            List<Long> ids = kwtLogisticsOrders.stream().map(KwtLogisticsOrder::getId).collect(Collectors.toList());
                     //修改单据剩余运输量
                     kwtLogisticsOrders.forEach(kwtLogisticsOrder -> {
                         BigDecimal subtract = kwtLogisticsOrder.getAmount().subtract(kwtLogisticsOrder.getTotalLoadAmount());
@@ -1535,30 +1520,13 @@ public class KwtAcceptCarriageOrderService {
                         map.put("id", kwtLogisticsOrder.getId());
                         map.put("ignoreAmount", subtract);
                         list.add(map);
-//                updateMongoDbByLogisticsOrder(kwtLogisticsOrder.getId(), orderFinishDTO, subtract);
                     });
                 }
+
                 /**是否是一级订单,是->推送至贸易,否,数据推送至物流订单上级*/
                 if (logisticsOrder.getPid() == null && "1".equals(logisticsOrder.getType())) {
                     //数据推送至贸易订单
                     CompleteLogisticsOrderParam tradeOrder = new CompleteLogisticsOrderParam();
-                    //todo 2023-09-07 修改为传递页面传输值  不传递总量
-                    //获取实际装货量-实际卸货量
-//            Map<String, BigDecimal> map = logisticsOrderMapper.countAmountByTradeOrderId(logisticsOrder.getTOrderId());
-                    //获取是否订单已经全部处理完成
-                    List<Integer> orderStatusList = new ArrayList<>();
-                    orderStatusList.add(LogisticsOrderEnum.TO_BE_PLANNED.getCode());
-                    orderStatusList.add(LogisticsOrderEnum.PENDING_ORDER.getCode());
-                    orderStatusList.add(LogisticsOrderEnum.WAIT_DELIVERY.getCode());
-                    orderStatusList.add(LogisticsOrderEnum.IN_TRANSIT.getCode());
-                    /*List<KwtLogisticsOrder> logisticsOrders = logisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
-                            .eq(KwtLogisticsOrder::getTOrderId, logisticsOrder.getTOrderId())
-                            .in(KwtLogisticsOrder::getStatus, orderStatusList));
-                    if (org.springframework.util.CollectionUtils.isEmpty(logisticsOrders)) {
-                        tradeOrder.setIsAllComplete(true);
-                    } else {
-                        tradeOrder.setIsAllComplete(false);
-                    }*/
                     tradeOrder.setTOrderId(logisticsOrder.getTOrderId());
                     tradeOrder.setActualLoadAmount(orderFinishDTO.getLoadAmount());
                     tradeOrder.setActualUnloadAmount(orderFinishDTO.getUnloadAmount());
@@ -1570,9 +1538,10 @@ public class KwtAcceptCarriageOrderService {
                         log.info("承运订单-分包托运-手动完结订单异常,传递信息:{},返回信息:{}", JSONObject.toJSONString(tradeOrder), JSONObject.toJSONString(httpResult));
                         throw new BusinessException("单据完结出现错误!" + httpResult.getMsg());
                     }
+
                     /**将生成的分配量->贸易订单*/
                     CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
-                    param.setTOrderId(Long.valueOf(logisticsOrder.getTOrderId()));
+                    param.setTOrderId(logisticsOrder.getTOrderId());
                     param.setEntrustAmount(orderFinishDTO.getLoadAmount().subtract(logisticsOrder.getAmount()));
                     param.setUpdateBy(LoginUserHolder.getUserId());
                     param.setUpdateByName(LoginUserHolder.getUserName());
@@ -1658,6 +1627,7 @@ public class KwtAcceptCarriageOrderService {
         lOrder.setTotalLoadAmount(orderFinishDTO.getLoadAmount());
         lOrder.setTotalUnloadAmount(orderFinishDTO.getUnloadAmount());
         lOrder.setIgnoreAmount(ignoreAmount);
+
         //rabbitMq业务汇总数据发送/消费对象
         SckwBusSum busSum = new SckwBusSum();
         //业务汇总类型
@@ -1728,6 +1698,48 @@ public class KwtAcceptCarriageOrderService {
 //        streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
     }
 
+    /**
+     * 承运订单-分包托运-完结订单-修改本身数据
+     *
+     * @param logisticsOrder 本身物流订单数据
+     * @param orderFinishDTO 页面传递数据
+     */
+    private void updateDataByItselfV1(KwtLogisticsOrder logisticsOrder, OrderFinishDTO orderFinishDTO, BigDecimal ignoreAmount) {
+        logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+        logisticsOrder.setLoadAmount(orderFinishDTO.getLoadAmount());
+        logisticsOrder.setUnloadAmount(orderFinishDTO.getUnloadAmount());
+        logisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+        logisticsOrder.setUpdateTime(new Date());
+        logisticsOrder.setRemark(orderFinishDTO.getRemark());
+        logisticsOrder.setTotalLoadAmount(orderFinishDTO.getLoadAmount());
+        logisticsOrder.setTotalUnloadAmount(orderFinishDTO.getUnloadAmount());
+        logisticsOrder.setIgnoreAmount(ignoreAmount);
+        logisticsOrderMapper.updateById(logisticsOrder);
+        KwtLogisticsOrderTrack track = logisticsOrderTrackMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderTrack>()
+                .eq(KwtLogisticsOrderTrack::getLOrderId, logisticsOrder.getId()).eq(KwtLogisticsOrderTrack::getStatus, LogisticsOrderEnum.HAVE_FINISHED.getCode())
+        );
+        if (track != null) {
+            logisticsOrderTrackMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrderTrack>()
+                    .set(KwtLogisticsOrderTrack::getUpdateBy, LoginUserHolder.getUserId())
+                    .set(KwtLogisticsOrderTrack::getUpdateTime, new Date())
+                    .set(KwtLogisticsOrderTrack::getRemark, orderFinishDTO.getRemark())
+                    .eq(KwtLogisticsOrderTrack::getId, track.getId())
+            );
+        } else {
+            KwtLogisticsOrderTrack orderTrack = new KwtLogisticsOrderTrack();
+            orderTrack.setId(new IdWorker(NumberConstant.ONE).nextId());
+            orderTrack.setLOrderId(logisticsOrder.getId());
+            orderTrack.setRemark(orderFinishDTO.getRemark());
+            orderTrack.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+            orderTrack.setCreateBy(LoginUserHolder.getUserId());
+            orderTrack.setCreateTime(new Date());
+            orderTrack.setUpdateBy(LoginUserHolder.getUserId());
+            orderTrack.setUpdateTime(new Date());
+            orderTrack.setDelFlag(NumberConstant.ZERO);
+            logisticsOrderTrackMapper.insert(orderTrack);
+        }
+    }
+
     /**
      * 承运订单-分包托运-完结订单-修改分包订单
      *
@@ -1943,8 +1955,8 @@ public class KwtAcceptCarriageOrderService {
         map.put("passStatus", 1);
         WaybillCountVo waybillOrderCount = waybillOrderMapper.findWaybillOrderCount(map);
         OrderFinishVO orderFinishVO = new OrderFinishVO();
-        orderFinishVO.setLoadAmount(waybillOrderCount == null ? new BigDecimal("0.00") : waybillOrderCount.getLoadAmount());
-        orderFinishVO.setUnloadAmount(waybillOrderCount == null ? new BigDecimal("0.00") : waybillOrderCount.getUnloadAmount());
+        orderFinishVO.setLoadAmount(waybillOrderCount == null ? NumberConstant.ZERO_TWO : waybillOrderCount.getLoadAmount());
+        orderFinishVO.setUnloadAmount(waybillOrderCount == null ? NumberConstant.ZERO_TWO : waybillOrderCount.getUnloadAmount());
         orderFinishVO.setNumber(waybillOrderCount == null ? NumberConstant.ZERO : waybillOrderCount.getTotalComplete());
         return HttpResult.ok(orderFinishVO);
     }
@@ -2878,20 +2890,20 @@ public class KwtAcceptCarriageOrderService {
 
     private void computeCompareTotalPrice(StatisticsResultVO resultVO, StatisticsByOrderVO currentWeek, StatisticsByOrderVO lastWeek) {
         Integer flag = 1;
-        BigDecimal chainRatio = new BigDecimal("0.00");
-        if (currentWeek.getTotalPrice().compareTo(new BigDecimal("0.00")) == 0
-                && lastWeek.getTotalPrice().compareTo(new BigDecimal("0.00")) == 0) {
-            chainRatio = new BigDecimal("0.00");
-        } else if (currentWeek.getTotalPrice().compareTo(new BigDecimal("0.00")) == 0) {
+        BigDecimal chainRatio = NumberConstant.ZERO_TWO;
+        if (currentWeek.getTotalPrice().compareTo(NumberConstant.ZERO_TWO) == 0
+                && lastWeek.getTotalPrice().compareTo(NumberConstant.ZERO_TWO) == 0) {
+            chainRatio = NumberConstant.ZERO_TWO;
+        } else if (currentWeek.getTotalPrice().compareTo(NumberConstant.ZERO_TWO) == 0) {
             chainRatio = chainRatio.subtract(new BigDecimal("100.00"));
             flag = 2;
-        } else if (lastWeek.getTotalPrice().compareTo(new BigDecimal("0.00")) == 0) {
+        } else if (lastWeek.getTotalPrice().compareTo(NumberConstant.ZERO_TWO) == 0) {
             chainRatio = new BigDecimal("100.00").subtract(chainRatio);
         } else {
             chainRatio = (currentWeek.getTotalPrice().subtract(lastWeek.getTotalPrice())).divide(lastWeek.getTotalPrice(), NumberConstant.SIX, RoundingMode.HALF_UP)
                     .multiply(new BigDecimal("100.00")).setScale(NumberConstant.TWO, RoundingMode.HALF_UP);
         }
-        if (chainRatio.compareTo(new BigDecimal("0.00")) == -1) {
+        if (chainRatio.compareTo(NumberConstant.ZERO_TWO) == -1) {
             flag = 2;
         }
         StatisticsTotalPriceVO priceVO = new StatisticsTotalPriceVO();
@@ -2905,20 +2917,20 @@ public class KwtAcceptCarriageOrderService {
 
     private void computeCompareAmount(StatisticsResultVO resultVO, StatisticsByOrderVO currentWeek, StatisticsByOrderVO lastWeek) {
         Integer amountFlag = 1;
-        BigDecimal amountChainRatio = new BigDecimal("0.00");
-        if (currentWeek.getAmount().compareTo(new BigDecimal("0.00")) == 0
-                && lastWeek.getAmount().compareTo(new BigDecimal("0.00")) == 0) {
-            amountChainRatio = new BigDecimal("0.00");
-        } else if (currentWeek.getAmount().compareTo(new BigDecimal("0.00")) == 0) {
+        BigDecimal amountChainRatio = NumberConstant.ZERO_TWO;
+        if (currentWeek.getAmount().compareTo(NumberConstant.ZERO_TWO) == 0
+                && lastWeek.getAmount().compareTo(NumberConstant.ZERO_TWO) == 0) {
+            amountChainRatio = NumberConstant.ZERO_TWO;
+        } else if (currentWeek.getAmount().compareTo(NumberConstant.ZERO_TWO) == 0) {
             amountChainRatio = amountChainRatio.subtract(new BigDecimal("100.00"));
             amountFlag = 2;
-        } else if (lastWeek.getAmount().compareTo(new BigDecimal("0.00")) == 0) {
+        } else if (lastWeek.getAmount().compareTo(NumberConstant.ZERO_TWO) == 0) {
             amountChainRatio = new BigDecimal("100.00").subtract(amountChainRatio);
         } else {
             amountChainRatio = (currentWeek.getAmount().subtract(lastWeek.getAmount())).divide(lastWeek.getAmount(), NumberConstant.SIX, RoundingMode.HALF_UP)
                     .multiply(new BigDecimal("100.00")).setScale(NumberConstant.TWO, RoundingMode.HALF_UP);
         }
-        if (amountChainRatio.compareTo(new BigDecimal("0.00")) == -1) {
+        if (amountChainRatio.compareTo(NumberConstant.ZERO_TWO) == -1) {
             amountFlag = 2;
         }
 
@@ -2934,20 +2946,20 @@ public class KwtAcceptCarriageOrderService {
 
     private void computeCompareWaitingAmount(StatisticsResultVO resultVO, StatisticsByOrderVO currentWeek, StatisticsByOrderVO lastWeek) {
         Integer flag = 1;
-        BigDecimal chainRatio = new BigDecimal("0.00");
-        if (currentWeek.getWaitingAmount().compareTo(new BigDecimal("0.00")) == 0
-                && lastWeek.getWaitingAmount().compareTo(new BigDecimal("0.00")) == 0) {
-            chainRatio = new BigDecimal("0.00");
-        } else if (currentWeek.getWaitingAmount().compareTo(new BigDecimal("0.00")) == 0) {
+        BigDecimal chainRatio = NumberConstant.ZERO_TWO;
+        if (currentWeek.getWaitingAmount().compareTo(NumberConstant.ZERO_TWO) == 0
+                && lastWeek.getWaitingAmount().compareTo(NumberConstant.ZERO_TWO) == 0) {
+            chainRatio = NumberConstant.ZERO_TWO;
+        } else if (currentWeek.getWaitingAmount().compareTo(NumberConstant.ZERO_TWO) == 0) {
             chainRatio = chainRatio.subtract(new BigDecimal("100.00"));
             flag = 2;
-        } else if (lastWeek.getWaitingAmount().compareTo(new BigDecimal("0.00")) == 0) {
+        } else if (lastWeek.getWaitingAmount().compareTo(NumberConstant.ZERO_TWO) == 0) {
             chainRatio = new BigDecimal("100.00").subtract(chainRatio);
         } else {
             chainRatio = (currentWeek.getWaitingAmount().subtract(lastWeek.getWaitingAmount())).divide(lastWeek.getWaitingAmount(), NumberConstant.SIX, RoundingMode.HALF_UP)
                     .multiply(new BigDecimal("100.00")).setScale(NumberConstant.TWO, RoundingMode.HALF_UP);
         }
-        if (chainRatio.compareTo(new BigDecimal("0.00")) == -1) {
+        if (chainRatio.compareTo(NumberConstant.ZERO_TWO) == -1) {
             flag = 2;
         }
         /**待分配量*/

+ 68 - 79
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtConsignOrderService.java

@@ -153,6 +153,9 @@ public class KwtConsignOrderService {
     @Autowired
     public KwtTransportCommonService transportCommonService;
 
+    @Autowired
+    KwtLogisticsOrderGoodsService logisticsOrderGoodsService;
+
     @Autowired
     KwtWaybillOrderService waybillOrderService;
 
@@ -212,24 +215,24 @@ public class KwtConsignOrderService {
                 /**.eq(KwtWaybillOrder::getEntId, LoginUserHolder.getEntId())*/);
         JSONObject statistics = new JSONObject();
         //合理损耗
-        BigDecimal loss = order.getLoss() == null ? new BigDecimal("0.00") : order.getLoss();
+        BigDecimal loss = order.getLoss() == null ? NumberConstant.ZERO_TWO : order.getLoss();
         //派车量
-        BigDecimal sendCarWeighNumber = new BigDecimal("0.00");
+        BigDecimal sendCarWeighNumber = NumberConstant.ZERO_TWO;
         //装货量
-        BigDecimal loadAmountNumber = new BigDecimal("0.00");
+        BigDecimal loadAmountNumber = NumberConstant.ZERO_TWO;
         //卸货量
-        BigDecimal unloadAmountNumber = new BigDecimal("0.00");
+        BigDecimal unloadAmountNumber = NumberConstant.ZERO_TWO;
         /**亏吨量/吨->装货量-卸货量
          * 合理损耗值=已委托量*合理损耗
          扣亏量/吨->亏吨量-合理损耗值 扣亏量/吨->亏吨量-合理损耗值(分配量(委托量)*合理损耗)*/
         //亏吨量
-        BigDecimal defectiveWeighNumber = new BigDecimal("0.00");
+        BigDecimal defectiveWeighNumber = NumberConstant.ZERO_TWO;
         //扣亏量/吨
-        BigDecimal deductWeighNumber = new BigDecimal("0.00");
+        BigDecimal deductWeighNumber = NumberConstant.ZERO_TWO;
         if (CollectionUtils.isNotEmpty(kwtWaybillOrders)) {
             for (KwtWaybillOrder kwtWaybillOrder : kwtWaybillOrders) {
                 //派车量
-                BigDecimal sendCarWeigh = kwtWaybillOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getEntrustAmount();
+                BigDecimal sendCarWeigh = kwtWaybillOrder.getEntrustAmount() == null ? NumberConstant.ZERO_TWO : kwtWaybillOrder.getEntrustAmount();
                 /**亏吨量/吨->装货量-卸货量
                  * 合理损耗值=装货量*合理损耗
                  扣亏量/吨->亏吨量-合理损耗值
@@ -240,13 +243,13 @@ public class KwtConsignOrderService {
                  按照趟次=运输运价
                  */
                 //已委托量
-                BigDecimal entrustAmount = kwtWaybillOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getEntrustAmount();
+                BigDecimal entrustAmount = kwtWaybillOrder.getEntrustAmount() == null ? NumberConstant.ZERO_TWO : kwtWaybillOrder.getEntrustAmount();
                 //合理损耗值
                 BigDecimal multiply = entrustAmount.multiply(loss.divide(BigDecimal.valueOf(1000L)));
                 //亏吨量
-                BigDecimal defectiveWeigh = kwtWaybillOrder.getDeficitAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getDeficitAmount();
+                BigDecimal defectiveWeigh = kwtWaybillOrder.getDeficitAmount() == null ? NumberConstant.ZERO_TWO : kwtWaybillOrder.getDeficitAmount();
                 //扣亏量/吨
-                BigDecimal deduct = defectiveWeigh.compareTo(new BigDecimal("0.00")) == 0 ? new BigDecimal("0.00") : defectiveWeigh.subtract(multiply);
+                BigDecimal deduct = defectiveWeigh.compareTo(NumberConstant.ZERO_TWO) == 0 ? NumberConstant.ZERO_TWO : defectiveWeigh.subtract(multiply);
                 sendCarWeighNumber = sendCarWeighNumber.add(sendCarWeigh);
                 if (kwtWaybillOrder.getLoadAmount() != null) {
                     loadAmountNumber = loadAmountNumber.add(kwtWaybillOrder.getLoadAmount());
@@ -302,19 +305,19 @@ public class KwtConsignOrderService {
         if (CollectionUtils.isNotEmpty(kwtWaybillOrders)) {
             for (KwtWaybillOrder kwtWaybillOrder : kwtWaybillOrders) {
                 //派车量
-                BigDecimal sendCarWeigh = kwtWaybillOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getEntrustAmount();
+                BigDecimal sendCarWeigh = kwtWaybillOrder.getEntrustAmount() == null ? NumberConstant.ZERO_TWO : kwtWaybillOrder.getEntrustAmount();
                 /**亏吨量/吨->装货量-卸货量
                  * 合理损耗值=装货量*合理损耗
                  扣亏量/吨->亏吨量-合理损耗值
                  */
                 //已委托量
-                BigDecimal entrustAmount = kwtWaybillOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getEntrustAmount();
+                BigDecimal entrustAmount = kwtWaybillOrder.getEntrustAmount() == null ? NumberConstant.ZERO_TWO : kwtWaybillOrder.getEntrustAmount();
                 //合理损耗值
                 BigDecimal multiply = entrustAmount.multiply(loss.divide(BigDecimal.valueOf(1000L)));
                 //亏吨量
-                BigDecimal defectiveWeigh = kwtWaybillOrder.getDeficitAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getDeficitAmount();
+                BigDecimal defectiveWeigh = kwtWaybillOrder.getDeficitAmount() == null ? NumberConstant.ZERO_TWO : kwtWaybillOrder.getDeficitAmount();
                 //扣亏量/吨
-                BigDecimal deduct = defectiveWeigh.compareTo(new BigDecimal("0.00")) == 0 ? new BigDecimal("0.00") : defectiveWeigh.subtract(multiply);
+                BigDecimal deduct = defectiveWeigh.compareTo(NumberConstant.ZERO_TWO) == 0 ? NumberConstant.ZERO_TWO : defectiveWeigh.subtract(multiply);
                 sendCarWeighNumber = sendCarWeighNumber.add(sendCarWeigh);
                 if (kwtWaybillOrder.getLoadAmount() != null) {
                     loadAmountNumber = loadAmountNumber.add(kwtWaybillOrder.getLoadAmount());
@@ -371,20 +374,20 @@ public class KwtConsignOrderService {
                             .eq(StringUtils.isNotBlank(kwtWaybillOrder.getId()), KwtWaybillOrderTicket::getWOrderId, kwtWaybillOrder.getId())
                             .eq(KwtWaybillOrderTicket::getType, NumberConstant.TWO));
                     //合理损耗
-                    BigDecimal loss = order.getLoss() == null ? new BigDecimal("0.00") : order.getLoss();
+                    BigDecimal loss = order.getLoss() == null ? NumberConstant.ZERO_TWO : order.getLoss();
                     /**亏吨量/吨->装货量-卸货量
                      * 合理损耗值=装货量*合理损耗
                      扣亏量/吨->亏吨量-合理损耗值
                      */
-                    BigDecimal loadAmount = kwtWaybillOrder.getLoadAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getLoadAmount();
+                    BigDecimal loadAmount = kwtWaybillOrder.getLoadAmount() == null ? NumberConstant.ZERO_TWO : kwtWaybillOrder.getLoadAmount();
                     //已委托量
-                    BigDecimal entrustAmount = kwtWaybillOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getEntrustAmount();
+                    BigDecimal entrustAmount = kwtWaybillOrder.getEntrustAmount() == null ? NumberConstant.ZERO_TWO : kwtWaybillOrder.getEntrustAmount();
                     //合理损耗值
                     BigDecimal multiply = loadAmount.multiply(loss.divide(BigDecimal.valueOf(1000L)));
                     //亏吨量
-                    BigDecimal defectiveWeigh = kwtWaybillOrder.getDeficitAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getDeficitAmount();
+                    BigDecimal defectiveWeigh = kwtWaybillOrder.getDeficitAmount() == null ? NumberConstant.ZERO_TWO : kwtWaybillOrder.getDeficitAmount();
                     //扣亏量/吨
-//                    BigDecimal deduct = defectiveWeigh.compareTo(new BigDecimal("0.00")) == 0 ? new BigDecimal("0.00") : defectiveWeigh.subtract(multiply);
+//                    BigDecimal deduct = defectiveWeigh.compareTo(NumberConstant.ZERO_TWO) == 0 ? NumberConstant.ZERO_TWO : defectiveWeigh.subtract(multiply);
                     BigDecimal deduct = commonService.deficitLossAmount(loadAmount, defectiveWeigh, loss, order.getLossUnit());
                     carWaybillVo.setLOrderId(String.valueOf(kwtWaybillOrder.getLOrderId()));
                     carWaybillVo.setLOrderNo(order.getLOrderNo());
@@ -648,20 +651,20 @@ public class KwtConsignOrderService {
                             .eq(StringUtils.isNotBlank(kwtWaybillOrder.getId()), KwtWaybillOrderTicket::getWOrderId, kwtWaybillOrder.getId())
                             .eq(KwtWaybillOrderTicket::getType, NumberConstant.TWO));
                     //合理损耗
-                    BigDecimal loss = order.getLoss() == null ? new BigDecimal("0.00") : order.getLoss();
+                    BigDecimal loss = order.getLoss() == null ? NumberConstant.ZERO_TWO : order.getLoss();
                     /**亏吨量/吨->装货量-卸货量
                      * 合理损耗值=装货量*合理损耗
                      扣亏量/吨->亏吨量-合理损耗值
                      */
-                    BigDecimal loadAmount = kwtWaybillOrder.getLoadAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getLoadAmount();
+                    BigDecimal loadAmount = kwtWaybillOrder.getLoadAmount() == null ? NumberConstant.ZERO_TWO : kwtWaybillOrder.getLoadAmount();
                     //已委托量
-                    BigDecimal entrustAmount = kwtWaybillOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getEntrustAmount();
+                    BigDecimal entrustAmount = kwtWaybillOrder.getEntrustAmount() == null ? NumberConstant.ZERO_TWO : kwtWaybillOrder.getEntrustAmount();
                     //合理损耗值
                     BigDecimal multiply = loadAmount.multiply(loss.divide(BigDecimal.valueOf(1000L)));
                     //亏吨量
-                    BigDecimal defectiveWeigh = kwtWaybillOrder.getDeficitAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getDeficitAmount();
+                    BigDecimal defectiveWeigh = kwtWaybillOrder.getDeficitAmount() == null ? NumberConstant.ZERO_TWO : kwtWaybillOrder.getDeficitAmount();
                     //扣亏量/吨
-//                    BigDecimal deduct = defectiveWeigh.compareTo(new BigDecimal("0.00")) == 0 ? new BigDecimal("0.00") : defectiveWeigh.subtract(multiply);
+//                    BigDecimal deduct = defectiveWeigh.compareTo(NumberConstant.ZERO_TWO) == 0 ? NumberConstant.ZERO_TWO : defectiveWeigh.subtract(multiply);
 //                    BigDecimal decimal = commonService.deficitAmount();
                     BigDecimal deduct = commonService.deficitLossAmount(loadAmount, defectiveWeigh, loss, order.getLossUnit());
                     carWaybillVo.setWOrderId(String.valueOf(kwtWaybillOrder.getId()));
@@ -771,7 +774,7 @@ public class KwtConsignOrderService {
                         carWaybillVo.setUnloadDateTime(null);
                     }
                     carWaybillVo.setDefectiveWeigh("0.00");
-                    carWaybillVo.setDeduct(new BigDecimal("0.00"));
+                    carWaybillVo.setDeduct(NumberConstant.ZERO_TWO);
                     carWaybillVo.setLoss(order.getLoss());
                     SysDictResDto sysDictResDto = remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.TAX_RATE_TYPE.getType(), order.getLossUnit());
                     carWaybillVo.setLossLabel(sysDictResDto == null ? null : sysDictResDto.getLabel());
@@ -863,23 +866,22 @@ public class KwtConsignOrderService {
         String key = String.format(RedisConstant.LOGISTICS_ORDER_FINISH_KEY, orderFinishDTO.getId());
         if (redisLockUtil.tryLock(key)) {
             try {
-                KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
-                        .eq(KwtLogisticsOrder::getId, id));
+                KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderMapper.selectById(id);
                 if (logisticsOrder == null) {
                     throw new BusinessException("采购订单-完结订单-物流单据不存在!");
                 }
-//        BigDecimal totalLoadAmount = logisticsOrder.getTotalLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getTotalLoadAmount();
-//        if (totalLoadAmount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
-//            throw new BusinessException("完结订单,实装量不能大于分配量");
-//        }
+                /*BigDecimal totalLoadAmount = logisticsOrder.getTotalLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getTotalLoadAmount();
+                if (totalLoadAmount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
+                    throw new BusinessException("完结订单,实装量不能大于分配量");
+                }
                 //todo 2023-09-01 根据要求去除校验 物流订单手动完结,实装量可大于分配量,实卸量目前暂定不可大于实装量;根据计费方式,当对应实装或实卸大于分配量时自然完结
-//        BigDecimal amount = logisticsOrder.getAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getAmount();
-//        if (amount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
-//            throw new BusinessException("完结订单,装货量不能大于运输总量");
-//        }
-//        if (orderFinishDTO.getUnloadAmount().compareTo(orderFinishDTO.getLoadAmount()) > 0) {
-//            throw new BusinessException("完结订单,填写卸货量不能大于装货量");
-//        }
+                BigDecimal amount = logisticsOrder.getAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getAmount();
+                if (amount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
+                    throw new BusinessException("完结订单,装货量不能大于运输总量");
+                }
+                if (orderFinishDTO.getUnloadAmount().compareTo(orderFinishDTO.getLoadAmount()) > 0) {
+                    throw new BusinessException("完结订单,填写卸货量不能大于装货量");
+                }*/
                 /**订单状态验证*/
                 if (!LogisticsOrderEnum.WAIT_DELIVERY.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))
                         && !LogisticsOrderEnum.IN_TRANSIT.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))) {
@@ -891,7 +893,7 @@ public class KwtConsignOrderService {
                     throw new BusinessException("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕!");
                 }
                 //修改单据本身数据
-                BigDecimal ignoreAmount = logisticsOrder.getAmount().subtract(orderFinishDTO.getLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getLoadAmount());
+                BigDecimal ignoreAmount = logisticsOrder.getAmount().subtract(orderFinishDTO.getLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getLoadAmount());
                 logisticsOrder.setTotalLoadAmount(orderFinishDTO.getLoadAmount());
                 logisticsOrder.setTotalUnloadAmount(orderFinishDTO.getUnloadAmount());
                 logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
@@ -900,6 +902,7 @@ public class KwtConsignOrderService {
                 logisticsOrder.setIgnoreAmount(ignoreAmount);
                 kwtLogisticsOrderMapper.updateById(logisticsOrder);
                 updateLogisticOrderTrack(logisticsOrder.getId(), LogisticsOrderEnum.HAVE_FINISHED, orderFinishDTO.getRemark());
+
                 //获取物流订单下的子单
                 /**完结订单-对应物流订单下子订单都要进行完结*/
                 List<KwtLogisticsOrder> kwtLogisticsOrders = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
@@ -909,8 +912,6 @@ public class KwtConsignOrderService {
                 //需要修改的mongodb数据
                 List<Map<String, Object>> list = new ArrayList<>();
                 if (!org.springframework.util.CollectionUtils.isEmpty(kwtLogisticsOrders)) {
-                    //修改单据状态
-//            List<Long> ids = kwtLogisticsOrders.stream().map(KwtLogisticsOrder::getId).collect(Collectors.toList());
                     //修改单据剩余运输量
                     kwtLogisticsOrders.forEach(kwtLogisticsOrder -> {
                         BigDecimal subtract = kwtLogisticsOrder.getAmount().subtract(kwtLogisticsOrder.getTotalLoadAmount());
@@ -920,25 +921,13 @@ public class KwtConsignOrderService {
                         map.put("id", kwtLogisticsOrder.getId());
                         map.put("ignoreAmount", subtract);
                         list.add(map);
-//                updateMongoDbByLogisticsOrder(kwtLogisticsOrder.getId(), orderFinishDTO, subtract);
                     });
                 }
+
                 /**是否是一级订单,是->推送至贸易,否,数据推送至物流订单上级*/
                 if (logisticsOrder.getPid() == null && "1".equals(logisticsOrder.getType())) {
                     //数据推送至贸易订单
                     CompleteLogisticsOrderParam tradeOrder = new CompleteLogisticsOrderParam();
-                    //todo 2023-09-07 修改为不传递总量,只传递当前单据页面传递值
-                    //获取实际装货量-实际卸货量
-//            Map<String, BigDecimal> map = kwtLogisticsOrderMapper.countAmountByTradeOrderId(logisticsOrder.getTOrderId());
-                    //获取是否订单已经全部处理完成
-                    List<Integer> statusList = new ArrayList<>();
-                    statusList.add(LogisticsOrderEnum.TO_BE_PLANNED.getCode());
-                    statusList.add(LogisticsOrderEnum.PENDING_ORDER.getCode());
-                    statusList.add(LogisticsOrderEnum.WAIT_DELIVERY.getCode());
-                    statusList.add(LogisticsOrderEnum.IN_TRANSIT.getCode());
-                    List<KwtLogisticsOrder> logisticsOrders = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
-                            .eq(KwtLogisticsOrder::getTOrderId, logisticsOrder.getTOrderId())
-                            .in(KwtLogisticsOrder::getStatus, statusList));
                     tradeOrder.setTOrderId(logisticsOrder.getTOrderId());
                     tradeOrder.setActualLoadAmount(orderFinishDTO.getLoadAmount());
                     tradeOrder.setActualUnloadAmount(orderFinishDTO.getUnloadAmount());
@@ -950,8 +939,9 @@ public class KwtConsignOrderService {
                         log.info("贸易订单手动完结订单异常,传递信息:{},返回信息:{}", JSONObject.toJSONString(tradeOrder), JSONObject.toJSONString(httpResult));
                         throw new BusinessException("单据完结出现错误!" + httpResult.getMsg());
                     }
+
                     CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
-                    param.setTOrderId(Long.valueOf(logisticsOrder.getTOrderId()));
+                    param.setTOrderId(logisticsOrder.getTOrderId());
                     param.setEntrustAmount(orderFinishDTO.getLoadAmount().subtract(logisticsOrder.getAmount()));
                     param.setUpdateBy(LoginUserHolder.getUserId());
                     param.setUpdateByName(LoginUserHolder.getUserName());
@@ -1182,7 +1172,6 @@ public class KwtConsignOrderService {
 //        return HttpResult.ok("承运订单-分包托运完结订单成功");
 //    }
 
-
     /**
      * 托运订单-完结订单-修改本身数据
      *
@@ -1279,8 +1268,8 @@ public class KwtConsignOrderService {
         }};
         WaybillCountVo waybillOrderCount = kwtWaybillOrderMapper.findWaybillOrderCount(map);
         OrderFinishVO orderFinishVO = new OrderFinishVO();
-        orderFinishVO.setLoadAmount(waybillOrderCount == null ? new BigDecimal("0.00") : waybillOrderCount.getLoadAmount());
-        orderFinishVO.setUnloadAmount(waybillOrderCount == null ? new BigDecimal("0.00") : waybillOrderCount.getUnloadAmount());
+        orderFinishVO.setLoadAmount(waybillOrderCount == null ? NumberConstant.ZERO_TWO : waybillOrderCount.getLoadAmount());
+        orderFinishVO.setUnloadAmount(waybillOrderCount == null ? NumberConstant.ZERO_TWO : waybillOrderCount.getUnloadAmount());
         orderFinishVO.setNumber(waybillOrderCount == null ? NumberConstant.ZERO : waybillOrderCount.getTotalComplete());
         orderFinishVO.setAmount(finishVO.getAmount());
         return HttpResult.ok(orderFinishVO);
@@ -2213,20 +2202,20 @@ public class KwtConsignOrderService {
 
     private void computeCompareTotalPrice(StatisticsResultVO resultVO, StatisticsByOrderVO currentWeek, StatisticsByOrderVO lastWeek) {
         Integer flag = 1;
-        BigDecimal chainRatio = new BigDecimal("0.00");
-        if (currentWeek.getTotalPrice().compareTo(new BigDecimal("0.00")) == 0
-                && lastWeek.getTotalPrice().compareTo(new BigDecimal("0.00")) == 0) {
-            chainRatio = new BigDecimal("0.00");
-        } else if (currentWeek.getTotalPrice().compareTo(new BigDecimal("0.00")) == 0) {
+        BigDecimal chainRatio = NumberConstant.ZERO_TWO;
+        if (currentWeek.getTotalPrice().compareTo(NumberConstant.ZERO_TWO) == 0
+                && lastWeek.getTotalPrice().compareTo(NumberConstant.ZERO_TWO) == 0) {
+            chainRatio = NumberConstant.ZERO_TWO;
+        } else if (currentWeek.getTotalPrice().compareTo(NumberConstant.ZERO_TWO) == 0) {
             chainRatio = chainRatio.subtract(new BigDecimal("100.00"));
             flag = 2;
-        } else if (lastWeek.getTotalPrice().compareTo(new BigDecimal("0.00")) == 0) {
+        } else if (lastWeek.getTotalPrice().compareTo(NumberConstant.ZERO_TWO) == 0) {
             chainRatio = new BigDecimal("100.00").subtract(chainRatio);
         } else {
             chainRatio = (currentWeek.getTotalPrice().subtract(lastWeek.getTotalPrice())).divide(lastWeek.getTotalPrice(), NumberConstant.SIX, RoundingMode.HALF_UP)
                     .multiply(new BigDecimal("100.00")).setScale(NumberConstant.TWO, RoundingMode.HALF_UP);
         }
-        if (chainRatio.compareTo(new BigDecimal("0.00")) == -1) {
+        if (chainRatio.compareTo(NumberConstant.ZERO_TWO) == -1) {
             flag = 2;
         }
         StatisticsTotalPriceVO priceVO = new StatisticsTotalPriceVO();
@@ -2240,20 +2229,20 @@ public class KwtConsignOrderService {
 
     private void computeCompareAmount(StatisticsResultVO resultVO, StatisticsByOrderVO currentWeek, StatisticsByOrderVO lastWeek) {
         Integer amountFlag = 1;
-        BigDecimal amountChainRatio = new BigDecimal("0.00");
-        if (currentWeek.getAmount().compareTo(new BigDecimal("0.00")) == 0
-                && lastWeek.getAmount().compareTo(new BigDecimal("0.00")) == 0) {
-            amountChainRatio = new BigDecimal("0.00");
-        } else if (currentWeek.getAmount().compareTo(new BigDecimal("0.00")) == 0) {
+        BigDecimal amountChainRatio = NumberConstant.ZERO_TWO;
+        if (currentWeek.getAmount().compareTo(NumberConstant.ZERO_TWO) == 0
+                && lastWeek.getAmount().compareTo(NumberConstant.ZERO_TWO) == 0) {
+            amountChainRatio = NumberConstant.ZERO_TWO;
+        } else if (currentWeek.getAmount().compareTo(NumberConstant.ZERO_TWO) == 0) {
             amountChainRatio = amountChainRatio.subtract(new BigDecimal("100.00"));
             amountFlag = 2;
-        } else if (lastWeek.getAmount().compareTo(new BigDecimal("0.00")) == 0) {
+        } else if (lastWeek.getAmount().compareTo(NumberConstant.ZERO_TWO) == 0) {
             amountChainRatio = new BigDecimal("100.00").subtract(amountChainRatio);
         } else {
             amountChainRatio = (currentWeek.getAmount().subtract(lastWeek.getAmount())).divide(lastWeek.getAmount(), NumberConstant.SIX, RoundingMode.HALF_UP)
                     .multiply(new BigDecimal("100.00")).setScale(NumberConstant.TWO, RoundingMode.HALF_UP);
         }
-        if (amountChainRatio.compareTo(new BigDecimal("0.00")) == -1) {
+        if (amountChainRatio.compareTo(NumberConstant.ZERO_TWO) == -1) {
             amountFlag = 2;
         }
 
@@ -2269,20 +2258,20 @@ public class KwtConsignOrderService {
 
     private void computeCompareWaitingAmount(StatisticsResultVO resultVO, StatisticsByOrderVO currentWeek, StatisticsByOrderVO lastWeek) {
         Integer flag = 1;
-        BigDecimal chainRatio = new BigDecimal("0.00");
-        if (currentWeek.getWaitingAmount().compareTo(new BigDecimal("0.00")) == 0
-                && lastWeek.getWaitingAmount().compareTo(new BigDecimal("0.00")) == 0) {
-            chainRatio = new BigDecimal("0.00");
-        } else if (currentWeek.getWaitingAmount().compareTo(new BigDecimal("0.00")) == 0) {
+        BigDecimal chainRatio = NumberConstant.ZERO_TWO;
+        if (currentWeek.getWaitingAmount().compareTo(NumberConstant.ZERO_TWO) == 0
+                && lastWeek.getWaitingAmount().compareTo(NumberConstant.ZERO_TWO) == 0) {
+            chainRatio = NumberConstant.ZERO_TWO;
+        } else if (currentWeek.getWaitingAmount().compareTo(NumberConstant.ZERO_TWO) == 0) {
             chainRatio = chainRatio.subtract(new BigDecimal("100.00"));
             flag = 2;
-        } else if (lastWeek.getWaitingAmount().compareTo(new BigDecimal("0.00")) == 0) {
+        } else if (lastWeek.getWaitingAmount().compareTo(NumberConstant.ZERO_TWO) == 0) {
             chainRatio = new BigDecimal("100.00").subtract(chainRatio);
         } else {
             chainRatio = (currentWeek.getWaitingAmount().subtract(lastWeek.getWaitingAmount())).divide(lastWeek.getWaitingAmount(), NumberConstant.SIX, RoundingMode.HALF_UP)
                     .multiply(new BigDecimal("100.00")).setScale(NumberConstant.TWO, RoundingMode.HALF_UP);
         }
-        if (chainRatio.compareTo(new BigDecimal("0.00")) == -1) {
+        if (chainRatio.compareTo(NumberConstant.ZERO_TWO) == -1) {
             flag = 2;
         }
         /**待分配量*/

+ 37 - 47
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -46,6 +46,7 @@ import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.LogisticsOrderDTO;
 import com.sckw.transport.model.dto.OrderCarDTO;
 import com.sckw.transport.model.dto.OrderFinishDTO;
+import com.sckw.transport.model.dto.OrderManualCompletionDto;
 import com.sckw.transport.model.param.LogisticsConsignmentParam;
 import com.sckw.transport.model.vo.OrderFinishVO;
 import com.sckw.transport.model.vo.PurchaseLogisticOrderExcelVo;
@@ -74,6 +75,7 @@ import java.util.stream.Collectors;
  */
 @Slf4j
 @Service
+@SuppressWarnings("all")
 public class KwtLogisticsConsignmentService {
 
     @Resource
@@ -169,12 +171,12 @@ public class KwtLogisticsConsignmentService {
      */
     private HttpResult checkParamData(LogisticsConsignmentParam bo) {
         if (!ObjectUtils.isEmpty(bo.getLoss())) {
-            if (bo.getLoss().compareTo(new BigDecimal("0.00")) < 0) {
+            if (bo.getLoss().compareTo(NumberConstant.ZERO_TWO) < 0) {
                 return HttpResult.error("合理损耗填写时,必须大于0");
             }
         }
         if (!ObjectUtils.isEmpty(bo.getGoodsPrice())) {
-            if (bo.getGoodsPrice().compareTo(new BigDecimal("0.00")) < 0) {
+            if (bo.getGoodsPrice().compareTo(NumberConstant.ZERO_TWO) < 0) {
                 return HttpResult.error("扣亏货值填写时,必须大于0");
             }
         }
@@ -193,17 +195,19 @@ public class KwtLogisticsConsignmentService {
         OrderDetailRes tradeOrder = tradeOrderInfoService.getOrderDetailById(Long.parseLong(bo.getTOrderId()));
         if (tradeOrder == null) {
             log.error("订单id查找失败:{}", bo.getTOrderId());
-            throw new BusinessException("单据错误,数据不存在");
+            throw new BusinessException("贸易订单数据不存在");
         }
         KwtLogisticsOrder order = new KwtLogisticsOrder();
         if (!bo.getIsFullDose()) {
-            BigDecimal amount = bo.getAmount();
+            //BigDecimal amount = tradeOrder.getAmount().subtract(tradeOrder.getEntrustAmount());
             BigDecimal carryingCapacity = bo.getCarryingCapacity();
-            if (bo.getCarryingCapacity().compareTo(new BigDecimal("0.00")) == 0) {
+            if (bo.getCarryingCapacity().compareTo(NumberConstant.ZERO_TWO) == 0) {
                 log.error("可分配量分配错误:{}", bo.getTOrderId());
                 throw new BusinessException("可分配量分配必须填写大于0");
             }
-            if (amount.compareTo(carryingCapacity) < 0) {
+            //可运量校验
+            boolean bool = logisticsOrderGoodsService.chenkAmount(bo, tradeOrder);
+            if (!bool) {
                 log.error("可分配量分配错误:{}", bo.getTOrderId());
                 throw new BusinessException("可分配量分配错误");
             }
@@ -212,9 +216,10 @@ public class KwtLogisticsConsignmentService {
             }
             order.setAmount(bo.getCarryingCapacity());
         } else {
-            order.setAmount(new BigDecimal("0.00"));
-            order.setSubcontractAmount(new BigDecimal("0.00"));
+            order.setAmount(NumberConstant.ZERO_TWO);
+            order.setSubcontractAmount(NumberConstant.ZERO_TWO);
         }
+
         Long orderId = new IdWorker(NumberConstant.ONE).nextId();
         long contractId = Long.parseLong(bo.getContractId());
         List<Long> contractList = new ArrayList<>();
@@ -260,6 +265,7 @@ public class KwtLogisticsConsignmentService {
             log.info("{}生成物流托运失败!,返回信息:{}", tradeOrder.getTOrderNo(), JSONObject.toJSONString(httpResult));
             throw new BusinessException("{" + tradeOrder.getTOrderNo() + "}生成物流托运失败!" + httpResult.getMsg());
         }
+
         /**消息列表
          * 1 采购 2 销售
          * */
@@ -272,12 +278,13 @@ public class KwtLogisticsConsignmentService {
         if (orderType == NumberConstant.ONE) {
             EntCacheResDto consignentMap = remoteSystemService.queryEntTreeById(Long.parseLong(bo.getConsignCompanyId()));
             EntCacheResDto checkentMap = remoteSystemService.queryEntTreeById(Long.parseLong(bo.getCheckCompanyId()));
+            //发起方
             checkUnit.setUnitType(NumberConstant.ONE);
             checkUnit.setFirmName(bo.getCheckCompany());
             checkUnit.setEntId(Long.parseLong(bo.getConsignCompanyId()));
             checkUnit.setTopEntId(consignentMap == null ? null : consignentMap.getId());
             checkUnit.setContactsId(Long.parseLong(bo.getCheckContactsId()));
-
+            //接收方
             carriageUnit.setUnitType(NumberConstant.TWO);
             carriageUnit.setFirmName(bo.getConsignCompany());
             carriageUnit.setEntId(Long.parseLong(bo.getCheckCompanyId()));
@@ -293,21 +300,18 @@ public class KwtLogisticsConsignmentService {
         } else if (orderType == NumberConstant.TWO) {
             EntCacheResDto consignentMap = remoteSystemService.queryEntTreeById(Long.parseLong(bo.getConsignCompanyId()));
             EntCacheResDto checkentMap = remoteSystemService.queryEntTreeById(Long.parseLong(bo.getCheckCompanyId()));
-
             //发起方
             checkUnit.setUnitType(NumberConstant.ONE);
             checkUnit.setFirmName(bo.getCheckCompany());
             checkUnit.setEntId(Long.parseLong(bo.getCheckCompanyId()));
             checkUnit.setTopEntId(consignentMap == null ? null : consignentMap.getId());
             checkUnit.setContactsId(Long.parseLong(bo.getConsignContactsId()));
-
             //接收方
             carriageUnit.setUnitType(NumberConstant.TWO);
             carriageUnit.setFirmName(bo.getConsignCompany());
             carriageUnit.setEntId(Long.parseLong(bo.getConsignCompanyId()));
             carriageUnit.setTopEntId(checkentMap == null ? null : checkentMap.getId());
             carriageUnit.setContactsId(Long.parseLong(bo.getCheckContactsId()));
-
             pcConsignUrl = messageUrlConfig.getPc().getConsignLogisticsAddOrderUrl();
             appConsignUrl = messageUrlConfig.getApp().getConsignLogisticsAddOrderUrl();
             pcCarriageUrl = messageUrlConfig.getPc().getCarriageLogisticsAddOrderUrl();
@@ -351,9 +355,9 @@ public class KwtLogisticsConsignmentService {
             logisticsOrder.setUnit(bo.getCarryingCapacityUnit());
             logisticsOrder.setCarryingCapacity(bo.getCarryingCapacity());
         } else {
-            logisticsOrder.setAmount(new BigDecimal("0.00"));
-            logisticsOrder.setSubcontractAmount(new BigDecimal("0.00"));
-            logisticsOrder.setCarryingCapacity(new BigDecimal("0.00"));
+            logisticsOrder.setAmount(NumberConstant.ZERO_TWO);
+            logisticsOrder.setSubcontractAmount(NumberConstant.ZERO_TWO);
+            logisticsOrder.setCarryingCapacity(NumberConstant.ZERO_TWO);
         }
         logisticsOrder.setLoss(bo.getLoss() == null ? null : bo.getLoss());
         logisticsOrder.setLossUnit(bo.getLossUnit());
@@ -865,15 +869,15 @@ public class KwtLogisticsConsignmentService {
         //总数
         Long count = 0L;
         //计划量
-        BigDecimal amount = new BigDecimal("0.00");
+        BigDecimal amount = NumberConstant.ZERO_TWO;
         //剩余调度量
-        BigDecimal residue = new BigDecimal("0.00");
+        BigDecimal residue = NumberConstant.ZERO_TWO;
         if (flag) {
             count = getLogisticsOrderCount(id, type);
             list = kwtLogisticsOrderMapper.selectOrderCountByTorderId(id, type);
             /**数据统计*/
             for (LogisticsOrderDTO logisticsOrderDTO : list) {
-                amount = amount.add(logisticsOrderDTO.getAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getAmount());
+                amount = amount.add(logisticsOrderDTO.getAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getAmount());
             }
             residue = resAmount.subtract(amount);
         }
@@ -1413,13 +1417,12 @@ public class KwtLogisticsConsignmentService {
         /**完结订单 不做页面填写数量与数据库数量进行计算验证-直接获取页面填写数据进行保存处理*/
         //物流订单id
         String id = orderFinishDTO.getId();
-        KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
-                .eq(KwtLogisticsOrder::getId, id));
+        KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderMapper.selectById(id);
         if (logisticsOrder == null) {
             throw new BusinessException("采购订单-完结订单-物流单据不存在!");
         }
         //todo 2023-09-01 根据要求去除校验 物流订单手动完结,实装量可大于分配量,实卸量目前暂定不可大于实装量;根据计费方式,当对应实装或实卸大于分配量时自然完结
-//        BigDecimal amount = logisticsOrder.getAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getAmount();
+//        BigDecimal amount = logisticsOrder.getAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getAmount();
 //        if (amount.compareTo(orderFinishDTO.getLoadAmount()) < 0) {
 //            throw new BusinessException("完结订单,装货量不能大于运输总量");
 //        }
@@ -1431,6 +1434,7 @@ public class KwtLogisticsConsignmentService {
                 && !LogisticsOrderEnum.IN_TRANSIT.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))) {
             throw new BusinessException("当前订单并不属于【待派车】,【运输中】状态");
         }
+
         //验证当前物流订单是否还存在进行的车辆运单
         boolean flag = commonService.judgmentWaybillOrderIsFinish(id);
         if (flag) {
@@ -1446,6 +1450,7 @@ public class KwtLogisticsConsignmentService {
         kwtLogisticsOrderMapper.updateById(logisticsOrder);
         //修改mongodb的数据
         updateMongoDbByLogisticsOrder(logisticsOrder, orderFinishDTO);
+
         //获取物流订单下的子单
         /**完结订单-对应物流订单下子订单都要进行完结*/
         List<KwtLogisticsOrder> kwtLogisticsOrders = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
@@ -1469,24 +1474,7 @@ public class KwtLogisticsConsignmentService {
 
         /**数据推送至贸易订单*/
         CompleteLogisticsOrderParam tradeOrder = new CompleteLogisticsOrderParam();
-        //TODO 2023-09-07 修改使用直接传递页面数据 不统计计算
-        //获取实际装货量-实际卸货量
-//        Map<String, BigDecimal> map = kwtLogisticsOrderMapper.countAmountByTradeOrderId(logisticsOrder.getTOrderId());
-        //获取是否订单已经全部处理完成
-        List<Integer> statusList = new ArrayList<>();
-        statusList.add(LogisticsOrderEnum.TO_BE_PLANNED.getCode());
-        statusList.add(LogisticsOrderEnum.PENDING_ORDER.getCode());
-        statusList.add(LogisticsOrderEnum.WAIT_DELIVERY.getCode());
-        statusList.add(LogisticsOrderEnum.IN_TRANSIT.getCode());
-        /*List<KwtLogisticsOrder> logisticsOrders = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
-                .eq(KwtLogisticsOrder::getTOrderId, logisticsOrder.getTOrderId())
-                .in(KwtLogisticsOrder::getStatus, statusList));
-        if (org.springframework.util.CollectionUtils.isEmpty(logisticsOrders)) {
-            tradeOrder.setIsAllComplete(true);
-        }*/
         tradeOrder.setTOrderId(logisticsOrder.getTOrderId());
-//        tradeOrder.setActualLoadAmount(map.get("totalLoadAmount"));
-//        tradeOrder.setActualUnloadAmount(map.get("totalUnloadAmount"));
         tradeOrder.setActualLoadAmount(orderFinishDTO.getLoadAmount());
         tradeOrder.setActualUnloadAmount(orderFinishDTO.getUnloadAmount());
         tradeOrder.setUpdateBy(LoginUserHolder.getUserId());
@@ -1497,8 +1485,9 @@ public class KwtLogisticsConsignmentService {
             log.info("贸易订单-采购订单/销售订单-手动完结订单异常,传递信息:{},返回信息:{}", JSONObject.toJSONString(tradeOrder), JSONObject.toJSONString(httpResult));
             throw new BusinessException("单据完结出现错误!" + httpResult.getMsg());
         }
+
         CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
-        param.setTOrderId(Long.valueOf(logisticsOrder.getTOrderId()));
+        param.setTOrderId(logisticsOrder.getTOrderId());
         param.setEntrustAmount(orderFinishDTO.getLoadAmount().subtract(logisticsOrder.getAmount()));
         param.setUpdateBy(LoginUserHolder.getUserId());
         param.setUpdateByName(LoginUserHolder.getUserName());
@@ -1507,6 +1496,7 @@ public class KwtLogisticsConsignmentService {
             log.info("采购订单/销售订单完结订单,返回信息:{}", "id:" + logisticsOrder.getTOrderId() + "orderNo" + logisticsOrder.getTOrderNo(), JSONObject.toJSONString(result1));
             throw new BusinessException("{" + logisticsOrder.getTOrderNo() + "} 采购订单/销售订单完结订单失败!" + result1.getMsg());
         }
+
         transportCommonService.closeHandle(logisticsOrder.getId());
         waybillOrderService.cancelSendCar(logisticsOrder.getId());
         //todo 直接订单完结-不递归操作
@@ -1633,7 +1623,7 @@ public class KwtLogisticsConsignmentService {
 ////                System.out.println("0节点(传输为一级)下所有的根节点数据集合:" + topToLowerChildIdSet.toString());
 ////            }
 ////            //处理当前传递的id下  全部完结需要改的量
-////            BigDecimal decimals = new BigDecimal("0.00");
+////            BigDecimal decimals = NumberConstant.ZERO_TWO;
 ////            BigDecimal decimal = judgmentOrderFinish(id, topToLowerChildIdSet, decimals, logisticsOrder);
 ////            //返回给贸易订单实际装卸货量
 ////            Map map = countOrderNumber(logisticsOrder.getTOrderId());
@@ -1647,8 +1637,8 @@ public class KwtLogisticsConsignmentService {
     /**
      * 根据物流订单修改mongodb数据
      *
-     * @param logisticsOrder
-     * @param orderFinishDTO
+     * @param logisticsOrder 物流订单
+     * @param orderFinishDTO 完结信息
      */
     private void updateMongoDbByLogisticsOrder(KwtLogisticsOrder logisticsOrder, OrderFinishDTO orderFinishDTO) {
         //更新mongodb
@@ -1753,8 +1743,8 @@ public class KwtLogisticsConsignmentService {
 
     private Map countOrderNumber(Long tOrderId) {
         Map<String, BigDecimal> map = new HashMap<>(Global.NUMERICAL_SIXTEEN);
-        BigDecimal loadAmountTotal = new BigDecimal("0.00");
-        BigDecimal unloadAmountTotal = new BigDecimal("0.00");
+        BigDecimal loadAmountTotal = NumberConstant.ZERO_TWO;
+        BigDecimal unloadAmountTotal = NumberConstant.ZERO_TWO;
         List<KwtLogisticsOrder> kwtLogisticsOrderList = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>().eq(KwtLogisticsOrder::getTOrderId, tOrderId));
         for (KwtLogisticsOrder kwtLogisticsOrder : kwtLogisticsOrderList) {
             BigDecimal loadAmount = kwtLogisticsOrder.getLoadAmount();
@@ -1782,7 +1772,7 @@ public class KwtLogisticsConsignmentService {
                 for (KwtLogisticsOrder kwtLogisticsOrder : kwtLogisticsOrderList) {
                     BigDecimal entrustAmount = kwtLogisticsOrder.getEntrustAmount();
                     BigDecimal subcontractAmount = kwtLogisticsOrder.getSubcontractAmount();
-                    if (subcontractAmount.compareTo(new BigDecimal("0.00")) == 0) {
+                    if (subcontractAmount.compareTo(NumberConstant.ZERO_TWO) == 0) {
                         //最底下根节点-获取父级
                         KwtLogisticsOrder selectOne = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
                                 .eq(KwtLogisticsOrder::getId, kwtLogisticsOrder.getPid())
@@ -2081,8 +2071,8 @@ public class KwtLogisticsConsignmentService {
         map.put("passStatus", 1);
         WaybillCountVo waybillOrderCount = waybillOrderMapper.findWaybillOrderCount(map);
         OrderFinishVO orderFinishVO = new OrderFinishVO();
-        orderFinishVO.setLoadAmount(waybillOrderCount == null ? new BigDecimal("0.00") : waybillOrderCount.getLoadAmount());
-        orderFinishVO.setUnloadAmount(waybillOrderCount == null ? new BigDecimal("0.00") : waybillOrderCount.getUnloadAmount());
+        orderFinishVO.setLoadAmount(waybillOrderCount == null ? NumberConstant.ZERO_TWO : waybillOrderCount.getLoadAmount());
+        orderFinishVO.setUnloadAmount(waybillOrderCount == null ? NumberConstant.ZERO_TWO : waybillOrderCount.getUnloadAmount());
         orderFinishVO.setNumber(waybillOrderCount == null ? NumberConstant.ZERO : waybillOrderCount.getTotalComplete());
         httpResult.setData(orderFinishVO);
         return httpResult;

+ 65 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsOrderGoodsService.java

@@ -1,5 +1,6 @@
 package com.sckw.transport.service;
 
+import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
@@ -8,6 +9,7 @@ import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.order.api.model.OrderDetailRes;
 import com.sckw.transport.dao.KwtLogisticsOrderGoodsMapper;
 import com.sckw.transport.dao.KwtLogisticsOrderGoodsUnitMapper;
 import com.sckw.transport.dao.KwtLogisticsOrderMapper;
@@ -16,6 +18,8 @@ import com.sckw.transport.model.KwtLogisticsOrder;
 import com.sckw.transport.model.KwtLogisticsOrderGoods;
 import com.sckw.transport.model.KwtLogisticsOrderGoodsUnit;
 import com.sckw.transport.model.dto.AddOrderDTO;
+import com.sckw.transport.model.dto.OrderGoodsLoadingDto;
+import com.sckw.transport.model.dto.OrderManualCompletionDto;
 import com.sckw.transport.model.param.GoodsUnitParam;
 import com.sckw.transport.model.param.LogisticsConsignmentParam;
 import com.sckw.transport.model.vo.LogisticsCountVo;
@@ -23,6 +27,8 @@ import com.sckw.transport.model.vo.WaybillCountVo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -167,7 +173,6 @@ public class KwtLogisticsOrderGoodsService {
         }
     }
 
-
     /**
      * 更新物流订单商品辅助单位-装卸货量
      * @param lOrderId 物流订单
@@ -199,6 +204,65 @@ public class KwtLogisticsOrderGoodsService {
         }
     }
 
+    /**
+     * 完结物流订单更新商品辅助单位
+     * @param params 完结参数
+     */
+    public void editLogisticsOrderGoodsTotalLoading(OrderManualCompletionDto params){
+        //辅助单位
+        List<KwtLogisticsOrderGoodsUnit> assistUnit = goodsUnitMapper.findGoodsUnit(new HashMap<>(NumberConstant.SIXTEEN){{
+            put("lOrderId", params.getId());
+        }});
+        List<OrderGoodsLoadingDto> loading = params.getLoading();
+        if (CollectionUtils.isNotEmpty(assistUnit)) {
+            assistUnit.forEach(e -> {
+                for (OrderGoodsLoadingDto goodsLoading:loading) {
+                    if (goodsLoading.getUnit().equals(e.getUnit())) {
+                        //更新物流订单商品辅助单位-总装卸货量
+                        e.setTotalLoadAmount(goodsLoading.getLoadAmount());
+                        e.setTotalUnloadAmount(goodsLoading.getUnloadAmount());
+                        goodsUnitMapper.updateById(e);
+                    }
+                }
+            });
+        }
+    }
 
+    /**
+     * 物流托运校验贸易订单可派量
+     * @param logisticsOrder 派车参数
+     * @param tradeOrder 贸易订单
+     * @return true 校验通过
+     */
+    public boolean chenkAmount(LogisticsConsignmentParam logisticsOrder, OrderDetailRes tradeOrder) {
+        List<GoodsUnitParam> assistUnit = logisticsOrder.getAssistUnit();
+        BigDecimal amount = tradeOrder.getAmount().subtract(tradeOrder.getEntrustAmount());
+        BigDecimal arryingCapacity = logisticsOrder.getCarryingCapacity();
+        String unit = tradeOrder.getUnit();
+        if (logisticsOrder.getCarryingCapacityUnit().equals(unit)) {
+            if (amount.compareTo(arryingCapacity) >= 0) {
+                return true;
+            }
+        } else {
+            if (CollectionUtils.isEmpty(assistUnit)) {
+                return false;
+            }
+            //辅助单位
+            for (GoodsUnitParam goodsUnit:assistUnit) {
+                BigDecimal conversionValue = goodsUnit.getConversionValue();
+                if (logisticsOrder.getCarryingCapacityUnit().equals(goodsUnit.getFromUnit())) {
+                    if (amount.compareTo(arryingCapacity.multiply(conversionValue)) >= 0) {
+                        return true;
+                    }
+                }
+                if (logisticsOrder.getCarryingCapacityUnit().equals(goodsUnit.getToUnit())) {
+                    if (amount.compareTo(arryingCapacity.divide(conversionValue)) >= 0) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
 
 }

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

@@ -453,8 +453,8 @@ public class KwtManagementLogisticsOrderService {
             orderDetailVO.setPerformanceAmount(logisticsOrder.getUnloadAmount() == null ? null : logisticsOrder.getUnloadAmount());
         }
 //        orderDetailVO.setPerformanceAmount(logisticsOrder.getLoadAmount() == null ? null : logisticsOrder.getLoadAmount());
-        orderDetailVO.setTotalLoadAmount(logisticsOrder.getTotalLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getTotalLoadAmount());
-        orderDetailVO.setTotalUnloadAmount(logisticsOrder.getTotalUnloadAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getTotalUnloadAmount());
+        orderDetailVO.setTotalLoadAmount(logisticsOrder.getTotalLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getTotalLoadAmount());
+        orderDetailVO.setTotalUnloadAmount(logisticsOrder.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getTotalUnloadAmount());
         orderDetailVO.setCreateTime(logisticsOrder.getCreateTime());
         orderDetailVO.setPayment(logisticsOrder.getPayment());
         if (logisticsOrder.getPayment() != null) {
@@ -504,7 +504,7 @@ public class KwtManagementLogisticsOrderService {
          按照趟次=运输运价
          */
         //合理损耗
-        BigDecimal loss = logisticsOrder.getLoss() == null ? new BigDecimal("0.00") : logisticsOrder.getLoss();
+        BigDecimal loss = logisticsOrder.getLoss() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getLoss();
 
         Integer status = logisticsOrder.getStatus();
         List<Integer> orderStatusFinish = new ArrayList<>();
@@ -516,10 +516,10 @@ public class KwtManagementLogisticsOrderService {
             /**亏吨量/吨->装货量-卸货量
              扣亏量/吨->亏吨量-合理损耗值
              扣亏量/吨->亏吨量-合理损耗值(装货量*合理损耗)*/
-            BigDecimal loadAmount = logisticsOrder.getLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getLoadAmount();
-            BigDecimal unloadAmount = logisticsOrder.getUnloadAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getUnloadAmount();
+            BigDecimal loadAmount = logisticsOrder.getLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getLoadAmount();
+            BigDecimal unloadAmount = logisticsOrder.getUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getUnloadAmount();
             //运价
-            BigDecimal price = logisticsOrder.getPrice() == null ? new BigDecimal("0.00") : logisticsOrder.getPrice();
+            BigDecimal price = logisticsOrder.getPrice() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getPrice();
             //亏吨量
             BigDecimal defectiveWeighNumber = loadAmount.subtract(unloadAmount);
             //合理损耗值
@@ -527,10 +527,10 @@ public class KwtManagementLogisticsOrderService {
             //扣亏量/吨
             BigDecimal deductWeighNumber = defectiveWeighNumber.subtract(lossAmount);
             if (deductWeighNumber.compareTo(new BigDecimal("0")) < 0) {
-                deductWeighNumber = new BigDecimal("0.00");
+                deductWeighNumber = NumberConstant.ZERO_TWO;
             }
             //罚款值
-            BigDecimal fineValue = (logisticsOrder.getGoodsPrice() == null ? new BigDecimal("0.00") : logisticsOrder.getGoodsPrice()).multiply(deductWeighNumber);
+            BigDecimal fineValue = (logisticsOrder.getGoodsPrice() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getGoodsPrice()).multiply(deductWeighNumber);
             if (DictEnum.CHARGING_TYPE_1.getValue().equals(logisticsOrder.getBillingMode())) {
                 orderDetailVO.setOrderAmount(price.multiply(loadAmount));
             } else if (DictEnum.CHARGING_TYPE_2.getValue().equals(logisticsOrder.getBillingMode())) {
@@ -580,20 +580,20 @@ public class KwtManagementLogisticsOrderService {
                             .eq(StringUtils.isNotBlank(kwtWaybillOrder.getId()), KwtWaybillOrderTicket::getWOrderId, kwtWaybillOrder.getId())
                             .eq(KwtWaybillOrderTicket::getType, NumberConstant.TWO));
                     //合理损耗
-                    BigDecimal loss = order.getLoss() == null ? new BigDecimal("0.00") : order.getLoss();
+                    BigDecimal loss = order.getLoss() == null ? NumberConstant.ZERO_TWO : order.getLoss();
                     /**亏吨量/吨->装货量-卸货量
                      * 合理损耗值=装货量*合理损耗
                      扣亏量/吨->亏吨量-合理损耗值
                      */
-                    BigDecimal loadAmount = kwtWaybillOrder.getLoadAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getLoadAmount();
+                    BigDecimal loadAmount = kwtWaybillOrder.getLoadAmount() == null ? NumberConstant.ZERO_TWO : kwtWaybillOrder.getLoadAmount();
                     //已委托量
-                    BigDecimal entrustAmount = kwtWaybillOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getEntrustAmount();
+                    BigDecimal entrustAmount = kwtWaybillOrder.getEntrustAmount() == null ? NumberConstant.ZERO_TWO : kwtWaybillOrder.getEntrustAmount();
                     //合理损耗值
                     BigDecimal multiply = loadAmount.multiply(loss.divide(BigDecimal.valueOf(1000L)));
                     //亏吨量
-                    BigDecimal defectiveWeigh = kwtWaybillOrder.getDeficitAmount() == null ? new BigDecimal("0.00") : kwtWaybillOrder.getDeficitAmount();
+                    BigDecimal defectiveWeigh = kwtWaybillOrder.getDeficitAmount() == null ? NumberConstant.ZERO_TWO : kwtWaybillOrder.getDeficitAmount();
                     //扣亏量/吨
-                    BigDecimal deduct = defectiveWeigh.compareTo(new BigDecimal("0.00")) == 0 ? new BigDecimal("0.00") : defectiveWeigh.subtract(multiply);
+                    BigDecimal deduct = defectiveWeigh.compareTo(NumberConstant.ZERO_TWO) == 0 ? NumberConstant.ZERO_TWO : defectiveWeigh.subtract(multiply);
                     carWaybillVo.setWOrderId(String.valueOf(kwtWaybillOrder.getId()));
                     carWaybillVo.setWOrderNo(order.getLOrderNo());
                     carWaybillVo.setTruckNo(kwtWaybillOrder.getTruckNo());

+ 2 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtManagementWaybillOrderService.java

@@ -210,8 +210,8 @@ public class KwtManagementWaybillOrderService {
                         BigDecimal.valueOf(0) : waybillOrder.getDeficitAmount();
                 vo.setDeficitAmount(String.valueOf(deficitAmount));
                 // 计算扣亏量
-                BigDecimal loadAmount = waybillOrder.getLoadAmount() == null ? new BigDecimal("0.00") : waybillOrder.getLoadAmount();
-                BigDecimal unloadAmount = waybillOrder.getUnloadAmount() == null ? new BigDecimal("0.00") : waybillOrder.getUnloadAmount();
+                BigDecimal loadAmount = waybillOrder.getLoadAmount() == null ? NumberConstant.ZERO_TWO : waybillOrder.getLoadAmount();
+                BigDecimal unloadAmount = waybillOrder.getUnloadAmount() == null ? NumberConstant.ZERO_TWO : waybillOrder.getUnloadAmount();
                 BigDecimal deficitRealAmount = commonService.deficitLossAmount(
                         waybillOrder.getLoadAmount(),
                         loadAmount.subtract(unloadAmount),

+ 340 - 28
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtTransportCommonService.java

@@ -21,10 +21,7 @@ import com.sckw.core.web.response.HttpResult;
 import com.sckw.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.model.SckwLogisticsOrder;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
-import com.sckw.order.api.model.CreateOrCancelLogisticsOrderParam;
-import com.sckw.order.api.model.OrderDetailRes;
-import com.sckw.order.api.model.UnitInfoDetailRes;
-import com.sckw.order.api.model.UpdateActualAmountParam;
+import com.sckw.order.api.model.*;
 import com.sckw.redis.config.RedisLockUtil;
 import com.sckw.redis.constant.RedisConstant;
 import com.sckw.stream.enums.MessageEnum;
@@ -37,8 +34,7 @@ import com.sckw.transport.api.model.vo.LogisticsOrderVO;
 import com.sckw.transport.common.config.MessageUrlConfig;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
-import com.sckw.transport.model.dto.CancelOrderDTO;
-import com.sckw.transport.model.dto.DocumentParamDTO;
+import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.param.ContractParam;
 import com.sckw.transport.model.param.LogisticsOrderParam;
 import com.sckw.transport.model.vo.*;
@@ -85,6 +81,9 @@ public class KwtTransportCommonService {
     @Autowired
     public KwtWaybillOrderService waybillOrderService;
 
+    @Autowired
+    public KwtLogisticsOrderGoodsService logisticsOrderGoodsService;
+
     @Autowired
     public KwtLogisticsOrderGoodsMapper logisticsOrderGoodsMapper;
 
@@ -240,8 +239,8 @@ public class KwtTransportCommonService {
             orderDetailVO.setPerformanceAmount(logisticsOrder.getUnloadAmount() == null ? null : logisticsOrder.getUnloadAmount());
         }
 //        orderDetailVO.setPerformanceAmount(logisticsOrder.getLoadAmount() == null ? null : logisticsOrder.getLoadAmount());
-        orderDetailVO.setTotalLoadAmount(logisticsOrder.getTotalLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getTotalLoadAmount());
-        orderDetailVO.setTotalUnloadAmount(logisticsOrder.getTotalUnloadAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getTotalUnloadAmount());
+        orderDetailVO.setTotalLoadAmount(logisticsOrder.getTotalLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getTotalLoadAmount());
+        orderDetailVO.setTotalUnloadAmount(logisticsOrder.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getTotalUnloadAmount());
         orderDetailVO.setCreateTime(logisticsOrder.getCreateTime());
         orderDetailVO.setPayment(logisticsOrder.getPayment());
         if (logisticsOrder.getPayment() != null) {
@@ -282,8 +281,8 @@ public class KwtTransportCommonService {
         }
         orderDetailVO.setRemark(logisticsOrder.getRemark());
         orderDetailVO.setWaitDistributionAmount(logisticsOrder.getAmount()
-                .subtract(logisticsOrder.getSubcontractAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getSubcontractAmount())
-                .subtract(logisticsOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getEntrustAmount()));
+                .subtract(logisticsOrder.getSubcontractAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getSubcontractAmount())
+                .subtract(logisticsOrder.getEntrustAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getEntrustAmount()));
         /**亏吨量/吨->装货量-卸货量
          * 合理损耗值=装货量*合理损耗
          扣亏量/吨->亏吨量-合理损耗值
@@ -294,7 +293,7 @@ public class KwtTransportCommonService {
          按照趟次=运输运价
          */
         //合理损耗
-        BigDecimal loss = logisticsOrder.getLoss() == null ? new BigDecimal("0.00") : logisticsOrder.getLoss();
+        BigDecimal loss = logisticsOrder.getLoss() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getLoss();
 
         Integer status = logisticsOrder.getStatus();
         List<Integer> orderStatusFinish = new ArrayList<>();
@@ -306,10 +305,10 @@ public class KwtTransportCommonService {
             /**亏吨量/吨->装货量-卸货量
              扣亏量/吨->亏吨量-合理损耗值
              扣亏量/吨->亏吨量-合理损耗值(装货量*合理损耗)*/
-            BigDecimal loadAmount = logisticsOrder.getTotalLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getTotalLoadAmount();
-            BigDecimal unloadAmount = logisticsOrder.getTotalUnloadAmount() == null ? new BigDecimal("0.00") : logisticsOrder.getTotalUnloadAmount();
+            BigDecimal loadAmount = logisticsOrder.getTotalLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getTotalLoadAmount();
+            BigDecimal unloadAmount = logisticsOrder.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getTotalUnloadAmount();
             //运价
-            BigDecimal price = logisticsOrder.getPrice() == null ? new BigDecimal("0.00") : logisticsOrder.getPrice();
+            BigDecimal price = logisticsOrder.getPrice() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getPrice();
             //亏吨量
             BigDecimal defectiveWeighNumber = loadAmount.subtract(unloadAmount);
             //合理损耗值
@@ -317,10 +316,10 @@ public class KwtTransportCommonService {
             //扣亏量/吨
             BigDecimal deductWeighNumber = defectiveWeighNumber.subtract(lossAmount);
             if (deductWeighNumber.compareTo(new BigDecimal("0")) < 0) {
-                deductWeighNumber = new BigDecimal("0.00");
+                deductWeighNumber = NumberConstant.ZERO_TWO;
             }
             //罚款值
-            BigDecimal fineValue = (logisticsOrder.getGoodsPrice() == null ? new BigDecimal("0.00") : logisticsOrder.getGoodsPrice()).multiply(deductWeighNumber);
+            BigDecimal fineValue = (logisticsOrder.getGoodsPrice() == null ? NumberConstant.ZERO_TWO : logisticsOrder.getGoodsPrice()).multiply(deductWeighNumber);
             if (DictEnum.CHARGING_TYPE_1.getValue().equals(logisticsOrder.getBillingMode())) {
                 orderDetailVO.setOrderAmount(price.multiply(loadAmount));
             } else if (DictEnum.CHARGING_TYPE_2.getValue().equals(logisticsOrder.getBillingMode())) {
@@ -637,27 +636,27 @@ public class KwtTransportCommonService {
                  * 3、按趟次:总运价=运价*趟次【后期加】
                  */
                 //运价
-                BigDecimal price = logisticsOrderDTO.getPrice() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getPrice();
+                BigDecimal price = logisticsOrderDTO.getPrice() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getPrice();
 
 
                 /**亏吨量/吨->装货量-卸货量
                  扣亏量/吨->亏吨量-合理损耗值
                  扣亏量/吨->亏吨量-合理损耗值(装货量*合理损耗)*/
-                BigDecimal loadAmount = logisticsOrderDTO.getTotalLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalLoadAmount();
-                BigDecimal unloadAmount = logisticsOrderDTO.getTotalUnloadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalUnloadAmount();
-                BigDecimal loss = logisticsOrderDTO.getLoss() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getLoss();
+                BigDecimal loadAmount = logisticsOrderDTO.getTotalLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalLoadAmount();
+                BigDecimal unloadAmount = logisticsOrderDTO.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalUnloadAmount();
+                BigDecimal loss = logisticsOrderDTO.getLoss() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getLoss();
                 //亏吨量
                 BigDecimal defectiveWeighNumber = loadAmount.subtract(unloadAmount);
                 //合理损耗值
-                BigDecimal lossAmount = loadAmount.multiply(logisticsOrderDTO.getLoss() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getLoss());
+                BigDecimal lossAmount = loadAmount.multiply(logisticsOrderDTO.getLoss() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getLoss());
                 //扣亏量
 //                BigDecimal deductWeighNumber = defectiveWeighNumber.subtract(lossAmount);
 //                if (deductWeighNumber.compareTo(new BigDecimal("0")) < 0) {
-//                    deductWeighNumber = new BigDecimal("0.00");
+//                    deductWeighNumber = NumberConstant.ZERO_TWO;
 //                }
                 BigDecimal deductWeighNumber = commonService.deficitLossAmount(loadAmount, defectiveWeighNumber, loss, logisticsOrderDTO.getLossUnit());
                 //罚款值
-                BigDecimal fineValue = (logisticsOrderDTO.getGoodsPrice() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getGoodsPrice()).multiply(deductWeighNumber);
+                BigDecimal fineValue = (logisticsOrderDTO.getGoodsPrice() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getGoodsPrice()).multiply(deductWeighNumber);
                 /**
                  *
                  * 二、运价计算:
@@ -666,13 +665,13 @@ public class KwtTransportCommonService {
                  * 3、按趟次:总运价=运价*趟次【后期加】
                  */
                 //todo 2023-10-10 含税金额不减去罚款值 另指定罚款值进行返回数据
-                BigDecimal actualAmount = new BigDecimal("0.00");
+                BigDecimal actualAmount = NumberConstant.ZERO_TWO;
                 if (DictEnum.CHARGING_TYPE_1.getValue().equals(billingMode)) {
-//                    actualAmount = (logisticsOrderDTO.getTotalLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalLoadAmount()).multiply(price).subtract(fineValue);
-                    actualAmount = (logisticsOrderDTO.getTotalLoadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalLoadAmount()).multiply(price);
+//                    actualAmount = (logisticsOrderDTO.getTotalLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalLoadAmount()).multiply(price).subtract(fineValue);
+                    actualAmount = (logisticsOrderDTO.getTotalLoadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalLoadAmount()).multiply(price);
                 } else if (DictEnum.CHARGING_TYPE_2.getValue().equals(billingMode)) {
-//                    actualAmount = (logisticsOrderDTO.getTotalUnloadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalUnloadAmount()).multiply(price).subtract(fineValue);
-                    actualAmount = (logisticsOrderDTO.getTotalUnloadAmount() == null ? new BigDecimal("0.00") : logisticsOrderDTO.getTotalUnloadAmount()).multiply(price);
+//                    actualAmount = (logisticsOrderDTO.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalUnloadAmount()).multiply(price).subtract(fineValue);
+                    actualAmount = (logisticsOrderDTO.getTotalUnloadAmount() == null ? NumberConstant.ZERO_TWO : logisticsOrderDTO.getTotalUnloadAmount()).multiply(price);
                 } else if (DictEnum.CHARGING_TYPE_3.getValue().equals(billingMode)) {
                     // 物流订单运单趟次数量
                     Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN){{
@@ -740,6 +739,11 @@ public class KwtTransportCommonService {
         return HttpResult.ok(build);
     }
 
+    /**
+     * 获取数据字典
+     * @param type 字典类型
+     * @return 数据
+     */
     public Map<String, String> getDictData(String type) {
         Map<String, String> maps = new HashMap<>(NumberConstant.SIXTEEN);
         List<SysDictResDto> list = remoteSystemService.queryDictByType(type);
@@ -749,6 +753,11 @@ public class KwtTransportCommonService {
         return maps;
     }
 
+    /**
+     * 承运合同/托运合同-根据合同id获取托运订单列表
+     * @param contractParam 参数
+     * @return 合同信息
+     */
     public HttpResult getLogisticsOrderByContractId(ContractParam contractParam) {
         List<Long> contractIds = StringUtils.splitStrToList(contractParam.getContractIds(), Long.class);
         Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntTreeByIds(Collections.singletonList(LoginUserHolder.getEntId()));
@@ -786,6 +795,308 @@ public class KwtTransportCommonService {
         return HttpResult.ok(build);
     }
 
+    /**
+     * @param params 手动完结参数
+     * @desc 完结物流订单-采购/销售/托运/承运
+     * @author zk
+     * @date 2023/12/8
+     **/
+    public HttpResult orderFinish(OrderManualCompletionDto params) {
+        /** 订单完结 物流运单状态为【待派车】、【运输中】可操作*/
+        /**完结拦截 必须车辆运单无正在运输中的单据才能完结 状态有 待接单之后已核弹之前的状态 都不能完结*/
+        /**完结订单-对应物流订单下子订单都要进行完结*/
+        /**完结订单 不做页面填写数量与数据库数量进行计算验证-直接获取页面填写数据进行保存处理*/
+        Long id = params.getId();
+        String key = String.format(RedisConstant.LOGISTICS_ORDER_FINISH_KEY, params.getId());
+        if (redisLockUtil.tryLock(key)) {
+            try {
+                KwtLogisticsOrder logisticsOrder = logisticsOrderMapper.selectById(id);
+                if (logisticsOrder == null) {
+                    throw new BusinessException("采购订单-完结订单-物流单据不存在!");
+                }
+                /**订单状态验证*/
+                if (!LogisticsOrderEnum.WAIT_DELIVERY.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))
+                        && !LogisticsOrderEnum.IN_TRANSIT.getStatus().equals(String.valueOf(logisticsOrder.getStatus()))) {
+                    throw new BusinessException("当前订单并不属于【待派车】,【运输中】状态");
+                }
+                //验证当前物流订单是否还存在进行的车辆运单
+                boolean flag = commonService.judgmentWaybillOrderIsFinish(String.valueOf(id));
+                if (flag) {
+                    throw new BusinessException("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕!");
+                }
+
+                //修改单据本身数据
+                BigDecimal loadAmount = getLoading(params, logisticsOrder.getUnit(), NumberConstant.ONE);
+                BigDecimal unloadAmount = getLoading(params, logisticsOrder.getUnit(), NumberConstant.TWO);
+                BigDecimal ignoreAmount = logisticsOrder.getAmount().subtract(loadAmount == null ? NumberConstant.ZERO_TWO : logisticsOrder.getLoadAmount());
+                logisticsOrder.setTotalLoadAmount(loadAmount);
+                logisticsOrder.setTotalUnloadAmount(unloadAmount);
+                logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+                logisticsOrder.setUpdateTime(new Date());
+                logisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+                logisticsOrder.setIgnoreAmount(ignoreAmount);
+                logisticsOrderMapper.updateById(logisticsOrder);
+                //物流订单状态记录
+                updateLogisticOrderTrack(logisticsOrder.getId(), LogisticsOrderEnum.HAVE_FINISHED.getCode(), params.getRemark());
+                //修改mongodb的数据
+                updateMongoDbByLogisticsOrder(logisticsOrder);
+                //更新商品辅助单位信息
+                logisticsOrderGoodsService.editLogisticsOrderGoodsTotalLoading(params);
+
+                //获取物流订单下的子单
+                /**完结订单-对应物流订单下子订单都要进行完结*/
+                List<KwtLogisticsOrder> kwtLogisticsOrders = logisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                        .eq(KwtLogisticsOrder::getDelFlag, NumberConstant.ZERO)
+                        .apply(id != null, "FIND_IN_SET ('" + id + "', pids)").ne(KwtLogisticsOrder::getId, id));
+                if (!CollectionUtils.isEmpty(kwtLogisticsOrders)) {
+                    //修改单据剩余运输量
+                    kwtLogisticsOrders.forEach(kwtLogisticsOrder -> {
+                        BigDecimal subtract = kwtLogisticsOrder.getAmount().subtract(kwtLogisticsOrder.getTotalLoadAmount());
+                        //更新忽略剩余量
+                        updateLogisticOrderAndTrack(kwtLogisticsOrder);
+                        //更新Mongodb
+                        updateMongoDbByLogisticsOrder(kwtLogisticsOrder);
+                    });
+                }
+
+                /**是否是一级订单,是->推送至贸易*/
+                if (logisticsOrder.getPid() == null && "1".equals(logisticsOrder.getType())) {
+                    List<GoodsLoadingV1Param> loadings = new ArrayList<>();
+                    List<GoodsLoadingParam> createOrCancelLoading = new ArrayList<>();
+                    List<OrderGoodsLoadingDto> loading = params.getLoading();
+                    loading.forEach(e ->{
+                        loadings.add(new GoodsLoadingV1Param(e.getUnit(), e.getLoadAmount(), e.getUnloadAmount()));
+                        createOrCancelLoading.add(new GoodsLoadingParam(e.getUnit(), e.getLoadAmount()));
+                    });
+                    //数据推送至贸易订单-更新总装卸货量
+                    CompleteLogisticsOrderV1Param tradeOrder = new CompleteLogisticsOrderV1Param();
+                    tradeOrder.setTOrderId(logisticsOrder.getTOrderId());
+                    tradeOrder.setLoading(loadings);
+                    tradeOrder.setUpdateBy(LoginUserHolder.getUserId());
+                    tradeOrder.setUpdateByName(LoginUserHolder.getUserName());
+                    log.info("托运订单手动完结请求参数:{}", JSONObject.toJSONString(tradeOrder));
+                    HttpResult httpResult = tradeOrderInfoService.completeLogisticsOrderV1(tradeOrder);
+                    if (httpResult.getCode() != HttpStatus.SUCCESS_CODE) {
+                        log.info("贸易订单手动完结订单异常,传递信息:{},返回信息:{}", JSONObject.toJSONString(tradeOrder), JSONObject.toJSONString(httpResult));
+                        throw new BusinessException("单据完结出现错误!" + httpResult.getMsg());
+                    }
+
+                    //数据推送至贸易订单-更新时间装货量
+                    CreateOrCancelLogisticsOrderV1Param param = new CreateOrCancelLogisticsOrderV1Param();
+                    param.setTOrderId(logisticsOrder.getTOrderId());
+                    param.setLoading(createOrCancelLoading);
+                    param.setUpdateBy(LoginUserHolder.getUserId());
+                    param.setUpdateByName(LoginUserHolder.getUserName());
+                    HttpResult result1 = tradeOrderInfoService.createOrCancelLogisticsOrderV1(param);
+                    if (result1.getCode() != HttpStatus.SUCCESS_CODE) {
+                        log.info("托运订单手动完结订单-完结订单,返回信息:{}", "id:" + logisticsOrder.getTOrderId() + "orderNo" + logisticsOrder.getTOrderNo(), JSONObject.toJSONString(result1));
+                        throw new BusinessException("{" + logisticsOrder.getTOrderNo() + "} 托运订单手动完结订单-完结订单!" + result1.getMsg());
+                    }
+                }
+
+                //修改合同履约量
+                commonService.updatePerformed(logisticsOrder, loadAmount, unloadAmount);
+
+                //完结物流订单数据处理-上级物流订单分包量计算
+                closeHandleByOrderFinish(logisticsOrder.getId());
+
+                //关闭运单
+                waybillOrderService.cancelSendCar(logisticsOrder.getId());
+            } finally {
+                redisLockUtil.unlock(key);
+            }
+        } else {
+            HttpResult.error("当前数据正在处理,请稍后再试");
+        }
+        return HttpResult.ok("托运订单-完结订单成功");
+    }
+
+    /**
+     * @param params 完结参数
+     * @param unit 单位
+     * @param type 装卸货类型
+     * @desc 获取装卸货量
+     * @author zk
+     * @date 2023/9/18
+     **/
+    public BigDecimal getLoading(OrderManualCompletionDto params, String unit, int type) {
+        List<OrderGoodsLoadingDto> loadings = params.getLoading();
+        if (CollectionUtils.isNotEmpty(loadings)) {
+            for (OrderGoodsLoadingDto loading:loadings) {
+                if (loading.getUnit().equals(unit)) {
+                    return type == NumberConstant.ONE ? loading.getLoadAmount() : loading.getUnloadAmount();
+                }
+            }
+        }
+        return BigDecimal.ZERO;
+    }
+
+    /**
+     * 物流订单完结订单-修改物流表+新增物流状态记录
+     * @param params 物流订单
+     */
+    public void updateLogisticOrderAndTrack(KwtLogisticsOrder params) {
+        Integer code = LogisticsOrderEnum.HAVE_FINISHED.getCode();
+        logisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
+                .set(KwtLogisticsOrder::getStatus, code)
+                .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId())
+                .set(KwtLogisticsOrder::getIgnoreAmount, params.getIgnoreAmount())
+                .set(KwtLogisticsOrder::getUpdateTime, new Date())
+                .eq(KwtLogisticsOrder::getId, params.getId())
+        );
+
+        KwtLogisticsOrderTrack track = logisticsOrderTrackMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderTrack>()
+                .eq(KwtLogisticsOrderTrack::getLOrderId, params.getId()).eq(KwtLogisticsOrderTrack::getStatus, code)
+        );
+        if (track != null) {
+            logisticsOrderTrackMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrderTrack>()
+                    .set(KwtLogisticsOrderTrack::getUpdateBy, LoginUserHolder.getUserId())
+                    .set(KwtLogisticsOrderTrack::getUpdateTime, new Date())
+                    .set(KwtLogisticsOrderTrack::getRemark, "手动完结订单。")
+                    .eq(KwtLogisticsOrderTrack::getId, track.getId())
+            );
+        } else {
+            KwtLogisticsOrderTrack orderTrack = new KwtLogisticsOrderTrack();
+            orderTrack.setId(new IdWorker(NumberConstant.ONE).nextId());
+            orderTrack.setLOrderId(params.getId());
+            orderTrack.setRemark("手动完结订单。");
+            orderTrack.setStatus(code);
+            orderTrack.setCreateBy(LoginUserHolder.getUserId());
+            orderTrack.setCreateTime(new Date());
+            orderTrack.setUpdateBy(LoginUserHolder.getUserId());
+            orderTrack.setUpdateTime(new Date());
+            orderTrack.setDelFlag(NumberConstant.ZERO);
+            logisticsOrderTrackMapper.insert(orderTrack);
+        }
+    }
+
+    /**
+     * 修改物流表+新增物流状态记录
+     * @param lOrderId 物流订单
+     * @param code 状态码
+     * @param remark 备注
+     */
+    private void updateLogisticOrderTrack(Long lOrderId, int code, String remark) {
+        KwtLogisticsOrderTrack track = logisticsOrderTrackMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderTrack>()
+                .eq(KwtLogisticsOrderTrack::getLOrderId, lOrderId).eq(KwtLogisticsOrderTrack::getStatus, code)
+        );
+        if (track != null) {
+            logisticsOrderTrackMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrderTrack>()
+                    .set(KwtLogisticsOrderTrack::getUpdateBy, LoginUserHolder.getUserId())
+                    .set(KwtLogisticsOrderTrack::getUpdateTime, new Date())
+                    .set(KwtLogisticsOrderTrack::getRemark, remark)
+                    .eq(KwtLogisticsOrderTrack::getId, track.getId())
+            );
+        } else {
+            KwtLogisticsOrderTrack orderTrack = new KwtLogisticsOrderTrack();
+            orderTrack.setId(new IdWorker(NumberConstant.ONE).nextId());
+            orderTrack.setLOrderId(lOrderId);
+            orderTrack.setRemark(remark);
+            orderTrack.setStatus(code);
+            orderTrack.setCreateBy(LoginUserHolder.getUserId());
+            orderTrack.setCreateTime(new Date());
+            orderTrack.setUpdateBy(LoginUserHolder.getUserId());
+            orderTrack.setUpdateTime(new Date());
+            orderTrack.setDelFlag(NumberConstant.ZERO);
+            logisticsOrderTrackMapper.insert(orderTrack);
+        }
+    }
+
+    /**
+     * 根据物流订单修改mongodb数据
+     * @param logisticsOrder 物流订单
+     */
+    private void updateMongoDbByLogisticsOrder(KwtLogisticsOrder logisticsOrder) {
+        //更新mongodb
+        SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
+        lOrder.set_id(logisticsOrder.getId());
+        lOrder.setLOrderId(logisticsOrder.getId());
+        lOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus());
+        lOrder.setUpdateTime(new Date());
+        lOrder.setUpdateBy(LoginUserHolder.getUserId());
+        lOrder.setUpdateByName(LoginUserHolder.getUserName());
+        lOrder.setTotalLoadAmount(logisticsOrder.getTotalLoadAmount());
+        lOrder.setTotalUnloadAmount(logisticsOrder.getTotalUnloadAmount());
+        lOrder.setIgnoreAmount(logisticsOrder.getIgnoreAmount());
+
+        //rabbitMq业务汇总数据发送/消费对象
+        SckwBusSum busSum = new SckwBusSum();
+        //业务汇总类型
+        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+        //操作对象(1新增/2修改/3替换数据)
+        busSum.setMethod(2);
+        //业务汇总数据对象
+        busSum.setObject(lOrder);
+        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+        busSum.setMethod(NumberConstant.TWO);
+        streamBridge.send("sckw-busSum", JSON.toJSONString(busSum));
+    }
+
+    /**
+     * @param lOrderId 承运订单ID
+     * @desc 完结物流订单数据处理-上级物流订单分包量计算
+     * @author zk
+     * @date 2023/9/18
+     **/
+    public void closeHandleByOrderFinish(Long lOrderId) {
+        /**1数据校验**/
+        KwtLogisticsOrder logisticsOrder = logisticsOrderMapper.selectById(lOrderId);
+        if (logisticsOrder == null) {
+            return;
+        }
+
+        /**2物流订单树形数据结构**/
+        //所有管理物流订单
+        List<KwtLogisticsOrder> orders = logisticsOrderMapper.findLogisticsOrder(new HashMap<>(Global.NUMERICAL_SIXTEEN) {{
+            put("plOrderIds", lOrderId);
+            put("currentlOrderId", logisticsOrder.getPids());
+            put("allOrderId", Global.NUMERICAL_ONE);
+        }});
+        //数据copy
+        List<KwtLogisticsOrderTreeVo> logisticsOrders = new ArrayList<>();
+        for (KwtLogisticsOrder order : orders) {
+            KwtLogisticsOrderTreeVo logisticsOrderVo = new KwtLogisticsOrderTreeVo();
+            BeanUtils.copyProperties(order, logisticsOrderVo);
+            logisticsOrders.add(logisticsOrderVo);
+        }
+        List<KwtLogisticsOrderTreeVo> treeData = findTree(logisticsOrders);
+        //数据去除已完结订单下级
+        orderTreeHandle(treeData);
+
+        /**3链路数据组装*/
+        List<List<KwtLogisticsOrderTreeVo>> orderLinks = new ArrayList<>();
+        for (KwtLogisticsOrderTreeVo order : treeData) {
+            Stack<KwtLogisticsOrderTreeVo> pathStack = new Stack<>();
+            iteratorNode(order, pathStack, orderLinks);
+        }
+        //当前物流订单所在链路
+        List<KwtLogisticsOrderTreeVo> orderLink = findLink(orderLinks, lOrderId);
+        //倒序
+        assert orderLink != null;
+        Collections.reverse(orderLink);
+
+        /**4数据处理**/
+        for (KwtLogisticsOrderTreeVo order : orderLink) {
+            //排除已完结订单
+            if (Objects.equals(order.getStatus(), LogisticsOrderEnum.HAVE_FINISHED.getCode())) {
+                //上级物流订单分包量技术-排除一级物流订单
+                if (order.getPid() != null) {
+                    //mysql数据更新
+                    KwtLogisticsOrder currentOrder = logisticsOrderMapper.selectById(order.getPid());
+                    //差值=上游委托量-实际总装货量
+                    BigDecimal difference = order.getAmount().subtract(order.getTotalLoadAmount());
+                    currentOrder.setSubcontractAmount(currentOrder.getSubcontractAmount().subtract(difference));
+                    logisticsOrderMapper.updateById(currentOrder);
+
+                    //Mongodb数据更新
+                    SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
+                    lOrder.setSubcontractAmount(currentOrder.getSubcontractAmount());
+                    waybillOrderService.editSckwLogisticsOrder(lOrder, currentOrder);
+                }
+            }
+        }
+    }
+
     /**
      * @param lOrderId 承运订单ID
      * @desc 完结物流订单数据处理
@@ -823,6 +1134,7 @@ public class KwtTransportCommonService {
             Stack<KwtLogisticsOrderTreeVo> pathStack = new Stack<>();
             iteratorNode(order, pathStack, orderLinks);
         }
+        //当前物流订单所在链路
         List<KwtLogisticsOrderTreeVo> orderLink = findLink(orderLinks, lOrderId);
         //倒序
         assert orderLink != null;

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

@@ -174,8 +174,8 @@ public class KwtWaybillManagementService {
 
             // 单证信息
             BigDecimal deficitLoss = info.getLoss() == null ? BigDecimal.valueOf(0) : info.getLoss();
-            BigDecimal loadAmount = info.getLoadAmount() == null ? new BigDecimal("0.00") : info.getLoadAmount();
-            BigDecimal unloadAmount = info.getUnloadAmount() == null ? new BigDecimal("0.00") : info.getUnloadAmount();
+            BigDecimal loadAmount = info.getLoadAmount() == null ? NumberConstant.ZERO_TWO : info.getLoadAmount();
+            BigDecimal unloadAmount = info.getUnloadAmount() == null ? NumberConstant.ZERO_TWO : info.getUnloadAmount();
             BigDecimal deficitRealAmount = commonService.deficitLossAmount( info.getLoadAmount(), loadAmount.subtract(unloadAmount), deficitLoss, info.getLossUnit());
             waybillTicketVO = kwtWaybillOrderTicketService.agreement(id, String.valueOf(info.getDeficitAmount()), deficitRealAmount.toString());
         }
@@ -359,8 +359,8 @@ public class KwtWaybillManagementService {
             waybillTicketVO.setDeficitAmount(String.valueOf(info.getDeficitAmount()));
             // 计算扣亏量
             BigDecimal deficitLoss = info.getLoss() == null ? BigDecimal.valueOf(0) : info.getLoss();
-            BigDecimal loadAmount = info.getLoadAmount() == null ? new BigDecimal("0.00") : info.getLoadAmount();
-            BigDecimal unloadAmount = info.getUnloadAmount() == null ? new BigDecimal("0.00") : info.getUnloadAmount();
+            BigDecimal loadAmount = info.getLoadAmount() == null ? NumberConstant.ZERO_TWO : info.getLoadAmount();
+            BigDecimal unloadAmount = info.getUnloadAmount() == null ? NumberConstant.ZERO_TWO : info.getUnloadAmount();
             BigDecimal deficitRealAmount = commonService.deficitLossAmount(
                     info.getLoadAmount(),
                     loadAmount.subtract(unloadAmount),

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

@@ -121,7 +121,7 @@ public class KwtWaybillOrderService {
         Map<String, Object> data = waybillOrderDao.findStatisticsSumByDriver(params);
         BigDecimal deficitLossAmount = waybillOrderDao.deficitLossAmountByDriver(params);
         deficitLossAmount = deficitLossAmount.setScale(2, RoundingMode.HALF_UP);
-        data.put("deficitLossAmount", deficitLossAmount.compareTo(new BigDecimal("0.00")) <= 0 ? Global.AMOUNT : deficitLossAmount);
+        data.put("deficitLossAmount", deficitLossAmount.compareTo(NumberConstant.ZERO_TWO) <= 0 ? Global.AMOUNT : deficitLossAmount);
         return data;
     }
 
@@ -2956,8 +2956,8 @@ public class KwtWaybillOrderService {
             return HttpResult.error("单据不存在!");
         }
         BigDecimal amount = kwtLogisticsOrder.getAmount();
-        BigDecimal entrustAmount = kwtLogisticsOrder.getEntrustAmount() == null ? new BigDecimal("0.00") : kwtLogisticsOrder.getEntrustAmount();
-        BigDecimal subcontractAmount = kwtLogisticsOrder.getSubcontractAmount() == null ? new BigDecimal("0.00") : kwtLogisticsOrder.getSubcontractAmount();
+        BigDecimal entrustAmount = kwtLogisticsOrder.getEntrustAmount() == null ? NumberConstant.ZERO_TWO : kwtLogisticsOrder.getEntrustAmount();
+        BigDecimal subcontractAmount = kwtLogisticsOrder.getSubcontractAmount() == null ? NumberConstant.ZERO_TWO : kwtLogisticsOrder.getSubcontractAmount();
         BigDecimal waitDistributionAmount = amount.subtract(entrustAmount).subtract(subcontractAmount);
         Map<String, Map> map = new HashMap(NumberConstant.SIXTEEN);
         //无效的车辆运单状态(其他状态不参与统计中)