ActivityPublishJob.php
1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
namespace App\Jobs;
use App\Helpers\ServiceHelper;
use App\Models\Activity;
use App\Models\UserHasTag;
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 ActivityPublishJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public Activity $activity;
public array $pushType;
public array $pushUser;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(Activity $activity, array $pushType, array $pushUser = [])
{
$this->activity = $activity;
$this->pushType = $pushType;
$this->pushUser = $pushUser;
}
/**
* @return int[]
*/
protected function getTagUserIds(): array
{
return UserHasTag::query()
->whereIn('tag_id', data_get($this->activity, 'expand.tag_ids', []))
->pluck('user_id')->toArray();
}
/**
* Execute the job.
*
* @return void
* @throws \JsonException
* @throws \RedisException
*/
public function handle(): void
{
$userIds = [];
foreach ($this->pushType as $item) {
if ($item === 'tag') {
$userIds += $this->getTagUserIds();
}
if ($item === 'user') {
$userIds += $this->pushUser;
}
}
$userIds = array_values(array_unique($userIds, SORT_NUMERIC));
Redis::client()->hSet('activity_publish', $this->activity->getKey(), json_encode($userIds, JSON_THROW_ON_ERROR));
ServiceHelper::send('ActivityPublish', ['activityId' => $this->activity->getKey()]);
}
}