Files
junhong_cmp_fiber/docs/ur33-package-expiry-reminder/功能总结.md
break 73f5125d3d
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m26s
七月迭代短暂完结,还有很多后端的关键东西没有弄,这是一版赶时间做的东西
2026-07-25 17:06:58 +08:00

30 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# UR#33 套餐临期提醒功能总结
## 交付范围
- 新增 `GET /api/admin/expiring-assets`,平台与代理共用当前后台认证和店铺层级权限。
- 仅返回预计最终到期状态为 `exact`、剩余 0 至 15 个上海自然日的卡和设备。
- 返回卡、设备及合计数量,提供 `pink/purple/red` 高亮等级和 0 至 3 天优先标识。
- 每日上海时间 03:00 扫描 15、7、3 天节点,向资产关联个人客户写入站内通知 Outbox。
- C 端继续复用既有通知列表、未读数和弹窗机制,不新增营销、短信或企业微信提醒。
## 数据与幂等
- 临期时间复用 `internal/query/packageexpiry` 的最终到期算法,不建立临期状态快照。
- 列表候选使用当前主套餐到期时间预筛,再批量计算当前与排队主套餐的最终到期时间。
- 通知事件 ID 固化资产类型、资产 ID、到期日、节点和个人客户 ID定时任务、Outbox Relay 和通知消费者重复执行均不会重复通知。
- `000183_add_package_expiry_scan_indexes` 仅增加卡、设备主套餐到期扫描索引,不新增外键。
## 权限和异常边界
- 平台与超级管理员读取全局范围;代理只读取当前认证上下文的下级店铺范围。
- 代理权限范围为空时查询固定返回空集,不能因空切片退化为全局读取。
- `shop_id` 只缩小既有权限范围;企业账号禁止调用。
- 无关联个人客户的资产正常跳过通知,不影响临期列表事实。
## 联调与回滚
- 前端按 `expiry_level` 渲染颜色,按 `is_priority` 置顶,不自行重算阈值。
- 回滚应用版本后可删除迁移新增的两个扫描索引;已产生的通知和 Outbox 事实不得清表。
- 本 Change 未运行测试、完整构建、LSP 和迁移;按用户后续明确要求已运行 OpenAPI 生成器,另执行 `gofmt`、只读一致性检查和 `git diff --check`