You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.8 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. <?php
  2. namespace App\Controller\v3;
  3. use App\Constants\v3\Tabs;
  4. use App\Controller\BaseController;
  5. use App\Model\v3\Goods;
  6. /**
  7. * 推荐商品相关
  8. * Class GoodsRecommend
  9. * @package App\Controller\v3
  10. */
  11. class GoodsRecommendController extends BaseController
  12. {
  13. /**
  14. * 获取首页tabs推荐商品列表
  15. * 1、前端上传tab标识
  16. * 2、根据tab标识从Elasticsearch中获取商品IDs
  17. * 3、根据IDs获取商品数据
  18. * 4、返回数据,id、封面图、名称、原价、现价、库存、月销、tag、规格、购物车相关、商户id、商户avatar、商户名
  19. */
  20. public function getByTabsForAppletIndex()
  21. {
  22. $tab = $this->request->input('tab', '');
  23. $marketId = $this->request->input('market_id', 0);
  24. $page = $this->request->input('page', 1);
  25. $pagesize = $this->request->input('pagesize', 10);
  26. $builder = Goods::query()->with('store')
  27. ->where('market_id', $marketId)
  28. ->where(function ($query) {
  29. $query->where('inventory', '>', 0)->orWhere('is_infinite', '=', 1);
  30. });
  31. switch ($tab) {
  32. case Tabs::APPLET_INDEX_RECOMMEND:
  33. $builder = $builder->orderBy('sales', 'desc');
  34. break;
  35. case Tabs::APPLET_INDEX_NEW:
  36. $builder = $builder->orderBy('created_at', 'desc');
  37. break;
  38. case Tabs::APPLET_INDEX_FRESH:
  39. $builder = $builder->orderBy('price', 'asc');
  40. break;
  41. case Tabs::APPLET_INDEX_OFFICE:
  42. $builder = $builder->whereIn('category_id', [142,146]);
  43. break;
  44. }
  45. $paginate = $builder->paginate($pagesize);
  46. $goods = $paginate->toArray();
  47. return $this->success(['has_more_pages' => $paginate->hasMorePages(), 'tab_data' => $goods['data']]);
  48. }
  49. /**
  50. * 获取推荐商品列表
  51. * 1、前端上传标识
  52. * recommend_search_goods
  53. * recommend_search_stores
  54. * recommend_user_index
  55. * 2、根据标识从Elasticsearch中获取商品IDs
  56. * 3、根据IDs获取商品数据
  57. * 4、返回数据,id、封面图、名称、原价、现价、库存、月销、tag、规格、购物车相关、商户id、商户avatar、商户名
  58. */
  59. public function getByTab()
  60. {
  61. $marketId = $this->request->input('market_id', 0);
  62. $goods = Goods::query()
  63. ->with(['store'])
  64. ->where('market_id', $marketId)
  65. ->where(function ($query) {
  66. $query->where('inventory', '>', 0)->orWhere('is_infinite', '=', 1);
  67. })
  68. ->inRandomOrder()
  69. ->limit(20)
  70. ->get()->toArray();
  71. return $this->success(['has_more_pages' => false, 'tab_data' => $goods]);
  72. }
  73. }