Laravel.io
<?php

namespace App\Jobs\Order;

use App\Http\Controllers\OrderController;
use App\Models\Mediator;
use App\Presets\OrderPreset;
use App\Services\Bitrix24\Bitrix24Service;
use App\Services\IfNeededToUpdateOrderCheckService;
use App\Services\MoiSklad\MoiSkladService;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;

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

    public $tries = 3;

    /** @var OrderPreset */
    private $orderPreset;

    /** @var int */
    private $serviceNumber;

    /** @var MoiSkladService */
    private $moiskladService;

    /** @var Bitrix24Service */
    private $bx24Service;

    /** @var bool */
    private $isNeedToCreate = false;

    /** @var bool */
    private $isNeedToUpdate = true;

    /** @var bool */
    private $orderWasCreated = false;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(OrderPreset $orderPreset, int $serviceNumber)
    {
        $this->onQueue('creating_and_updating');
        $this->orderPreset = $orderPreset;
        $this->serviceNumber = $serviceNumber;
    }

    /**
     * Execute the job.
     *
     * @return void
     * @throws \Exception
     */
    public function handle()
    {
        $this->initializeServices();

        Log::info('UpdateOrderJob@handle [$this->orderPreset]: ', $this->orderPreset->toArray());

        // Получаем сделку или заказ и системы БТР или МС
        if ($this->serviceNumber === Mediator::BITRIX_24) {

            $dealInfoRequest = $this->bx24Service->getFormattedDealInfo($this->orderPreset->getBitrixId());
            if ($dealInfoRequest['status'] === false) {
                return;
            }

            /** @var OrderPreset $orderPreset */
            $orderPreset = $dealInfoRequest['data'];

        } elseif ($this->serviceNumber === Mediator::MOI_SKLAD) {

            $dealInfoRequest = $this->moiskladService->getFormattedDealInfo(
                'https://online.moysklad.ru/api/remap/1.2/entity/customerorder/' . $this->orderPreset->getMoiskladId()
            );

            if ($dealInfoRequest['status'] === false) {
                return;
            }

            /** @var OrderPreset $orderPreset */
            $orderPreset = $dealInfoRequest['data'];
        }  else {
            Log::error('UpdateOrderJob@handle | Such Service ' . "[$this->serviceNumber]" . ' is not existed!');
            return;
        }

        // Получаем сделку\заказ из нашйе базы
        $getOrderRequest = (new OrderController())->get($orderPreset, true);
        if ($getOrderRequest['status'] === false) {
            $this->isNeedToCreate = true;
            $this->isNeedToUpdate = false;
        }

        if ($this->isNeedToUpdate) {

            /** @var OrderPreset $oldOrderPreset */
            $oldOrderPreset = $getOrderRequest['data']['old_order_preset'];

            /** @var OrderPreset $orderPreset */
            $orderPreset = $getOrderRequest['data']['order_preset'];

            Log::info('MediatorService@handleUpdatedOrderInService [$oldOrderPreset]: ', $oldOrderPreset->toArray());

            $isNeededToUpdate = (new IfNeededToUpdateOrderCheckService($orderPreset, $oldOrderPreset))->check();

            Log::info('MediatorService@handleUpdatedOrderInService [BitrixId] - ' . "[{$orderPreset->getBitrixId()}]" . ' | [$isNeededToUpdate]: ' . "[$isNeededToUpdate]");

            if ( ! $isNeededToUpdate) {
                return; // Не нужно и не создавать и не обновлять.
            }
        }

        if ($this->serviceNumber === Mediator::BITRIX_24) {

            if ($this->isNeedToCreate) {

                $createOrderInMoiSkladRequest = $this->moiskladService->createOrder($orderPreset);
                if ($createOrderInMoiSkladRequest['status'] === false) {
                    return;
                }

                $orderPreset = $createOrderInMoiSkladRequest['data'];

                $this->orderWasCreated = true;
            } else {

                $updateOrderInMoiSkladRequest = $this->moiskladService->updateOrder($orderPreset);
                if ($updateOrderInMoiSkladRequest['status'] === false) {
                    return;
                }

                $orderPreset = $updateOrderInMoiSkladRequest['data'];
            }

        } elseif ($this->serviceNumber === Mediator::MOI_SKLAD) {

            if ($this->isNeedToCreate) {

                $createOrderInBitrix24Request = $this->bx24Service->createOrder($orderPreset);
                if ($createOrderInBitrix24Request['status'] === false) {
                    return;
                }

                $orderPreset = $createOrderInBitrix24Request['data'];

                $this->orderWasCreated = true;
            } else {

                $updateOrderInBitrix24Request = $this->bx24Service->updateOrder($orderPreset);
                if ($updateOrderInBitrix24Request['status'] === false) {
                    return;
                }

                $orderPreset = $updateOrderInBitrix24Request['data'];
            }

        } else {
            Log::error('UpdateOrderJob@handle | Such Service ' . "[$this->serviceNumber]" . ' is not existed!');
            return;
        }

        if ($this->orderWasCreated) {
            (new OrderController())->create($orderPreset);
        } else {
            (new OrderController())->update($orderPreset);
        }
    }

    private function initializeServices()
    {
        $moiskladService = new MoiSkladService();
        $this->moiskladService = $moiskladService;

        $bx24Service = new Bitrix24Service();
        $this->bx24Service = $bx24Service;
    }
}

Please note that all pasted data is publicly available.