Browse Source

配送费

master
Lemon 5 years ago
parent
commit
e37e3fc879
  1. 12
      app/Controller/v3/OrderOnlineController.php
  2. 28
      app/Service/v3/Implementations/DistributionPriceService.php
  3. 10
      app/Service/v3/Implementations/UserAddressService.php
  4. 2
      app/Service/v3/Interfaces/DistributionPriceServiceInterface.php

12
app/Controller/v3/OrderOnlineController.php

@ -115,13 +115,18 @@ class OrderOnlineController extends BaseController
$distance_text = '距您收货地址 ' . $distance . 'm';
}
$distributionPrice = $this->distributionPriceService->do($distance);
$originalPrice = $this->distributionPriceService->original($distance);
$res['location'] = [
'address' => $address,
'distribution_price' => $distributionPrice,
'original_price' => $originalPrice,
'distance' => $distance,
'within' => true,
'style' => 'strike',
// 'distribution_text' => '¥ '.$distributionPrice .'(' .$distance_text .')'
'distribution_text' => $distance_text
'distribution_text' => $distance_text,
'distribution_price_text' => '¥ '.$distributionPrice,
'original_price_text' => '¥ '.$originalPrice
];
}else{
$res['location'] = [
@ -129,7 +134,10 @@ class OrderOnlineController extends BaseController
'distribution_price' => 3.5,
'distance' => $distance,
'within' => false,
'distribution_text' => '¥ 3.5'
'style' => 'strike',
'distribution_text' => '',
'distribution_price_text' => '',
'original_price_text' => ''
];
}
//返回预约送达时间 数组

28
app/Service/v3/Implementations/DistributionPriceService.php

@ -22,7 +22,7 @@ class DistributionPriceService implements DistributionPriceServiceInterface
// $distributionPrice = bcmul(0.70,($km-3),2);
$distributionPrice = 0;
break;
case ($km > 5 && $km <= 8) :
case ($km > 5 && $km <= $deliveryDistance) :
$distributionPrice = bcmul(1.50,($km-5),2);
break;
// case ($km > 7 && $km <= $deliveryDistance) :
@ -44,4 +44,30 @@ class DistributionPriceService implements DistributionPriceServiceInterface
{
// TODO: Implement undo() method.
}
public function original($distance)
{
$deliveryDistance = config('distance.delivery_distance');
$deliveryDistance = ceil($deliveryDistance/1000);
$km = ceil($distance/1000);
switch (true){
case ($km > $deliveryDistance) :
throw new ErrorCodeException(ErrorCode::LOCATION_LONG_DISTANCE,'',['message' => '超出配送范围', 'data' => ['距离' => $km, '配送距离' => $deliveryDistance]]);
break;
case ($km > 3 && $km <= 5) :
// $distributionPrice = bcmul(0.70,($km-3),2);
$distributionPrice = 0;
break;
case ($km > 5 && $km <= $deliveryDistance) :
$distributionPrice = bcmul(1.50,($km-5),2);
break;
// case ($km > 7 && $km <= $deliveryDistance) :
// $distributionPrice = bcmul(1.50,($km-5),2);
// break;
default:
$distributionPrice = 0;
}
$distributionPrice = bcadd($distributionPrice,3.50,2);
return (float) $distributionPrice;
}
}

10
app/Service/v3/Implementations/UserAddressService.php

@ -91,16 +91,26 @@ class UserAddressService implements UserAddressServiceInterface
$distance = $this->locationService->getDistanceByTencent($market->lng,$market->lat,$address['address']->lng,$address['address']->lat);
$distributionPrice = $this->distributionPriceService->do($distance);
$originalPrice = $this->distributionPriceService->original($distance);
if($distance >= 1000){
$distance_text = '距您收货地址 ' . bcdiv($distance,1000,2) . 'km';
}else{
$distance_text = '距您收货地址 ' . $distance . 'm';
}
/**
* distributionPrice 配送费
* originalPrice 配送费原价
* style 前端输出样式
*/
$res['address'] = $address;
$res['delivery_distance'] = $distance;
$res['distribution_price'] = $distributionPrice;
$res['original_price'] = $originalPrice;
$res['style'] = 'strike';
// $res['distribution_text'] = '¥ '.$distributionPrice .'(' .$distance_text .')';
$res['distribution_text'] = $distance_text;
$res['distribution_price_text'] = '¥ '.$distributionPrice;
$res['original_price_text'] = '¥ '.$originalPrice;
return $res;
}

2
app/Service/v3/Interfaces/DistributionPriceServiceInterface.php

@ -9,4 +9,6 @@ interface DistributionPriceServiceInterface
public function check();
public function undo();
public function original($distance);
}
Loading…
Cancel
Save