From b40bc2a3fe9bba0e921b8f2b3785c7b2a9aeccbb Mon Sep 17 00:00:00 2001 From: Default User Date: Sat, 31 Jan 2026 10:41:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=8C=E7=BB=B4=E7=A0=81?= =?UTF-8?q?=E7=94=9F=E6=88=90=E5=92=8C=E5=AD=98=E5=82=A8=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E5=B0=86=E4=BA=8C=E7=BB=B4=E7=A0=81URL=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E5=88=B0=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server.js | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) 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] };