diff --git a/app.js b/app.js index 5ca691f..8d5e451 100644 --- a/app.js +++ b/app.js @@ -106,6 +106,27 @@ async function commitMessage(now, logDevice) { } } + // ================= UPDATE SUM MILEAGE DARI t_vehicle ==================== + // if (logDevice.latitude != null && logDevice.longitude != null && lastTrack.length > 0) { + // const distance = LibHelper.haversineGreatCircleDistance(lastTrack[0].latitude, lastTrack[0].longitude, logDevice.latitude, logDevice.longitude, LibHelper.EARTH_RADIUS_KM); + // const distance_km = LibHelper.kmToKm(distance, 100000000); + + // if (distance_km >= 3) { + // GpsTracksModels.bundleCreate2(logDevice, logDevice); + // return false; + // } + // logDevice.pre_milleage = distance_km; + // logDevice.sum_milleage = (lastTrack[0].sum_milleage + logDevice.pre_milleage).toFixed(8); + // if (vhc.length > 0) { + // logDevice.vhc_id = vhc[0] ? vhc[0].vid : 0; + // if (lastTrack[0].vhc_id == logDevice.vhc_id) { + // logDevice.vhc_milleage = (lastTrack[0].vhc_milleage + logDevice.pre_milleage).toFixed(8); + // } else { + // logDevice.vhc_milleage = (vhc[0] ? vhc[0].sum_milleage : 0 + logDevice.pre_milleage).toFixed(8); + // } + // VhcModels.update(vhc[0] ? vhc[0].vid : 0, { sum_milleage: logDevice.vhc_milleage }); + // } + // } if (logDevice.latitude != null && logDevice.longitude != null && lastTrack.length > 0) { const distance = LibHelper.haversineGreatCircleDistance(lastTrack[0].latitude, lastTrack[0].longitude, logDevice.latitude, logDevice.longitude, LibHelper.EARTH_RADIUS_KM); const distance_km = LibHelper.kmToKm(distance, 100000000); @@ -117,13 +138,10 @@ async function commitMessage(now, logDevice) { logDevice.pre_milleage = distance_km; logDevice.sum_milleage = (lastTrack[0].sum_milleage + logDevice.pre_milleage).toFixed(8); if (vhc.length > 0) { - logDevice.vhc_id = vhc[0] ? vhc[0].vid : 0; - if (lastTrack[0].vhc_id == logDevice.vhc_id) { - logDevice.vhc_milleage = (lastTrack[0].vhc_milleage + logDevice.pre_milleage).toFixed(8); - } else { - logDevice.vhc_milleage = (vhc[0] ? vhc[0].sum_milleage : 0 + logDevice.pre_milleage).toFixed(8); - } - VhcModels.update(vhc[0] ? vhc[0].vid : 0, { sum_milleage: logDevice.vhc_milleage }); + logDevice.vhc_id = vhc[0].vid; + const increment = parseFloat(logDevice.pre_milleage || 0); + + await VhcModels.incrementMileage(vhc[0].vid, increment); } } diff --git a/models/GpsTracksModels.js b/models/GpsTracksModels.js index 148ba4a..779e58c 100755 --- a/models/GpsTracksModels.js +++ b/models/GpsTracksModels.js @@ -2,574 +2,599 @@ const db = require(`../config/dbMysqlConn`); const MysqlHelpers = require(`../library/LibMysqlHelper`); class GpsTracksModels { + static DEFAULT_COUNTRY_ID = 1; - static DEFAULT_COUNTRY_ID = 1; - - static TYPE_ADDR_OSM = 1; + static TYPE_ADDR_OSM = 1; - static STTS_REVERSE_GEO_SC = 1; - static STTS_REVERSE_GEO_NOT = 2; - static STTS_REVERSE_GEO_ER = 3; - static STTS_REVERSE_GEO_LOST = 4; + static STTS_REVERSE_GEO_SC = 1; + static STTS_REVERSE_GEO_NOT = 2; + static STTS_REVERSE_GEO_ER = 3; + static STTS_REVERSE_GEO_LOST = 4; - static STTS_EN_DFT = 0; - static STTS_EN_IDLING = 1; - static STTS_EN_MOVING = 2; - static STTS_EN_STOPING = 3; + static STTS_EN_DFT = 0; + static STTS_EN_IDLING = 1; + static STTS_EN_MOVING = 2; + static STTS_EN_STOPING = 3; - static STTS_IGNITION_DFT = 0; - static STTS_IGNITION_ON = 1; - static STTS_IGNITION_OFF = 2; - static STTS_IGNITION_LOW = 3; - static STTS_IGNITION_HIGH = 4; + static STTS_IGNITION_DFT = 0; + static STTS_IGNITION_ON = 1; + static STTS_IGNITION_OFF = 2; + static STTS_IGNITION_LOW = 3; + static STTS_IGNITION_HIGH = 4; - static STTS_GPS_DFT = 0; // default - static STTS_GPS_ON = 1; - static STTS_GPS_OFF = 2; + static STTS_GPS_DFT = 0; // default + static STTS_GPS_ON = 1; + static STTS_GPS_OFF = 2; - // realtime GPS or differential positioning - static STTS_POS_TYPE_GPS_DFT = 0; // default - static STTS_POS_TYPE_GPS_DIFF = 1; - static STTS_POS_TYPE_GPS_RLTM = 2; + // realtime GPS or differential positioning + static STTS_POS_TYPE_GPS_DFT = 0; // default + static STTS_POS_TYPE_GPS_DIFF = 1; + static STTS_POS_TYPE_GPS_RLTM = 2; - // GPS has been positioned or not - static STTS_IS_POS_GPS_DFT = 0; // default - static STTS_IS_POS_GPS_NOT = 1; // not positioning - static STTS_IS_POS_GPS_HAS = 2; // positioning + // GPS has been positioned or not + static STTS_IS_POS_GPS_DFT = 0; // default + static STTS_IS_POS_GPS_NOT = 1; // not positioning + static STTS_IS_POS_GPS_HAS = 2; // positioning - // 1=>no signal, 2=>extremely weak signal 3=>very weak signal, 4=>good signal, 5=>strong signal - static STTS_GSM_DFT = 0; // default - static STTS_GSM_NO_SIGNAL = 1; - static STTS_GSM_BAD_SIGNAL = 2; - static STTS_GSM_WEAK_SIGNAL = 3; - static STTS_GSM_GOOD_SIGNAL = 4; - static STTS_GSM_STRONG_SIGNAL = 5; + // 1=>no signal, 2=>extremely weak signal 3=>very weak signal, 4=>good signal, 5=>strong signal + static STTS_GSM_DFT = 0; // default + static STTS_GSM_NO_SIGNAL = 1; + static STTS_GSM_BAD_SIGNAL = 2; + static STTS_GSM_WEAK_SIGNAL = 3; + static STTS_GSM_GOOD_SIGNAL = 4; + static STTS_GSM_STRONG_SIGNAL = 5; - static STTS_OIL_ELECTRIC_DFT = 0; - static STTS_OIL_ELECTRIC_ON = 1; - static STTS_OIL_ELECTRIC_OFF = 2; + static STTS_OIL_ELECTRIC_DFT = 0; + static STTS_OIL_ELECTRIC_ON = 1; + static STTS_OIL_ELECTRIC_OFF = 2; - static STTS_ALARM_DFT = 0; - static STTS_ALARM_NORMAL = 1; - static STTS_ALARM_SHOCK = 2; - static STTS_ALARM_POWER_CUT = 3; - static STTS_ALARM_LOW_BATTERY = 4; - static STTS_ALARM_SOS = 5; + static STTS_ALARM_DFT = 0; + static STTS_ALARM_NORMAL = 1; + static STTS_ALARM_SHOCK = 2; + static STTS_ALARM_POWER_CUT = 3; + static STTS_ALARM_LOW_BATTERY = 4; + static STTS_ALARM_SOS = 5; - static STTS_CHARGE_DFT = 0; - static STTS_CHARGE_OFF = 1; - static STTS_CHARGE_ON = 2; - - static STTS_ACC_DFT = 0; - static STTS_ACC_LOW = 1; - static STTS_ACC_HIGH = 2; + static STTS_CHARGE_DFT = 0; + static STTS_CHARGE_OFF = 1; + static STTS_CHARGE_ON = 2; - static STTS_VOLT_DFT = 0; - static STTS_VOLT_SHUTDOWN = 1; - static STTS_VOLT_EXTREME_LOW_BATTERY = 2; - static STTS_VOLT_VERY_LOW_BATTERY = 3; - static STTS_VOLT_LOW_BATTERY = 4; - static STTS_VOLT_MEDIUM = 5; - static STTS_VOLT_HIGH = 6; - static STTS_VOLT_VERY_HIGH = 7; + static STTS_ACC_DFT = 0; + static STTS_ACC_LOW = 1; + static STTS_ACC_HIGH = 2; - static STTS_SWITCH_DFT = 0; - static STTS_SWITCH_OFF = 1; - static STTS_SWITCH_ON = 2; + static STTS_VOLT_DFT = 0; + static STTS_VOLT_SHUTDOWN = 1; + static STTS_VOLT_EXTREME_LOW_BATTERY = 2; + static STTS_VOLT_VERY_LOW_BATTERY = 3; + static STTS_VOLT_LOW_BATTERY = 4; + static STTS_VOLT_MEDIUM = 5; + static STTS_VOLT_HIGH = 6; + static STTS_VOLT_VERY_HIGH = 7; - static STTS_ENTER_ZONE = 1; - static STTS_LEAVE_ZONE = 2; + static STTS_SWITCH_DFT = 0; + static STTS_SWITCH_OFF = 1; + static STTS_SWITCH_ON = 2; - // type source - static SOURCE_GPS_TRACKER = 1; - static SOURCE_SMARTPHONE = 2; + static STTS_ENTER_ZONE = 1; + static STTS_LEAVE_ZONE = 2; - static PROTOCOL_SMARTPHONE = 'smartphone'; + // type source + static SOURCE_GPS_TRACKER = 1; + static SOURCE_SMARTPHONE = 2; - static ACT_LOGIN = 'login'; - static ACT_HEARTBEAT = 'heartbeat'; - static ACT_LOCATION = 'location'; - static ACT_OTHER = 'other'; + static PROTOCOL_SMARTPHONE = "smartphone"; - static async create2(data) { - return new Promise((resolve, reject) => { - const query = `INSERT INTO t_gps_tracks SET ?;`; - db.getConnection(function (err, conn) { - if (err) { + static ACT_LOGIN = "login"; + static ACT_HEARTBEAT = "heartbeat"; + static ACT_LOCATION = "location"; + static ACT_OTHER = "other"; + + static async create2(data) { + return new Promise((resolve, reject) => { + const query = `INSERT INTO t_gps_tracks SET ?;`; + db.getConnection(function (err, conn) { + if (err) { conn.release(); - reject(err); - return false; - } + reject(err); + return false; + } - conn.beginTransaction(async function (err) { - if (err) { + conn.beginTransaction(async function (err) { + if (err) { conn.release(); - reject(err); - return false; - } - conn.query(query, data, function (err, resp) { - if (err) { - conn.rollback(async function () { - conn.release(); - reject(err.message); - }); - return false; - } - // Number(resp.insertId); - conn.commit(async function (err) { - if (err) { + reject(err); + return false; + } + conn.query(query, data, function (err, resp) { + if (err) { + conn.rollback(async function () { conn.release(); - reject(err); - return false; - } - conn.release(); - resolve(resp); - return true; - }); - }); - }); + reject(err.message); + }); + return false; + } + // Number(resp.insertId); + conn.commit(async function (err) { + if (err) { + conn.release(); + reject(err); + return false; + } + conn.release(); + resolve(resp); + return true; + }); + }); + }); + }); + }); + } - }); - }); - } + static bundleCreate2(logs = {}, rltm = {}) { + return new Promise(async (resolve, reject) => { + try { + const conn = await MysqlHelpers.createConnection(); + await MysqlHelpers.createTrx(conn); - static bundleCreate2 (logs = {}, rltm = {}) { - return new Promise(async (resolve, reject) => { - try { - const 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]); + 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); + resolve({ + type: "success", + result: resLogs, + }); + } catch (err) { + console.log("err"); + reject(err); + } + }); + } - await MysqlHelpers.commit(conn); - resolve({ - type: 'success', - result: resLogs, - }) - } catch (err) { - console.log('err'); - reject(err); - } - }) - } + static async get2() { + return new Promise((resolve, reject) => { + let params = []; + let query = "SELECT * FROM t_gps_tracks ORDER BY id DESC LIMIT 1000"; + db.query(query, params, function (err, resp) { + if (err) { + reject(err); + return false; + } + resolve(resp); + return true; + }); + }); + } - static async get2() { - return new Promise((resolve, reject) => { - let params = []; - let query = 'SELECT * FROM t_gps_tracks ORDER BY id DESC LIMIT 1000'; - db.query(query, params, function (err, resp) { - if (err) { - reject(err); - return false; - } - resolve(resp); - return true; - }); - }); - } + static async get2ForReverseGeo(limit) { + return new Promise((resolve, reject) => { + let params = []; + let query = "SELECT * FROM t_gps_tracks WHERE latitude is not null AND longitude is not null AND stts_reverse_geo = ? ORDER BY id ASC LIMIT ?"; + params.push(GpsTracksModels.STTS_REVERSE_GEO_NOT, limit); + db.query(query, params, function (err, resp) { + if (err) { + reject(err); + return false; + } + resolve(resp); + return true; + }); + }); + } - static async get2ForReverseGeo(limit) { - return new Promise((resolve, reject) => { - let params = []; - let query = 'SELECT * FROM t_gps_tracks WHERE latitude is not null AND longitude is not null AND stts_reverse_geo = ? ORDER BY id ASC LIMIT ?'; - params.push(GpsTracksModels.STTS_REVERSE_GEO_NOT, limit); - db.query(query, params, function (err, resp) { - if (err) { - reject(err); - return false; - } - resolve(resp); - return true; - }); - }); - } + static async get2LastDevice(device_id) { + return new Promise((resolve, reject) => { + let params = []; + let query = "SELECT * FROM t_gps_tracks WHERE device_id = ? ORDER BY id DESC LIMIT 1"; + params.push(device_id); + db.query(query, params, function (err, resp) { + if (err) { + reject(err); + return false; + } + resolve(resp); + return true; + }); + }); + } - static async get2LastDevice(device_id) { - return new Promise((resolve, reject) => { - let params = []; - let query = 'SELECT * FROM t_gps_tracks WHERE device_id = ? ORDER BY id DESC LIMIT 1'; - params.push(device_id); - db.query(query, params, function (err, resp) { - if (err) { - reject(err); - return false; - } - resolve(resp); - return true; - }); - }); - } + static async get2LastLocByDeviceId(device_id) { + return new Promise((resolve, reject) => { + let params = []; + // let query = 'SELECT * FROM t_gps_tracks WHERE device_id = ? AND latitude is not null AND longitude != 0 ORDER BY id DESC LIMIT 1'; + let query = 'SELECT * FROM t_gps_tracks WHERE action IN ("location","alarm") AND device_id = ? AND latitude is not null AND longitude != 0 ORDER BY id DESC LIMIT 1'; // kalo gamau ngambil data heartbeat(idling) + params.push(device_id); + db.query(query, params, function (err, resp) { + if (err) { + reject(err); + return false; + } + resolve(resp); + return true; + }); + }); + } - static async get2LastLocByDeviceId(device_id) { - return new Promise((resolve, reject) => { - let params = []; - // let query = 'SELECT * FROM t_gps_tracks WHERE device_id = ? AND latitude is not null AND longitude != 0 ORDER BY id DESC LIMIT 1'; - let query = 'SELECT * FROM t_gps_tracks WHERE action IN ("location","alarm") AND device_id = ? AND latitude is not null AND longitude != 0 ORDER BY id DESC LIMIT 1'; // kalo gamau ngambil data heartbeat(idling) - params.push(device_id); - db.query(query, params, function (err, resp) { - if (err) { - reject(err); - return false; - } - resolve(resp); - return true; - }); - }); - } + static async getLastSumMileage(device_id) { + return new Promise((resolve, reject) => { + let params = []; + let query = ` + select + * + from + t_vehicles tv + where + tv.device_id = "0866833070208837" + and tv.dlt is null + limit 1 + `; + params.push(device_id); + db.query(query, params, function (err, resp) { + if (err) { + reject(err); + return false; + } + resolve(resp); + return true; + }); + }); + } - static async get2LastLoc(filter = {}) { - return new Promise((resolve, reject) => { - let params = [], where = ''; - if (filter['device_id']) { - where += ' AND device_id = ?'; - params.push(filter['device_id']); + static async get2LastLoc(filter = {}) { + return new Promise((resolve, reject) => { + let params = [], + where = ""; + if (filter["device_id"]) { + where += " AND device_id = ?"; + params.push(filter["device_id"]); + } else if (filter["vhc_id"]) { + where += " AND vhc_id = ?"; + params.push(filter["vhc_id"]); + } else if (filter["drv_id"]) { + where += " AND drv_id = ?"; + params.push(filter["drv_id"]); + } else { + reject(false); + return false; + } + let query = `SELECT * FROM t_gps_tracks WHERE latitude is not null AND longitude != 0 ${where} ORDER BY id DESC LIMIT 1`; + db.query(query, params, function (err, resp) { + if (err) { + reject(err); + return false; + } + resolve(resp); + return true; + }); + }); + } - } else if (filter['vhc_id']) { - where += ' AND vhc_id = ?'; - params.push(filter['vhc_id']); + static async getLastLocAndAddrByDid(filter = {}) { + return new Promise((resolve, reject) => { + let params = [], + where = "", + limit = ""; - } else if (filter['drv_id']) { - where += ' AND drv_id = ?'; - params.push(filter['drv_id']); + if (typeof filter["did"] !== "undefined") { + where += " AND tr.drv_id = ?"; + params.push(filter["did"]); + } - } else { - reject(false); - return false; - } - let query = `SELECT * FROM t_gps_tracks WHERE latitude is not null AND longitude != 0 ${where} ORDER BY id DESC LIMIT 1`; - db.query(query, params, function (err, resp) { - if (err) { - reject(err); - return false; - } - resolve(resp); - return true; - }); - }); - } + if (typeof filter["limit"] !== "undefined") { + limit += " LIMIT ?"; + params.push(filter["limit"]); + } - static async getLastLocAndAddrByDid(filter = {}) { - return new Promise((resolve, reject) => { - let params = [], where = '', limit = ''; - - if (typeof filter['did'] !== 'undefined') { - where += ' AND tr.drv_id = ?'; - params.push(filter['did']); - } + let query = `SELECT tr.*,tra.state_text,tra.city_text,tra.district_text,tra.village_text,tra.postcode,tra.streets,tra.fulladdress FROM t_gps_tracks as tr LEFT JOIN t_gps_tracks_address as tra ON tr.id = tra.master_id WHERE latitude is not null AND longitude != 0 ${where} ORDER BY id DESC ${limit}`; + db.query(query, params, function (err, resp) { + if (err) { + reject(err); + return false; + } + resolve(resp); + return true; + }); + }); + } - if (typeof filter['limit'] !== 'undefined') { - limit += ' LIMIT ?'; - params.push(filter['limit']); - } + static async checkSttsEngineBetweenDate(device_id, stts_engine, start, end) { + return new Promise((resolve, reject) => { + let params = []; + let query = "SELECT * FROM t_gps_tracks WHERE device_id = ? AND stts_engine = ? AND crt BETWEEN ? AND ? ORDER BY id ASC LIMIT 1"; + params.push(device_id, stts_engine, start, end); + db.query(query, params, function (err, resp) { + if (err) { + reject(err); + return false; + } + resolve(resp); + return true; + }); + }); + } - let query = `SELECT tr.*,tra.state_text,tra.city_text,tra.district_text,tra.village_text,tra.postcode,tra.streets,tra.fulladdress FROM t_gps_tracks as tr LEFT JOIN t_gps_tracks_address as tra ON tr.id = tra.master_id WHERE latitude is not null AND longitude != 0 ${where} ORDER BY id DESC ${limit}`; - db.query(query, params, function (err, resp) { - if (err) { - reject(err); - return false; - } - resolve(resp); - return true; - }); - }); - } + static async get2LastHeartbeatOrAlarm(device_id) { + return new Promise((resolve, reject) => { + let params = []; + let query = 'SELECT * FROM t_gps_tracks WHERE device_id = ? AND action IN ("heartbeat","alarm") AND stts_gps != 0 AND stts_gsm != 0 ORDER BY id DESC LIMIT 1'; + params.push(device_id); + db.query(query, params, function (err, resp) { + if (err) { + reject(err); + return false; + } + resolve(resp); + return true; + }); + }); + } - static async checkSttsEngineBetweenDate(device_id, stts_engine, start, end) { - return new Promise((resolve, reject) => { - let params = []; - let query = 'SELECT * FROM t_gps_tracks WHERE device_id = ? AND stts_engine = ? AND crt BETWEEN ? AND ? ORDER BY id ASC LIMIT 1'; - params.push(device_id, stts_engine, start, end); - db.query(query, params, function (err, resp) { - if (err) { - reject(err); - return false; - } - resolve(resp); - return true; - }); - }); - } + static async getLastHeartbeatToDeterminIdling(device_id, lst_pos_crt, now) { + return new Promise((resolve, reject) => { + let params = []; + let query = 'SELECT * FROM t_gps_tracks WHERE device_id = ? AND action IN ("heartbeat") AND stts_gps != 0 AND crt BETWEEN ' + lst_pos_crt + " AND " + now + " ORDER BY id DESC;"; + params.push(device_id); + db.query(query, params, function (err, resp) { + if (err) { + reject(err); + return false; + } + resolve(resp); + return true; + }); + }); + } - static async get2LastHeartbeatOrAlarm(device_id) { - return new Promise((resolve, reject) => { - let params = []; - let query = 'SELECT * FROM t_gps_tracks WHERE device_id = ? AND action IN ("heartbeat","alarm") AND stts_gps != 0 AND stts_gsm != 0 ORDER BY id DESC LIMIT 1'; - params.push(device_id); - db.query(query, params, function (err, resp) { - if (err) { - reject(err); - return false; - } - resolve(resp); - return true; - }); - }); - } - - static async getLastHeartbeatToDeterminIdling(device_id, lst_pos_crt, now) { - return new Promise((resolve, reject) => { - let params = []; - let query = 'SELECT * FROM t_gps_tracks WHERE device_id = ? AND action IN ("heartbeat") AND stts_gps != 0 AND crt BETWEEN '+lst_pos_crt+' AND '+now+' ORDER BY id DESC;'; - params.push(device_id); - db.query(query, params, function (err, resp) { - if (err) { - reject(err); - return false; - } - resolve(resp); - return true; - }); - }); - } - - static async update2(id, data) { - return new Promise((resolve, reject) => { - const query = `UPDATE t_gps_tracks SET ? WHERE id = ?;`; - db.getConnection(function (err, conn) { - if (err) { + static async update2(id, data) { + return new Promise((resolve, reject) => { + const query = `UPDATE t_gps_tracks SET ? WHERE id = ?;`; + db.getConnection(function (err, conn) { + if (err) { conn.release(); - reject(err); - return false; - } + reject(err); + return false; + } - conn.beginTransaction(async function (err) { - if (err) { + conn.beginTransaction(async function (err) { + if (err) { conn.release(); - reject(err); - return false; - } - conn.query(query, [data, id], function (err, resp) { - if (err) { - conn.rollback(async function () { - conn.release(); - reject(err.message); - }); - return false; - } - conn.commit(async function (err) { - if (err) { + reject(err); + return false; + } + conn.query(query, [data, id], function (err, resp) { + if (err) { + conn.rollback(async function () { conn.release(); - reject(err); - return false; - } - conn.release(); - resolve(resp); - return true; - }); - }); - }); + reject(err.message); + }); + return false; + } + conn.commit(async function (err) { + if (err) { + conn.release(); + reject(err); + return false; + } + conn.release(); + resolve(resp); + return true; + }); + }); + }); + }); + }); + } - }); - }); - } + static async select2Address(lat = "", lng = "") { + return new Promise((resolve, reject) => { + let params = []; + let query = "SELECT * FROM t_gps_tracks_address WHERE stts_reverse_geo = " + GpsTracksModels.STTS_REVERSE_GEO_SC + " AND lat = ? AND lng = ? ORDER BY id DESC LIMIT 1;"; + params.push(lat, lng); + db.query(query, params, function (err, resp) { + if (err) { + reject(err); + return false; + } + resolve(resp); + return true; + }); + }); + } - static async select2Address(lat = '', lng = '') { - return new Promise((resolve, reject) => { - let params = []; - let query = 'SELECT * FROM t_gps_tracks_address WHERE stts_reverse_geo = '+GpsTracksModels.STTS_REVERSE_GEO_SC+' AND lat = ? AND lng = ? ORDER BY id DESC LIMIT 1;'; - params.push(lat, lng); - db.query(query, params, function (err, resp) { - if (err) { - reject(err); - return false; - } - resolve(resp); - return true; - }); - }); - } - - static async create2Address(data) { - return new Promise((resolve, reject) => { - const query = `INSERT INTO t_gps_tracks_address SET ?;`; - db.getConnection(function (err, conn) { - if (err) { + static async create2Address(data) { + return new Promise((resolve, reject) => { + const query = `INSERT INTO t_gps_tracks_address SET ?;`; + db.getConnection(function (err, conn) { + if (err) { conn.release(); - reject(err); - return false; - } + reject(err); + return false; + } - conn.beginTransaction(async function (err) { - if (err) { + conn.beginTransaction(async function (err) { + if (err) { conn.release(); - reject(err); - return false; - } - conn.query(query, data, function (err, resp) { - if (err) { - conn.rollback(async function () { - conn.release(); - reject(err.message); - }); - return false; - } - // Number(resp.insertId); - conn.commit(async function (err) { - if (err) { + reject(err); + return false; + } + conn.query(query, data, function (err, resp) { + if (err) { + conn.rollback(async function () { conn.release(); - reject(err); - return false; - } - conn.release(); - resolve(resp); - return true; - }); - }); - }); + reject(err.message); + }); + return false; + } + // Number(resp.insertId); + conn.commit(async function (err) { + if (err) { + conn.release(); + reject(err); + return false; + } + conn.release(); + resolve(resp); + return true; + }); + }); + }); + }); + }); + } - }); - }); - } - - static async create2SpawnZone(data) { - return new Promise((resolve, reject) => { - const query = `INSERT INTO t_gps_tracks_spawn SET ?;`; - db.getConnection(function (err, conn) { - if (err) { + static async create2SpawnZone(data) { + return new Promise((resolve, reject) => { + const query = `INSERT INTO t_gps_tracks_spawn SET ?;`; + db.getConnection(function (err, conn) { + if (err) { conn.release(); - reject(err); - return false; - } + reject(err); + return false; + } - conn.beginTransaction(async function (err) { - if (err) { + conn.beginTransaction(async function (err) { + if (err) { conn.release(); - reject(err); - return false; - } - conn.query(query, data, function (err, resp) { - if (err) { - conn.rollback(async function () { - conn.release(); - reject(err.message); - }); - return false; - } - // Number(resp.insertId); - conn.commit(async function (err) { - if (err) { + reject(err); + return false; + } + conn.query(query, data, function (err, resp) { + if (err) { + conn.rollback(async function () { conn.release(); - reject(err); - return false; - } - conn.release(); - resolve(resp); - return true; - }); - }); - }); + reject(err.message); + }); + return false; + } + // Number(resp.insertId); + conn.commit(async function (err) { + if (err) { + conn.release(); + reject(err); + return false; + } + conn.release(); + resolve(resp); + return true; + }); + }); + }); + }); + }); + } - }); - }); - } - - static async updt2SpawnZone(data, id) { - return new Promise((resolve, reject) => { - const query = `UPDATE t_gps_tracks_spawn SET ? WHERE id = ?;`; - db.getConnection(function (err, conn) { - if (err) { + static async updt2SpawnZone(data, id) { + return new Promise((resolve, reject) => { + const query = `UPDATE t_gps_tracks_spawn SET ? WHERE id = ?;`; + db.getConnection(function (err, conn) { + if (err) { conn.release(); - reject(err); - return false; - } + reject(err); + return false; + } - conn.beginTransaction(async function (err) { - if (err) { + conn.beginTransaction(async function (err) { + if (err) { conn.release(); - reject(err); - return false; - } - conn.query(query, [data, id], function (err, resp) { - if (err) { - conn.rollback(async function () { - conn.release(); - reject(err.message); - }); - return false; - } - // Number(resp.insertId); - conn.commit(async function (err) { - if (err) { + reject(err); + return false; + } + conn.query(query, [data, id], function (err, resp) { + if (err) { + conn.rollback(async function () { conn.release(); - reject(err); - return false; - } - conn.release(); - resolve(resp); - return true; - }); - }); - }); + reject(err.message); + }); + return false; + } + // Number(resp.insertId); + conn.commit(async function (err) { + if (err) { + conn.release(); + reject(err); + return false; + } + conn.release(); + resolve(resp); + return true; + }); + }); + }); + }); + }); + } - }); - }); - } + static listSpawnZone(filter = {}) { + return new Promise(async (resolve, reject) => { + let params = [], + select = "", + where = "", + join = "", + order_by = "", + group_by = "", + limit = ""; - static listSpawnZone(filter = {}) { - return new Promise(async (resolve, reject) => { - let params = [], select = '', where = '', join = '', order_by = '', group_by = '', limit = ''; + if (filter["zone_id"]) { + where += " AND spawn.zone_id = ?"; + params.push(filter["zone_id"]); + } + if (filter["ord_id"]) { + where += " AND spawn.ord_id = ?"; + params.push(filter["ord_id"]); + } + if (filter["ord_pck_drop_id"]) { + where += " AND spawn.ord_pck_drop_id = ?"; + params.push(filter["ord_pck_drop_id"]); + } + if (filter["drv_id"]) { + where += " AND spawn.drv_id = ?"; + params.push(filter["drv_id"]); + } + if (filter["vhc_id"]) { + where += " AND spawn.vhc_id = ?"; + params.push(filter["vhc_id"]); + } + if (filter["source"]) { + where += " AND spawn.source = ?"; + params.push(filter["source"]); + } + if (typeof filter["leave_at_d"] != undefined) { + where += " AND spawn.leave_at_d = ?"; + params.push(filter["leave_at_d"]); + } - if (filter['zone_id']) { - where += ' AND spawn.zone_id = ?'; - params.push(filter['zone_id']); - } - if (filter['ord_id']) { - where += ' AND spawn.ord_id = ?'; - params.push(filter['ord_id']); - } - if (filter['ord_pck_drop_id']) { - where += ' AND spawn.ord_pck_drop_id = ?'; - params.push(filter['ord_pck_drop_id']); - } - if (filter['drv_id']) { - where += ' AND spawn.drv_id = ?'; - params.push(filter['drv_id']); - } - if (filter['vhc_id']) { - where += ' AND spawn.vhc_id = ?'; - params.push(filter['vhc_id']); - } - if (filter['source']) { - where += ' AND spawn.source = ?'; - params.push(filter['source']); - } - if (typeof filter['leave_at_d'] != undefined) { - where += ' AND spawn.leave_at_d = ?'; - params.push(filter['leave_at_d']); - } + if (filter["group_by"]) { + group_by = filter["group_by"]; + } + if (filter["order_by"]) { + order_by = filter["order_by"]; + } + if (filter["limit"]) { + limit = " LIMIT " + filter["limit"]; + } - if (filter['group_by']) { - group_by = filter['group_by']; - } - if (filter['order_by']) { - order_by = filter['order_by']; - } - if (filter['limit']) { - limit = ' LIMIT ' + filter['limit']; - } - - let query = `SELECT + let query = `SELECT spawn.* ${select} FROM t_gps_tracks_spawn as spawn @@ -580,17 +605,16 @@ class GpsTracksModels { ${order_by} ${limit} ;`; - db.query(query, params, function (err, resp) { - if (err) { - reject(err); - return false; - } - resolve(resp); - return true; - }); - }); - } - + db.query(query, params, function (err, resp) { + if (err) { + reject(err); + return false; + } + resolve(resp); + return true; + }); + }); + } } -module.exports = GpsTracksModels; \ No newline at end of file +module.exports = GpsTracksModels; diff --git a/models/VhcModels.js b/models/VhcModels.js index 98d5eb5..282e0b4 100755 --- a/models/VhcModels.js +++ b/models/VhcModels.js @@ -1,101 +1,111 @@ const db = require(`../config/dbMysqlConn`); class VhcModels { + static STTS_ACTIVE = 1; + static STTS_INACTIVE = 2; - static STTS_ACTIVE = 1; - static STTS_INACTIVE = 2; - - static IN_ORD_YES = 1; + static IN_ORD_YES = 1; static IN_ORD_NO = 2; - static async getVhcByDeviceId(device_id) { - return new Promise((resolve, reject) => { - let params = []; - let query = 'SELECT'; - query += ' v.id as vid,v.nopol1,v.nopol2,v.nopol3,v.sum_milleage,vd.speed_limit'; - query += ' ,da.fullname as da_name,da.phone as da_phone,da.phone_code as da_phone_code'; - query += ' FROM t_vehicles AS v'; - query += ' INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid'; - query += ' LEFT JOIN t_drivers AS da ON v.a_did = da.id'; - query += ' WHERE v.dlt is null AND v.status = ? AND v.device_id = ?'; - params.push(VhcModels.STTS_ACTIVE, device_id); - db.query(query, params, function (err, resp) { - if (err) { - reject(err); - return false; - } - resolve(resp); - return true; - }); - }); - } + static async getVhcByDeviceId(device_id) { + return new Promise((resolve, reject) => { + let params = []; + let query = "SELECT"; + query += " v.id as vid,v.nopol1,v.nopol2,v.nopol3,v.sum_milleage,vd.speed_limit"; + query += " ,da.fullname as da_name,da.phone as da_phone,da.phone_code as da_phone_code"; + query += " FROM t_vehicles AS v"; + query += " INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid"; + query += " LEFT JOIN t_drivers AS da ON v.a_did = da.id"; + query += " WHERE v.dlt is null AND v.status = ? AND v.device_id = ?"; + params.push(VhcModels.STTS_ACTIVE, device_id); + db.query(query, params, function (err, resp) { + if (err) { + reject(err); + return false; + } + resolve(resp); + return true; + }); + }); + } - static async getVhcById(id) { - return new Promise((resolve, reject) => { - let params = []; - let query = 'SELECT'; - query += ' v.id as vid,v.nopol1,v.nopol2,v.nopol3,v.sum_milleage,vd.speed_limit'; - query += ' ,da.fullname as da_name,da.phone as da_phone,da.phone_code as da_phone_code'; - query += ' ,v.is_in_ord,v.ord_id,v.ord_code,v.ord_ids'; - query += ' FROM t_vehicles AS v'; - query += ' INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid'; - query += ' LEFT JOIN t_drivers AS da ON v.a_did = da.id'; + static async getVhcById(id) { + return new Promise((resolve, reject) => { + let params = []; + let query = "SELECT"; + query += " v.id as vid,v.nopol1,v.nopol2,v.nopol3,v.sum_milleage,vd.speed_limit"; + query += " ,da.fullname as da_name,da.phone as da_phone,da.phone_code as da_phone_code"; + query += " ,v.is_in_ord,v.ord_id,v.ord_code,v.ord_ids"; + query += " FROM t_vehicles AS v"; + query += " INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid"; + query += " LEFT JOIN t_drivers AS da ON v.a_did = da.id"; // query += ' WHERE v.dlt is null AND v.status = ? AND v.id = ?'; - query += ' WHERE v.dlt is null AND v.id = ?'; - query += ' LIMIT 1'; - params.push(id); - db.query(query, params, function (err, resp) { - if (err) { - reject(err); - return false; - } - resolve(resp); - return true; - }); - }); - } + query += " WHERE v.dlt is null AND v.id = ?"; + query += " LIMIT 1"; + params.push(id); + db.query(query, params, function (err, resp) { + if (err) { + reject(err); + return false; + } + resolve(resp); + return true; + }); + }); + } - static async update(id, data) { - return new Promise((resolve, reject) => { - const query = `UPDATE t_vehicles SET ? WHERE id = ?;`; - db.getConnection(function (err, conn) { - if (err) { + static async update(id, data) { + return new Promise((resolve, reject) => { + const query = `UPDATE t_vehicles SET ? WHERE id = ?;`; + db.getConnection(function (err, conn) { + if (err) { conn.release(); - reject(err); - return false; - } + reject(err); + return false; + } - conn.beginTransaction(async function (err) { - if (err) { + conn.beginTransaction(async function (err) { + if (err) { conn.release(); - reject(err); - return false; - } - conn.query(query, [data, id], function (err, resp) { - if (err) { - conn.rollback(async function () { - conn.release(); - reject(err.message); - }); - return false; - } - conn.commit(async function (err) { - if (err) { + reject(err); + return false; + } + conn.query(query, [data, id], function (err, resp) { + if (err) { + conn.rollback(async function () { conn.release(); - reject(err); - return false; - } - conn.release(); - resolve(resp); - return true; - }); - }); - }); - - }); - }); - } - + reject(err.message); + }); + return false; + } + conn.commit(async function (err) { + if (err) { + conn.release(); + reject(err); + return false; + } + conn.release(); + resolve(resp); + return true; + }); + }); + }); + }); + }); + } + static async incrementMileage(vhc_id, add_km) { + return new Promise((resolve, reject) => { + const query = ` + UPDATE t_vehicles + SET sum_milleage = COALESCE(sum_milleage, 0) + ? + WHERE id = ? AND dlt IS NULL + `; + db.query(query, [add_km, vhc_id], (err, result) => { + if (err) return reject(err); + resolve(result); + }); + }); + } } -module.exports = VhcModels; \ No newline at end of file +module.exports = VhcModels;