Initial commit
This commit is contained in:
596
models/GpsTracksModels.js
Normal file
596
models/GpsTracksModels.js
Normal file
@ -0,0 +1,596 @@
|
||||
const db = require(`../config/dbMysqlConn`);
|
||||
const MysqlHelpers = require(`../library/LibMysqlHelper`);
|
||||
|
||||
class GpsTracksModels {
|
||||
|
||||
static DEFAULT_COUNTRY_ID = 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_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_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;
|
||||
|
||||
// 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;
|
||||
|
||||
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_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_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_SWITCH_DFT = 0;
|
||||
static STTS_SWITCH_OFF = 1;
|
||||
static STTS_SWITCH_ON = 2;
|
||||
|
||||
static STTS_ENTER_ZONE = 1;
|
||||
static STTS_LEAVE_ZONE = 2;
|
||||
|
||||
// type source
|
||||
static SOURCE_GPS_TRACKER = 1;
|
||||
static SOURCE_SMARTPHONE = 2;
|
||||
|
||||
static PROTOCOL_SMARTPHONE = 'smartphone';
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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) {
|
||||
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);
|
||||
|
||||
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 (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.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.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 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 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 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;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
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']);
|
||||
}
|
||||
|
||||
if (typeof filter['limit'] !== 'undefined') {
|
||||
limit += ' LIMIT ?';
|
||||
params.push(filter['limit']);
|
||||
}
|
||||
|
||||
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 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 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) {
|
||||
conn.release();
|
||||
reject(err);
|
||||
return false;
|
||||
}
|
||||
|
||||
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) {
|
||||
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 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;
|
||||
}
|
||||
|
||||
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) {
|
||||
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) {
|
||||
conn.release();
|
||||
reject(err);
|
||||
return false;
|
||||
}
|
||||
|
||||
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) {
|
||||
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) {
|
||||
conn.release();
|
||||
reject(err);
|
||||
return false;
|
||||
}
|
||||
|
||||
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) {
|
||||
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 = '';
|
||||
|
||||
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'];
|
||||
}
|
||||
|
||||
let query = `SELECT
|
||||
spawn.*
|
||||
${select}
|
||||
FROM t_gps_tracks_spawn as spawn
|
||||
${join}
|
||||
WHERE spawn.master_id != 0
|
||||
${where}
|
||||
${group_by}
|
||||
${order_by}
|
||||
${limit}
|
||||
;`;
|
||||
db.query(query, params, function (err, resp) {
|
||||
if (err) {
|
||||
reject(err);
|
||||
return false;
|
||||
}
|
||||
resolve(resp);
|
||||
return true;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = GpsTracksModels;
|
||||
Reference in New Issue
Block a user