Files
BMS/bms-back/docs/oss-bill-storage.md
2026-10-18 22:41:31 +08:00

3.1 KiB
Raw Permalink Blame History

应收账单 OSS 存储

新生成的应收账单导出 Excel 上传到 lionqueen Bucket。 生产路径为 bms/prod/ar/bill/yyyy/MM/dd/<uuid>.xlsx,本地、测试路径为 bms/test/ar/bill/yyyy/MM/dd/<uuid>.xlsx。数据库 ar_bill_detail_export.storage_key 保存包含完整对象路径的 oss://lionqueen/...,不需要数据库变更。 生产环境启动需启用 prod Profile,可通过 OSS_PATH_PREFIX 覆盖目录前缀 (不以 / 开头或结尾)。同 Bucket 下的目录划分用于区分文件,权限隔离仍需配置 RAM 策略。

部署配置

在后端进程环境变量中填写完整密钥,然后重启后端:

OSS_ACCESS_KEY_ID=<完整 AccessKey ID>
OSS_ACCESS_KEY_SECRET=<完整 AccessKey Secret>

默认配置位于 bms-admin/src/main/resources/application.yml:

oss:
  endpoint: ${OSS_ENDPOINT:https://oss.lionquexpress.com}
  bucket: ${OSS_BUCKET:lionqueen}
  path-prefix: ${OSS_PATH_PREFIX:bms/test}
  cname: ${OSS_CNAME:true}
  access-key-id: ${OSS_ACCESS_KEY_ID:}
  access-key-secret: ${OSS_ACCESS_KEY_SECRET:}

也可以通过外部 Spring 配置文件填写这些配置。 oss.lionquexpress.com 按 OSS 自定义域名使用,需在 OSS 控制台已绑定到 lionqueen,且 HTTPS 证书可用。若这个域名仅用于 CDN 分发,请设置 OSS_ENDPOINT 为 Bucket 所在地域的 OSS Endpoint,并设置 OSS_CNAME=false。 密钥需要目标 Bucket 下对应对象的上传、读取、删除权限。

生成和下载

  • 流式生成系统临时文件,计算大小和 SHA-256,上传成功后才更新导出状态为 SUCCESS。
  • 上传时显式设置对象 ACL 为 private,下载继续使用原有账单下载接口及权限校验,后端流式读取 OSS。
  • 生成或上传失败走原有 FAILED 状态处理;正常和异常路径都会尝试清理临时文件。
  • 任务已超时或被其他流程结束、成功状态更新返回 0 时,删除该次上传的 OSS 对象。
  • OSS 上传与数据库状态更新不属于同一事务;数据库更新异常可能留下未关联的 OSS 对象,需运维核对处理。
  • 历史 /profile/... 账单仍从原本地目录下载,本次不迁移历史文件。
  • 已有 oss://lionqueen/bms/ar/bill/... 文件仍按数据库中记录的路径读取,下载和删除不重新添加环境前缀。
  • 普通附件、头像、导入文件及导出模板维持现有存储方式。

SDK 自定义域名与客户端配置参考:阿里云 OSS Java SDK 文档。

毛利分析报表

产品、订单两个维度的导出也使用上述 OSS 配置。生产文件路径为 bms/prod/report/profit/yyyy/MM/dd/<uuid>.xlsx,本地和测试为 bms/test/report/profit/yyyy/MM/dd/<uuid>.xlsx。 导出保持同步:临时 Excel 生成并上传成功后更新导出日志,再由前端发起下载。 下载继续校验当前用户及原接口权限;历史本地文件名仍从原 download 目录读取。 上传失败标记导出失败并清理临时文件,状态更新返回 0 时删除此次上传的 OSS 对象。