diff --git a/server.js b/server.js index 5e92d00..cf77833 100644 --- a/server.js +++ b/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] };