From 6c1599fbaab816f4e2990a4b596240281df3e822 Mon Sep 17 00:00:00 2001 From: Luis Eduardo Estevao Date: Mon, 12 Jan 2026 16:19:11 -0300 Subject: [PATCH] Ajustes para simplifique --- src/Auth/services/user.service.ts | 6 +- src/domain/entity/tables/pcclient.entity.ts | 8 +- src/sales/customer/customer.service.ts | 78 ++--- src/sales/sales/sales.service.ts | 330 ++++++++++---------- 4 files changed, 211 insertions(+), 211 deletions(-) diff --git a/src/Auth/services/user.service.ts b/src/Auth/services/user.service.ts index 86584c5..d62aa80 100644 --- a/src/Auth/services/user.service.ts +++ b/src/Auth/services/user.service.ts @@ -93,7 +93,7 @@ export class UserService { ' WHERE PCEMPR.CODFILIAL = PCFILIAL.CODIGO (+)' + ' AND PCPARAMFILIAL.CODFILIAL = \'99\' ' + ' AND PCPARAMFILIAL.NOME = \'CON_CODSETORGERENTELOJA\' ' + - ' AND PCEMPR.EMAIL = :username AND PCEMPR.SENHABD = CRYPT(:password, USUARIOBD)'; + ' AND PCEMPR.USUARIOBD = :username AND PCEMPR.SENHABD = CRYPT(:password, USUARIOBD)'; const users = await queryRunner.manager .query(sql, [user.email, user.password]); @@ -141,8 +141,8 @@ export class UserService { const noDeliveryDays = await queryRunner.manager .query(sqlDiasSemEntrega, [Number.parseInt(users[0].deliveryTime)]); - const days = Number.parseInt(deliveryDays2[0].days) + - ( noDeliveryDays.length > 0 ? Number.parseInt(noDeliveryDays[0].daysNoDelivery) : 0 ); + const days = Number.parseInt(deliveryDays2[0].days) + + (noDeliveryDays.length > 0 ? Number.parseInt(noDeliveryDays[0].daysNoDelivery) : 0); const userDb = users[0]; console.log(userDb); diff --git a/src/domain/entity/tables/pcclient.entity.ts b/src/domain/entity/tables/pcclient.entity.ts index f5570be..5a6cee5 100644 --- a/src/domain/entity/tables/pcclient.entity.ts +++ b/src/domain/entity/tables/pcclient.entity.ts @@ -1355,7 +1355,7 @@ export class Pcclient { @Column({ name: 'ORGAOPUBMUNICIPAL' }) orgaopubmunicipal: string; - @Column({ name: 'CODCIDADECOM' }) + @Column({ name: 'CODCIDADECOM' }) codcidadecom: number; @Column({ name: 'CODPROMOCAOMED' }) @@ -1622,8 +1622,8 @@ export class Pcclient { @Column({ name: 'CODCONDCOMERCIAL' }) codcondcomercial: string; - @Column({ name: 'MEIOCOMUNICACAO' }) - meiocomunicacao: string; + // @Column({ name: 'MEIOCOMUNICACAO' }) + // meiocomunicacao: string; @Column({ name: 'CODGRUPOCOMERCIALMED' }) codgrupocomercialmed: number; @@ -1645,5 +1645,5 @@ export class Pcclient { @OneToMany(() => Pcpedc, pedidos => pedidos.pcclient) pedidos: Pcpedc[]; - + } \ No newline at end of file diff --git a/src/sales/customer/customer.service.ts b/src/sales/customer/customer.service.ts index 60d5f7d..9ffc223 100644 --- a/src/sales/customer/customer.service.ts +++ b/src/sales/customer/customer.service.ts @@ -44,7 +44,7 @@ export class CustomerService { ' ,pccidade.codibge as "ibgeCode" ' + ' ,pcclient.dtnasc as "birthdate" ' + ' ,pcclient.codatv1 as "ramoId" ' + - ' ,pcclient.meiocomunicacao as "communicate" ' + + // ' ,pcclient.meiocomunicacao as "communicate" ' + ' ,pcclient.latitude as "latitude" ' + ' ,pcclient.longitude as "longitude" ' + ' ,pcclient.codmunicipio as "ibgeCode" ' + @@ -102,16 +102,16 @@ export class CustomerService { ' ,pcclient.telent as "phone" ' + ' ,pcclient.telcelent as "cellPhone" ' + ' ,pcclient.ieent as "numberState" ' + - ' ,pcclient.codcategoria as "categoryId" ' + - ' ,pcclient.codsubcategoria as "subCategoryId" ' + + // ' ,pcclient.codcategoria as "categoryId" ' + + // ' ,pcclient.codsubcategoria as "subCategoryId" ' + ' ,pcclient.codpraca as "placeId" ' + ' ,pcclient.codusur1 as "sellerId" ' + ' ,pccidade.codibge as "ibgeCode" ' + ' ,pcclient.dtnasc as "birthdate" ' + ' ,pcclient.codatv1 as "ramoId" ' + - ' ,pcclient.meiocomunicacao as "communicate" ' + + // ' ,pcclient.meiocomunicacao as "communicate" ' + ' ,pcclient.latitude as "latitude" ' + - ' ,pcclient.longitude as "longitude" ' + + ' ,pcclient.longitude as "longitude" ' + ' ,pcclient.codmunicipio as "ibgeCode" ' + ' ,pcclient.codcidade as "cityId" ' + ' ,pcclient.tipoendereco as "addressType" ' + @@ -158,7 +158,7 @@ export class CustomerService { ' ,pccidade.codibge as "ibgeCode" ' + ' ,pcclient.dtnasc as "birthdate" ' + ' ,pcclient.codatv1 as "ramoId" ' + - ' ,pcclient.meiocomunicacao as "communicate" ' + + //' ,pcclient.meiocomunicacao as "communicate" ' + ' ,pcclient.latitude as "latitude" ' + ' ,pcclient.longitude as "longitude" ' + ' ,pcclient.codmunicipio as "ibgeCode" ' + @@ -173,7 +173,7 @@ export class CustomerService { FROM PCPRACA WHERE PCPRACA.CODPRACA = ${customer[0].placeId}`); - return {...customer[0], place: place[0]}; + return { ...customer[0], place: place[0] }; } catch (error) { console.log(error); throw error; @@ -267,16 +267,16 @@ export class CustomerService { newCustomer.telcelent = customer.cellPhone; newCustomer.celularwhatsapp = customer.cellPhone; newCustomer.codusur1 = customer.sellerId; - newCustomer.codatv1 = ( customer.ramo != null && customer.ramo.id > 0 ) ? customer.ramo.id : newCustomer.codatv1; + newCustomer.codatv1 = (customer.ramo != null && customer.ramo.id > 0) ? customer.ramo.id : newCustomer.codatv1; //Endereço de entrega newCustomer.cepent = customer.zipCode; newCustomer.enderent = customer.address.toUpperCase(); newCustomer.numeroent = customer.addressNumber; - if ( customer.complement !== null && customer.complement.length > 80 ) { - newCustomer.complementoent = customer.complement.substring(0, 80 ).toUpperCase(); + if (customer.complement !== null && customer.complement.length > 80) { + newCustomer.complementoent = customer.complement.substring(0, 80).toUpperCase(); } else { - if ( customer.complement != null ) { - newCustomer.complementoent = customer.complement.toUpperCase(); + if (customer.complement != null) { + newCustomer.complementoent = customer.complement.toUpperCase(); } } newCustomer.bairroent = customer.neighborhood.toUpperCase(); @@ -286,10 +286,10 @@ export class CustomerService { newCustomer.cepcom = customer.zipCode; newCustomer.endercom = customer.address.toUpperCase(); newCustomer.numerocom = customer.addressNumber.toUpperCase(); - if ( customer.complement !== null && customer.complement.length > 80 ) { - newCustomer.complementocom = customer.complement.substring(0, 80 ).toUpperCase(); + if (customer.complement !== null && customer.complement.length > 80) { + newCustomer.complementocom = customer.complement.substring(0, 80).toUpperCase(); } else { - if ( customer.complement != null ) { + if (customer.complement != null) { newCustomer.complementocom = customer.complement.toUpperCase(); } } @@ -300,12 +300,12 @@ export class CustomerService { newCustomer.cepcob = customer.zipCode; newCustomer.endercob = customer.address.toUpperCase(); newCustomer.numerocob = customer.addressNumber; - if ( customer.complement !== null && customer.complement.length > 80 ) { - newCustomer.complementocob = customer.complement.substring(0, 80 ).toUpperCase(); + if (customer.complement !== null && customer.complement.length > 80) { + newCustomer.complementocob = customer.complement.substring(0, 80).toUpperCase(); } else { - if ( customer.complement ) { + if (customer.complement) { newCustomer.complementocob = customer.complement.toUpperCase(); - } + } } newCustomer.bairrocob = customer.neighborhood.toUpperCase(); newCustomer.municcob = customer.city.toUpperCase(); @@ -317,7 +317,7 @@ export class CustomerService { newCustomer.codmunicipio = Number.parseInt(customer.ibgeCode); newCustomer.codcidadecom = newCustomer.codcidade; newCustomer.dtnasc = customer.birthdate; - newCustomer.meiocomunicacao = customer.communicate; + // newCustomer.meiocomunicacao = customer.communicate; newCustomer.codfunccad = customer.idUser; newCustomer.codfunccadastro = customer.idUser; newCustomer.codfuncultalter = customer.idUser; @@ -341,7 +341,7 @@ export class CustomerService { city: customer.city, state: customer.state, allowMessage: customer.allowMessage, cellPhone: customer.cellPhone, category: customer.category, subCategory: customer.subCategory, - place: customer.place, ramo: customer.ramo, meiocomunicacao: customer.communicate, + place: customer.place, ramo: customer.ramo, /*meiocomunicacao: customer.communicate,*/ latitude: customer.latitude, longitude: customer.longitude, ibgeCode: customer.ibgeCode, addressType: customer.addressType, }; @@ -361,8 +361,8 @@ export class CustomerService { city: customer.city, state: customer.state, allowMessage: customer.allowMessage, cellPhone: customer.cellPhone, category: customer.category, subCategory: customer.subCategory, - place: customer.place, meiocomunicacao: customer.communicate, - ramo: customer.ramo, latitude: customer.latitude, longitude: customer.longitude, + place: customer.place, /*meiocomunicacao: customer.communicate,*/ + ramo: customer.ramo, latitude: customer.latitude, longitude: customer.longitude, ibgeCode: customer.ibgeCode, addressType: customer.addressType, }; } @@ -378,7 +378,7 @@ export class CustomerService { await queryRunner.connect(); await queryRunner.startTransaction(); try { - console.log("MEIO DE COMUNICACAO: " + client.meiocomunicacao); + //console.log("MEIO DE COMUNICACAO: " + client.meiocomunicacao); await queryRunner.manager .createQueryBuilder() .update(Pcclient) @@ -418,13 +418,13 @@ export class CustomerService { codmunicipio: client.codmunicipio, codcidadecom: client.codcidade, dtnasc: client.dtnasc, - codatv1: client.codatv1, - meiocomunicacao: client.meiocomunicacao, + codatv1: client.codatv1, + // meiocomunicacao: client.meiocomunicacao, codfuncultalter: client.codfuncultalter, - dtultalter: client.dtultalter, + dtultalter: client.dtultalter, latitude: client.latitude, - longitude: client.longitude, - tipoendereco: client.tipoendereco + longitude: client.longitude, + tipoendereco: client.tipoendereco }) .where({ codcli: client.codcli }) .execute(); @@ -434,7 +434,7 @@ export class CustomerService { await queryRunner.rollbackTransaction(); throw err; } finally { - if ( queryRunner.isTransactionActive) { + if (queryRunner.isTransactionActive) { await queryRunner.rollbackTransaction(); } await queryRunner.release(); @@ -532,13 +532,13 @@ export class CustomerService { const connection = new Connection(connectionOptions); const queryRunner = connection.createQueryRunner(); try { - - await connection.connect(); - - await queryRunner.connect(); - // lets now open a new transaction: - await queryRunner.startTransaction(); + await connection.connect(); + + await queryRunner.connect(); + + // lets now open a new transaction: + await queryRunner.startTransaction(); let sql = `SELECT PROXNUMCLI as "proxnumcli" FROM PCCONSUM WHERE 1 = 1 FOR UPDATE`; @@ -566,14 +566,14 @@ export class CustomerService { } catch (err) { // since we have errors let's rollback changes we made - if ( queryRunner.isTransactionActive) { + if (queryRunner.isTransactionActive) { await queryRunner.rollbackTransaction(); } console.log(err); return -1; } finally { - if ( queryRunner.isTransactionActive) { + if (queryRunner.isTransactionActive) { await queryRunner.rollbackTransaction(); } // you need to release query runner which is manually created: @@ -603,7 +603,7 @@ export class CustomerService { console.log(err); throw err; } finally { - if ( queryRunner.isTransactionActive) { + if (queryRunner.isTransactionActive) { await queryRunner.rollbackTransaction(); } await queryRunner.release(); diff --git a/src/sales/sales/sales.service.ts b/src/sales/sales/sales.service.ts index 0022357..7769578 100644 --- a/src/sales/sales/sales.service.ts +++ b/src/sales/sales/sales.service.ts @@ -20,10 +20,10 @@ import Redis = require('ioredis'); @Injectable() export class SalesService { - constructor( - @Inject('REDIS_CLIENT') private readonly redisClient: Redis.Redis, - private readonly customerService: CustomerService - ) {} + constructor( + @Inject('REDIS_CLIENT') private readonly redisClient: Redis.Redis, + private readonly customerService: CustomerService + ) { } async GetProducts2(store: string, pageSize: number, pageNumber: number, filter: FilterProduct = null,) { @@ -86,7 +86,7 @@ export class SalesService { if (filter && filter.text.length > 0) { const description = filter.text.toUpperCase(); console.log('consultando por codigo de fabrica'); - + let products = await queryRunner.manager .getRepository(SalesProduct) .createQueryBuilder('esvlistaprodutos') @@ -367,92 +367,92 @@ export class SalesService { pageSize: number, pageNumber: number, urlDepartment: string - ): Promise { + ): Promise { const cacheKey = - 'searchByDepartment:' + - store + - '_' + - pageSize + - '_' + - pageNumber + - '_' + - urlDepartment; + 'searchByDepartment:' + + store + + '_' + + pageSize + + '_' + + pageNumber + + '_' + + urlDepartment; const lockKey = 'lock:' + cacheKey; const lockTimeout = 30; // lock expira em 30 segundos - + try { - const cachedResult = await this.redisClient.get(cacheKey); - if (cachedResult) { - console.log('Retornando resultado do cache (searchByDepartment)'); - return JSON.parse(cachedResult); - } + const cachedResult = await this.redisClient.get(cacheKey); + if (cachedResult) { + console.log('Retornando resultado do cache (searchByDepartment)'); + return JSON.parse(cachedResult); + } } catch (err) { - console.error('Erro ao acessar o Redis no searchByDepartment:', err?.message || err); + console.error('Erro ao acessar o Redis no searchByDepartment:', err?.message || err); } - + const lockValue = Date.now() + lockTimeout * 1000 + 1; let acquiredLock: string | null = null; try { - acquiredLock = await this.redisClient.set(lockKey, lockValue, 'NX', 'EX', lockTimeout); + acquiredLock = await this.redisClient.set(lockKey, lockValue, 'NX', 'EX', lockTimeout); } catch (err) { - console.error('Erro ao adquirir lock no Redis (searchByDepartment):', err?.message || err); + console.error('Erro ao adquirir lock no Redis (searchByDepartment):', err?.message || err); } - + if (acquiredLock === 'OK') { - const connectionDb = new Connection(connectionOptions); - await connectionDb.connect(); - const queryRunner = connectionDb.createQueryRunner(); - await queryRunner.connect(); - try { - if (pageSize === 0) pageSize = 50; - if (pageNumber === 0) pageNumber = 1; - const offSet = (pageNumber - 1) * pageSize; - - let products = await queryRunner.manager - .getRepository(SalesProduct) - .createQueryBuilder('esvlistaprodutos') - .where('"esvlistaprodutos".urldepartamento = :urlDepartment', { urlDepartment }) - .andWhere('("esvlistaprodutos".codfilial = :codfilial OR :codfilial = \'99\')', { codfilial: store }) - .limit(pageSize) - .offset(offSet) - .orderBy('"esvlistaprodutos".DESCRICAO', 'ASC') - .getMany(); - - products = this.createListImages(products); - + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); try { - await this.redisClient.set(cacheKey, JSON.stringify(products), 'EX', 3600); - } catch (cacheErr) { - console.error('Erro ao salvar o resultado no cache (searchByDepartment):', cacheErr?.message || cacheErr); + if (pageSize === 0) pageSize = 50; + if (pageNumber === 0) pageNumber = 1; + const offSet = (pageNumber - 1) * pageSize; + + let products = await queryRunner.manager + .getRepository(SalesProduct) + .createQueryBuilder('esvlistaprodutos') + .where('"esvlistaprodutos".urldepartamento = :urlDepartment', { urlDepartment }) + .andWhere('("esvlistaprodutos".codfilial = :codfilial OR :codfilial = \'99\')', { codfilial: store }) + .limit(pageSize) + .offset(offSet) + .orderBy('"esvlistaprodutos".DESCRICAO', 'ASC') + .getMany(); + + products = this.createListImages(products); + + try { + await this.redisClient.set(cacheKey, JSON.stringify(products), 'EX', 3600); + } catch (cacheErr) { + console.error('Erro ao salvar o resultado no cache (searchByDepartment):', cacheErr?.message || cacheErr); + } + + return products; + } catch (error) { + console.error('Erro ao executar a query no searchByDepartment:', error?.message || error); + throw error; + } finally { + await queryRunner.release(); + await connectionDb.close(); + + try { + const currentLockValue = await this.redisClient.get(lockKey); + if (currentLockValue === lockValue.toString()) { + await this.redisClient.del(lockKey); + } + } catch (lockErr) { + console.error('Erro ao liberar o lock do Redis (searchByDepartment):', lockErr?.message || lockErr); + } } - - return products; - } catch (error) { - console.error('Erro ao executar a query no searchByDepartment:', error?.message || error); - throw error; - } finally { - await queryRunner.release(); - await connectionDb.close(); - - try { - const currentLockValue = await this.redisClient.get(lockKey); - if (currentLockValue === lockValue.toString()) { - await this.redisClient.del(lockKey); - } - } catch (lockErr) { - console.error('Erro ao liberar o lock do Redis (searchByDepartment):', lockErr?.message || lockErr); - } - } } else { - console.log('Lock não adquirido (searchByDepartment), aguardando e tentando novamente...'); - await this.sleep(1000); - return this.searchByDepartment(store, pageSize, pageNumber, urlDepartment); + console.log('Lock não adquirido (searchByDepartment), aguardando e tentando novamente...'); + await this.sleep(1000); + return this.searchByDepartment(store, pageSize, pageNumber, urlDepartment); } - } - - - - + } + + + + async searchBySection(store: string, pageSize: number, pageNumber: number, urlDepartment: string, urlSection: string): Promise { const connectionDb = new Connection(connectionOptions); @@ -620,7 +620,7 @@ export class SalesService { .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") - .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") .addSelect("\"esvlistaprodutos\".TEM_PRODUTO_SIMILAR", "similar") .addSelect("\"esvlistaprodutos\".TIPO_CAMPANHA", "type_campaing") .where("esvlistaprodutos.CODAUXILIAR = :id", { id: numbers }) @@ -671,7 +671,7 @@ export class SalesService { .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") - .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") .addSelect("\"esvlistaprodutos\".TEM_PRODUTO_SIMILAR", "similar") .addSelect("\"esvlistaprodutos\".TIPO_CAMPANHA", "type_campaing") .where("UPPER(esvlistaprodutos.CODFAB) like REPLACE(:description, '@', '%')", { description }) @@ -719,7 +719,7 @@ export class SalesService { .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") - .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") .addSelect("\"esvlistaprodutos\".TEM_PRODUTO_SIMILAR", "similar") .addSelect("\"esvlistaprodutos\".TIPO_CAMPANHA", "type_campaing") .where("UPPER(esvlistaprodutos.DESCRICAO) like REPLACE(:description, '@', '%')", { description }) @@ -790,7 +790,7 @@ export class SalesService { .addSelect("\"esvlistaprodutos\".PRODUTO_COM_REDUCAO_PRECO", "downPrice") .addSelect("\"esvlistaprodutos\".PRODUTO_EM_CAMPANHA", "compaing") .addSelect("\"esvlistaprodutos\".BASETINTOMETRICO", "base") - .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") + .addSelect("\"esvlistaprodutos\".QUANTIDADE_ESTOQUE_GERAL", "full_stock") .addSelect("\"esvlistaprodutos\".TEM_PRODUTO_SIMILAR", "similar") .addSelect("\"esvlistaprodutos\".TIPO_CAMPANHA", "type_campaing") .where("esvlistaprodutos.idProduct = :id", { id: id }) @@ -958,9 +958,9 @@ export class SalesService { WHERE ESVESTOQUEVENDA.CODPROD = ${id} AND ESVESTOQUEVENDA.CODFILIAL = PCFILIAL.CODIGO ORDER BY TO_NUMBER(ESVESTOQUEVENDA.CODFILIAL) `; - - const stock = await queryRunner.query(sql); - + + const stock = await queryRunner.query(sql); + // return await queryRunner.manager // .getRepository(Stock) // .createQueryBuilder('esvestoquevenda') @@ -1210,71 +1210,71 @@ export class SalesService { const cacheKey = 'departments'; const lockKey = 'departments_lock'; const lockTimeout = 30; - - try { - const cachedDepartments = await this.redisClient.get(cacheKey); - if (cachedDepartments) { - console.log('Buscando departamentos no Redis'); - return JSON.parse(cachedDepartments); - } - } catch (err) { - console.error('Erro ao acessar o Redis (cache):', err); - } - const lockValue = Date.now() + lockTimeout * 1000 + 1; + + // try { + // const cachedDepartments = await this.redisClient.get(cacheKey); + // if (cachedDepartments) { + // console.log('Buscando departamentos no Redis'); + // return JSON.parse(cachedDepartments); + // } + // } catch (err) { + // console.error('Erro ao acessar o Redis (cache):', err); + // } + const lockValue = Date.now() + lockTimeout * 1000 + 1; const acquiredLock = await this.redisClient.set(lockKey, lockValue, 'NX', 'EX', lockTimeout); - + if (acquiredLock === 'OK') { - const connectionDb = new Connection(connectionOptions); - await connectionDb.connect(); - const queryRunner = connectionDb.createQueryRunner(); - await queryRunner.connect(); - - try { - const departments = await queryRunner.manager - .getRepository(Esvdepartamento) - .createQueryBuilder('Esvdepartamento') - .innerJoinAndSelect('Esvdepartamento.secoes', 'secoes') - .innerJoinAndSelect('secoes.categorias', 'categorias') - .where('"Esvdepartamento".tituloecommerce is not null') - .orderBy('"Esvdepartamento".tituloecommerce, "secoes".tituloecommerce, "categorias".tituloecommerce') - .getMany(); - + const connectionDb = new Connection(connectionOptions); + await connectionDb.connect(); + const queryRunner = connectionDb.createQueryRunner(); + await queryRunner.connect(); + try { - await this.redisClient.set(cacheKey, JSON.stringify(departments), 'EX', 3600); - } catch (cacheErr) { - console.error('Erro ao armazenar dados no Redis:', cacheErr); + const departments = await queryRunner.manager + .getRepository(Esvdepartamento) + .createQueryBuilder('Esvdepartamento') + .innerJoinAndSelect('Esvdepartamento.secoes', 'secoes') + .leftJoinAndSelect('secoes.categorias', 'categorias') + .where('"Esvdepartamento".tituloecommerce is not null') + .orderBy('"Esvdepartamento".tituloecommerce, "secoes".tituloecommerce, "categorias".tituloecommerce') + .getMany(); + + try { + await this.redisClient.set(cacheKey, JSON.stringify(departments), 'EX', 3600); + } catch (cacheErr) { + console.error('Erro ao armazenar dados no Redis:', cacheErr); + } + + return departments; + } catch (dbErr) { + console.error('Erro na consulta ao banco de dados:', dbErr); + throw dbErr; + } finally { + await queryRunner.release(); + await connectionDb.close(); + + // Libera o lock somente se ainda for o proprietário + try { + const currentLockValue = await this.redisClient.get(lockKey); + if (currentLockValue === lockValue.toString()) { + await this.redisClient.del(lockKey); + } + } catch (lockErr) { + console.error('Erro ao liberar o lock do Redis:', lockErr); + } } - - return departments; - } catch (dbErr) { - console.error('Erro na consulta ao banco de dados:', dbErr); - throw dbErr; - } finally { - await queryRunner.release(); - await connectionDb.close(); - - // Libera o lock somente se ainda for o proprietário - try { - const currentLockValue = await this.redisClient.get(lockKey); - if (currentLockValue === lockValue.toString()) { - await this.redisClient.del(lockKey); - } - } catch (lockErr) { - console.error('Erro ao liberar o lock do Redis:', lockErr); - } - } } else { - console.log('Lock não adquirido, aguardando a liberação...'); - await this.sleep(1000); // aguarda 1 segundo - return this.getDepartments(); + console.log('Lock não adquirido, aguardando a liberação...'); + await this.sleep(1000); // aguarda 1 segundo + return this.getDepartments(); } - } - private sleep(ms: number): Promise { + } + private sleep(ms: number): Promise { return new Promise(resolve => setTimeout(resolve, ms)); - } - - - + } + + + async getCategory() { @@ -1301,15 +1301,15 @@ export class SalesService { async searchProduct2(store: string, pageSize: number, pageNumber: number, filter: FilterProduct) { console.log('searchProduct2'); - + const cacheKey = `searchProduct2:${store}:${pageSize}:${pageNumber}:${JSON.stringify(filter)}`; - + const cachedProducts = await this.redisClient.get(cacheKey); if (cachedProducts) { console.log('Retornando produtos do cache'); return JSON.parse(cachedProducts); } - + const sql = 'SELECT esvlistaprodutos.CODPROD "idProduct" ' + ` ,esvlistaprodutos.SEQ "seq" ` + ' ,esvlistaprodutos.DESCRICAO "smallDescription" ' + @@ -1352,8 +1352,8 @@ export class SalesService { ' ,esvlistaprodutos.TEM_PRODUTO_SIMILAR "similar" ' + ' ,esvlistaprodutos.TIPO_CAMPANHA "type_campaing" ' + ' FROM esvlistaprodutos ' + - ' WHERE 1 = 1 '; - + ' WHERE 1 = 1 '; + let where = ""; if (filter.text != null) { where += ` AND ( ESF_REMOVE_ACENTUACAO(UPPER(esvlistaprodutos.descricao)) LIKE ` + @@ -1373,7 +1373,7 @@ export class SalesService { where += ` AND (esvlistaprodutos.produto_em_campanha = '${(filter.offers ? 'D' : 'N')}' OR '${(filter.offers ? 'S' : 'N')}' = 'N') `; where += ` AND (esvlistaprodutos.produto_em_campanha = '${(filter.oportunity ? 'O' : 'N')}' OR '${(filter.oportunity ? 'O' : 'N')}' = 'N') `; where += ` AND (esvlistaprodutos.produto_em_promocao = '${(filter.promotion ? 'S' : 'N')}' OR '${(filter.promotion ? 'S' : 'N')}' = 'N') `; - + if (filter.onlyWithStock) { if (filter.storeStock == '' || filter.storeStock == null) { where += ` AND EXISTS( SELECT P.CODPROD FROM ESVLISTAPRODUTOS P ` + @@ -1385,15 +1385,15 @@ export class SalesService { ` AND P.ESTOQUE_DISP_LOJA > 0 ) `; } } - + if (filter.percentOffMin > 0) { where += ` AND esvlistaprodutos.PERCENTUALDESCONTO >= ${filter.percentOffMin}`; } - + if (filter.percentOffMax > 0) { where += ` AND esvlistaprodutos.PERCENTUALDESCONTO <= ${filter.percentOffMax}`; } - + let xbrands = ''; if (filter && filter.brands && filter.brands.length > 0) { const brands = filter.brands; @@ -1406,24 +1406,24 @@ export class SalesService { }); where += ` AND esvlistaprodutos.nomemarca in ( ${xbrands} )`; } - + const orderBy = `ORDER BY esvlistaprodutos.${(filter.orderBy == null) ? 'DESCRICAO' : filter.orderBy}`; - + const skipReg = ((pageNumber - 1) * pageSize); const pagination = ` OFFSET ${skipReg} ROWS FETCH NEXT ${pageSize} ROWS ONLY`; - + const connectionDb = new Connection(connectionOptions); await connectionDb.connect(); const queryRunner = connectionDb.createQueryRunner(); await queryRunner.connect(); - + try { let products = await queryRunner.manager.query(sql + where + orderBy + pagination) as SalesProduct[]; products = this.createListImages(products); console.log("Total de produtos: " + products.length); - + await this.redisClient.set(cacheKey, JSON.stringify(products), 'EX', 3600); - + return products; } catch (err) { console.log(err); @@ -1433,7 +1433,7 @@ export class SalesService { await connectionDb.close(); } } - + async calculateDeliveryTax(cartId: string, ibgeCode: string) { @@ -1488,7 +1488,7 @@ export class SalesService { WHERE ID = '${cartId}'`; await queryRunner.manager - .query(sql); + .query(sql); await queryRunner.commitTransaction(); } catch (err) { await queryRunner.rollbackTransaction(); @@ -1543,26 +1543,26 @@ export class SalesService { await queryRunner.release(); await connectionDb.close(); } - + } - + async getPlacesInterior() { const connectionDb = new Connection(connectionOptions); await connectionDb.connect(); const queryRunner = connectionDb.createQueryRunner(); await queryRunner.connect(); - + try { const sql = ` SELECT DISTINCT ESTPREVENTREGAPRACA.CODPRACA, PCPRACA.PRACA FROM ESTPREVENTREGAPRACA, PCPRACA WHERE ESTPREVENTREGAPRACA.CODPRACA = PCPRACA.CODPRACA `; - + const places = await queryRunner.query(sql); - - + + return places; } catch (err) { throw err; @@ -1571,7 +1571,7 @@ export class SalesService { await connectionDb.close(); } } - + async getDeliveryTime(saleDate: string, invoiceStoreId: string, placeId: string, cartId: string) { const connection = new Connection(connectionOptions); @@ -1580,7 +1580,7 @@ export class SalesService { await queryRunner.connect(); try { const sql = `SELECT ESF_CALCULAR_PRAZO_ENTREGA_PROGRAMADA(TO_DATE('${saleDate}', 'DD-MM-YYYY'), ${invoiceStoreId}, ${placeId}, '${cartId}') AS "days" FROM DUAL`; - // const sql = `SELECT ESF_CALCULAR_PRAZO_ENTREGA(TO_DATE('${saleDate}', 'DD-MM-YYYY')) AS "days" FROM DUAL`; + // const sql = `SELECT ESF_CALCULAR_PRAZO_ENTREGA(TO_DATE('${saleDate}', 'DD-MM-YYYY')) AS "days" FROM DUAL`; const timeDays = await queryRunner.query(sql); const sqlRetiraPosterior = `SELECT ( PROXIMO_DIA_UTIL(TO_DATE('${saleDate}', 'DD-MM-YYYY'), '4') - TRUNC(SYSDATE) ) AS "days" FROM DUAL`;