|
|
<?php
namespace App\Service\v3\Implementations;use App\Constants\v3\ErrorCode;use App\Exception\ErrorCodeException;use App\Model\v3\Market;use App\Model\v3\UserAddress;use App\Service\v3\Interfaces\LocationServiceInterface;use App\Service\v3\Interfaces\UserAddressServiceInterface;use Hyperf\Di\Annotation\Inject;
class UserAddressService implements UserAddressServiceInterface{ /** * @Inject * @var LocationServiceInterface */ protected $locationService;
public function do($userAddressId,$user_id,$user_name,$address,$doorplate,$gender,$lat,$lng,$tel,$tags) { $userAddress = UserAddress::updateOrCreate(['id' => $userAddressId], [ 'user_id' => $user_id, 'user_name' => $user_name, 'address' => $address, 'doorplate' => $doorplate, 'gender' => $gender, 'lat' => $lat, 'lng' => $lng, 'tel' => $tel, 'tags' => $tags ]); return $userAddress; }
public function check() {
}
public function undo($userAddressId) { return UserAddress::destroy($userAddressId); }
public function setDefault($userId,$userAddressId) { UserAddress::query()->where([ ['user_id','=',$userId], ['is_default','=',1], ])->decrement('is_default'); $userAddress = UserAddress::query()->find($userAddressId); $userAddress->is_default = 1; return $userAddress->save(); }
public function get($userAddressId) { return UserAddress::query()->find($userAddressId); }
public function getList($userId) { return UserAddress::query()->where('user_id',$userId)->get(); }
/** * @param $userAddressId * @param $marketId * @return false|float */ public function getAddressAndDistributionRrice($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); $res['address'] = $address; $res['distribution_price'] = $distributionRrice; 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; }}
|