403Webshell
Server IP : 54.94.228.101  /  Your IP : 172.28.1.13
Web Server : Apache
System : Linux ip-172-28-29-189 6.5.0-1014-aws #14~22.04.1-Ubuntu SMP Thu Feb 15 15:27:06 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.2.34-43+ubuntu22.04.1+deb.sury.org+1
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/html/vinumday2_0/app/Console/Commands/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/vinumday2_0/app/Console/Commands/SincronizaPedidosMailchimp.php
<?php

namespace App\Console\Commands;

use DB;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
use App\Modules\PedidoVendaIntegracao\Models\PedidoVendaIntegracao;
use App\Services\MailchimpService;

class SincronizaPedidosMailchimp extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'sincroniza_pedidos_mailchimp {integracao_mailchimp?} {pedido_venda_id?}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Sincronização Automática Pedidos de Venda x Mailchimp';

    protected $options;

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $this->options = $this->arguments();

        $message = "Registros sincronizados com sucesso!";
        $integracao_mailchimp = (!empty($this->options['integracao_mailchimp']) ? $this->options['integracao_mailchimp'] : 0);
        if($integracao_mailchimp == 0){
            $query = PedidoVendaIntegracao::whereRaw('integracao_mailchimp IS NULL AND YEAR(data_cadastro) >= 2022 AND envios = 0');
        }else{
            $query = PedidoVendaIntegracao::whereRaw('integracao_mailchimp = 2 AND YEAR(data_cadastro) >= 2022 AND envios = 1');
        }
        if(!empty($this->options['pedido_venda_id'])){
            $query->where('id_pedido_venda', $this->options['pedido_venda_id']);
        }

        $limit = 50;
        $dataAtual  = date('d/m/Y');
        $horaAtual  = strtotime(date('H:i'));
        $horaInicio = strtotime("8:00");
        $horaFinal  = strtotime("20:00");

        if($horaAtual < $horaInicio || $horaAtual > $horaFinal){
            $limit = 75;
        }

        $listaPedidos = $query->orderBy('data_cadastro', 'ASC')->limit($limit)->get(); //DEFAULT = 50
        $values       = [];

        //UPDATE STATUS FILA INTEGRAÇÃO
        if(count($listaPedidos) > 0 && $integracao_mailchimp == 0){

            $IDsPedidos = array_map(function($el){
                return (int) $el['id'];
            }, $listaPedidos->toArray());

            $data_atualizacao = date('Y-m-d H:i:s');

            $IDsPedidos = implode(",", $IDsPedidos);
            $sql = "UPDATE pedido_venda_integracao SET integracao_mailchimp = 0, data_mailchimp = '{$data_atualizacao}' WHERE id IN ({$IDsPedidos})";
            DB::update($sql);

        }

        $this->info(date('d/m/Y H:i:s') . " - START");

        foreach ($listaPedidos as $integracao) {

            $cadastroCliente  = TRUE;
            $cadastroProdutos = TRUE;

            if(!isset($integracao->pedido)){
                $values[$integracao->id] = ['integracao_mailchimp' => 3, 'data_mailchimp' => date('Y-m-d H:i:s'), 'log_mailchimp' => 'Pedido Inexistente!', 'envios' => 1];
                continue;
            }

            //Verifica Cliente
            $cadastro    = $integracao->pedido->cliente;
            $posCadastro = strpos($integracao->log_mailchimp, 'customer.email_address');
            if($integracao->integracao_mailchimp == 2 && $posCadastro !== FALSE){
                $resultadoCliente = $this->cadastroCliente($cadastro);
                $cadastroCliente  = $resultadoCliente->status;
                if(!$cadastroCliente){
                    $values[$integracao->id] = ['integracao_mailchimp' => 3, 'data_mailchimp' => date('Y-m-d H:i:s'), 'log_mailchimp' => $resultadoCliente->retornoAPI, 'envios' => ($integracao->envios + 1)];
                    continue;
                }
            }elseif($cadastro->integracao_mailchimp != 1){
                $resultadoCliente = $this->cadastroCliente($cadastro);
                $cadastroCliente  = $resultadoCliente->status;
            }

            //Verifica Produtos
            $produtos   = $integracao->pedido->produtos;
            $posProduto = strpos($integracao->log_mailchimp, 'A product with the provided ID does not exist');

            if($integracao->integracao_mailchimp == 2 && $posProduto !== FALSE){
                $resultadoProdutos = $this->cadastroProdutos($produtos);
                $cadastroProdutos  = $resultadoProdutos->status;
                if(!$cadastroProdutos){
                    $values[$integracao->id] = ['integracao_mailchimp' => 3, 'data_mailchimp' => date('Y-m-d H:i:s'), 'log_mailchimp' => $resultadoProdutos->retornoAPI, 'envios' => ($integracao->envios + 1)];
                    continue;
                }
            }else{
                $resultadoProdutos = $this->cadastroProdutos($produtos);
                $cadastroProdutos  = $resultadoProdutos->status;
            }

            if(!$cadastroCliente){
                $values[$integracao->id] = ['integracao_mailchimp' => 2, 'data_mailchimp' => date('Y-m-d H:i:s'), 'log_mailchimp' => $resultadoCliente->retornoAPI, 'envios' => ($integracao->envios + 1)];
                continue;
            }elseif(!$cadastroProdutos){
                $values[$integracao->id] = ['integracao_mailchimp' => 2, 'data_mailchimp' => date('Y-m-d H:i:s'), 'log_mailchimp' => $resultadoProdutos->retornoAPI, 'envios' => ($integracao->envios + 1)];
                continue;
            }

            $resultado = MailchimpService::cadastroPedido($integracao->pedido);

            //Salva Integração
            if($resultado->status){
                $integracao_mailchimp = 1;
                $log_mailchimp        = '';
            }else{
                $integracao_mailchimp = 2;
                $log_mailchimp        = json_encode($resultado->retornoAPI);
            }

            $sql = "UPDATE pedido_venda_integracao SET ids = '{$resultado->ids}', campaigns = '{$resultado->campaigns}' WHERE id = {$integracao->id}";
            DB::update($sql);

            $values[$integracao->id] = ['integracao_mailchimp' => $integracao_mailchimp, 'data_mailchimp' => date('Y-m-d H:i:s'), 'log_mailchimp' => $log_mailchimp, 'envios' => ($integracao->envios + 1)];

        }

        if(count($values) > 0){
            $this->updateIntegracoes($values);
        }

        $this->info(date('d/m/Y H:i:s') . " - DONE");

    }

    public function cadastroCliente($cadastro){

        $cadastroCliente = FALSE;
        $retornoAPI      = MailchimpService::cadastroCliente($cadastro);
        $resultado       = json_decode($retornoAPI);

        if(isset($resultado->id)){
            $cadastro->integracao_mailchimp = 1; //integrado
            $cadastro->log_mailchimp = '';
            $cadastro->save();
            $cadastroCliente = TRUE;
        }else{
            Log::info('cadastroCliente: ' . $retornoAPI);
            $posCadastro = strpos($retornoAPI, 'already exists');
            if($posCadastro !== FALSE){
                $cadastro->integracao_mailchimp = 1; //integrado
                $cadastro->log_mailchimp = '';
                $cadastroCliente = TRUE;
            }else{
                $cadastro->integracao_mailchimp = 2; //erro integração
                $cadastro->log_mailchimp = $retornoAPI;
            }
            $cadastro->save();
        }

        return (object) ['status' => $cadastroCliente, 'retornoAPI' => $retornoAPI];

    }

    public function cadastroProdutos($produtos){

        $cadastroProdutos = TRUE;
        $retornoAPI       = '';

        foreach ($produtos as $itemProduto) {

            $produto = $itemProduto->produto;

            if($produto->integracao_mailchimp != 1){
                $retornoAPI = MailchimpService::cadastroProduto($produto);
                $resultado = json_decode($retornoAPI);
                if(isset($resultado->id)){
                    $produto->integracao_mailchimp = 1; //integrado
                    $produto->log_mailchimp = '';
                    $produto->save();
                }else{

                    Log::info('cadastroProduto: ' . $retornoAPI);
                    $posProduto = strpos($retornoAPI, 'already exists');
                    if($posProduto !== FALSE){
                        $produto->integracao_mailchimp = 1; //integrado
                        $produto->log_mailchimp = '';
                        $produto->save();
                    }else{
                        $produto->integracao_mailchimp = 2; //erro integração
                        $produto->log_mailchimp        = $retornoAPI;
                        $cadastroProdutos = FALSE;
                        $produto->save();
                        break;
                    }

                }
            }

        }

        return (object) ['status' => $cadastroProdutos, 'retornoAPI' => $retornoAPI];
        
    }

    public function updateIntegracoes($values){

        $table     = PedidoVendaIntegracao::getModel()->getTable();
        $cases     = [];
        $ids       = [];
        $paramsInt = [];
        $paramsDat = [];
        $paramsLog = [];
        $paramsSnd = [];

        foreach ($values as $id => $value) {
            $id       = (int) $id;
            $cases[]  = "WHEN {$id} then ?";
            $paramsInt[] = $value['integracao_mailchimp'];
            $paramsDat[] = $value['data_mailchimp'];
            $paramsLog[] = $value['log_mailchimp'];
            $paramsSnd[] = $value['envios'];
            $ids[]    = $id;
        }

        $ids   = implode(',', $ids);
        $cases = implode(' ', $cases);

        $string = "UPDATE `{$table}` SET `integracao_mailchimp` = CASE `id` {$cases} END WHERE `id` in ({$ids})";
        DB::update($string, $paramsInt);

        $string = "UPDATE `{$table}` SET `data_mailchimp` = CASE `id` {$cases} END WHERE `id` in ({$ids})";
        DB::update($string, $paramsDat);

        $string = "UPDATE `{$table}` SET `log_mailchimp` = CASE `id` {$cases} END WHERE `id` in ({$ids})";
        DB::update($string, $paramsLog);

        $string = "UPDATE `{$table}` SET `envios` = CASE `id` {$cases} END WHERE `id` in ({$ids})";
        DB::update($string, $paramsSnd);

        return true;

    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit