// +---------------------------------------------------------------------- namespace App\Services\Common; use App\Models\AdModel; use App\Services\BaseService; use App\Services\QiniuService; use App\Services\RedisService; /** * 广告管理-服务类 * @author laravel开发员 * @since 2020/11/11 * Class AdService * @package App\Services\Common */ class AdService extends BaseService { protected static $instance = null; /** * 构造函数 * @author laravel开发员 * @since 2020/11/11 * AdService constructor. */ public function __construct() { $this->model = new AdModel(); } /** * 静态入口 * @return static|null */ public static function make() { if (!self::$instance) { self::$instance = (new static()); } return self::$instance; } /** * 按广告位获取缓存列表 * @param $position * @param int $num * @return array|mixed */ public function getListByPosition($position, $num=0) { $cacheKey = "caches:banners:{$position}"; $datas = RedisService::get($cacheKey); if($datas){ return $datas; } $showNum = \App\Services\ConfigService::make()->getConfigByCode('show_banner_num', 6); $num = $num? $num : $showNum; $datas = $this->model->where(['position'=> $position,'status'=> 1,'mark'=>1]) ->select(['id','cover','title','link_type','url','mp_appid','description']) ->limit($num) ->get() ->each(function($item, $k){ $item['cover'] = $item['cover']? get_image_url($item['cover']) : ''; }); $datas = $datas? $datas->toArray() : []; if($datas){ RedisService::set($cacheKey, $datas, rand(5, 10)); } return $datas; } /** * 添加或编辑 * @return array * @since 2020/11/11 * @author laravel开发员 */ public function edit() { $data = request()->all(); // 图片处理 if(isset($data['cover'])){ $data['cover'] = get_image_path($data['cover']); } // 开始时间处理 if (isset($data['start_time']) && $data['start_time']) { $data['start_time'] = strtotime($data['start_time']); } // 结束时间处理 if (isset($data['end_time']) && $data['end_time']) { $data['end_time'] = strtotime($data['end_time']); } else { $data['end_time'] = 0; // 0 表示长期有效 } // 如果是默认链接类型,清空小程序相关字段 if (isset($data['link_type']) && $data['link_type'] == 1) { $data['mp_appid'] = ''; } return parent::edit($data); } /** * 修改状态 */ public function status() { $params = request()->all(); $id = isset($params['id']) ? intval($params['id']) : 0; $status = isset($params['status']) ? intval($params['status']) : 0; if (!$id) { return ['code' => 1, 'msg' => 'ID不能为空']; } if (!$status || ($status != 1 && $status != 2)) { return ['code' => 1, 'msg' => '状态参数错误']; } $result = $this->model->where('id', $id)->update([ 'status' => $status, 'update_time' => time() ]); if ($result !== false) { return ['code' => 0, 'msg' => '状态修改成功']; } return ['code' => 1, 'msg' => '状态修改失败']; } /** * @return array */ public function delete() { $this->model->where(['mark'=>0])->where('update_time','<=', time() - 3600)->delete(); return parent::delete(); // TODO: Change the autogenerated stub } /** * 获取数据列表(重写以支持更多字段) */ public function getDataList($params, $pageSize = 15) { $query = $this->model->where('mark', 1); // 标题搜索 if (isset($params['title']) && $params['title']) { $query->where('title', 'like', '%' . $params['title'] . '%'); } // 位置筛选 if (isset($params['position']) && $params['position'] > 0) { $query->where('position', $params['position']); } // 状态筛选 if (isset($params['status']) && $params['status'] > 0) { $query->where('status', $params['status']); } $list = $query->orderBy('sort', 'desc') ->orderBy('id', 'desc') ->paginate($pageSize); $list = $list ? $list->toArray() : []; // 格式化数据 if ($list && isset($list['data'])) { foreach ($list['data'] as &$item) { // 处理图片 if (isset($item['cover']) && $item['cover']) { $item['cover'] = get_image_url($item['cover']); } // 处理时间 $item['create_time'] = $item['create_time'] ? date('Y-m-d H:i:s', $item['create_time']) : ''; $item['update_time'] = $item['update_time'] ? date('Y-m-d H:i:s', $item['update_time']) : ''; $item['start_time'] = $item['start_time'] ? date('Y-m-d H:i:s', $item['start_time']) : ''; $item['end_time'] = $item['end_time'] ? date('Y-m-d H:i:s', $item['end_time']) : ''; } } return [ 'msg' => '操作成功', 'code' => 0, 'data' => $list['data'] ?? [], 'count' => $list['total'] ?? 0, ]; } }