ActivityChangeStatusJob.php
2.2 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
73
<?php
namespace App\Jobs;
use App\Enums\ActivityStatusEnum;
use App\Models\Activity;
use App\Models\User;
use App\Notifications\ActivityToDownNotification;
use App\Notifications\ActivityToSendNotification;
use App\Notifications\ActivityToUpNotification;
use Arr;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Notification;
class ActivityChangeStatusJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* @var \App\Models\Activity
*/
public Activity $activity;
/**
* @var \App\Models\User
*/
public User $operator;
public array $expand = [];
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(Activity $activity, User $operator, array $expand = [])
{
$this->activity = $activity;
$this->operator = $operator;
$this->expand = $expand;
}
/**
* Execute the job.
*
* @return void
*/
public function handle(): void
{
User::query()->where('scope', 1)->where('audit_status', 1)->where('status', 1)
->select(['id', 'nick_name', 'real_name', 'official_id', 'official_status'])
->chunk(1000, function (Collection $collection) {
if ($this->activity->getAttribute('status') === ActivityStatusEnum::UP) {
Notification::send($collection, new ActivityToUpNotification($this->activity, $this->operator));
}
if ($this->activity->getAttribute('status') === ActivityStatusEnum::DOWN) {
Notification::send($collection, new ActivityToDownNotification($this->activity, $this->operator, Arr::get($this->expand, 'msg', '')));
}
if ($this->activity->getAttribute('status') === ActivityStatusEnum::MATCH) {
Notification::send($collection, new ActivityToSendNotification($this->activity, $this->operator));
}
});
}
}