从零做微信小程序(12):小程序里做报表,存储、PDF 与 Excel 导出

16次阅读
没有评论

报表功能最容易被低估:页面上放一个“导出 Excel”按钮很简单,真正难的是数据口径、文件生成、权限控制和下载链接都要可靠。这篇把订单报表压缩成一条云端链路。

lifetruth.top

一、报表不是数据库原样导出

报表是把很多条明细整理成总数、趋势和分类。收入按支付成功算,还是按发货成功算?退款是否扣除?时间按下单还是到账?这些口径必须先确定。

先统一统计口径,再讨论导出格式。

报表只能反映系统已有记录。如果支付回调、退款和人工调整没有留下日志,文件再漂亮也无法替代真实对账。

二、订单聚合放在云端

云函数按用户权限和时间范围查询订单,再聚合订单数、成交金额、退款金额、会员收入和解锁收入。前端不要把全部订单拉下来再计算,数据大时会卡,也不可信。

接口可以同时返回摘要和明细,两者使用同一组筛选条件,避免页面数字与导出文件不一致。订单量很小时可实时查询,数据增长后再按日或按月生成汇总。

三、PDF、Excel 和云存储

PDF 适合固定版式和打印,Excel 适合筛选和二次分析。服务端查询数据后按模板生成文件,再上传到私有云存储,并记录文件类型、筛选条件、生成用户和过期时间。

const task = await createExportTask(filter);
await aggregateOrders(task);
const file = await renderFile(task, format);
const path = await uploadToStorage(file);
return getTempUrl(path);

数据量小时可以同步生成;生成时间较长时改成异步任务,页面显示“生成中”,完成后再提供下载。

临时链接不是永久公开链接。文件目录要保持私有,用户每次下载前由云函数确认任务归属,再生成短期链接。

四、会员权益不等于数据通行证

页面可以根据会员状态显示导出按钮,但云函数必须重新验证会员是否有效、导出次数是否超限、格式是否在权益范围内。

权益可以拆成:是否能导出、每日次数、是否支持 Excel、是否支持 PDF、最多查询多长时间。会员资格还要叠加数据归属,不能让会员读取别人的订单。

历史文件是否能继续下载也要提前定义。比较清楚的规则是:生成时有权限即可完成任务,但临时链接过期后重新下载仍需校验当前权限。

五、给报表留下解释空间

文件里保留开始时间、结束时间、订单状态、商品类型和生成时间。允许人工补单或退款时,还要记录操作者、原因和时间。

上线前拿 10 笔已知订单做人工核对,再扩大到全量。这样出现差异时,能快速判断是筛选条件、金额口径还是某一笔订单的问题。

写在最后

小程序报表的核心不是 PDF 或 Excel,而是云端聚合、文件生成、私有存储、临时下载和会员权限共同组成的可信链路。

如果你接下来要做导出,先写一页报表口径说明:统计哪些订单、如何计算金额、谁能导出、文件保留多久。

你更常用 PDF 做归档,还是用 Excel 做后续分析?

正文完
 0
评论(没有评论)