| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- <?php
- /**
- * 用户日活[渠道+设备].
- * 场景:新用户,登录,计算
- */
- namespace App\Jobs;
- use Carbon\Carbon;
- use Illuminate\Bus\Queueable;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Foundation\Bus\Dispatchable;
- use Illuminate\Queue\InteractsWithQueue;
- use Illuminate\Queue\SerializesModels;
- use Illuminate\Support\Facades\Redis;
- class UserHyperLogLogJob implements ShouldQueue
- {
- use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
- protected $data = null;
- protected $params = [];
- /**
- * UserHyperLogLogJob constructor.
- * @param mixed $data
- * @param array $params
- */
- public function __construct($data, array $params = [])
- {
- $this->data = $data;
- $this->params = $params;
- }
- /**
- * Execute the job.
- *
- * @return void
- */
- public function handle()
- {
- if (!empty($this->data) && is_array($this->data)) {
- if (isset($this->data[0])) {
- // 二维数组.
- foreach ($this->data as $item) {
- self::threadOne($item);
- }
- } else {
- self::threadOne($this->data);
- }
- }
- }
- /**
- * 处理单个.
- * @param array $item
- */
- protected function threadOne(array $item)
- {
- $item['device_type'] = strtoupper($item['device_type']);
- $keyFlag = 'day_active:';
- if ($item['channel_uid'] == '') {
- // 空字符串,代表官方.
- $fixChannelUid = 'office__';
- } else {
- $fixChannelUid = $item['channel_uid'];
- }
- // 时间格式Y-m-d
- // 日期+渠道维度.
- $keyPrefix = $keyFlag . 'ch:' . $fixChannelUid . ':' . Carbon::parse($item['created_at'])->toDateString();
- $key = $keyPrefix . ':'. $item['device_type'];
- // 单种设备日活
- Redis::pfadd($key, [$item['user_uid']]);
- // 所有设备日活
- Redis::pfadd($keyPrefix, [$item['user_uid']]);
- // 日期+母包应用维度
- $keyPrefix = $keyFlag . 'mom_app:' . $item['mom_app_uid'] . ':' . Carbon::parse($item['created_at'])->toDateString();
- $key = $keyPrefix . ':'. $item['device_type'];
- // 单种设备日活
- Redis::pfadd($key, [$item['user_uid']]);
- // 所有设备日活
- Redis::pfadd($keyPrefix, [$item['user_uid']]);
- // 仅日期维度,所有渠道.
- $keyPrefix = $keyFlag . Carbon::parse($item['created_at'])->toDateString();
- $key = $keyPrefix . ':'. $item['device_type'];
- // 单种设备日活
- Redis::pfadd($key, [$item['user_uid']]);
- // 所有设备日活
- Redis::pfadd($keyPrefix, [$item['user_uid']]);
- }
- }
|