107 lines
4.1 KiB
JavaScript
Executable File
107 lines
4.1 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_PHOTO;
|
|
const Logger = LibWinston.initialize(schedulerName);
|
|
|
|
module.exports = async (job) => {
|
|
try {
|
|
Logger.log('info', `${schedulerName} running: ${JSON.stringify(job.opts)}`);
|
|
/**
|
|
* cek apakah ord_pck_drop.stts(status_delivery) === OrdersPckDropsModels.STTS_DELIVERY_FINISH_PICKUP
|
|
* jika iya dan sudah upload menu_travel_document maka kendaraan sedang dalam perjalanan ke lokasi drop
|
|
* cek apakah ord_pck_drop.stts(status_delivery) === OrdersPckDropsModels.STTS_DELIVERY_OTW_DROP
|
|
* jika iya dan ord_pck_drop.drv_app_lock_menu_otw_drop_at === 0 maka kendaraan masih dalam perjalanan ke lokasi drop
|
|
*/
|
|
|
|
const libFirebase = new LibFirebase();
|
|
let notifTitle = 'Notifikasi Cek Photo Saat diperjalanan'; // 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.upPhotoOtwDrop,
|
|
detail_id: '' + job.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_PHOTO_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_DROP
|
|
],
|
|
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',
|
|
});
|
|
|
|
let hadSends = [];
|
|
for (const job of activeJobs) {
|
|
// baru ketembak notif, minimal ada 1x update lokasi
|
|
if (job.drv_fcm_token && job.tr_crt_d && job.tr_crt_d != 0) {
|
|
if (job.drv_app_lock_menu_otw_drop_at !== 0) continue;
|
|
if (hadSends.includes(job.drv_id)) continue;
|
|
// more than 2 hour
|
|
let start = moment();
|
|
let end = moment.unix(job.tr_crt_d);
|
|
let duration = moment.duration(start.diff(end));
|
|
if (duration.asHours() >= 2) {
|
|
hadSends.push(job.drv_id);
|
|
job.detail_id = Buffer.from(`${job.ord_id}_${job.ord_pck_id}_${job.ord_drop_id}_${job.ord_pck_drop_id}`, 'ascii').toString('hex');
|
|
await checkNotifNLogs(job);
|
|
}
|
|
}
|
|
// ketembak notif jika belum pernah ada update lokasi samsek
|
|
else {
|
|
job.detail_id = Buffer.from(`${job.ord_id}_${job.ord_pck_id}_${job.ord_drop_id}_${job.ord_pck_drop_id}`, 'ascii').toString('hex');
|
|
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 photo',
|
|
data: null,
|
|
};
|
|
} catch (e) {
|
|
return {
|
|
type: 'error',
|
|
message: e.message,
|
|
e: e,
|
|
};
|
|
}
|
|
}; |