/var/www/qr4y.com/server/delivery/services
NameSizeModeActions
firebase/-0755rm
auth.service.js25200644editdlrm
branch.service.js99910644editdlrm
delivery.service.js125500644editdlrm
index.js9140644editdlrm
mail.service.js15320644editdlrm
order.service.js84430644editdlrm
webSocket.service.js103770644editdlrm
world.service.js22810644editdlrm
Edit: /var/www/qr4y.com/server/delivery/services/delivery.service.js (12550B)
const logger = require('../logger')({ service: 'MailService' }) // const { Forbidden, Unauthorized, BadRequest, ApiError } = require('../api/responseModels/errors') const https = require('https'); module.exports = class DeliveryService { constructor({ db, config }) { this.db = db this.config = config logger.child({ service: 'DeliveryService', method: 'Constructor' }).info('Success') } async Run() { } async getOrder(orderId, full) { try { let include = [ { model: this.db.company, foreginKey: 'companyId' }, ] if (full) { include = [ { model: this.db.orderAddress }, { model: this.db.branch, include: [{ model: this.db.address }], foreginKey: 'branchId' }, { model: this.db.company, foreginKey: 'companyId' }, ] } let order = await this.db.order.findOne({ include: include, where: { id: orderId, } }) if (!order) { return } return order } catch (e) { logger.child({ service: 'DeliveryService', method: 'getOrder' }).error(e) } } async getDeliveryServer(deliveryServerId) { try { let deliveryServer = await this.db.deliveryServer.findOne({ where: { id: deliveryServerId, } }) if (!deliveryServer) { return } return deliveryServer } catch (e) { logger.child({ service: 'DeliveryService', method: 'getDeliveryServer' }).error(e) } } getOrderComment(order) { let comment = '' let currency = order.company.currency // paid // not_paid let pay_status_order = order.pay_status_order // paid // not_paid let pay_status_delivery = order.pay_status_delivery // paid // not_paid let status = order.status let tips = parseFloat(order.tips) ?? 0 let order_cost = parseFloat(order.order_cost) ?? 0 let delivery_cost = parseFloat(order.delivery_cost) ?? 0 // only for client let delivery_cost_calculated = parseFloat(order.delivery_cost_calculated) ?? 0 let status_text = '' switch (status) { case 'new': status_text = 'Новый'; break; case 'pending': status_text = 'В ожидании'; break; case 'confirmed': status_text = 'Подтвержден'; break; case 'accept': status_text = 'Готовится'; break; case 'ready': status_text = 'Готов'; break; case 'delivery': status_text = 'Доставка'; break; case 'arrived': status_text = 'Прибыл'; break; case 'complete': status_text = 'Завершен'; break; case 'cancel': status_text = 'Отменен'; break; default: status_text = 'Неизвестный'; break; } comment = `Статус заказа: ${status_text}. ` comment += `Заказ: ${order_cost} ${currency} ` + (pay_status_order == 'paid' ? 'ОПЛАЧЕН' : 'НЕ ОПЛАЧЕН') + '. ' comment += `Доставка: ${delivery_cost_calculated} ${currency} ` + (pay_status_delivery == 'paid' ? 'ОПЛАЧЕНА' : 'НЕ ОПЛАЧЕНА') + '. ' if (tips > 0) { comment += `Чаевые: ${tips} ${currency}. ` } let summ = this.getSumm(order) if (summ > 0) { comment += `К оплате: ${summ} ${currency}. ` } return comment } getSumm(order) { let summ = 0; summ = order.pay_status_order == 'not_paid' ? parseFloat(order.order_cost) : 0 summ += order.pay_status_delivery == 'not_paid' ? parseFloat(order.delivery_cost_calculated) : 0 summ += order.pay_status_delivery == 'not_paid' ? parseFloat(order.tips) : 0 return summ } getSummDeliveryAndTips(order) { let summ = 0; summ += parseFloat(order.delivery_cost_calculated) summ += parseFloat(order.tips) return summ } async AddOrder(orderId) { try { let order = await this.getOrder(orderId, true) if (!order) { logger.child({ service: 'DeliveryService', method: 'AddOrder' }).error('Order not found') return } let deliveryServer = await this.getDeliveryServer(order.deliveryServerId) if (!deliveryServer) { logger.child({ service: 'DeliveryService', method: 'AddOrder' }).error('Delivery server not found') return } if (deliveryServer.host) { let comment = this.getOrderComment(order) let summ = this.getSumm(order) let summDeliveryAndTips = this.getSummDeliveryAndTips(order) const data = JSON.stringify({ api_key: deliveryServer.key, // remote_id: order.remoteNumber, id: order.id, phone: order.phone, adres: order.branch.address.adres, la: order.branch.address.latitude, lo: order.branch.address.longtitude, adres2: order.orderAddress.adres, la2: order.orderAddress.latitude, lo2: order.orderAddress.longtitude, distance: order.delivery_distance, time_road: order.delivery_time, comm: comment, thecity: 0, delivery: 1, cart: JSON.stringify({ company_name: order.company.name, company_phone: order.branch.phone, status: order.status, order_num: order.number, cost_order: order.order_cost, pay_status_order: order.pay_status_order, delivery_cost_calculated: order.delivery_cost_calculated, delivery_cost: order.delivery_cost, pay_status_delivery: order.pay_status_delivery, tips: order.tips, }), bn: order.pay_status_delivery == 'paid' ? 1 : 0, cost_bn: order.pay_status_delivery == 'paid' ? summDeliveryAndTips : 0, cost: summ > 0 ? summ : summDeliveryAndTips, }) const options = { method: 'POST', hostname: deliveryServer.host, port: deliveryServer.port, path: '/api/orders/delivery_create', headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(data) } } https.globalAgent.options.rejectUnauthorized = false; const req = https.request(options, (res) => { var body = ''; res.setEncoding('utf8'); res.on('end', () => { if (res.statusCode == 200) { let bodyArr = JSON.parse(body) let json = { error: bodyArr.error, message: 'ok', id: bodyArr.id, status: bodyArr.status, car_id: bodyArr.car_id, car_la: bodyArr.car_la, car_lo: bodyArr.car_lo, } order.deliveryServerJson = JSON.stringify(json) order.remoteNumber = bodyArr.id order.save() } else { let json = { error: res.statusCode, message: 'error', } order.deliveryServerJson = JSON.stringify(json) order.save() } }); res.on('data', (r) => { body = body + r; }); }); req.on('error', (e) => { let json = { error: 500, message: e.message, } order.deliveryServerJson = JSON.stringify(json) order.save() }); req.write(data); req.end(); logger.child({ service: 'DeliveryService', method: 'AddOrder' }).info('Success') } } catch (e) { logger.child({ service: 'DeliveryService', method: 'AddOrder' }).error(e) } } async UpdateOrder(orderId) { try { let order = await this.getOrder(orderId, true) if (!order) { logger.child({ service: 'DeliveryService', method: 'UpdateOrder' }).error('Order not found') return } let deliveryServer = await this.getDeliveryServer(order.deliveryServerId) if (!deliveryServer) { logger.child({ service: 'DeliveryService', method: 'UpdateOrder' }).error('Delivery server not found') return } if (deliveryServer.host) { let comment = this.getOrderComment(order) let summ = this.getSumm(order) let summDeliveryAndTips = this.getSummDeliveryAndTips(order) const data = JSON.stringify({ api_key: deliveryServer.key, remote_id: order.remoteNumber, id: order.id, phone: order.phone, adres: order.branch.address.adres, la: order.branch.address.latitude, lo: order.branch.address.longtitude, adres2: order.orderAddress.adres, la2: order.orderAddress.latitude, lo2: order.orderAddress.longtitude, distance: order.delivery_distance, time_road: order.delivery_time, comm: comment, thecity: 0, bn: order.pay_status_delivery == 'paid' ? 1 : 0, cost_bn: order.pay_status_delivery == 'paid' ? summDeliveryAndTips : 0, cost: summ > 0 ? summ : summDeliveryAndTips, cart: JSON.stringify({ company_name: order.company.name, company_phone: order.branch.phone, status: order.status, order_num: order.number, cost_order: order.order_cost, pay_status_order: order.pay_status_order, delivery_cost_calculated: order.delivery_cost_calculated, delivery_cost: order.delivery_cost, pay_status_delivery: order.pay_status_delivery, tips: order.tips, }), }) const options = { method: 'POST', hostname: deliveryServer.host, port: deliveryServer.port, path: '/api/orders/delivery_update', headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(data) } } https.globalAgent.options.rejectUnauthorized = false; const req = https.request(options, (res) => { var body = ''; res.setEncoding('utf8'); res.on('end', () => { if (res.statusCode == 200) { let bodyArr = JSON.parse(body) let json = { error: bodyArr.error, message: 'ok', id: bodyArr.id, status: bodyArr.status, car_id: bodyArr.car_id, car_la: bodyArr.car_la, car_lo: bodyArr.car_lo, } order.deliveryServerJson = JSON.stringify(json) order.remoteNumber = bodyArr.id order.save() } else { let json = { error: res.statusCode, message: 'error', } order.deliveryServerJson = JSON.stringify(json) order.save() } }); res.on('data', (r) => { body = body + r; }); }); req.on('error', (e) => { let json = { error: 500, message: e.message, } order.deliveryServerJson = JSON.stringify(json) order.save() }); req.write(data); req.end(); logger.child({ service: 'DeliveryService', method: 'UpdateOrder' }).info('Success') } } catch (e) { logger.child({ service: 'DeliveryService', method: 'UpdateOrder' }).error(e) } } async CancelOrder(orderId) { try { let order = await this.getOrder(orderId, false) if (!order) { logger.child({ service: 'DeliveryService', method: 'CancelOrder' }).error('Order not found') return } let deliveryServer = await this.getDeliveryServer(order.deliveryServerId) if (!deliveryServer) { logger.child({ service: 'DeliveryService', method: 'CancelOrder' }).error('Delivery server not found') return } if (deliveryServer.host) { let comment = '' const data = JSON.stringify({ api_key: deliveryServer.key, remote_id: order.remoteNumber, comm: comment, }) const options = { method: 'POST', hostname: deliveryServer.host, port: deliveryServer.port, path: '/api/orders/delivery_cancel', headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(data) } } https.globalAgent.options.rejectUnauthorized = false; const req = https.request(options, (res) => { var body = ''; res.setEncoding('utf8'); res.on('end', () => { let json try { json = JSON.parse(order.deliveryServerJson) ?? {} } catch (e) { json = { error: 500, message: e.message, } } if (res.statusCode == 200) { let bodyArr = JSON.parse(body) json.error = bodyArr.error json.message = 'ok' json.id = bodyArr.id json.status = bodyArr.status } else { json.error = res.statusCode json.message = 'error' } order.deliveryServerJson = JSON.stringify(json) order.save() }); res.on('data', (r) => { body = body + r; }); }); req.on('error', (e) => { let json try { json = JSON.parse(order.deliveryServerJson) ?? {} } catch (e) { json = { error: 500, message: e.message, } } json.error = 500 json.message = e.message order.deliveryServerJson = JSON.stringify(json) order.save() }); req.write(data); req.end(); logger.child({ service: 'DeliveryService', method: 'CancelOrder' }).info('Success') } } catch (e) { logger.child({ service: 'DeliveryService', method: 'CancelOrder' }).error(e) } } }