| Server IP : 54.233.248.239 / 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 : |
<?php
namespace App\Console\Commands;
use Symfony\Component\Console\Output\ConsoleOutput;
use Symfony\Component\Console\Helper\ProgressBar;
use Intervention\Image\Exception\NotReadableException;
use Illuminate\Console\Command;
use App\Modules\Cadastro\Models\Cadastro;
use App\Modules\Produto\Models\Produto;
use App\Modules\Oferta\Models\Oferta;
use App\Modules\PedidoVenda\Models\PedidoVenda;
use App\Modules\CadastroConsumo\Models\CadastroConsumo;
use App\Modules\CadastroConsumoPais\Models\CadastroConsumoPais;
use App\Services\GeralService;
use App\Services\ConsumoService;
use Illuminate\Support\Facades\Log;
use Image;
use DB;
class AtualizaConsumoCliente extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'atualiza_consumo_cliente';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Atualiza Consumo Clientes';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
$this->output = new ConsoleOutput;
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->info(date('d/m/Y H:i:s') . " - START");
$clientes = ConsumoService::buscarConsumoCliente();
$total = count($clientes);
$progressBar = new ProgressBar($this->output, count($clientes));
$distanciaPaises = ConsumoService::buscarDistanciasPaises();
if($total > 0){
$consumoTipos = ConsumoService::buscarConsumoTipo(FALSE, $clientes[($total-1)]->id_cliente);
$consumoPaises = ConsumoService::buscarConsumoPais(FALSE, $clientes[($total-1)]->id_cliente);
}else{
$consumoTipos = ConsumoService::buscarConsumoTipo();
$consumoPaises = ConsumoService::buscarConsumoPais();
}
$imagens_primeiro_vinho = CadastroConsumo::selectRaw("DISTINCT thumbnail_primeiro_vinho 'thumb'")->whereRaw('thumbnail_primeiro_vinho IS NOT NULL')->get();
$thumbs = [];
foreach ($imagens_primeiro_vinho as $primeiro_vinho) {
$thumbs[$primeiro_vinho->thumb] = $primeiro_vinho->thumb;
}
foreach ($clientes as $cliente){
$this->info(date('d/m/Y H:i:s') . " - START CLIENT: {$cliente->id_cliente}");
//Cadastra o Consumo se não existir
$created_at = date('Y-m-d H:i:s');
$qtde_vinhos = !empty($cliente->qtde_vinhos) ? $cliente->qtde_vinhos : 0;
try {
DB::beginTransaction();
$sql = "INSERT INTO cadastro_consumo (cadastro_id, data_cadastro, qtde_vinhos, created_at)
SELECT cadastro.id, u.created_at, {$qtde_vinhos}, '{$created_at}' FROM cadastro, sis_users u WHERE cadastro.user_id = u.id AND cadastro.id = {$cliente->id_cliente} AND NOT EXISTS (SELECT 1 FROM cadastro_consumo cs WHERE cs.cadastro_id = cadastro.id);";
DB::insert($sql);
$Consumo = CadastroConsumo::where('cadastro_id', $cliente->id_cliente)->first();
if(empty($Consumo->produto_id_primeiro_vinho)){
$thumbnail = FALSE;
$url_produto = trim($cliente->produto->thumbnail_principal);
if(empty($url_produto)){
$url_produto = trim($cliente->oferta->thumbnail_principal);
}
if(!empty($url_produto)){
$thumbnail = explode("/", $url_produto);
$thumbnail = end($thumbnail);
$thumbnail = str_replace([" ", "%20"], "_", $thumbnail);
$thumbnail = GeralService::cleanString($thumbnail);
$url_produto = str_replace(" ", "%20", $url_produto);
try {
if(!isset($thumb[$thumbnail])){
if(!file_exists(public_path("/uploads/produto/birth/{$thumbnail}"))){
$img = Image::make($url_produto)->save("public/uploads/produto/birth/{$thumbnail}");
}
$thumb[$thumbnail] = $thumbnail;
}
} catch (NotReadableException $e) {
Log::info("NotReadableException Produto {$cliente->id_produto} to: " . $url_produto);
$thumbnail = FALSE;
}
if(!$thumbnail){
$url_produto = trim($cliente->oferta->thumbnail_principal);
if(!empty($url_produto)){
$thumbnail = explode("/", $url_produto);
$thumbnail = end($thumbnail);
$thumbnail = str_replace([" ", "%20"], "_", $thumbnail);
$thumbnail = GeralService::cleanString($thumbnail);
$url_produto = str_replace(" ", "%20", $url_produto);
try {
if(!isset($thumb[$thumbnail])){
if(!file_exists(public_path("/uploads/produto/birth/{$thumbnail}"))){
$img = Image::make($url_produto)->save("public/uploads/produto/birth/{$thumbnail}");
}
$thumb[$thumbnail] = $thumbnail;
}
} catch (NotReadableException $e) {
Log::info("NotReadableException Oferta {$cliente->id_oferta} to: " . $url_produto);
$thumbnail = FALSE;
}
}
}
}
$thumbnail = (!$thumbnail ? 'vinho-pause.png' : $thumbnail);
$sql = "UPDATE cadastro_consumo SET produto_id_primeiro_vinho = {$cliente->id_produto}, oferta_id_primeiro_vinho = {$cliente->id_oferta}, thumbnail_primeiro_vinho = '{$thumbnail}' WHERE cadastro_id = {$cliente->id_cliente}";
DB::update($sql);
}
//Atualiza Valor Economizado na compra dos Vinhos
$sql = "UPDATE cadastro_consumo SET valor_economizado = {$cliente->valor_economizado}, qtde_vinhos = {$qtde_vinhos} WHERE cadastro_id = {$cliente->id_cliente}";
DB::update($sql);
//Cadastra/Atualiza Consumo de Vinhos By Tipo
if(isset($consumoTipos[$cliente->id_cliente])){
ConsumoService::calcularConsumoTipo($cliente->id_cliente, $consumoTipos[$cliente->id_cliente]);
}
//Cadastra/Atualiza Consumo de Vinhos By País
if(isset($consumoPaises[$cliente->id_cliente])){
ConsumoService::calcularConsumoPais($cliente->id_cliente, $consumoPaises[$cliente->id_cliente]);
}
//Calcula Percentual Consumo País
ConsumoService::calcularPercentualPais($cliente->id_cliente);
ConsumoService::calcularKmPercorrido($Consumo, $distanciaPaises);
DB::commit();
} catch (Exception $e) {
Log::info('Exception: ' . json_encode($e->getMessage()));
DB::rollBack();
dd($cliente);
}
$progressBar->advance();
}
$progressBar->finish();
$this->info("\n");
$this->info(date('d/m/Y H:i:s') . " - START DATA PEDIDOS X CLIENTES IMPORTADOS");
$pedidos = PedidoVenda::selectRaw('pedido_venda.data_fechamento, pedido_venda.id_cliente')
->join('cadastro_consumo', 'cadastro_consumo.cadastro_id', '=', 'pedido_venda.id_cliente')
->whereRaw("cadastro_consumo.data_cadastro = '2018-07-08' AND pedido_venda.data_fechamento < '2018-07-08'")
->groupBy('pedido_venda.id_cliente')
->get();
$total = count($pedidos);
if($total > 0){
$progressBar = new ProgressBar($this->output, count($pedidos));
foreach ($pedidos as $pedido) {
$data_cadastro = date('Y-m-d', strtotime($pedido->data_fechamento));
$sql = "UPDATE cadastro_consumo SET data_cadastro = '{$data_cadastro}' WHERE cadastro_id = {$pedido->id_cliente}";
DB::update($sql);
$progressBar->advance();
}
$progressBar->finish();
}
$this->info("\n");
$this->info(date('d/m/Y H:i:s') . " - DONE");
}
}