Browse Source

添加二维码生成和存储功能,将二维码URL存储到数据库

master
Default User 1 month ago
parent
commit
b40bc2a3fe
  1. 41
      server.js

41
server.js

@ -88,10 +88,10 @@ const server = http.createServer(async (req, res) => {
// 从数据库获取对应会话的最新合格证信息
let query, params;
if (sessionId) {
query = 'SELECT company as subjectName, phoneNumber as contact, productName, grossWeight as weight, commitBasis as basis, origin, DATE_FORMAT(issueDate, "%Y-%m-%d") as date, signature FROM certificate WHERE sessionId = ? ORDER BY id DESC LIMIT 1';
query = 'SELECT company as subjectName, phoneNumber as contact, productName, grossWeight as weight, commitBasis as basis, origin, DATE_FORMAT(issueDate, "%Y-%m-%d") as date, signature, qrCodeUrl FROM certificate WHERE sessionId = ? ORDER BY id DESC LIMIT 1';
params = [sessionId];
} else {
query = 'SELECT company as subjectName, phoneNumber as contact, productName, grossWeight as weight, commitBasis as basis, origin, DATE_FORMAT(issueDate, "%Y-%m-%d") as date, signature FROM certificate WHERE sessionId IS NULL ORDER BY id DESC LIMIT 1';
query = 'SELECT company as subjectName, phoneNumber as contact, productName, grossWeight as weight, commitBasis as basis, origin, DATE_FORMAT(issueDate, "%Y-%m-%d") as date, signature, qrCodeUrl FROM certificate WHERE sessionId IS NULL ORDER BY id DESC LIMIT 1';
params = [];
}
@ -184,10 +184,42 @@ const server = http.createServer(async (req, res) => {
}
}
// 生成查看页面的URL,包含会话ID
const viewUrl = `http://8.137.125.67:3008/view.html?sessionId=${encodeURIComponent(sessionId)}`;
// 生成二维码并上传到OSS
let qrCodeUrl = null;
try {
// 使用Google Charts API生成二维码
const qrCodeApiUrl = `https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=${encodeURIComponent(viewUrl)}`;
// 下载二维码图片
const https = require('https');
const qrCodeBuffer = await new Promise((resolve, reject) => {
https.get(qrCodeApiUrl, (response) => {
const chunks = [];
response.on('data', (chunk) => chunks.push(chunk));
response.on('end', () => resolve(Buffer.concat(chunks)));
response.on('error', reject);
}).on('error', reject);
});
// 生成唯一的文件名
const timestamp = Date.now();
const qrCodeFilename = `certificate_qrcode_${timestamp}.png`;
// 上传到OSS,指定文件夹为certificate/qrcodes
qrCodeUrl = await OssUploader.uploadBuffer(qrCodeBuffer, qrCodeFilename, 'certificate/qrcodes', 'image');
console.log('二维码上传到OSS成功:', qrCodeUrl);
} catch (error) {
console.error('上传二维码到OSS失败:', error.message);
// 即使上传失败,也继续处理
}
// 插入数据到数据库
await pool.execute(
'INSERT INTO certificate (company, phoneNumber, productName, grossWeight, commitBasis, origin, issueDate, signature, sessionId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)',
[certificate.subjectName, certificate.contact, certificate.productName, certificate.weight, certificate.basis, certificate.origin, certificate.date, signatureUrl, certificate.sessionId]
'INSERT INTO certificate (company, phoneNumber, productName, grossWeight, commitBasis, origin, issueDate, signature, sessionId, qrCodeUrl) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
[certificate.subjectName, certificate.contact, certificate.productName, certificate.weight, certificate.basis, certificate.origin, certificate.date, signatureUrl, certificate.sessionId, qrCodeUrl]
);
console.log('数据插入数据库成功');
@ -196,6 +228,7 @@ const server = http.createServer(async (req, res) => {
const responseCertificate = {
...certificate,
signature: signatureUrl,
qrCodeUrl: qrCodeUrl,
// 格式化日期为YYYY-MM-DD格式
date: certificate.date.toISOString().split('T')[0]
};

Loading…
Cancel
Save