七月迭代短暂完结,还有很多后端的关键东西没有弄,这是一版赶时间做的东西
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m26s

This commit is contained in:
2026-07-25 17:06:58 +08:00
parent ad9f613dd6
commit 73f5125d3d
249 changed files with 17137 additions and 877 deletions

View File

@@ -782,13 +782,8 @@ sequenceDiagram
```mermaid
flowchart TD
Trigger[后台手动设置或取消] --> Asset{资产类型}
Asset -->|卡| ICCID[读取卡 ICCID]
Asset -->|设备| Binding[查询 is_current=true 的当前卡]
Binding --> Exists{当前卡有效?}
Exists -->|否| Reject[拒绝操作并记录原因]
Exists -->|是| ICCID
ICCID --> Gateway[SetSpeedLimit cardNo, speedLevel]
Trigger[卡详情手动选择固定档位] --> ICCID[校验 IoT 卡 ICCID 与数据权限]
ICCID --> Gateway[SetCardSpeedTier cardNo, code]
Gateway --> Audit[记录操作审计和 Gateway 结果]
```
@@ -796,15 +791,15 @@ flowchart TD
数据和契约:
- 应用层只接收语义化 `speed_level`,前端只能从固定档位中选择,禁止输入任意速率,也不得接触 Gateway 渠道 `code`
- 统一接口:`POST /api/admin/assets/{identifier}/speed-limit`。资产为设备时解析当前绑定卡,不存在当前卡则拒绝,绝不把设备 IMEI 传给 Gateway
- Gateway 端口只有 `SetSpeedLimit(cardNo, speedLevel)`Infrastructure Adapter 根据 Gateway 账户和运营商把业务等级映射为上游字符串 `code`,映射不得进入 Handler、前端或领域模型
- 后台接口只接收固定整数档位 `code=-1..8`,前端只能从固定档位中选择,禁止输入任意速率
- 卡专用接口:`PUT /api/admin/iot-cards/{iccid}/speed-tier`。设备没有限速入口,也不得通过设备当前绑定卡间接限速
- Gateway 端口只有 `SetCardSpeedTier(cardNo, code)``cardNo` 必须是经过本地权限校验的卡 ICCID不得传设备 ID 或 IMEI
- “恢复不限速”和“限到 0kbps”是两个不同业务等级必须分别映射为上游 `code=-1``code=0`,禁止继续用数值 `0` 表示取消限速。
- 上游说明只有广电和电信直接支持限速接口,联通通过通信计划调整,移动不支持限速。调用前必须按卡的运营商能力校验;不支持或缺少账户档位映射时返回明确业务错误,不得猜测 `code` 或盲目调用
- 上游是否支持具体运营商与账户由 Gateway 返回结果确认;本系统只校验固定档位并原样发送,不自行推算运营商策略
- 不新增 `tb_package.speed_limit_kbps``SpeedLimitApplyRequested` Outbox 或自动补偿 Worker。本期也不宣称能展示 Gateway 当前实际限速,除非上游另提供查询接口。
- 卡详情和设备详情都提供固定档位选择及恢复不限速入口;设备入口明确显示“当前使用卡 ICCID”。每次操作记录资产、最终 `cardNo`、业务 `speed_level`、实际发送的渠道 `code`Gateway 返回的 `appliedSpeed/channelRawValue`、操作人、请求结果和错误摘要。
- 卡详情提供固定档位选择及恢复不限速入口。每次操作记录卡 ICCID、实际发送的 `code`操作人、Integration Log、请求结果和错误摘要。
CMP 固定业务等级如下。枚举名称属于本系统稳定契约;展示文案和上游默认 `code` 仅用于表达当前已知映射,实际调用仍须按 Gateway 账户和运营商查找映射
CMP 固定档位如下,接口直接提交表中的整数 `code`
| `speed_level` | 展示文案 | 当前上游默认 `code` |
|---------------|----------|----------------------|