199 lines
8.4 KiB
JavaScript
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
|