Browse Source

配送费

master
Lemon 5 years ago
parent
commit
09d572e73e
  1. 2
      app/Controller/v3/OrderOnlineController.php
  2. 4
      app/Controller/v3/UserAddressController.php
  3. 24
      app/Service/v3/Implementations/DistributionPriceService.php
  4. 42
      app/Service/v3/Implementations/UserAddressService.php
  5. 2
      app/Service/v3/Interfaces/DistributionPriceServiceInterface.php
  6. 2
      app/Service/v3/Interfaces/UserAddressServiceInterface.php
  7. 2
      config/routes.php

2
app/Controller/v3/OrderOnlineController.php

@ -93,7 +93,7 @@ class OrderOnlineController extends BaseController
])
->select('id')
->first();
$res['location'] = $this->userAddressService->getAddressAndDistributionRrice($address->id,$marketId);
$res['location'] = $this->userAddressService->getAddressAndDistributionPrice($address->id,$marketId);
//返回预约送达时间 数组
$res['appointment_time'] = $this->appointmentTimeService->do();
//

4
app/Controller/v3/UserAddressController.php

@ -60,11 +60,11 @@ class UserAddressController extends BaseController
return $this->success($res);
}
public function getAddressAndDistributionRrice()
public function getAddressAndDistributionPrice()
{
$userAddressId = $this->request->input('user_address_id');
$marketId = $this->request->input('market_id');
$res = $this->userAddressService->getAddressAndDistributionRrice($userAddressId,$marketId);
$res = $this->userAddressService->getAddressAndDistributionPrice($userAddressId,$marketId);
return $this->success(['location' => $res]);
}

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

@ -8,9 +8,29 @@ use App\Service\v3\Interfaces\DistributionPriceServiceInterface;
class DistributionPriceService implements DistributionPriceServiceInterface
{
public function do()
public function do($distance)
{
return '配送费';
$km = ceil($distance/1000);
switch ($km){
case ($km > 3 && $km < 5) :
$distributionRrice = bcmul(0.70,($km-3),2);
break;
case ($km >= 5 && $km < 7) :
$distributionRrice = bcmul(1.00,($km-3),2);
break;
case ($km >= 7 && $km < 10) :
$distributionRrice = bcmul(1.50,($km-3),2);
break;
case ($km >= 10) :
$distributionRrice = bcmul(1.50,($km-3),2);
// throw new ErrorCodeException(ErrorCode::LOCATION_LONG_DISTANCE);
break;
default:
$distributionRrice = 0;
break;
}
$distributionRrice = bcadd($distributionRrice,3.50,2);
return $distributionRrice;
}
public function check()

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

@ -6,6 +6,7 @@ use App\Constants\v3\ErrorCode;
use App\Exception\ErrorCodeException;
use App\Model\v3\Market;
use App\Model\v3\UserAddress;
use App\Service\v3\Interfaces\DistributionPriceServiceInterface;
use App\Service\v3\Interfaces\LocationServiceInterface;
use App\Service\v3\Interfaces\UserAddressServiceInterface;
use Hyperf\Di\Annotation\Inject;
@ -18,6 +19,12 @@ class UserAddressService implements UserAddressServiceInterface
*/
protected $locationService;
/**
* @Inject
* @var DistributionPriceServiceInterface
*/
protected $distributionPriceService;
public function do($userAddressId,$user_id,$user_name,$address,$doorplate,$gender,$lat,$lng,$tel,$tags)
{
$userAddress = UserAddress::updateOrCreate(['id' => $userAddressId],
@ -71,43 +78,16 @@ class UserAddressService implements UserAddressServiceInterface
* @param $marketId
* @return false|float
*/
public function getAddressAndDistributionRrice($userAddressId,$marketId)
public function getAddressAndDistributionPrice($userAddressId,$marketId)
{
$address = $this->get($userAddressId);
$market = Market::query()->select('lng','lat')->find($marketId);
$distance = $this->locationService->getDistanceByTencent($address->lng,$address->lat,$market->lng,$market->lat);
$distributionRrice = $this->calculateDistributionRrice($distance);
$distributionPrice = $this->distributionPriceService->do($distance);
$res['address'] = $address;
$res['distribution_price'] = $distributionRrice;
$res['distribution_price'] = $distributionPrice;
return $res;
}
/**
* @param $distance
* @return false|float
*/
function calculateDistributionRrice($distance)
{
$km = ceil($distance/1000);
switch ($km){
case ($km > 3 && $km < 5) :
$distributionRrice = bcmul(0.70,($km-3),2);
break;
case ($km >= 5 && $km < 7) :
$distributionRrice = bcmul(1.00,($km-3),2);
break;
case ($km >= 7 && $km < 10) :
$distributionRrice = bcmul(1.50,($km-3),2);
break;
case ($km >= 10) :
$distributionRrice = bcmul(1.50,($km-3),2);
// throw new ErrorCodeException(ErrorCode::LOCATION_LONG_DISTANCE);
break;
default:
$distributionRrice = 0;
break;
}
$distributionRrice = bcadd($distributionRrice,3.50,2);
return $distributionRrice;
}
}

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

@ -4,7 +4,7 @@ namespace App\Service\v3\Interfaces;
interface DistributionPriceServiceInterface
{
public function do();
public function do($distance);
public function check();

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

@ -12,5 +12,5 @@ interface UserAddressServiceInterface
public function get($userAddressId);
public function getList($userId);
public function setDefault($userId,$userAddressId);
public function getAddressAndDistributionRrice($userAddressId,$marketId);
public function getAddressAndDistributionPrice($userAddressId,$marketId);
}

2
config/routes.php

@ -138,7 +138,7 @@ Router::addGroup('/v3/', function () {
Router::post('user/oflOrders', 'App\Controller\v3\OrderListController@offlineForUser');
Router::post('shopCart/delete', 'App\Controller\v3\ShopCartUpdateController@delete');
Router::post('withdraw/pageByStore', 'App\Controller\v3\WithdrawController@pageByStore');
Router::post('userAddress/getAddressAndDistributionRrice', 'App\Controller\v3\UserAddressController@getAddressAndDistributionRrice');
Router::post('userAddress/getAddressAndDistributionPrice', 'App\Controller\v3\UserAddressController@getAddressAndDistributionPrice');
Router::post('withdraw/applyByStore', 'App\Controller\v3\WithdrawController@applyByStore');
},['middleware' => [\App\Middleware\Auth\ApiMiddleware::class, \App\Middleware\Auth\UserMiddleware::class]]);

Loading…
Cancel
Save