Răsfoiți Sursa

卸货更新物流订单和贸易订单

donglang 2 săptămâni în urmă
părinte
comite
bf9ded468f

+ 12 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/AbstractWaybillOrderHandler.java

@@ -15,10 +15,7 @@ import com.sckw.fleet.api.model.dto.RUpdateDriverScoreDto;
 import com.sckw.fleet.api.model.vo.DriverConductRulesVO;
 import com.sckw.fleet.api.model.vo.TruckDispatchCoefficientVO;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
-import com.sckw.transport.model.KwtLogisticsOrderUnit;
-import com.sckw.transport.model.KwtWaybillOrder;
-import com.sckw.transport.model.KwtWaybillOrderNode;
-import com.sckw.transport.model.KwtWaybillOrderSubtask;
+import com.sckw.transport.model.*;
 import com.sckw.transport.model.param.*;
 import com.sckw.transport.repository.*;
 import lombok.extern.slf4j.Slf4j;
@@ -197,6 +194,17 @@ public abstract class AbstractWaybillOrderHandler<T extends WaybillOrderProcessP
     protected abstract String getRemark(T param, KwtWaybillOrder waybillOrder);
 
 
+    /**
+     * 查询物流订单
+     */
+    protected KwtLogisticsOrder getLogisticsOrder(Long waybillOrderId) {
+        KwtLogisticsOrder logisticsOrder = logisticsOrderRepository.queryByLogisticsOrderId(waybillOrderId);
+        if (logisticsOrder == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ORDER_NOT_FOUND, "物流订单数据不存在!");
+        }
+        return logisticsOrder;
+    }
+
     /**
      * 查询运单
      */

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/LeaveMockHandler.java

@@ -58,7 +58,7 @@ public class LeaveMockHandler extends AbstractWaybillOrderHandler<WaybillOrderLe
                 .collect(Collectors.toMap(KwtWaybillOrderTicket::getType, Function.identity(), (a, b) -> a));
         //1.填充毛重
         updateGrossAmount(param, ticketMap);
-        //2.填充装货
+        //2.填充运单装货重
         updateLoadAmount(param, waybillOrder, ticketMap);
     }
 

+ 63 - 28
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/UnloadingHandler.java

@@ -13,6 +13,7 @@ import com.sckw.core.utils.DistanceUtils;
 import com.sckw.fleet.api.model.vo.DriverConductRulesVO;
 import com.sckw.fleet.api.model.vo.TruckDispatchCoefficientVO;
 import com.sckw.order.api.model.OrderDetailVo;
+import com.sckw.order.api.model.TradeOrderSettlePara;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.param.WaybillOrderUnloadParam;
 import com.sckw.transport.repository.KwtWaybillOrderSubtaskRepository;
@@ -75,28 +76,26 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
 
     @Override
     protected void doBusiness(WaybillOrderUnloadParam param, KwtWaybillOrder waybill) {
-        KwtLogisticsOrder logisticsOrder = logisticsOrderRepository.queryByLogisticsOrderId(waybill.getLOrderId());
-        if (logisticsOrder == null) {
-            throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ORDER_NOT_FOUND, "物流订单数据不存在!");
-        }
+        //查询物流订单
+        KwtLogisticsOrder logisticsOrder = getLogisticsOrder(waybill.getLOrderId());
+
         OrderDetailVo orderDetailVo = tradeOrderInfoService.queryByTradeOrderId(logisticsOrder.getTOrderId());
         if (orderDetailVo == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.TRADE_ORDER_NOT_FOUND, "交易订单数据不存在!");
         }
-
+        //计算净装货量
+        BigDecimal loadAmount = getLoadAmount(param);
         //按照装货量计算:推送到已完成状态
         if (orderDetailVo.getChargeType() == 1) {
             this.targetStatus = Global.NUMERICAL_ONE;
-            //1.计算净装货量
-            BigDecimal loadAmount = getLoadAmount(param);
 
-            //2. 填充运单装货量
-            KwtWaybillOrderSubtask subtask = updateWaybillOrderSubtask(waybill, loadAmount);
+            //1.更新物流订单装货量
+            updateLogisticsOrder(waybill, logisticsOrder, loadAmount);
 
-            //3. 更新物流订单
-            updateTradeOrder(logisticsOrder, loadAmount, subtask);
+            //2.更新贸易订单装货量
+            updateTradeOrder(logisticsOrder, loadAmount);
 
-            //4. 解绑车辆
+            //3.解绑车辆
             unbindTruck(waybill.getId());
 
         } else if (orderDetailVo.getChargeType() == 2) {
@@ -104,14 +103,15 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
                 throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "卸货净重和卸货凭证不能为空!");
             }
             this.targetStatus = Global.NUMERICAL_TWO;
-            //按照卸货量计算:推送到已卸货状态,更新子运单卸货净重
-            KwtWaybillOrderSubtask subtask = getWaybillSubtask(waybill.getId());
-            subtask.setUnloadAmount(param.getUnloadAmount());
-            subtask.setUnloadTime(new Date());
-            subtask.setUnloadUrl(param.getUnloadUrl());
-            subtask.setUnloadUploadTime(new Date());
-            subtask.setUnloadOperator(waybill.getDriverId());
-            waybillOrderSubtaskRepository.updateById(subtask);
+
+            //1.更新子运单卸货量
+            updateWaybillOrderSubtask(param, waybill);
+
+            //2.更新物流订单装货量
+            updateLogisticsOrderByTake(logisticsOrder, loadAmount);
+
+            //3.更新贸易订单装货量
+            updateTradeOrder(logisticsOrder, loadAmount);
         }
     }
 
@@ -142,20 +142,27 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
     }
 
     /**
-     * 填充运单装货量
+     * 按照卸货量计算:推送到已卸货状态,更新子运单卸货净重
+     * @param param
+     * @param waybill
      */
-    private KwtWaybillOrderSubtask updateWaybillOrderSubtask(KwtWaybillOrder waybill, BigDecimal loadAmount) {
+    private void updateWaybillOrderSubtask(WaybillOrderUnloadParam param, KwtWaybillOrder waybill) {
         KwtWaybillOrderSubtask subtask = getWaybillSubtask(waybill.getId());
-//        subtask.setLoadAmount(loadAmount);
-//        subtask.setLoadTime(new Date());
-//        waybillOrderSubtaskRepository.updateById(subtask);
-        return subtask;
+        subtask.setUnloadAmount(param.getUnloadAmount());
+        subtask.setUnloadTime(new Date());
+        subtask.setUnloadUrl(param.getUnloadUrl());
+        subtask.setUnloadUploadTime(new Date());
+        subtask.setUnloadOperator(waybill.getDriverId());
+        waybillOrderSubtaskRepository.updateById(subtask);
     }
 
     /**
      * 更新物流订单装货量和已委托量
      */
-    private void updateTradeOrder(KwtLogisticsOrder logisticsOrder, BigDecimal loadAmount, KwtWaybillOrderSubtask subtask) {
+    private void updateLogisticsOrder(KwtWaybillOrder waybill, KwtLogisticsOrder logisticsOrder, BigDecimal loadAmount) {
+        //查询子运单
+        KwtWaybillOrderSubtask subtask = getWaybillSubtask(waybill.getId());
+
         //物流订单装货量累加
         BigDecimal currentTotalLoad = Optional.ofNullable(logisticsOrder.getTotalLoadAmount())
                 .filter(amount -> amount.compareTo(BigDecimal.ZERO) > 0)
@@ -171,7 +178,7 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
         BigDecimal totalEntrustAmount = currentEntrust.subtract(subtractAmount);
         // 确保已委托量不为负数
         logisticsOrder.setEntrustAmount(totalEntrustAmount.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : totalEntrustAmount);
-        //如果当前运单的物流订单下没有其它进行中的运单,则修改单状态已完成
+        //如果当前运单的物流订单下没有其它进行中的运单,则修改物流订单状态已完成
         if (Objects.equals(LogisticsOrderV1Enum.NEARING_COMPLETION.getCode(), logisticsOrder.getStatus())) {
             List<KwtWaybillOrder> waybillOrderList = waybillOrderRepository
                     .findOneByLogOrderIdAndStatus(logisticsOrder.getId(), UNFINISHED_STATUSES, subtask.getWOrderId());
@@ -182,6 +189,34 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
         logisticsOrderRepository.updateById(logisticsOrder);
     }
 
+    /**
+     * 更新贸易订单装货量
+     */
+    private void updateTradeOrder(KwtLogisticsOrder logisticsOrder, BigDecimal loadAmount) {
+        //贸易订单装货量累加
+        TradeOrderSettlePara tradeOrderSettlePara = new TradeOrderSettlePara();
+        tradeOrderSettlePara.setTOrderId(logisticsOrder.getTOrderId());
+        tradeOrderSettlePara.setLoadAmount(loadAmount);
+
+        tradeOrderInfoService.orderSettle(tradeOrderSettlePara);
+        log.info("离场过磅更新贸易订单累计装货净重成功!贸易订单ID: {}, 本次装货净重: {}", logisticsOrder.getTOrderId(), loadAmount);
+    }
+
+
+    /**
+     * 更新物流订单装货量和已委托量
+     */
+    private void updateLogisticsOrderByTake(KwtLogisticsOrder logisticsOrder, BigDecimal loadAmount) {
+        //物流订单装货量累加
+        BigDecimal currentTotalLoad = Optional.ofNullable(logisticsOrder.getTotalLoadAmount())
+                .filter(amount -> amount.compareTo(BigDecimal.ZERO) > 0)
+                .orElse(BigDecimal.ZERO);
+        BigDecimal totalLoadAmount = currentTotalLoad.add(Optional.ofNullable(loadAmount).orElse(BigDecimal.ZERO));
+        logisticsOrder.setTotalLoadAmount(totalLoadAmount);
+        logisticsOrderRepository.updateById(logisticsOrder);
+        log.info("卸货更新物流订单累计装货净重成功!物流订单ID: {}, 本次装货净重: {}", logisticsOrder.getId(), loadAmount);
+    }
+
     /**
      * 解绑车辆
      * @param wOrderId

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

@@ -27,7 +27,7 @@ public class KwtWaybillOrderSubtask extends BaseModel {
     private Long lOrderId;
 
     /**
-     * 物流订单id
+     * 单id
      */
     private Long wOrderId;