This commit is contained in:
pringgosutono
2026-03-02 16:25:26 +07:00
parent add661e8c9
commit 69bf7a31e8
2 changed files with 272 additions and 105 deletions

View File

@ -24,7 +24,17 @@ async function commitMessage(now, logDevice) {
}
const vhc = await VhcModels.getVhcByDeviceId(logDevice.device_id)
const lastTrack = await GpsTracksModels.get2LastLocByDeviceId(logDevice.device_id)
// const lastTrack = await GpsTracksModels.get2LastLocByDeviceId(logDevice.device_id)
let lastTrack
if (vhc.length > 0)
lastTrack = await GpsTracksModels.get2LastLocByVhcId(vhc[0].vid)
else
lastTrack = await GpsTracksModels.get2LastLocByDeviceId(
logDevice.device_id,
)
if (logDevice.device_id == "0353742374791143")
console.log("vhc", vhc, lastTrack)
if (["heartbeat", "alarm"].includes(logDevice.action)) {
if (logDevice.ignition == GpsTracksModels.STTS_IGNITION_HIGH) {
@ -32,13 +42,15 @@ async function commitMessage(now, logDevice) {
logDevice.stts_engine = GpsTracksModels.STTS_EN_MOVING
} else {
if (lastTrack.length > 0) {
const checkLastHeartbeat = await GpsTracksModels.getLastHeartbeatToDeterminIdling(
logDevice.device_id,
lastTrack[0].crt,
now
)
const checkLastHeartbeat =
await GpsTracksModels.getLastHeartbeatToDeterminIdling(
logDevice.device_id,
lastTrack[0].crt,
now,
)
if (checkLastHeartbeat.length >= 3) {
logDevice.stts_engine = GpsTracksModels.STTS_EN_IDLING
logDevice.stts_engine =
GpsTracksModels.STTS_EN_IDLING
} else {
logDevice.stts_engine = lastTrack[0].stts_engine
}
@ -51,12 +63,16 @@ async function commitMessage(now, logDevice) {
if (["location"].includes(logDevice.action)) {
// console.log(logDevice.device_id + " : 1")
const lastHeartbeatOrAlarm = await GpsTracksModels.get2LastHeartbeatOrAlarm(logDevice.device_id)
const lastHeartbeatOrAlarm =
await GpsTracksModels.get2LastHeartbeatOrAlarm(
logDevice.device_id,
)
if (lastHeartbeatOrAlarm.length > 0) {
logDevice.ignition = lastHeartbeatOrAlarm[0].ignition
logDevice.stts_gps = lastHeartbeatOrAlarm[0].stts_gps
logDevice.stts_gsm = lastHeartbeatOrAlarm[0].stts_gsm
logDevice.stts_oil_electricity = lastHeartbeatOrAlarm[0].stts_oil_electricity
logDevice.stts_oil_electricity =
lastHeartbeatOrAlarm[0].stts_oil_electricity
logDevice.stts_alarm = lastHeartbeatOrAlarm[0].stts_alarm
logDevice.stts_charge = lastHeartbeatOrAlarm[0].stts_charge
logDevice.stts_acc = lastHeartbeatOrAlarm[0].stts_acc
@ -66,7 +82,8 @@ async function commitMessage(now, logDevice) {
logDevice.ignition = logDevice.ignition || 0
logDevice.stts_gps = logDevice.stts_gps || 0
logDevice.stts_gsm = logDevice.stts_gsm || 0
logDevice.stts_oil_electricity = logDevice.stts_oil_electricity || 0
logDevice.stts_oil_electricity =
logDevice.stts_oil_electricity || 0
logDevice.stts_alarm = logDevice.stts_alarm || 0
logDevice.stts_charge = logDevice.stts_charge || 0
logDevice.stts_acc = logDevice.stts_acc || 0
@ -79,13 +96,15 @@ async function commitMessage(now, logDevice) {
logDevice.stts_engine = GpsTracksModels.STTS_EN_MOVING
} else {
if (lastTrack.length > 0) {
const checkLastHeartbeat = await GpsTracksModels.getLastHeartbeatToDeterminIdling(
logDevice.device_id,
lastTrack[0].crt,
now
)
const checkLastHeartbeat =
await GpsTracksModels.getLastHeartbeatToDeterminIdling(
logDevice.device_id,
lastTrack[0].crt,
now,
)
if (checkLastHeartbeat.length >= 3) {
logDevice.stts_engine = GpsTracksModels.STTS_EN_IDLING
logDevice.stts_engine =
GpsTracksModels.STTS_EN_IDLING
} else {
logDevice.stts_engine = lastTrack[0].stts_engine
}
@ -95,7 +114,8 @@ async function commitMessage(now, logDevice) {
} else {
logDevice.stts_engine = GpsTracksModels.STTS_EN_STOPING
}
logDevice.stts_oil_electricity = lastHeartbeatOrAlarm[0]?.stts_oil_electricity || 0
logDevice.stts_oil_electricity =
lastHeartbeatOrAlarm[0]?.stts_oil_electricity || 0
logDevice.stts_alarm = lastHeartbeatOrAlarm[0]?.stts_alarm || 0
logDevice.stts_charge = lastHeartbeatOrAlarm[0]?.stts_charge || 0
logDevice.stts_acc = lastHeartbeatOrAlarm[0]?.stts_acc || 0
@ -111,7 +131,8 @@ async function commitMessage(now, logDevice) {
logDevice.speed = lastTrack[0].speed
logDevice.orientation = lastTrack[0].orientation
if (logDevice.latitude) {
logDevice.stts_reverse_geo = GpsTracksModels.STTS_REVERSE_GEO_NOT
logDevice.stts_reverse_geo =
GpsTracksModels.STTS_REVERSE_GEO_NOT
}
logDevice.length_gps = lastTrack[0].length_gps
@ -126,20 +147,28 @@ async function commitMessage(now, logDevice) {
// logDevice.crt_d_format = lastTrack[0].crt_d_format;
// jika pengen di munculin di last movement
logDevice.crt = now
logDevice.crt_format = moment.unix(now).format("YYYY-MM-DD HH:mm:ss")
logDevice.crt_format = moment
.unix(now)
.format("YYYY-MM-DD HH:mm:ss")
logDevice.crt_d = now
logDevice.crt_d_format = moment.unix(now).format("YYYY-MM-DD HH:mm:ss")
logDevice.crt_d_format = moment
.unix(now)
.format("YYYY-MM-DD HH:mm:ss")
}
}
// count 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
LibHelper.EARTH_RADIUS_KM,
)
const distance_km = LibHelper.kmToKm(distance, 100000000)
// console.log(`GPS TRACKER UP LOCATION => device_id:${logDevice.device_id} vhc_id:${(vhc[0]) ? vhc[0].vid : 0}, distance_km:${distance_km}`);
@ -149,7 +178,9 @@ async function commitMessage(now, logDevice) {
// return false
// }
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) {
logDevice.vhc_id = vhc[0] ? vhc[0].vid : 0
// if (lastTrack[0].vhc_id == logDevice.vhc_id) {
@ -163,9 +194,13 @@ async function commitMessage(now, logDevice) {
// logDevice.vhc_milleage = ((vhc[0] ? vhc[0].sum_milleage : 0) + logDevice.pre_milleage).toFixed(8);
// }
// force mileage dari vechile
logDevice.vhc_milleage = ((vhc[0]?.sum_milleage || 0) + logDevice.pre_milleage).toFixed(8)
logDevice.vhc_milleage = (
(vhc[0]?.sum_milleage || 0) + logDevice.pre_milleage
).toFixed(8)
VhcModels.update(vhc[0] ? vhc[0].vid : 0, { sum_milleage: logDevice.vhc_milleage })
VhcModels.update(vhc[0] ? vhc[0].vid : 0, {
sum_milleage: logDevice.vhc_milleage,
})
}
}
@ -173,10 +208,19 @@ async function commitMessage(now, logDevice) {
if (logDevice.latitude != null && logDevice.longitude != null) {
// && vhc.length > 0
// log tracking
const currTrack = await GpsTracksModels.bundleCreate2(logDevice, logDevice)
const currTrack = await GpsTracksModels.bundleCreate2(
logDevice,
logDevice,
)
// console.log('GT06 HAS LOCATION AND CHECK ZONE');
const inCircle = await ZoneModels.getInCircle(logDevice.latitude, logDevice.longitude)
const inShape = await ZoneModels.getInShape(logDevice.latitude, logDevice.longitude)
const inCircle = await ZoneModels.getInCircle(
logDevice.latitude,
logDevice.longitude,
)
const inShape = await ZoneModels.getInShape(
logDevice.latitude,
logDevice.longitude,
)
const insideSpawnZone = []
for (let zone of inCircle) {
insideSpawnZone.push(zone)
@ -202,21 +246,31 @@ async function commitMessage(now, logDevice) {
if (lastSpawn.length > 0) {
let is_leave_zone = 1
for (const insideZone of insideSpawnZone) {
if (insideZone.zid === lastSpawn[0].zone_id) is_leave_zone = 0
if (insideZone.zid === lastSpawn[0].zone_id)
is_leave_zone = 0
}
if (is_leave_zone === 1 && lastSpawn[0].device_id == logDevice.device_id) {
if (
is_leave_zone === 1 &&
lastSpawn[0].device_id == logDevice.device_id
) {
GpsTracksModels.updt2SpawnZone(
{
leave_lat: logDevice.latitude,
leave_lng: logDevice.longitude,
leave_at_d: logDevice.crt_d || now,
leave_at_d_format: moment.unix(logDevice.crt_d || now).format("YYYY-MM-DD HH:mm:ss"),
leave_at_d_format: moment
.unix(logDevice.crt_d || now)
.format("YYYY-MM-DD HH:mm:ss"),
leave_at_s: now,
leave_at_s_format: moment.unix(now).format("YYYY-MM-DD HH:mm:ss"),
leave_at_s_format: moment
.unix(now)
.format("YYYY-MM-DD HH:mm:ss"),
updt: now,
updt_format: moment.unix(now).format("YYYY-MM-DD HH:mm:ss"),
updt_format: moment
.unix(now)
.format("YYYY-MM-DD HH:mm:ss"),
},
lastSpawn[0].id
lastSpawn[0].id,
)
}
} else {
@ -235,28 +289,38 @@ async function commitMessage(now, logDevice) {
(vhc[0] ? vhc[0].nopol3 : 0 || ""),
da_name: vhc[0] ? vhc[0].da_name : 0 || "",
da_phone:
"+" + (vhc[0] ? vhc[0].da_phone_code : 0 || "") + (vhc[0] ? vhc[0].da_phone : 0 || ""),
"+" +
(vhc[0] ? vhc[0].da_phone_code : 0 || "") +
(vhc[0] ? vhc[0].da_phone : 0 || ""),
}
// LibMail.sendVhcSpawnZoneMail(`${(vhc[0]) ? vhc[0].nopol1 : 0 || ''}${(vhc[0]) ? vhc[0].nopol2 : 0 || ''}${(vhc[0]) ? vhc[0].nopol3 : 0 || ''} entering zone ${mailData.z_name}`, mailData.pic_mail, mailData);
if (logDevice.device_id === "0865784052395871") console.log(1234567890)
if (logDevice.device_id === "0865784052395871")
console.log(1234567890)
GpsTracksModels.create2SpawnZone({
device_id: logDevice.device_id,
master_id: Number(currTrack.result.insertId),
enter_lat: logDevice.latitude,
enter_lng: logDevice.longitude,
enter_at_d: logDevice.crt_d || now,
enter_at_d_format: moment.unix(logDevice.crt_d || now).format("YYYY-MM-DD HH:mm:ss"),
enter_at_d_format: moment
.unix(logDevice.crt_d || now)
.format("YYYY-MM-DD HH:mm:ss"),
enter_at_s: now,
enter_at_s_format: moment.unix(now).format("YYYY-MM-DD HH:mm:ss"),
enter_at_s_format: moment
.unix(now)
.format("YYYY-MM-DD HH:mm:ss"),
zone_id: zone.zid,
zone_name: zone.name,
vhc_id: vhc[0] ? vhc[0].vid : 0,
source: GpsTracksModels.SOURCE_GPS_TRACKER,
crt: now,
crt_format: moment.unix(now).format("YYYY-MM-DD HH:mm:ss"),
crt_format: moment
.unix(now)
.format("YYYY-MM-DD HH:mm:ss"),
})
if (logDevice.device_id === "0865784052395871") console.log("DISINI")
if (logDevice.device_id === "0865784052395871")
console.log("DISINI")
}
}
} else {
@ -280,7 +344,8 @@ class ListenController {
const logDevice = {
original_hex: me.ori_string,
protocol: me.protocol_name == "unknown" ? null : me.protocol_name,
protocol:
me.protocol_name == "unknown" ? null : me.protocol_name,
action: null,
device_id: null,
latitude: null,
@ -330,10 +395,13 @@ class ListenController {
logDevice.speed = act.gps_data.speed
logDevice.orientation = act.gps_data.orientation
if (logDevice.latitude) {
logDevice.stts_reverse_geo = GpsTracksModels.STTS_REVERSE_GEO_NOT
logDevice.stts_reverse_geo =
GpsTracksModels.STTS_REVERSE_GEO_NOT
}
logDevice.length_gps = act.gps_data.quantity_pos_satellites_c
logDevice.pos_stlt_gps = act.gps_data.quantity_pos_satellites_b
logDevice.length_gps =
act.gps_data.quantity_pos_satellites_c
logDevice.pos_stlt_gps =
act.gps_data.quantity_pos_satellites_b
logDevice.pos_type_gps =
Number(act.gps_data.realtime_dif_gps) === 0
? GpsTracksModels.STTS_POS_TYPE_GPS_RLTM
@ -342,21 +410,28 @@ class ListenController {
? GpsTracksModels.STTS_IS_POS_GPS_HAS
: GpsTracksModels.STTS_IS_POS_GPS_NOT
logDevice.crt = moment(act.gps_data.date).unix()
logDevice.crt_format = moment(act.gps_data.date).format("YYYY-MM-DD HH:mm:ss")
logDevice.crt_format = moment(act.gps_data.date).format(
"YYYY-MM-DD HH:mm:ss",
)
logDevice.crt_d = moment(act.gps_data.date).unix()
logDevice.crt_d_format = moment(act.gps_data.date).format("YYYY-MM-DD HH:mm:ss")
logDevice.crt_d_format = moment(act.gps_data.date).format(
"YYYY-MM-DD HH:mm:ss",
)
} else if (act.action_type == "heartbeat") {
logDevice.action = act.action_type
logDevice.device_id = act.device_id
logDevice.ignition = Number(act.stts_data.terminal_info.acc)
? GpsTracksModels.STTS_IGNITION_HIGH
: GpsTracksModels.STTS_IGNITION_LOW
logDevice.stts_gps = act.stts_data.terminal_info.gps_tracking
logDevice.stts_gps = act.stts_data.terminal_info
.gps_tracking
? GpsTracksModels.STTS_GPS_ON
: GpsTracksModels.STTS_GPS_OFF
logDevice.stts_gsm = Number(act.stts_data.gsm_signal_strength) + 1
logDevice.stts_gsm =
Number(act.stts_data.gsm_signal_strength) + 1
logDevice.stts_oil_electricity =
Number(act.stts_data.terminal_info.oil_electricity) === 0
Number(act.stts_data.terminal_info.oil_electricity) ===
0
? GpsTracksModels.STTS_OIL_ELECTRIC_ON
: GpsTracksModels.STTS_OIL_ELECTRIC_OFF
@ -365,23 +440,28 @@ class ListenController {
stts_alarm === 1
? GpsTracksModels.STTS_ALARM_SHOCK
: stts_alarm === 2
? GpsTracksModels.STTS_ALARM_POWER_CUT
: stts_alarm === 3
? GpsTracksModels.STTS_ALARM_LOW_BATTERY
: stts_alarm === 4
? GpsTracksModels.STTS_ALARM_SOS
: GpsTracksModels.STTS_ALARM_NORMAL
? GpsTracksModels.STTS_ALARM_POWER_CUT
: stts_alarm === 3
? GpsTracksModels.STTS_ALARM_LOW_BATTERY
: stts_alarm === 4
? GpsTracksModels.STTS_ALARM_SOS
: GpsTracksModels.STTS_ALARM_NORMAL
logDevice.stts_charge = Number(act.stts_data.terminal_info.charge)
logDevice.stts_charge = Number(
act.stts_data.terminal_info.charge,
)
? GpsTracksModels.STTS_CHARGE_ON
: GpsTracksModels.STTS_CHARGE_OFF
logDevice.stts_acc = Number(act.stts_data.terminal_info.acc)
? GpsTracksModels.STTS_ACC_HIGH
: GpsTracksModels.STTS_ACC_LOW
logDevice.stts_switch = Number(act.stts_data.terminal_info.is_active)
logDevice.stts_switch = Number(
act.stts_data.terminal_info.is_active,
)
? GpsTracksModels.STTS_SWITCH_ON
: GpsTracksModels.STTS_SWITCH_OFF
logDevice.stts_volt = Number(act.stts_data.voltage_level) + 1
logDevice.stts_volt =
Number(act.stts_data.voltage_level) + 1
} else if (act.action_type == "alarm") {
logDevice.action = act.action_type
logDevice.device_id = act.device_id
@ -390,10 +470,13 @@ class ListenController {
logDevice.speed = act.gps_data.speed
logDevice.orientation = act.gps_data.orientation
if (logDevice.latitude) {
logDevice.stts_reverse_geo = GpsTracksModels.STTS_REVERSE_GEO_NOT
logDevice.stts_reverse_geo =
GpsTracksModels.STTS_REVERSE_GEO_NOT
}
logDevice.length_gps = act.gps_data.quantity_pos_satellites_c
logDevice.pos_stlt_gps = act.gps_data.quantity_pos_satellites_b
logDevice.length_gps =
act.gps_data.quantity_pos_satellites_c
logDevice.pos_stlt_gps =
act.gps_data.quantity_pos_satellites_b
logDevice.pos_type_gps =
Number(act.gps_data.realtime_dif_gps) === 0
? GpsTracksModels.STTS_POS_TYPE_GPS_RLTM
@ -404,12 +487,15 @@ class ListenController {
logDevice.ignition = Number(act.stts_data.terminal_info.acc)
? GpsTracksModels.STTS_IGNITION_HIGH
: GpsTracksModels.STTS_IGNITION_LOW
logDevice.stts_gps = act.stts_data.terminal_info.gps_tracking
logDevice.stts_gps = act.stts_data.terminal_info
.gps_tracking
? GpsTracksModels.STTS_GPS_ON
: GpsTracksModels.STTS_GPS_OFF
logDevice.stts_gsm = Number(act.stts_data.gsm_signal_strength) + 1
logDevice.stts_gsm =
Number(act.stts_data.gsm_signal_strength) + 1
logDevice.stts_oil_electricity =
Number(act.stts_data.terminal_info.oil_electricity) === 0
Number(act.stts_data.terminal_info.oil_electricity) ===
0
? GpsTracksModels.STTS_OIL_ELECTRIC_ON
: GpsTracksModels.STTS_OIL_ELECTRIC_OFF
@ -418,27 +504,36 @@ class ListenController {
stts_alarm === 1
? GpsTracksModels.STTS_ALARM_SHOCK
: stts_alarm === 2
? GpsTracksModels.STTS_ALARM_POWER_CUT
: stts_alarm === 3
? GpsTracksModels.STTS_ALARM_LOW_BATTERY
: stts_alarm === 4
? GpsTracksModels.STTS_ALARM_SOS
: GpsTracksModels.STTS_ALARM_NORMAL
? GpsTracksModels.STTS_ALARM_POWER_CUT
: stts_alarm === 3
? GpsTracksModels.STTS_ALARM_LOW_BATTERY
: stts_alarm === 4
? GpsTracksModels.STTS_ALARM_SOS
: GpsTracksModels.STTS_ALARM_NORMAL
logDevice.stts_charge = Number(act.stts_data.terminal_info.charge)
logDevice.stts_charge = Number(
act.stts_data.terminal_info.charge,
)
? GpsTracksModels.STTS_CHARGE_ON
: GpsTracksModels.STTS_CHARGE_OFF
logDevice.stts_acc = Number(act.stts_data.terminal_info.acc)
? GpsTracksModels.STTS_ACC_HIGH
: GpsTracksModels.STTS_ACC_LOW
logDevice.stts_switch = Number(act.stts_data.terminal_info.is_active)
logDevice.stts_switch = Number(
act.stts_data.terminal_info.is_active,
)
? GpsTracksModels.STTS_SWITCH_ON
: GpsTracksModels.STTS_SWITCH_OFF
logDevice.stts_volt = Number(act.stts_data.voltage_level) + 1
logDevice.stts_volt =
Number(act.stts_data.voltage_level) + 1
logDevice.crt = moment(act.gps_data.date).unix()
logDevice.crt_format = moment(act.gps_data.date).format("YYYY-MM-DD HH:mm:ss")
logDevice.crt_format = moment(act.gps_data.date).format(
"YYYY-MM-DD HH:mm:ss",
)
logDevice.crt_d = moment(act.gps_data.date).unix()
logDevice.crt_d_format = moment(act.gps_data.date).format("YYYY-MM-DD HH:mm:ss")
logDevice.crt_d_format = moment(act.gps_data.date).format(
"YYYY-MM-DD HH:mm:ss",
)
} else {
logDevice.action = act.action_type
logDevice.device_id = act.device_id
@ -477,15 +572,27 @@ class ListenController {
let countInserted = 0
for (const rec of records) {
// console.log("rec ====> ", rec)
const timestamp_device = Math.floor(rec.gnss.timestamp / 1000) - 25200
const timestamp_device =
Math.floor(rec.gnss.timestamp / 1000) - 25200
// avoid duplicate timestamp
if (previousCrtD == timestamp_device) continue
previousCrtD = timestamp_device
const lastTrack = (await GpsTracksModels.get2LastLocByDeviceId(imei))?.[0]
const lastTrack = (
await GpsTracksModels.get2LastLocByDeviceId(imei)
)?.[0]
const isSleepMode = rec.io["Sleep Mode"] == 0 ? false : true
const isMoreThan1Min = lastTrack ? (timestamp_device - lastTrack.crt_d >= 60 ? true : false) : true
if (!isMoreThan1Min && lastTrack.speed === 0 && rec.gnss.speed === 0) continue // avoid duplicate stationary log
const isMoreThan1Min = lastTrack
? timestamp_device - lastTrack.crt_d >= 60
? true
: false
: true
if (
!isMoreThan1Min &&
lastTrack.speed === 0 &&
rec.gnss.speed === 0
)
continue // avoid duplicate stationary log
const now = moment().unix()
const logDevice = {
@ -497,7 +604,9 @@ class ListenController {
longitude: rec.gnss.longitude || null,
speed: rec.gnss.speed || 0,
orientation: rec.gnss.angle || 0,
ignition: rec.io.Ignition ? GpsTracksModels.STTS_IGNITION_HIGH : GpsTracksModels.STTS_IGNITION_LOW,
ignition: rec.io.Ignition
? GpsTracksModels.STTS_IGNITION_HIGH
: GpsTracksModels.STTS_IGNITION_LOW,
stts_engine: 0,
stts_gps: rec.gnss.satellites || 0,
length_gps: 0,
@ -521,10 +630,17 @@ class ListenController {
crt_format: moment.unix(now).format("YYYY-MM-DD HH:mm:ss"),
// minus 7 hours -- ngikutin data gt06 biar sinkron
crt_d: timestamp_device,
crt_d_format: moment.unix(timestamp_device).format("YYYY-MM-DD HH:mm:ss"),
crt_d_format: moment
.unix(timestamp_device)
.format("YYYY-MM-DD HH:mm:ss"),
crt_s: now,
crt_s_format: moment.unix(now).format("YYYY-MM-DD HH:mm:ss"),
fuel_curr: !rec.io["Fuel Level"] && isSleepMode ? lastTrack?.fuel_curr : rec.io["Fuel Level"] || 0,
crt_s_format: moment
.unix(now)
.format("YYYY-MM-DD HH:mm:ss"),
fuel_curr:
!rec.io["Fuel Level"] && isSleepMode
? lastTrack?.fuel_curr
: rec.io["Fuel Level"] || 0,
fuel_count:
!rec.io["Fuel Consumed (counted)"] && isSleepMode
? lastTrack?.fuel_count
@ -540,7 +656,11 @@ class ListenController {
apiRes = JSON.parse(JSON.stringify(response[200]))
apiRes.meta.message = "success"
apiRes.data = { device_imei: imei, records_received: records.length, records_inserted: countInserted }
apiRes.data = {
device_imei: imei,
records_received: records.length,
records_inserted: countInserted,
}
return res.status(200).json(apiRes)
} catch (err) {
console.error("❌ error:", err.message)
@ -565,7 +685,9 @@ class ListenController {
const data = req.body
const now = moment().unix()
const vhc_id = (await VhcModels.getVhcByDeviceId(data.imei.padStart(16, "0")))?.[0]?.vid
const vhc_id = (
await VhcModels.getVhcByDeviceId(data.imei.padStart(16, "0"))
)?.[0]?.vid
if (!vhc_id) {
apiRes = JSON.parse(JSON.stringify(response[422]))
apiRes.meta.message = "Device ID not registered to any vehicle"
@ -595,7 +717,14 @@ class ListenController {
image = new.image,
filename = new.filename
`
const insD = [vhc_id, data.picture_at, data.cam, data.file.filename, data.file.url, now]
const insD = [
vhc_id,
data.picture_at,
data.cam,
data.file.filename,
data.file.url,
now,
]
const insR = await db.query(insQ, insD)
apiRes = JSON.parse(JSON.stringify(response[200]))

View File

@ -144,7 +144,11 @@ class GpsTracksModels {
let resLogs = undefined
if (Object.keys(logs).length > 0) {
resLogs = await MysqlHelpers.queryTrx(conn, `INSERT INTO t_gps_tracks SET ?;`, [logs])
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") {
@ -158,52 +162,63 @@ class GpsTracksModels {
INSERT INTO tracks_${yy}${mm}
SET ?
`,
[logs]
[logs],
)
// 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) {
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]
[rltm.device_id],
)
if (devices.length > 1)
await MysqlHelpers.queryTrx(conn, `DELETE from t_gps_tracks_rltm WHERE device_id = ?;`, [
rltm.device_id,
])
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]
[rltm.vhc_id],
)
if (vhcs.length > 1)
await MysqlHelpers.queryTrx(conn, `DELETE from t_gps_tracks_rltm WHERE vhc_id = ?;`, [
rltm.vhc_id,
])
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]
[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,
`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]
[rltm, rltm],
)
}
@ -264,7 +279,8 @@ class GpsTracksModels {
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"
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) {
@ -294,6 +310,23 @@ class GpsTracksModels {
})
})
}
static async get2LastLocByVhcId(vhc_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 vhc_id = ? AND latitude is not null AND longitude != 0 ORDER BY id DESC LIMIT 1' // kalo gamau ngambil data heartbeat(idling)
params.push(vhc_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) => {
@ -377,7 +410,12 @@ class GpsTracksModels {
})
}
static async checkSttsEngineBetweenDate(device_id, stts_engine, start, end) {
static async checkSttsEngineBetweenDate(
device_id,
stts_engine,
start,
end,
) {
return new Promise((resolve, reject) => {
let params = []
let query =