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, }; } };