CartGoodsCollection.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2021/4/14
  6. * Time: 15:50
  7. */
  8. namespace app\frontend\modules\cart\manager;
  9. use Illuminate\Support\Collection;
  10. use app\frontend\modules\cart\models\CartGoods;
  11. class CartGoodsCollection extends Collection
  12. {
  13. //获取有效的购物车商品
  14. public function filterNormalGoods()
  15. {
  16. return $this->filter(function (CartGoods $goods) {
  17. return !$goods->isInvalid();
  18. })->values();
  19. }
  20. //获取失效的购物车商品
  21. public function filterInvalidGoods()
  22. {
  23. return $this->filter(function (CartGoods $goods) {
  24. return $goods->isInvalid();
  25. })->values();
  26. }
  27. /**
  28. * 每个购物车商品注入店铺模型
  29. * @param $shop
  30. */
  31. public function setShop($shop) {
  32. foreach ($this as $goods) {
  33. $goods->setShop($shop);
  34. }
  35. }
  36. public function cartValidate()
  37. {
  38. $this->map(function (CartGoods $goods) {
  39. return $goods->goodsValidate();
  40. });
  41. }
  42. /**
  43. * 获取商品总价
  44. * @return int
  45. */
  46. public function getPrice()
  47. {
  48. return $this->sum(function (CartGoods $goods) {
  49. return $goods->getPrice();
  50. });
  51. }
  52. public function setCartDisable($isDisable)
  53. {
  54. $this->map(function (CartGoods $goods) use ($isDisable) {
  55. return $goods->setDisable($isDisable);
  56. });
  57. }
  58. public function getEstimatedPrice()
  59. {
  60. return $this->sum(function (CartGoods $goods) {
  61. return $goods->getEstimatedPrice();
  62. });
  63. }
  64. public function isCheckedCartGoods()
  65. {
  66. return $this->contains(function (CartGoods $goods) {
  67. return $goods->isChecked();
  68. });
  69. }
  70. public function getCartGoodsDiscounts()
  71. {
  72. // 将所有订单商品的优惠
  73. return $this->reduce(function (Collection $result, CartGoods $goods) {
  74. return $result->merge($goods->getCartGoodsDiscounts());
  75. },collect());
  76. }
  77. public function getCartGoodsExtraCharges()
  78. {
  79. return $this->reduce(function (Collection $result, CartGoods $goods) {
  80. return $result->merge($goods->getCartGoodsExtraCharges());
  81. },collect());
  82. }
  83. public function getCartGoodsDeductions()
  84. {
  85. return $this->reduce(function (Collection $result, CartGoods $goods) {
  86. return $result->merge($goods->getCartGoodsDeductions());
  87. },collect());
  88. }
  89. }