AdvertisementController.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Mead
  5. * Date: 2019/10/26
  6. * Time: 11:27 AM
  7. */
  8. namespace App\Http\Controllers\V1;
  9. use App\Http\Controllers\Controller;
  10. use App\Http\Requests\AdvertisementRequest;
  11. use App\Http\Requests\AdvertisementsRequest;
  12. use App\Models\Advertisement;
  13. use App\Repositories\AdvertisementRepository;
  14. use App\Transformers\AdvertisementTransformer;
  15. use Carbon\Carbon;
  16. use Dingo\Api\Http\Request;
  17. use Illuminate\Support\Facades\Log;
  18. /**
  19. * 广告管理
  20. * Class AdvertisementController
  21. * @package App\Http\Controllers\V1
  22. */
  23. class AdvertisementController extends Controller
  24. {
  25. /**
  26. * 广告列表
  27. * @param Request $request
  28. * @param AdvertisementRepository $advertisementRepository
  29. * @return \Dingo\Api\Http\Response
  30. * User: Mead
  31. */
  32. public function index(AdvertisementsRequest $request, AdvertisementRepository $advertisementRepository)
  33. {
  34. try {
  35. $advertisement_position = $request->get('position');
  36. if (is_string($advertisement_position)) {
  37. return $this->response->array([]);
  38. }
  39. $area_id = $request->get('area_id', 0);
  40. $ads = $advertisementRepository->byPositionIdGetActive($advertisement_position, $area_id)->toArray();
  41. $data = [];
  42. $user_id = $this->user->id ?? '';
  43. $childrenAd = [];
  44. $childrenAdSort = [];
  45. $footer_tag = 0;
  46. if (count($ads) !== 0) {
  47. foreach ($ads as $v) {
  48. switch ($v['advertisement_position_slug']) {
  49. case Advertisement::POSITION_HEADER:
  50. $data[Advertisement::POSITION_HEADER][] = $v;
  51. break;
  52. case Advertisement::POSITION_MID:
  53. // $key = 'advertisement_mid_times_' . $user_id . '_' . $v['id'];
  54. // if (!empty($user_id)) {
  55. // app()->redis->incr($key);
  56. // $expireat = Carbon::tomorrow()->timestamp;
  57. // // 设置固定过期时间
  58. // app()->redis->EXPIREAT($key, $expireat);
  59. // }
  60. // // 如果有用户得id 每天只显示一次
  61. // $aa = app()->redis->get($key) ?? 0;
  62. //// if ($aa < 100) {
  63. //// $data[Advertisement::POSITION_MID][] = $v;
  64. //// }
  65. $data[Advertisement::POSITION_MID][] = $v;
  66. break;
  67. case Advertisement::POSITION_FOOTER:
  68. if ($v['pid'] == 0) {
  69. // 找出底部广告
  70. $data[Advertisement::POSITION_FOOTER][] = $v;
  71. } else {
  72. // 底部子广告
  73. if ((int)$v['extra'] === 50) {
  74. $v['class'] = $footer_tag % 2 ? 'right' : 'left';
  75. $footer_tag++;
  76. }
  77. $childrenAd[] = $v;
  78. }
  79. break;
  80. default;
  81. }
  82. }
  83. // 底部广告显示优先级高的
  84. $resChildrenAd = [];
  85. if (!empty($data[Advertisement::POSITION_FOOTER]) && count($data[Advertisement::POSITION_FOOTER]) >= 1) {
  86. if (!empty($childrenAd)) {
  87. // 将子广告整理出来
  88. foreach ($childrenAd as $v) {
  89. // 找出底部广告优先级最高的子广告
  90. if ($v['pid'] == $data[Advertisement::POSITION_FOOTER][0]['id']) {
  91. $resChildrenAd[] = $v;
  92. $childrenAdSort[] = $v['sort'];
  93. $childrenAdId[] = $v['id'];
  94. }
  95. }
  96. // sort 排序 子广告排序
  97. array_multisort($childrenAdSort, SORT_DESC, $childrenAdId, SORT_ASC, $resChildrenAd);
  98. // 给子广告赋值
  99. $data[Advertisement::POSITION_FOOTER][0]['child'] = $resChildrenAd;
  100. }
  101. $data[Advertisement::POSITION_FOOTER] = $data[Advertisement::POSITION_FOOTER][0];
  102. }
  103. }
  104. return $this->response->array($data);
  105. //return $this->response->collection($ads, AdvertisementsTransformer::class);
  106. } catch (\Exception $exception) {
  107. $this->errorNoValidation($exception->getMessage());
  108. }
  109. }
  110. /**
  111. * 广告详情
  112. * @param Request $request
  113. * @param AdvertisementRepository $advertisementRepository
  114. * @return \Dingo\Api\Http\Response
  115. * User: Mead
  116. */
  117. public function show(AdvertisementRequest $request, AdvertisementRepository $advertisementRepository)
  118. {
  119. try {
  120. $id = $request->get('id');
  121. $ads = $advertisementRepository->byIdGetModel($id);
  122. return $this->response->item($ads, AdvertisementTransformer::class);
  123. } catch (\Exception $exception) {
  124. $this->errorNoValidation($exception->getMessage());
  125. }
  126. }
  127. }