fix: enforce carrier-specific channel group routing
This commit is contained in:
@@ -437,3 +437,75 @@ npm run verify:phase8
|
||||
### 待复测
|
||||
|
||||
- 浏览器 smoke 和真实文件上传 smoke 需要在生产验证环境补跑,重点复测客户端发送、签名材料上传、短信审核、短信记录、客户管理和报备任务。
|
||||
|
||||
## 2026-07-03 单运营商通道组、应用级费率和回执幂等
|
||||
|
||||
### 本轮修复范围
|
||||
|
||||
- 通道组规则:
|
||||
- `SmsChannelGroup.carrier` 固化为移动、联通、电信三选一,禁止三网通道组。
|
||||
- `SmsChannelGroupItem.carrier` 保留并参与发送,必须等于通道组运营商。
|
||||
- 三网只作为通道本体能力 `SmsChannel.carrier=all`,放入某个通道组后只服务该组运营商。
|
||||
- 同一通道组内同一省份只能配置一个通道;省份 item 必须引用发送地区一致的通道。
|
||||
- 全国通道允许多个,但同一通道组内全国通道优先级禁止重复;本期不做权重分流。
|
||||
- 路由规则必须绑定应用、运营商、通道组,且 route carrier 必须等于 group carrier。
|
||||
- 发送和计费规则:
|
||||
- 运营商以号码前缀正则为准;手机号段库只提供省份/城市,carrier 仅作后台提示或校验。
|
||||
- 发送前校验最终选中通道的签名报备任务为 approved,补发切换通道时重新校验。
|
||||
- 企业应用新增 `customerUnitPrice`,客户扣费按应用级客户费率;通道成本只作内部成本。
|
||||
- 迟到旧通道 failed receipt 不覆盖新通道 delivered 最终状态;历史回执仍入库可查。
|
||||
- 重复 submit/receipt 回调不得重复扣费、释放冻结或退款。
|
||||
- 补发使用触发时当前通道组配置;本期不考虑人工重发。
|
||||
- 前端和真实 smoke:
|
||||
- 企业应用表单增加客户单价输入,保存时写入真实应用 API。
|
||||
- 企业应用按移动、联通、电信分别选择通道组,选项按通道组 carrier 过滤。
|
||||
- 真实 smoke seed 补充应用客户单价、三网通道放入移动组、签名-通道 approved 报备。
|
||||
|
||||
### 新增/更新测试
|
||||
|
||||
| 测试文件 | 新增覆盖 |
|
||||
| --- | --- |
|
||||
| `api/src/channels/channels.service.spec.ts` | 单运营商通道组、通道组 item carrier 校验、通道 carrier 兼容、省份与发送地区一致、同省唯一、全国优先级唯一、route carrier 与 group carrier 一致。 |
|
||||
| `api/src/send-chain/send-chain.service.spec.ts` | 通道组 item carrier 参与发送、最终通道签名报备校验、应用级客户费率、迟到旧 failed receipt 不覆盖 delivered、重复账务动作幂等。 |
|
||||
| `api/src/sms-config/sms-config.service.spec.ts` | 应用配置与列表在新增客户费率字段后继续通过。 |
|
||||
|
||||
### 已执行命令
|
||||
|
||||
```bash
|
||||
npm --prefix api run prisma:generate
|
||||
npm --prefix api test -- channels.service.spec.ts send-chain.service.spec.ts sms-config.service.spec.ts --runInBand
|
||||
npm --prefix api test
|
||||
npm --prefix api run build
|
||||
npm run build
|
||||
npm --prefix api run prisma:migrate:deploy
|
||||
$env:API_PORT='3101'; $env:API_ENABLE_SEND_WORKER='true'; npm --prefix api run start:dev
|
||||
node tools/smoke/real-env-smoke.mjs
|
||||
node <inline channel-group rule HTTP smoke>
|
||||
npm run spike:contracts
|
||||
npm run test:gateway
|
||||
npm run verify:phase8
|
||||
```
|
||||
|
||||
### 当前结果
|
||||
|
||||
- Prisma Client 生成通过。
|
||||
- 新增迁移已应用到真实 PostgreSQL:
|
||||
- `20260703143000_add_channel_group_carrier`
|
||||
- `20260703152000_add_application_customer_rate`
|
||||
- API Jest:10 个 test suite 通过,56 个测试通过。
|
||||
- API build 通过。
|
||||
- 前端 build 通过,仍存在既有 Vite chunk size warning。
|
||||
- 真实 API smoke 通过:
|
||||
- `tools/smoke/real-env-smoke.mjs` 通过,验证真实 API、Prisma/PostgreSQL、Redis/BullMQ、登录、充值、发送任务、worker 入队、文件上传元数据和操作日志。
|
||||
- inline 通道组规则 HTTP smoke 通过,覆盖三网组拒绝、item carrier 不匹配拒绝、通道 carrier 不兼容拒绝、省份/发送地区不匹配拒绝、同省重复拒绝、全国优先级重复拒绝、route carrier/group carrier 不匹配拒绝。
|
||||
- Gateway 队列契约通过,4 个示例均验证通过。
|
||||
- `npm run test:gateway` 通过,Go Gateway health、connection、tracker、cmpp、spike 测试全部通过。
|
||||
- `npm run verify:phase8` 未通过,仍阻塞在已知 BullMQ spike 性能阈值:
|
||||
- 15000 条消息、并发 500。
|
||||
- enqueue TPS 3139.43。
|
||||
- end-to-end TPS 479.02,低于 500 TPS。
|
||||
|
||||
### 剩余说明
|
||||
|
||||
- `verify:phase8` 当前失败点是独立 BullMQ 性能阈值,不是本轮通道组、计费、报备、回执业务逻辑测试失败。
|
||||
- 浏览器端完整手工回归仍建议补跑企业应用创建、通道组配置、短信记录详情弹窗中的历史回执展示。
|
||||
|
||||
Reference in New Issue
Block a user