PointDeductionSettingManager.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: shenyang
  5. * Date: 2017/10/16
  6. * Time: 下午1:49
  7. */
  8. namespace app\frontend\modules\finance\deduction;
  9. use app\common\models\Goods;
  10. use app\frontend\modules\deduction\DeductionSettingInterface;
  11. use app\frontend\modules\deduction\DeductionSettingManagerInterface;
  12. use app\frontend\modules\finance\deduction\deductionSettings\PointGoodsDeductionSetting;
  13. use app\frontend\modules\finance\deduction\deductionSettings\PointShopDeductionSetting;
  14. use Illuminate\Container\Container;
  15. class PointDeductionSettingManager extends Container implements DeductionSettingManagerInterface
  16. {
  17. public function __construct()
  18. {
  19. /**
  20. * 计积分抵扣商品设置
  21. */
  22. $this->bind('goods', function (PointDeductionSettingManager $deductionSettingManager, array $params) {
  23. //dump(debug_backtrace(0,20));
  24. return new PointGoodsDeductionSetting($params[0]);
  25. });
  26. /**
  27. * 积分抵扣商城设置
  28. */
  29. $this->bind('shop', function (PointDeductionSettingManager $deductionSettingManager, array $params) {
  30. return new PointShopDeductionSetting();
  31. });
  32. }
  33. /**
  34. * @param Goods $goods
  35. * @return PointDeductionSettingCollection
  36. */
  37. public function getDeductionSettingCollection(Goods $goods)
  38. {
  39. $deductionSettingCollection = collect();
  40. foreach ($this->getBindings() as $key => $value) {
  41. $deductionSettingCollection->push($this->make($key, [$goods]));
  42. }
  43. // 按权重排序
  44. $deductionSettingCollection = $deductionSettingCollection->sortBy(function (DeductionSettingInterface $deductionSetting) {
  45. return $deductionSetting->getWeight();
  46. });
  47. return new PointDeductionSettingCollection($deductionSettingCollection);
  48. }
  49. }