117 lines
4.6 KiB
JavaScript
Executable File
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,
|
|
};
|
|
}
|
|
}; |