DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`clean`() BEGIN DECLARE vDateShort DATETIME; DECLARE vOneYearAgo DATE; DECLARE vFourYearsAgo DATE; DECLARE vFiveYearsAgo DATE; DECLARE v18Month DATE; DECLARE v26Month DATE; DECLARE v3Month DATE; DECLARE vTrashId VARCHAR(15); DECLARE v2Years DATE; DECLARE v5Years DATE; SET vDateShort = util.VN_CURDATE() - INTERVAL 2 MONTH; SET vOneYearAgo = util.VN_CURDATE() - INTERVAL 1 YEAR; SET vFourYearsAgo = util.VN_CURDATE() - INTERVAL 4 YEAR; SET vFiveYearsAgo = util.VN_CURDATE() - INTERVAL 5 YEAR; SET v18Month = util.VN_CURDATE() - INTERVAL 18 MONTH; SET v26Month = util.VN_CURDATE() - INTERVAL 26 MONTH; SET v3Month = util.VN_CURDATE() - INTERVAL 3 MONTH; SET v2Years = util.VN_CURDATE() - INTERVAL 2 YEAR; SET v5Years = util.VN_CURDATE() - INTERVAL 5 YEAR; DELETE FROM ticketParking WHERE created < vDateShort; DELETE FROM routesMonitor WHERE dated < vDateShort; DELETE FROM workerTimeControlLog WHERE created < vDateShort; DELETE FROM `message` WHERE sendDate < vDateShort; DELETE FROM messageInbox WHERE sendDate < vDateShort; DELETE FROM messageInbox WHERE sendDate < vDateShort; DELETE FROM workerTimeControl WHERE timed < vFourYearsAgo; DELETE FROM itemShelving WHERE created < util.VN_CURDATE() AND visible = 0; DELETE FROM ticketDown WHERE created < TIMESTAMPADD(DAY,-1,util.VN_CURDATE()); DELETE FROM entryLog WHERE creationDate < vDateShort; DELETE IGNORE FROM expedition WHERE created < v26Month; DELETE FROM sms WHERE created < v18Month; DELETE FROM saleTracking WHERE created < vOneYearAgo; DELETE FROM ticketTracking WHERE created < v18Month; DELETE tobs FROM ticketObservation tobs JOIN ticket t ON tobs.ticketFk = t.id WHERE t.shipped < v5Years; DELETE sc.* FROM saleCloned sc JOIN sale s ON s.id = sc.saleClonedFk JOIN ticket t ON t.id = s.ticketFk WHERE t.shipped < vOneYearAgo; DELETE FROM sharingCart where ended < vDateShort; DELETE FROM sharingClient where ended < vDateShort; DELETE tw.* FROM ticketWeekly tw LEFT JOIN sale s ON s.ticketFk = tw.ticketFk LEFT JOIN ticketRequest tr ON tr.ticketFk = tw.ticketFk LEFT JOIN ticketService ts ON ts.ticketFk = tw.ticketFk WHERE s.id IS NULL AND tr.id IS NULL AND ts.id IS NULL; DELETE FROM claim WHERE ticketCreated < vFourYearsAgo; DELETE FROM message WHERE sendDate < vDateShort; -- Robert ubicacion anterior de trevelLog comentario para debug DELETE FROM zoneEvent WHERE `type` = 'day' AND dated < v3Month; DELETE bm FROM buyMark bm JOIN buy b ON b.id = bm.id JOIN entry e ON e.id = b.entryFk JOIN travel t ON t.id = e.travelFk WHERE t.landed <= vDateShort; DELETE b FROM vn.buy b JOIN vn.entryConfig e ON e.defaultEntry = b.entryFk WHERE b.created < vDateShort; DELETE FROM vn.itemShelvingLog WHERE created < vDateShort; DELETE FROM vn.stockBuyed WHERE creationDate < vDateShort; DELETE FROM vn.itemCleanLog WHERE created < util.VN_NOW() - INTERVAL 1 YEAR; DELETE FROM printQueue WHERE statusCode = 'printed' AND created < vDateShort; DELETE FROM ticketLog WHERE creationDate <= vFiveYearsAgo; -- Equipos duplicados DELETE w.* FROM workerTeam w JOIN (SELECT id, team, workerFk, COUNT(*) - 1 as duplicated FROM workerTeam GROUP BY team,workerFk HAVING duplicated ) d ON d.team = w.team AND d.workerFk = w.workerFk AND d.id != w.id; DELETE sc FROM saleComponent sc JOIN sale s ON s.id= sc.saleFk JOIN ticket t ON t.id= s.ticketFk WHERE t.shipped < v18Month; DELETE c FROM vn.claim c JOIN vn.claimState cs ON cs.id = c.claimStateFk WHERE cs.description = "Anulado" AND c.created < vDateShort; DELETE FROM vn.expeditionTruck WHERE eta < v3Month; DELETE FROM XDiario WHERE FECHA < v3Month OR FECHA IS NULL; -- borrar travels sin entradas DROP TEMPORARY TABLE IF EXISTS tmp.thermographToDelete; CREATE TEMPORARY TABLE tmp.thermographToDelete SELECT th.id,th.dmsFk FROM vn.travel t LEFT JOIN vn.entry e ON e.travelFk = t.id JOIN vn.travelThermograph th ON th.travelFk = t.id WHERE t.shipped < TIMESTAMPADD(MONTH, -3, util.VN_CURDATE()) AND e.travelFk IS NULL; SELECT dt.id INTO vTrashId FROM vn.dmsType dt WHERE dt.code = 'trash'; UPDATE tmp.thermographToDelete th JOIN vn.dms d ON d.id = th.dmsFk SET d.dmsTypeFk = vTrashId; DELETE th FROM tmp.thermographToDelete tmp JOIN vn.travelThermograph th ON th.id = tmp.id; DELETE t FROM vn.travel t LEFT JOIN vn.entry e ON e.travelFk = t.id WHERE t.shipped < TIMESTAMPADD(MONTH, -3, util.VN_CURDATE()) AND e.travelFk IS NULL; UPDATE dms d JOIN dmsType dt ON dt.id = d.dmsTypeFk SET d.dmsTypeFk = vTrashId WHERE created < TIMESTAMPADD(MONTH, -dt.monthToDelete, util.VN_CURDATE()); -- borrar entradas sin compras DROP TEMPORARY TABLE IF EXISTS tmp.entryToDelete; CREATE TEMPORARY TABLE tmp.entryToDelete SELECT e.* FROM vn.entry e LEFT JOIN vn.buy b ON b.entryFk = e.id JOIN vn.entryConfig ec ON e.id != ec.defaultEntry WHERE e.dated < TIMESTAMPADD(MONTH, -3, util.VN_CURDATE()) AND b.entryFK IS NULL; DELETE e FROM vn.entry e JOIN tmp.entryToDelete tmp ON tmp.id = e.id; -- borrar de route registros menores a 4 años DROP TEMPORARY TABLE IF EXISTS tmp.routeToDelete; CREATE TEMPORARY TABLE tmp.routeToDelete SELECT * FROM vn.route r WHERE created < TIMESTAMPADD(YEAR,-4,util.VN_CURDATE()); UPDATE tmp.routeToDelete tmp JOIN vn.dms d ON d.id = tmp.gestdocFk SET d.dmsTypeFk = vTrashId; DELETE r FROM tmp.routeToDelete tmp JOIN vn.route r ON r.id = tmp.id; -- borrar registros de dua y awb menores a 2 años DROP TEMPORARY TABLE IF EXISTS tmp.duaToDelete; CREATE TEMPORARY TABLE tmp.duaToDelete SELECT * FROM vn.dua WHERE operated < TIMESTAMPADD(YEAR,-2,CURDATE()); UPDATE tmp.duaToDelete tm JOIN vn.dms d ON d.id = tm.gestdocFk SET d.dmsTypeFk = vTrashId; DELETE d FROM tmp.duaToDelete tmp JOIN vn.dua d ON d.id = tmp.id; DELETE a FROM vn.awb a LEFT JOIN vn.travel t ON t.awbFk = a.id WHERE a.created < v2Years AND t.id IS NULL; -- Borra los registros de collection y ticketcollection DELETE FROM vn.collection WHERE created < vDateShort; DROP TEMPORARY TABLE IF EXISTS tmp.thermographToDelete; DROP TEMPORARY TABLE IF EXISTS tmp.entryToDelete; DROP TEMPORARY TABLE IF EXISTS tmp.duaToDelete; DELETE FROM travelLog WHERE creationDate < v3Month; CALL shelving_clean; DELETE FROM chat WHERE dated < v5Years; DELETE tt FROM ticketTracking tt JOIN vn.ticket t ON tt.ticketFk = t.id WHERE t.shipped <= vDateShort; END$$ DELIMITER ;