| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- <?php
- namespace App\Web\Services;
- use App\Services\CommonUserBaseService;
- use App\Web\Models\WebUtmModel;
- use Illuminate\Support\Facades\Cache;
- class WebUtmService extends CommonUserBaseService
- {
- protected $cache = true;
- protected $cacheBucket = 'WebUtm:';
- public function __construct(WebUtmModel $model)
- {
- $this->model = $model;
- }
- public function getUtm($id)
- {
- return $this->model->getWebUtm($id);
- }
- public function delUtm($ids)
- {
- return $this->model->delWebUtm($ids);
- }
- public function addOrUpdUtm($params)
- {
- $userId = $this->getAuthUserId() ?? 0;
- if (!empty($id)) {
- $this->model->updWebUtm($id, $params);
- } else {
- $oldUtm = $this->model->getUtmByParams($params);
- if (!empty($oldUtm)) {
- $id = $oldUtm['id'];
- $this->model->updWebUtm($id, $params);
- } else {
- $id = $this->model->addWebUtm($userId, $params);
- }
- }
- return $id;
- }
- public function getWebUtmList($campaignName = '', $campaignSource = '', $campaignMedium = '', $pageSize = 10, $orderBy = '', $orderDirect = '')
- {
- return $this->model->getWebUtmList($campaignName, $campaignSource, $campaignMedium, $pageSize, $orderBy, $orderDirect);
- }
- /**
- * UTM缓存pv key获取方式
- * @param $id
- * @return string
- */
- public function getUtmPvCacheKey($id)
- {
- return $this->cacheBucket . '_web_utm_pv_' . $id;
- }
- /**
- * UTM缓存uv key获取方式
- * @param $id
- * @return string
- */
- public function getUtmUvCacheKey($id)
- {
- return $this->cacheBucket . '_web_utm_uv_' . $id;
- }
- /**
- * UTM IP 缓存key获取方式
- * @param $id
- * @param $ip
- * @return string
- */
- public function getUtmIpCacheKey($id, $ip)
- {
- return $this->cacheBucket . '_web_utm_' . $id . '_' . $ip;
- }
- /**
- * @return string
- */
- public function getUtmCacheIdsKey()
- {
- return $this->cacheBucket . '_web_utm_cache_list';
- }
- /**
- * 广告统计分析
- * @param $utmParams
- * @param $clientIp
- * @param $clientHost
- * @param $clientPath
- * @return int
- */
- public function statisticAnalysis($utmParams, $clientIp, $clientHost, $clientPath)
- {
- //判断是否广告渠道进入的用户
- if(!empty($utmParams)) {
- $utmConstParams = ['campaign_id', 'campaign_name', 'campaign_source', 'campaign_term',
- 'campaign_medium', 'campaign_content'];
- $utmKeys = array_keys($utmParams);
- $leadArr = array_intersect($utmKeys, $utmConstParams);
- if (!empty($leadArr)) {
- $utm = $this->model->getUtmByParams($utmParams);
- if(!empty($utm)) {
- $parsedUrl = parse_url($utm['website_url']);
- if (!empty($parsedUrl['host']) && !empty($parsedUrl['path'])) {
- $rawClientPath = str_replace('/', '', $clientPath);
- $rawParsedPath = str_replace('/', '', $parsedUrl['path']);
- if ($clientHost == $parsedUrl['host'] &&
- (empty($rawClientPath) && empty($rawParsedPath)
- || $rawClientPath == $rawParsedPath)
- ) {
- $pvCache = Cache::get($this->getUtmPvCacheKey($utm['id']));
- if ($pvCache) {
- $pvCache = $pvCache + 1;
- } else {
- $pvCache = 1;
- }
- Cache::put($this->getUtmPvCacheKey($utm['id']), $pvCache, 24 * 3600);
- // if ($clientIp) {
- // $ipCache = Cache::get($this->getUtmIpCacheKey($utm['id'], $clientIp));
- // if (empty($ipCache)) {
- // $uvCache = Cache::get($this->getUtmUvCacheKey($utm['id']));
- // if ($uvCache) {
- // $uvCache = $uvCache + 1;
- // } else {
- // $uvCache = 1;
- // }
- // Cache::put($this->getUtmUvCacheKey($utm['id']), $uvCache, 24 * 3600);
- // Cache::put($this->getUtmIpCacheKey($utm['id'], $clientIp), 1, 24*3600);
- // }
- // }
- }
- }
- }
- }
- }
- return 1;
- }
- /**
- * 持久化存储Pv,Uv
- * @param $page
- * @return int
- */
- public function persistenceUtmPvUv($page = 1)
- {
- if (config('app.is_utm')) {
- $pageSize = 999;
- $data = $this->model->getWebUtmByPage($page, $pageSize);
- if (!empty($data)) {
- foreach ($data as $utm) {
- $pvCache = Cache::get($this->getUtmPvCacheKey($utm['id']));
- // $uvCache = Cache::get($this->getUtmUvCacheKey($utm['id']));
- if (!empty($pvCache)) {
- $this->model->where('id', $utm['id'])->increment('pv', $pvCache);
- Cache::forget($this->getUtmPvCacheKey($utm['id']));
- }
- // if (!empty($uvCache)) {
- // $this->model->increment('uv', $uvCache);
- // Cache::forget($this->getUtmUvCacheKey($utm['id']));
- // }
- }
- $page = $page + 1;
- $this->persistenceUtmPvUv($page);
- }
- return 1;
- }
- return 0;
- }
- }
|