|
|
@@ -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
|