BrokerPushMatchRecordJob.php 2.31 KB
<?php

namespace App\Jobs;

use App\Enums\BrokerPushMatchRecordStatusEnum;
use App\Helpers\IMHelper;
use App\Models\BrokerPushMatchRecord;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

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

    public BrokerPushMatchRecord $record;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(BrokerPushMatchRecord $record)
    {
        $this->record = $record;
        $this->queue  = 'im';
    }

    /**
     * Execute the job.
     *
     * @return void
     * @throws \Exception
     */
    public function handle(): void
    {
        $result = IMHelper::sendSingleChatMessage(IMHelper::SYSTEM_USER, $this->record->getAttribute('broker_id'), [
            'MsgBody'         => [
                IMHelper::createCustomMessage([
                    "Data" => [
                        'businessID'         => 'system_notice',
                        'notification_id'    => $this->record->getKey(),
                        'notification_class' => 'broker_match_record',
                        'type'               => 1,
                        'title'              => $this->record->getAttribute('title'),
                        'cover'              => '',
                        'content'            => $this->record->getAttribute('content'),
                        'link_type'          => 'none',
                        'link_id'            => 0,
                        'link_url'           => '',
                    ],
                    'Desc' => $this->record->getAttribute('title'),
                ], ['is_alert' => 0]),
            ],
            "CloudCustomData" => [],
            "OfflinePushInfo" => IMHelper::createOfflineMessage('系统消息', $this->record->getAttribute('title'))
        ]);

        if ($result->json('ActionStatus') === 'FAIL') {
            $this->record->update(['status' => BrokerPushMatchRecordStatusEnum::FAIL]);
        } else {
            $this->record->update(['status' => BrokerPushMatchRecordStatusEnum::SUCCESS, 'message_id' => $result->json('MsgKey', '')]);
        }
    }
}