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

117 lines
4.6 KiB
JavaScript
Executable File

const SandboxedJobMQ = require('bullmq').SandboxedJob;
const LibWinston = require('../library/LibWinston');
const LibMail = require('../library/LibMail');
const moment = require('moment');
const GpsTracksModels = require('../models/GpsTracksModels');
const OrdersModels = require('../models/OrdersModels');
const OrdersVendorsModels = require('../models/OrdersVendorsModels');
const queueName = process.env.REDIS_QUEUE_BLAST_ORDER;
const Logger = LibWinston.initialize(queueName);
module.exports = async (job) => {
try {
Logger.log('info', `${queueName} running: ${JSON.stringify(job.opts)}`);
const now = moment().unix();
const data = job.data;
if (!data.ord_id || !data.ord_code) {
Logger.log('info', `${queueName} running_fail: data not valid`);
return {
type: 'fail',
message: 'data not valid',
data: null,
};
}
const order = await OrdersModels.showOrder({
'id': data.ord_id,
});
if (order.length < 1) {
Logger.log('info', `${queueName} running_fail: order not found on order_id ${data.ord_id}`);
return {
type: 'fail',
message: `order not found on order_id ${data.ord_id}`,
data: null,
};
}
// check is accepted
if (order[0].ord_vdr_id) {
Logger.log('info', `${queueName} running_info: order have been accepted by another vendor ${order[0].ord_vdr_id} on order_id ${data.ord_id}`);
return {
type: 'success',
message: 'order have been accepted by another vendor',
data: null,
};
} else {
await OrdersVendorsModels.updt(data.current_ord_vdr_id, {
status: OrdersVendorsModels.STTS_NOT_READY,
});
}
// blast to other vendor
if (data.next_ord_vdr_id.length > 0) {
for (let key in data.next_ord_vdr_id) {
// get by vendor_id not bid token
// let blastToVendor = await OrdersVendorsModels.getByBidToken(data.next_vdr_bid_token[key].tkn);
let blastToVendor = await OrdersVendorsModels.getById(data.next_ord_vdr_id[key].id);
if (blastToVendor.length < 1) {
Logger.log('info', `${queueName} running_fail: vendor want to blast not found on order_id ${data.ord_id[key]} and bid_token ${data.next_vdr_bid_token[key].tkn}`);
// return {
// type: 'fail',
// message: `vendor want to blast not found on order_id ${data.ord_id[key]} and bid_token ${data.next_vdr_bid_token[key].tkn}`,
// data: null,
// };
continue;
}
// kalau expirednya mau diupdate
// if (blastToVendor[0].status === OrdersVendorsModels.STTS_WAIT && blastToVendor[0].is_want === OrdersVendorsModels.IS_WANT_IGNORE) {
// await OrdersVendorsModels.updt(data.next_ord_vdr_id[key].id, {
// is_exp: OrdersVendorsModels.LINK_WILL_EXP,
// // exp_at: moment.unix(now).add(10, 'minutes').unix(),
// exp_at: moment.unix(now).add(1, 'day').unix(),
// });
// }
let bidOrderMailData = {
trx_code: order[0].ord_code,
// client_id: order[0].ord_client_id,
client_name: order[0].c_name,
client_phone: '0' + order[0].c_phone_val,
client_mail: order[0].c_mail,
// client_addr,
client_prefer_type_truck: order[0].prefer_type_truck,
// weight: Number(order[0].weight),
// cbm: Number(order[0].cbm),
// koli: Number(order[0].koli),
pickup_zone_title: order[0].pck_name,
pickup_zone_addr: order[0].pck_addr,
pickup_at: moment.unix(order[0].set_pck_at).format('DD MMM YYYY HH:mm') + ' WIB',
drop_zone_title: order[0].drop_name,
drop_zone_addr: order[0].drop_addr,
// vendor_id: blastToVendor[0].vdr_id,
vendor_name: blastToVendor[0].vdr_name,
vendor_phone: '0' + blastToVendor[0].vdr_phone_val,
vendor_mail: blastToVendor[0].vdr_mail,
vendor_addr: blastToVendor[0].vdr_addr,
vendor_acc_link: data.next_vdr_acc_link[key].link,
};
LibMail.sendBidOrderMail('Ada Order Masuk', blastToVendor[0].vdr_mail, bidOrderMailData);
}
} else {
await OrdersModels.updt(data.ord_id, {
status: OrdersModels.STTS_CANCEL,
cancel_type: OrdersModels.CANCEL_TYPE_VDR_NOT_READY,
cancel_at: now,
});
}
// Logger.log('error', `${queueName} running_error: ${JSON.stringify(e, Object.getOwnPropertyNames(e))}`);
return {
type: 'success',
message: 'success do blast order to vendor',
data: null,
};
} catch (e) {
return {
type: 'error',
message: e.message,
e: e,
};
}
};