feat: 资产标识符标准化、资产历史订单查询及导入虚拟号强制验证
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m21s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m21s
主要变更: - 新增 AssetIdentifier 模型及 Store,统一管理资产标识符(ICCID/IMEI/SN 等) - 新增迁移:asset_identifier 表、order 表新增 asset_identifier 字段、iot_card.virtual_no NOT NULL 约束 - 资产 Handler/Service/Route 全面重构,支持标识符路由查询与解析 - 新增资产历史订单查询接口,支持跨设备/卡/钱包维度的订单聚合 - 设备与物联卡导入任务强制校验虚拟号,缺失时直接拒绝 - Excel 工具函数优化,前端导入指引文档同步更新 - 归档三个 OpenSpec 提案:asset-identifier-standardization、asset-historical-orders、import-mandatory-virtual-no - 更新 OpenAPI 文档及相关 DTO Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -117,3 +117,23 @@
|
||||
- **WHEN** 代理渠道某套餐存在 `retail_price < cost_price`
|
||||
- **THEN** 系统 MUST 不展示该套餐,且不允许该套餐进入下单校验
|
||||
|
||||
---
|
||||
|
||||
### Requirement: 已绑定设备的卡不允许单独购买套餐
|
||||
|
||||
购买套餐验证时,系统 MUST 检查目标 IoT 卡是否为独立卡(`is_standalone = true`)。若卡已绑定设备(`is_standalone = false`),必须拒绝购买并引导用户至对应设备页面操作。
|
||||
|
||||
此规则适用于所有套餐购买入口(C 端个人客户、B 端代理/平台)。
|
||||
|
||||
#### Scenario: 独立卡正常购买
|
||||
- **WHEN** 买家为 IoT 卡购买套餐,该卡的 `is_standalone = true`(未绑定任何设备)
|
||||
- **THEN** 验证通过,继续后续购买流程
|
||||
|
||||
#### Scenario: 已绑定设备的卡被单独购买
|
||||
- **WHEN** 买家使用 IoT 卡的 ICCID 或 VirtualNo 购买套餐,该卡的 `is_standalone = false`
|
||||
- **THEN** 系统拒绝购买,返回错误码 `CodeInvalidParam`,错误消息"该卡已绑定设备,请前往设备页面购买套餐"
|
||||
|
||||
#### Scenario: B 端代理通过卡标识符购买套餐(绑定了设备的卡)
|
||||
- **WHEN** 代理使用已绑定设备的卡的 ICCID 创建订单
|
||||
- **THEN** 系统在 `ValidateCardPurchase()` 中检查 `is_standalone`,返回错误,订单不创建
|
||||
|
||||
|
||||
Reference in New Issue
Block a user