Initial commit
This commit is contained in:
137
workers/DrvUpLocWorker.js
Normal file
137
workers/DrvUpLocWorker.js
Normal file
@ -0,0 +1,137 @@
|
||||
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 LogsSchNotifModels = require('../models/LogsSchNotifModels');
|
||||
// const GpsTracksModels = require('../models/GpsTracksModels');
|
||||
|
||||
const schedulerName = process.env.REDIS_SCHEDULER_DRV_UP_LOC;
|
||||
const Logger = LibWinston.initialize(schedulerName);
|
||||
|
||||
module.exports = async (job) => {
|
||||
try {
|
||||
// const now = moment().unix();
|
||||
Logger.log('info', `${schedulerName} running: ${JSON.stringify(job.opts)}`);
|
||||
/**
|
||||
* semua aktif order dan driver sedang login
|
||||
* get last t_gps_tracks by drv_id
|
||||
* jika crt_d > 5 minute => 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) {
|
||||
// hapus logs notif jika lebih dari 3x dan lebih dari 1jam
|
||||
const logs = await LogsSchNotifModels.list({ drv_id: job.drv_id, notif_type: LibFirebase.upLocActiveOrder, order_by: 'lognot.drv_id DESC', limit: 3 });
|
||||
if (logs.length >= 3) {
|
||||
let start = moment();
|
||||
end = moment.unix(logs[0].crt);
|
||||
duration = moment.duration(start.diff(end));
|
||||
if (duration.asHours() >= 1) {
|
||||
LogsSchNotifModels.delLogs({ drv_id: job.drv_id, notif_type: LibFirebase.upLocActiveOrder });
|
||||
} else {
|
||||
// continue;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// kirim notif
|
||||
console.log('drvUpLocWorker driver id => ', job.drv_id, ' at ', moment().unix());
|
||||
libFirebase.sendToDevice(job.drv_fcm_token, {
|
||||
notification: {
|
||||
title: notifTitle,
|
||||
body: notifBody,
|
||||
},
|
||||
data: {
|
||||
title: notifTitle,
|
||||
body: notifBody,
|
||||
type: '' + LibFirebase.upLocActiveOrder,
|
||||
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',
|
||||
});
|
||||
LogsSchNotifModels.insLog({
|
||||
fcm_token: job.drv_fcm_token,
|
||||
device_id: job.drv_device_id,
|
||||
drv_id: job.drv_id,
|
||||
notif_type: LibFirebase.upLocActiveOrder,
|
||||
crt: moment().unix(),
|
||||
});
|
||||
}
|
||||
|
||||
let loop = process.env.SCHEDULE_DRV_UP_LOC_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',
|
||||
});
|
||||
|
||||
/**
|
||||
* jika telah mengirim notif lebih dari 3x, maka stop
|
||||
* ngapusnya gimana ? permasalahnnya order yang didapet adalah ketika driver login
|
||||
* ngapusnya pas driver sudah update data terbaru
|
||||
* kalo misalkan pas ngirim notif masih ada log notif belum terhapus sebanyak 3x, maka check apakah sudah 1hari ? baru dihapus dan create log baru
|
||||
*/
|
||||
|
||||
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) {
|
||||
// more than 5 minute
|
||||
let start = moment();
|
||||
let end = moment.unix(job.tr_crt_d);
|
||||
let duration = moment.duration(start.diff(end));
|
||||
if (duration.asMinutes() >= 4) {
|
||||
await checkNotifNLogs(job);
|
||||
} else {
|
||||
LogsSchNotifModels.delLogs({ drv_id: job.drv_id, notif_type: LibFirebase.upLocActiveOrder });
|
||||
}
|
||||
}
|
||||
// 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 location',
|
||||
data: null,
|
||||
};
|
||||
} catch (e) {
|
||||
return {
|
||||
type: 'error',
|
||||
message: e.message,
|
||||
e: e,
|
||||
};
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user