From b9eede08576e78e46b9c1e02326d0cfcfd2e89ef Mon Sep 17 00:00:00 2001 From: wayanrivan Date: Wed, 29 Jul 2026 09:27:34 +0700 Subject: [PATCH] update --- models/GpsTracksModels.js | 458 +++++++++++++++++++------------------- 1 file changed, 229 insertions(+), 229 deletions(-) diff --git a/models/GpsTracksModels.js b/models/GpsTracksModels.js index d5f72c7..95fd9ca 100755 --- a/models/GpsTracksModels.js +++ b/models/GpsTracksModels.js @@ -144,117 +144,117 @@ class GpsTracksModels { }) } - // static bundleCreate2(logs = {}, rltm = {}) { - // // console.log(rltm.device_id + " : Start bundleCreate2") - // return new Promise(async (resolve, reject) => { - // try { - // const conn = await MysqlHelpers.createConnection() - // await MysqlHelpers.createTrx(conn) - // // console.log("createTrx : " + rltm.device_id) + static bundleCreate2(logs = {}, rltm = {}) { + // console.log(rltm.device_id + " : Start bundleCreate2") + return new Promise(async (resolve, reject) => { + try { + const conn = await MysqlHelpers.createConnection() + await MysqlHelpers.createTrx(conn) + // console.log("createTrx : " + rltm.device_id) - // let rltmLength = Object.keys(rltm).length - // let resLogs = undefined + let rltmLength = Object.keys(rltm).length + let resLogs = undefined - // if (Object.keys(logs).length > 0) { - // resLogs = await MysqlHelpers.queryTrx( - // conn, - // `INSERT INTO t_gps_tracks SET ?;`, - // [logs], - // ) - // // console.log("insert t_gps_tracks : " + rltm.device_id) + if (Object.keys(logs).length > 0) { + resLogs = await MysqlHelpers.queryTrx( + conn, + `INSERT INTO t_gps_tracks SET ?;`, + [logs], + ) + // console.log("insert t_gps_tracks : " + rltm.device_id) - // if (logs.action == "location") { - // const date = logs.crt_d - // const mm = moment.unix(date).format("MM") - // const yy = moment.unix(date).format("YY") - // logs.id = resLogs.insertId + if (logs.action == "location") { + const date = logs.crt_d + const mm = moment.unix(date).format("MM") + const yy = moment.unix(date).format("YY") + logs.id = resLogs.insertId - // try { - // await MysqlHelpers.queryTrx( - // conn, - // ` - // INSERT INTO tracks_${yy}${mm} - // SET ? - // `, - // [logs], - // ) - // } catch (error) { - // console.log(error) - // fs.appendFileSync( - // path.join(__dirname, `error_data_log.txt`), - // JSON.stringify(logs) + `\n`, - // ) - // } - // // console.log("insert tracks_${yy}${mm} : " + rltm.device_id) - // } - // } + try { + await MysqlHelpers.queryTrx( + conn, + ` + INSERT INTO tracks_${yy}${mm} + SET ? + `, + [logs], + ) + } catch (error) { + console.log(error) + fs.appendFileSync( + path.join(__dirname, `error_data_log.txt`), + JSON.stringify(logs) + `\n`, + ) + } + // console.log("insert tracks_${yy}${mm} : " + rltm.device_id) + } + } - // if (rltmLength > 0 && typeof resLogs !== "undefined") - // rltm.master_id = resLogs.insertId - // if ( - // rltmLength > 0 && - // rltm.latitude !== null && - // rltm.longitude !== null - // ) { - // let devices = await MysqlHelpers.queryTrx( - // conn, - // `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.device_id = ?`, - // [rltm.device_id], - // ) - // if (devices.length > 1) - // await MysqlHelpers.queryTrx( - // conn, - // `DELETE from t_gps_tracks_rltm WHERE device_id = ?;`, - // [rltm.device_id], - // ) + if (rltmLength > 0 && typeof resLogs !== "undefined") + rltm.master_id = resLogs.insertId + if ( + rltmLength > 0 && + rltm.latitude !== null && + rltm.longitude !== null + ) { + let devices = await MysqlHelpers.queryTrx( + conn, + `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.device_id = ?`, + [rltm.device_id], + ) + if (devices.length > 1) + await MysqlHelpers.queryTrx( + conn, + `DELETE from t_gps_tracks_rltm WHERE device_id = ?;`, + [rltm.device_id], + ) - // if (rltm.vhc_id != 0) { - // let vhcs = await MysqlHelpers.queryTrx( - // conn, - // `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.vhc_id = ?`, - // [rltm.vhc_id], - // ) - // if (vhcs.length > 1) - // await MysqlHelpers.queryTrx( - // conn, - // `DELETE from t_gps_tracks_rltm WHERE vhc_id = ?;`, - // [rltm.vhc_id], - // ) - // } + if (rltm.vhc_id != 0) { + let vhcs = await MysqlHelpers.queryTrx( + conn, + `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.vhc_id = ?`, + [rltm.vhc_id], + ) + if (vhcs.length > 1) + await MysqlHelpers.queryTrx( + conn, + `DELETE from t_gps_tracks_rltm WHERE vhc_id = ?;`, + [rltm.vhc_id], + ) + } - // if (rltm.drv_id != 0) { - // let drvs = await MysqlHelpers.queryTrx( - // conn, - // `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.drv_id = ?`, - // [rltm.drv_id], - // ) - // if (drvs.length > 1) - // await MysqlHelpers.queryTrx( - // conn, - // `DELETE from t_gps_tracks_rltm WHERE drv_id = ?;`, - // [rltm.drv_id], - // ) - // } + if (rltm.drv_id != 0) { + let drvs = await MysqlHelpers.queryTrx( + conn, + `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.drv_id = ?`, + [rltm.drv_id], + ) + if (drvs.length > 1) + await MysqlHelpers.queryTrx( + conn, + `DELETE from t_gps_tracks_rltm WHERE drv_id = ?;`, + [rltm.drv_id], + ) + } - // await MysqlHelpers.queryTrx( - // conn, - // `INSERT INTO t_gps_tracks_rltm SET ? ON DUPLICATE KEY UPDATE ?;`, - // [rltm, rltm], - // ) - // } + await MysqlHelpers.queryTrx( + conn, + `INSERT INTO t_gps_tracks_rltm SET ? ON DUPLICATE KEY UPDATE ?;`, + [rltm, rltm], + ) + } - // await MysqlHelpers.commit(conn) - // // console.log("Commit bundleCreate2 : " + rltm.device_id) - // resolve({ - // type: "success", - // result: resLogs, - // }) - // } catch (err) { - // console.log("ERROR bundleCreate2 : " + rltm.device_id) - // reject(err) - // } - // }) - // } + await MysqlHelpers.commit(conn) + // console.log("Commit bundleCreate2 : " + rltm.device_id) + resolve({ + type: "success", + result: resLogs, + }) + } catch (err) { + console.log("ERROR bundleCreate2 : " + rltm.device_id) + reject(err) + } + }) + } /** MUTEX ESPECIALLY FOR RLTM */ @@ -391,149 +391,149 @@ class GpsTracksModels { /** MUTEX FOR ALL REQUEST */ - static bundleCreate2(logs = {}, rltm = {}) { - return new Promise(async (resolve, reject) => { - let lock = null - let conn = null - try { - conn = await MysqlHelpers.createConnection() - await MysqlHelpers.createTrx(conn) + // static bundleCreate2(logs = {}, rltm = {}) { + // return new Promise(async (resolve, reject) => { + // let lock = null + // let conn = null + // try { + // conn = await MysqlHelpers.createConnection() + // await MysqlHelpers.createTrx(conn) - let rltmLength = Object.keys(rltm).length - let resLogs = undefined + // let rltmLength = Object.keys(rltm).length + // let resLogs = undefined - if (Object.keys(logs).length > 0) { - resLogs = await MysqlHelpers.queryTrx( - conn, - `INSERT INTO t_gps_tracks SET ?;`, - [logs], - ) + // if (Object.keys(logs).length > 0) { + // resLogs = await MysqlHelpers.queryTrx( + // conn, + // `INSERT INTO t_gps_tracks SET ?;`, + // [logs], + // ) - let trackLock = null + // let trackLock = null - try { - if (logs.action == "location") { + // try { + // if (logs.action == "location") { - trackLock = await rltmMutex.lock( - `tracks_insert:${logs.device_id}`, - { - duration: 90000, - maxWait: 90000, - } - ) + // trackLock = await rltmMutex.lock( + // `tracks_insert:${logs.device_id}`, + // { + // duration: 90000, + // maxWait: 90000, + // } + // ) - const date = logs.crt_d - const mm = moment.unix(date).format("MM") - const yy = moment.unix(date).format("YY") + // const date = logs.crt_d + // const mm = moment.unix(date).format("MM") + // const yy = moment.unix(date).format("YY") - logs.id = resLogs.insertId + // logs.id = resLogs.insertId - await MysqlHelpers.queryTrx( - conn, - ` - INSERT INTO tracks_${yy}${mm} - SET ? - `, - [logs] - ) - } - } finally { - if (trackLock) { - await rltmMutex.unlock(trackLock) - } - // conn.release(); - } - } + // await MysqlHelpers.queryTrx( + // conn, + // ` + // INSERT INTO tracks_${yy}${mm} + // SET ? + // `, + // [logs] + // ) + // } + // } finally { + // if (trackLock) { + // await rltmMutex.unlock(trackLock) + // } + // // conn.release(); + // } + // } - if (rltmLength > 0 && typeof resLogs !== "undefined") - rltm.master_id = resLogs.insertId + // if (rltmLength > 0 && typeof resLogs !== "undefined") + // rltm.master_id = resLogs.insertId - if ( - rltmLength > 0 && - rltm.latitude !== null && - rltm.longitude !== null - ) { - // === KUNCI DI SINI === - // Lock per device_id supaya SELECT-DELETE-INSERT untuk - // device yang sama tidak berjalan bersamaan dari request/worker - // lain. Inilah yang tadinya memicu ER_DUP_ENTRY dan - // "Lock wait timeout" karena banyak transaksi menumpuk - // menunggu baris yang sama. - lock = await rltmMutex.lock(`t_gps_tracks_rltm:${rltm.device_id}`, { - duration: 90000, // maksimal lock dipegang 5 detik - maxWait: 90000, // menunggu lock maksimal 10 detik lalu error - }) + // if ( + // rltmLength > 0 && + // rltm.latitude !== null && + // rltm.longitude !== null + // ) { + // // === KUNCI DI SINI === + // // Lock per device_id supaya SELECT-DELETE-INSERT untuk + // // device yang sama tidak berjalan bersamaan dari request/worker + // // lain. Inilah yang tadinya memicu ER_DUP_ENTRY dan + // // "Lock wait timeout" karena banyak transaksi menumpuk + // // menunggu baris yang sama. + // lock = await rltmMutex.lock(`t_gps_tracks_rltm:${rltm.device_id}`, { + // duration: 90000, // maksimal lock dipegang 5 detik + // maxWait: 90000, // menunggu lock maksimal 10 detik lalu error + // }) - let devices = await MysqlHelpers.queryTrx( - conn, - `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.device_id = ?`, - [rltm.device_id], - ) - if (devices.length > 1) - await MysqlHelpers.queryTrx( - conn, - `DELETE from t_gps_tracks_rltm WHERE device_id = ?;`, - [rltm.device_id], - ) + // let devices = await MysqlHelpers.queryTrx( + // conn, + // `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.device_id = ?`, + // [rltm.device_id], + // ) + // if (devices.length > 1) + // await MysqlHelpers.queryTrx( + // conn, + // `DELETE from t_gps_tracks_rltm WHERE device_id = ?;`, + // [rltm.device_id], + // ) - if (rltm.vhc_id != 0) { - let vhcs = await MysqlHelpers.queryTrx( - conn, - `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.vhc_id = ?`, - [rltm.vhc_id], - ) - if (vhcs.length > 1) - await MysqlHelpers.queryTrx( - conn, - `DELETE from t_gps_tracks_rltm WHERE vhc_id = ?;`, - [rltm.vhc_id], - ) - } + // if (rltm.vhc_id != 0) { + // let vhcs = await MysqlHelpers.queryTrx( + // conn, + // `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.vhc_id = ?`, + // [rltm.vhc_id], + // ) + // if (vhcs.length > 1) + // await MysqlHelpers.queryTrx( + // conn, + // `DELETE from t_gps_tracks_rltm WHERE vhc_id = ?;`, + // [rltm.vhc_id], + // ) + // } - if (rltm.drv_id != 0) { - let drvs = await MysqlHelpers.queryTrx( - conn, - `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.drv_id = ?`, - [rltm.drv_id], - ) - if (drvs.length > 1) - await MysqlHelpers.queryTrx( - conn, - `DELETE from t_gps_tracks_rltm WHERE drv_id = ?;`, - [rltm.drv_id], - ) - } + // if (rltm.drv_id != 0) { + // let drvs = await MysqlHelpers.queryTrx( + // conn, + // `SELECT id FROM t_gps_tracks_rltm as rltm WHERE rltm.drv_id = ?`, + // [rltm.drv_id], + // ) + // if (drvs.length > 1) + // await MysqlHelpers.queryTrx( + // conn, + // `DELETE from t_gps_tracks_rltm WHERE drv_id = ?;`, + // [rltm.drv_id], + // ) + // } - await MysqlHelpers.queryTrx( - conn, - `INSERT INTO t_gps_tracks_rltm SET ? ON DUPLICATE KEY UPDATE ?;`, - [rltm, rltm], - ) - } + // await MysqlHelpers.queryTrx( + // conn, + // `INSERT INTO t_gps_tracks_rltm SET ? ON DUPLICATE KEY UPDATE ?;`, + // [rltm, rltm], + // ) + // } - await MysqlHelpers.commit(conn) + // await MysqlHelpers.commit(conn) - resolve({ - type: "success", - result: resLogs, - }) - } catch (err) { - console.log("ERROR bundleCreate2 : " + rltm.device_id) - reject(err) - } finally { - // Lock selalu dilepas, baik sukses maupun gagal, - // supaya tidak deadlock request device yang sama berikutnya. - if (lock) { - try { - await rltmMutex.unlock(lock) - } catch (unlockErr) { - console.log("ERROR unlock mutex : " + rltm.device_id, unlockErr) - } - } - conn.release(); // release connection - } - }) - } + // resolve({ + // type: "success", + // result: resLogs, + // }) + // } catch (err) { + // console.log("ERROR bundleCreate2 : " + rltm.device_id) + // reject(err) + // } finally { + // // Lock selalu dilepas, baik sukses maupun gagal, + // // supaya tidak deadlock request device yang sama berikutnya. + // if (lock) { + // try { + // await rltmMutex.unlock(lock) + // } catch (unlockErr) { + // console.log("ERROR unlock mutex : " + rltm.device_id, unlockErr) + // } + // } + // conn.release(); // release connection + // } + // }) + // } static async get2() { return new Promise((resolve, reject) => {