/** * 资产管理 API 服务 * 对应文档:asset-detail-refactor-api-changes.md */ import { BaseService } from '../BaseService' import type { BaseResponse, AssetResolveResponse, AssetRealtimeStatusResponse, AssetRefreshResponse, AssetPackageListResponse, AssetPackageParams, AssetCurrentPackageResponse, DeviceStopResponse, AssetWalletTransactionListResponse, AssetWalletTransactionParams, AssetWalletResponse, AssetOrdersParams, AssetOrdersResponse } from '@/types/api' export class AssetService extends BaseService { /** * 通过任意标识符查询设备或卡的完整详情 * 支持虚拟号、ICCID、IMEI、SN、MSISDN * GET /api/admin/assets/resolve/:identifier * @param identifier 资产标识符(虚拟号、ICCID、IMEI、SN、MSISDN) */ static resolveAsset(identifier: string): Promise> { return this.getOne(`/api/admin/assets/resolve/${identifier}`) } /** * 读取资产实时状态(直接读 DB/Redis,不调网关) * GET /api/admin/assets/:identifier/realtime-status * @param identifier 资产标识符(ICCID 或 VirtualNo) */ static getRealtimeStatus(identifier: string): Promise> { return this.getOne( `/api/admin/assets/${identifier}/realtime-status`, undefined, { requestOptions: { show404Error: false // 404时不显示错误提示 } } ) } /** * 主动调网关拉取最新数据后返回 * POST /api/admin/assets/:identifier/refresh * 注意:设备有 30 秒冷却期,冷却中调用返回 429 * @param identifier 资产标识符(ICCID 或 VirtualNo) */ static refreshAsset(identifier: string): Promise> { return this.post>( `/api/admin/assets/${identifier}/refresh`, {} ) } /** * 查询该资产所有套餐记录,含虚流量换算字段(分页) * GET /api/admin/assets/:identifier/packages?page=1&page_size=50 * @param identifier 资产标识符(ICCID 或 VirtualNo) * @param params 查询参数(可选分页参数) */ static getAssetPackages( identifier: string, params?: AssetPackageParams ): Promise> { return this.get>( `/api/admin/assets/${identifier}/packages`, params, { requestOptions: { show404Error: false // 404时不显示错误提示 } } ) } /** * 查询当前生效中的主套餐 * GET /api/admin/assets/:identifier/current-package * 无生效套餐时返回 404 * @param identifier 资产标识符(ICCID 或 VirtualNo) */ static getCurrentPackage(identifier: string): Promise> { return this.getOne( `/api/admin/assets/${identifier}/current-package`, undefined, { requestOptions: { show404Error: false // 404时不显示错误提示 } } ) } // ========== 资产停复机操作(统一接口)========== /** * 停机资产(卡或设备) * POST /api/admin/assets/:identifier/stop * 停机成功后设置 1 小时停机保护期(保护期内禁止复机) * @param identifier 资产标识符(ICCID 或 VirtualNo) */ static stopAsset(identifier: string): Promise> { return this.post>( `/api/admin/assets/${identifier}/stop`, {} ) } /** * 复机资产(卡或设备) * POST /api/admin/assets/:identifier/start * 复机成功后设置 1 小时复机保护期(保护期内禁止停机) * @param identifier 资产标识符(ICCID 或 VirtualNo) */ static startAsset(identifier: string): Promise> { return this.post>(`/api/admin/assets/${identifier}/start`, {}) } // ========== 资产停用 ========== /** * 手动停用资产(卡或设备) * PATCH /api/admin/assets/:identifier/deactivate * @param identifier 资产标识符(ICCID 或 VirtualNo) */ static deactivateAsset(identifier: string): Promise { return this.patch(`/api/admin/assets/${identifier}/deactivate`, {}) } // ========== 钱包查询 ========== /** * 查询指定卡或设备的钱包余额概况 * GET /api/admin/assets/:identifier/wallet * 企业账号禁止调用 * @param identifier 资产标识符(ICCID 或 VirtualNo) */ static getAssetWallet(identifier: string): Promise> { return this.getOne(`/api/admin/assets/${identifier}/wallet`, undefined, { requestOptions: { show404Error: false // 404时不显示错误提示 } }) } /** * 分页查询指定资产的钱包收支流水 * GET /api/admin/assets/:identifier/wallet/transactions * 企业账号禁止调用 * @param identifier 资产标识符(ICCID 或 VirtualNo) * @param params 查询参数 */ static getWalletTransactions( identifier: string, params?: AssetWalletTransactionParams ): Promise> { return this.get>( `/api/admin/assets/${identifier}/wallet/transactions`, params ) } // ========== 轮询状态更新 ========== /** * 更新资产轮询状态 * PATCH /api/admin/assets/:identifier/polling-status * @param identifier 资产标识符(ICCID 或 VirtualNo) * @param data 轮询状态数据 */ static updatePollingStatus( identifier: string, data: { enable_polling: boolean } ): Promise { return this.patch(`/api/admin/assets/${identifier}/polling-status`, data) } // ========== 资产历史订单 ========== /** * 查询资产历史订单 * GET /api/admin/assets/:identifier/orders * @param identifier 资产标识符(ICCID 或 VirtualNo) * @param params 查询参数 */ static getAssetOrders( identifier: string, params?: AssetOrdersParams ): Promise> { return this.get>( `/api/admin/assets/${identifier}/orders`, params ) } }