diff --git a/controllers/ListenController.js b/controllers/ListenController.js index 07cf7c5..5f176f5 100644 --- a/controllers/ListenController.js +++ b/controllers/ListenController.js @@ -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])) diff --git a/models/GpsTracksModels.js b/models/GpsTracksModels.js index 53901ec..3cab0c6 100755 --- a/models/GpsTracksModels.js +++ b/models/GpsTracksModels.js @@ -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 =