123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Mead
- * Date: 2019/10/26
- * Time: 11:27 AM
- */
- namespace App\Http\Controllers\V1;
- use App\Http\Controllers\Controller;
- use App\Http\Requests\AdvertisementRequest;
- use App\Http\Requests\AdvertisementsRequest;
- use App\Models\Advertisement;
- use App\Repositories\AdvertisementRepository;
- use App\Transformers\AdvertisementTransformer;
- use Carbon\Carbon;
- use Dingo\Api\Http\Request;
- use Illuminate\Support\Facades\Log;
- /**
- * 广告管理
- * Class AdvertisementController
- * @package App\Http\Controllers\V1
- */
- class AdvertisementController extends Controller
- {
- /**
- * 广告列表
- * @param Request $request
- * @param AdvertisementRepository $advertisementRepository
- * @return \Dingo\Api\Http\Response
- * User: Mead
- */
- public function index(AdvertisementsRequest $request, AdvertisementRepository $advertisementRepository)
- {
- try {
- $advertisement_position = $request->get('position');
- if (is_string($advertisement_position)) {
- return $this->response->array([]);
- }
- $area_id = $request->get('area_id', 0);
- $ads = $advertisementRepository->byPositionIdGetActive($advertisement_position, $area_id)->toArray();
- $data = [];
- $user_id = $this->user->id ?? '';
- $childrenAd = [];
- $childrenAdSort = [];
- $footer_tag = 0;
- if (count($ads) !== 0) {
- foreach ($ads as $v) {
- switch ($v['advertisement_position_slug']) {
- case Advertisement::POSITION_HEADER:
- $data[Advertisement::POSITION_HEADER][] = $v;
- break;
- case Advertisement::POSITION_MID:
- // $key = 'advertisement_mid_times_' . $user_id . '_' . $v['id'];
- // if (!empty($user_id)) {
- // app()->redis->incr($key);
- // $expireat = Carbon::tomorrow()->timestamp;
- // // 设置固定过期时间
- // app()->redis->EXPIREAT($key, $expireat);
- // }
- // // 如果有用户得id 每天只显示一次
- // $aa = app()->redis->get($key) ?? 0;
- //// if ($aa < 100) {
- //// $data[Advertisement::POSITION_MID][] = $v;
- //// }
- $data[Advertisement::POSITION_MID][] = $v;
- break;
- case Advertisement::POSITION_FOOTER:
- if ($v['pid'] == 0) {
- // 找出底部广告
- $data[Advertisement::POSITION_FOOTER][] = $v;
- } else {
- // 底部子广告
- if ((int)$v['extra'] === 50) {
- $v['class'] = $footer_tag % 2 ? 'right' : 'left';
- $footer_tag++;
- }
- $childrenAd[] = $v;
- }
- break;
- default;
- }
- }
- // 底部广告显示优先级高的
- $resChildrenAd = [];
- if (!empty($data[Advertisement::POSITION_FOOTER]) && count($data[Advertisement::POSITION_FOOTER]) >= 1) {
- if (!empty($childrenAd)) {
- // 将子广告整理出来
- foreach ($childrenAd as $v) {
- // 找出底部广告优先级最高的子广告
- if ($v['pid'] == $data[Advertisement::POSITION_FOOTER][0]['id']) {
- $resChildrenAd[] = $v;
- $childrenAdSort[] = $v['sort'];
- $childrenAdId[] = $v['id'];
- }
- }
- // sort 排序 子广告排序
- array_multisort($childrenAdSort, SORT_DESC, $childrenAdId, SORT_ASC, $resChildrenAd);
- // 给子广告赋值
- $data[Advertisement::POSITION_FOOTER][0]['child'] = $resChildrenAd;
- }
- $data[Advertisement::POSITION_FOOTER] = $data[Advertisement::POSITION_FOOTER][0];
- }
- }
- return $this->response->array($data);
- //return $this->response->collection($ads, AdvertisementsTransformer::class);
- } catch (\Exception $exception) {
- $this->errorNoValidation($exception->getMessage());
- }
- }
- /**
- * 广告详情
- * @param Request $request
- * @param AdvertisementRepository $advertisementRepository
- * @return \Dingo\Api\Http\Response
- * User: Mead
- */
- public function show(AdvertisementRequest $request, AdvertisementRepository $advertisementRepository)
- {
- try {
- $id = $request->get('id');
- $ads = $advertisementRepository->byIdGetModel($id);
- return $this->response->item($ads, AdvertisementTransformer::class);
- } catch (\Exception $exception) {
- $this->errorNoValidation($exception->getMessage());
- }
- }
- }
|