|
|
@@ -1055,8 +1055,7 @@ class OrderService
|
|
|
|
|
|
$fee = $service->matching($package->weight, $order->owner_id, $order->logistic_id, $province->id);
|
|
|
if ($fee<0)$logistic_fee = null;
|
|
|
-
|
|
|
- $logistic_fee += $fee;
|
|
|
+ else $logistic_fee += $fee;
|
|
|
}
|
|
|
}
|
|
|
if ($logistic_fee!==null && $logistic_fee<0)$logistic_fee = null;
|
|
|
@@ -1104,4 +1103,44 @@ class OrderService
|
|
|
return $count->c;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 校正运输费
|
|
|
+ *
|
|
|
+ * @param Order $order
|
|
|
+ *
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ public function reviseLogisticFee(Order $order):bool
|
|
|
+ {
|
|
|
+ /** @var \stdClass $order */
|
|
|
+ if (!$order || $order->wms_status != '订单完成')return false; //订单不存在或状态不为完成
|
|
|
+ $feeBill = OwnerFeeDetail::query()->where("outer_table_name","orders")
|
|
|
+ ->where("outer_id",$order->id)->whereNull("logistic_fee")->first();
|
|
|
+ if (!$feeBill)return false; //是否已有即时账单,没有跳出
|
|
|
+ $order->loadMissing("packages","owner");//加载包裹
|
|
|
+ if (!$order->packages || !$order->owner)return false;
|
|
|
+ $order->owner->loadCount("ownerPriceExpresses");
|
|
|
+ if ($order->owner->owner_price_expresses_count < 1)return false; //不存在计费模型 跳出
|
|
|
+ foreach ($order->packages as $package)if (!$package->weight)return false; //包裹存在且全部存在数量
|
|
|
+
|
|
|
+ $logisticFee = 0;
|
|
|
+ foreach ($order->packages as $package){
|
|
|
+ if ($logisticFee!==null){
|
|
|
+ $provinceName = mb_substr($order->province,0,2);
|
|
|
+ $province = app(CacheService::class)->getOrExecute("province_".$provinceName,function ()use($provinceName){
|
|
|
+ return Province::query()->where("name","like",$provinceName."%")->first();
|
|
|
+ },86400);
|
|
|
+ if (!$province)$logisticFee = null;
|
|
|
+
|
|
|
+ $fee = app("OwnerPriceExpressService")->matching($package->weight, $order->owner_id, $order->logistic_id, $province->id);
|
|
|
+ if ($fee<0)$logisticFee = null;
|
|
|
+ else $logisticFee += $fee;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ($logisticFee===null || $logisticFee<0)
|
|
|
+ LogService::log(__METHOD__,"ERROR-校正即时账单计算物流费错误","订单ID:".$order->id." 费用结果:".$logisticFee);
|
|
|
+ else $feeBill->update(["logistic_fee"=>$logisticFee]);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
}
|