You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.6 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. <?php
  2. namespace App\Service\v3\Implementations;
  3. use App\Constants\v3\ErrorCode;
  4. use App\Exception\ErrorCodeException;
  5. use Hyperf\Di\Annotation\Inject;
  6. use App\Service\v3\Interfaces\DistributionPriceServiceInterface;
  7. class DistributionPriceService implements DistributionPriceServiceInterface
  8. {
  9. public function do($distance)
  10. {
  11. $deliveryDistance = config('distance.delivery_distance');
  12. $deliveryDistance = ceil($deliveryDistance/1000);
  13. $km = ceil($distance/1000);
  14. switch (true){
  15. case ($km > $deliveryDistance) :
  16. throw new ErrorCodeException(ErrorCode::LOCATION_LONG_DISTANCE,'',['message' => '超出配送范围', 'data' => ['距离' => $km, '配送距离' => $deliveryDistance]]);
  17. break;
  18. case ($km > 3 && $km <= 5) :
  19. // $distributionPrice = bcmul(0.70,($km-3),2);
  20. $distributionPrice = 0;
  21. break;
  22. case ($km > 5 && $km <= $deliveryDistance) :
  23. $distributionPrice = bcmul(1.50,($km-5),2);
  24. break;
  25. // case ($km > 7 && $km <= $deliveryDistance) :
  26. // $distributionPrice = bcmul(1.50,($km-5),2);
  27. // break;
  28. default:
  29. $distributionPrice = 0;
  30. }
  31. //$distributionPrice = bcadd($distributionPrice,3.50,2);
  32. return (float) $distributionPrice;
  33. }
  34. public function check()
  35. {
  36. // TODO: Implement check() method.
  37. }
  38. public function undo()
  39. {
  40. // TODO: Implement undo() method.
  41. }
  42. public function original($distance)
  43. {
  44. $deliveryDistance = config('distance.delivery_distance');
  45. $deliveryDistance = ceil($deliveryDistance/1000);
  46. $km = ceil($distance/1000);
  47. switch (true){
  48. case ($km > $deliveryDistance) :
  49. throw new ErrorCodeException(ErrorCode::LOCATION_LONG_DISTANCE,'',['message' => '超出配送范围', 'data' => ['距离' => $km, '配送距离' => $deliveryDistance]]);
  50. break;
  51. case ($km > 3 && $km <= 5) :
  52. // $distributionPrice = bcmul(0.70,($km-3),2);
  53. $distributionPrice = 0;
  54. break;
  55. case ($km > 5 && $km <= $deliveryDistance) :
  56. $distributionPrice = bcmul(1.50,($km-5),2);
  57. break;
  58. // case ($km > 7 && $km <= $deliveryDistance) :
  59. // $distributionPrice = bcmul(1.50,($km-5),2);
  60. // break;
  61. default:
  62. $distributionPrice = 0;
  63. }
  64. $distributionPrice = bcadd($distributionPrice,3.50,2);
  65. return (float) $distributionPrice;
  66. }
  67. }