UserSingerLimitJob.php 2.36 KB
<?php

namespace App\Jobs;

use App\Enums\UserOfficialStatusEnum;
use App\Models\SystemConfig;
use App\Models\User;
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\Arr;

class UserSingerLimitJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public array $jPushMessage;

    public array $wechatMessage;

    public int $defaultLimit;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(array $jPushMessage, array $wechatMessage)
    {
        $this->jPushMessage  = $jPushMessage;
        $this->wechatMessage = $wechatMessage;
        $this->defaultLimit  = SystemConfig::query()->where('identifier', 'svMC9TNFz2Acx8ccPdAIH')->value('content') ?? 3;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle(): void
    {
        User::query()->where('status', 1)
            ->whereIn('id', explode(',', SystemConfig::query()->where('identifier', 'DBYsQqJrvuPf_d_zMR4va')->value('content') ?? ''))
            ->select(['id', 'nick_name', 'real_name', 'official_id', 'official_status', 'area_code', 'phone'])
            ->eachById(function (User $user) {
                JPushMessageJob::dispatch(
                    $user->getKey(),
                    Arr::get($this->jPushMessage, 'title', ''),
                    Arr::get($this->jPushMessage, 'content', ''),
                    Arr::get($this->jPushMessage, 'data', [])
                );

                if ($user->getAttribute('official_status') === UserOfficialStatusEnum::SUBSCRIBE) {
                    WechatTemplateMessageJob::dispatch($user->getAttribute('official_id'), 'GFJxUXdJs37HX2hYB_jdOeR2FQHj2RpkJo57q24Lkkc', [
                        'keyword1' => '歌手额度上限提醒',
                        'keyword2' => Arr::get($this->wechatMessage, 'title', ''),
                        'keyword3' => Arr::get($this->wechatMessage, 'content', ''),
                        'keyword4' => Arr::get($this->wechatMessage, 'limit', $this->defaultLimit),
                        'keyword5' => Arr::get($this->wechatMessage, 'limit', $this->defaultLimit),
                    ]);
                }
            });
    }
}