Eu tenho um componente chamado Bling, e ele gastava 3 minutos para comparar 3.000 produtos do MySQL com o Bling.
Eu usava o MySQL para gravar as informações obtidas do Bling. Ao invés de usar o MySQL, decidi usar um array, mas isso em nada ajudou a melhorar o tempo de resposta.
Apresentei o meu código ao Copilot, ele mudou muita coisa, principalmente na hora de indexar um array e o tempo de resposta ficou bem melhor:
arquivo app > Livewire > Bling.php
<?php
namespaceApp\Livewire;useApp\Models\tbprod;useLivewire\Attributes\Layout;useLivewire\Component;useLivewire\WithFileUploads;#[Layout('components.layouts.app',['titulo'=>'Diferença na Bling'])]classBlingextendsComponent{useWithFileUploads;public $contaProdBling,$contaProduto,$dif=[],$files=[];public $modal=true,$tbBling=[];function updatedFiles(){
$this->modal=false;foreach($this->files as $arquivo){
$dados=explode(PHP_EOL,$arquivo->get());foreach($dados as $linha){if($linha<>""){
$campos=explode(';',$linha);if(aspas($campos[1])!=="Código"){
$codprod=intval(trim(aspas($campos[1])));
$un=aspas($campos[3]);
$prod=aspas($campos[2]);
$custo=deca(aspas($campos[11]));
$codbar=trim(aspas($campos[19]));
$cf=deca(aspas($campos[4]));
$venda=deca(aspas($campos[6]));
$this->tbBling[]=['codprod'=>$codprod,'un'=>$un,'prod'=>$prod,'custo'=>$custo,'codbar'=>$codbar,'cf'=>$cf,'venda'=>$venda];}}}}// Criação do índice associativo por codprod
$blingIndex =[];foreach($this->tbBling as $item){
$blingIndex[$item['codprod']]= $item;}// Carrega os produtos do banco (opcionalmente como array)
$produto = tbprod::where('loc','<>','a24')->get();
$this->contaProduto = count($produto);
$this->contaProdBling = count($this->tbBling);// Verifica diferença de quantidadeif($this->contaProdBling > $this->contaProduto){
$prod = $produto->pluck('codprod');
$pBling = collect(array_column($this->tbBling,'codprod'));
$difs = $pBling->diff($prod);foreach($difs as $d){
echo "problema no codprod $d na Bling <br>";}
dd('parada total');// essa rotina não funciona no Laravel, precisa melhorar}// Compara os produtosforeach($produto as $key => $pr){
$codprod = $pr->codprod;if(!isset($blingIndex[$codprod])){
$this->dif[$key][]=['Codigo'=> $codprod];
$this->dif[$key][]=['Incluir'=> $codprod,'Incluir2'=>'Incluir'];}else{
$a = $blingIndex[$codprod];
$un =($pr->un == $a['un'])?1:0;
$prod =($pr->prod == $a['prod'])?1:0;
$custo =($pr->custo == $a['custo'])?1:0;
$codbar =($pr->codbar == $a['codbar'])?1:0;
$cf =($pr->cf == $a['cf'])?1:0;
$venda =($pr->venda == $a['venda'])?1:0;if($un.$prod.$custo.$codbar.$cf.$venda !=='111111'){
$this->dif[$key][]=['Codigo'=> $pr->codprod,'Codigo2'=> $a['codprod']];if($pr->prod !== $a['prod']){
$this->dif[$key][]=['Descricao'=> $pr->prod,'Descricao2'=> $a['prod']];}if($pr->custo !== $a['custo']){if($pr->custo || $a['custo']!=0){
$this->dif[$key][]=['Custo'=> $pr->custo,'Custo2'=> $a['custo']];}}if($pr->codbar != $a['codbar']){
$this->dif[$key][]=['Codigo de Barra'=> $pr->codbar,'Codigo de Barra2'=> $a['codbar']];}if($pr->cf !== $a['cf']){if($pr->cf || $a['cf']){
$this->dif[$key][]=['NCM'=> $pr->cf,'NCM2'=> $a['cf']];}}if($pr->venda !== $a['venda']){
$this->dif[$key][]=['Venda'=> $pr->venda,'Venda2'=> $a['venda']];}if($pr->un !== $a['un']){
$this->dif[$key][]=['Un'=> $pr->un,'Un2'=> $a['un']];}}}}}}
arquivo resources > views > livewire > bling.blade.php
<div>@if($modal)<div class="h-5"></div><flux:input type="file" wire:model="files" multiple
label="Selecione os arquivos de produtos da Bling"/>@else<script>function copiar(elemento){
conteudo=elemento.innerText || elemento.textContent
navigator.clipboard.writeText(conteudo)
elemento.parentElement.style.display="none"}</script><div class="font-semibold flex"><div class=w-[100px]>Código</div><div class=w-[100px]>Campo</div><div class=w-[100px]>MySQL</div><div class=w-[100px]>Bling</div></div><div class=flex><div class=w-[100px]></div><div class=w-[100px]>Produtos</div><div class=w-[100px]>{{ $contaProduto }}</div><div class=w-[100px]>{{ $contaProdBling }}</div></div>@foreach($dif as $d)@foreach($d as $v)@if(array_keys($v)[0]=="Codigo")@php $codigo=array_values($v)[0];@endphp@else@if(array_keys($v)[0]!=="Descricao")<div class="flex"><div class=w-[100px]>{{$codigo}}</div><div class=w-[100px]>{{array_keys($v)[0]}}</div><div class=w-[100px] onclick=copiar(this)><pre class="font-sans"><?=array_values($v)[0]?></pre></div><divclass=w-[100px]><preclass="font-sans"><?=array_values($v)[1]?></pre></div></div>
@else
<divclass=flex><divclass=w-[100px]>{{$codigo}}</div><divclass=w-[100px]>{{array_keys($v)[0]}}</div><divclass=w-[100px]onclick=copiar(this)><preclass="font-sans"><?=array_values($v)[0]?></pre></div></div><divclass=flex><divclass=w-[200px]></div><divclass=w-[100px]onclick=copiar(this)><preclass="font-sans"><?=array_values($v)[1]?></pre></div></div>
@endif
@endif
@endforeach
@endforeach
@endif
</div>
Pergunta
Frank K Hosaka
Eu tenho um componente chamado Bling, e ele gastava 3 minutos para comparar 3.000 produtos do MySQL com o Bling.
Eu usava o MySQL para gravar as informações obtidas do Bling. Ao invés de usar o MySQL, decidi usar um array, mas isso em nada ajudou a melhorar o tempo de resposta.
Apresentei o meu código ao Copilot, ele mudou muita coisa, principalmente na hora de indexar um array e o tempo de resposta ficou bem melhor:
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.