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.

89 lines
2.3 KiB

  1. <?php
  2. namespace App\Service\v3\Implementations;
  3. use App\Model\v3\Goods;
  4. class SearchService implements \App\Service\v3\Interfaces\SearchServiceInterface
  5. {
  6. public function doForGoods($params)
  7. {
  8. $builder = Goods::query()
  9. ->with(['store' => function($query) {
  10. return $query->select(['id', 'logo', 'name']);
  11. }])
  12. ->where(['market_id' => $params['market_id']])
  13. ->where('inventory', '>', 0);
  14. if (isset($params['type_id']) && $params['type_id']) {
  15. $builder->where(['goods_type_id' => $params['type_id']]);
  16. }
  17. if (isset($params['keyword']) && $params['keyword']) {
  18. $builder->where('name', 'like', '%'.$params['keyword'].'%');
  19. }
  20. if (isset($params['order_by']) && $params['order_by']) {
  21. $sort = $params['sort'] ?? 'desc';
  22. switch ($params['order_by']) {
  23. case 'sales':
  24. $builder->orderBySales($sort);
  25. break;
  26. case 'price':
  27. $builder->orderByPrice($sort);
  28. break;
  29. default:
  30. $builder->orderByDefault($sort);
  31. break;
  32. }
  33. }
  34. $builder->select(['id', 'store_id', 'cover_img', 'name', 'spec', 'tags', 'original_price', 'price', 'inventory', 'sales as total_sales']);
  35. $goods = $builder->forPage($params['page'], $params['pagesize'])->get()->toArray();
  36. $data = [];
  37. foreach ($goods as $key => &$item) {
  38. $store = (object)$item['store'];
  39. unset($item['store']);
  40. $data[] = [
  41. 'goods' => $item,
  42. 'store' => $store
  43. ];
  44. }
  45. return $data;
  46. }
  47. public function doForStores()
  48. {
  49. // TODO: Implement doForStores() method.
  50. }
  51. public function getHotKeywords($type)
  52. {
  53. $keywords = [
  54. 'goods' => ['酱油','油','生蚝'],
  55. 'store' => ['黄姐','王姐','黄姐蔬菜摊'],
  56. ];
  57. return $keywords[$type];
  58. }
  59. public function do()
  60. {
  61. // TODO: Implement do() method.
  62. }
  63. public function check()
  64. {
  65. // TODO: Implement check() method.
  66. }
  67. public function undo()
  68. {
  69. // TODO: Implement undo() method.
  70. }
  71. }