This commit is contained in:
meusinfirmary
2025-07-01 15:30:14 +07:00
parent fd0eb59f24
commit d4e31ab688
3 changed files with 657 additions and 605 deletions

32
app.js
View File

@ -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) { 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 = LibHelper.haversineGreatCircleDistance(lastTrack[0].latitude, lastTrack[0].longitude, logDevice.latitude, logDevice.longitude, LibHelper.EARTH_RADIUS_KM);
const distance_km = LibHelper.kmToKm(distance, 100000000); const distance_km = LibHelper.kmToKm(distance, 100000000);
@ -117,13 +138,10 @@ async function commitMessage(now, logDevice) {
logDevice.pre_milleage = distance_km; logDevice.pre_milleage = distance_km;
logDevice.sum_milleage = (lastTrack[0].sum_milleage + logDevice.pre_milleage).toFixed(8); logDevice.sum_milleage = (lastTrack[0].sum_milleage + logDevice.pre_milleage).toFixed(8);
if (vhc.length > 0) { if (vhc.length > 0) {
logDevice.vhc_id = vhc[0] ? vhc[0].vid : 0; logDevice.vhc_id = vhc[0].vid;
if (lastTrack[0].vhc_id == logDevice.vhc_id) { const increment = parseFloat(logDevice.pre_milleage || 0);
logDevice.vhc_milleage = (lastTrack[0].vhc_milleage + logDevice.pre_milleage).toFixed(8);
} else { await VhcModels.incrementMileage(vhc[0].vid, increment);
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 });
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,101 +1,111 @@
const db = require(`../config/dbMysqlConn`); const db = require(`../config/dbMysqlConn`);
class VhcModels { class VhcModels {
static STTS_ACTIVE = 1;
static STTS_INACTIVE = 2;
static STTS_ACTIVE = 1; static IN_ORD_YES = 1;
static STTS_INACTIVE = 2;
static IN_ORD_YES = 1;
static IN_ORD_NO = 2; static IN_ORD_NO = 2;
static async getVhcByDeviceId(device_id) { static async getVhcByDeviceId(device_id) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let params = []; let params = [];
let query = 'SELECT'; let query = "SELECT";
query += ' v.id as vid,v.nopol1,v.nopol2,v.nopol3,v.sum_milleage,vd.speed_limit'; 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 += " ,da.fullname as da_name,da.phone as da_phone,da.phone_code as da_phone_code";
query += ' FROM t_vehicles AS v'; query += " FROM t_vehicles AS v";
query += ' INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid'; 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 += " 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 = ?'; query += " WHERE v.dlt is null AND v.status = ? AND v.device_id = ?";
params.push(VhcModels.STTS_ACTIVE, device_id); params.push(VhcModels.STTS_ACTIVE, device_id);
db.query(query, params, function (err, resp) { db.query(query, params, function (err, resp) {
if (err) { if (err) {
reject(err); reject(err);
return false; return false;
} }
resolve(resp); resolve(resp);
return true; return true;
}); });
}); });
} }
static async getVhcById(id) { static async getVhcById(id) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let params = []; let params = [];
let query = 'SELECT'; let query = "SELECT";
query += ' v.id as vid,v.nopol1,v.nopol2,v.nopol3,v.sum_milleage,vd.speed_limit'; 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 += " ,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 += " ,v.is_in_ord,v.ord_id,v.ord_code,v.ord_ids";
query += ' FROM t_vehicles AS v'; query += " FROM t_vehicles AS v";
query += ' INNER JOIN t_vehicles_detail AS vd ON v.id = vd.vid'; 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 += " 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.status = ? AND v.id = ?';
query += ' WHERE v.dlt is null AND v.id = ?'; query += " WHERE v.dlt is null AND v.id = ?";
query += ' LIMIT 1'; query += " LIMIT 1";
params.push(id); params.push(id);
db.query(query, params, function (err, resp) { db.query(query, params, function (err, resp) {
if (err) { if (err) {
reject(err); reject(err);
return false; return false;
} }
resolve(resp); resolve(resp);
return true; return true;
}); });
}); });
} }
static async update(id, data) { static async update(id, data) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const query = `UPDATE t_vehicles SET ? WHERE id = ?;`; const query = `UPDATE t_vehicles SET ? WHERE id = ?;`;
db.getConnection(function (err, conn) { db.getConnection(function (err, conn) {
if (err) { if (err) {
conn.release(); conn.release();
reject(err); reject(err);
return false; return false;
} }
conn.beginTransaction(async function (err) { conn.beginTransaction(async function (err) {
if (err) { if (err) {
conn.release(); conn.release();
reject(err); reject(err);
return false; return false;
} }
conn.query(query, [data, id], function (err, resp) { conn.query(query, [data, id], function (err, resp) {
if (err) { if (err) {
conn.rollback(async function () { conn.rollback(async function () {
conn.release();
reject(err.message);
});
return false;
}
conn.commit(async function (err) {
if (err) {
conn.release(); conn.release();
reject(err); reject(err.message);
return false; });
} return false;
conn.release(); }
resolve(resp); conn.commit(async function (err) {
return true; 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; module.exports = VhcModels;