AdvService.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. namespace addons\TinyShop\services\common;
  3. use Yii;
  4. use common\enums\StatusEnum;
  5. use addons\TinyShop\common\enums\AdvLocalEnum;
  6. use addons\TinyShop\common\models\common\Adv;
  7. /**
  8. * Class AdvService
  9. * @package addons\TinyShop\services\common
  10. */
  11. class AdvService
  12. {
  13. /**
  14. * 获取广告列表
  15. *
  16. * @param array $locals
  17. * @return array
  18. */
  19. public function getListByLocals(array $locals)
  20. {
  21. if (empty($locals)) {
  22. return $locals;
  23. }
  24. $data = Adv::find()
  25. ->where(['status' => StatusEnum::ENABLED])
  26. ->andWhere(['in', 'location', $locals])
  27. ->andWhere(['<', 'start_time', time()])
  28. ->andWhere(['>', 'end_time', time()])
  29. ->andWhere(['merchant_id' => Yii::$app->services->merchant->getNotNullId()])
  30. ->orderBy('sort asc, id desc')
  31. ->cache(60)
  32. ->asArray()
  33. ->all();
  34. $dataByLocal = [];
  35. foreach ($data as $datum) {
  36. $dataByLocal[$datum['location']][] = $datum;
  37. }
  38. $result = [];
  39. $config = AdvLocalEnum::config();
  40. foreach ($locals as $local) {
  41. if (isset($dataByLocal[$local]) && isset($config[$local])) {
  42. // 轮播
  43. if ($config[$local]['multiple'] == StatusEnum::ENABLED) {
  44. $result[$local] = $dataByLocal[$local];
  45. } else {
  46. $result[$local][] = $dataByLocal[$local][0];
  47. }
  48. } else {
  49. $result[$local] = [];
  50. }
  51. }
  52. return $result;
  53. }
  54. }
粤ICP备19079148号