OrderServiceFeeManager.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2020/8/20
  6. * Time: 16:55
  7. */
  8. namespace app\frontend\modules\order\serviceFee;
  9. use app\framework\Database\Eloquent\Collection;
  10. use app\frontend\models\order\PreOrderServiceFee;
  11. use app\frontend\modules\order\models\PreOrder;
  12. class OrderServiceFeeManager
  13. {
  14. public $orderServiceFee;
  15. /**
  16. * @var PreOrder
  17. */
  18. protected $order;
  19. /**
  20. * OrderFee constructor.
  21. * @param PreOrder $order
  22. */
  23. public function __construct(PreOrder $order)
  24. {
  25. $this->order = $order;
  26. // 订单服务费集合
  27. $order->setRelation('orderServiceFees', new Collection());
  28. }
  29. public function getOrderServiceFees()
  30. {
  31. if (!isset($this->orderServiceFee)) {
  32. $orderServiceFees = $this->getEnableServiceFee()->map(function (BaseOrderServiceFee $serviceFee) {
  33. /**
  34. * @var PreOrderServiceFee $orderServiceFee
  35. */
  36. $orderServiceFee = new PreOrderServiceFee();
  37. $orderServiceFee->init($serviceFee, $this->order);
  38. return $orderServiceFee;
  39. });
  40. $this->orderServiceFee = $orderServiceFees;
  41. }
  42. return $this->orderServiceFee;
  43. }
  44. public function getEnableServiceFee()
  45. {
  46. $orderServiceFee = collect();
  47. $configs = \app\common\modules\shop\ShopConfig::current()->get('shop-foundation.order-service-fee');
  48. foreach ($configs as $configItem) {
  49. $class = call_user_func($configItem['class'], $this->order);
  50. if ($class->enable()) {
  51. $orderServiceFee->put($configItem['key'], $class);
  52. }
  53. }
  54. return $orderServiceFee;
  55. }
  56. public function getAmount()
  57. {
  58. return $this->getOrderServiceFees()->sum(function (PreOrderServiceFee $orderServiceFee) {
  59. if ($orderServiceFee->isChecked()) {
  60. // 每一种服务费
  61. return $orderServiceFee->getAmount();
  62. }
  63. return 0;
  64. });
  65. }
  66. }