Compare commits

..

1 Commits

Author SHA1 Message Date
e2e5bf5b3f refactor: desativa conexao com postgres
Comenta integracao com WMS/leadtime e remove DataSource postgres do bootstrap e repositories.
2026-01-28 09:32:03 -03:00
4 changed files with 45 additions and 175 deletions

View File

@@ -2,7 +2,6 @@ import { Module, MiddlewareConsumer, NestModule } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config'; import { ConfigModule, ConfigService } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { createOracleConfig } from './core/configs/typeorm.oracle.config'; import { createOracleConfig } from './core/configs/typeorm.oracle.config';
import { createPostgresConfig } from './core/configs/typeorm.postgres.config';
import { LogisticModule } from './logistic/logistic.module'; import { LogisticModule } from './logistic/logistic.module';
import { AuthModule } from './auth/auth/auth.module'; import { AuthModule } from './auth/auth/auth.module';
import { DataConsultModule } from './data-consult/data-consult.module'; import { DataConsultModule } from './data-consult/data-consult.module';
@@ -27,11 +26,12 @@ import { PartnersModule } from './partners/partners.module';
inject: [ConfigService], inject: [ConfigService],
useFactory: createOracleConfig, useFactory: createOracleConfig,
}), }),
TypeOrmModule.forRootAsync({ // Postgres desativado: conexao removida e trechos de uso comentados no codigo.
name: 'postgres', // TypeOrmModule.forRootAsync({
inject: [ConfigService], // name: 'postgres',
useFactory: createPostgresConfig, // inject: [ConfigService],
}), // useFactory: createPostgresConfig,
// }),
ThrottlerModule.forRootAsync({ ThrottlerModule.forRootAsync({
imports: [ConfigModule], imports: [ConfigModule],
inject: [ConfigService], inject: [ConfigService],

View File

@@ -6,11 +6,11 @@ export const databaseConfig = registerAs('database', () => ({
username: process.env.ORACLE_USER, username: process.env.ORACLE_USER,
password: process.env.ORACLE_PASSWORD, password: process.env.ORACLE_PASSWORD,
}, },
postgres: { // postgres: {
host: process.env.POSTGRES_HOST, // host: process.env.POSTGRES_HOST,
port: parseInt(process.env.POSTGRES_PORT || '5432', 10), // port: parseInt(process.env.POSTGRES_PORT || '5432', 10),
username: process.env.POSTGRES_USER, // username: process.env.POSTGRES_USER,
password: process.env.POSTGRES_PASSWORD, // password: process.env.POSTGRES_PASSWORD,
database: process.env.POSTGRES_DB, // database: process.env.POSTGRES_DB,
}, // },
})); }));

View File

@@ -1,6 +1,5 @@
import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { createOracleConfig } from '../core/configs/typeorm.oracle.config'; import { createOracleConfig } from '../core/configs/typeorm.oracle.config';
import { createPostgresConfig } from '../core/configs/typeorm.postgres.config';
import { CarOutDelivery } from '../core/models/car-out-delivery.model'; import { CarOutDelivery } from '../core/models/car-out-delivery.model';
import { DataSource } from 'typeorm'; import { DataSource } from 'typeorm';
import { CarInDelivery } from '../core/models/car-in-delivery.model'; import { CarInDelivery } from '../core/models/car-in-delivery.model';
@@ -11,6 +10,14 @@ export class LogisticService {
constructor(private readonly configService: ConfigService) {} constructor(private readonly configService: ConfigService) {}
async getExpedicao() { async getExpedicao() {
// Postgres desativado: este endpoint dependia do WMS (Postgres).
// Mantido como referencia, mas sem executar queries.
throw new HttpException(
'Integracao com WMS (Postgres) desativada. Conexao com Postgres removida.',
HttpStatus.SERVICE_UNAVAILABLE,
);
/*
const dataSource = new DataSource(createPostgresConfig(this.configService)); const dataSource = new DataSource(createPostgresConfig(this.configService));
await dataSource.initialize(); await dataSource.initialize();
const queryRunner = dataSource.createQueryRunner(); const queryRunner = dataSource.createQueryRunner();
@@ -97,6 +104,7 @@ export class LogisticService {
await queryRunner.release(); await queryRunner.release();
await dataSource.destroy(); await dataSource.destroy();
} }
*/
} }
async getDeliveries(_placa: string) { async getDeliveries(_placa: string) {
@@ -142,7 +150,8 @@ export class LogisticService {
} }
async getStatusCar(placa: string) { async getStatusCar(placa: string) {
const dataSource = new DataSource(createPostgresConfig(this.configService)); // Postgres desativado: este metodo deve usar Oracle.
const dataSource = new DataSource(createOracleConfig(this.configService));
await dataSource.initialize(); await dataSource.initialize();
const queryRunner = dataSource.createQueryRunner(); const queryRunner = dataSource.createQueryRunner();
await queryRunner.connect(); await queryRunner.connect();
@@ -186,7 +195,8 @@ export class LogisticService {
} }
async createCarOut(data: CarOutDelivery) { async createCarOut(data: CarOutDelivery) {
const dataSource = new DataSource(createPostgresConfig(this.configService)); // Postgres desativado: este fluxo usa SQL Oracle (DUAL/sequence).
const dataSource = new DataSource(createOracleConfig(this.configService));
await dataSource.initialize(); await dataSource.initialize();
const queryRunner = dataSource.createQueryRunner(); const queryRunner = dataSource.createQueryRunner();
await queryRunner.connect(); await queryRunner.connect();
@@ -257,7 +267,8 @@ export class LogisticService {
} }
async createCarIn(data: CarInDelivery) { async createCarIn(data: CarInDelivery) {
const dataSource = new DataSource(createPostgresConfig(this.configService)); // Postgres desativado: este fluxo usa SQL Oracle (DUAL/sequence).
const dataSource = new DataSource(createOracleConfig(this.configService));
await dataSource.initialize(); await dataSource.initialize();
const queryRunner = dataSource.createQueryRunner(); const queryRunner = dataSource.createQueryRunner();
await queryRunner.connect(); await queryRunner.connect();

View File

@@ -21,9 +21,10 @@ import { DeliveryCompleted } from '../dto/delivery-completed.dto';
export class OrdersRepository { export class OrdersRepository {
constructor( constructor(
@InjectDataSource('oracle') private readonly oracleDataSource: DataSource, @InjectDataSource('oracle') private readonly oracleDataSource: DataSource,
@InjectDataSource('postgres') ) // Postgres desativado: conexao removida e trechos de uso comentados.
private readonly postgresDataSource: DataSource, // @InjectDataSource('postgres')
) {} // private readonly postgresDataSource: DataSource,
{}
/** /**
* Busca log de transferência por ID do pedido * Busca log de transferência por ID do pedido
@@ -1365,10 +1366,8 @@ WHERE
} }
async getOrderDeliveries(orderId: string) { async getOrderDeliveries(orderId: string) {
const queryRunnerOracle = this.oracleDataSource.createQueryRunner(); const queryRunnerOracle = this.oracleDataSource.createQueryRunner();
const queryRunnerPostgres = this.postgresDataSource.createQueryRunner();
await queryRunnerOracle.connect(); await queryRunnerOracle.connect();
await queryRunnerPostgres.connect();
try { try {
const sqlOracle = `SELECT PCPEDC.CODFILIAL as "storeId" const sqlOracle = `SELECT PCPEDC.CODFILIAL as "storeId"
@@ -1407,75 +1406,8 @@ WHERE
const orders = await queryRunnerOracle.manager.query(sqlOracle); const orders = await queryRunnerOracle.manager.query(sqlOracle);
// Consulta no WMS (Postgres) - Modificada para buscar pelo número do pedido // Postgres desativado: consulta no WMS (Postgres) comentada.
const sqlWMS = ` // O status retornado aqui fica apenas com base no Oracle.
SELECT p.numero,
p.posicao,
CASE
WHEN p.posicao = 'F' THEN 'FATURADO'
WHEN p.posicao = 'C' THEN 'CONCLUIDO'
WHEN p.posicao = 'L' THEN 'LIBERADO'
WHEN EXISTS (
SELECT 1 FROM movimentacao m2 WHERE m2.numero_pedido = p.numero
AND m2.data_inicio_separacao IS NULL
) AND p.posicao = 'M' THEN 'MONTADO'
WHEN EXISTS (
SELECT 1 FROM movimentacao m2 WHERE m2.numero_pedido = p.numero
AND m2.data_inicio_separacao IS NOT NULL
AND m2.data_fim_separacao IS NULL
) AND p.posicao = 'M' THEN 'EM SEPARACAO'
WHEN EXISTS (
SELECT 1 FROM movimentacao m2 WHERE m2.numero_pedido = p.numero
AND m2.data_fim_separacao IS NOT NULL
AND m2.data_inicio_conferencia IS NULL
) AND p.posicao = 'M' THEN 'SEPARACAO FINALIZADA'
WHEN EXISTS (
SELECT 1 FROM movimentacao m2 WHERE m2.numero_pedido = p.numero
AND m2.data_inicio_conferencia IS NOT NULL
AND m2.data_fim_conferencia IS NULL
) AND p.posicao = 'M' THEN 'EM CONFERENCIA'
WHEN EXISTS (
SELECT 1 FROM movimentacao m2 WHERE m2.numero_pedido = p.numero
AND m2.data_fim_conferencia IS NOT NULL
AND (SELECT COUNT(1) FROM volume v WHERE v.numero_pedido = m2.numero_pedido AND v.data_embarque IS NULL) = 0
) AND p.posicao = 'M' THEN 'CONFERENCIA FINALIZADA'
WHEN EXISTS (
SELECT 1 FROM movimentacao m2 WHERE m2.numero_pedido = p.numero
AND m2.data_fim_conferencia IS NOT NULL
AND (SELECT COUNT(1) FROM volume v WHERE v.numero_pedido = m2.numero_pedido AND v.data_embarque IS NULL) > 0
) AND p.posicao = 'M' THEN 'EMBARCADO'
END as "situacaoPedido"
FROM pedido p
WHERE p.numero IN (
SELECT DISTINCT m.numero_pedido
FROM movimentacao m
WHERE m.numero_pedido = $1::bigint
OR m.numero_pedido IN (
SELECT CAST(o.orderId AS bigint) FROM UNNEST($2::text[]) o(orderId)
WHERE o.orderId ~ '^[0-9]+$'
)
)
`;
// Criar array com os IDs de pedidos obtidos do Oracle
const orderIds = orders.map((o) => o.orderId?.toString() || '');
// Converter orderId para número para evitar erro de tipo
const numericOrderId = parseInt(orderId, 10);
const ordersWMS = await queryRunnerPostgres.manager.query(sqlWMS, [
numericOrderId,
orderIds,
]);
// Atualizar status baseado no WMS
for (const order of orders) {
const orderWMS = ordersWMS.find(
(o) => Number(o.numero) === Number(order.orderId),
);
if (orderWMS && !order.deliveryConfirmationDate) {
order.status = orderWMS.situacaoPedido;
}
}
return orders; return orders;
} catch (_error) { } catch (_error) {
@@ -1485,15 +1417,12 @@ WHERE
); );
} finally { } finally {
await queryRunnerOracle.release(); await queryRunnerOracle.release();
await queryRunnerPostgres.release();
} }
} }
async getLeadtimeWMS(orderId: string): Promise<LeadtimeDto[]> { async getLeadtimeWMS(orderId: string): Promise<LeadtimeDto[]> {
const queryRunnerPostgres = this.postgresDataSource.createQueryRunner();
const queryRunnerOracle = this.oracleDataSource.createQueryRunner(); const queryRunnerOracle = this.oracleDataSource.createQueryRunner();
await queryRunnerPostgres.connect();
await queryRunnerOracle.connect(); await queryRunnerOracle.connect();
try { try {
@@ -1512,84 +1441,14 @@ WHERE
`; `;
const dataOracle = await queryRunnerOracle.manager.query(sqlOracle); const dataOracle = await queryRunnerOracle.manager.query(sqlOracle);
// Consulta no Postgres // Postgres desativado: consulta do leadtime no WMS (Postgres) comentada.
const sqlPostgres = ` return dataOracle;
SELECT DADOS.ETAPA as "etapa",
DADOS.DESCRICAO_ETAPA as "descricaoEtapa",
DADOS.DATA as "data",
DADOS.CODIGO_FUNCIONARIO as "codigoFuncionario",
DADOS.NOME_FUNCIONARIO as "nomeFuncionario",
DADOS.NUMERO_PEDIDO as "numeroPedido"
FROM (
SELECT 3 AS ETAPA, 'Inicio Separação' AS DESCRICAO_ETAPA,
MIN(m.data_inicio_separacao) AS DATA,
MAX(m.codigo_separador) AS CODIGO_FUNCIONARIO,
(SELECT u.nome FROM usuario u WHERE u.id = MAX(m.codigo_separador)) AS NOME_FUNCIONARIO,
m.numero_pedido
FROM movimentacao m
WHERE m.data_inicio_separacao >= '2025-01-01'
AND m.numero_pedido > 0
AND m.data_inicio_separacao IS NOT NULL
GROUP BY m.numero_pedido
UNION ALL
SELECT 4, 'Separado', MIN(m.data_fim_separacao), MAX(m.codigo_separador),
(SELECT u.nome FROM usuario u WHERE u.id = MAX(m.codigo_separador)), m.numero_pedido
FROM movimentacao m
WHERE m.data_inicio_separacao >= '2025-01-01'
AND m.numero_pedido > 0
AND m.data_fim_separacao IS NOT NULL
GROUP BY m.numero_pedido
UNION ALL
SELECT 5, 'Inicio Conferência', MIN(m.data_inicio_conferencia), MAX(m.codigo_conferente),
(SELECT u.nome FROM usuario u WHERE u.id = MAX(m.codigo_conferente)), m.numero_pedido
FROM movimentacao m
WHERE m.data_inicio_conferencia IS NOT NULL
AND m.numero_pedido > 0
GROUP BY m.numero_pedido
UNION ALL
SELECT 6, 'Fim Conferência', MIN(m.data_fim_conferencia), MAX(m.codigo_conferente),
(SELECT u.nome FROM usuario u WHERE u.id = MAX(m.codigo_conferente)), m.numero_pedido
FROM movimentacao m
WHERE m.data_fim_conferencia IS NOT NULL
AND m.numero_pedido > 0
GROUP BY m.numero_pedido
UNION ALL
SELECT 7, 'Embarcado', MAX(v.data_embarque), v.usuario_embarque_id,
(SELECT u.nome FROM usuario u WHERE u.id = v.usuario_embarque_id), m.numero_pedido
FROM movimentacao m
JOIN volume v ON m.numero_pedido = v.numero_pedido
WHERE v.data_embarque IS NOT NULL
AND m.numero_pedido > 0
GROUP BY v.usuario_embarque_id, m.numero_pedido
) DADOS
WHERE DADOS.numero_pedido = $1
ORDER BY DADOS.numero_pedido, DADOS.ETAPA;
`;
const dataPostgres = await queryRunnerPostgres.manager.query(
sqlPostgres,
[orderId],
);
// Junta os dados Oracle + Postgres
const leadtime = [...dataOracle, ...dataPostgres];
// Ordena pela etapa (opcional, para garantir ordem)
return leadtime.sort((a, b) => a.etapa - b.etapa);
} catch (_error) { } catch (_error) {
throw new HttpException( throw new HttpException(
'Erro ao buscar dados de leadtime do WMS', 'Erro ao buscar dados de leadtime do WMS',
HttpStatus.INTERNAL_SERVER_ERROR, HttpStatus.INTERNAL_SERVER_ERROR,
); );
} finally { } finally {
await queryRunnerPostgres.release();
await queryRunnerOracle.release(); await queryRunnerOracle.release();
} }
} }