## ADDED Requirements

### Requirement: Admin 端查询资产钱包概况

系统 SHALL 提供 `GET /api/admin/assets/:asset_type/:id/wallet` 接口，允许平台用户和代理账号查询指定卡或设备的钱包余额概况。

**接口规格**：
- 路径参数 `asset_type`：`card` 或 `device`
- 路径参数 `id`：资产数据库 ID（uint）
- 无请求体
- 返回字段：`wallet_id`、`resource_type`、`resource_id`、`balance`、`frozen_balance`、`available_balance`、`currency`、`status`、`status_text`、`created_at`、`updated_at`

**权限规则**：
- 平台用户/超级管理员：可查询所有资产钱包
- 代理账号：只能查询 `shop_id_tag IN (当前店铺及下级店铺)` 的资产钱包（由 `ApplyShopTagFilter` 自动过滤）
- 企业账号：Handler 层直接返回 403，禁止访问

#### Scenario: 平台用户查询卡钱包概况

- **WHEN** 平台用户请求 `GET /api/admin/assets/card/456/wallet`，该卡存在钱包记录，余额 100 元，冻结 0 元
- **THEN** 系统返回 200，`balance=10000`，`frozen_balance=0`，`available_balance=10000`，`status=1`，`status_text="正常"`

#### Scenario: 代理账号查询下级资产钱包

- **WHEN** 代理账号（shop_id=10）请求 `GET /api/admin/assets/device/789/wallet`，该设备的 `shop_id_tag` 在该代理的下级店铺范围内
- **THEN** 系统返回 200，返回该设备的钱包详情

#### Scenario: 代理账号查询越权资产钱包

- **WHEN** 代理账号（shop_id=10）请求 `GET /api/admin/assets/card/999/wallet`，该卡的 `shop_id_tag` 不在该代理的下级店铺范围内
- **THEN** 系统返回 404，错误消息为"该资产暂无钱包记录"（不区分"无权"与"不存在"）

#### Scenario: 企业账号请求被拒绝

- **WHEN** 企业账号请求 `GET /api/admin/assets/card/456/wallet`
- **THEN** 系统返回 403，错误消息为"企业账号无权查看钱包信息"

#### Scenario: 资产无钱包记录

- **WHEN** 平台用户请求 `GET /api/admin/assets/card/456/wallet`，该卡尚未创建钱包（未充值过）
- **THEN** 系统返回 404，错误消息为"该资产暂无钱包记录"

---

### Requirement: Admin 端查询资产钱包流水列表

系统 SHALL 提供 `GET /api/admin/assets/:asset_type/:id/wallet/transactions` 接口，允许平台用户和代理账号分页查询指定资产的钱包收支流水，每条流水包含可跳转的来源编号。

**接口规格**：
- 路径参数：同上
- 查询参数：`page`（默认 1）、`page_size`（默认 20，最大 100）、`transaction_type`（可选过滤）、`start_time`（可选）、`end_time`（可选）
- 流水按 `created_at` 倒序排列
- 每条流水返回：`id`、`transaction_type`、`transaction_type_text`、`amount`、`balance_before`、`balance_after`、`reference_type`、`reference_no`、`remark`、`created_at`

**来源编号跳转规则**：
- `reference_type = "recharge"` → `reference_no` 为充值单号（`CRCH…`），前端可跳转至充值单详情
- `reference_type = "order"` → `reference_no` 为订单号（`ORD…`），前端可跳转至订单详情

**权限规则**：与钱包概况接口相同

#### Scenario: 查询充值和扣款流水

- **WHEN** 平台用户请求 `GET /api/admin/assets/card/456/wallet/transactions?page=1&page_size=20`，该卡有 1 条充值流水（100 元）和 1 条扣款流水（-30 元）
- **THEN** 系统返回 200，`total=2`，按时间倒序返回两条记录，充值流水 `amount=10000`、`reference_type="recharge"`、`reference_no="CRCH20260309001"`；扣款流水 `amount=-3000`、`reference_type="order"`、`reference_no="ORD20260310001"`

#### Scenario: 按交易类型过滤

- **WHEN** 平台用户请求 `GET /api/admin/assets/card/456/wallet/transactions?transaction_type=recharge`
- **THEN** 系统只返回 `transaction_type="recharge"` 的流水记录

#### Scenario: 分页超出范围

- **WHEN** 请求 `page_size=200`（超过最大值 100）
- **THEN** 系统返回 400，错误消息为参数验证失败

#### Scenario: 资产无流水记录

- **WHEN** 平台用户请求某资产的流水列表，该资产钱包存在但尚无任何流水
- **THEN** 系统返回 200，`list=[]`，`total=0`
