irc_web/test.js

199 lines
8.4 KiB
JavaScript

/* eslint-disable */
var fs = require('fs')
const PDFDocument = require('pdfkit');
var JsBarcode = require('jsbarcode');
const dayjs = require('dayjs')
const { Client } = require('pg')
var _ = require('@sailshq/lodash')
var async = require('async')
var archiver = require('archiver')
const { query } = require('../async-db')
// Canvas v2
var { createCanvas } = require("canvas");
process.on('message', async (batch_num) => {
console.log('Message from parent:', batch_num);
await createPdf(batch_num)
});
async function template_004 (embarkingInfo, itineraries, batch_num) {
try {
let isJapan = false
// let pdf_path = 'assets/pdf_file/' + embarkingInfo.cruise
let pdf_path = '/mnt/assets/pdf_file/' + embarkingInfo.cruise
cruise = embarkingInfo.cruise
let filename = embarkingInfo.cruise + '-' + embarkingInfo.room_number + '-' + embarkingInfo.last_name
+ ' ' + embarkingInfo.first_name + '.pdf'
let path = pdf_path + '/' + filename
if (!embarkingInfo['ship_name_cn']) {
let shipInfo = await query(`select * from ship where id = ? limit 1`, [embarkingInfo.ship])
console.log(shipInfo)
if (shipInfo.length > 0) {
embarkingInfo['ship_name_cn'] = shipInfo[0].name_cn
embarkingInfo['ship_name_en'] = shipInfo[0].name_en
}
}
console.log()
let berthInfo = await query(`select * from berthinfo where ship = ? and room_number = ? limit 1`, [embarkingInfo.ship, embarkingInfo.room_number])
if (berthInfo.length > 0) {
berthInfo = berthInfo[0]
} else {
berthInfo = null;
}
var doc = new PDFDocument({size: 'A4'});
// var stream = doc.pipe(blobStream());
if (!fs.existsSync(pdf_path)) {
fs.mkdirSync(pdf_path);
}
doc.pipe(fs.createWriteStream(path))
doc.image('assets/images/qingdao/page1.png', 19, 0, {fit: [595, 843]})
var canvas = createCanvas(400, 45);
JsBarcode(canvas, embarkingInfo.ticket_code, {displayValue: false});
const buf = canvas.toBuffer()
var lCanvas = createCanvas(150, 45);
let lCode = embarkingInfo.ticket_code;
for (let i = 0; i < (9 - embarkingInfo.ticket_code.length); i ++) {
lCode = '0' + lCode
}
lCode = '0' + lCode + '1'
JsBarcode(lCanvas, lCode,{displayValue: true});
const lbuf = lCanvas.toBuffer()
if (embarkingInfo.tour_group_code && embarkingInfo.tour_group_code != '' && embarkingInfo.tour_group_code != 'CH820897' && embarkingInfo.tour_group_code != 'CH821897') {
doc.font('assets/SIMHEI.TTF').fontSize(15)
.text(embarkingInfo.tour_group_code, 110, 121);
} else {
}
doc.font('assets/SIMHEI.TTF').fontSize(13)
.text('歌诗达邮轮', 110, 240);
doc.font('assets/SIMHEI.TTF').fontSize(13)
.text('Costa Cruises', 110, 254)
doc.font('assets/SIMHEI.TTF').fontSize(10)
.text(embarkingInfo.ship_name_cn, 110, 268)
doc.font('assets/SIMHEI.TTF').fontSize(10)
.text(embarkingInfo.ship_name_en, 110, 279)
doc.font('assets/SIMHEI.TTF').fontSize(13)
.text(cruise, 110, 320)
doc.font('assets/SIMHEI.TTF').fontSize(13)
.text(dayjs.unix(embarkingInfo.date + 28800).format('YYYY-MM-DD'), 110, 358)
doc.font('assets/SIMHEI.TTF').fontSize(13)
.text('青岛国际邮轮母港中心', 110, 392)
doc.font('assets/SIMHEI.TTF').fontSize(13)
.text('Qingdao Cruise Terminal', 110, 406)
let y = 435
console.log(itineraries)
_.each(itineraries, item => {
if (item.country == 'Japan') {
isJapan = true
}
let a = item.date + 28800
doc.font('assets/SIMHEI.TTF').fontSize(12)
.text(dayjs.unix(a).format('YYYY-MM-DD') + ' ' + item.location_cn + item.location, 110, y)
y = y + 12
})
doc.image(buf, 308, 144, {width: 260, height: 42.5})
doc.font('assets/SIMHEI.TTF').fontSize(10)
.text(embarkingInfo.ticket_code, 408, 190);
doc.font('assets/SIMHEI.TTF').fontSize(15)
.text(embarkingInfo.name_cn, 110, 560);
doc.font('assets/SIMHEI.TTF').fontSize(15)
.text(embarkingInfo.last_name + ' ' + embarkingInfo.first_name, 110, 580);
doc.font('assets/SIMHEI.TTF').fontSize(15)
.text(embarkingInfo.country_code && embarkingInfo.country_code == 'RC' ? 'CHN' : embarkingInfo.country_code, 110, 614);
doc.font('assets/SIMHEI.TTF').fontSize(15)
.text(embarkingInfo.passport_code, 110, 657);
let identity_card = embarkingInfo.identity_card
// const preiStr = identity_card && identity_card.slice(0, 6);
// const endiStr = identity_card && identity_card.slice(14).padStart(12, '*')
// doc.font('assets/SIMHEI.TTF').fontSize(15)
// .text(preiStr + endiStr, 121, 676);
let prepStr = ''
let endpStr = ''
if (embarkingInfo.phone && embarkingInfo.phone != '-') {
let phone = embarkingInfo.phone
prepStr = phone && phone.slice(0, 3);
endpStr = phone && phone.slice(7).padStart(8, '*')
}
doc.font('assets/SIMHEI.TTF').fontSize(15)
.text(prepStr + endpStr, 110, 700)
doc.font('assets/SIMHEI.TTF').fontSize(15)
.text(embarkingInfo.order_no, 368, 248)
if (berthInfo) {
doc.font('assets/SIMHEI.TTF').fontSize(15)
.text(berthInfo["floor"], 368, 290)
}
doc.font('assets/SIMHEI.TTF').fontSize(15)
.text(embarkingInfo.room_number, 368, 335)
if (embarkingInfo.tour_group_code && embarkingInfo.tour_group_code != '' && embarkingInfo.tour_group_code != 'CH820897' && embarkingInfo.tour_group_code != 'CH821897') {
doc.font('assets/SIMHEI.TTF').fontSize(15)
.text('团队', 368, 381);
} else {
doc.font('assets/SIMHEI.TTF').fontSize(15)
.text('散客', 368, 381);
}
if (berthInfo) {
// doc.image('assets/muster_station.png', 475, 338, {fit: [72, 62]})
doc.font('assets/SIMHEI.TTF').fontSize(20).fillColor('white')
.text(berthInfo.area, 500, 370)
// if (berthInfo.area == 'A') {
// doc.image('assets/muster_station_A.png', 485, 338, {fit: [72, 62]})
// } else {
// doc.image('assets/muster_station_B.png', 485, 338, {fit: [72, 62]})
// }
} else {
// doc.image('assets/muster_station_other.png', 485, 338, {fit: [72, 62]})
}
if (isJapan) {
doc.addPage().image('assets/images/qingdao/page3.png', 19, 0, {fit: [595, 843]})
} else {
doc.addPage().image('assets/images/qingdao/page2.png', 19, 0, {fit: [595, 843]})
}
doc.image(buf, 388, 36, {width: 200, height: 45})
// doc.rotate(90)
// doc.image('assets/muster_station_A.png',0,0,{fit: [72, 62]})
// doc.rotate(180, {origin: [0, 0]})
// doc.restore()
doc.addPage().image('assets/page3.png', 0, 0, {fit: [595, 843]})
doc.font('assets/SIMHEI.TTF').fontSize(18)
.text(embarkingInfo.ship_name_en, 226, 500, {width: 169.5, align: 'center'})
doc.font('assets/SIMHEI.TTF').fontSize(18)
.text(dayjs.unix(embarkingInfo.date).format('YYYY-MM-DD'), 226, 535,{width: 169.5, align: 'center'})
doc.font('Helvetica-Bold').fontSize(18)
.text(embarkingInfo.room_number, 297, 567)
doc.font('assets/SIMHEI.TTF').fontSize(18)
.image(lbuf, 261, 621, {width: 113, height: 50})
doc.font('assets/SIMHEI.TTF').fontSize(18)
.text(embarkingInfo.last_name + ' ' + embarkingInfo.first_name, 226, 695, {width: 169.5, align: 'center'})
doc.font('assets/SIMHEI.TTF').fontSize(18)
.text(embarkingInfo.order_no, 226, 740,{width: 169.5, align: 'center'})
doc.save()
doc.rotate(180, {origin: [0, 0]})
doc.font('assets/SIMHEI.TTF').fontSize(18)
.text(embarkingInfo.order_no, -396.5, -100,{width: 169.5, align: 'center'})
doc.font('assets/SIMHEI.TTF').fontSize(18)
.text(embarkingInfo.last_name + ' ' + embarkingInfo.first_name, -396.5, -146,{width: 169.5, align: 'center'})
doc.font('assets/SIMHEI.TTF').fontSize(18)
.image(lbuf, -375, -229, {width: 113, height: 50})
doc.font('Helvetica-Bold').fontSize(18)
.text(embarkingInfo.room_number, -324, -277)
doc.font('assets/SIMHEI.TTF').fontSize(18)
.text(dayjs.unix(embarkingInfo.date).format('YYYY-MM-DD'), -396.5, -307,{width: 169.5, align: 'center'})
doc.font('assets/SIMHEI.TTF').fontSize(18)
.text(embarkingInfo.ship_name_en, -396.5, -342,{width: 169.5, align: 'center'})
doc.restore()
doc.end()
} catch (e) {
console.log(e.toString())
let taskmessage = await query("update taskmessage set status = ? where name = ? and status = ? ", ['fail', batch_num+'_create_pdf', 'process'])
// await client.end()
process.exit(0)
}
}
module.exports = template_004