Explorar o código

Merge remote-tracking branch 'origin/dev_20260131_youshen430' into dev_20260131_youshen430

xucaiqin hai 3 semanas
pai
achega
cab1b670bc
Modificáronse 15 ficheiros con 419 adicións e 38 borrados
  1. 3 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java
  2. 20 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java
  3. 1 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  4. 3 3
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java
  5. 4 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportStatisticsServiceImpl.java
  6. 36 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/TakingOrderHandler.java
  7. 6 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderCmeIntoWeighParam.java
  8. 14 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/forklift/request/GatekeeperOrderPassReasonParam.java
  9. 8 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/forklift/request/GatekeeperOrderQueryParam.java
  10. 10 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderDetailResp.java
  11. 107 6
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  12. 8 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java
  13. 10 12
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TradeOrderTransportInfoService.java
  14. 54 7
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/GatekeeperOrderService.java
  15. 135 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

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

@@ -191,4 +191,7 @@ public interface TradeOrderInfoService {
     BuyDto countBuy(CountPara countPara);
 
     GoodsDto countGoods(CountPara countPara);
+
+    List<OrderUnitInfoDetailVO> queryOrderUnitByTradeOrderId(Long tradeOrderId);
+
 }

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

@@ -999,5 +999,25 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
                 .filter(Objects::nonNull)
                 .collect(Collectors.toSet());
     }
+    @Override
+    public List<OrderUnitInfoDetailVO> queryOrderUnitByTradeOrderId(Long tradeOrderId) {
+        List<KwoTradeOrderUnit> tradeOrderUnits = kwoTradeOrderUnitRepository.queryByOrderId(tradeOrderId);
+        if (CollectionUtils.isEmpty(tradeOrderUnits)) {
+            return Collections.emptyList();
+        }
+        return tradeOrderUnits.stream().map(unit -> {
+            OrderUnitInfoDetailVO vo = new OrderUnitInfoDetailVO();
+            vo.setId(unit.getId());
+            vo.setTOrderId(unit.getTOrderId());
+            vo.setTOrderNo(unit.getTOrderNo());
+            vo.setUnitType(unit.getUnitType());
+            vo.setEntId(unit.getEntId());
+            vo.setFirmName(unit.getFirmName());
+            vo.setContactsId(unit.getContactsId());
+            vo.setContacts(unit.getContacts());
+            vo.setPhone(unit.getPhone());
+            return vo;
+        }).collect(Collectors.toList());
+    }
 
 }

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

@@ -1960,6 +1960,7 @@ public class KwoTradeOrderService {
      * @return 已派车次数
      */
     private Long getDispatchedWaybillCount(Long tOrderId) {
+        log.info("[车次]开始计算贸易订单已派车次:{}", JSON.toJSONString(tOrderId));
         try {
             return Optional.ofNullable(transportRemoteStatisticsService.countDispatchedWaybillsByTradeOrderId(tOrderId))
                     .orElse(0L);

+ 3 - 3
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java

@@ -867,9 +867,9 @@ public class KwpGoodsService {
         LambdaUpdateWrapper<KwpGoods> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(KwpGoods::getStatus, GoodsStatusEnum.TAKE_OFF_SHELVES.getCode()).set(KwpGoods::getShelfTime, new Date()).in(KwpGoods::getId, ids);
         kwpGoodsMapper.update(null, updateWrapper);
-        list.forEach(e -> {
-            sendMsg(MessageEnum.PRODUCT_REMOVED_SHELVES, e);
-        });
+//        list.forEach(e -> {
+//            sendMsg(MessageEnum.PRODUCT_REMOVED_SHELVES, e);
+//        });
     }
 
     /**

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

@@ -1,5 +1,6 @@
 package com.sckw.transport.dubbo;
 
+import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
@@ -156,13 +157,15 @@ public class TransportStatisticsServiceImpl implements TransportRemoteStatistics
             throw new BusinessException("贸易订单ID不能为空");
         }
         List<Long> logisticsOrderIds = listLogisticsOrderIdsByTradeOrderId(tOrderId);
+        log.info("[车次]物流订单id:{}", JSON.toJSONString(logisticsOrderIds));
         if (CollectionUtils.isEmpty(logisticsOrderIds)) {
             return 0L;
         }
         return Optional.ofNullable(waybillOrderMapper.selectCount(new QueryWrapper<KwtWaybillOrder>()
                         .eq("del_flag", Global.NO)
                         .in("l_order_id", logisticsOrderIds)
-                        .ne("status", CarWaybillV1Enum.CANCELLED.getCode())))
+                        .and(wq -> wq.ne("remark" ,"空载离场").or().isNull("remark"))
+                        .eq("status", CarWaybillV1Enum.COMPLETED.getCode())))
                 .orElse(0L);
     }
 

+ 36 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/TakingOrderHandler.java

@@ -14,6 +14,7 @@ import com.sckw.fleet.api.model.vo.RDriverVo;
 import com.sckw.fleet.api.model.vo.RTruckVo;
 import com.sckw.fleet.api.model.vo.TruckDispatchCoefficientVO;
 import com.sckw.order.api.model.OrderDetailVo;
+import com.sckw.order.api.model.OrderUnitInfoDetailVO;
 import com.sckw.order.api.model.UpdateActualAmountParam;
 import com.sckw.product.api.model.KwpGoods;
 import com.sckw.transport.model.*;
@@ -153,7 +154,7 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
         driverBindTruck(waybillOrder);
 
         //8、生成门卫订单
-        createGatekeeperWaybillOrder(waybillOrder, truck, truckLoadVolume);
+        createGatekeeperWaybillOrder(logOrder, waybillOrder, truck, truckLoadVolume);
 
         BusinessContext.set("createdWaybillOrder", waybillOrder);
 
@@ -166,11 +167,16 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
      * @param waybillOrder
      * @param truckLoadVolume
      */
-    private void createGatekeeperWaybillOrder(KwtWaybillOrder waybillOrder, RTruckVo truck, BigDecimal truckLoadVolume) {
+    private void createGatekeeperWaybillOrder(KwtLogisticsOrder logOrder, KwtWaybillOrder waybillOrder,
+                                              RTruckVo truck, BigDecimal truckLoadVolume) {
+        log.info("开始创建门卫订单,入参参数:{}", JSON.toJSONString(waybillOrder));
         CompletableFuture.runAsync(() -> {
             try {
+                // 获取企业id
+                Long entId = getEntId(logOrder);
+
                 KwtGatekeeperWaybillOrder gatekeeper = new KwtGatekeeperWaybillOrder();
-                gatekeeper.setEntId(waybillOrder.getEntId());
+                gatekeeper.setEntId(entId);
                 gatekeeper.setWOrderId(waybillOrder.getId());
                 gatekeeper.setWOrderNo(waybillOrder.getWOrderNo());
                 gatekeeper.setLOrderId(waybillOrder.getLOrderId());
@@ -209,6 +215,33 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
         });
     }
 
+    /**
+     * 获取企业id
+     * @param logOrder
+     * @return
+     */
+    private Long getEntId(KwtLogisticsOrder logOrder) {
+        log.info("[创建装货门卫]开始查询企业id,入参参数:{}", JSON.toJSONString(logOrder));
+        Long entId;
+        KwtLogisticsOrderUnit kwtLogisticsOrderUnit = logisticsOrderUnitRepository.queryByLOrderIdAndUnitType(logOrder.getId(), 1);
+        if (kwtLogisticsOrderUnit == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ORDER_NOT_FOUND, "[接单]物流企业信息数据不存在");
+        }
+        // 原矿运输山上、上下门卫企业id
+        List<Long> mockEntIds = Arrays.asList(538039617157337089L, 538040297439891457L);
+        if (Objects.equals(1, logOrder.getOrderType()) && mockEntIds.contains(kwtLogisticsOrderUnit.getEntId())) {
+            entId = mockEntIds.get(0);
+        } else {
+            List<OrderUnitInfoDetailVO> unitInfoDetailVOS = tradeOrderInfoService.queryOrderUnitByTradeOrderId(logOrder.getTOrderId());
+            OrderUnitInfoDetailVO unitInfoDetailVO = unitInfoDetailVOS.stream()
+                    .filter(unit -> Objects.equals(unit.getUnitType(), "2"))
+                    .findFirst().orElse(new OrderUnitInfoDetailVO());
+            entId = unitInfoDetailVO.getEntId();
+        }
+        log.info("[创建装货门卫]查询企业id完成,入参参数:{}", JSON.toJSONString(entId));
+        return entId;
+    }
+
     @Override
     protected void calculateAutoDispatchScore(OrderCirculateTakingQueryParam param, KwtWaybillOrder waybillOrder) {
 

+ 6 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderCmeIntoWeighParam.java

@@ -19,6 +19,12 @@ public class WaybillOrderCmeIntoWeighParam extends WaybillOrderProcessParam impl
     @Serial
     private static final long serialVersionUID = 1038619782660342061L;
 
+    /**
+     * 地磅企业id
+     */
+    @Schema(description = "地磅企业id")
+    private Long entId;
+
     /**
      * 车辆号
      */

+ 14 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/forklift/request/GatekeeperOrderPassReasonParam.java

@@ -27,6 +27,20 @@ public class GatekeeperOrderPassReasonParam implements Serializable {
     @Schema(description = "门卫订单id")
     private Long id;
 
+    /**
+     * 门卫id
+     */
+    @NotNull(message = "门卫id不能为空")
+    @Schema(description = "门卫id")
+    private Long gatekeeperUserId;
+
+    /**
+     * 门卫姓名
+     */
+    @NotBlank(message = "门卫姓名不能为空")
+    @Schema(description = "门卫姓名")
+    private String gatekeeperName;
+
     /**
      * 放行原因
      */

+ 8 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/forklift/request/GatekeeperOrderQueryParam.java

@@ -2,6 +2,7 @@ package com.sckw.transport.model.param.forklift.request;
 
 import com.sckw.core.web.request.PageReq;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
 import java.io.Serial;
@@ -19,6 +20,13 @@ public class GatekeeperOrderQueryParam extends PageReq implements Serializable {
     @Serial
     private static final long serialVersionUID = -5431003248533000828L;
 
+    /**
+     * 门卫企业id
+     */
+    @NotNull(message = "门卫企业id不能为空")
+    @Schema(description = "门卫企业id")
+    private Long entId;
+
     /**
      * 搜索关键字
      */

+ 10 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderDetailResp.java

@@ -259,6 +259,16 @@ public class WaybillOrderDetailResp implements Serializable {
      */
     private Integer label;
 
+    /**
+     * 放行原因
+     */
+    private String passReason;
+
+    /**
+     * 放行图片地址
+     */
+    private String passUrl;
+
     /**
      * 运单id列表
      */

+ 107 - 6
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -3234,6 +3234,12 @@ public class KwtLogisticsConsignmentService {
             // logisticsOrderResp.setLoadAmount(loadAmount.setScale(2, RoundingMode.HALF_UP).toPlainString() + kwtLogisticsOrder.getUnit());
             logisticsOrderResp.setUnloadAmount(unloadAmount.setScale(2, RoundingMode.HALF_UP).toPlainString() +"吨");
             logisticsOrderResp.setLoadAmount(loadAmount.setScale(2, RoundingMode.HALF_UP).toPlainString() +"吨");
+
+            //设置余量
+            BigDecimal orderSurplus = getRaworeSupAmount(kwtLogisticsOrder, tradeIdAndOrderDetailVoMap, tradeIdAndLogOrderList,
+                    logisticsOrderIdAndSubtaskList, waybillOrderIdAndTicketList);
+            logisticsOrderResp.setOrderSurplus(orderSurplus.toPlainString() + "吨");
+            logisticsOrderResp.setRemainingAmount(orderSurplus);
         }else {
             log.info("订单类型不为1,普通订单");
             if (org.apache.commons.lang3.StringUtils.equals(kwtLogisticsOrder.getBillingMode(),
@@ -3263,6 +3269,11 @@ public class KwtLogisticsConsignmentService {
                 //logisticsOrderResp.setActualTransportPrice(transportPrice.setScale(2, RoundingMode.HALF_UP).toPlainString() + priceUnit);
             }
             logisticsOrderResp.setLoadAmount(loadAmount.setScale(2, RoundingMode.HALF_UP).toPlainString() + kwtLogisticsOrder.getUnit());
+            //设置余量
+            BigDecimal orderSurplus = getSupAmount(kwtLogisticsOrder.getTOrderId(), tradeIdAndOrderDetailVoMap, tradeIdAndLogOrderList,
+                    logisticsOrderIdAndSubtaskList, waybillOrderIdAndTicketList);
+            logisticsOrderResp.setOrderSurplus(orderSurplus.toPlainString() + kwtLogisticsOrder.getUnit());
+            logisticsOrderResp.setRemainingAmount(orderSurplus);
         }
         logisticsOrderResp.setActualTransportPrice(transportPrice.setScale(2, RoundingMode.HALF_UP).toPlainString() + priceUnit);
 //        logisticsOrderResp.setActualTransportPrice(actualTransportPrice.setScale(2, RoundingMode.HALF_UP).toPlainString() + priceUnit);
@@ -3287,11 +3298,7 @@ public class KwtLogisticsConsignmentService {
         logisticsOrderResp.setCreateTime(DateUtils.format(kwtLogisticsOrder.getCreateTime(), DateUtils.DATE_TIME_PATTERN));
         logisticsOrderResp.setStatus(String.valueOf(kwtLogisticsOrder.getStatus()));
         logisticsOrderResp.setStatusDesc(LogisticsOrderV1Enum.getDesc(kwtLogisticsOrder.getStatus()));
-        //设置余量
-        BigDecimal orderSurplus = getSupAmount(kwtLogisticsOrder.getTOrderId(), tradeIdAndOrderDetailVoMap, tradeIdAndLogOrderList,
-                logisticsOrderIdAndSubtaskList, waybillOrderIdAndTicketList);
-        logisticsOrderResp.setOrderSurplus(orderSurplus.toPlainString() + kwtLogisticsOrder.getUnit());
-        logisticsOrderResp.setRemainingAmount(orderSurplus);
+
         return logisticsOrderResp;
     }
 
@@ -3402,6 +3409,93 @@ public class KwtLogisticsConsignmentService {
         return surplus.setScale(2, RoundingMode.HALF_UP);
     }
 
+    private static BigDecimal getRaworeSupAmount(KwtLogisticsOrder kwtLogisticsOrder,
+                                           Map<Long, OrderDetailVo> tradeIdAndOrderDetailVoMap,
+                                           Map<Long, List<KwtLogisticsOrder>> tradeIdAndLogOrderList,
+                                           Map<Long, List<KwtWaybillOrderSubtask>> logisticsOrderIdAndSubtaskList,
+                                           Map<Long, List<KwtWaybillOrderTicket>> waybillOrderIdAndTicketList) {
+        log.debug("开始计算原矿订单余量,物流订单号: {}", kwtLogisticsOrder.getLOrderNo());
+
+        // 1. 获取贸易订单基础信息及总货物量
+        BigDecimal tradeAmount = Optional.ofNullable(kwtLogisticsOrder).map(KwtLogisticsOrder::getAmount).orElse(BigDecimal.ZERO);
+        log.debug("贸易订单总货物量: {}", tradeAmount);
+
+        // 2. 获取该贸易订单关联的所有物流订单
+        BigDecimal usedAmount = BigDecimal.ZERO;
+
+        if (Objects.nonNull(kwtLogisticsOrder)) {
+            log.debug("开始获取该贸易订单关联的所有物流订单");
+            Long logOrderId = kwtLogisticsOrder.getId();
+            // 获取当前物流订单下的所有子运单
+            List<KwtWaybillOrderSubtask> waybillOrderSubtasks = logisticsOrderIdAndSubtaskList.getOrDefault(logOrderId, Collections.emptyList());
+
+            if (CollectionUtils.isEmpty(waybillOrderSubtasks)) {
+                log.debug("物流订单 {} 下无子运单,跳过", logOrderId);
+                return BigDecimal.ZERO;
+            }
+
+            // 3. 根据计费模式确定磅单类型(装货或卸货)
+            // CHARGING_TYPE_1: 按装货量计费 -> 对应装货磅单 (SHIPMENT)
+            // CHARGING_TYPE_2: 按卸货量计费 -> 对应卸货磅单 (TAKE)
+            Integer ticketType;
+            String billingMode = kwtLogisticsOrder.getBillingMode();
+            if (org.apache.commons.lang3.StringUtils.equals(billingMode, DictEnum.CHARGING_TYPE_1.getValue())) {
+                ticketType = AddressTypeEnum.SHIPMENT.getCode();
+            } else if (org.apache.commons.lang3.StringUtils.equals(billingMode, DictEnum.CHARGING_TYPE_2.getValue())) {
+                ticketType = AddressTypeEnum.TAKE.getCode();
+            } else {
+                // 未知计费模式,记录警告并跳过该物流订单的计算,避免数据错误
+                log.warn("余量计算跳过未知计费模式, logOrderId:{}, billingMode:{}",
+                                 logOrderId, billingMode);
+                return BigDecimal.ZERO;
+            }
+
+            // 4. 计算子运单委托量总和
+            // 过滤条件:对象非空、状态非取消、委托量非空
+            List<Integer> statusList = Arrays.asList(CarWaybillV1Enum.COMPLETED.getCode(), CarWaybillV1Enum.CANCELLED.getCode());
+            BigDecimal entrustAmount = waybillOrderSubtasks.stream()
+                    .filter(Objects::nonNull)
+                    .filter(subtask -> !statusList.contains(subtask.getStatus()))
+                    .map(KwtWaybillOrderSubtask::getEntrustAmount)
+                    .filter(Objects::nonNull)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+            // 5. 计算磅单实际量总和
+            // 逻辑:子运单 -> 主运单ID -> 磅单列表 -> 过滤特定类型 -> 累加金额/数量
+            BigDecimal ticketAmount = waybillOrderSubtasks.stream()
+                    .filter(Objects::nonNull)
+                    .filter(subtask -> !Objects.equals(subtask.getStatus(), CarWaybillV1Enum.CANCELLED.getCode()))
+                    .map(KwtWaybillOrderSubtask::getWOrderId)
+                    .filter(Objects::nonNull)
+                    .flatMap(wOrderId -> waybillOrderIdAndTicketList.getOrDefault(wOrderId, Collections.emptyList()).stream())
+                    .filter(Objects::nonNull)
+                    // 只统计与计费模式匹配的磅单类型(装或卸)
+                    .filter(ticket -> Objects.equals(ticket.getType(), ticketType))
+                    .map(KwtWaybillOrderTicket::getAmount)
+                    .filter(Objects::nonNull)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+            // 累加当前物流订单的已使用量
+            BigDecimal currentUsed = entrustAmount.add(ticketAmount);
+            usedAmount = usedAmount.add(currentUsed);
+
+            log.debug("物流订单 {} 计算详情: 委托量={}, 磅单量={}, 计费类型={}",
+                    logOrderId, entrustAmount, ticketAmount, ticketType);
+        }
+
+        // 6. 计算最终余量:总量 - 已用量,若结果小于0则置为0
+        BigDecimal surplus = tradeAmount.subtract(usedAmount);
+        if (surplus.compareTo(BigDecimal.ZERO) <= 0) {
+            log.info("物流订单 {} 余量计算结果为负或零,重置为0。总量: {}, 已用: {}", kwtLogisticsOrder.getId(), tradeAmount, usedAmount);
+            surplus = BigDecimal.ZERO;
+        } else {
+            log.debug("物流订单 {} 余量计算正常。总量: {}, 已用: {}, 余量: {}",  kwtLogisticsOrder.getId(), tradeAmount, usedAmount, surplus);
+        }
+
+        // 保留两位小数,四舍五入
+        return surplus.setScale(2, RoundingMode.HALF_UP);
+    }
+
     public LogisticsOrderDetailResp getLogisticsOrderDetail(@Valid LogisticsOrderReq req) {
         KwtLogisticsOrder logisticsOrder =
                 logisticsOrderRepository.queryByLogisticsOrderId(Long.valueOf(req.getLogisticsOrderId()));
@@ -3535,11 +3629,13 @@ public class KwtLogisticsConsignmentService {
         BigDecimal totalAmount = BigDecimal.ZERO;
         if (Objects.equals(logisticsOrder.getOrderType(), 1)){
             log.info("物流单类型为1,原矿转运");
+            BigDecimal orderAmount1 = Objects.nonNull(logisticsOrder.getAmount()) ? logisticsOrder.getAmount() : BigDecimal.ZERO;
+            performanceInfoVO.setOrderAmount(orderAmount1.setScale(2, RoundingMode.HALF_UP).toPlainString() + "吨");
             totalCarriageCost = Objects.nonNull(logisticsOrder.getPrice()) ? unloadAmount.multiply(logisticsOrder.getPrice()) :
                     BigDecimal.ZERO;
             performanceInfoVO.setLoadAmount(loadAmount.setScale(2, RoundingMode.HALF_UP).toPlainString() + "吨");
             performanceInfoVO.setUnloadAmount(unloadAmount.setScale(2, RoundingMode.HALF_UP).toPlainString() + "吨");
-            BigDecimal surplusAmount = tradeAmount.subtract(orderAmount.add(unloadAmount)).compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : tradeAmount.subtract(orderAmount.add(unloadAmount));
+            BigDecimal surplusAmount = orderAmount1.subtract(orderAmount.add(unloadAmount)).compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : tradeAmount.subtract(orderAmount.add(unloadAmount));
             performanceInfoVO.setSurplusAmount(surplusAmount.setScale(2, RoundingMode.HALF_UP).toPlainString() + "吨");
         }else {
             log.info("物流单类型不为1,普通物流");
@@ -3818,6 +3914,11 @@ public class KwtLogisticsConsignmentService {
                 .map(KwtLogisticsOrder::getUnit).orElse("");
         capacityVo.setStatus("0");
         capacityVo.setStatusDesc("待接单");
+        KwtLogisticsOrder kwtLogisticsOrder = Optional.ofNullable(logisticsOrders).map(x -> x.get(0)).orElse(new KwtLogisticsOrder());
+        if (Objects.equals(kwtLogisticsOrder.getOrderType(), 1)){
+            log.info("物流单类型为1,原矿转运");
+            unit = "吨";
+        }
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(waybillOrders)) {
             List<KwtWaybillOrder> waybillOrderList = Optional.ofNullable(waybillOrders).orElse(List.of())
                     .stream()

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

@@ -3146,7 +3146,8 @@ public class KwtWaybillOrderV1Service {
                         });
                     }).exceptionally(ex -> {
                         log.error("查询贸易订单合同失败", ex);
-                        throw new BusinessException("查询贸易订单合同失败");
+                         return List.of();
+                       // throw new BusinessException("查询贸易订单合同失败");
                     });
 
             // ====== 查询贸易合同商品 ======
@@ -3169,7 +3170,8 @@ public class KwtWaybillOrderV1Service {
                             }).thenApply(goods -> Optional.ofNullable(goods).orElse(List.of()))
                             .exceptionally(ex -> {
                                 log.error("查询贸易订单商品失败", ex);
-                                throw new BusinessException("查询贸易订单商品失败");
+                                return List.of();
+                               // throw new BusinessException("查询贸易订单商品失败");
                             });
 
             log.debug("所有异步任务创建完成");
@@ -4227,6 +4229,8 @@ public class KwtWaybillOrderV1Service {
                     contractGoodsDto.getPrice().multiply(record.getUnloadAmount()) : BigDecimal.ZERO;
             waybillOrderResp.setActualPrice(actualPrice.setScale(2, RoundingMode.HALF_UP).toPlainString());
             waybillOrderResp.setActualGoodsPrice(actualGoodsPrice.setScale(2, RoundingMode.HALF_UP).toPlainString());
+            waybillOrderResp.setUnloadingNetWeight((Objects.nonNull(record.getUnloadAmount()) ?
+                    record.getUnloadAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "0.00")+"吨");
         } else {
             log.info("普通订单,计算运费{}", record.getWOrderNo());
             if (org.apache.commons.lang3.StringUtils.equals(logOrder.getBillingMode(), DictEnum.CHARGING_TYPE_1.getValue())){
@@ -4669,6 +4673,8 @@ public class KwtWaybillOrderV1Service {
         resp.setPriceTypeDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(), logOrder.getBillingMode()));
         resp.setRemark(billOrder.getRemark());
         resp.setLabel(billOrder.getLabel());
+        resp.setPassReason(billOrder.getPassReason());
+        resp.setPassUrl(billOrder.getPassUrl());
         // 票据信息
         String shipmentTicketKey = subtask.getWOrderId() + "-" + AddressTypeEnum.SHIPMENT.getCode();
         KwtWaybillOrderTicket tareAmountTicket = ticketMap.getOrDefault(shipmentTicketKey, new KwtWaybillOrderTicket());

+ 10 - 12
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TradeOrderTransportInfoService.java

@@ -13,21 +13,11 @@ import com.sckw.order.api.model.TradeOrderVo;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.product.api.model.KwpGoods;
 import com.sckw.system.api.RemoteSystemService;
-import com.sckw.transport.model.KwtLogisticsOrder;
-import com.sckw.transport.model.KwtLogisticsOrderAddress;
-import com.sckw.transport.model.KwtLogisticsOrderGoods;
-import com.sckw.transport.model.KwtWaybillOrder;
-import com.sckw.transport.model.KwtWaybillOrderSubtask;
-import com.sckw.transport.model.KwtWaybillOrderTicket;
+import com.sckw.transport.model.*;
 import com.sckw.transport.model.param.TradeOrderTransportQueryReq;
 import com.sckw.transport.model.param.WaybillTransportQueryReq;
 import com.sckw.transport.model.vo.TradeOrderTransportInfoResp;
-import com.sckw.transport.repository.KwtLogisticsOrderAddressRepository;
-import com.sckw.transport.repository.KwtLogisticsOrderGoodsRepository;
-import com.sckw.transport.repository.KwtLogisticsOrderRepository;
-import com.sckw.transport.repository.KwtWaybillOrderRepository;
-import com.sckw.transport.repository.KwtWaybillOrderSubtaskRepository;
-import com.sckw.transport.repository.KwtWaybillOrderTicketRepository;
+import com.sckw.transport.repository.*;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -64,6 +54,7 @@ public class TradeOrderTransportInfoService {
     private final KwtWaybillOrderTicketRepository waybillOrderTicketRepository;
     private final KwtLogisticsOrderGoodsRepository logisticsOrderGoodsRepository;
     private final KwtLogisticsOrderAddressRepository logisticsOrderAddressRepository;
+    private final KwtGatekeeperWaybillOrderRepository kwtGatekeeperWaybillOrderRepository;
 
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private GoodsInfoService goodsInfoService;
@@ -502,6 +493,13 @@ public class TradeOrderTransportInfoService {
         // 1. 设置任务编号
         if (Objects.nonNull(waybillOrder)) {
             taskInfo.setTaskNo(waybillOrder.getWOrderNo());
+            //查询门卫
+            KwtGatekeeperWaybillOrder kwtGatekeeperWaybillOrder = kwtGatekeeperWaybillOrderRepository.queryGatekeeperWaybillOrderByWOrderId(waybillOrder.getId(), 1);
+            String weigherName = Optional.ofNullable(kwtGatekeeperWaybillOrder)
+                    .map(KwtGatekeeperWaybillOrder::getGatekeeperName)
+                    .orElse("");
+            taskInfo.setWeigherName(weigherName);
+
             log.debug("设置任务编号: {}", waybillOrder.getWOrderNo());
         }
 

+ 54 - 7
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/GatekeeperOrderService.java

@@ -71,6 +71,8 @@ public class GatekeeperOrderService {
     private final KwtLogisticsOrderGoodsRepository logisticsOrderGoodsRepository;
     private final KwtWaybillOrderNodeRepository waybillOrderNodeRepository;
     private final KwtWaybillOrderWeighbridgeRepository waybillOrderWeighbridgeRepository;
+    @Autowired
+    protected KwtLogisticsOrderUnitRepository logisticsOrderUnitRepository;
 
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private RemoteContractService remoteContractService;
@@ -140,6 +142,7 @@ public class GatekeeperOrderService {
      */
     private  LambdaQueryWrapper<KwtGatekeeperWaybillOrder> buildBaseQueryWrapper(GatekeeperOrderQueryParam param) {
         LambdaQueryWrapper<KwtGatekeeperWaybillOrder> wrapper = Wrappers.<KwtGatekeeperWaybillOrder>lambdaQuery()
+                .eq(KwtGatekeeperWaybillOrder::getEntId, param.getEntId())
                 .orderByDesc(KwtGatekeeperWaybillOrder::getCreateTime)
                 .orderByDesc(KwtGatekeeperWaybillOrder::getId);
         //待进场
@@ -159,7 +162,8 @@ public class GatekeeperOrderService {
             //出入记录
         } else if (param.getStatus() == 5) {
             wrapper.in(KwtGatekeeperWaybillOrder::getStatus,
-                    GatekeeperStatusEnum.EXITED.getCode());
+                    GatekeeperStatusEnum.EXITED.getCode(),
+                    GatekeeperStatusEnum.EMPTY_EXITED.getCode());
         }
         return wrapper;
     }
@@ -427,7 +431,7 @@ public class GatekeeperOrderService {
         }
 
         // 原矿运输
-        if (isRawOre) {
+        if (isRawOre && Objects.equals(gatekeeperWaybillOrder.getType(),2)) {
             //装货净重
             BigDecimal loadAmount = ticket.getAmount();
             //卸货净重
@@ -451,12 +455,17 @@ public class GatekeeperOrderService {
      * 计算货损率
      */
     private static BigDecimal calculateLossRate(BigDecimal loadAmount, BigDecimal unloadAmount) {
+        log.info("[门卫]开始计算货损率,装货净重:{},卸货净重:{}", JSON.toJSONString(loadAmount), JSON.toJSONString(loadAmount));
+        BigDecimal lossRate = BigDecimal.ZERO;
         if (loadAmount != null && unloadAmount != null && loadAmount.compareTo(BigDecimal.ZERO) > 0) {
-            return loadAmount.subtract(unloadAmount)
+             lossRate = loadAmount.subtract(unloadAmount)
                     .divide(loadAmount, 4, RoundingMode.HALF_UP)
                     .setScale(2, RoundingMode.HALF_UP);
+            return lossRate;
         }
-        return BigDecimal.ZERO;
+        log.info("[门卫]计算货损率完成,货损率:{}", JSON.toJSONString(lossRate));
+        return lossRate;
+
     }
 
     /**
@@ -544,10 +553,11 @@ public class GatekeeperOrderService {
      * @return
      */
     public StatisticsWaybillResp statisticsGatekeeperOrder(GatekeeperOrderQueryParam param) {
-        log.info("铲车订单状态统计:{}", JSON.toJSONString(param));
+        log.info("门卫订单统计:{}", JSON.toJSONString(param));
         StatisticsWaybillResp resp = new StatisticsWaybillResp();
 
         LambdaQueryWrapper<KwtGatekeeperWaybillOrder> wrapper = Wrappers.<KwtGatekeeperWaybillOrder>lambdaQuery()
+                .eq(KwtGatekeeperWaybillOrder::getEntId, param.getEntId())
                 .orderByDesc(KwtGatekeeperWaybillOrder::getCreateTime);
 
         //查询门卫订单
@@ -1009,7 +1019,7 @@ public class GatekeeperOrderService {
 
         try {
             KwtGatekeeperWaybillOrder gatekeeper = new KwtGatekeeperWaybillOrder();
-            gatekeeper.setEntId(waybillOrder.getEntId());
+            gatekeeper.setEntId(getEntId(logisticsOrder));
             gatekeeper.setWOrderId(waybillOrder.getId());
             gatekeeper.setWOrderNo(waybillOrder.getWOrderNo());
             gatekeeper.setLOrderId(waybillOrder.getLOrderId());
@@ -1069,17 +1079,54 @@ public class GatekeeperOrderService {
         return subtask;
     }
 
+    /**
+     * 获取企业id
+     * @param logOrder
+     * @return
+     */
+    private Long getEntId(KwtLogisticsOrder logOrder) {
+        log.info("[创建卸货门卫]开始查询企业id,入参参数:{}", JSON.toJSONString(logOrder));
+        Long entId = -1L;
+        KwtLogisticsOrderUnit kwtLogisticsOrderUnit = logisticsOrderUnitRepository.queryByLOrderIdAndUnitType(logOrder.getId(), 1);
+        if (kwtLogisticsOrderUnit == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ORDER_NOT_FOUND, "[接单]物流企业信息数据不存在");
+        }
+        // 原矿运输山上、上下门卫企业id
+        List<Long> mockEntIds = Arrays.asList(538039617157337089L, 538040297439891457L);
+        if (Objects.equals(1, logOrder.getOrderType()) && mockEntIds.contains(kwtLogisticsOrderUnit.getEntId())) {
+            entId = mockEntIds.get(1);
+        }
+        log.info("[创建卸货门卫]查询企业id完成,入参参数:{}", JSON.toJSONString(entId));
+        return entId;
+    }
+
     /**
      * 校验是否可放行
      * @param gatekeeper
      */
     public void savePassReason(GatekeeperOrderPassReasonParam gatekeeper) {
+        // 1.保存放行原因
+        saveGatePassReason(gatekeeper);
+
+        // 2.门卫放行
+        GatekeeperOrderPassParam passParam = new GatekeeperOrderPassParam();
+        passParam.setId(gatekeeper.getId());
+        passParam.setGatekeeperUserId(gatekeeper.getGatekeeperUserId());
+        passParam.setGatekeeperName(gatekeeper.getGatekeeperName());
+        pass(passParam);
+    }
+
+    /**
+     * 保存放行原因
+     * @param gatekeeper
+     */
+    private void saveGatePassReason(GatekeeperOrderPassReasonParam gatekeeper) {
         log.info("[门卫放行原因]保存放行原因, param:{}", JSON.toJSONString(gatekeeper));
         KwtGatekeeperWaybillOrder gatekeeperWaybillOrder = gatekeeperWaybillOrderRepository.getById(gatekeeper.getId());
         if (gatekeeperWaybillOrder == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.GATEKEEPER_ORDER_NOT_FOUND, "[门卫放行原因]门卫订单不存在!");
         }
-        KwtWaybillOrder waybillOrder = waybillOrderRepository.getById(gatekeeperWaybillOrder.getLOrderId());
+        KwtWaybillOrder waybillOrder = waybillOrderRepository.getById(gatekeeperWaybillOrder.getWOrderId());
         if (waybillOrder == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "[门卫放行原因]运单不存在!");
         }

+ 135 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

@@ -1608,6 +1608,10 @@ public class WaybillOrderService {
      */
     @Transactional(rollbackFor = Exception.class)
     public void comeInto(WaybillOrderCmeIntoWeighParam param) {
+        log.info("[过磅]开始过磅,入参参数:{}", JSON.toJSONString(param));
+        if (param.getEntId() == null){
+            throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "地磅企业id不能为空!");
+        }
         if (StringUtils.isBlank(param.getTruckNo())){
             throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "车牌号不能为空!");
         }
@@ -1615,6 +1619,106 @@ public class WaybillOrderService {
             throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "称重重量不能为空!");
         }
         // 定义运单可以过磅的状态集合
+        List<Integer> FORBIDDEN_STATUSES = Arrays.asList(
+                CarWaybillV1Enum.PENDING_VEHICLE.getCode(),
+                CarWaybillV1Enum.REFUSE_TRAFFIC.getCode(),
+                CarWaybillV1Enum.EXIT_COMPLETED.getCode(),
+                CarWaybillV1Enum.EMPTY_WAIT_LEAVE.getCode(),
+                CarWaybillV1Enum.WAIT_LEAVE.getCode(),
+                CarWaybillV1Enum.UNLOADING.getCode(),
+                CarWaybillV1Enum.REPLENISHING.getCode(),
+                CarWaybillV1Enum.REPLENISH_FINISH.getCode(),
+                CarWaybillV1Enum.WAIT_LOADING.getCode(),
+                CarWaybillV1Enum.UNLOADING_POINT.getCode()
+        );
+        List<KwtWaybillOrder> waybillOrders = waybillOrderRepository.findWbOrderByTruckNoAndStatus(param.getTruckNo(), FORBIDDEN_STATUSES);
+        if (CollectionUtils.isEmpty(waybillOrders)) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "[称重过磅]当前车辆没有称重过磅状态的运单!");
+        }
+        if (waybillOrders.size() > 1) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "[称重过磅]当前车辆过磅称重运单数据存在多条!");
+        }
+        KwtWaybillOrder waybillOrder = waybillOrders.get(0);
+
+        //查询物流订单
+        KwtLogisticsOrder logisticsOrder = logisticsOrderRepository.queryByLogisticsOrderId(waybillOrder.getLOrderId());
+        if (logisticsOrder == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "[称重过磅]当前物流运单不存在!");
+        }
+        // 山上企业
+        Long upEntId = 538039617157337089L;
+        // 山下企业
+        Long downEntId = 538040297439891457L;
+        // 原矿运输
+        if (Objects.equals(1, logisticsOrder.getOrderType())) {
+            log.info("[过磅]该过磅订单为原矿运输,订单信息:{}", JSON.toJSONString(logisticsOrder));
+            KwtLogisticsOrderUnit logisticsOrderUnit = logisticsOrderUnitRepository.queryByLOrderIdAndUnitType(logisticsOrder.getId(), 1);
+            if (logisticsOrderUnit == null) {
+                throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "[称重过磅]当前物流订单关联企业信息不存在!");
+            }
+            //校验走山上还是山下
+            if (Objects.equals(param.getEntId(), logisticsOrderUnit.getEntId()) && Objects.equals(logisticsOrderUnit.getEntId(), upEntId)) {
+                // 1. 山上装货过磅
+                comeIntoHandler(param, waybillOrder);
+            } else if (Objects.equals(param.getEntId(), logisticsOrderUnit.getEntId()) && Objects.equals(logisticsOrderUnit.getEntId(), downEntId)) {
+                // 2. 山下卸货过磅
+                unloadingWeighHnadler(param, waybillOrder);
+            } else {
+                log.info("[称重过磅]过磅称重匹配失败,地磅企业:{},供应企业:{}",
+                        JSON.toJSONString(param.getEntId()), JSON.toJSONString(logisticsOrderUnit.getEntId()));
+                throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "[称重过磅]过磅称重匹配失败!");
+            }
+        } else {
+            log.info("[过磅]该过磅订单为产品销售,订单信息:{}", JSON.toJSONString(logisticsOrder));
+            // 查询贸易订单企业id
+            List<OrderUnitInfoDetailVO> unitInfoDetailVOS = tradeOrderInfoService.queryOrderUnitByTradeOrderId(logisticsOrder.getTOrderId());
+            OrderUnitInfoDetailVO unitInfoDetailVO = unitInfoDetailVOS.stream()
+                    .filter(unit -> Objects.equals(unit.getUnitType(), "2"))
+                    .findFirst().orElse(new OrderUnitInfoDetailVO());
+
+            //产品销售流程只能过自己接单的企业所属地磅
+            if (Objects.equals(param.getEntId(), unitInfoDetailVO.getEntId())) {
+                // 装货过磅
+                comeIntoHandler(param, waybillOrder);
+            }
+        }
+        log.info("[过磅]过磅结束!");
+    }
+
+    /**
+     * 获取企业id
+     * @param logOrder
+     * @return
+     */
+    private Long getEntId(KwtLogisticsOrder logOrder) {
+        log.info("[创建装货门卫]开始查询企业id,入参参数:{}", JSON.toJSONString(logOrder));
+        Long entId;
+        KwtLogisticsOrderUnit kwtLogisticsOrderUnit = logisticsOrderUnitRepository.queryByLOrderIdAndUnitType(logOrder.getId(), 1);
+        if (kwtLogisticsOrderUnit == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ORDER_NOT_FOUND, "[接单]物流企业信息数据不存在");
+        }
+        // 原矿运输山上、上下门卫企业id
+        List<Long> mockEntIds = Arrays.asList(538039617157337089L, 538040297439891457L);
+        if (Objects.equals(1, logOrder.getOrderType()) && mockEntIds.contains(kwtLogisticsOrderUnit.getEntId())) {
+            entId = mockEntIds.get(0);
+        } else {
+            List<OrderUnitInfoDetailVO> unitInfoDetailVOS = tradeOrderInfoService.queryOrderUnitByTradeOrderId(logOrder.getTOrderId());
+            OrderUnitInfoDetailVO unitInfoDetailVO = unitInfoDetailVOS.stream()
+                    .filter(unit -> Objects.equals(unit.getUnitType(), "2"))
+                    .findFirst().orElse(new OrderUnitInfoDetailVO());
+            entId = unitInfoDetailVO.getEntId();
+        }
+        log.info("[创建装货门卫]查询企业id完成,入参参数:{}", JSON.toJSONString(entId));
+        return entId;
+    }
+
+    /**
+     * 装货过磅
+     * @param param
+     */
+    private void comeIntoHandler(WaybillOrderCmeIntoWeighParam param, KwtWaybillOrder waybillOrder) {
+        log.info("[装货过磅]开始装货过磅,参数:{}", JSON.toJSONString(param));
+        // 定义运单可以过磅的状态集合
         List<Integer> FORBIDDEN_STATUSES = Arrays.asList(
                 CarWaybillV1Enum.PENDING_VEHICLE.getCode(),
                 CarWaybillV1Enum.REFUSE_TRAFFIC.getCode(),
@@ -1625,14 +1729,41 @@ public class WaybillOrderService {
                 CarWaybillV1Enum.REPLENISHING.getCode(),
                 CarWaybillV1Enum.REPLENISH_FINISH.getCode()
         );
-        List<KwtWaybillOrder> wbOrderByTruckNo = waybillOrderRepository.findWbOrderByTruckNoAndStatus(param.getTruckNo(), FORBIDDEN_STATUSES);
-        if (CollectionUtils.isEmpty(wbOrderByTruckNo) || wbOrderByTruckNo.size() > 1) {
-            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "当前车辆没有可以称重过磅状态的运单");
+        if (!FORBIDDEN_STATUSES.contains(waybillOrder.getStatus())) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_STATUS_ERROR, "[装货过磅]当前车辆没有称重过磅状态的运单");
         }
-        param.setWaybillOrderId(wbOrderByTruckNo.get(0).getId());
+        param.setWaybillOrderId(waybillOrder.getId());
         comeIntoHandler.handler(param);
+        log.info("[装货过磅]装货过磅结束!");
+    }
+
+    /**
+     * 卸货过磅
+     * @param param
+     */
+    private void unloadingWeighHnadler(WaybillOrderCmeIntoWeighParam param, KwtWaybillOrder waybillOrder) {
+        log.info("[卸货过磅]开始装货过磅,参数:{}", JSON.toJSONString(param));
+        WaybillOrderUnloadingWeighParam unloadingWeighParam = new WaybillOrderUnloadingWeighParam();
+        unloadingWeighParam.setTruckNo(param.getTruckNo());
+        unloadingWeighParam.setWeighAmount(param.getWeighAmount());
+        unloadingWeighParam.setWeighbridgeId(param.getWeighbridgeId());
+        unloadingWeighParam.setWeighbridgeName(param.getWeighbridgeName());
+        unloadingWeighParam.setWeighUrl(param.getWeighUrl());
+
+        // 定义运单可以卸货过磅的状态集合
+        List<Integer> FORBIDDEN_STATUSES = Arrays.asList(
+                CarWaybillV1Enum.WAIT_LOADING.getCode(),
+                CarWaybillV1Enum.UNLOADING_POINT.getCode()
+        );
+        if (!FORBIDDEN_STATUSES.contains(waybillOrder.getStatus())) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_STATUS_ERROR, "[卸货过磅]当前车辆没有称重过磅状态的运单");
+        }
+        unloadingWeighParam.setWaybillOrderId(waybillOrder.getId());
+        unloadingWeighHandler.handler(unloadingWeighParam);
+        log.info("[卸货过磅]卸货过磅结束!");
     }
 
+
     /**
      * 已装货 -手动推推送数据
      * @param param