MemberCenterLimitBuyGoods.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Author: 芸众商城 www.yunzshop.com
  5. * Date: 2017/4/1
  6. * Time: 下午4:37
  7. */
  8. namespace app\frontend\modules\goods\services;
  9. use app\common\models\goods\GoodsLimitBuy;
  10. use app\frontend\models\Goods;
  11. use app\frontend\modules\member\services\MemberCenterPluginBaseService;
  12. use Illuminate\Support\Facades\Redis;
  13. class MemberCenterLimitBuyGoods extends MemberCenterPluginBaseService
  14. {
  15. public function getEnabled()
  16. {
  17. $count = $this->getRedis('member_center_limit_buy_'.\Yunshop::app()->uniacid);
  18. if (is_null($count)) {
  19. $count = Goods::uniacid()->join('yz_goods_limitbuy',function ($join) {
  20. $join->on('yz_goods.id','=','yz_goods_limitbuy.goods_id')->where(function ($where) {
  21. return $where->where('yz_goods_limitbuy.status',1)
  22. ->where('yz_goods_limitbuy.start_time' ,'<=',time())
  23. ->where('yz_goods_limitbuy.end_time' ,'>',time());
  24. });
  25. });
  26. if (app('plugins')->isEnabled('video-demand')) {
  27. //排除掉视频点播插件的商品
  28. $count = $count->join('yz_video_course_goods',function ($join) {
  29. $join->on('yz_goods.id','=','yz_video_course_goods.goods_id')
  30. ->where('yz_video_course_goods.is_course',0);
  31. });
  32. }
  33. $count = $count->whereIn('yz_goods.plugin_id',[0,92,40,57,58,103,101,113])
  34. ->where('yz_goods.status',1)
  35. ->count();
  36. $this->setRedis('member_center_limit_buy_'.\Yunshop::app()->uniacid,($count?:0));
  37. }
  38. if ($count > 0) {
  39. return true;
  40. }
  41. return false;
  42. }
  43. public function getData()
  44. {
  45. $size = 20;
  46. $goods = Goods::uniacid()->select('yz_goods.id','yz_goods.title','yz_goods.thumb','yz_goods.market_price',
  47. 'yz_goods.show_sales','yz_goods.virtual_sales','yz_goods.price','yz_goods.stock','yz_goods.has_option', 'yz_goods.plugin_id','yz_goods_limitbuy.start_time','yz_goods_limitbuy.end_time')
  48. ->join('yz_goods_limitbuy',function ($join) {
  49. $join->on('yz_goods.id','=','yz_goods_limitbuy.goods_id')->where(function ($where) {
  50. return $where->where('yz_goods_limitbuy.status',1)
  51. ->where('yz_goods_limitbuy.start_time' ,'<=',time())
  52. ->where('yz_goods_limitbuy.end_time' ,'>',time());
  53. });
  54. })
  55. ->with(['hasManyOptions' => function($query){
  56. $query->select('goods_id','product_price','market_price');
  57. }])
  58. ->whereIn('yz_goods.plugin_id',[0,92,40,57,58,103,101,113])
  59. ->where('yz_goods.status',1)
  60. ->orderBy('yz_goods.id', 'desc');
  61. if (app('plugins')->isEnabled('video-demand')) {
  62. //排除掉视频点播插件的商品
  63. $goods = $goods->join('yz_video_course_goods',function ($join) {
  64. $join->on('yz_goods.id','=','yz_video_course_goods.goods_id')
  65. ->where('yz_video_course_goods.is_course',0);
  66. });
  67. }
  68. $goods = $goods->paginate($size);
  69. foreach ($goods as &$good) {
  70. $good['name'] = $good->title;
  71. $good['img'] = yz_tomedia($good->thumb);
  72. $good['stock_status'] = 0;
  73. $good['price_level'] = $good->vip_next_price?1:0;
  74. $good['sales'] = $good->show_sales + $good->virtual_sales;
  75. $good['vip_level_status'] = $good->vip_level_status;
  76. if ($good->has_option) {
  77. $minMarketPrice = $good->hasManyOptions->sortBy('market_price')->first()['market_price']?:0;
  78. $minPrice = $good->hasManyOptions->sortBy('product_price')->first()['product_price']?:0;
  79. $maxMarketPrice = $good->hasManyOptions->sortByDesc('market_price')->first()['market_price']?:0;
  80. $maxPrice = $good->hasManyOptions->sortByDesc('product_price')->first()['product_price']?:0;
  81. if ($minMarketPrice == $maxMarketPrice) {
  82. $good['priceold'] = $minMarketPrice;
  83. }
  84. $good['priceold'] = ($minMarketPrice == $maxMarketPrice)?$minMarketPrice:($minMarketPrice.'-'.$maxMarketPrice);
  85. $good['pricenow'] = ($minPrice == $maxPrice)?$minPrice:($minPrice.'-'.$maxPrice);
  86. } else {
  87. $good['priceold'] = $good->market_price;
  88. $good['pricenow'] = $good->price;
  89. }
  90. }
  91. $goods = $goods->toArray();
  92. foreach ($goods['data'] as &$item) {
  93. $item['vip_next_price'] = $item['next_level_price'];
  94. $item['notshow'] = $this->getShowVipPrice();
  95. }
  96. unset($item);
  97. return $goods;
  98. }
  99. }