6
0
Fork 0

优化运费计算sql查询量

release
vine_liutk 2021-12-13 13:20:17 +08:00
parent 1ac886306b
commit 81a3bbeaec
1 changed files with 25 additions and 22 deletions

View File

@ -17,18 +17,21 @@ class ShippingService
public function countShippingAmount(int $weight, int $totalAmount, int $templateId, int $zoneId)
{
$shipping_amount = 0;
//获取运费规则;
$rules = ShippingRule::with('zones')->where('template_id', $templateId)->get();
$canShipping = true;//是否支持寄送
//如果该模板下无运费规则,则直接包邮
if ($rules->count() > 0) {
if (ShippingRule::where('template_id', $templateId)->count() > 0) {
//只拿有这个地区配置的模板规则减少sql查询市区数量
$rules = ShippingRule::with('zones')->where('template_id', $templateId)->whereHas('zones', function ($q) use ($zoneId) {
return $q->where('zones.id', $zoneId);
})->get();
//按包邮/计重
$rules = $rules->sortBy('type');//优先计算包邮
foreach ($rules as $rule) {
$canShipping = false;
$_ruleInfo = json_decode($rule->info, true);
if (in_array($zoneId, $rule->zones->pluck('id')->toArray())) {
// if (in_array($zoneId, $rule->zones->pluck('id')->toArray())) {
$canShipping = true;
if ($rule->type == ShippingRule::TYPE_FREE) {
if ($totalAmount >= bcmul($_ruleInfo['threshold'], 100)) {//在包邮价格范围内
@ -48,7 +51,7 @@ class ShippingService
break;
}
}
}
// }
}
}
if (!$canShipping) {