All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m9s
- 企业卡授权唯一约束:新增 DB 迁移(000154),卡级部分唯一索引防止同一张卡被多个企业同时持有,Service 层新增跨企业冲突检测 - 单卡列表新增 network_status 过滤参数 - 单卡/设备列表新增 asset_status、asset_status_name、generation 响应字段 - 单卡/设备列表新增企业维度过滤(authorized_enterprise_id、is_authorized_to_enterprise)及响应中企业授权信息(批量加载,无 N+1) - 主钱包流水/退款列表新增 asset_identifier 精确过滤参数 - 企业卡授权/收回接口升级为三模式(list/range/filter),企业设备授权/收回升级为双模式(list/filter) - 升级 sonic v1.14.2 → v1.15.2 以兼容 Go 1.26 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
35 lines
1.4 KiB
Markdown
35 lines
1.4 KiB
Markdown
Status: ready-for-human
|
||
|
||
## Parent
|
||
|
||
`.scratch/enterprise-auth-and-asset-enhancements/PRD.md`
|
||
|
||
## What to build
|
||
|
||
在 standalone 卡列表响应和设备列表响应中暴露换货相关字段,使运营人员能直接在列表中识别资产的换货历史。
|
||
|
||
**`StandaloneIotCardResponse` 新增三个字段:**
|
||
- `asset_status int`:业务状态(1=在库, 2=已销售, 3=已换货, 4=已停用)
|
||
- `asset_status_name string`:对应中文名称
|
||
- `generation int`:资产世代编号(初始值1,每次换货+旧资产转新后 +1)
|
||
|
||
**`DeviceResponse` 同步新增相同三个字段。**
|
||
|
||
语义约定(写入注释和 description):
|
||
- `asset_status = 3`:该资产已换货且尚未执行"旧资产转新",不再流通
|
||
- `generation > 1`:该资产历史上曾执行过换货后转新,目前仍在使用
|
||
|
||
Service 层组装响应时直接从 Model 取值,`asset_status_name` 通过 constants 中的方法转换。
|
||
|
||
## Acceptance criteria
|
||
|
||
- [x] `/api/admin/iot-cards/standalone` 响应中每条记录包含 `asset_status`、`asset_status_name`、`generation` 三个字段
|
||
- [x] `/api/admin/devices` 响应中每条记录包含相同三个字段
|
||
- [x] 已换货未转新的卡/设备返回 `asset_status=3`、`asset_status_name="已换货"`
|
||
- [x] 经过换货转新重入库的卡/设备返回 `generation=2`(或更高)且 `asset_status=1`
|
||
- [x] 普通未经历换货的资产返回 `generation=1`
|
||
|
||
## Blocked by
|
||
|
||
None - can start immediately
|