From 42840822926a14589e4c10477426c5b54d6322d5 Mon Sep 17 00:00:00 2001 From: carlossa Date: Thu, 3 Oct 2024 08:01:15 +0200 Subject: [PATCH 1/3] fix: refs #7906 optimize method --- modules/zone/back/methods/zone/deleteZone.js | 54 ++++++++------------ 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/modules/zone/back/methods/zone/deleteZone.js b/modules/zone/back/methods/zone/deleteZone.js index a75302703d..85f0eb6f69 100644 --- a/modules/zone/back/methods/zone/deleteZone.js +++ b/modules/zone/back/methods/zone/deleteZone.js @@ -13,23 +13,18 @@ module.exports = Self => { root: true }, http: { - path: `/:id/deleteZone`, + path: '/:id/deleteZone', verb: 'POST' } }); - Self.deleteZone = async(ctx, id, options) => { - const models = Self.app.models; - const token = ctx.req.accessToken; - const userId = token.userId; - const today = Date.vnNew(); - today.setHours(0, 0, 0, 0); + Self.deleteZone = async(ctx, id, options = {}) => { + const {Ticket, State, Worker, Zone} = Self.app.models; + const {userId} = ctx.req.accessToken; + const today = new Date().setHours(0, 0, 0, 0); let tx; - const myOptions = {userId}; - - if (typeof options == 'object') - Object.assign(myOptions, options); + const myOptions = {userId, ...options}; if (!myOptions.transaction) { tx = await Self.beginTransaction({}); @@ -38,38 +33,33 @@ module.exports = Self => { try { const filter = { - where: { - zoneFk: id, - shipped: {gte: today} - }, + where: {zoneFk: id, shipped: {gte: today}}, include: { relation: 'ticketState', - scope: { - fields: ['id', 'alertLevel', 'code'] - } + scope: {fields: ['id', 'alertLevel', 'code']} } }; - const promises = []; - const ticketList = await models.Ticket.find(filter, myOptions); - const fixingState = await models.State.findOne({where: {code: 'FIXING'}}, myOptions); - const worker = await models.Worker.findOne({ - where: {id: userId} - }, myOptions); + const [ticketList, fixingState, worker] = await Promise.all([ + Ticket.find(filter, myOptions), + State.findOne({where: {code: 'FIXING'}}, myOptions), + Worker.findOne({where: {id: userId}}, myOptions) + ]); - await models.Ticket.rawSql('UPDATE ticket SET zoneFk = NULL WHERE zoneFk = ?', [id], myOptions); + await Ticket.rawSql('UPDATE ticket SET zoneFk = NULL WHERE zoneFk = ?', [id], myOptions); - for (ticket of ticketList) { - if (ticket.ticketState().alertLevel == 0) { - promises.push(models.Ticket.state(ctx, { + const updatePromises = ticketList.map(ticket => { + if (ticket.ticketState().alertLevel === 0) { + return Ticket.state(ctx, { ticketFk: ticket.id, stateFk: fixingState.id, userFk: worker.id - }, myOptions)); + }, myOptions); } - } - await Promise.all(promises); - await models.Zone.destroyById(id, myOptions); + }); + + await Promise.all(updatePromises); + await Zone.destroyById(id, myOptions); if (tx) await tx.commit(); -- 2.40.1 From a9497dd2db49e597dc72c2a8364e7b881f59b77f Mon Sep 17 00:00:00 2001 From: carlossa Date: Thu, 3 Oct 2024 10:59:27 +0200 Subject: [PATCH 2/3] fix: refs #7906 optimize method fix --- modules/zone/back/methods/zone/deleteZone.js | 47 ++++++++++++-------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/modules/zone/back/methods/zone/deleteZone.js b/modules/zone/back/methods/zone/deleteZone.js index 85f0eb6f69..4b857e30ad 100644 --- a/modules/zone/back/methods/zone/deleteZone.js +++ b/modules/zone/back/methods/zone/deleteZone.js @@ -6,25 +6,29 @@ module.exports = Self => { arg: 'id', type: 'number', description: 'The zone id', - http: {source: 'path'} + http: {source: 'path'}, }, returns: { type: 'object', - root: true + root: true, }, http: { - path: '/:id/deleteZone', - verb: 'POST' - } + path: `/:id/deleteZone`, + verb: 'POST', + }, }); - Self.deleteZone = async(ctx, id, options = {}) => { - const {Ticket, State, Worker, Zone} = Self.app.models; - const {userId} = ctx.req.accessToken; - const today = new Date().setHours(0, 0, 0, 0); + Self.deleteZone = async(ctx, id, options) => { + const models = Self.app.models; + const token = ctx.req.accessToken; + const userId = token.userId; + const today = Date.vnNew(); + today.setHours(0, 0, 0, 0); let tx; - const myOptions = {userId, ...options}; + const myOptions = {userId}; + + if (typeof options == 'object') Object.assign(myOptions, options); if (!myOptions.transaction) { tx = await Self.beginTransaction({}); @@ -36,30 +40,35 @@ module.exports = Self => { where: {zoneFk: id, shipped: {gte: today}}, include: { relation: 'ticketState', - scope: {fields: ['id', 'alertLevel', 'code']} - } + scope: { + fields: ['id', 'alertLevel', 'code'], + }, + }, }; const [ticketList, fixingState, worker] = await Promise.all([ - Ticket.find(filter, myOptions), - State.findOne({where: {code: 'FIXING'}}, myOptions), - Worker.findOne({where: {id: userId}}, myOptions) + models.Ticket.find(filter, myOptions), + models.State.findOne({where: {code: 'FIXING'}}, myOptions), + models.Worker.findOne({where: {id: userId}}, myOptions) ]); - await Ticket.rawSql('UPDATE ticket SET zoneFk = NULL WHERE zoneFk = ?', [id], myOptions); + await models.Ticket.rawSql( + 'UPDATE ticket SET zoneFk = NULL WHERE zoneFk = ?', + [id], + myOptions + ); const updatePromises = ticketList.map(ticket => { if (ticket.ticketState().alertLevel === 0) { - return Ticket.state(ctx, { + return models.Ticket.state(ctx, { ticketFk: ticket.id, stateFk: fixingState.id, userFk: worker.id }, myOptions); } }); - await Promise.all(updatePromises); - await Zone.destroyById(id, myOptions); + await models.Zone.destroyById(id, myOptions); if (tx) await tx.commit(); -- 2.40.1 From f53998f3207ebed7433451caf07debdd445929a6 Mon Sep 17 00:00:00 2001 From: carlossa Date: Fri, 4 Oct 2024 07:42:31 +0200 Subject: [PATCH 3/3] fix: refs #7906 optimize method fix --- modules/zone/back/methods/zone/deleteZone.js | 31 +++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/modules/zone/back/methods/zone/deleteZone.js b/modules/zone/back/methods/zone/deleteZone.js index 4b857e30ad..a1bc1d4864 100644 --- a/modules/zone/back/methods/zone/deleteZone.js +++ b/modules/zone/back/methods/zone/deleteZone.js @@ -45,18 +45,33 @@ module.exports = Self => { }, }, }; - + console.time('finds'); const [ticketList, fixingState, worker] = await Promise.all([ models.Ticket.find(filter, myOptions), models.State.findOne({where: {code: 'FIXING'}}, myOptions), models.Worker.findOne({where: {id: userId}}, myOptions) ]); + console.timeEnd('finds'); - await models.Ticket.rawSql( - 'UPDATE ticket SET zoneFk = NULL WHERE zoneFk = ?', - [id], - myOptions - ); + console.time('ticket update'); + console.log('ticketList: ', ticketList.length); + // await models.Ticket.rawSql( + // 'UPDATE ticket SET zoneFk = NULL WHERE zoneFk = ? LIMIT 2000', + // [id], + // myOptions + // ); + const promises = []; + // OFFSET no li mola a mariadb + for (let i = 0; i <= 30000; i += 2000) { + promises.push(models.Ticket.rawSql( + `UPDATE ticket SET zoneFk = NULL WHERE zoneFk = ? LIMIT 2000 OFFSET ${i};`, + [id], + myOptions + )); + } + await Promise.all(promises); + console.timeEnd('ticket update'); + /* const updatePromises = ticketList.map(ticket => { if (ticket.ticketState().alertLevel === 0) { @@ -69,8 +84,8 @@ module.exports = Self => { }); await Promise.all(updatePromises); await models.Zone.destroyById(id, myOptions); - - if (tx) await tx.commit(); + */ + if (tx) await tx.rollback(); return id; } catch (err) { -- 2.40.1