fix: simplify balance billing and govern operation logs

This commit is contained in:
hectorzhao
2026-07-14 17:40:32 +08:00
parent f35691f185
commit 28dad93e3e
40 changed files with 740 additions and 395 deletions
+31 -29
View File
@@ -4,7 +4,7 @@
本文基于当前前端设计原型整理,用于交给 Codex 或开发团队执行第一版落地开发。
当前确认:第一版保留短信业务,排除彩信功能;账户计费、充值套餐、充值记录进入第一版开发范围,账单流水页面和公开交易查询 API 不进入第一版。彩信服务、彩信应用/签名/模板 Tab,以及运营端彩信相关菜单标记为“待开发”;业务性能指标为“平台可稳定入队并调度 500 条短信/秒,实际向通道 submit 受通道限速配置控制”。
当前确认:第一版保留短信业务,排除彩信功能;账户按现金余额计费,人工充值和充值记录进入第一版开发范围,套餐、短信余量、授信额度、账单流水页面和公开交易查询 API 不进入第一版。彩信服务、彩信应用/签名/模板 Tab,以及运营端彩信相关菜单标记为“待开发”;业务性能指标为“平台可稳定入队并调度 500 条短信/秒,实际向通道 submit 受通道限速配置控制”。
## 1. 项目目标
@@ -17,7 +17,7 @@
- 支持通道级限速、失败重试、回执同步和发送记录追踪。
- 支持企业、应用、签名、模板、通道、通道组、报备任务等核心配置数据的后台维护。
- 彩信功能仅保留菜单占位或隐藏,不进入第一版开发范围。
- 账户计费、充值套餐、充值记录进入第一版范围,并与发送记录形成可对账闭环;账单流水页面暂不验收
- 账户现金余额计费、人工充值、充值记录进入第一版范围,并与发送记录形成可对账闭环;不提供套餐、短信余量和授信额度
## 2. 角色与权限
@@ -51,7 +51,7 @@
- 短信应用
- 模板管理
- 签名与引流信息
- 充值套餐
- 账户余额与充值记录
- 账单流水
- 企业认证
- 用户管理
@@ -73,7 +73,7 @@
- 短信通道管理、短信通道组管理
- 报备任务、报备记录
- 短信任务进度、短信记录、短信上行记录
- 充值记录、账单流水、套餐配置、计费规则
- 充值记录、账单流水、计费规则
- 企业黑名单、全局黑名单、敏感词管理
- 用户管理、手机号段库、引流信息字段库
@@ -327,21 +327,21 @@
### 4.10 账户计费
1. 客户端可查看充值套餐、购买或申请充值套餐、查看账单流水
2. 发送创建时按短信内容计费条数企业应用客户单价或套餐规则生成预估费用,计费条数只按 70/67 字规则拆分;不按移动、联通、电信配置不同客户价。
3. 平台需在发送前检查企业账户余额、套餐余量或授信额度
1. 客户端可查看现金余额和充值记录;充值由运营端人工入账
2. 发送创建时按短信内容计费条数企业应用客户单价生成预估费用,计费条数只按 70/67 字规则拆分;不按移动、联通、电信配置不同客户价。
3. 平台发送前检查企业现金余额,余额大于等于预估费用即可发送
4. 发送链路需记录计费条数、计费单价、计费金额、账务状态。
5. 账单流水与短信记录可追溯关联,支持按企业、应用、任务、手机号、时间对账。
6. 最终失败、超时失败需要退费。
7. 三网通道成本只用于平台内部成本核算,不影响客户扣费金额。
8. 当前版本计费口径固定为提交 accepted 扣费、最终 failed receipt/timeout 退款。
9. 所有面向用户展示的金额、余额、充值金额、套餐价格和单价统一以人民币元展示并固定保留三位小数;内部仍使用分或最小计费单位持久化,不以展示精度改变账务计算。
9. 所有面向用户展示的金额、余额、充值金额和单价统一以人民币元展示并固定保留三位小数;内部仍使用分或最小计费单位持久化,不以展示精度改变账务计算。
## 5. 功能需求
### 5.1 客户端工作台
- 展示短信余量或可发送额度、今日发送量、成功率、待审核事项、快捷入口。
- 展示现金余额、今日发送量、成功率、待审核事项、快捷入口。
- 展示最近发送批次、发送趋势、签名/模板状态。
- 数据范围限定为当前企业。
@@ -400,7 +400,7 @@
### 5.9 客户端账户计费
- 充值套餐:展示可购买套餐、套餐价格、短信条数、有效期、适用范围
- 账户余额:展示当前现金余额和人工充值记录,不提供客户端购买套餐或创建充值订单入口
- 账单流水:展示充值、冻结、扣费、退费、调整等流水。
- 账单流水需关联短信任务、短信记录或人工调整单据。
- 客户端账号设置属于系统管理,不允许客户自行配置通道或通道组。
@@ -501,10 +501,9 @@
### 5.19 运营端账户计费
- 套餐配置:支持配置套餐名称、价格、短信条数、有效期、适用企业范围、启停状态
- 充值记录:支持人工充值、套餐购买记录、授信额度调整。
- 充值记录:支持运营人员人工充值和负数冲正
- 账单流水:支持冻结、扣费、退费、解冻、人工调整、失败返还。
- 计费规则:支持按短信计费条数企业单价、套餐余量、授信额度计算费用
- 计费规则:支持按短信计费条数企业应用单价计算费用,发送额度仅取现金余额
- 账务流水必须与短信记录形成可追溯关系,支持对账导出。
- 最终失败、超时失败需要退费。
- 计费口径可配置为按提交成功计费或按回执成功计费。
@@ -522,6 +521,9 @@
- 客户端和运营端右上角用户头像提供下拉菜单,支持退出登录、修改密码;账号设置独立菜单第一版不展示。
- 客户端和运营端系统日志均支持分页、搜索和详情展示;详情列内容较长时使用详情卡/弹窗展示,不能被表格窄列截断。
- 系统日志记录登录、退出、配置变更、审核、发送、导入导出、密钥重置、通道复制、通道启停、通道删除、连接状态变化、安全控制变更等操作。
- CMPP 心跳、Submit、Deliver 和 Gateway 周期状态同步属于运行指标或当前状态更新,不得每次追加永久系统日志;连接建立、断开、超时、认证失败,以及恢复状态、实例、锁持有者或失败原因发生真实变化时才写系统日志。
- 系统日志列表必须在数据库侧完成级别、租户、模块、时间和关键词筛选后再分页;所有新旧日志查询接口均限制每页最多 100 条,不允许无界返回全表。
- `OperationLog` 在线保留期默认 180 天;到期日志以小批量事务搬入 `OperationLogArchive`,按 `archiveMonth=YYYY-MM` 形成逻辑月度归档。归档记录不自动删除,归档失败不得删除源记录;归档表达到千万级或维护窗口不满足要求时再评估 PostgreSQL 月度分区。
## 6. 非功能需求
@@ -677,6 +679,7 @@
- user:用户。
- role、permission、user_role:权限。
- operation_log:操作日志。
- operation_log_archive:超过在线保留期的操作日志归档,保留原始日志 id、租户、操作者、动作、资源、详情、发生时间和归档月份。
### 9.2 短信配置
@@ -728,9 +731,8 @@
### 9.7 账户计费
- billing_plan:充值套餐。
- tenant_account:企业账户。
- account_balance:余额或套餐余量
- account_balance企业现金余额。
- account_transaction:账户流水。
- billing_rule:计费规则。
- sms_billing_record:短信计费记录。
@@ -937,7 +939,7 @@
3. 实现文件上传和对象存储。
4. 实现操作日志。
5. 实现基础字典:手机号段、敏感词、黑名单、引流字段。
6. 实现账户、套餐、账务流水基础模型。
6. 实现现金余额账户和账务流水基础模型。
### 阶段 3:企业与配置
@@ -974,8 +976,8 @@
1. 实现客户端批量任务、发送详情、上行短信。
2. 实现运营端任务进度、短信记录、上行记录。
3. 实现客户端充值套餐、账单流水
4. 实现运营端充值记录账务流水、套餐配置
3. 实现客户端账户余额和充值记录
4. 实现运营端充值记录账务流水。
5. 实现运营看板、发送监控、数据统计。
6. 实现导出权限和导出日志。
@@ -1007,7 +1009,7 @@
1. 根据本文创建数据库迁移脚本和实体模型。
2. 实现认证、租户、权限基础模块。
3. 实现企业、应用、签名、模板 CRUD 与审核。
4. 实现账户计费、套餐、账务流水。
4. 实现现金余额计费和账务流水。
5. 实现通道、通道组、报备任务。
6. 实现风控规则、审核原因、规则命中记录。
7. 实现 NestJS Send Worker、BullMQ 队列和 Redis 限速。
@@ -1075,7 +1077,7 @@
### 14.7 待确认问题
暂无阻塞性待确认问题。后续进入详细设计或开发时,如遇具体运营商协议参数、生产部署资源规格、默认套餐价格等执行细节,再按模块补充确认。
暂无阻塞性待确认问题。后续进入详细设计或开发时,如遇具体运营商协议参数、生产部署资源规格等执行细节,再按模块补充确认。
## 15. 第一版落地执行路线
@@ -1210,10 +1212,10 @@
任务:
1. 套餐配置
2. 充值套餐
3. 企业账户
4. 余额或套餐余量
1. 企业现金账户
2. 人工充值记录
3. 现金余额
4. 发送费用预估
5. 充值记录。
6. 账单流水。
7. 发送预估费用。
@@ -1222,8 +1224,8 @@
验收标准:
- 客户端充值套餐和账单流水进入第一版。
- 发送前校验账户余额、套餐余量或授信额度
- 客户端账户余额和充值记录进入第一版。
- 发送前校验企业现金余额
- 每条短信记录可追溯到账务流水。
### 阶段 6:风控与审核
@@ -1324,7 +1326,7 @@
- 运营端可针对指定企业录入人工充值金额、操作人和备注。
- 人工充值金额支持负数,用于余额冲正或调减;0 金额不得提交。
- 人工充值必须写入充值订单和账务流水。
- 运营端充值记录需区分人工充值和套餐充值
- 运营端充值记录均为人工充值或负数冲正
2. 客户端概览指标调整。
- 原“剩余条数”改为“剩余余额”。
- 原“近24小时成功率”改为“今日发送条数和今日成功率”。
@@ -1349,7 +1351,7 @@
重要前提:
- 第一版保留短信业务,排除彩信功能。
- 账户计费、充值套餐、账单流水进入第一版。
- 现金余额计费、人工充值、账单流水进入第一版。
- 前端使用 React + TypeScript + Vite。
- 后端 API 使用 NestJS + TypeScript。
- DB 使用 PostgreSQL。
@@ -1407,7 +1409,7 @@
除文档或菜单明确标注为待开发的彩信能力外,第一版所有可进入菜单不得以 mock/static/localStorage 作为系统功能完成标准:
1. 客户端充值套餐、账单流水、批量任务、短信发送、短信签名、短信模板必须调用真实 API;签名/模板新增后进入真实审核状态,发送任务调用真实发送链路。
1. 客户端账户余额、充值记录、批量任务、短信发送、短信签名、短信模板必须调用真实 API;签名/模板新增后进入真实审核状态,发送任务调用真实发送链路。
2. 运营端数据统计、账务账户、发送监控、短信审核、短信记录、安全控制、手机号段库、报备字段库、通道组、通道报备字段、报备任务和报备记录必须调用真实 API。
3. 运营端企业管理使用真实租户、账户、应用、签名、模板接口;企业新增、编辑、启用/禁用、删除必须写真实租户表,删除采用软删除或归档,不允许纯前端删除。
4. 企业签名和企业模板运营端列表只展示真实短信配置数据;彩信签名、彩信模板、彩信通道、彩信记录、彩信任务进度等仍归入待开发,不得用静态样例作为第一版短信验收结果。