Files
gps-backend/workers/DrvUpLocIdleWorker.js
2025-05-29 08:59:40 +00:00

116 lines
4.2 KiB
JavaScript
Executable File

const SandboxedJobMQ = require('bullmq').SandboxedJob;
const moment = require('moment');
const LibWinston = require('../library/LibWinston');
const LibFirebase = require('../library/LibFirebase');
const OrdersModels = require('../models/OrdersModels');
const DriversModels = require('../models/DriversModels');
const OrdersPckDropsModels = require('../models/OrdersPckDropsModels');
// const GpsTracksModels = require('../models/GpsTracksModels');
const schedulerName = process.env.REDIS_SCHEDULER_DRV_UP_LOC_IDLE;
const Logger = LibWinston.initialize(schedulerName);
module.exports = async (job) => {
try {
Logger.log('info', `${schedulerName} running: ${JSON.stringify(job.opts)}`);
/**
* semua non-aktif order dan driver sedang login
* get last t_gps_tracks by drv_id
* jika crt_d > 2 hour => send notif
*/
const libFirebase = new LibFirebase();
let notifTitle = 'Notifikasi Cek Lokasi'; // up location
let notifBody = 'Harap Dihiraukan'; // up location
// (async function() {
try {
async function checkNotifNLogs(job) {
libFirebase.sendToDevice(job.drv_fcm_token, {
// notification: {
// title: notifTitle,
// body: notifBody,
// },
data: {
title: notifTitle,
body: notifBody,
type: '' + LibFirebase.upLocIdle,
detail_id: '',
content_available: 'true',
}
}, {
priority: 'high', // to apple: normal(5), high(10)
android: {
priority: 'high', // to anroid: low(?). normal(5), high(10)
},
content_available: true,
click_action: 'FLUTTER_NOTIFICATION_CLICK',
});
}
let loop = process.env.SCHEDULE_DRV_UP_LOC_IDLE_MAX_LOOP;
for (let x = 0; x < loop; x++) {
// all active order
const activeJobs = await OrdersModels.listOrders({
is_active: OrdersModels.IS_ACTIVE,
delivery_statuses: [
OrdersPckDropsModels.STTS_DELIVERY_OTW_PICKUP,OrdersPckDropsModels.STTS_DELIVERY_ARRIVED_PICKUP,OrdersPckDropsModels.STTS_DELIVERY_PROCESS_PICKUP
,OrdersPckDropsModels.STTS_DELIVERY_FINISH_PICKUP,OrdersPckDropsModels.STTS_DELIVERY_TRAVEL_DOC,OrdersPckDropsModels.STTS_DELIVERY_OTW_DROP
,OrdersPckDropsModels.STTS_DELIVERY_ARRIVED_DROP,OrdersPckDropsModels.STTS_DELIVERY_PROCESS_DROP,OrdersPckDropsModels.STTS_DELIVERY_FINISH_DROP
// ,OrdersPckDropsModels.STTS_DELIVERY_HANDOVER_DOC
],
couple_pck_drop: 1,
inner_join_phone_devices: 1,
phone_devices_is_login: DriversModels.IS_LOGIN,
last_tracks_phone_drv: 1,
group_by: 'GROUP BY ord_drv.drv_id',
});
const drvs = [];
for (const job of activeJobs) {
drvs[job.drv_id] = job;
}
// all inactive order
const inactiveJobs = await OrdersModels.listOrders({
// is_active: OrdersModels.IS_ACTIVE,
delivery_statuses: [OrdersPckDropsModels.STTS_DELIVERY_HANDOVER_DOC],
couple_pck_drop: 1,
inner_join_phone_devices: 1,
phone_devices_is_login: DriversModels.IS_LOGIN,
last_tracks_phone_drv: 1,
group_by: 'GROUP BY ord_drv.drv_id',
});
for (const job of inactiveJobs) {
// baru ketembak notif, minimal ada 1x update lokasi
if (job.drv_fcm_token && job.tr_crt_d && job.tr_crt_d != 0) {
// if the driver id not in active order
if (typeof drvs[job.drv_id] === 'undefined') {
await checkNotifNLogs(job);
}
}
// ketembak notif jika belum pernah ada update lokasi samsek
else {
await checkNotifNLogs(job);
}
}
}
} catch (e) {
console.error(e);
Logger.log('error', `${schedulerName} error: ${JSON.stringify(e)}`);
}
// })();
return {
type: 'success',
message: 'success run scheduler drv up idle location',
data: null,
};
} catch (e) {
return {
type: 'error',
message: e.message,
e: e,
};
}
};