MemberCenterRecommendGoods.php 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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\frontend\models\Goods;
  10. use app\frontend\modules\member\services\MemberCenterPluginBaseService;
  11. class MemberCenterRecommendGoods extends MemberCenterPluginBaseService
  12. {
  13. public function getEnabled()
  14. {
  15. $count = $this->getRedis('member_center_recommend_'.\Yunshop::app()->uniacid);
  16. if (is_null($count)) {
  17. $count = Goods::uniacid()
  18. ->whereIn('yz_goods.plugin_id',[0,92,40,57,58,103,101,113])
  19. ->where('yz_goods.status',1)
  20. ->where('yz_goods.is_recommand', 1); //推荐商品
  21. if (app('plugins')->isEnabled('video-demand')) {
  22. //排除掉视频点播插件的商品
  23. $count = $count->join('yz_video_course_goods',function ($join) {
  24. $join->on('yz_goods.id','=','yz_video_course_goods.goods_id')
  25. ->where('yz_video_course_goods.is_course',0);
  26. });
  27. }
  28. $count = $count->count();
  29. $this->setRedis('member_center_recommend_'.\Yunshop::app()->uniacid,($count?:0));
  30. }
  31. if ($count > 0) {
  32. return true;
  33. }
  34. return false;
  35. }
  36. public function getData()
  37. {
  38. $size = 20;
  39. $goods = Goods::uniacid()->select('yz_goods.id','yz_goods.title','yz_goods.thumb','yz_goods.market_price',
  40. 'yz_goods.show_sales','yz_goods.virtual_sales','yz_goods.price','yz_goods.stock','yz_goods.has_option', 'yz_goods.plugin_id')
  41. ->with(['hasManyOptions' => function($query){
  42. $query->select('goods_id','product_price','market_price');
  43. }])
  44. ->whereIn('yz_goods.plugin_id',[0,92,40,57,58,103,101,113])
  45. ->where('yz_goods.status',1)
  46. ->where('yz_goods.is_recommand', 1) //推荐商品
  47. ->orderBy('yz_goods.id', 'desc');
  48. if (app('plugins')->isEnabled('video-demand')) {
  49. //排除掉视频点播插件的商品
  50. $goods = $goods->join('yz_video_course_goods',function ($join) {
  51. $join->on('yz_goods.id','=','yz_video_course_goods.goods_id')
  52. ->where('yz_video_course_goods.is_course',0);
  53. });
  54. }
  55. $goods = $goods->paginate($size);
  56. foreach ($goods as &$good) {
  57. $good['name'] = $good->title;
  58. $good['img'] = yz_tomedia($good->thumb);
  59. $good['stock_status'] = 0;
  60. $good['price_level'] = $good->vip_next_price?1:0;
  61. $good['sales'] = $good->show_sales + $good->virtual_sales;
  62. $good['vip_level_status'] = $good->vip_level_status;
  63. if ($good->has_option) {
  64. $minMarketPrice = $good->hasManyOptions->sortBy('market_price')->first()['market_price']?:0;
  65. $minPrice = $good->hasManyOptions->sortBy('product_price')->first()['product_price']?:0;
  66. $maxMarketPrice = $good->hasManyOptions->sortByDesc('market_price')->first()['market_price']?:0;
  67. $maxPrice = $good->hasManyOptions->sortByDesc('product_price')->first()['product_price']?:0;
  68. if ($minMarketPrice == $maxMarketPrice) {
  69. $good['priceold'] = $minMarketPrice;
  70. }
  71. $good['priceold'] = ($minMarketPrice == $maxMarketPrice)?$minMarketPrice:($minMarketPrice.'-'.$maxMarketPrice);
  72. $good['pricenow'] = ($minPrice == $maxPrice)?$minPrice:($minPrice.'-'.$maxPrice);
  73. } else {
  74. $good['priceold'] = $good->market_price;
  75. $good['pricenow'] = $good->price;
  76. }
  77. }
  78. $goods = $goods->toArray();
  79. foreach ($goods['data'] as &$item) {
  80. $item['vip_next_price'] = $item['next_level_price'];
  81. $item['notshow'] = $this->getShowVipPrice();
  82. }
  83. unset($item);
  84. return $goods;
  85. }
  86. }