Ajustando performance query produtos
davinTI/app-dono-modulos/pipeline/head This commit looks good

This commit is contained in:
Sarah Magalhães
2026-06-05 10:01:36 -03:00
parent d8fe335282
commit dc1aa9417e
+214 -144
View File
@@ -2663,151 +2663,221 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
return {
sql: /*sql*/ `
WITH CTE_UltimaEntrada AS (
SELECT /*+ MATERIALIZE */
eit.codigo AS produto_codigo,
ent.loja AS loja_codigo,
ean2.quantidade AS quantidadecompra,
ent.dataentrada AS dataultimaentrada,
ROW_NUMBER() OVER (
PARTITION BY eit.codigo, ent.loja
ORDER BY ent.dataentrada DESC, ent.chave DESC
) AS rn
FROM verdemar.entradas ent
INNER JOIN verdemar.entradas_itens eit ON ent.chave = eit.chaveentrada
INNER JOIN verdemar.operacoes_entradas op ON ent.operacao = op.codigo
INNER JOIN verdemar.produtos_ean ean2 ON eit.embalagem = ean2.chave
WHERE ent.status = 'S'
AND op.atualizacusto = 'S'
AND op.tiponota NOT IN ('B', 'T', 'L')
AND ent.dataentrada <= TRUNC(SYSDATE)
AND eit.quantidade * ean2.quantidade > NVL(eit.quantidadedevolvida, 0)
AND eit.codigo = ${args.codproduto}
)
SELECT
l.codigo AS idempresa,
FNC_NOMEPESSOAS(l.codigo) AS nomeempresa,
cat.nome AS categoria,
ult_ent.dataultimaentrada AS dataultimaentrada,
(
SELECT MAX(pm.data)
FROM verdemar.produtos_movimento pm
WHERE pm.codigo = p.codigo
AND pm.loja = l.codigo
) AS dataultimavenda,
NULL AS precoatacado,
pp.precovenda AS precovarejo,
COALESCE(prom.precopromocao, 0) AS precopromoc,
pp.precovenda AS preconormal,
(
SELECT pf.precofidelidade
FROM verdemar.produtos_fidelidade pf
WHERE pf.codigo = p.codigo
AND TRUNC(SYSDATE) BETWEEN pf.datainicial AND pf.datafinal
AND (pf.codigo_tipo = 0 OR pf.codigo_tipo = 2)
AND pf.loja = l.codigo
AND ROWNUM = 1
) AS precomeuMambo,
0 AS vlrprecovenctoprox,
pp.custoliquido AS custoliquido,
pp.sugestao AS margem,
0 AS margematacado,
pp.lucro AS margemnormal,
(
SELECT api.margemprecopromocao_clubevm
FROM verdemar.produtos_fidelidade pf
INNER JOIN verdemar.autorizacao_promocao_itens api
ON api.codigo = pf.codigo
AND api.chave = pf.chaveorigem
WHERE pf.codigo = p.codigo
AND api.datafinal >= SYSDATE
AND api.datainicial <= SYSDATE
AND pf.loja = l.codigo
AND ROWNUM = 1
) AS margemmeuMambo,
subg.sugestao AS margemlucrodivisao,
est.quantidade AS estoqueDisponivel,
(
SELECT est2.quantidade
FROM verdemar.loja l2
INNER JOIN verdemar.produtos_estoque est2 ON est2.loja = l2.codigo
WHERE l2.lojanota = l.codigo
AND l2.statusloja = 3
AND est2.codigo = p.codigo
AND ROWNUM = 1
) AS estoquetroca,
FNC_QTD_EMTRANSITO(p.codigo, l.codigo) AS estoquetransito,
0 AS estoquefuturo,
0 AS estoquereservado,
0 AS reserva,
pew.estoque AS estoquedisponivelcd,
0 AS estoquefuturocd,
pvm.mediasempromocao AS mdv,
pvm.mediacompromocao AS mdvpromoc,
pvm.diasestoque AS ddv,
NULL AS ddvminimo,
NULL AS ddvmaximo,
NULL AS dtavalidade,
p.numerodiasvalidade AS validadedias,
NULL AS classeabastecimento,
p.tipoabastecimento AS formaabastecimento,
ean.embalagem AS descricaoembalagem,
ean.quantidade AS quantidadeembalagem,
ult_ent.quantidadecompra AS quantidadecompra,
0 AS qtdeatacado,
CASE
WHEN COALESCE(prom.precopromocao, 0) > 0 THEN 'PROMOCAO'
ELSE 'NORMAL'
END AS situacao,
CASE WHEN p.inativo = 'N' THEN 'A' ELSE 'I' END AS statusvenda,
NULL AS statuscompra,
p.paicomposto AS idbase,
NULL AS tipotroca,
p.codigo AS seqproduto,
p.nome AS Descricao
SELECT
/*+ MATERIALIZE */
eit.codigo AS produto_codigo,
ent.loja AS loja_codigo,
ean2.quantidade AS quantidadecompra,
ent.dataentrada AS dataultimaentrada,
ROW_NUMBER() OVER (
FROM verdemar.produtos p
INNER JOIN verdemar.produtos_loja pl
ON pl.codigo = p.codigo
INNER JOIN verdemar.loja l
ON l.codigo = pl.loja
INNER JOIN verdemar.produtos_precos pp
ON pp.codigo = p.codigo
AND pp.loja = l.codigo
LEFT JOIN verdemar.produtos_estoque est
ON est.codigo = p.codigo
AND est.loja = l.codigo
LEFT JOIN verdemar.produtos_venda_media pvm
ON pvm.codigo = p.codigo
AND pvm.loja = l.codigo
LEFT JOIN CTE_UltimaEntrada ult_ent
ON ult_ent.produto_codigo = p.codigo
AND ult_ent.loja_codigo = l.codigo
AND ult_ent.rn = 1
LEFT JOIN (
SELECT pr.codigo,
pr.loja,
pr.precopromocao
FROM verdemar.promocao pr
WHERE (pr.datafinal >= TRUNC(SYSDATE) OR pr.indeterminada = 'S')
) prom
ON prom.codigo = p.codigo
AND prom.loja = l.codigo
LEFT JOIN verdemar.produtos_ean ean
ON ean.codigo = p.codigo
AND ean.comprapadrao = 'S'
LEFT JOIN verdemar.categoria cat
ON cat.codigo = p.categoria
LEFT JOIN verdemar.subgrupo subg
ON subg.codigo = p.subgrupo
AND subg.setor = p.setor
AND subg.grupo = p.grupo
LEFT JOIN verdemar.produtos_estoque_wms pew
ON pew.produto = p.codigo
AND pew.cd = 892605
WHERE p.codigo = ${args.codproduto}
AND l.participageradorlojas = 'S'
AND p.inativo = 'N'
`
PARTITION BY eit.codigo,
ent.loja
ORDER BY
ent.dataentrada DESC,
ent.chave DESC
) AS rn
FROM
verdemar.entradas ent
INNER JOIN verdemar.entradas_itens eit ON
ent.chave = eit.chaveentrada
INNER JOIN verdemar.operacoes_entradas op ON
ent.operacao = op.codigo
INNER JOIN verdemar.produtos_ean ean2 ON
eit.embalagem = ean2.chave
WHERE
ent.status = 'S'
AND op.atualizacusto = 'S'
AND op.tiponota NOT IN ('B', 'T', 'L')
AND ent.dataentrada <= TRUNC(SYSDATE)
AND eit.quantidade * ean2.quantidade > NVL(eit.quantidadedevolvida,
0)
AND eit.codigo = ${args.codproduto}
AND ent.loja IN (${args.ctx_user_companies_for_module})
)
SELECT
l.codigo AS idempresa,
FNC_NOMEPESSOAS(l.codigo) AS nomeempresa,
cat.nome AS categoria,
ult_ent.dataultimaentrada AS dataultimaentrada,
(
SELECT
MAX(pm.data)
FROM
verdemar.produtos_movimento pm
WHERE
pm.codigo = p.codigo
AND pm.loja = l.codigo
AND pm.data >= TRUNC(SYSDATE) - 50
-- limita o scan
) AS dataultimavenda,
NULL AS precoatacado,
pp.precovenda AS precovarejo,
COALESCE(prom.precopromocao,
0) AS precopromoc,
pp.precovenda AS preconormal,
(
SELECT
pf.precofidelidade
FROM
verdemar.produtos_fidelidade pf
WHERE
pf.codigo = p.codigo
AND TRUNC(SYSDATE) BETWEEN pf.datainicial AND pf.datafinal
AND (pf.codigo_tipo = 0
OR pf.codigo_tipo = 2)
AND pf.loja = l.codigo
AND ROWNUM = 1
) AS precomeuMambo,
0 AS vlrprecovenctoprox,
pp.custoliquido AS custoliquido,
pp.sugestao AS margem,
0 AS margematacado,
pp.lucro AS margemnormal,
(
SELECT
api.margemprecopromocao_clubevm
FROM
verdemar.produtos_fidelidade pf
INNER JOIN verdemar.autorizacao_promocao_itens api
ON
api.codigo = pf.codigo
AND api.chave = pf.chaveorigem
WHERE
pf.codigo = p.codigo
AND api.datafinal >= SYSDATE
AND api.datainicial <= SYSDATE
AND pf.loja = l.codigo
AND ROWNUM = 1
) AS margemmeuMambo,
subg.sugestao AS margemlucrodivisao,
est.quantidade AS estoqueDisponivel,
(
SELECT
est2.quantidade
FROM
verdemar.produtos_estoque est2
INNER JOIN verdemar.loja l2 ON
l2.codigo = est2.loja
WHERE
est2.codigo = p.codigo
AND l2.lojanota = l.codigo
AND l2.statusloja = 3
AND ROWNUM = 1
) AS estoquetroca,
FNC_QTD_EMTRANSITO(p.codigo,
l.codigo) AS estoquetransito,
0 AS estoquefuturo,
0 AS estoquereservado,
0 AS reserva,
pew.estoque AS estoquedisponivelcd,
0 AS estoquefuturocd,
pvm.mediasempromocao AS mdv,
pvm.mediacompromocao AS mdvpromoc,
pvm.diasestoque AS ddv,
NULL AS ddvminimo,
NULL AS ddvmaximo,
NULL AS dtavalidade,
p.numerodiasvalidade AS validadedias,
NULL AS classeabastecimento,
p.tipoabastecimento AS formaabastecimento,
ean.embalagem AS descricaoembalagem,
ean.quantidade AS quantidadeembalagem,
ult_ent.quantidadecompra AS quantidadecompra,
0 AS qtdeatacado,
CASE
WHEN COALESCE(prom.precopromocao,
0) > 0 THEN 'PROMOCAO'
ELSE 'NORMAL'
END AS situacao,
CASE
WHEN p.inativo = 'N' THEN 'A'
ELSE 'I'
END AS statusvenda,
NULL AS statuscompra,
p.paicomposto AS idbase,
NULL AS tipotroca,
p.codigo AS seqproduto,
p.nome AS Descricao
FROM
verdemar.produtos p
INNER JOIN verdemar.produtos_loja pl
ON
pl.codigo = p.codigo
INNER JOIN verdemar.loja l
ON
l.codigo = pl.loja
INNER JOIN verdemar.produtos_precos pp
ON
pp.codigo = p.codigo
AND pp.loja = l.codigo
LEFT JOIN verdemar.produtos_estoque est
ON
est.codigo = p.codigo
AND est.loja = l.codigo
LEFT JOIN verdemar.produtos_venda_media pvm
ON
pvm.codigo = p.codigo
AND pvm.loja = l.codigo
LEFT JOIN CTE_UltimaEntrada ult_ent
ON
ult_ent.produto_codigo = p.codigo
AND ult_ent.loja_codigo = l.codigo
AND ult_ent.rn = 1
LEFT JOIN (
SELECT
pr.codigo,
pr.loja,
pr.precopromocao
FROM
verdemar.promocao pr
WHERE
(pr.datafinal >= TRUNC(SYSDATE)
OR pr.indeterminada = 'S')
) prom
ON
prom.codigo = p.codigo
AND prom.loja = l.codigo
LEFT JOIN verdemar.produtos_ean ean
ON
ean.codigo = p.codigo
AND ean.comprapadrao = 'S'
LEFT JOIN verdemar.categoria cat
ON
cat.codigo = p.categoria
LEFT JOIN verdemar.subgrupo subg
ON
subg.codigo = p.subgrupo
AND subg.setor = p.setor
AND subg.grupo = p.grupo
LEFT JOIN verdemar.produtos_estoque_wms pew
ON
pew.produto = p.codigo
AND pew.cd = 892605
WHERE
p.codigo = ${args.codproduto}
AND l.participageradorlojas = 'S'
AND p.inativo = 'N'
AND l.codigo IN (${args.ctx_user_companies_for_module})`
}
},
detalhe_preco: (args) => {