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; let query, params;
if (sessionId) { 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]; params = [sessionId];
} else { } 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 = []; 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( await pool.execute(
'INSERT INTO certificate (company, phoneNumber, productName, grossWeight, commitBasis, origin, issueDate, signature, sessionId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', '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] [certificate.subjectName, certificate.contact, certificate.productName, certificate.weight, certificate.basis, certificate.origin, certificate.date, signatureUrl, certificate.sessionId, qrCodeUrl]
); );
console.log('数据插入数据库成功'); console.log('数据插入数据库成功');
@ -196,6 +228,7 @@ const server = http.createServer(async (req, res) => {
const responseCertificate = { const responseCertificate = {
...certificate, ...certificate,
signature: signatureUrl, signature: signatureUrl,
qrCodeUrl: qrCodeUrl,
// 格式化日期为YYYY-MM-DD格式 // 格式化日期为YYYY-MM-DD格式
date: certificate.date.toISOString().split('T')[0] date: certificate.date.toISOString().split('T')[0]
}; };

Loading…
Cancel
Save