diff --git a/flow_tests/AGENTS.md b/flow_tests/AGENTS.md deleted file mode 100644 index c7d5448..0000000 --- a/flow_tests/AGENTS.md +++ /dev/null @@ -1,647 +0,0 @@ -# 流程测试规范文档 - -> 本文档定义了业务流程测试的编写规范。AI 助手根据用户描述的业务流程自动生成测试脚本。 - -## 快速开始 - -### 环境准备 - -```bash -cd flow_tests -python3 -m venv venv -source venv/bin/activate # Windows: venv\Scripts\activate -pip install -r requirements.txt -``` - -### 运行测试 - -```bash -# 运行所有测试 -pytest - -# 运行指定模块 -pytest tests/test_account_flow.py -v - -# 运行指定流程 -pytest tests/test_account_flow.py::test_create_agent_flow -v - -# 查看详细输出 -pytest -v --tb=short -``` - ---- - -## 用户如何描述流程 - -### 描述格式(自然语言即可) - -用户只需用自然语言描述业务流程,AI 会自动: -1. 理解流程意图 -2. 找到对应的后端接口 -3. 生成测试脚本 -4. 处理数据清理 - -### 描述示例 - -**示例 1:简单流程** -> "测试创建代理商:平台管理员创建一个店铺,然后给这个店铺创建管理员账号,验证这个账号能登录" - -**示例 2:带条件的流程** -> "测试套餐分配:代理商只有被分配了套餐才能卖货。先创建店铺,不分配套餐时应该看不到任何可售套餐,分配后才能看到" - -**示例 3:异步流程** -> "测试设备导入:上传 CSV 文件导入设备,这是异步任务,需要等待任务完成后验证设备确实入库了" - -**示例 4:涉及第三方** -> "测试充值流程:用户下单充值,支付成功后卡片流量应该增加。支付回调可以直接模拟" - -### 需要说明的要素 - -| 要素 | 必须 | 说明 | -|------|------|------| -| 操作角色 | 是 | 谁在操作(平台管理员/代理商/企业用户/普通用户) | -| 操作步骤 | 是 | 按顺序描述要做什么 | -| 预期结果 | 是 | 每步操作后应该发生什么 | -| 前置条件 | 否 | 如果有特殊前置条件需要说明 | -| 异步等待 | 否 | 如果涉及异步任务需要说明 | - ---- - -## 测试框架结构 - -``` -flow_tests/ -├── AGENTS.md # 本规范文档 -├── openapi.yaml # OpenAPI 接口文档(AI 助手必读) -├── requirements.txt # Python 依赖 -├── pytest.ini # pytest 配置 -├── config/ -│ ├── settings.py # 配置加载 -│ ├── local.yaml # 本地环境配置 -│ └── remote.yaml # 远程环境配置 -├── core/ -│ ├── __init__.py -│ ├── client.py # HTTP 客户端封装 -│ ├── auth.py # 认证管理 -│ ├── database.py # 数据库直连(验证用) -│ ├── cleanup.py # 数据清理追踪器 -│ ├── mock.py # 第三方服务 Mock -│ └── wait.py # 异步任务等待器 -├── fixtures/ -│ ├── __init__.py -│ └── common.py # 通用 pytest fixtures -└── tests/ - ├── __init__.py - ├── test_account_flow.py # 账号管理流程 - ├── test_shop_flow.py # 店铺管理流程 - └── ... # 其他模块流程 -``` - ---- - -## 核心组件说明 - -### 1. HTTP 客户端 (core/client.py) - -```python -from core.client import APIClient - -# 创建客户端 -client = APIClient() - -# 登录获取 token -client.login("admin", "password") - -# 发起请求(自动带 token) -resp = client.post("/api/admin/accounts", json={...}) -resp = client.get("/api/admin/accounts/1") - -# 断言响应 -assert resp.ok() # code == 0 -assert resp.code == 0 -assert resp.data["id"] == 1 -``` - -### 2. 数据清理追踪器 (core/cleanup.py) - -**核心原则:只删除测试创建的数据,不影响原有数据** - -```python -from core.cleanup import CleanupTracker - -# 在 fixture 中初始化 -tracker = CleanupTracker(db_connection) - -# 记录创建的数据 -account_id = create_account(...) -tracker.track("admin_accounts", account_id) - -shop_id = create_shop(...) -tracker.track("shops", shop_id) - -# 测试结束后自动清理(逆序删除,处理依赖) -tracker.cleanup() # 先删 account,再删 shop -``` - -### 3. 认证管理 (core/auth.py) - -```python -from core.auth import AuthManager - -auth = AuthManager(client) - -# 预置角色快速登录 -auth.as_super_admin() # 超级管理员 -auth.as_platform_admin() # 平台管理员 -auth.as_agent(shop_id) # 代理商(需指定店铺) -auth.as_enterprise(ent_id) # 企业用户 - -# 自定义账号登录 -auth.login("custom_account", "password") -``` - -### 4. 异步任务等待器 (core/wait.py) - -```python -from core.wait import wait_for_task, wait_for_condition - -# 等待异步任务完成 -result = wait_for_task( - task_type="device_import", - task_id=task_id, - timeout=60, - poll_interval=2 -) - -# 等待条件满足 -wait_for_condition( - condition=lambda: db.query("SELECT count(*) FROM devices WHERE batch_id = %s", batch_id) > 0, - timeout=30, - message="等待设备入库" -) -``` - -### 5. Mock 服务 (core/mock.py) - -```python -from core.mock import MockService - -mock = MockService(db_connection) - -# 模拟支付回调 -mock.payment_success(order_id, amount=100) - -# 模拟短信验证码(直接写入数据库/Redis) -mock.sms_code(phone="13800138000", code="123456") - -# 模拟第三方 API 响应(如果后端支持 mock 模式) -mock.external_api("carrier_recharge", response={"success": True}) -``` - ---- - -## 测试编写规范 - -### 基本结构 - -```python -""" -账号管理流程测试 - -测试场景: -1. 创建代理商账号流程 -2. 账号权限验证流程 -... -""" -import pytest -from core.client import APIClient -from core.auth import AuthManager -from core.cleanup import CleanupTracker - - -class TestAccountFlow: - """账号管理流程""" - - def test_create_agent_account_flow(self, client, auth, tracker, db): - """ - 流程:创建代理商账号 - - 步骤: - 1. 平台管理员创建店铺 - 2. 给店铺创建管理员账号 - 3. 验证新账号能登录 - 4. 验证只能看到自己店铺的数据 - """ - # === 1. 平台管理员创建店铺 === - auth.as_platform_admin() - - resp = client.post("/api/admin/shops", json={ - "name": "测试代理商", - "contact": "张三", - "phone": "13800138000" - }) - assert resp.ok(), f"创建店铺失败: {resp.msg}" - shop_id = resp.data["id"] - tracker.track("shops", shop_id) - - # === 2. 创建店铺管理员账号 === - resp = client.post("/api/admin/accounts", json={ - "username": "test_agent_admin", - "password": "Test123456", - "shop_id": shop_id, - "role_ids": [2] # 假设 2 是店铺管理员角色 - }) - assert resp.ok(), f"创建账号失败: {resp.msg}" - account_id = resp.data["id"] - tracker.track("admin_accounts", account_id) - - # === 3. 验证新账号能登录 === - auth.login("test_agent_admin", "Test123456") - - resp = client.get("/api/admin/auth/me") - assert resp.ok() - assert resp.data["shop_id"] == shop_id - - # === 4. 验证只能看到自己店铺数据 === - resp = client.get("/api/admin/shops") - assert resp.ok() - # 代理商只能看到自己的店铺 - assert len(resp.data["list"]) == 1 - assert resp.data["list"][0]["id"] == shop_id -``` - -### 命名规范 - -| 类型 | 规范 | 示例 | -|------|------|------| -| 文件名 | `test_{模块}_flow.py` | `test_account_flow.py` | -| 类名 | `Test{模块}Flow` | `TestAccountFlow` | -| 方法名 | `test_{流程描述}` | `test_create_agent_account_flow` | -| 方法文档 | 必须包含流程步骤 | 见上方示例 | - -### Fixtures 使用 - -```python -# fixtures/common.py 提供以下通用 fixtures - -@pytest.fixture -def client(): - """HTTP 客户端""" - return APIClient() - -@pytest.fixture -def auth(client): - """认证管理器""" - return AuthManager(client) - -@pytest.fixture -def db(): - """数据库连接(只读验证用)""" - return get_db_connection() - -@pytest.fixture -def tracker(db): - """数据清理追踪器""" - t = CleanupTracker(db) - yield t - t.cleanup() # 测试结束自动清理 - -@pytest.fixture -def mock(db): - """Mock 服务""" - return MockService(db) -``` - ---- - -## 异步任务测试规范 - -### 导入类任务(设备导入、IoT卡导入) - -```python -def test_device_import_flow(self, client, auth, tracker, db): - """ - 流程:设备批量导入 - - 步骤: - 1. 上传 CSV 文件 - 2. 创建导入任务 - 3. 等待任务完成 - 4. 验证设备入库 - """ - auth.as_platform_admin() - - # 1. 上传文件 - with open("fixtures/devices.csv", "rb") as f: - resp = client.upload("/api/admin/storage/upload", file=f) - file_url = resp.data["url"] - - # 2. 创建导入任务 - resp = client.post("/api/admin/device-imports", json={ - "file_url": file_url, - "carrier_id": 1 - }) - assert resp.ok() - task_id = resp.data["task_id"] - - # 3. 等待任务完成 - from core.wait import wait_for_task - result = wait_for_task("device_import", task_id, timeout=60) - assert result["status"] == "completed" - - # 4. 验证设备入库 - imported_count = db.scalar( - "SELECT count(*) FROM devices WHERE import_task_id = %s", - task_id - ) - assert imported_count == 10 # CSV 中有 10 条 - - # 追踪清理 - tracker.track_by_query("devices", f"import_task_id = {task_id}") -``` - -### 支付回调类任务 - -```python -def test_recharge_flow(self, client, auth, tracker, db, mock): - """ - 流程:充值支付 - - 步骤: - 1. 用户创建充值订单 - 2. 模拟支付成功回调 - 3. 验证卡片流量增加 - """ - auth.as_enterprise(enterprise_id=1) - - # 1. 创建充值订单 - resp = client.post("/api/h5/recharge/orders", json={ - "card_id": 123, - "package_id": 456 - }) - assert resp.ok() - order_id = resp.data["order_id"] - tracker.track("orders", order_id) - - # 获取支付前流量 - before_data = db.scalar( - "SELECT data_balance FROM iot_cards WHERE id = 123" - ) - - # 2. 模拟支付回调 - mock.payment_success(order_id, amount=50.00) - - # 3. 验证流量增加 - from core.wait import wait_for_condition - wait_for_condition( - condition=lambda: db.scalar( - "SELECT data_balance FROM iot_cards WHERE id = 123" - ) > before_data, - timeout=10, - message="等待流量到账" - ) -``` - ---- - -## 角色权限说明 - -测试时需要了解系统角色体系: - -| 角色 | 说明 | 数据范围 | -|------|------|----------| -| 超级管理员 | 系统最高权限 | 全部数据 | -| 平台管理员 | 平台运营人员 | 全部数据(受权限配置限制) | -| 代理商管理员 | 店铺管理者 | 本店铺 + 下级店铺 | -| 代理商员工 | 店铺普通员工 | 本店铺 | -| 企业管理员 | 企业用户 | 本企业数据 | - ---- - -## 环境配置 - -### config/local.yaml - -```yaml -# 本地开发环境 -api: - base_url: "http://localhost:3000" - timeout: 30 - -database: - host: "localhost" - port: 5432 - name: "junhong_dev" - user: "postgres" - password: "postgres" - -redis: - host: "localhost" - port: 6379 - db: 0 - -# 预置测试账号 -accounts: - super_admin: - username: "superadmin" - password: "Admin123456" - platform_admin: - username: "platform" - password: "Admin123456" -``` - -### config/remote.yaml - -```yaml -# 远程测试环境 -api: - base_url: "https://test-api.example.com" - timeout: 30 - -database: - host: "test-db.example.com" - port: 5432 - name: "junhong_test" - user: "test_user" - password: "test_password" - -redis: - host: "test-redis.example.com" - port: 6379 - db: 0 -``` - -### 切换环境 - -```bash -# 使用本地环境(默认) -pytest - -# 使用远程环境 -TEST_ENV=remote pytest -``` - ---- - -## 数据清理规则 - -### 清理原则 - -1. **只删除测试创建的数据** - 通过 tracker 追踪 -2. **逆序删除** - 先删依赖方,再删被依赖方 -3. **软删除优先** - 如果表支持软删除,使用软删除 -4. **级联处理** - 自动处理关联数据 - -### 追踪方式 - -```python -# 方式1:追踪单条记录 -tracker.track("table_name", record_id) - -# 方式2:追踪多条记录 -tracker.track_many("table_name", [id1, id2, id3]) - -# 方式3:按条件追踪(用于批量导入等场景) -tracker.track_by_query("devices", "import_task_id = 123") - -# 方式4:追踪关联数据(自动级联) -tracker.track_with_relations("shops", shop_id, relations=[ - ("admin_accounts", "shop_id"), - ("shop_packages", "shop_id") -]) -``` - -### 清理顺序配置 - -```python -# core/cleanup.py 中定义表的依赖关系 -TABLE_DEPENDENCIES = { - "admin_accounts": ["shops"], # accounts 依赖 shops - "shop_packages": ["shops", "packages"], # shop_packages 依赖 shops 和 packages - "orders": ["iot_cards", "packages"], - # ... 根据实际表结构配置 -} -``` - ---- - -## 常见问题 - -### Q: 如何处理需要真实第三方服务的测试? - -A: 两种方式: -1. 使用 Mock 模式(推荐):直接模拟回调或写入预期数据 -2. 如果必须真实调用:在配置中标记为 `skip_in_mock_mode`,仅在集成环境运行 - -### Q: 测试数据影响了其他人怎么办? - -A: -1. 本地环境:数据隔离,不影响他人 -2. 远程环境:使用唯一标识(如 UUID)创建数据,确保清理 - -### Q: 异步任务超时怎么办? - -A: -1. 检查任务是否真的启动了 -2. 检查 worker 是否在运行 -3. 增加超时时间(最后手段) -4. 查看任务日志定位问题 - ---- - -## 接口文档(OpenAPI) - -**重要**:生成测试时,AI 助手必须首先查阅 `flow_tests/openapi.yaml` 获取准确的接口信息。 - -### 文件位置 - -``` -flow_tests/openapi.yaml # OpenAPI 3.0 规范文档 -``` - -### 文档结构 - -```yaml -# openapi.yaml 结构 -components: - schemas: # 数据模型定义(DTO) - DtoCreateShopRequest: - properties: - shop_name: { type: string } - shop_code: { type: string } - # ... - required: [shop_name, shop_code] - -paths: # API 路径定义 - /api/admin/shops: - post: - summary: 创建店铺 - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoCreateShopRequest' - responses: - '200': - content: - application/json: - schema: - $ref: '#/components/schemas/DtoShopResponse' -``` - -### AI 助手使用方式 - -1. **查找接口**:根据用户描述的流程,在 `paths` 中找到对应的 API 路径 -2. **获取请求参数**:从 `requestBody.schema` 获取请求体结构 -3. **获取响应格式**:从 `responses.200.schema` 获取响应体结构 -4. **理解字段含义**:从 `components.schemas` 中查看字段的 `description` - -### 示例:查找创建店铺接口 - -用户说:"创建一个店铺" - -AI 助手应该: -1. 读取 `openapi.yaml` -2. 搜索 `shops` 相关路径 → 找到 `POST /api/admin/shops` -3. 查看 `DtoCreateShopRequest` 了解必填字段:`shop_name`, `shop_code`, `init_username`, `init_phone`, `init_password` -4. 生成正确的测试代码 - -```python -resp = client.post("/api/admin/shops", json={ - "shop_name": "测试店铺", - "shop_code": "TEST001", - "init_username": "test_admin", - "init_phone": "13800138000", - "init_password": "Test123456", -}) -``` - ---- - -## AI 助手工作流程 - -当用户描述业务流程后,AI 助手按以下步骤工作: - -1. **理解流程**:分析用户描述,提取操作角色、步骤、预期结果 -2. **查阅接口文档**:读取 `flow_tests/openapi.yaml` 获取准确的接口路径、请求参数、响应格式 -3. **生成测试**:按照本规范生成测试代码,使用 OpenAPI 文档中的字段定义 -4. **补充清理**:添加数据追踪和清理逻辑 -5. **运行验证**:执行测试确保通过 -6. **报告结果**:告知用户测试结果,如发现问题则报告 - -### 接口查找优先级 - -| 优先级 | 来源 | 说明 | -|--------|------|------| -| 1 | `flow_tests/openapi.yaml` | **首选**,最准确的接口定义 | -| 2 | 项目代码 `internal/handler/` | OpenAPI 未覆盖时查找源码 | -| 3 | 项目代码 `internal/router/` | 确认路由注册 | - ---- - -## 版本记录 - -| 版本 | 日期 | 说明 | -|------|------|------| -| 1.0 | 2026-02-02 | 初始版本 | -| 1.1 | 2026-02-02 | 增加 OpenAPI 接口文档规范 | diff --git a/flow_tests/config/local.yaml b/flow_tests/config/local.yaml deleted file mode 100644 index 36ce0e9..0000000 --- a/flow_tests/config/local.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# 本地开发环境配置 -# 使用方式: TEST_ENV=local pytest (默认) - -api: - base_url: "http://localhost:3000" - timeout: 30 - -database: - host: "localhost" - port: 5432 - name: "junhong_dev" - user: "postgres" - password: "postgres" - -redis: - host: "localhost" - port: 6379 - db: 0 - -# 预置测试账号 -# 根据实际系统配置修改 -accounts: - super_admin: - username: "superadmin" - password: "Admin123456" - platform_admin: - username: "platform" - password: "Admin123456" - -# Mock 配置 -mock: - # 是否启用 Mock 模式(跳过真实第三方调用) - enabled: true - # 支付回调 Mock - payment: - auto_success: true - delay_seconds: 1 diff --git a/flow_tests/config/remote.yaml b/flow_tests/config/remote.yaml deleted file mode 100644 index c04b07a..0000000 --- a/flow_tests/config/remote.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# 远程测试环境配置 -# 使用方式: TEST_ENV=remote pytest - -api: - base_url: "https://test-api.example.com" - timeout: 30 - -database: - host: "test-db.example.com" - port: 5432 - name: "junhong_test" - user: "test_user" - password: "test_password" - -redis: - host: "test-redis.example.com" - port: 6379 - db: 0 - -# 预置测试账号 -accounts: - super_admin: - username: "superadmin" - password: "Admin123456" - platform_admin: - username: "platform" - password: "Admin123456" - -# Mock 配置 -mock: - enabled: true - payment: - auto_success: true - delay_seconds: 1 diff --git a/flow_tests/config/settings.py b/flow_tests/config/settings.py deleted file mode 100644 index ad27b5c..0000000 --- a/flow_tests/config/settings.py +++ /dev/null @@ -1,95 +0,0 @@ -""" -配置管理模块 - -支持多环境配置切换: -- TEST_ENV=local 使用本地配置(默认) -- TEST_ENV=remote 使用远程配置 -""" -import os -from pathlib import Path -from typing import Any, Optional - -import yaml - - -class Settings: - """配置管理器""" - - _instance: Optional['Settings'] = None - _config: dict = {} - - def __new__(cls): - if cls._instance is None: - cls._instance = super().__new__(cls) - cls._instance._load_config() - return cls._instance - - def _load_config(self): - """加载配置文件""" - env = os.getenv("TEST_ENV", "local") - config_dir = Path(__file__).parent - config_file = config_dir / f"{env}.yaml" - - if not config_file.exists(): - raise FileNotFoundError(f"配置文件不存在: {config_file}") - - with open(config_file, "r", encoding="utf-8") as f: - self._config = yaml.safe_load(f) - - print(f"[配置] 已加载 {env} 环境配置") - - def get(self, key: str, default: Any = None) -> Any: - """ - 获取配置值,支持点号分隔的路径 - - 示例: - settings.get("api.base_url") - settings.get("database.host") - """ - keys = key.split(".") - value = self._config - - for k in keys: - if isinstance(value, dict): - value = value.get(k) - else: - return default - - if value is None: - return default - - return value - - @property - def api_base_url(self) -> str: - return self.get("api.base_url", "http://localhost:3000") - - @property - def api_timeout(self) -> int: - return self.get("api.timeout", 30) - - @property - def db_config(self) -> dict: - return { - "host": self.get("database.host", "localhost"), - "port": self.get("database.port", 5432), - "database": self.get("database.name", "junhong_dev"), - "user": self.get("database.user", "postgres"), - "password": self.get("database.password", "postgres"), - } - - @property - def redis_config(self) -> dict: - return { - "host": self.get("redis.host", "localhost"), - "port": self.get("redis.port", 6379), - "db": self.get("redis.db", 0), - } - - def get_account(self, role: str) -> dict: - """获取预置账号信息""" - return self.get(f"accounts.{role}", {}) - - -# 全局配置实例 -settings = Settings() diff --git a/flow_tests/conftest.py b/flow_tests/conftest.py deleted file mode 100644 index a6ca266..0000000 --- a/flow_tests/conftest.py +++ /dev/null @@ -1,6 +0,0 @@ -import sys -from pathlib import Path - -sys.path.insert(0, str(Path(__file__).parent)) - -pytest_plugins = ["fixtures.common"] diff --git a/flow_tests/core/__init__.py b/flow_tests/core/__init__.py deleted file mode 100644 index 03a8cb6..0000000 --- a/flow_tests/core/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -from .client import APIClient, APIResponse -from .auth import AuthManager -from .database import Database -from .cleanup import CleanupTracker -from .mock import MockService -from .wait import wait_for_task, wait_for_condition - -__all__ = [ - "APIClient", - "APIResponse", - "AuthManager", - "Database", - "CleanupTracker", - "MockService", - "wait_for_task", - "wait_for_condition", -] diff --git a/flow_tests/core/auth.py b/flow_tests/core/auth.py deleted file mode 100644 index 18d5ee1..0000000 --- a/flow_tests/core/auth.py +++ /dev/null @@ -1,71 +0,0 @@ -import logging -from typing import Optional - -from config.settings import settings -from .client import APIClient - -logger = logging.getLogger(__name__) - - -class AuthManager: - def __init__(self, client: APIClient): - self.client = client - self._current_role: Optional[str] = None - - @property - def current_role(self) -> Optional[str]: - return self._current_role - - def login(self, username: str, password: str) -> bool: - resp = self.client.login(username, password) - if resp.ok(): - self._current_role = "custom" - return True - logger.error(f"登录失败: {resp.msg}") - return False - - def logout(self): - self.client.clear_token() - self._current_role = None - - def _login_preset_account(self, role: str) -> bool: - account = settings.get_account(role) - if not account: - raise ValueError(f"未配置 {role} 账号,请检查配置文件") - - if self.login(account["username"], account["password"]): - self._current_role = role - return True - return False - - def as_super_admin(self) -> 'AuthManager': - self._login_preset_account("super_admin") - return self - - def as_platform_admin(self) -> 'AuthManager': - self._login_preset_account("platform_admin") - return self - - def as_agent(self, shop_id: int, username: Optional[str] = None, password: Optional[str] = None) -> 'AuthManager': - if username and password: - self.login(username, password) - else: - account = settings.get_account(f"agent_{shop_id}") - if account: - self.login(account["username"], account["password"]) - else: - raise ValueError(f"未配置 agent_{shop_id} 账号,请提供用户名密码或在配置文件中添加") - self._current_role = f"agent_{shop_id}" - return self - - def as_enterprise(self, enterprise_id: int, username: Optional[str] = None, password: Optional[str] = None) -> 'AuthManager': - if username and password: - self.login(username, password) - else: - account = settings.get_account(f"enterprise_{enterprise_id}") - if account: - self.login(account["username"], account["password"]) - else: - raise ValueError(f"未配置 enterprise_{enterprise_id} 账号,请提供用户名密码或在配置文件中添加") - self._current_role = f"enterprise_{enterprise_id}" - return self diff --git a/flow_tests/core/cleanup.py b/flow_tests/core/cleanup.py deleted file mode 100644 index 7fb08e9..0000000 --- a/flow_tests/core/cleanup.py +++ /dev/null @@ -1,113 +0,0 @@ -import logging -from collections import defaultdict -from typing import Dict, List, Optional, Tuple - -from .database import Database - -logger = logging.getLogger(__name__) - -TABLE_DEPENDENCIES: Dict[str, List[str]] = { - "tb_account": ["tb_shop", "tb_enterprise"], - "tb_account_role": ["tb_account", "tb_role"], - "tb_shop": [], - "tb_enterprise": ["tb_shop"], - "tb_role": [], - "tb_permission": [], - "tb_role_permission": ["tb_role", "tb_permission"], - "tb_device": ["tb_shop"], - "tb_iot_card": ["tb_shop", "tb_device"], - "tb_package": [], - "tb_package_series": [], - "tb_order": ["tb_iot_card", "tb_package"], - "tb_shop_package": ["tb_shop", "tb_package"], - "tb_shop_package_series": ["tb_shop", "tb_package_series"], -} - -SOFT_DELETE_TABLES = { - "tb_account", "tb_shop", "tb_enterprise", "tb_role", - "tb_device", "tb_iot_card", "tb_package", "tb_order", -} - - -class CleanupTracker: - def __init__(self, db: Optional[Database] = None): - self.db = db or Database() - self._tracked: Dict[str, List[int]] = defaultdict(list) - self._tracked_queries: List[Tuple[str, str]] = [] - - def track(self, table: str, record_id: int): - self._tracked[table].append(record_id) - logger.debug(f"追踪: {table}#{record_id}") - - def track_many(self, table: str, record_ids: List[int]): - self._tracked[table].extend(record_ids) - logger.debug(f"追踪: {table}#{record_ids}") - - def track_by_query(self, table: str, where_clause: str): - self._tracked_queries.append((table, where_clause)) - logger.debug(f"追踪查询: {table} WHERE {where_clause}") - - def track_with_relations(self, table: str, record_id: int, relations: List[Tuple[str, str]]): - self.track(table, record_id) - for rel_table, fk_column in relations: - ids = self.db.query( - f"SELECT id FROM {rel_table} WHERE {fk_column} = %s", - (record_id,) - ) - for row in ids: - self.track(rel_table, row["id"]) - - def cleanup(self): - logger.info("开始清理测试数据...") - - for table, where_clause in reversed(self._tracked_queries): - self._delete_by_query(table, where_clause) - - sorted_tables = self._sort_by_dependency() - - for table in sorted_tables: - ids = self._tracked.get(table, []) - if ids: - self._delete_records(table, ids) - - logger.info("测试数据清理完成") - - def _sort_by_dependency(self) -> List[str]: - tables = list(self._tracked.keys()) - - def get_order(t: str) -> int: - deps = TABLE_DEPENDENCIES.get(t, []) - if not deps: - return 0 - return max(get_order(d) for d in deps if d in tables) + 1 if any(d in tables for d in deps) else 0 - - return sorted(tables, key=get_order, reverse=True) - - def _delete_records(self, table: str, ids: List[int]): - if not ids: - return - - placeholders = ",".join(["%s"] * len(ids)) - - if table in SOFT_DELETE_TABLES: - sql = f"UPDATE {table} SET deleted_at = NOW() WHERE id IN ({placeholders}) AND deleted_at IS NULL" - else: - sql = f"DELETE FROM {table} WHERE id IN ({placeholders})" - - try: - count = self.db.execute(sql, tuple(ids)) - logger.info(f"清理 {table}: {count} 条记录") - except Exception as e: - logger.error(f"清理 {table} 失败: {e}") - - def _delete_by_query(self, table: str, where_clause: str): - if table in SOFT_DELETE_TABLES: - sql = f"UPDATE {table} SET deleted_at = NOW() WHERE {where_clause} AND deleted_at IS NULL" - else: - sql = f"DELETE FROM {table} WHERE {where_clause}" - - try: - count = self.db.execute(sql) - logger.info(f"清理 {table} (查询): {count} 条记录") - except Exception as e: - logger.error(f"清理 {table} (查询) 失败: {e}") diff --git a/flow_tests/core/client.py b/flow_tests/core/client.py deleted file mode 100644 index 711bf67..0000000 --- a/flow_tests/core/client.py +++ /dev/null @@ -1,100 +0,0 @@ -import logging -from dataclasses import dataclass -from typing import Any, Optional - -import requests - -from config.settings import settings - -logger = logging.getLogger(__name__) - - -@dataclass -class APIResponse: - status_code: int - code: int - msg: str - data: Any - raw: dict - - def ok(self) -> bool: - return self.code == 0 - - def __bool__(self) -> bool: - return self.ok() - - -class APIClient: - def __init__(self, base_url: Optional[str] = None): - self.base_url = base_url or settings.api_base_url - self.timeout = settings.api_timeout - self.token: Optional[str] = None - self.session = requests.Session() - - def set_token(self, token: str): - self.token = token - self.session.headers["Authorization"] = f"Bearer {token}" - - def clear_token(self): - self.token = None - self.session.headers.pop("Authorization", None) - - def _request(self, method: str, path: str, **kwargs) -> APIResponse: - url = f"{self.base_url}{path}" - kwargs.setdefault("timeout", self.timeout) - logger.info(f"{method} {path}") - - try: - resp = self.session.request(method, url, **kwargs) - except requests.exceptions.RequestException as e: - logger.error(f"请求失败: {e}") - return APIResponse(status_code=0, code=-1, msg=str(e), data=None, raw={}) - - try: - raw = resp.json() - except ValueError: - return APIResponse( - status_code=resp.status_code, code=-1, - msg="响应不是有效的 JSON", data=None, raw={} - ) - - return APIResponse( - status_code=resp.status_code, - code=raw.get("code", -1), - msg=raw.get("msg", ""), - data=raw.get("data"), - raw=raw, - ) - - def get(self, path: str, params: Optional[dict] = None, **kwargs) -> APIResponse: - return self._request("GET", path, params=params, **kwargs) - - def post(self, path: str, json: Optional[dict] = None, **kwargs) -> APIResponse: - return self._request("POST", path, json=json, **kwargs) - - def put(self, path: str, json: Optional[dict] = None, **kwargs) -> APIResponse: - return self._request("PUT", path, json=json, **kwargs) - - def delete(self, path: str, **kwargs) -> APIResponse: - return self._request("DELETE", path, **kwargs) - - def patch(self, path: str, json: Optional[dict] = None, **kwargs) -> APIResponse: - return self._request("PATCH", path, json=json, **kwargs) - - def upload(self, path: str, file, field_name: str = "file", **kwargs) -> APIResponse: - files = {field_name: file} - return self._request("POST", path, files=files, **kwargs) - - def login(self, username: str, password: str, login_path: str = "/api/admin/auth/login") -> APIResponse: - resp = self.post(login_path, json={ - "username": username, - "password": password, - }) - - if resp.ok() and resp.data: - token = resp.data.get("token") or resp.data.get("access_token") - if token: - self.set_token(token) - logger.info(f"登录成功: {username}") - - return resp diff --git a/flow_tests/core/database.py b/flow_tests/core/database.py deleted file mode 100644 index 94e801a..0000000 --- a/flow_tests/core/database.py +++ /dev/null @@ -1,69 +0,0 @@ -import logging -from typing import Any, List, Optional - -import psycopg2 -from psycopg2.extras import RealDictCursor - -from config.settings import settings - -logger = logging.getLogger(__name__) - - -class Database: - _instance: Optional['Database'] = None - _conn = None - - def __new__(cls): - if cls._instance is None: - cls._instance = super().__new__(cls) - cls._instance._connect() - return cls._instance - - def _connect(self): - config = settings.db_config - self._conn = psycopg2.connect( - host=config["host"], - port=config["port"], - database=config["database"], - user=config["user"], - password=config["password"], - cursor_factory=RealDictCursor, - ) - self._conn.autocommit = True - logger.info(f"数据库连接成功: {config['host']}:{config['port']}/{config['database']}") - - def query(self, sql: str, params: tuple = ()) -> List[dict]: - with self._conn.cursor() as cur: - cur.execute(sql, params) - return cur.fetchall() - - def query_one(self, sql: str, params: tuple = ()) -> Optional[dict]: - rows = self.query(sql, params) - return rows[0] if rows else None - - def scalar(self, sql: str, params: tuple = ()) -> Any: - with self._conn.cursor() as cur: - cur.execute(sql, params) - row = cur.fetchone() - if row: - return list(row.values())[0] - return None - - def execute(self, sql: str, params: tuple = ()) -> int: - with self._conn.cursor() as cur: - cur.execute(sql, params) - return cur.rowcount - - def execute_many(self, sql: str, params_list: List[tuple]) -> int: - with self._conn.cursor() as cur: - cur.executemany(sql, params_list) - return cur.rowcount - - def close(self): - if self._conn: - self._conn.close() - logger.info("数据库连接已关闭") - - -def get_db() -> Database: - return Database() diff --git a/flow_tests/core/mock.py b/flow_tests/core/mock.py deleted file mode 100644 index e60744c..0000000 --- a/flow_tests/core/mock.py +++ /dev/null @@ -1,74 +0,0 @@ -import logging -import time -from typing import Any, Optional - -import redis - -from config.settings import settings -from .database import Database - -logger = logging.getLogger(__name__) - - -class MockService: - def __init__(self, db: Optional[Database] = None): - self.db = db or Database() - self._init_redis() - - def _init_redis(self): - config = settings.redis_config - self.redis = redis.Redis( - host=config["host"], - port=config["port"], - db=config["db"], - decode_responses=True, - ) - - def payment_success(self, order_id: int, amount: float, delay: float = 0): - if delay > 0: - time.sleep(delay) - - self.db.execute( - "UPDATE tb_order SET status = %s, paid_at = NOW(), paid_amount = %s WHERE id = %s", - ("paid", int(amount * 100), order_id) - ) - logger.info(f"模拟支付成功: order_id={order_id}, amount={amount}") - - def payment_failed(self, order_id: int, reason: str = "支付失败"): - self.db.execute( - "UPDATE tb_order SET status = %s, fail_reason = %s WHERE id = %s", - ("failed", reason, order_id) - ) - logger.info(f"模拟支付失败: order_id={order_id}, reason={reason}") - - def sms_code(self, phone: str, code: str, expire_seconds: int = 300): - key = f"sms:code:{phone}" - self.redis.setex(key, expire_seconds, code) - logger.info(f"模拟短信验证码: phone={phone}, code={code}") - - def task_complete(self, task_type: str, task_id: int, result: Any = None): - self.db.execute( - "UPDATE tb_async_task SET status = %s, result = %s, completed_at = NOW() WHERE task_type = %s AND id = %s", - ("completed", str(result) if result else None, task_type, task_id) - ) - logger.info(f"模拟任务完成: {task_type}#{task_id}") - - def task_failed(self, task_type: str, task_id: int, error: str): - self.db.execute( - "UPDATE tb_async_task SET status = %s, error = %s, completed_at = NOW() WHERE task_type = %s AND id = %s", - ("failed", error, task_type, task_id) - ) - logger.info(f"模拟任务失败: {task_type}#{task_id}, error={error}") - - def card_data_balance(self, card_id: int, balance_mb: int): - self.db.execute( - "UPDATE tb_iot_card SET data_balance = %s WHERE id = %s", - (balance_mb, card_id) - ) - logger.info(f"模拟卡片流量: card_id={card_id}, balance={balance_mb}MB") - - def external_api_response(self, api_name: str, response: dict): - key = f"mock:api:{api_name}" - import json - self.redis.setex(key, 300, json.dumps(response)) - logger.info(f"模拟外部 API: {api_name}") diff --git a/flow_tests/core/wait.py b/flow_tests/core/wait.py deleted file mode 100644 index 014b8f5..0000000 --- a/flow_tests/core/wait.py +++ /dev/null @@ -1,99 +0,0 @@ -import logging -import time -from typing import Any, Callable, Optional - -from .database import Database - -logger = logging.getLogger(__name__) - - -class TimeoutError(Exception): - pass - - -def wait_for_condition( - condition: Callable[[], bool], - timeout: float = 30, - poll_interval: float = 1, - message: str = "等待条件满足", -) -> bool: - start = time.time() - - while time.time() - start < timeout: - try: - if condition(): - logger.info(f"{message}: 成功 (耗时 {time.time() - start:.1f}s)") - return True - except Exception as e: - logger.debug(f"{message}: 检查失败 - {e}") - - time.sleep(poll_interval) - - raise TimeoutError(f"{message}: 超时 ({timeout}s)") - - -def wait_for_task( - task_type: str, - task_id: int, - timeout: float = 60, - poll_interval: float = 2, - db: Optional[Database] = None, -) -> dict: - db = db or Database() - start = time.time() - - while time.time() - start < timeout: - row = db.query_one( - "SELECT status, result, error FROM tb_async_task WHERE task_type = %s AND id = %s", - (task_type, task_id) - ) - - if not row: - raise ValueError(f"任务不存在: {task_type}#{task_id}") - - if row["status"] in ("completed", "failed"): - logger.info(f"任务完成: {task_type}#{task_id}, status={row['status']}, 耗时 {time.time() - start:.1f}s") - return dict(row) - - logger.debug(f"等待任务: {task_type}#{task_id}, 当前状态={row['status']}") - time.sleep(poll_interval) - - raise TimeoutError(f"任务超时: {task_type}#{task_id} ({timeout}s)") - - -def wait_for_db_condition( - sql: str, - params: tuple = (), - expected: Any = True, - timeout: float = 30, - poll_interval: float = 1, - db: Optional[Database] = None, -) -> Any: - db = db or Database() - - def check(): - result = db.scalar(sql, params) - if callable(expected): - return expected(result) - return result == expected - - wait_for_condition(check, timeout, poll_interval, f"等待 SQL 条件: {sql[:50]}...") - return db.scalar(sql, params) - - -def wait_for_record_count( - table: str, - where_clause: str, - expected_count: int, - timeout: float = 30, - db: Optional[Database] = None, -) -> int: - db = db or Database() - sql = f"SELECT COUNT(*) FROM {table} WHERE {where_clause}" - - def check(): - count = db.scalar(sql) - return count >= expected_count - - wait_for_condition(check, timeout, 1, f"等待 {table} 记录数 >= {expected_count}") - return db.scalar(sql) diff --git a/flow_tests/fixtures/__init__.py b/flow_tests/fixtures/__init__.py deleted file mode 100644 index bb00114..0000000 --- a/flow_tests/fixtures/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .common import client, auth, db, tracker, mock - -__all__ = ["client", "auth", "db", "tracker", "mock"] diff --git a/flow_tests/fixtures/common.py b/flow_tests/fixtures/common.py deleted file mode 100644 index 7f73a63..0000000 --- a/flow_tests/fixtures/common.py +++ /dev/null @@ -1,38 +0,0 @@ -import pytest - -import sys -from pathlib import Path -sys.path.insert(0, str(Path(__file__).parent.parent)) - -from core.client import APIClient -from core.auth import AuthManager -from core.database import Database -from core.cleanup import CleanupTracker -from core.mock import MockService - - -@pytest.fixture(scope="function") -def client(): - return APIClient() - - -@pytest.fixture(scope="function") -def auth(client): - return AuthManager(client) - - -@pytest.fixture(scope="module") -def db(): - return Database() - - -@pytest.fixture(scope="function") -def tracker(db): - t = CleanupTracker(db) - yield t - t.cleanup() - - -@pytest.fixture(scope="function") -def mock(db): - return MockService(db) diff --git a/flow_tests/openapi.yaml b/flow_tests/openapi.yaml deleted file mode 100644 index dc533cd..0000000 --- a/flow_tests/openapi.yaml +++ /dev/null @@ -1,16019 +0,0 @@ -components: - schemas: - AppLoginRequest: - properties: - code: - type: string - phone: - type: string - type: object - AppLoginResponse: - properties: - customer: - $ref: '#/components/schemas/AppPersonalCustomerDTO' - token: - type: string - type: object - AppPersonalCustomerDTO: - properties: - avatar_url: - type: string - id: - minimum: 0 - type: integer - nickname: - type: string - phone: - type: string - status: - type: integer - wx_open_id: - type: string - type: object - AppSendCodeRequest: - properties: - phone: - type: string - type: object - AppUpdateProfileRequest: - properties: - avatar_url: - type: string - nickname: - type: string - type: object - DtoAccountPageResult: - properties: - items: - description: 账号列表 - items: - $ref: '#/components/schemas/DtoAccountResponse' - nullable: true - type: array - page: - description: 当前页码 - type: integer - size: - description: 每页数量 - type: integer - total: - description: 总记录数 - type: integer - type: object - DtoAccountResponse: - properties: - created_at: - description: 创建时间 - type: string - creator: - description: 创建人ID - minimum: 0 - type: integer - enterprise_id: - description: 关联企业ID - minimum: 0 - nullable: true - type: integer - id: - description: 账号ID - minimum: 0 - type: integer - phone: - description: 手机号 - type: string - shop_id: - description: 关联店铺ID - minimum: 0 - nullable: true - type: integer - status: - description: 状态 (0:禁用, 1:启用) - type: integer - updated_at: - description: 更新时间 - type: string - updater: - description: 更新人ID - minimum: 0 - type: integer - user_type: - description: 用户类型 (1:超级管理员, 2:平台用户, 3:代理账号, 4:企业账号) - type: integer - username: - description: 用户名 - type: string - type: object - DtoAccountRoleResponse: - properties: - account_id: - description: 账号ID - minimum: 0 - type: integer - created_at: - description: 创建时间 - type: string - id: - description: 关联ID - minimum: 0 - type: integer - role_id: - description: 角色ID - minimum: 0 - type: integer - status: - description: 状态 (0:禁用, 1:启用) - type: integer - type: object - DtoAccountRolesResponse: - properties: - account_id: - description: 账号ID - minimum: 0 - type: integer - roles: - description: 角色列表 - items: - $ref: '#/components/schemas/DtoRoleResponse' - nullable: true - type: array - type: object - DtoAllocateCardsReq: - properties: - iccids: - description: 需要授权的 ICCID 列表 - items: - type: string - nullable: true - type: array - remark: - description: 授权备注 - type: string - required: - - iccids - type: object - DtoAllocateCardsResp: - properties: - fail_count: - description: 失败数量 - type: integer - failed_items: - description: 失败详情 - items: - $ref: '#/components/schemas/DtoFailedItem' - nullable: true - type: array - success_count: - description: 成功数量 - type: integer - type: object - DtoAllocateDevicesReq: - properties: - device_nos: - description: 设备号列表(最多100个) - items: - type: string - nullable: true - type: array - remark: - description: 授权备注 - type: string - type: object - DtoAllocateDevicesRequest: - properties: - device_ids: - description: 设备ID列表 - items: - minimum: 0 - type: integer - maxItems: 100 - minItems: 1 - nullable: true - type: array - remark: - description: 备注 - maxLength: 500 - type: string - target_shop_id: - description: 目标店铺ID - minimum: 1 - type: integer - required: - - target_shop_id - - device_ids - type: object - DtoAllocateDevicesResp: - properties: - authorized_devices: - description: 已授权设备列表 - items: - $ref: '#/components/schemas/DtoAuthorizedDeviceItem' - nullable: true - type: array - fail_count: - description: 失败数量 - type: integer - failed_items: - description: 失败项列表 - items: - $ref: '#/components/schemas/DtoFailedDeviceItem' - nullable: true - type: array - success_count: - description: 成功数量 - type: integer - type: object - DtoAllocateDevicesResponse: - properties: - fail_count: - description: 失败数量 - type: integer - failed_items: - description: 失败详情列表 - items: - $ref: '#/components/schemas/DtoAllocationDeviceFailedItem' - nullable: true - type: array - success_count: - description: 成功数量 - type: integer - type: object - DtoAllocateStandaloneCardsRequest: - properties: - batch_no: - description: 批次号(selection_type=filter时可选) - maxLength: 100 - type: string - carrier_id: - description: 运营商ID(selection_type=filter时可选) - minimum: 0 - nullable: true - type: integer - iccid_end: - description: 结束ICCID(selection_type=range时必填) - maxLength: 20 - type: string - iccid_start: - description: 起始ICCID(selection_type=range时必填) - maxLength: 20 - type: string - iccids: - description: ICCID列表(selection_type=list时必填,最多1000个) - items: - type: string - nullable: true - type: array - remark: - description: 备注 - maxLength: 500 - type: string - selection_type: - description: 选卡方式 (list:ICCID列表, range:号段范围, filter:筛选条件) - enum: - - list - - range - - filter - type: string - status: - description: 卡状态 (1:在库, 2:已分销)(selection_type=filter时可选) - maximum: 4 - minimum: 1 - nullable: true - type: integer - to_shop_id: - description: 目标店铺ID - minimum: 1 - type: integer - required: - - to_shop_id - - selection_type - type: object - DtoAllocateStandaloneCardsResponse: - properties: - allocation_no: - description: 分配单号 - type: string - fail_count: - description: 失败数 - type: integer - failed_items: - description: 失败项列表 - items: - $ref: '#/components/schemas/DtoAllocationFailedItem' - nullable: true - type: array - success_count: - description: 成功数 - type: integer - total_count: - description: 待分配总数 - type: integer - type: object - DtoAllocationDeviceFailedItem: - properties: - device_id: - description: 设备ID - minimum: 0 - type: integer - device_no: - description: 设备号 - type: string - reason: - description: 失败原因 - type: string - type: object - DtoAllocationFailedItem: - properties: - iccid: - description: ICCID - type: string - reason: - description: 失败原因 - type: string - type: object - DtoApproveWithdrawalReq: - properties: - account_name: - description: 修正后的收款人姓名 - maxLength: 100 - nullable: true - type: string - account_number: - description: 修正后的收款账号 - maxLength: 100 - nullable: true - type: string - amount: - description: 修正后的提现金额(分),不填则使用原金额 - minimum: 1 - nullable: true - type: integer - payment_type: - description: 放款类型(目前只支持manual人工打款) - type: string - remark: - description: 备注 - maxLength: 500 - type: string - withdrawal_method: - description: 修正后的收款类型 (alipay:支付宝, wechat:微信, bank:银行卡) - nullable: true - type: string - required: - - payment_type - type: object - DtoAssetAllocationRecordDetailResponse: - properties: - allocation_name: - description: 分配类型名称 - type: string - allocation_no: - description: 分配单号 - type: string - allocation_type: - description: 分配类型 (allocate:分配, recall:回收) - type: string - asset_id: - description: 资产ID - minimum: 0 - type: integer - asset_identifier: - description: 资产标识符(ICCID或设备号) - type: string - asset_type: - description: 资产类型 (iot_card:物联网卡, device:设备) - type: string - asset_type_name: - description: 资产类型名称 - type: string - created_at: - description: 创建时间 - format: date-time - type: string - from_owner_id: - description: 来源所有者ID - minimum: 0 - nullable: true - type: integer - from_owner_name: - description: 来源所有者名称 - type: string - from_owner_type: - description: 来源所有者类型 - type: string - id: - description: 记录ID - minimum: 0 - type: integer - operator_id: - description: 操作人ID - minimum: 0 - type: integer - operator_name: - description: 操作人名称 - type: string - related_card_count: - description: 关联卡数量 - type: integer - related_card_ids: - description: 关联卡ID列表 - items: - minimum: 0 - type: integer - type: array - related_device_id: - description: 关联设备ID - minimum: 0 - nullable: true - type: integer - remark: - description: 备注 - type: string - to_owner_id: - description: 目标所有者ID - minimum: 0 - type: integer - to_owner_name: - description: 目标所有者名称 - type: string - to_owner_type: - description: 目标所有者类型 - type: string - type: object - DtoAssetAllocationRecordResponse: - properties: - allocation_name: - description: 分配类型名称 - type: string - allocation_no: - description: 分配单号 - type: string - allocation_type: - description: 分配类型 (allocate:分配, recall:回收) - type: string - asset_id: - description: 资产ID - minimum: 0 - type: integer - asset_identifier: - description: 资产标识符(ICCID或设备号) - type: string - asset_type: - description: 资产类型 (iot_card:物联网卡, device:设备) - type: string - asset_type_name: - description: 资产类型名称 - type: string - created_at: - description: 创建时间 - format: date-time - type: string - from_owner_id: - description: 来源所有者ID - minimum: 0 - nullable: true - type: integer - from_owner_name: - description: 来源所有者名称 - type: string - from_owner_type: - description: 来源所有者类型 - type: string - id: - description: 记录ID - minimum: 0 - type: integer - operator_id: - description: 操作人ID - minimum: 0 - type: integer - operator_name: - description: 操作人名称 - type: string - related_card_count: - description: 关联卡数量 - type: integer - related_device_id: - description: 关联设备ID - minimum: 0 - nullable: true - type: integer - remark: - description: 备注 - type: string - to_owner_id: - description: 目标所有者ID - minimum: 0 - type: integer - to_owner_name: - description: 目标所有者名称 - type: string - to_owner_type: - description: 目标所有者类型 - type: string - type: object - DtoAssignPermissionsParams: - properties: - perm_ids: - description: 权限ID列表 - items: - minimum: 0 - type: integer - minItems: 1 - nullable: true - type: array - required: - - perm_ids - type: object - DtoAssignRolesParams: - properties: - role_ids: - description: 角色ID列表,传空数组可清空所有角色 - items: - minimum: 0 - type: integer - nullable: true - type: array - type: object - DtoAuthorizationItem: - properties: - authorized_at: - description: 授权时间 - format: date-time - type: string - authorized_by: - description: 授权人ID - minimum: 0 - type: integer - authorizer_name: - description: 授权人名称 - type: string - authorizer_type: - description: 授权人类型:2=平台,3=代理 - type: integer - card_id: - description: 卡ID - minimum: 0 - type: integer - enterprise_id: - description: 企业ID - minimum: 0 - type: integer - enterprise_name: - description: 企业名称 - type: string - iccid: - description: ICCID - type: string - id: - description: 授权记录ID - minimum: 0 - type: integer - msisdn: - description: 手机号 - type: string - remark: - description: 备注 - type: string - revoked_at: - description: 回收时间 - format: date-time - nullable: true - type: string - revoked_by: - description: 回收人ID - minimum: 0 - nullable: true - type: integer - revoker_name: - description: 回收人名称 - type: string - status: - description: 状态:1=有效,0=已回收 - type: integer - type: object - DtoAuthorizationListResp: - properties: - items: - description: 授权记录列表 - items: - $ref: '#/components/schemas/DtoAuthorizationItem' - nullable: true - type: array - page: - description: 当前页码 - type: integer - size: - description: 每页数量 - type: integer - total: - description: 总记录数 - type: integer - type: object - DtoAuthorizedDeviceItem: - properties: - card_count: - description: 绑定卡数量 - type: integer - device_id: - description: 设备ID - minimum: 0 - type: integer - device_no: - description: 设备号 - type: string - type: object - DtoBaseCommissionConfig: - properties: - mode: - description: 返佣模式 (fixed:固定金额, percent:百分比) - type: string - value: - description: 返佣值(分或千分比,如200=20%) - minimum: 0 - type: integer - required: - - mode - - value - type: object - DtoBatchAllocatePackagesRequest: - properties: - base_commission: - $ref: '#/components/schemas/DtoBaseCommissionConfig' - price_adjustment: - $ref: '#/components/schemas/DtoPriceAdjustment' - series_id: - description: 套餐系列ID - minimum: 0 - type: integer - shop_id: - description: 被分配的店铺ID - minimum: 0 - type: integer - required: - - shop_id - - series_id - - base_commission - type: object - DtoBatchSetCardSeriesBindngRequest: - properties: - iccids: - description: ICCID列表 - items: - type: string - maxItems: 500 - minItems: 1 - nullable: true - type: array - series_id: - description: 套餐系列ID(0表示清除关联) - minimum: 0 - type: integer - required: - - iccids - - series_id - type: object - DtoBatchSetCardSeriesBindngResponse: - properties: - fail_count: - description: 失败数量 - type: integer - failed_items: - description: 失败详情列表 - items: - $ref: '#/components/schemas/DtoCardSeriesBindngFailedItem' - nullable: true - type: array - success_count: - description: 成功数量 - type: integer - type: object - DtoBatchSetDeviceSeriesBindngRequest: - properties: - device_ids: - description: 设备ID列表 - items: - minimum: 0 - type: integer - maxItems: 500 - minItems: 1 - nullable: true - type: array - series_id: - description: 套餐系列ID(0表示清除关联) - minimum: 0 - type: integer - required: - - device_ids - - series_id - type: object - DtoBatchSetDeviceSeriesBindngResponse: - properties: - fail_count: - description: 失败数量 - type: integer - failed_items: - description: 失败详情列表 - items: - $ref: '#/components/schemas/DtoDeviceSeriesBindngFailedItem' - nullable: true - type: array - success_count: - description: 成功数量 - type: integer - type: object - DtoBatchUpdateCostPriceRequest: - properties: - change_reason: - description: 变更原因 - maxLength: 255 - type: string - price_adjustment: - $ref: '#/components/schemas/DtoPriceAdjustment' - series_id: - description: 套餐系列ID(可选,不填则调整所有) - minimum: 0 - nullable: true - type: integer - shop_id: - description: 店铺ID - minimum: 0 - type: integer - required: - - shop_id - - price_adjustment - type: object - DtoBatchUpdateCostPriceResponse: - properties: - affected_ids: - description: 受影响的分配ID列表 - items: - minimum: 0 - type: integer - nullable: true - type: array - updated_count: - description: 更新数量 - type: integer - type: object - DtoBindCardToDeviceRequest: - properties: - iot_card_id: - description: IoT卡ID - minimum: 1 - type: integer - slot_position: - description: 插槽位置 (1-4) - maximum: 4 - minimum: 1 - type: integer - required: - - iot_card_id - - slot_position - type: object - DtoBindCardToDeviceResponse: - properties: - binding_id: - description: 绑定记录ID - minimum: 0 - type: integer - message: - description: 提示信息 - type: string - type: object - DtoCardSeriesBindngFailedItem: - properties: - iccid: - description: ICCID - type: string - reason: - description: 失败原因 - type: string - type: object - DtoCarrierPageResult: - properties: - list: - description: 运营商列表 - items: - $ref: '#/components/schemas/DtoCarrierResponse' - nullable: true - type: array - page: - description: 当前页 - type: integer - page_size: - description: 每页数量 - type: integer - total: - description: 总数 - type: integer - total_pages: - description: 总页数 - type: integer - type: object - DtoCarrierResponse: - properties: - carrier_code: - description: 运营商编码 - type: string - carrier_name: - description: 运营商名称 - type: string - carrier_type: - description: 运营商类型 (CMCC:中国移动, CUCC:中国联通, CTCC:中国电信, CBN:中国广电) - type: string - created_at: - description: 创建时间 - type: string - description: - description: 运营商描述 - type: string - id: - description: 运营商ID - minimum: 0 - type: integer - status: - description: 状态 (1:启用, 0:禁用) - type: integer - updated_at: - description: 更新时间 - type: string - type: object - DtoChangePasswordRequest: - properties: - new_password: - type: string - old_password: - type: string - type: object - DtoCommissionStatsResponse: - properties: - cost_diff_amount: - description: 成本价差收入(分) - type: integer - cost_diff_count: - description: 成本价差笔数 - type: integer - cost_diff_percent: - description: 成本价差占比(千分比) - type: integer - one_time_amount: - description: 一次性佣金收入(分) - type: integer - one_time_count: - description: 一次性佣金笔数 - type: integer - one_time_percent: - description: 一次性佣金占比(千分比) - type: integer - total_amount: - description: 总收入(分) - type: integer - total_count: - description: 总笔数 - type: integer - type: object - DtoCommissionTierInfo: - properties: - current_rate: - description: 当前返佣比例 - type: string - next_rate: - description: 下一档位返佣比例 - type: string - next_threshold: - description: 下一档位阈值 - nullable: true - type: integer - type: object - DtoCreateAccountRequest: - properties: - enterprise_id: - description: 关联企业ID(企业账号必填) - minimum: 0 - nullable: true - type: integer - password: - description: 密码 - maxLength: 32 - minLength: 8 - type: string - phone: - description: 手机号 - maxLength: 11 - minLength: 11 - type: string - shop_id: - description: 关联店铺ID(代理账号必填) - minimum: 0 - nullable: true - type: integer - user_type: - description: 用户类型 (1:超级管理员, 2:平台用户, 3:代理账号, 4:企业账号) - maximum: 4 - minimum: 1 - type: integer - username: - description: 用户名 - maxLength: 50 - minLength: 3 - type: string - required: - - username - - phone - - password - - user_type - type: object - DtoCreateCarrierRequest: - properties: - carrier_code: - description: 运营商编码 - maxLength: 50 - minLength: 1 - type: string - carrier_name: - description: 运营商名称 - maxLength: 100 - minLength: 1 - type: string - carrier_type: - description: 运营商类型 (CMCC:中国移动, CUCC:中国联通, CTCC:中国电信, CBN:中国广电) - type: string - description: - description: 运营商描述 - maxLength: 500 - type: string - required: - - carrier_code - - carrier_name - - carrier_type - type: object - DtoCreateEnterpriseReq: - properties: - address: - description: 详细地址 - maximum: 255 - type: string - business_license: - description: 营业执照号 - maximum: 100 - type: string - city: - description: 城市 - maximum: 50 - type: string - contact_name: - description: 联系人姓名 - maximum: 50 - type: string - contact_phone: - description: 联系人电话 - maximum: 20 - type: string - district: - description: 区县 - maximum: 50 - type: string - enterprise_code: - description: 企业编号(唯一) - maximum: 50 - type: string - enterprise_name: - description: 企业名称 - maximum: 100 - type: string - legal_person: - description: 法人代表 - maximum: 50 - type: string - login_phone: - description: 登录手机号(作为企业账号) - type: string - owner_shop_id: - description: 归属店铺ID(可不填则归属平台) - minimum: 0 - nullable: true - type: integer - password: - description: 登录密码 - maximum: 20 - minimum: 6 - type: string - province: - description: 省份 - maximum: 50 - type: string - required: - - enterprise_name - - enterprise_code - - contact_name - - contact_phone - - login_phone - - password - type: object - DtoCreateEnterpriseResp: - properties: - account_id: - description: 账号ID - minimum: 0 - type: integer - enterprise: - $ref: '#/components/schemas/DtoEnterpriseItem' - type: object - DtoCreateMyWithdrawalReq: - properties: - account_name: - description: 收款人姓名 - maximum: 50 - type: string - account_number: - description: 收款账号 - maximum: 100 - type: string - amount: - description: 提现金额(分) - minimum: 1 - type: integer - withdrawal_method: - description: 收款类型 - enum: - - alipay - type: string - required: - - amount - - withdrawal_method - - account_name - - account_number - type: object - DtoCreateMyWithdrawalResp: - properties: - actual_amount: - description: 实际到账金额(分) - type: integer - amount: - description: 提现金额(分) - type: integer - created_at: - description: 申请时间 - type: string - fee: - description: 手续费(分) - type: integer - fee_rate: - description: 手续费比率(基点) - type: integer - id: - description: 提现申请ID - minimum: 0 - type: integer - status: - description: 状态 - type: integer - status_name: - description: 状态名称 - type: string - withdrawal_no: - description: 提现单号 - type: string - type: object - DtoCreateOrderRequest: - properties: - device_id: - description: 设备ID(设备购买时必填) - minimum: 0 - nullable: true - type: integer - iot_card_id: - description: IoT卡ID(单卡购买时必填) - minimum: 0 - nullable: true - type: integer - order_type: - description: 订单类型 (single_card:单卡购买, device:设备购买) - type: string - package_ids: - description: 套餐ID列表 - items: - minimum: 0 - type: integer - maxItems: 10 - minItems: 1 - nullable: true - type: array - payment_method: - description: 支付方式 (wallet:钱包支付, offline:线下支付) - type: string - required: - - order_type - - package_ids - - payment_method - type: object - DtoCreatePackageRequest: - properties: - data_amount_mb: - description: 总流量额度(MB) - minimum: 0 - nullable: true - type: integer - data_type: - description: 流量类型 (real:真流量, virtual:虚流量) - nullable: true - type: string - duration_months: - description: 套餐时长(月数) - maximum: 120 - minimum: 1 - type: integer - package_code: - description: 套餐编码 - maxLength: 100 - minLength: 1 - type: string - package_name: - description: 套餐名称 - maxLength: 255 - minLength: 1 - type: string - package_type: - description: 套餐类型 (formal:正式套餐, addon:附加套餐) - type: string - price: - description: 套餐价格(分) - minimum: 0 - type: integer - real_data_mb: - description: 真流量额度(MB) - minimum: 0 - nullable: true - type: integer - series_id: - description: 套餐系列ID - minimum: 0 - nullable: true - type: integer - suggested_cost_price: - description: 建议成本价(分) - minimum: 0 - nullable: true - type: integer - suggested_retail_price: - description: 建议售价(分) - minimum: 0 - nullable: true - type: integer - virtual_data_mb: - description: 虚流量额度(MB) - minimum: 0 - nullable: true - type: integer - required: - - package_code - - package_name - - package_type - - duration_months - - price - type: object - DtoCreatePackageSeriesRequest: - properties: - description: - description: 描述 - maxLength: 500 - type: string - series_code: - description: 系列编码 - maxLength: 100 - minLength: 1 - type: string - series_name: - description: 系列名称 - maxLength: 255 - minLength: 1 - type: string - required: - - series_code - - series_name - type: object - DtoCreatePermissionRequest: - properties: - parent_id: - description: 父权限ID - minimum: 0 - nullable: true - type: integer - perm_code: - description: 权限编码 - maxLength: 100 - minLength: 1 - type: string - perm_name: - description: 权限名称 - maxLength: 50 - minLength: 1 - type: string - perm_type: - description: 权限类型 (1:菜单, 2:按钮) - maximum: 2 - minimum: 1 - type: integer - platform: - description: 适用端口 (all:全部, web:Web后台, h5:H5端),默认为 all - type: string - sort: - description: 排序值 - minimum: 0 - type: integer - url: - description: 请求路径 - maxLength: 255 - type: string - required: - - perm_name - - perm_code - - perm_type - type: object - DtoCreateRechargeRequest: - properties: - amount: - description: 充值金额(分) - type: integer - payment_method: - description: 支付方式 - type: string - resource_id: - description: 资源ID - minimum: 0 - type: integer - resource_type: - description: 资源类型 - type: string - type: object - DtoCreateRoleRequest: - properties: - role_desc: - description: 角色描述 - maxLength: 255 - type: string - role_name: - description: 角色名称 - maxLength: 50 - minLength: 1 - type: string - role_type: - description: 角色类型 (1:平台角色, 2:客户角色) - maximum: 2 - minimum: 1 - type: integer - required: - - role_name - - role_type - type: object - DtoCreateShopPackageAllocationRequest: - properties: - cost_price: - description: 覆盖的成本价(分) - minimum: 0 - type: integer - package_id: - description: 套餐ID - minimum: 0 - type: integer - shop_id: - description: 被分配的店铺ID - minimum: 0 - type: integer - required: - - shop_id - - package_id - - cost_price - type: object - DtoCreateShopRequest: - properties: - address: - description: 详细地址 - maxLength: 255 - type: string - city: - description: 城市 - maxLength: 50 - type: string - contact_name: - description: 联系人姓名 - maxLength: 50 - type: string - contact_phone: - description: 联系人电话 - maxLength: 11 - minLength: 11 - type: string - district: - description: 区县 - maxLength: 50 - type: string - init_password: - description: 初始账号密码 - maxLength: 32 - minLength: 8 - type: string - init_phone: - description: 初始账号手机号 - maxLength: 11 - minLength: 11 - type: string - init_username: - description: 初始账号用户名 - maxLength: 50 - minLength: 3 - type: string - parent_id: - description: 上级店铺ID(一级店铺可不填) - minimum: 1 - nullable: true - type: integer - province: - description: 省份 - maxLength: 50 - type: string - shop_code: - description: 店铺编号 - maxLength: 50 - minLength: 1 - type: string - shop_name: - description: 店铺名称 - maxLength: 100 - minLength: 1 - type: string - required: - - shop_name - - shop_code - - init_password - - init_username - - init_phone - type: object - DtoCreateShopSeriesAllocationRequest: - properties: - base_commission: - $ref: '#/components/schemas/DtoBaseCommissionConfig' - enable_force_recharge: - description: 是否启用强充(累计充值强充) - nullable: true - type: boolean - enable_one_time_commission: - description: 是否启用一次性佣金 - type: boolean - force_recharge_amount: - description: 强充金额(分,0表示使用阈值金额) - nullable: true - type: integer - force_recharge_trigger_type: - description: 强充触发类型(1:单次充值, 2:累计充值) - nullable: true - type: integer - one_time_commission_config: - $ref: '#/components/schemas/DtoOneTimeCommissionConfig' - series_id: - description: 套餐系列ID - minimum: 0 - type: integer - shop_id: - description: 被分配的店铺ID - minimum: 0 - type: integer - required: - - shop_id - - series_id - - base_commission - type: object - DtoCreateWithdrawalSettingReq: - properties: - daily_withdrawal_limit: - description: 每日提现次数限制 - maximum: 100 - minimum: 1 - type: integer - fee_rate: - description: 手续费比率(基点,100=1%) - maximum: 10000 - minimum: 0 - type: integer - min_withdrawal_amount: - description: 最低提现金额(分) - minimum: 1 - type: integer - required: - - daily_withdrawal_limit - - min_withdrawal_amount - - fee_rate - type: object - DtoDailyCommissionStatsResponse: - properties: - date: - description: 日期(YYYY-MM-DD) - type: string - total_amount: - description: 当日总收入(分) - type: integer - total_count: - description: 当日总笔数 - type: integer - type: object - DtoDeviceCardBindingResponse: - properties: - bind_time: - description: 绑定时间 - format: date-time - nullable: true - type: string - carrier_name: - description: 运营商名称 - type: string - iccid: - description: ICCID - type: string - id: - description: 绑定记录ID - minimum: 0 - type: integer - iot_card_id: - description: IoT卡ID - minimum: 0 - type: integer - msisdn: - description: 接入号 - type: string - slot_position: - description: 插槽位置 (1-4) - type: integer - status: - description: 卡状态 (1:在库, 2:已分销, 3:已激活, 4:已停用) - type: integer - type: object - DtoDeviceCardInfo: - properties: - card_id: - description: 卡ID - minimum: 0 - type: integer - carrier_name: - description: 运营商名称 - type: string - iccid: - description: ICCID - type: string - msisdn: - description: 手机号 - type: string - network_status: - description: 网络状态:0=停机 1=开机 - type: integer - network_status_name: - description: 网络状态名称 - type: string - type: object - DtoDeviceCardOperationReq: - properties: - reason: - description: 操作原因 - type: string - type: object - DtoDeviceCardOperationResp: - properties: - message: - description: 操作结果消息 - type: string - success: - description: 操作是否成功 - type: boolean - type: object - DtoDeviceImportResultItemDTO: - properties: - device_no: - description: 设备号 - type: string - line: - description: 行号 - type: integer - reason: - description: 原因 - type: string - type: object - DtoDeviceImportTaskDetailResponse: - properties: - batch_no: - description: 批次号 - type: string - completed_at: - description: 完成时间 - format: date-time - nullable: true - type: string - created_at: - description: 创建时间 - format: date-time - type: string - error_message: - description: 错误信息 - type: string - fail_count: - description: 失败数 - type: integer - failed_items: - description: 失败记录详情 - items: - $ref: '#/components/schemas/DtoDeviceImportResultItemDTO' - nullable: true - type: array - file_name: - description: 文件名 - type: string - id: - description: 任务ID - minimum: 0 - type: integer - skip_count: - description: 跳过数 - type: integer - skipped_items: - description: 跳过记录详情 - items: - $ref: '#/components/schemas/DtoDeviceImportResultItemDTO' - nullable: true - type: array - started_at: - description: 开始处理时间 - format: date-time - nullable: true - type: string - status: - description: 任务状态 (1:待处理, 2:处理中, 3:已完成, 4:失败) - type: integer - status_text: - description: 任务状态文本 - type: string - success_count: - description: 成功数 - type: integer - task_no: - description: 任务编号 - type: string - total_count: - description: 总数 - type: integer - warning_count: - description: 警告数(部分成功的设备数量) - type: integer - warning_items: - description: 警告记录详情(部分成功的设备及其卡绑定失败原因) - items: - $ref: '#/components/schemas/DtoDeviceImportResultItemDTO' - nullable: true - type: array - type: object - DtoDeviceImportTaskResponse: - properties: - batch_no: - description: 批次号 - type: string - completed_at: - description: 完成时间 - format: date-time - nullable: true - type: string - created_at: - description: 创建时间 - format: date-time - type: string - error_message: - description: 错误信息 - type: string - fail_count: - description: 失败数 - type: integer - file_name: - description: 文件名 - type: string - id: - description: 任务ID - minimum: 0 - type: integer - skip_count: - description: 跳过数 - type: integer - started_at: - description: 开始处理时间 - format: date-time - nullable: true - type: string - status: - description: 任务状态 (1:待处理, 2:处理中, 3:已完成, 4:失败) - type: integer - status_text: - description: 任务状态文本 - type: string - success_count: - description: 成功数 - type: integer - task_no: - description: 任务编号 - type: string - total_count: - description: 总数 - type: integer - warning_count: - description: 警告数(部分成功的设备数量) - type: integer - type: object - DtoDeviceResponse: - properties: - accumulated_recharge: - description: 累计充值金额(分) - type: integer - activated_at: - description: 激活时间 - format: date-time - nullable: true - type: string - batch_no: - description: 批次号 - type: string - bound_card_count: - description: 已绑定卡数量 - type: integer - created_at: - description: 创建时间 - format: date-time - type: string - device_model: - description: 设备型号 - type: string - device_name: - description: 设备名称 - type: string - device_no: - description: 设备号 - type: string - device_type: - description: 设备类型 - type: string - first_commission_paid: - description: 一次性佣金是否已发放 - type: boolean - id: - description: 设备ID - minimum: 0 - type: integer - manufacturer: - description: 制造商 - type: string - max_sim_slots: - description: 最大插槽数 - type: integer - series_id: - description: 套餐系列ID - minimum: 0 - nullable: true - type: integer - shop_id: - description: 店铺ID - minimum: 0 - nullable: true - type: integer - shop_name: - description: 店铺名称 - type: string - status: - description: 状态 (1:在库, 2:已分销, 3:已激活, 4:已停用) - type: integer - status_name: - description: 状态名称 - type: string - updated_at: - description: 更新时间 - format: date-time - type: string - type: object - DtoDeviceSeriesBindngFailedItem: - properties: - device_id: - description: 设备ID - minimum: 0 - type: integer - device_no: - description: 设备号 - type: string - reason: - description: 失败原因 - type: string - type: object - DtoEmptyResponse: - properties: - message: - description: 提示信息 - type: string - type: object - DtoEnterpriseCardItem: - properties: - carrier_id: - description: 运营商ID - minimum: 0 - type: integer - carrier_name: - description: 运营商名称 - type: string - device_id: - description: 设备ID - minimum: 0 - nullable: true - type: integer - device_no: - description: 设备号 - type: string - iccid: - description: ICCID - type: string - id: - description: 卡ID - minimum: 0 - type: integer - msisdn: - description: 手机号 - type: string - network_status: - description: 网络状态 - type: integer - network_status_name: - description: 网络状态名称 - type: string - package_id: - description: 套餐ID - minimum: 0 - nullable: true - type: integer - package_name: - description: 套餐名称 - type: string - status: - description: 状态 - type: integer - status_name: - description: 状态名称 - type: string - type: object - DtoEnterpriseCardPageResult: - properties: - items: - description: 卡列表 - items: - $ref: '#/components/schemas/DtoEnterpriseCardItem' - nullable: true - type: array - page: - description: 当前页码 - type: integer - size: - description: 每页数量 - type: integer - total: - description: 总记录数 - type: integer - type: object - DtoEnterpriseDeviceDetailResp: - properties: - cards: - description: 绑定卡列表 - items: - $ref: '#/components/schemas/DtoDeviceCardInfo' - nullable: true - type: array - device: - $ref: '#/components/schemas/DtoEnterpriseDeviceInfo' - type: object - DtoEnterpriseDeviceInfo: - properties: - authorized_at: - description: 授权时间 - format: date-time - type: string - device_id: - description: 设备ID - minimum: 0 - type: integer - device_model: - description: 设备型号 - type: string - device_name: - description: 设备名称 - type: string - device_no: - description: 设备号 - type: string - device_type: - description: 设备类型 - type: string - type: object - DtoEnterpriseDeviceItem: - properties: - authorized_at: - description: 授权时间 - format: date-time - type: string - card_count: - description: 绑定卡数量 - type: integer - device_id: - description: 设备ID - minimum: 0 - type: integer - device_model: - description: 设备型号 - type: string - device_name: - description: 设备名称 - type: string - device_no: - description: 设备号 - type: string - type: object - DtoEnterpriseDeviceListResp: - properties: - list: - description: 设备列表 - items: - $ref: '#/components/schemas/DtoEnterpriseDeviceItem' - nullable: true - type: array - total: - description: 总数 - type: integer - type: object - DtoEnterpriseItem: - properties: - address: - description: 详细地址 - type: string - business_license: - description: 营业执照号 - type: string - city: - description: 城市 - type: string - contact_name: - description: 联系人姓名 - type: string - contact_phone: - description: 联系人电话 - type: string - created_at: - description: 创建时间 - type: string - district: - description: 区县 - type: string - enterprise_code: - description: 企业编号 - type: string - enterprise_name: - description: 企业名称 - type: string - id: - description: 企业ID - minimum: 0 - type: integer - legal_person: - description: 法人代表 - type: string - login_phone: - description: 登录手机号 - type: string - owner_shop_id: - description: 归属店铺ID - minimum: 0 - nullable: true - type: integer - owner_shop_name: - description: 归属店铺名称 - type: string - province: - description: 省份 - type: string - status: - description: 状态(0=禁用, 1=启用) - type: integer - status_name: - description: 状态名称 - type: string - type: object - DtoEnterprisePageResult: - properties: - items: - description: 企业列表 - items: - $ref: '#/components/schemas/DtoEnterpriseItem' - nullable: true - type: array - page: - description: 当前页码 - type: integer - size: - description: 每页数量 - type: integer - total: - description: 总记录数 - type: integer - type: object - DtoFailedDeviceItem: - properties: - device_no: - description: 设备号 - type: string - reason: - description: 失败原因 - type: string - type: object - DtoFailedItem: - properties: - iccid: - description: ICCID - type: string - reason: - description: 失败原因 - type: string - type: object - DtoGetUploadURLRequest: - properties: - content_type: - description: 文件 MIME 类型(如:text/csv),留空则自动推断 - maxLength: 100 - type: string - file_name: - description: 文件名(如:cards.csv) - maxLength: 255 - minLength: 1 - type: string - purpose: - description: 文件用途 (iot_import:ICCID导入, export:数据导出, attachment:附件) - type: string - required: - - file_name - - purpose - type: object - DtoGetUploadURLResponse: - properties: - expires_in: - description: URL 有效期(秒) - type: integer - file_key: - description: 文件路径标识,上传成功后用于调用业务接口 - type: string - upload_url: - description: 预签名上传 URL,使用 PUT 方法上传文件 - type: string - type: object - DtoImportDeviceRequest: - properties: - batch_no: - description: 批次号 - maxLength: 100 - type: string - file_key: - description: 对象存储文件路径(通过 /storage/upload-url 获取) - maxLength: 500 - minLength: 1 - type: string - required: - - file_key - type: object - DtoImportDeviceResponse: - properties: - message: - description: 提示信息 - type: string - task_id: - description: 导入任务ID - minimum: 0 - type: integer - task_no: - description: 任务编号 - type: string - type: object - DtoImportIotCardRequest: - properties: - batch_no: - description: 批次号 - maxLength: 100 - type: string - carrier_id: - description: 运营商ID - minimum: 1 - type: integer - file_key: - description: 对象存储文件路径(通过 /storage/upload-url 获取) - maxLength: 500 - minLength: 1 - type: string - required: - - carrier_id - - file_key - type: object - DtoImportIotCardResponse: - properties: - message: - description: 提示信息 - type: string - task_id: - description: 导入任务ID - minimum: 0 - type: integer - task_no: - description: 任务编号 - type: string - type: object - DtoImportResultItemDTO: - properties: - iccid: - description: ICCID - type: string - line: - description: 行号 - type: integer - msisdn: - description: 接入号 - type: string - reason: - description: 原因 - type: string - type: object - DtoImportTaskDetailResponse: - properties: - batch_no: - description: 批次号 - type: string - carrier_id: - description: 运营商ID - minimum: 0 - type: integer - carrier_name: - description: 运营商名称 - type: string - carrier_type: - description: 运营商类型 (CMCC:中国移动, CUCC:中国联通, CTCC:中国电信, CBN:中国广电) - type: string - completed_at: - description: 完成时间 - format: date-time - nullable: true - type: string - created_at: - description: 创建时间 - format: date-time - type: string - error_message: - description: 错误信息 - type: string - fail_count: - description: 失败数 - type: integer - failed_items: - description: 失败记录详情 - items: - $ref: '#/components/schemas/DtoImportResultItemDTO' - nullable: true - type: array - file_name: - description: 文件名 - type: string - id: - description: 任务ID - minimum: 0 - type: integer - skip_count: - description: 跳过数 - type: integer - skipped_items: - description: 跳过记录详情 - items: - $ref: '#/components/schemas/DtoImportResultItemDTO' - nullable: true - type: array - started_at: - description: 开始处理时间 - format: date-time - nullable: true - type: string - status: - description: 任务状态 (1:待处理, 2:处理中, 3:已完成, 4:失败) - type: integer - status_text: - description: 任务状态文本 - type: string - success_count: - description: 成功数 - type: integer - task_no: - description: 任务编号 - type: string - total_count: - description: 总数 - type: integer - type: object - DtoImportTaskResponse: - properties: - batch_no: - description: 批次号 - type: string - carrier_id: - description: 运营商ID - minimum: 0 - type: integer - carrier_name: - description: 运营商名称 - type: string - carrier_type: - description: 运营商类型 (CMCC:中国移动, CUCC:中国联通, CTCC:中国电信, CBN:中国广电) - type: string - completed_at: - description: 完成时间 - format: date-time - nullable: true - type: string - created_at: - description: 创建时间 - format: date-time - type: string - error_message: - description: 错误信息 - type: string - fail_count: - description: 失败数 - type: integer - file_name: - description: 文件名 - type: string - id: - description: 任务ID - minimum: 0 - type: integer - skip_count: - description: 跳过数 - type: integer - started_at: - description: 开始处理时间 - format: date-time - nullable: true - type: string - status: - description: 任务状态 (1:待处理, 2:处理中, 3:已完成, 4:失败) - type: integer - status_text: - description: 任务状态文本 - type: string - success_count: - description: 成功数 - type: integer - task_no: - description: 任务编号 - type: string - total_count: - description: 总数 - type: integer - type: object - DtoIotCardDetailResponse: - properties: - accumulated_recharge: - description: 累计充值金额(分) - type: integer - activated_at: - description: 激活时间 - format: date-time - nullable: true - type: string - activation_status: - description: 激活状态 (0:未激活, 1:已激活) - type: integer - batch_no: - description: 批次号 - type: string - card_category: - description: 卡业务类型 (normal:普通卡, industry:行业卡) - type: string - card_type: - description: 卡类型 - type: string - carrier_id: - description: 运营商ID - minimum: 0 - type: integer - carrier_name: - description: 运营商名称 - type: string - carrier_type: - description: 运营商类型 (CMCC:中国移动, CUCC:中国联通, CTCC:中国电信, CBN:中国广电) - type: string - cost_price: - description: 成本价(分) - type: integer - created_at: - description: 创建时间 - format: date-time - type: string - data_usage_mb: - description: 累计流量使用(MB) - type: integer - distribute_price: - description: 分销价(分) - type: integer - first_commission_paid: - description: 一次性佣金是否已发放 - type: boolean - iccid: - description: ICCID - type: string - id: - description: 卡ID - minimum: 0 - type: integer - imsi: - description: IMSI - type: string - msisdn: - description: 卡接入号 - type: string - network_status: - description: 网络状态 (0:停机, 1:开机) - type: integer - real_name_status: - description: 实名状态 (0:未实名, 1:已实名) - type: integer - series_id: - description: 套餐系列ID - minimum: 0 - nullable: true - type: integer - shop_id: - description: 店铺ID - minimum: 0 - nullable: true - type: integer - shop_name: - description: 店铺名称 - type: string - status: - description: 状态 (1:在库, 2:已分销, 3:已激活, 4:已停用) - type: integer - supplier: - description: 供应商 - type: string - updated_at: - description: 更新时间 - format: date-time - type: string - type: object - DtoListAssetAllocationRecordResponse: - properties: - list: - description: 分配记录列表 - items: - $ref: '#/components/schemas/DtoAssetAllocationRecordResponse' - nullable: true - type: array - page: - description: 当前页码 - type: integer - page_size: - description: 每页数量 - type: integer - total: - description: 总数 - type: integer - total_pages: - description: 总页数 - type: integer - type: object - DtoListDeviceCardsResponse: - properties: - bindings: - description: 绑定列表 - items: - $ref: '#/components/schemas/DtoDeviceCardBindingResponse' - nullable: true - type: array - type: object - DtoListDeviceImportTaskResponse: - properties: - list: - description: 任务列表 - items: - $ref: '#/components/schemas/DtoDeviceImportTaskResponse' - nullable: true - type: array - page: - description: 当前页码 - type: integer - page_size: - description: 每页数量 - type: integer - total: - description: 总数 - type: integer - total_pages: - description: 总页数 - type: integer - type: object - DtoListDeviceResponse: - properties: - list: - description: 设备列表 - items: - $ref: '#/components/schemas/DtoDeviceResponse' - nullable: true - type: array - page: - description: 当前页码 - type: integer - page_size: - description: 每页数量 - type: integer - total: - description: 总数 - type: integer - total_pages: - description: 总页数 - type: integer - type: object - DtoListImportTaskResponse: - properties: - list: - description: 任务列表 - items: - $ref: '#/components/schemas/DtoImportTaskResponse' - nullable: true - type: array - page: - description: 当前页码 - type: integer - page_size: - description: 每页数量 - type: integer - total: - description: 总数 - type: integer - total_pages: - description: 总页数 - type: integer - type: object - DtoListStandaloneIotCardResponse: - properties: - list: - description: 单卡列表 - items: - $ref: '#/components/schemas/DtoStandaloneIotCardResponse' - nullable: true - type: array - page: - description: 当前页码 - type: integer - page_size: - description: 每页数量 - type: integer - total: - description: 总数 - type: integer - total_pages: - description: 总页数 - type: integer - type: object - DtoLoginRequest: - properties: - device: - type: string - password: - type: string - username: - type: string - type: object - DtoLoginResponse: - properties: - access_token: - type: string - buttons: - description: 按钮权限码 - items: - type: string - nullable: true - type: array - expires_in: - type: integer - menus: - description: 菜单树 - items: - $ref: '#/components/schemas/DtoMenuNode' - nullable: true - type: array - permissions: - description: 所有权限码(向后兼容) - items: - type: string - nullable: true - type: array - refresh_token: - type: string - user: - $ref: '#/components/schemas/DtoUserInfo' - type: object - DtoMenuNode: - properties: - children: - description: 子菜单 - items: - $ref: '#/components/schemas/DtoMenuNode' - nullable: true - type: array - id: - description: 权限ID - minimum: 0 - type: integer - name: - description: 菜单名称 - type: string - perm_code: - description: 权限码 - type: string - sort: - description: 排序值 - type: integer - url: - description: 路由路径 - type: string - type: object - DtoMyCommissionRecordItem: - properties: - amount: - description: 佣金金额(分) - type: integer - commission_source: - description: 佣金来源 (cost_diff:成本价差, one_time:一次性佣金, tier_bonus(已废弃):梯度奖励) - type: string - created_at: - description: 创建时间 - type: string - id: - description: 佣金记录ID - minimum: 0 - type: integer - order_id: - description: 订单ID - minimum: 0 - type: integer - shop_id: - description: 店铺ID - minimum: 0 - type: integer - status: - description: 状态 (1:已入账, 2:已失效) - type: integer - status_name: - description: 状态名称 - type: string - type: object - DtoMyCommissionRecordPageResult: - properties: - items: - description: 佣金记录列表 - items: - $ref: '#/components/schemas/DtoMyCommissionRecordItem' - nullable: true - type: array - page: - description: 当前页码 - type: integer - size: - description: 每页数量 - type: integer - total: - description: 总记录数 - type: integer - type: object - DtoMyCommissionSummaryResp: - properties: - available_commission: - description: 可提现佣金(分) - type: integer - frozen_commission: - description: 冻结佣金(分) - type: integer - shop_id: - description: 店铺ID - minimum: 0 - type: integer - shop_name: - description: 店铺名称 - type: string - total_commission: - description: 累计佣金(分) - type: integer - unwithdraw_commission: - description: 未提现佣金(分) - type: integer - withdrawing_commission: - description: 提现中佣金(分) - type: integer - withdrawn_commission: - description: 已提现佣金(分) - type: integer - type: object - DtoOneTimeCommissionConfig: - properties: - mode: - description: 返佣模式 (fixed:固定金额, percent:百分比) - 固定类型时必填 - type: string - threshold: - description: 最低阈值(分) - minimum: 1 - type: integer - tiers: - description: 梯度档位列表 - 梯度类型时必填 - items: - $ref: '#/components/schemas/DtoOneTimeCommissionTierEntry' - nullable: true - type: array - trigger: - description: 触发条件 (single_recharge:单次充值, accumulated_recharge:累计充值) - type: string - type: - description: 一次性佣金类型 (fixed:固定, tiered:梯度) - type: string - value: - description: 佣金金额(分)或比例(千分比)- 固定类型时必填 - minimum: 1 - type: integer - required: - - type - - trigger - - threshold - type: object - DtoOneTimeCommissionTierEntry: - properties: - mode: - description: 返佣模式 (fixed:固定金额, percent:百分比) - type: string - threshold: - description: 梯度阈值(销量或销售额分) - minimum: 1 - type: integer - tier_type: - description: 梯度类型 (sales_count:销量, sales_amount:销售额) - type: string - value: - description: 返佣值(分或千分比) - minimum: 1 - type: integer - required: - - tier_type - - threshold - - mode - - value - type: object - DtoOrderItemResponse: - properties: - amount: - description: 小计金额(分) - type: integer - id: - description: 明细ID - minimum: 0 - type: integer - package_id: - description: 套餐ID - minimum: 0 - type: integer - package_name: - description: 套餐名称 - type: string - quantity: - description: 数量 - type: integer - unit_price: - description: 单价(分) - type: integer - type: object - DtoOrderListResponse: - properties: - list: - description: 订单列表 - items: - $ref: '#/components/schemas/DtoOrderResponse' - nullable: true - type: array - page: - description: 当前页码 - type: integer - page_size: - description: 每页数量 - type: integer - total: - description: 总数 - type: integer - total_pages: - description: 总页数 - type: integer - type: object - DtoOrderResponse: - properties: - buyer_id: - description: 买家ID - minimum: 0 - type: integer - buyer_type: - description: 买家类型 (personal:个人客户, agent:代理商) - type: string - commission_config_version: - description: 佣金配置版本 - type: integer - commission_status: - description: 佣金状态 (1:待计算, 2:已计算) - type: integer - created_at: - description: 创建时间 - format: date-time - type: string - device_id: - description: 设备ID - minimum: 0 - nullable: true - type: integer - id: - description: 订单ID - minimum: 0 - type: integer - iot_card_id: - description: IoT卡ID - minimum: 0 - nullable: true - type: integer - is_purchase_on_behalf: - description: 是否为代购订单 - type: boolean - items: - description: 订单明细列表 - items: - $ref: '#/components/schemas/DtoOrderItemResponse' - nullable: true - type: array - order_no: - description: 订单号 - type: string - order_type: - description: 订单类型 (single_card:单卡购买, device:设备购买) - type: string - paid_at: - description: 支付时间 - format: date-time - nullable: true - type: string - payment_method: - description: 支付方式 (wallet:钱包支付, wechat:微信支付, alipay:支付宝支付) - type: string - payment_status: - description: 支付状态 (1:待支付, 2:已支付, 3:已取消, 4:已退款) - type: integer - payment_status_text: - description: 支付状态文本 - type: string - total_amount: - description: 订单总金额(分) - type: integer - updated_at: - description: 更新时间 - format: date-time - type: string - type: object - DtoPackagePageResult: - properties: - list: - description: 套餐列表 - items: - $ref: '#/components/schemas/DtoPackageResponse' - nullable: true - type: array - page: - description: 当前页 - type: integer - page_size: - description: 每页数量 - type: integer - total: - description: 总数 - type: integer - total_pages: - description: 总页数 - type: integer - type: object - DtoPackageResponse: - properties: - cost_price: - description: 成本价(分,仅代理用户可见) - nullable: true - type: integer - created_at: - description: 创建时间 - type: string - current_commission_rate: - description: 当前返佣比例(仅代理用户可见) - type: string - data_amount_mb: - description: 总流量额度(MB) - type: integer - data_type: - description: 流量类型 (real:真流量, virtual:虚流量) - type: string - duration_months: - description: 套餐时长(月数) - type: integer - id: - description: 套餐ID - minimum: 0 - type: integer - package_code: - description: 套餐编码 - type: string - package_name: - description: 套餐名称 - type: string - package_type: - description: 套餐类型 (formal:正式套餐, addon:附加套餐) - type: string - price: - description: 套餐价格(分) - type: integer - profit_margin: - description: 利润空间(分,仅代理用户可见) - nullable: true - type: integer - real_data_mb: - description: 真流量额度(MB) - type: integer - series_id: - description: 套餐系列ID - minimum: 0 - nullable: true - type: integer - series_name: - description: 套餐系列名称 - nullable: true - type: string - shelf_status: - description: 上架状态 (1:上架, 2:下架) - type: integer - status: - description: 状态 (1:启用, 2:禁用) - type: integer - suggested_cost_price: - description: 建议成本价(分) - type: integer - suggested_retail_price: - description: 建议售价(分) - type: integer - tier_info: - $ref: '#/components/schemas/DtoCommissionTierInfo' - updated_at: - description: 更新时间 - type: string - virtual_data_mb: - description: 虚流量额度(MB) - type: integer - type: object - DtoPackageSeriesPageResult: - properties: - list: - description: 套餐系列列表 - items: - $ref: '#/components/schemas/DtoPackageSeriesResponse' - nullable: true - type: array - page: - description: 当前页 - type: integer - page_size: - description: 每页数量 - type: integer - total: - description: 总数 - type: integer - total_pages: - description: 总页数 - type: integer - type: object - DtoPackageSeriesResponse: - properties: - created_at: - description: 创建时间 - type: string - description: - description: 描述 - type: string - id: - description: 系列ID - minimum: 0 - type: integer - series_code: - description: 系列编码 - type: string - series_name: - description: 系列名称 - type: string - status: - description: 状态 (1:启用, 2:禁用) - type: integer - updated_at: - description: 更新时间 - type: string - type: object - DtoPermissionPageResult: - properties: - items: - description: 权限列表 - items: - $ref: '#/components/schemas/DtoPermissionResponse' - nullable: true - type: array - page: - description: 当前页码 - type: integer - size: - description: 每页数量 - type: integer - total: - description: 总记录数 - type: integer - type: object - DtoPermissionResponse: - properties: - available_for_role_types: - description: 可用角色类型 (1:平台角色, 2:客户角色) - type: string - created_at: - description: 创建时间 - type: string - creator: - description: 创建人ID - minimum: 0 - type: integer - id: - description: 权限ID - minimum: 0 - type: integer - parent_id: - description: 父权限ID - minimum: 0 - nullable: true - type: integer - perm_code: - description: 权限编码 - type: string - perm_name: - description: 权限名称 - type: string - perm_type: - description: 权限类型 (1:菜单, 2:按钮) - type: integer - platform: - description: 适用端口 (all:全部, web:Web后台, h5:H5端) - type: string - sort: - description: 排序值 - type: integer - status: - description: 状态 (0:禁用, 1:启用) - type: integer - updated_at: - description: 更新时间 - type: string - updater: - description: 更新人ID - minimum: 0 - type: integer - url: - description: 请求路径 - type: string - type: object - DtoPermissionTreeNode: - properties: - available_for_role_types: - description: 可用角色类型 (1:平台角色, 2:客户角色) - type: string - children: - description: 子权限列表 - items: - $ref: '#/components/schemas/DtoPermissionTreeNode' - type: array - id: - description: 权限ID - minimum: 0 - type: integer - perm_code: - description: 权限编码 - type: string - perm_name: - description: 权限名称 - type: string - perm_type: - description: 权限类型 (1:菜单, 2:按钮) - type: integer - platform: - description: 适用端口 (all:全部, web:Web后台, h5:H5端) - type: string - sort: - description: 排序值 - type: integer - status: - description: 状态 (0:禁用, 1:启用) - type: integer - url: - description: 请求路径 - type: string - type: object - DtoPersonalCustomerResponse: - properties: - avatar_url: - description: 头像URL - type: string - created_at: - description: 创建时间 - type: string - id: - description: 客户ID - minimum: 0 - type: integer - nickname: - description: 昵称 - type: string - phone: - description: 手机号 - type: string - status: - description: 状态 (0:禁用, 1:启用) - type: integer - updated_at: - description: 更新时间 - type: string - wx_open_id: - description: 微信OpenID - type: string - wx_union_id: - description: 微信UnionID - type: string - type: object - DtoPriceAdjustment: - properties: - type: - description: 调整类型 (fixed:固定金额, percent:百分比) - type: string - value: - description: 调整值(分或千分比) - type: integer - required: - - type - - value - type: object - DtoPurchaseCheckRequest: - properties: - order_type: - description: 订单类型 (single_card:单卡购买, device:设备购买) - type: string - package_ids: - description: 套餐ID列表 - items: - minimum: 0 - type: integer - maxItems: 10 - minItems: 1 - nullable: true - type: array - resource_id: - description: 资源ID (IoT卡ID或设备ID) - minimum: 0 - type: integer - required: - - order_type - - resource_id - - package_ids - type: object - DtoPurchaseCheckResponse: - properties: - actual_payment: - description: 实际支付金额(分) - type: integer - force_recharge_amount: - description: 强充金额(分) - type: integer - message: - description: 提示信息 - type: string - need_force_recharge: - description: 是否需要强充 - type: boolean - total_package_amount: - description: 套餐总价(分) - type: integer - wallet_credit: - description: 钱包到账金额(分) - type: integer - type: object - DtoRecallCardsReq: - properties: - iccids: - description: 需要回收授权的 ICCID 列表 - items: - type: string - nullable: true - type: array - required: - - iccids - type: object - DtoRecallCardsResp: - properties: - fail_count: - description: 失败数量 - type: integer - failed_items: - description: 失败详情 - items: - $ref: '#/components/schemas/DtoFailedItem' - nullable: true - type: array - recalled_devices: - description: 连带回收的设备列表 - items: - $ref: '#/components/schemas/DtoRecalledDevice' - nullable: true - type: array - success_count: - description: 成功数量 - type: integer - type: object - DtoRecallDevicesReq: - properties: - device_nos: - description: 设备号列表(最多100个) - items: - type: string - nullable: true - type: array - type: object - DtoRecallDevicesRequest: - properties: - device_ids: - description: 设备ID列表 - items: - minimum: 0 - type: integer - maxItems: 100 - minItems: 1 - nullable: true - type: array - remark: - description: 备注 - maxLength: 500 - type: string - required: - - device_ids - type: object - DtoRecallDevicesResp: - properties: - fail_count: - description: 失败数量 - type: integer - failed_items: - description: 失败项列表 - items: - $ref: '#/components/schemas/DtoFailedDeviceItem' - nullable: true - type: array - success_count: - description: 成功数量 - type: integer - type: object - DtoRecallDevicesResponse: - properties: - fail_count: - description: 失败数量 - type: integer - failed_items: - description: 失败详情列表 - items: - $ref: '#/components/schemas/DtoAllocationDeviceFailedItem' - nullable: true - type: array - success_count: - description: 成功数量 - type: integer - type: object - DtoRecallStandaloneCardsRequest: - properties: - batch_no: - description: 批次号(selection_type=filter时可选) - maxLength: 100 - type: string - carrier_id: - description: 运营商ID(selection_type=filter时可选) - minimum: 0 - nullable: true - type: integer - from_shop_id: - description: 来源店铺ID(被回收方) - minimum: 1 - type: integer - iccid_end: - description: 结束ICCID(selection_type=range时必填) - maxLength: 20 - type: string - iccid_start: - description: 起始ICCID(selection_type=range时必填) - maxLength: 20 - type: string - iccids: - description: ICCID列表(selection_type=list时必填,最多1000个) - items: - type: string - nullable: true - type: array - remark: - description: 备注 - maxLength: 500 - type: string - selection_type: - description: 选卡方式 (list:ICCID列表, range:号段范围, filter:筛选条件) - enum: - - list - - range - - filter - type: string - required: - - from_shop_id - - selection_type - type: object - DtoRecallStandaloneCardsResponse: - properties: - allocation_no: - description: 回收单号 - type: string - fail_count: - description: 失败数 - type: integer - failed_items: - description: 失败项列表 - items: - $ref: '#/components/schemas/DtoAllocationFailedItem' - nullable: true - type: array - success_count: - description: 成功数 - type: integer - total_count: - description: 待回收总数 - type: integer - type: object - DtoRecalledDevice: - properties: - card_count: - description: 卡数量 - type: integer - device_id: - description: 设备ID - minimum: 0 - type: integer - device_no: - description: 设备号 - type: string - iccids: - description: 卡ICCID列表 - items: - type: string - nullable: true - type: array - type: object - DtoRechargeCheckResponse: - properties: - current_accumulated: - description: 当前累计充值金额(分) - type: integer - first_commission_paid: - description: 一次性佣金是否已发放 - type: boolean - force_recharge_amount: - description: 强充金额(分) - type: integer - max_amount: - description: 最大充值金额(分) - type: integer - message: - description: 提示信息 - type: string - min_amount: - description: 最小充值金额(分) - type: integer - need_force_recharge: - description: 是否需要强充 - type: boolean - threshold: - description: 佣金触发阈值(分) - type: integer - trigger_type: - description: 触发类型 - type: string - type: object - DtoRechargeListResponse: - properties: - list: - description: 列表数据 - items: - $ref: '#/components/schemas/DtoRechargeResponse' - nullable: true - type: array - page: - description: 当前页码 - type: integer - page_size: - description: 每页数量 - type: integer - total: - description: 总记录数 - type: integer - total_pages: - description: 总页数 - type: integer - type: object - DtoRechargeResponse: - properties: - amount: - description: 充值金额(分) - type: integer - completed_at: - description: 完成时间 - format: date-time - nullable: true - type: string - created_at: - description: 创建时间 - format: date-time - type: string - id: - description: 充值订单ID - minimum: 0 - type: integer - paid_at: - description: 支付时间 - format: date-time - nullable: true - type: string - payment_channel: - description: 支付渠道 - nullable: true - type: string - payment_method: - description: 支付方式 - type: string - payment_transaction_id: - description: 第三方支付交易号 - nullable: true - type: string - recharge_no: - description: 充值订单号 - type: string - status: - description: 充值状态 - type: integer - status_text: - description: 状态文本 - type: string - updated_at: - description: 更新时间 - format: date-time - type: string - user_id: - description: 用户ID - minimum: 0 - type: integer - wallet_id: - description: 钱包ID - minimum: 0 - type: integer - type: object - DtoRefreshTokenRequest: - properties: - refresh_token: - type: string - type: object - DtoRefreshTokenResponse: - properties: - access_token: - type: string - expires_in: - type: integer - type: object - DtoRejectWithdrawalReq: - properties: - remark: - description: 拒绝原因(必填) - maxLength: 500 - type: string - required: - - remark - type: object - DtoRolePageResult: - properties: - items: - description: 角色列表 - items: - $ref: '#/components/schemas/DtoRoleResponse' - nullable: true - type: array - page: - description: 当前页码 - type: integer - size: - description: 每页数量 - type: integer - total: - description: 总记录数 - type: integer - type: object - DtoRoleResponse: - properties: - created_at: - description: 创建时间 - type: string - creator: - description: 创建人ID - minimum: 0 - type: integer - id: - description: 角色ID - minimum: 0 - type: integer - role_desc: - description: 角色描述 - type: string - role_name: - description: 角色名称 - type: string - role_type: - description: 角色类型 (1:平台角色, 2:客户角色) - type: integer - status: - description: 状态 (0:禁用, 1:启用) - type: integer - updated_at: - description: 更新时间 - type: string - updater: - description: 更新人ID - minimum: 0 - type: integer - type: object - DtoSetSpeedLimitRequest: - properties: - download_speed: - description: 下行速率(KB/s) - minimum: 1 - type: integer - upload_speed: - description: 上行速率(KB/s) - minimum: 1 - type: integer - required: - - upload_speed - - download_speed - type: object - DtoSetWiFiRequest: - properties: - enabled: - description: 启用状态(0:禁用, 1:启用) - type: integer - password: - description: WiFi 密码 - maxLength: 63 - minLength: 8 - type: string - ssid: - description: WiFi 名称 - maxLength: 32 - minLength: 1 - type: string - required: - - ssid - - password - - enabled - type: object - DtoShopCommissionRecordItem: - properties: - amount: - description: 佣金金额(分) - type: integer - balance_after: - description: 入账后佣金余额(分) - type: integer - commission_source: - description: 佣金来源 (cost_diff:成本价差, one_time:一次性佣金, tier_bonus(已废弃):梯度奖励) - type: string - created_at: - description: 佣金入账时间 - type: string - device_no: - description: 设备号 - type: string - iccid: - description: ICCID - type: string - id: - description: 佣金记录ID - minimum: 0 - type: integer - order_created_at: - description: 订单创建时间 - type: string - order_id: - description: 订单ID - minimum: 0 - type: integer - order_no: - description: 订单号 - type: string - status: - description: 状态 (1:已入账, 2:已失效) - type: integer - status_name: - description: 状态名称 - type: string - type: object - DtoShopCommissionRecordPageResult: - properties: - items: - description: 佣金明细列表 - items: - $ref: '#/components/schemas/DtoShopCommissionRecordItem' - nullable: true - type: array - page: - description: 当前页码 - type: integer - size: - description: 每页数量 - type: integer - total: - description: 总记录数 - type: integer - type: object - DtoShopCommissionSummaryItem: - properties: - available_commission: - description: 可提现佣金(分) - type: integer - created_at: - description: 店铺创建时间 - type: string - frozen_commission: - description: 冻结中佣金(分) - type: integer - phone: - description: 主账号手机号 - type: string - shop_code: - description: 店铺编码 - type: string - shop_id: - description: 店铺ID - minimum: 0 - type: integer - shop_name: - description: 店铺名称 - type: string - total_commission: - description: 总佣金(分) - type: integer - unwithdraw_commission: - description: 未提现佣金(分) - type: integer - username: - description: 主账号用户名 - type: string - withdrawing_commission: - description: 提现中佣金(分) - type: integer - withdrawn_commission: - description: 已提现佣金(分) - type: integer - type: object - DtoShopCommissionSummaryPageResult: - properties: - items: - description: 代理商佣金列表 - items: - $ref: '#/components/schemas/DtoShopCommissionSummaryItem' - nullable: true - type: array - page: - description: 当前页码 - type: integer - size: - description: 每页数量 - type: integer - total: - description: 总记录数 - type: integer - type: object - DtoShopPackageAllocationPageResult: - properties: - list: - description: 分配列表 - items: - $ref: '#/components/schemas/DtoShopPackageAllocationResponse' - nullable: true - type: array - page: - description: 当前页 - type: integer - page_size: - description: 每页数量 - type: integer - total: - description: 总数 - type: integer - total_pages: - description: 总页数 - type: integer - type: object - DtoShopPackageAllocationResponse: - properties: - allocation_id: - description: 关联的系列分配ID - minimum: 0 - type: integer - calculated_cost_price: - description: 原计算成本价(分),供参考 - type: integer - cost_price: - description: 覆盖的成本价(分) - type: integer - created_at: - description: 创建时间 - type: string - id: - description: 分配ID - minimum: 0 - type: integer - package_code: - description: 套餐编码 - type: string - package_id: - description: 套餐ID - minimum: 0 - type: integer - package_name: - description: 套餐名称 - type: string - shop_id: - description: 被分配的店铺ID - minimum: 0 - type: integer - shop_name: - description: 被分配的店铺名称 - type: string - status: - description: 状态 (1:启用, 2:禁用) - type: integer - updated_at: - description: 更新时间 - type: string - type: object - DtoShopPageResult: - properties: - items: - description: 店铺列表 - items: - $ref: '#/components/schemas/DtoShopResponse' - nullable: true - type: array - page: - description: 当前页码 - type: integer - size: - description: 每页数量 - type: integer - total: - description: 总记录数 - type: integer - type: object - DtoShopResponse: - properties: - address: - description: 详细地址 - type: string - city: - description: 城市 - type: string - contact_name: - description: 联系人姓名 - type: string - contact_phone: - description: 联系人电话 - type: string - created_at: - description: 创建时间 - type: string - district: - description: 区县 - type: string - id: - description: 店铺ID - minimum: 0 - type: integer - level: - description: 店铺层级 (1-7级) - type: integer - parent_id: - description: 上级店铺ID - minimum: 0 - nullable: true - type: integer - province: - description: 省份 - type: string - shop_code: - description: 店铺编号 - type: string - shop_name: - description: 店铺名称 - type: string - status: - description: 状态 (0:禁用, 1:启用) - type: integer - updated_at: - description: 更新时间 - type: string - type: object - DtoShopSeriesAllocationPageResult: - properties: - list: - description: 分配列表 - items: - $ref: '#/components/schemas/DtoShopSeriesAllocationResponse' - nullable: true - type: array - page: - description: 当前页 - type: integer - page_size: - description: 每页数量 - type: integer - total: - description: 总数 - type: integer - total_pages: - description: 总页数 - type: integer - type: object - DtoShopSeriesAllocationResponse: - properties: - allocator_shop_id: - description: 分配者店铺ID - minimum: 0 - type: integer - allocator_shop_name: - description: 分配者店铺名称 - type: string - base_commission: - $ref: '#/components/schemas/DtoBaseCommissionConfig' - created_at: - description: 创建时间 - type: string - enable_force_recharge: - description: 是否启用强充 - type: boolean - enable_one_time_commission: - description: 是否启用一次性佣金 - type: boolean - force_recharge_amount: - description: 强充金额(分) - type: integer - force_recharge_trigger_type: - description: 强充触发类型(1:单次充值, 2:累计充值) - type: integer - id: - description: 分配ID - minimum: 0 - type: integer - one_time_commission_config: - $ref: '#/components/schemas/DtoOneTimeCommissionConfig' - series_id: - description: 套餐系列ID - minimum: 0 - type: integer - series_name: - description: 套餐系列名称 - type: string - shop_id: - description: 被分配的店铺ID - minimum: 0 - type: integer - shop_name: - description: 被分配的店铺名称 - type: string - status: - description: 状态 (1:启用, 2:禁用) - type: integer - updated_at: - description: 更新时间 - type: string - type: object - DtoShopWithdrawalRequestItem: - properties: - account_name: - description: 收款账户名称 - type: string - account_number: - description: 收款账号 - type: string - actual_amount: - description: 实际到账金额(分) - type: integer - amount: - description: 提现金额(分) - type: integer - applicant_id: - description: 申请人账号ID - minimum: 0 - type: integer - applicant_name: - description: 申请人用户名 - type: string - bank_name: - description: 银行名称(银行卡提现时) - type: string - created_at: - description: 申请时间 - type: string - fee: - description: 手续费(分) - type: integer - fee_rate: - description: 手续费比率(基点,100=1%) - type: integer - id: - description: 提现申请ID - minimum: 0 - type: integer - paid_at: - description: 到账时间 - type: string - payment_type: - description: 放款类型 (manual:人工打款) - type: string - processed_at: - description: 处理时间 - type: string - processor_id: - description: 处理人账号ID - minimum: 0 - nullable: true - type: integer - processor_name: - description: 处理人用户名 - type: string - reject_reason: - description: 拒绝原因 - type: string - remark: - description: 备注 - type: string - shop_hierarchy: - description: 店铺层级路径(格式:上上级_上级_本身,最多两层上级) - type: string - shop_id: - description: 店铺ID - minimum: 0 - type: integer - shop_name: - description: 店铺名称 - type: string - status: - description: 状态 (1:待审核, 2:已通过, 3:已拒绝, 4:已到账) - type: integer - status_name: - description: 状态名称 - type: string - withdrawal_method: - description: 提现方式 (alipay:支付宝, wechat:微信, bank:银行卡) - type: string - withdrawal_no: - description: 提现单号 - type: string - type: object - DtoShopWithdrawalRequestPageResult: - properties: - items: - description: 提现记录列表 - items: - $ref: '#/components/schemas/DtoShopWithdrawalRequestItem' - nullable: true - type: array - page: - description: 当前页码 - type: integer - size: - description: 每页数量 - type: integer - total: - description: 总记录数 - type: integer - type: object - DtoStandaloneIotCardResponse: - properties: - accumulated_recharge: - description: 累计充值金额(分) - type: integer - activated_at: - description: 激活时间 - format: date-time - nullable: true - type: string - activation_status: - description: 激活状态 (0:未激活, 1:已激活) - type: integer - batch_no: - description: 批次号 - type: string - card_category: - description: 卡业务类型 (normal:普通卡, industry:行业卡) - type: string - card_type: - description: 卡类型 - type: string - carrier_id: - description: 运营商ID - minimum: 0 - type: integer - carrier_name: - description: 运营商名称 - type: string - carrier_type: - description: 运营商类型 (CMCC:中国移动, CUCC:中国联通, CTCC:中国电信, CBN:中国广电) - type: string - cost_price: - description: 成本价(分) - type: integer - created_at: - description: 创建时间 - format: date-time - type: string - data_usage_mb: - description: 累计流量使用(MB) - type: integer - distribute_price: - description: 分销价(分) - type: integer - first_commission_paid: - description: 一次性佣金是否已发放 - type: boolean - iccid: - description: ICCID - type: string - id: - description: 卡ID - minimum: 0 - type: integer - imsi: - description: IMSI - type: string - msisdn: - description: 卡接入号 - type: string - network_status: - description: 网络状态 (0:停机, 1:开机) - type: integer - real_name_status: - description: 实名状态 (0:未实名, 1:已实名) - type: integer - series_id: - description: 套餐系列ID - minimum: 0 - nullable: true - type: integer - shop_id: - description: 店铺ID - minimum: 0 - nullable: true - type: integer - shop_name: - description: 店铺名称 - type: string - status: - description: 状态 (1:在库, 2:已分销, 3:已激活, 4:已停用) - type: integer - supplier: - description: 供应商 - type: string - updated_at: - description: 更新时间 - format: date-time - type: string - type: object - DtoSwitchCardRequest: - properties: - target_iccid: - description: 目标卡 ICCID - type: string - required: - - target_iccid - type: object - DtoUnbindCardFromDeviceResponse: - properties: - message: - description: 提示信息 - type: string - type: object - DtoUpdateAccountParams: - properties: - password: - description: 密码 - maxLength: 32 - minLength: 8 - nullable: true - type: string - phone: - description: 手机号 - maxLength: 11 - minLength: 11 - nullable: true - type: string - status: - description: 状态 (0:禁用, 1:启用) - maximum: 1 - minimum: 0 - nullable: true - type: integer - username: - description: 用户名 - maxLength: 50 - minLength: 3 - nullable: true - type: string - type: object - DtoUpdateAuthorizationRemarkReq: - properties: - remark: - description: 备注(最多500字) - type: string - type: object - DtoUpdateCarrierParams: - properties: - carrier_name: - description: 运营商名称 - maxLength: 100 - minLength: 1 - nullable: true - type: string - description: - description: 运营商描述 - maxLength: 500 - nullable: true - type: string - type: object - DtoUpdateCarrierStatusParams: - properties: - status: - description: 状态 (1:启用, 0:禁用) - type: integer - required: - - status - type: object - DtoUpdateEnterprisePasswordReq: - properties: - password: - description: 新密码 - maximum: 20 - minimum: 6 - type: string - required: - - password - type: object - DtoUpdateEnterpriseReq: - properties: - address: - description: 详细地址 - maximum: 255 - nullable: true - type: string - business_license: - description: 营业执照号 - maximum: 100 - nullable: true - type: string - city: - description: 城市 - maximum: 50 - nullable: true - type: string - contact_name: - description: 联系人姓名 - maximum: 50 - nullable: true - type: string - contact_phone: - description: 联系人电话 - maximum: 20 - nullable: true - type: string - district: - description: 区县 - maximum: 50 - nullable: true - type: string - enterprise_code: - description: 企业编号 - maximum: 50 - nullable: true - type: string - enterprise_name: - description: 企业名称 - maximum: 100 - nullable: true - type: string - legal_person: - description: 法人代表 - maximum: 50 - nullable: true - type: string - owner_shop_id: - description: 归属店铺ID - minimum: 0 - nullable: true - type: integer - province: - description: 省份 - maximum: 50 - nullable: true - type: string - type: object - DtoUpdateEnterpriseStatusReq: - properties: - status: - description: 状态(0=禁用, 1=启用) - enum: - - "0" - - "1" - type: integer - required: - - status - type: object - DtoUpdatePackageParams: - properties: - data_amount_mb: - description: 总流量额度(MB) - minimum: 0 - nullable: true - type: integer - data_type: - description: 流量类型 (real:真流量, virtual:虚流量) - nullable: true - type: string - duration_months: - description: 套餐时长(月数) - maximum: 120 - minimum: 1 - nullable: true - type: integer - package_name: - description: 套餐名称 - maxLength: 255 - minLength: 1 - nullable: true - type: string - package_type: - description: 套餐类型 (formal:正式套餐, addon:附加套餐) - nullable: true - type: string - price: - description: 套餐价格(分) - minimum: 0 - nullable: true - type: integer - real_data_mb: - description: 真流量额度(MB) - minimum: 0 - nullable: true - type: integer - series_id: - description: 套餐系列ID - minimum: 0 - nullable: true - type: integer - suggested_cost_price: - description: 建议成本价(分) - minimum: 0 - nullable: true - type: integer - suggested_retail_price: - description: 建议售价(分) - minimum: 0 - nullable: true - type: integer - virtual_data_mb: - description: 虚流量额度(MB) - minimum: 0 - nullable: true - type: integer - type: object - DtoUpdatePackageSeriesParams: - properties: - description: - description: 描述 - maxLength: 500 - nullable: true - type: string - series_name: - description: 系列名称 - maxLength: 255 - minLength: 1 - nullable: true - type: string - type: object - DtoUpdatePackageSeriesStatusParams: - properties: - status: - description: 状态 (1:启用, 2:禁用) - type: integer - required: - - status - type: object - DtoUpdatePackageShelfStatusParams: - properties: - shelf_status: - description: 上架状态 (1:上架, 2:下架) - type: integer - required: - - shelf_status - type: object - DtoUpdatePackageStatusParams: - properties: - status: - description: 状态 (1:启用, 2:禁用) - type: integer - required: - - status - type: object - DtoUpdatePasswordParams: - properties: - new_password: - description: 新密码(8-32位) - maxLength: 32 - minLength: 8 - type: string - required: - - new_password - type: object - DtoUpdatePermissionParams: - properties: - parent_id: - description: 父权限ID - minimum: 0 - nullable: true - type: integer - perm_code: - description: 权限编码 - maxLength: 100 - minLength: 1 - nullable: true - type: string - perm_name: - description: 权限名称 - maxLength: 50 - minLength: 1 - nullable: true - type: string - platform: - description: 适用端口 (all:全部, web:Web后台, h5:H5端) - nullable: true - type: string - sort: - description: 排序值 - minimum: 0 - nullable: true - type: integer - status: - description: 状态 (0:禁用, 1:启用) - maximum: 1 - minimum: 0 - nullable: true - type: integer - url: - description: 请求路径 - maxLength: 255 - nullable: true - type: string - type: object - DtoUpdateRoleParams: - properties: - role_desc: - description: 角色描述 - maxLength: 255 - nullable: true - type: string - role_name: - description: 角色名称 - maxLength: 50 - minLength: 1 - nullable: true - type: string - status: - description: 状态 (0:禁用, 1:启用) - maximum: 1 - minimum: 0 - nullable: true - type: integer - type: object - DtoUpdateRoleStatusParams: - properties: - status: - description: 状态 (0:禁用, 1:启用) - maximum: 1 - minimum: 0 - type: integer - required: - - status - type: object - DtoUpdateShopPackageAllocationParams: - properties: - cost_price: - description: 覆盖的成本价(分) - minimum: 0 - nullable: true - type: integer - type: object - DtoUpdateShopParams: - properties: - address: - description: 详细地址 - maxLength: 255 - type: string - city: - description: 城市 - maxLength: 50 - type: string - contact_name: - description: 联系人姓名 - maxLength: 50 - type: string - contact_phone: - description: 联系人电话 - maxLength: 11 - minLength: 11 - type: string - district: - description: 区县 - maxLength: 50 - type: string - province: - description: 省份 - maxLength: 50 - type: string - shop_name: - description: 店铺名称 - maxLength: 100 - minLength: 1 - type: string - status: - description: 状态 (0:禁用, 1:启用) - type: integer - required: - - shop_name - - status - type: object - DtoUpdateShopSeriesAllocationParams: - properties: - base_commission: - $ref: '#/components/schemas/DtoBaseCommissionConfig' - enable_force_recharge: - description: 是否启用强充(累计充值强充) - nullable: true - type: boolean - enable_one_time_commission: - description: 是否启用一次性佣金 - nullable: true - type: boolean - force_recharge_amount: - description: 强充金额(分,0表示使用阈值金额) - nullable: true - type: integer - force_recharge_trigger_type: - description: 强充触发类型(1:单次充值, 2:累计充值) - nullable: true - type: integer - one_time_commission_config: - $ref: '#/components/schemas/DtoOneTimeCommissionConfig' - type: object - DtoUpdateStatusParams: - properties: - status: - description: 状态(0:禁用,1:启用) - maximum: 1 - minimum: 0 - type: integer - required: - - status - type: object - DtoUserInfo: - properties: - enterprise_id: - description: 企业ID - minimum: 0 - type: integer - enterprise_name: - description: 企业名称 - type: string - id: - description: 用户ID - minimum: 0 - type: integer - phone: - description: 手机号 - type: string - shop_id: - description: 店铺ID - minimum: 0 - type: integer - shop_name: - description: 店铺名称 - type: string - user_type: - description: 用户类型 (1:超级管理员, 2:平台用户, 3:代理账号, 4:企业账号) - type: integer - user_type_name: - description: 用户类型名称 - type: string - username: - description: 用户名 - type: string - type: object - DtoWechatH5Detail: - properties: - type: - description: 场景类型 (iOS:苹果, Android:安卓, Wap:浏览器) - type: string - type: object - DtoWechatH5SceneInfo: - properties: - h5_info: - $ref: '#/components/schemas/DtoWechatH5Detail' - payer_client_ip: - description: 用户终端IP - type: string - required: - - payer_client_ip - type: object - DtoWechatOAuthRequest: - properties: - code: - description: 微信授权码 - type: string - required: - - code - type: object - DtoWechatOAuthResponse: - properties: - access_token: - description: 访问令牌 - type: string - customer: - $ref: '#/components/schemas/DtoPersonalCustomerResponse' - expires_in: - description: 令牌有效期(秒) - type: integer - type: object - DtoWechatPayH5Params: - properties: - scene_info: - $ref: '#/components/schemas/DtoWechatH5SceneInfo' - required: - - scene_info - type: object - DtoWechatPayH5Response: - properties: - h5_url: - description: 微信支付跳转URL - type: string - type: object - DtoWechatPayJSAPIParams: - properties: - openid: - description: 用户OpenID - type: string - required: - - openid - type: object - DtoWechatPayJSAPIResponse: - properties: - pay_config: - additionalProperties: {} - description: JSSDK支付配置 - nullable: true - type: object - prepay_id: - description: 预支付交易会话标识 - type: string - type: object - DtoWithdrawalApprovalResp: - properties: - id: - description: 提现申请ID - minimum: 0 - type: integer - processed_at: - description: 处理时间 - type: string - status: - description: 状态 (1:待审核, 2:已通过, 3:已拒绝, 4:已到账) - type: integer - status_name: - description: 状态名称 - type: string - withdrawal_no: - description: 提现单号 - type: string - type: object - DtoWithdrawalRequestItem: - properties: - account_name: - description: 收款账户名称 - type: string - account_number: - description: 收款账号 - type: string - actual_amount: - description: 实际到账金额(分) - type: integer - amount: - description: 提现金额(分) - type: integer - applicant_id: - description: 申请人账号ID - minimum: 0 - type: integer - applicant_name: - description: 申请人用户名 - type: string - bank_name: - description: 银行名称 - type: string - created_at: - description: 申请时间 - type: string - fee: - description: 手续费(分) - type: integer - fee_rate: - description: 手续费比率(基点,100=1%) - type: integer - id: - description: 提现申请ID - minimum: 0 - type: integer - payment_type: - description: 放款类型 (manual:人工打款) - type: string - processed_at: - description: 处理时间 - type: string - processor_id: - description: 处理人账号ID - minimum: 0 - nullable: true - type: integer - processor_name: - description: 处理人用户名 - type: string - reject_reason: - description: 拒绝原因 - type: string - remark: - description: 备注 - type: string - shop_hierarchy: - description: 店铺层级路径 - type: string - shop_id: - description: 店铺ID - minimum: 0 - type: integer - shop_name: - description: 店铺名称 - type: string - status: - description: 状态 (1:待审核, 2:已通过, 3:已拒绝, 4:已到账) - type: integer - status_name: - description: 状态名称 - type: string - withdrawal_method: - description: 提现方式 (alipay:支付宝, wechat:微信, bank:银行卡) - type: string - withdrawal_no: - description: 提现单号 - type: string - type: object - DtoWithdrawalRequestPageResult: - properties: - items: - description: 提现申请列表 - items: - $ref: '#/components/schemas/DtoWithdrawalRequestItem' - nullable: true - type: array - page: - description: 当前页码 - type: integer - size: - description: 每页数量 - type: integer - total: - description: 总记录数 - type: integer - type: object - DtoWithdrawalSettingItem: - properties: - arrival_days: - description: 到账天数 - type: integer - created_at: - description: 创建时间 - type: string - creator_id: - description: 创建人ID - minimum: 0 - type: integer - creator_name: - description: 创建人用户名 - type: string - daily_withdrawal_limit: - description: 每日提现次数限制 - type: integer - fee_rate: - description: 手续费比率(基点,100=1%) - type: integer - id: - description: 配置ID - minimum: 0 - type: integer - is_active: - description: 是否生效 - type: boolean - min_withdrawal_amount: - description: 最低提现金额(分) - type: integer - type: object - DtoWithdrawalSettingPageResult: - properties: - items: - description: 配置列表 - items: - $ref: '#/components/schemas/DtoWithdrawalSettingItem' - nullable: true - type: array - page: - description: 当前页码 - type: integer - size: - description: 每页数量 - type: integer - total: - description: 总记录数 - type: integer - type: object - ErrorResponse: - properties: - code: - description: 错误码 - example: 1001 - type: integer - data: - description: 错误详情(可选) - type: object - msg: - description: 错误消息 - example: 参数验证失败 - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - timestamp - type: object - GatewayCardStatusResp: - properties: - cardStatus: - description: 卡状态(准备、正常、停机) - type: string - extend: - description: 扩展字段(广电国网特殊参数) - type: string - iccid: - description: ICCID - type: string - type: object - GatewayDeviceInfoResp: - properties: - downloadSpeed: - description: 下行速率(KB/s) - type: integer - extend: - description: 扩展字段(广电国网特殊参数) - type: string - imei: - description: 设备 IMEI - type: string - onlineStatus: - description: 在线状态(0:离线, 1:在线) - type: integer - signalLevel: - description: 信号强度(0-31) - type: integer - uploadSpeed: - description: 上行速率(KB/s) - type: integer - wifiEnabled: - description: WiFi 启用状态(0:禁用, 1:启用) - type: integer - wifiSsid: - description: WiFi 名称 - type: string - type: object - GatewayFlowUsageResp: - properties: - extend: - description: 扩展字段(广电国网特殊参数) - type: string - unit: - description: 流量单位(MB) - type: string - usedFlow: - description: 已用流量 - type: integer - type: object - GatewayRealnameLinkResp: - properties: - extend: - description: 扩展字段(广电国网特殊参数) - type: string - link: - description: 实名认证跳转链接(HTTPS URL) - type: string - type: object - GatewayRealnameStatusResp: - properties: - extend: - description: 扩展字段(广电国网特殊参数) - type: string - status: - description: 实名认证状态 - type: string - type: object - GatewaySlotInfo: - properties: - cardStatus: - description: 卡状态(准备、正常、停机) - type: string - extend: - description: 扩展字段(广电国网特殊参数) - type: string - iccid: - description: 卡槽中的 ICCID - type: string - isActive: - description: 是否为当前使用的卡槽(0:否, 1:是) - type: integer - slotNo: - description: 卡槽编号 - type: integer - type: object - GatewaySlotInfoResp: - properties: - extend: - description: 扩展字段(广电国网特殊参数) - type: string - imei: - description: 设备 IMEI - type: string - slots: - description: 卡槽信息列表 - items: - $ref: '#/components/schemas/GatewaySlotInfo' - nullable: true - type: array - type: object - ModelPermission: - properties: - available_for_role_types: - type: string - creator: - minimum: 0 - type: integer - parent_id: - minimum: 0 - nullable: true - type: integer - perm_code: - type: string - perm_name: - type: string - perm_type: - type: integer - platform: - type: string - sort: - type: integer - status: - type: integer - updater: - minimum: 0 - type: integer - url: - type: string - type: object - RoutesHealthResponse: - properties: - service: - description: 服务名称 - type: string - status: - description: 健康状态 - type: string - type: object - securitySchemes: - BearerAuth: - bearerFormat: JWT - scheme: bearer - type: http -info: - title: 君鸿卡管系统 API - version: 1.0.0 -openapi: 3.0.3 -paths: - /api/admin/accounts: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 用户名模糊查询 - in: query - name: username - schema: - description: 用户名模糊查询 - maxLength: 50 - type: string - - description: 手机号模糊查询 - in: query - name: phone - schema: - description: 手机号模糊查询 - maxLength: 20 - type: string - - description: 用户类型 (1:超级管理员, 2:平台用户, 3:代理账号, 4:企业账号) - in: query - name: user_type - schema: - description: 用户类型 (1:超级管理员, 2:平台用户, 3:代理账号, 4:企业账号) - maximum: 4 - minimum: 1 - nullable: true - type: integer - - description: 状态 (0:禁用, 1:启用) - in: query - name: status - schema: - description: 状态 (0:禁用, 1:启用) - maximum: 1 - minimum: 0 - nullable: true - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoAccountPageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 查询账号列表 - tags: - - 账号管理 - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoCreateAccountRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoAccountResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 创建账号 - tags: - - 账号管理 - /api/admin/accounts/{account_id}/roles/{role_id}: - delete: - parameters: - - description: 账号ID - in: path - name: account_id - required: true - schema: - description: 账号ID - minimum: 0 - type: integer - - description: 角色ID - in: path - name: role_id - required: true - schema: - description: 角色ID - minimum: 0 - type: integer - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 移除账号角色 - tags: - - 账号管理 - /api/admin/accounts/{id}: - delete: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 删除账号 - tags: - - 账号管理 - get: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoAccountResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取账号详情 - tags: - - 账号管理 - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdateAccountParams' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoAccountResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新账号 - tags: - - 账号管理 - /api/admin/accounts/{id}/password: - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdatePasswordParams' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 修改账号密码 - tags: - - 账号管理 - /api/admin/accounts/{id}/roles: - get: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoAccountRolesResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取账号角色 - tags: - - 账号管理 - post: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoAssignRolesParams' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - items: - $ref: '#/components/schemas/DtoAccountRoleResponse' - type: array - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 为账号分配角色 - tags: - - 账号管理 - /api/admin/accounts/{id}/status: - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdateStatusParams' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 修改账号状态 - tags: - - 账号管理 - /api/admin/asset-allocation-records: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 分配类型 (allocate:分配, recall:回收) - in: query - name: allocation_type - schema: - description: 分配类型 (allocate:分配, recall:回收) - enum: - - allocate - - recall - type: string - - description: 资产类型 (iot_card:物联网卡, device:设备) - in: query - name: asset_type - schema: - description: 资产类型 (iot_card:物联网卡, device:设备) - enum: - - iot_card - - device - type: string - - description: 资产标识符(ICCID或设备号,模糊查询) - in: query - name: asset_identifier - schema: - description: 资产标识符(ICCID或设备号,模糊查询) - maxLength: 50 - type: string - - description: 分配单号(精确匹配) - in: query - name: allocation_no - schema: - description: 分配单号(精确匹配) - maxLength: 50 - type: string - - description: 来源店铺ID - in: query - name: from_shop_id - schema: - description: 来源店铺ID - minimum: 0 - nullable: true - type: integer - - description: 目标店铺ID - in: query - name: to_shop_id - schema: - description: 目标店铺ID - minimum: 0 - nullable: true - type: integer - - description: 操作人ID - in: query - name: operator_id - schema: - description: 操作人ID - minimum: 0 - nullable: true - type: integer - - description: 创建时间起始 - in: query - name: created_at_start - schema: - description: 创建时间起始 - format: date-time - nullable: true - type: string - - description: 创建时间结束 - in: query - name: created_at_end - schema: - description: 创建时间结束 - format: date-time - nullable: true - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoListAssetAllocationRecordResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 分配记录列表 - tags: - - 资产分配记录 - /api/admin/asset-allocation-records/{id}: - get: - parameters: - - description: 记录ID - in: path - name: id - required: true - schema: - description: 记录ID - minimum: 1 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoAssetAllocationRecordDetailResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 分配记录详情 - tags: - - 资产分配记录 - /api/admin/authorizations: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 按企业ID筛选 - in: query - name: enterprise_id - schema: - description: 按企业ID筛选 - minimum: 0 - nullable: true - type: integer - - description: 按ICCID模糊查询 - in: query - name: iccid - schema: - description: 按ICCID模糊查询 - type: string - - description: 授权人类型:2=平台,3=代理 - in: query - name: authorizer_type - schema: - description: 授权人类型:2=平台,3=代理 - nullable: true - type: integer - - description: 状态:0=已回收,1=有效 - in: query - name: status - schema: - description: 状态:0=已回收,1=有效 - nullable: true - type: integer - - description: 授权时间起(格式:2006-01-02) - in: query - name: start_time - schema: - description: 授权时间起(格式:2006-01-02) - type: string - - description: 授权时间止(格式:2006-01-02) - in: query - name: end_time - schema: - description: 授权时间止(格式:2006-01-02) - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoAuthorizationListResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 授权记录列表 - tags: - - 授权记录管理 - /api/admin/authorizations/{id}: - get: - parameters: - - description: 授权记录ID - in: path - name: id - required: true - schema: - description: 授权记录ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoAuthorizationItem' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 授权记录详情 - tags: - - 授权记录管理 - /api/admin/authorizations/{id}/remark: - put: - parameters: - - description: 授权记录ID - in: path - name: id - required: true - schema: - description: 授权记录ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdateAuthorizationRemarkReq' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoAuthorizationItem' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 修改授权备注 - tags: - - 授权记录管理 - /api/admin/carriers: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 运营商类型 (CMCC:中国移动, CUCC:中国联通, CTCC:中国电信, CBN:中国广电) - in: query - name: carrier_type - schema: - description: 运营商类型 (CMCC:中国移动, CUCC:中国联通, CTCC:中国电信, CBN:中国广电) - nullable: true - type: string - - description: 运营商名称(模糊搜索) - in: query - name: carrier_name - schema: - description: 运营商名称(模糊搜索) - maxLength: 100 - nullable: true - type: string - - description: 状态 (1:启用, 0:禁用) - in: query - name: status - schema: - description: 状态 (1:启用, 0:禁用) - nullable: true - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoCarrierPageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 运营商列表 - tags: - - 运营商管理 - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoCreateCarrierRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoCarrierResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 创建运营商 - tags: - - 运营商管理 - /api/admin/carriers/{id}: - delete: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 删除运营商 - tags: - - 运营商管理 - get: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoCarrierResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取运营商详情 - tags: - - 运营商管理 - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdateCarrierParams' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoCarrierResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新运营商 - tags: - - 运营商管理 - /api/admin/carriers/{id}/status: - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdateCarrierStatusParams' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新运营商状态 - tags: - - 运营商管理 - /api/admin/commission/withdrawal-requests: - get: - parameters: - - description: 页码(默认1) - in: query - name: page - schema: - description: 页码(默认1) - minimum: 1 - type: integer - - description: 每页数量(默认20,最大100) - in: query - name: page_size - schema: - description: 每页数量(默认20,最大100) - maximum: 100 - minimum: 1 - type: integer - - description: 状态 (1:待审核, 2:已通过, 3:已拒绝, 4:已到账) - in: query - name: status - schema: - description: 状态 (1:待审核, 2:已通过, 3:已拒绝, 4:已到账) - maximum: 4 - minimum: 1 - nullable: true - type: integer - - description: 提现单号(精确查询) - in: query - name: withdrawal_no - schema: - description: 提现单号(精确查询) - maxLength: 50 - type: string - - description: 店铺名称(模糊查询) - in: query - name: shop_name - schema: - description: 店铺名称(模糊查询) - maxLength: 100 - type: string - - description: 申请开始时间(格式:2006-01-02 15:04:05) - in: query - name: start_time - schema: - description: 申请开始时间(格式:2006-01-02 15:04:05) - type: string - - description: 申请结束时间(格式:2006-01-02 15:04:05) - in: query - name: end_time - schema: - description: 申请结束时间(格式:2006-01-02 15:04:05) - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoWithdrawalRequestPageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 提现申请列表 - tags: - - 佣金提现审批 - /api/admin/commission/withdrawal-requests/{id}/approve: - post: - parameters: - - description: 提现申请ID - in: path - name: id - required: true - schema: - description: 提现申请ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoApproveWithdrawalReq' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoWithdrawalApprovalResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 审批通过提现申请 - tags: - - 佣金提现审批 - /api/admin/commission/withdrawal-requests/{id}/reject: - post: - parameters: - - description: 提现申请ID - in: path - name: id - required: true - schema: - description: 提现申请ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoRejectWithdrawalReq' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoWithdrawalApprovalResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 拒绝提现申请 - tags: - - 佣金提现审批 - /api/admin/commission/withdrawal-settings: - get: - parameters: - - description: 页码(默认1) - in: query - name: page - schema: - description: 页码(默认1) - minimum: 1 - type: integer - - description: 每页数量(默认20,最大100) - in: query - name: page_size - schema: - description: 每页数量(默认20,最大100) - maximum: 100 - minimum: 1 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoWithdrawalSettingPageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 提现配置列表 - tags: - - 提现配置管理 - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoCreateWithdrawalSettingReq' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoWithdrawalSettingItem' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 新增提现配置 - tags: - - 提现配置管理 - /api/admin/commission/withdrawal-settings/current: - get: - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoWithdrawalSettingItem' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取当前生效的提现配置 - tags: - - 提现配置管理 - /api/admin/devices: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 设备号(模糊查询) - in: query - name: device_no - schema: - description: 设备号(模糊查询) - maxLength: 100 - type: string - - description: 设备名称(模糊查询) - in: query - name: device_name - schema: - description: 设备名称(模糊查询) - maxLength: 255 - type: string - - description: 状态 (1:在库, 2:已分销, 3:已激活, 4:已停用) - in: query - name: status - schema: - description: 状态 (1:在库, 2:已分销, 3:已激活, 4:已停用) - maximum: 4 - minimum: 1 - nullable: true - type: integer - - description: 店铺ID (NULL表示平台库存) - in: query - name: shop_id - schema: - description: 店铺ID (NULL表示平台库存) - minimum: 0 - nullable: true - type: integer - - description: 套餐系列ID - in: query - name: series_id - schema: - description: 套餐系列ID - minimum: 0 - nullable: true - type: integer - - description: 批次号 - in: query - name: batch_no - schema: - description: 批次号 - maxLength: 100 - type: string - - description: 设备类型 - in: query - name: device_type - schema: - description: 设备类型 - maxLength: 50 - type: string - - description: 制造商(模糊查询) - in: query - name: manufacturer - schema: - description: 制造商(模糊查询) - maxLength: 255 - type: string - - description: 创建时间起始 - in: query - name: created_at_start - schema: - description: 创建时间起始 - format: date-time - nullable: true - type: string - - description: 创建时间结束 - in: query - name: created_at_end - schema: - description: 创建时间结束 - format: date-time - nullable: true - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoListDeviceResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 设备列表 - tags: - - 设备管理 - /api/admin/devices/{id}: - delete: - description: 仅平台用户可操作。删除设备时自动解绑所有卡(卡不会被删除)。 - parameters: - - description: 设备ID - in: path - name: id - required: true - schema: - description: 设备ID - minimum: 0 - type: integer - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 删除设备 - tags: - - 设备管理 - get: - parameters: - - description: 设备ID - in: path - name: id - required: true - schema: - description: 设备ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoDeviceResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 设备详情 - tags: - - 设备管理 - /api/admin/devices/{id}/cards: - get: - parameters: - - description: 设备ID - in: path - name: id - required: true - schema: - description: 设备ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoListDeviceCardsResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取设备绑定的卡列表 - tags: - - 设备管理 - post: - description: 仅平台用户可操作。用于导入后调整卡绑定关系(补卡、换卡)。 - parameters: - - description: 设备ID - in: path - name: id - required: true - schema: - description: 设备ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoBindCardToDeviceRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoBindCardToDeviceResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 绑定卡到设备 - tags: - - 设备管理 - /api/admin/devices/{id}/cards/{cardId}: - delete: - description: 仅平台用户可操作。解绑不改变卡的 shop_id。 - parameters: - - description: 设备ID - in: path - name: id - required: true - schema: - description: 设备ID - minimum: 0 - type: integer - - description: IoT卡ID - in: path - name: cardId - required: true - schema: - description: IoT卡ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoUnbindCardFromDeviceResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 解绑设备上的卡 - tags: - - 设备管理 - /api/admin/devices/allocate: - post: - description: 分配设备给直属下级店铺。分配时自动同步绑定的所有卡的 shop_id。 - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoAllocateDevicesRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoAllocateDevicesResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 批量分配设备 - tags: - - 设备管理 - /api/admin/devices/by-imei/{imei}: - get: - parameters: - - description: 设备号(IMEI) - in: path - name: imei - required: true - schema: - description: 设备号(IMEI) - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoDeviceResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 通过设备号查询设备详情 - tags: - - 设备管理 - /api/admin/devices/by-imei/{imei}/gateway-info: - get: - parameters: - - description: 设备号(IMEI) - in: path - name: imei - required: true - schema: - description: 设备号(IMEI) - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/GatewayDeviceInfoResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 查询设备信息 - tags: - - 设备管理 - /api/admin/devices/by-imei/{imei}/gateway-slots: - get: - parameters: - - description: 设备号(IMEI) - in: path - name: imei - required: true - schema: - description: 设备号(IMEI) - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/GatewaySlotInfoResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 查询卡槽信息 - tags: - - 设备管理 - /api/admin/devices/by-imei/{imei}/reboot: - post: - parameters: - - description: 设备号(IMEI) - in: path - name: imei - required: true - schema: - description: 设备号(IMEI) - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoEmptyResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 重启设备 - tags: - - 设备管理 - /api/admin/devices/by-imei/{imei}/reset: - post: - parameters: - - description: 设备号(IMEI) - in: path - name: imei - required: true - schema: - description: 设备号(IMEI) - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoEmptyResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 恢复出厂 - tags: - - 设备管理 - /api/admin/devices/by-imei/{imei}/speed-limit: - put: - parameters: - - description: 设备号(IMEI) - in: path - name: imei - required: true - schema: - description: 设备号(IMEI) - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoSetSpeedLimitRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoEmptyResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 设置限速 - tags: - - 设备管理 - /api/admin/devices/by-imei/{imei}/switch-card: - post: - parameters: - - description: 设备号(IMEI) - in: path - name: imei - required: true - schema: - description: 设备号(IMEI) - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoSwitchCardRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoEmptyResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 切卡 - tags: - - 设备管理 - /api/admin/devices/by-imei/{imei}/wifi: - put: - parameters: - - description: 设备号(IMEI) - in: path - name: imei - required: true - schema: - description: 设备号(IMEI) - type: string - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoSetWiFiRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoEmptyResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 设置 WiFi - tags: - - 设备管理 - /api/admin/devices/import: - post: - description: |- - 仅平台用户可操作。文件格式已从 CSV 升级为 Excel (.xlsx)。 - - ### 完整导入流程 - - 1. **获取上传 URL**: 调用 `POST /api/admin/storage/upload-url` - 2. **上传 Excel 文件**: 使用预签名 URL 上传文件到对象存储 - 3. **调用本接口**: 使用返回的 `file_key` 提交导入任务 - - ### Excel 文件格式 - - - 文件格式:仅支持 .xlsx (Excel 2007+) - - 必须包含列(首行为表头): - - `device_no`: 设备号(必填,唯一) - - `device_name`: 设备名称 - - `device_model`: 设备型号 - - `device_type`: 设备类型 - - `max_sim_slots`: 最大插槽数(默认4) - - `manufacturer`: 制造商 - - `iccid_1` ~ `iccid_4`: 绑定的卡 ICCID(卡必须已存在且未绑定) - - 列格式:设置为文本格式(避免长数字被转为科学记数法) - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoImportDeviceRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoImportDeviceResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 批量导入设备 - tags: - - 设备管理 - /api/admin/devices/import/tasks: - get: - description: 仅平台用户可操作。 - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 任务状态 (1:待处理, 2:处理中, 3:已完成, 4:失败) - in: query - name: status - schema: - description: 任务状态 (1:待处理, 2:处理中, 3:已完成, 4:失败) - maximum: 4 - minimum: 1 - nullable: true - type: integer - - description: 批次号(模糊查询) - in: query - name: batch_no - schema: - description: 批次号(模糊查询) - maxLength: 100 - type: string - - description: 创建时间起始 - in: query - name: start_time - schema: - description: 创建时间起始 - format: date-time - nullable: true - type: string - - description: 创建时间结束 - in: query - name: end_time - schema: - description: 创建时间结束 - format: date-time - nullable: true - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoListDeviceImportTaskResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 导入任务列表 - tags: - - 设备管理 - /api/admin/devices/import/tasks/{id}: - get: - description: 仅平台用户可操作。包含跳过和失败记录的详细信息。 - parameters: - - description: 任务ID - in: path - name: id - required: true - schema: - description: 任务ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoDeviceImportTaskDetailResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 导入任务详情 - tags: - - 设备管理 - /api/admin/devices/recall: - post: - description: 从直属下级店铺回收设备。回收时自动同步绑定的所有卡的 shop_id。 - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoRecallDevicesRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoRecallDevicesResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 批量回收设备 - tags: - - 设备管理 - /api/admin/devices/series-binding: - patch: - description: 批量设置或清除设备与套餐系列分配的关联关系。参数:series_id(套餐系列ID,0表示清除关联)。 - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoBatchSetDeviceSeriesBindngRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoBatchSetDeviceSeriesBindngResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 批量设置设备的套餐系列绑定 - tags: - - 设备管理 - /api/admin/enterprises: - get: - parameters: - - description: 页码(默认1) - in: query - name: page - schema: - description: 页码(默认1) - minimum: 1 - type: integer - - description: 每页数量(默认20,最大100) - in: query - name: page_size - schema: - description: 每页数量(默认20,最大100) - maximum: 100 - minimum: 1 - type: integer - - description: 企业名称(模糊查询) - in: query - name: enterprise_name - schema: - description: 企业名称(模糊查询) - type: string - - description: 登录手机号(模糊查询) - in: query - name: login_phone - schema: - description: 登录手机号(模糊查询) - type: string - - description: 联系人电话(模糊查询) - in: query - name: contact_phone - schema: - description: 联系人电话(模糊查询) - type: string - - description: 归属店铺ID - in: query - name: owner_shop_id - schema: - description: 归属店铺ID - minimum: 0 - nullable: true - type: integer - - description: 状态(0=禁用, 1=启用) - in: query - name: status - schema: - description: 状态(0=禁用, 1=启用) - nullable: true - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoEnterprisePageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 查询企业客户列表 - tags: - - 企业客户管理 - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoCreateEnterpriseReq' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoCreateEnterpriseResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 新增企业客户 - tags: - - 企业客户管理 - /api/admin/enterprises/{id}: - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdateEnterpriseReq' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoEnterpriseItem' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 编辑企业信息 - tags: - - 企业客户管理 - /api/admin/enterprises/{id}/allocate-cards: - post: - parameters: - - description: 企业ID - in: path - name: id - required: true - schema: - description: 企业ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoAllocateCardsReq' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoAllocateCardsResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 授权卡给企业 - tags: - - 企业卡授权 - /api/admin/enterprises/{id}/allocate-devices: - post: - parameters: - - description: 企业ID - in: path - name: id - required: true - schema: - description: 企业ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoAllocateDevicesReq' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoAllocateDevicesResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 授权设备给企业 - tags: - - 企业设备授权 - /api/admin/enterprises/{id}/cards: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 卡状态 - in: query - name: status - schema: - description: 卡状态 - nullable: true - type: integer - - description: 运营商ID - in: query - name: carrier_id - schema: - description: 运营商ID - minimum: 0 - nullable: true - type: integer - - description: ICCID(模糊查询) - in: query - name: iccid - schema: - description: ICCID(模糊查询) - type: string - - description: 设备号(模糊查询) - in: query - name: device_no - schema: - description: 设备号(模糊查询) - type: string - - description: 企业ID - in: path - name: id - required: true - schema: - description: 企业ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoEnterpriseCardPageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 企业卡列表 - tags: - - 企业卡授权 - /api/admin/enterprises/{id}/cards/{card_id}/resume: - post: - parameters: - - description: 企业ID - in: path - name: id - required: true - schema: - description: 企业ID - minimum: 0 - type: integer - - description: 卡ID - in: path - name: card_id - required: true - schema: - description: 卡ID - minimum: 0 - type: integer - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 复机卡 - tags: - - 企业卡授权 - /api/admin/enterprises/{id}/cards/{card_id}/suspend: - post: - parameters: - - description: 企业ID - in: path - name: id - required: true - schema: - description: 企业ID - minimum: 0 - type: integer - - description: 卡ID - in: path - name: card_id - required: true - schema: - description: 卡ID - minimum: 0 - type: integer - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 停机卡 - tags: - - 企业卡授权 - /api/admin/enterprises/{id}/devices: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - type: integer - - description: 设备号(模糊搜索) - in: query - name: device_no - schema: - description: 设备号(模糊搜索) - type: string - - description: 企业ID - in: path - name: id - required: true - schema: - description: 企业ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoEnterpriseDeviceListResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 企业设备列表 - tags: - - 企业设备授权 - /api/admin/enterprises/{id}/password: - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdateEnterprisePasswordReq' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 修改企业账号密码 - tags: - - 企业客户管理 - /api/admin/enterprises/{id}/recall-cards: - post: - parameters: - - description: 企业ID - in: path - name: id - required: true - schema: - description: 企业ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoRecallCardsReq' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoRecallCardsResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 回收卡授权 - tags: - - 企业卡授权 - /api/admin/enterprises/{id}/recall-devices: - post: - parameters: - - description: 企业ID - in: path - name: id - required: true - schema: - description: 企业ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoRecallDevicesReq' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoRecallDevicesResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 撤销设备授权 - tags: - - 企业设备授权 - /api/admin/enterprises/{id}/status: - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdateEnterpriseStatusReq' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 启用/禁用企业 - tags: - - 企业客户管理 - /api/admin/iot-cards/{iccid}/gateway-flow: - get: - parameters: - - description: ICCID - in: path - name: iccid - required: true - schema: - description: ICCID - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/GatewayFlowUsageResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 查询流量使用 - tags: - - IoT卡管理 - /api/admin/iot-cards/{iccid}/gateway-realname: - get: - parameters: - - description: ICCID - in: path - name: iccid - required: true - schema: - description: ICCID - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/GatewayRealnameStatusResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 查询实名认证状态 - tags: - - IoT卡管理 - /api/admin/iot-cards/{iccid}/gateway-status: - get: - parameters: - - description: ICCID - in: path - name: iccid - required: true - schema: - description: ICCID - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/GatewayCardStatusResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 查询卡实时状态 - tags: - - IoT卡管理 - /api/admin/iot-cards/{iccid}/realname-link: - get: - parameters: - - description: ICCID - in: path - name: iccid - required: true - schema: - description: ICCID - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/GatewayRealnameLinkResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取实名认证链接 - tags: - - IoT卡管理 - /api/admin/iot-cards/{iccid}/start: - post: - parameters: - - description: ICCID - in: path - name: iccid - required: true - schema: - description: ICCID - type: string - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 复机 - tags: - - IoT卡管理 - /api/admin/iot-cards/{iccid}/stop: - post: - parameters: - - description: ICCID - in: path - name: iccid - required: true - schema: - description: ICCID - type: string - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 停机 - tags: - - IoT卡管理 - /api/admin/iot-cards/by-iccid/{iccid}: - get: - parameters: - - description: ICCID - in: path - name: iccid - required: true - schema: - description: ICCID - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoIotCardDetailResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 通过ICCID查询单卡详情 - tags: - - IoT卡管理 - /api/admin/iot-cards/import: - post: - description: |- - 仅平台用户可操作。 - - ## ⚠️ 接口变更说明(BREAKING CHANGE) - - 本接口已从 `multipart/form-data` 改为 `application/json`。 - 文件格式从 CSV 升级为 Excel (.xlsx),解决长数字被转为科学记数法的问题。 - - ### 完整导入流程 - - 1. **获取上传 URL**: 调用 `POST /api/admin/storage/upload-url` - 2. **上传 Excel 文件**: 使用预签名 URL 上传文件到对象存储 - 3. **调用本接口**: 使用返回的 `file_key` 提交导入任务 - - ### 请求示例 - - ```json - { - "carrier_id": 1, - "batch_no": "BATCH-2025-01", - "file_key": "imports/2025/01/24/abc123.xlsx" - } - ``` - - ### Excel 文件格式 - - - 文件格式:仅支持 .xlsx (Excel 2007+) - - 必须包含两列:`ICCID`, `MSISDN` - - 首行为表头(可选,但建议包含) - - 列格式:设置为文本格式(避免长数字被转为科学记数法) - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoImportIotCardRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoImportIotCardResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 批量导入IoT卡(ICCID+MSISDN) - tags: - - IoT卡管理 - /api/admin/iot-cards/import-tasks: - get: - description: 仅平台用户可操作。 - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 任务状态 (1:待处理, 2:处理中, 3:已完成, 4:失败) - in: query - name: status - schema: - description: 任务状态 (1:待处理, 2:处理中, 3:已完成, 4:失败) - maximum: 4 - minimum: 1 - nullable: true - type: integer - - description: 运营商ID - in: query - name: carrier_id - schema: - description: 运营商ID - minimum: 0 - nullable: true - type: integer - - description: 批次号(模糊查询) - in: query - name: batch_no - schema: - description: 批次号(模糊查询) - maxLength: 100 - type: string - - description: 创建时间起始 - in: query - name: start_time - schema: - description: 创建时间起始 - format: date-time - nullable: true - type: string - - description: 创建时间结束 - in: query - name: end_time - schema: - description: 创建时间结束 - format: date-time - nullable: true - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoListImportTaskResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 导入任务列表 - tags: - - IoT卡管理 - /api/admin/iot-cards/import-tasks/{id}: - get: - description: 仅平台用户可操作。 - parameters: - - description: 任务ID - in: path - name: id - required: true - schema: - description: 任务ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoImportTaskDetailResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 导入任务详情 - tags: - - IoT卡管理 - /api/admin/iot-cards/series-binding: - patch: - description: 批量设置或清除卡与套餐系列分配的关联关系。参数:series_id(套餐系列ID,0表示清除关联)。 - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoBatchSetCardSeriesBindngRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoBatchSetCardSeriesBindngResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 批量设置卡的套餐系列绑定 - tags: - - IoT卡管理 - /api/admin/iot-cards/standalone: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 状态 (1:在库, 2:已分销, 3:已激活, 4:已停用) - in: query - name: status - schema: - description: 状态 (1:在库, 2:已分销, 3:已激活, 4:已停用) - maximum: 4 - minimum: 1 - nullable: true - type: integer - - description: 运营商ID - in: query - name: carrier_id - schema: - description: 运营商ID - minimum: 0 - nullable: true - type: integer - - description: 分销商ID - in: query - name: shop_id - schema: - description: 分销商ID - minimum: 0 - nullable: true - type: integer - - description: 套餐系列ID - in: query - name: series_id - schema: - description: 套餐系列ID - minimum: 0 - nullable: true - type: integer - - description: ICCID(模糊查询) - in: query - name: iccid - schema: - description: ICCID(模糊查询) - maxLength: 20 - type: string - - description: 卡接入号(模糊查询) - in: query - name: msisdn - schema: - description: 卡接入号(模糊查询) - maxLength: 20 - type: string - - description: 批次号 - in: query - name: batch_no - schema: - description: 批次号 - maxLength: 100 - type: string - - description: 套餐ID - in: query - name: package_id - schema: - description: 套餐ID - minimum: 0 - nullable: true - type: integer - - description: 是否已分销 (true:已分销, false:未分销) - in: query - name: is_distributed - schema: - description: 是否已分销 (true:已分销, false:未分销) - nullable: true - type: boolean - - description: 是否有换卡记录 (true:有换卡记录, false:无换卡记录) - in: query - name: is_replaced - schema: - description: 是否有换卡记录 (true:有换卡记录, false:无换卡记录) - nullable: true - type: boolean - - description: ICCID起始号 - in: query - name: iccid_start - schema: - description: ICCID起始号 - maxLength: 20 - type: string - - description: ICCID结束号 - in: query - name: iccid_end - schema: - description: ICCID结束号 - maxLength: 20 - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoListStandaloneIotCardResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 单卡列表(未绑定设备) - tags: - - IoT卡管理 - /api/admin/iot-cards/standalone/allocate: - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoAllocateStandaloneCardsRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoAllocateStandaloneCardsResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 批量分配单卡 - tags: - - IoT卡管理 - /api/admin/iot-cards/standalone/recall: - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoRecallStandaloneCardsRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoRecallStandaloneCardsResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 批量回收单卡 - tags: - - IoT卡管理 - /api/admin/my/commission-daily-stats: - get: - parameters: - - description: 店铺ID - in: query - name: shop_id - schema: - description: 店铺ID - minimum: 0 - nullable: true - type: integer - - description: 开始日期(YYYY-MM-DD) - in: query - name: start_date - schema: - description: 开始日期(YYYY-MM-DD) - nullable: true - type: string - - description: 结束日期(YYYY-MM-DD) - in: query - name: end_date - schema: - description: 结束日期(YYYY-MM-DD) - nullable: true - type: string - - description: 查询天数(默认30天) - in: query - name: days - schema: - description: 查询天数(默认30天) - maximum: 365 - minimum: 1 - nullable: true - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - items: - $ref: '#/components/schemas/DtoDailyCommissionStatsResponse' - type: array - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 我的每日佣金统计 - tags: - - 我的佣金 - /api/admin/my/commission-records: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 佣金来源 (cost_diff:成本价差, one_time:一次性佣金, tier_bonus(已废弃):梯度奖励) - in: query - name: commission_source - schema: - description: 佣金来源 (cost_diff:成本价差, one_time:一次性佣金, tier_bonus(已废弃):梯度奖励) - nullable: true - type: string - - description: ICCID(模糊查询) - in: query - name: iccid - schema: - description: ICCID(模糊查询) - type: string - - description: 设备号(模糊查询) - in: query - name: device_no - schema: - description: 设备号(模糊查询) - type: string - - description: 订单号(模糊查询) - in: query - name: order_no - schema: - description: 订单号(模糊查询) - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoMyCommissionRecordPageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 我的佣金明细 - tags: - - 我的佣金 - /api/admin/my/commission-stats: - get: - parameters: - - description: 店铺ID - in: query - name: shop_id - schema: - description: 店铺ID - minimum: 0 - nullable: true - type: integer - - description: 开始时间 - in: query - name: start_time - schema: - description: 开始时间 - nullable: true - type: string - - description: 结束时间 - in: query - name: end_time - schema: - description: 结束时间 - nullable: true - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoCommissionStatsResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 我的佣金统计 - tags: - - 我的佣金 - /api/admin/my/commission-summary: - get: - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoMyCommissionSummaryResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 我的佣金概览 - tags: - - 我的佣金 - /api/admin/my/withdrawal-requests: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 状态(1=待审批, 2=已通过, 3=已拒绝) - in: query - name: status - schema: - description: 状态(1=待审批, 2=已通过, 3=已拒绝) - nullable: true - type: integer - - description: 申请开始时间 - in: query - name: start_time - schema: - description: 申请开始时间 - type: string - - description: 申请结束时间 - in: query - name: end_time - schema: - description: 申请结束时间 - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoWithdrawalRequestPageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 我的提现记录 - tags: - - 我的佣金 - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoCreateMyWithdrawalReq' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoCreateMyWithdrawalResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 发起提现申请 - tags: - - 我的佣金 - /api/admin/orders: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 支付状态 (1:待支付, 2:已支付, 3:已取消, 4:已退款) - in: query - name: payment_status - schema: - description: 支付状态 (1:待支付, 2:已支付, 3:已取消, 4:已退款) - maximum: 4 - minimum: 1 - nullable: true - type: integer - - description: 订单类型 (single_card:单卡购买, device:设备购买) - in: query - name: order_type - schema: - description: 订单类型 (single_card:单卡购买, device:设备购买) - type: string - - description: 订单号(精确查询) - in: query - name: order_no - schema: - description: 订单号(精确查询) - maxLength: 30 - type: string - - description: 创建时间起始 - in: query - name: start_time - schema: - description: 创建时间起始 - format: date-time - nullable: true - type: string - - description: 创建时间结束 - in: query - name: end_time - schema: - description: 创建时间结束 - format: date-time - nullable: true - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoOrderListResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取订单列表 - tags: - - 订单管理 - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoCreateOrderRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoOrderResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 创建订单 - tags: - - 订单管理 - /api/admin/orders/{id}: - get: - parameters: - - description: 订单ID - in: path - name: id - required: true - schema: - description: 订单ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoOrderResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取订单详情 - tags: - - 订单管理 - /api/admin/orders/{id}/cancel: - post: - parameters: - - description: 订单ID - in: path - name: id - required: true - schema: - description: 订单ID - minimum: 0 - type: integer - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 取消订单 - tags: - - 订单管理 - /api/admin/orders/purchase-check: - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoPurchaseCheckRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoPurchaseCheckResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 套餐购买预检 - tags: - - 订单管理 - /api/admin/package-series: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 系列名称(模糊搜索) - in: query - name: series_name - schema: - description: 系列名称(模糊搜索) - maxLength: 255 - nullable: true - type: string - - description: 状态 (1:启用, 2:禁用) - in: query - name: status - schema: - description: 状态 (1:启用, 2:禁用) - nullable: true - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoPackageSeriesPageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 套餐系列列表 - tags: - - 套餐系列管理 - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoCreatePackageSeriesRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoPackageSeriesResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 创建套餐系列 - tags: - - 套餐系列管理 - /api/admin/package-series/{id}: - delete: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 删除套餐系列 - tags: - - 套餐系列管理 - get: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoPackageSeriesResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取套餐系列详情 - tags: - - 套餐系列管理 - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdatePackageSeriesParams' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoPackageSeriesResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新套餐系列 - tags: - - 套餐系列管理 - /api/admin/package-series/{id}/status: - patch: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdatePackageSeriesStatusParams' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新套餐系列状态 - tags: - - 套餐系列管理 - /api/admin/packages: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 套餐名称(模糊搜索) - in: query - name: package_name - schema: - description: 套餐名称(模糊搜索) - maxLength: 255 - nullable: true - type: string - - description: 套餐系列ID - in: query - name: series_id - schema: - description: 套餐系列ID - minimum: 0 - nullable: true - type: integer - - description: 状态 (1:启用, 2:禁用) - in: query - name: status - schema: - description: 状态 (1:启用, 2:禁用) - nullable: true - type: integer - - description: 上架状态 (1:上架, 2:下架) - in: query - name: shelf_status - schema: - description: 上架状态 (1:上架, 2:下架) - nullable: true - type: integer - - description: 套餐类型 (formal:正式套餐, addon:附加套餐) - in: query - name: package_type - schema: - description: 套餐类型 (formal:正式套餐, addon:附加套餐) - nullable: true - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoPackagePageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 套餐列表 - tags: - - 套餐管理 - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoCreatePackageRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoPackageResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 创建套餐 - tags: - - 套餐管理 - /api/admin/packages/{id}: - delete: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 删除套餐 - tags: - - 套餐管理 - get: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoPackageResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取套餐详情 - tags: - - 套餐管理 - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdatePackageParams' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoPackageResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新套餐 - tags: - - 套餐管理 - /api/admin/packages/{id}/shelf: - patch: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdatePackageShelfStatusParams' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新套餐上架状态 - tags: - - 套餐管理 - /api/admin/packages/{id}/status: - patch: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdatePackageStatusParams' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新套餐状态 - tags: - - 套餐管理 - /api/admin/permissions: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 权限名称模糊查询 - in: query - name: perm_name - schema: - description: 权限名称模糊查询 - maxLength: 50 - type: string - - description: 权限编码模糊查询 - in: query - name: perm_code - schema: - description: 权限编码模糊查询 - maxLength: 100 - type: string - - description: 权限类型 (1:菜单, 2:按钮) - in: query - name: perm_type - schema: - description: 权限类型 (1:菜单, 2:按钮) - maximum: 2 - minimum: 1 - nullable: true - type: integer - - description: 适用端口 (all:全部, web:Web后台, h5:H5端) - in: query - name: platform - schema: - description: 适用端口 (all:全部, web:Web后台, h5:H5端) - type: string - - description: 可用角色类型 (1:平台角色, 2:客户角色) - in: query - name: available_for_role_type - schema: - description: 可用角色类型 (1:平台角色, 2:客户角色) - maximum: 2 - minimum: 1 - nullable: true - type: integer - - description: 父权限ID - in: query - name: parent_id - schema: - description: 父权限ID - minimum: 0 - nullable: true - type: integer - - description: 状态 (0:禁用, 1:启用) - in: query - name: status - schema: - description: 状态 (0:禁用, 1:启用) - maximum: 1 - minimum: 0 - nullable: true - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoPermissionPageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 权限列表 - tags: - - 权限 - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoCreatePermissionRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoPermissionResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 创建权限 - tags: - - 权限 - /api/admin/permissions/{id}: - delete: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 删除权限 - tags: - - 权限 - get: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoPermissionResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取权限详情 - tags: - - 权限 - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdatePermissionParams' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoPermissionResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新权限 - tags: - - 权限 - /api/admin/permissions/tree: - get: - parameters: - - description: 可用角色类型 (1:平台角色, 2:客户角色) - in: query - name: available_for_role_type - schema: - description: 可用角色类型 (1:平台角色, 2:客户角色) - maximum: 2 - minimum: 1 - nullable: true - type: integer - - description: 状态 (0:禁用, 1:启用) - in: query - name: status - schema: - description: 状态 (0:禁用, 1:启用) - maximum: 1 - minimum: 0 - nullable: true - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - items: - $ref: '#/components/schemas/DtoPermissionTreeNode' - type: array - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取权限树 - tags: - - 权限 - /api/admin/roles: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 角色名称模糊查询 - in: query - name: role_name - schema: - description: 角色名称模糊查询 - maxLength: 50 - type: string - - description: 角色类型 (1:平台角色, 2:客户角色) - in: query - name: role_type - schema: - description: 角色类型 (1:平台角色, 2:客户角色) - maximum: 2 - minimum: 1 - nullable: true - type: integer - - description: 状态 (0:禁用, 1:启用) - in: query - name: status - schema: - description: 状态 (0:禁用, 1:启用) - maximum: 1 - minimum: 0 - nullable: true - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoRolePageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 角色列表 - tags: - - 角色 - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoCreateRoleRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoRoleResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 创建角色 - tags: - - 角色 - /api/admin/roles/{id}: - delete: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 删除角色 - tags: - - 角色 - get: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoRoleResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取角色详情 - tags: - - 角色 - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdateRoleParams' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoRoleResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新角色 - tags: - - 角色 - /api/admin/roles/{id}/permissions: - get: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - items: - $ref: '#/components/schemas/ModelPermission' - type: array - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取角色权限 - tags: - - 角色 - post: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoAssignPermissionsParams' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 分配权限 - tags: - - 角色 - /api/admin/roles/{id}/status: - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdateRoleStatusParams' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新角色状态 - tags: - - 角色 - /api/admin/roles/{role_id}/permissions/{perm_id}: - delete: - parameters: - - description: 角色ID - in: path - name: role_id - required: true - schema: - description: 角色ID - minimum: 0 - type: integer - - description: 权限ID - in: path - name: perm_id - required: true - schema: - description: 权限ID - minimum: 0 - type: integer - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 移除权限 - tags: - - 角色 - /api/admin/shop-package-allocations: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 被分配的店铺ID - in: query - name: shop_id - schema: - description: 被分配的店铺ID - minimum: 0 - nullable: true - type: integer - - description: 套餐ID - in: query - name: package_id - schema: - description: 套餐ID - minimum: 0 - nullable: true - type: integer - - description: 状态 (1:启用, 2:禁用) - in: query - name: status - schema: - description: 状态 (1:启用, 2:禁用) - nullable: true - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoShopPackageAllocationPageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 单套餐分配列表 - tags: - - 单套餐分配 - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoCreateShopPackageAllocationRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoShopPackageAllocationResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 创建单套餐分配 - tags: - - 单套餐分配 - /api/admin/shop-package-allocations/{id}: - delete: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 删除单套餐分配 - tags: - - 单套餐分配 - get: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoShopPackageAllocationResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取单套餐分配详情 - tags: - - 单套餐分配 - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdateShopPackageAllocationParams' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoShopPackageAllocationResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新单套餐分配 - tags: - - 单套餐分配 - /api/admin/shop-package-allocations/{id}/cost-price: - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoShopPackageAllocationResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新单套餐分配成本价 - tags: - - 单套餐分配 - /api/admin/shop-package-allocations/{id}/status: - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdateStatusParams' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新单套餐分配状态 - tags: - - 单套餐分配 - /api/admin/shop-package-batch-allocations: - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoBatchAllocatePackagesRequest' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 批量分配套餐 - tags: - - 批量套餐分配 - /api/admin/shop-package-batch-pricing: - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoBatchUpdateCostPriceRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoBatchUpdateCostPriceResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 批量调价 - tags: - - 批量套餐调价 - /api/admin/shop-series-allocations: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 被分配的店铺ID - in: query - name: shop_id - schema: - description: 被分配的店铺ID - minimum: 0 - nullable: true - type: integer - - description: 套餐系列ID - in: query - name: series_id - schema: - description: 套餐系列ID - minimum: 0 - nullable: true - type: integer - - description: 状态 (1:启用, 2:禁用) - in: query - name: status - schema: - description: 状态 (1:启用, 2:禁用) - nullable: true - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoShopSeriesAllocationPageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 套餐系列分配列表 - tags: - - 套餐系列分配 - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoCreateShopSeriesAllocationRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoShopSeriesAllocationResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 创建套餐系列分配 - tags: - - 套餐系列分配 - /api/admin/shop-series-allocations/{id}: - delete: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 删除套餐系列分配 - tags: - - 套餐系列分配 - get: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoShopSeriesAllocationResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取套餐系列分配详情 - tags: - - 套餐系列分配 - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdateShopSeriesAllocationParams' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoShopSeriesAllocationResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新套餐系列分配 - tags: - - 套餐系列分配 - /api/admin/shop-series-allocations/{id}/status: - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdateStatusParams' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新套餐系列分配状态 - tags: - - 套餐系列分配 - /api/admin/shops: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 店铺名称模糊查询 - in: query - name: shop_name - schema: - description: 店铺名称模糊查询 - maxLength: 100 - type: string - - description: 店铺编号模糊查询 - in: query - name: shop_code - schema: - description: 店铺编号模糊查询 - maxLength: 50 - type: string - - description: 上级店铺ID - in: query - name: parent_id - schema: - description: 上级店铺ID - minimum: 1 - nullable: true - type: integer - - description: 店铺层级 (1-7级) - in: query - name: level - schema: - description: 店铺层级 (1-7级) - maximum: 7 - minimum: 1 - nullable: true - type: integer - - description: 状态 (0:禁用, 1:启用) - in: query - name: status - schema: - description: 状态 (0:禁用, 1:启用) - nullable: true - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoShopPageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 店铺列表 - tags: - - 店铺管理 - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoCreateShopRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoShopResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 创建店铺 - tags: - - 店铺管理 - /api/admin/shops/{id}: - delete: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 删除店铺 - tags: - - 店铺管理 - put: - parameters: - - description: ID - in: path - name: id - required: true - schema: - description: ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoUpdateShopParams' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoShopResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新店铺 - tags: - - 店铺管理 - /api/admin/shops/{shop_id}/commission-records: - get: - parameters: - - description: 页码(默认1) - in: query - name: page - schema: - description: 页码(默认1) - minimum: 1 - type: integer - - description: 每页数量(默认20,最大100) - in: query - name: page_size - schema: - description: 每页数量(默认20,最大100) - maximum: 100 - minimum: 1 - type: integer - - description: 佣金来源 (cost_diff:成本价差, one_time:一次性佣金, tier_bonus(已废弃):梯度奖励) - in: query - name: commission_source - schema: - description: 佣金来源 (cost_diff:成本价差, one_time:一次性佣金, tier_bonus(已废弃):梯度奖励) - type: string - - description: ICCID(模糊查询) - in: query - name: iccid - schema: - description: ICCID(模糊查询) - maxLength: 50 - type: string - - description: 设备号(模糊查询) - in: query - name: device_no - schema: - description: 设备号(模糊查询) - maxLength: 50 - type: string - - description: 订单号(模糊查询) - in: query - name: order_no - schema: - description: 订单号(模糊查询) - maxLength: 50 - type: string - - description: 店铺ID - in: path - name: shop_id - required: true - schema: - description: 店铺ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoShopCommissionRecordPageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 代理商佣金明细 - tags: - - 代理商佣金管理 - /api/admin/shops/{shop_id}/withdrawal-requests: - get: - parameters: - - description: 页码(默认1) - in: query - name: page - schema: - description: 页码(默认1) - minimum: 1 - type: integer - - description: 每页数量(默认20,最大100) - in: query - name: page_size - schema: - description: 每页数量(默认20,最大100) - maximum: 100 - minimum: 1 - type: integer - - description: 提现单号(精确查询) - in: query - name: withdrawal_no - schema: - description: 提现单号(精确查询) - maxLength: 50 - type: string - - description: 申请开始时间(格式:2006-01-02 15:04:05) - in: query - name: start_time - schema: - description: 申请开始时间(格式:2006-01-02 15:04:05) - type: string - - description: 申请结束时间(格式:2006-01-02 15:04:05) - in: query - name: end_time - schema: - description: 申请结束时间(格式:2006-01-02 15:04:05) - type: string - - description: 店铺ID - in: path - name: shop_id - required: true - schema: - description: 店铺ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoShopWithdrawalRequestPageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 代理商提现记录 - tags: - - 代理商佣金管理 - /api/admin/shops/commission-summary: - get: - parameters: - - description: 页码(默认1) - in: query - name: page - schema: - description: 页码(默认1) - minimum: 1 - type: integer - - description: 每页数量(默认20,最大100) - in: query - name: page_size - schema: - description: 每页数量(默认20,最大100) - maximum: 100 - minimum: 1 - type: integer - - description: 店铺名称(模糊查询) - in: query - name: shop_name - schema: - description: 店铺名称(模糊查询) - maxLength: 100 - type: string - - description: 主账号用户名(模糊查询) - in: query - name: username - schema: - description: 主账号用户名(模糊查询) - maxLength: 50 - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoShopCommissionSummaryPageResult' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 代理商佣金列表 - tags: - - 代理商佣金管理 - /api/admin/storage/upload-url: - post: - description: |- - ## 文件上传流程 - - 本接口用于获取对象存储的预签名上传 URL,实现前端直传文件到对象存储。 - - ### 完整流程 - - 1. **调用本接口** 获取预签名 URL 和 file_key - 2. **使用预签名 URL 上传文件** 发起 PUT 请求直接上传到对象存储 - 3. **调用业务接口** 使用 file_key 调用相关业务接口(如 ICCID 导入) - - ### 前端上传示例 - - ```javascript - // 1. 获取预签名 URL - const { data } = await api.post('/storage/upload-url', { - file_name: 'cards.xlsx', - content_type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - purpose: 'iot_import' - }); - - // 2. 上传文件到对象存储 - await fetch(data.upload_url, { - method: 'PUT', - headers: { 'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }, - body: file - }); - - // 3. 调用业务接口 - await api.post('/iot-cards/import', { - carrier_id: 1, - batch_no: 'BATCH-2025-01', - file_key: data.file_key - }); - ``` - - ### purpose 可选值 - - | 值 | 说明 | 生成路径格式 | - |---|------|-------------| - | iot_import | ICCID/设备导入 (Excel) | imports/YYYY/MM/DD/uuid.xlsx | - | export | 数据导出 | exports/YYYY/MM/DD/uuid.xlsx | - | attachment | 附件上传 | attachments/YYYY/MM/DD/uuid.ext | - - ### 注意事项 - - - 预签名 URL 有效期 **15 分钟**,请及时使用 - - 上传时 Content-Type 需与请求时一致 - - file_key 在上传成功后永久有效,用于后续业务接口调用 - - 上传失败时可重新调用本接口获取新的 URL - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoGetUploadURLRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoGetUploadURLResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取文件上传预签名 URL - tags: - - 对象存储 - /api/auth/login: - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoLoginRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoLoginResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - summary: 统一登录(后台+H5) - tags: - - 统一认证 - /api/auth/logout: - post: - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 统一登出 - tags: - - 统一认证 - /api/auth/me: - get: - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoUserInfo' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取用户信息 - tags: - - 统一认证 - /api/auth/password: - put: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoChangePasswordRequest' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 修改密码 - tags: - - 统一认证 - /api/auth/refresh-token: - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoRefreshTokenRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoRefreshTokenResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - summary: 刷新 Token - tags: - - 统一认证 - /api/c/v1/bind-wechat: - post: - description: 绑定微信账号到当前个人客户 - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoWechatOAuthRequest' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 绑定微信 - tags: - - 个人客户 - 账户 - /api/c/v1/login: - post: - description: 使用手机号和验证码登录 - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AppLoginRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/AppLoginResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - summary: 手机号登录 - tags: - - 个人客户 - 认证 - /api/c/v1/login/send-code: - post: - description: 向指定手机号发送登录验证码 - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AppSendCodeRequest' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - summary: 发送验证码 - tags: - - 个人客户 - 认证 - /api/c/v1/profile: - get: - description: 获取当前登录客户的个人资料 - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/AppPersonalCustomerDTO' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取个人资料 - tags: - - 个人客户 - 账户 - put: - description: 更新当前登录客户的昵称和头像 - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/AppUpdateProfileRequest' - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 更新个人资料 - tags: - - 个人客户 - 账户 - /api/c/v1/wechat/auth: - post: - description: 使用微信授权码登录,自动创建或关联用户 - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoWechatOAuthRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoWechatOAuthResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - summary: 微信授权登录 - tags: - - 个人客户 - 认证 - /api/callback/alipay: - post: - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - summary: 支付宝回调 - tags: - - 支付回调 - /api/callback/wechat-pay: - post: - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - summary: 微信支付回调 - tags: - - 支付回调 - /api/h5/devices: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - type: integer - - description: 设备号(模糊搜索) - in: query - name: device_no - schema: - description: 设备号(模糊搜索) - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoEnterpriseDeviceListResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 企业设备列表(H5) - tags: - - H5-企业设备 - /api/h5/devices/{device_id}: - get: - parameters: - - description: 设备ID - in: path - name: device_id - required: true - schema: - description: 设备ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoEnterpriseDeviceDetailResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取设备详情(H5) - tags: - - H5-企业设备 - /api/h5/devices/{device_id}/cards/{card_id}/resume: - post: - parameters: - - description: 设备ID - in: path - name: device_id - required: true - schema: - description: 设备ID - minimum: 0 - type: integer - - description: 卡ID - in: path - name: card_id - required: true - schema: - description: 卡ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoDeviceCardOperationReq' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoDeviceCardOperationResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 复机卡(H5) - tags: - - H5-企业设备 - /api/h5/devices/{device_id}/cards/{card_id}/suspend: - post: - parameters: - - description: 设备ID - in: path - name: device_id - required: true - schema: - description: 设备ID - minimum: 0 - type: integer - - description: 卡ID - in: path - name: card_id - required: true - schema: - description: 卡ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoDeviceCardOperationReq' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoDeviceCardOperationResp' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 停机卡(H5) - tags: - - H5-企业设备 - /api/h5/orders: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - minimum: 1 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - maximum: 100 - minimum: 1 - type: integer - - description: 支付状态 (1:待支付, 2:已支付, 3:已取消, 4:已退款) - in: query - name: payment_status - schema: - description: 支付状态 (1:待支付, 2:已支付, 3:已取消, 4:已退款) - maximum: 4 - minimum: 1 - nullable: true - type: integer - - description: 订单类型 (single_card:单卡购买, device:设备购买) - in: query - name: order_type - schema: - description: 订单类型 (single_card:单卡购买, device:设备购买) - type: string - - description: 订单号(精确查询) - in: query - name: order_no - schema: - description: 订单号(精确查询) - maxLength: 30 - type: string - - description: 创建时间起始 - in: query - name: start_time - schema: - description: 创建时间起始 - format: date-time - nullable: true - type: string - - description: 创建时间结束 - in: query - name: end_time - schema: - description: 创建时间结束 - format: date-time - nullable: true - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoOrderListResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取订单列表 - tags: - - H5 订单 - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoCreateOrderRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoOrderResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 创建订单 - tags: - - H5 订单 - /api/h5/orders/{id}: - get: - parameters: - - description: 订单ID - in: path - name: id - required: true - schema: - description: 订单ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoOrderResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取订单详情 - tags: - - H5 订单 - /api/h5/orders/{id}/wallet-pay: - post: - parameters: - - description: 订单ID - in: path - name: id - required: true - schema: - description: 订单ID - minimum: 0 - type: integer - responses: - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 钱包支付 - tags: - - H5 订单 - /api/h5/orders/{id}/wechat-pay/h5: - post: - parameters: - - description: 订单ID - in: path - name: id - required: true - schema: - description: 订单ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoWechatPayH5Params' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoWechatPayH5Response' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 微信 H5 支付 - tags: - - H5 订单 - /api/h5/orders/{id}/wechat-pay/jsapi: - post: - parameters: - - description: 订单ID - in: path - name: id - required: true - schema: - description: 订单ID - minimum: 0 - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoWechatPayJSAPIParams' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoWechatPayJSAPIResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 微信 JSAPI 支付 - tags: - - H5 订单 - /api/h5/wallets/recharge: - post: - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/DtoCreateRechargeRequest' - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoRechargeResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 创建充值订单 - tags: - - H5 充值 - /api/h5/wallets/recharge-check: - get: - parameters: - - description: 资源类型 - in: query - name: resource_type - schema: - description: 资源类型 - type: string - - description: 资源ID - in: query - name: resource_id - schema: - description: 资源ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoRechargeCheckResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 充值预检 - tags: - - H5 充值 - /api/h5/wallets/recharges: - get: - parameters: - - description: 页码 - in: query - name: page - schema: - description: 页码 - type: integer - - description: 每页数量 - in: query - name: page_size - schema: - description: 每页数量 - type: integer - - description: 钱包ID - in: query - name: wallet_id - schema: - description: 钱包ID - minimum: 0 - nullable: true - type: integer - - description: 状态 - in: query - name: status - schema: - description: 状态 - nullable: true - type: integer - - description: 开始时间 - in: query - name: start_time - schema: - description: 开始时间 - format: date-time - nullable: true - type: string - - description: 结束时间 - in: query - name: end_time - schema: - description: 结束时间 - format: date-time - nullable: true - type: string - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoRechargeListResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取充值订单列表 - tags: - - H5 充值 - /api/h5/wallets/recharges/{id}: - get: - parameters: - - description: 充值订单ID - in: path - name: id - required: true - schema: - description: 充值订单ID - minimum: 0 - type: integer - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/DtoRechargeResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "401": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 未认证或认证已过期 - "403": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 无权访问 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - security: - - BearerAuth: [] - summary: 获取充值订单详情 - tags: - - H5 充值 - /health: - get: - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/RoutesHealthResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - summary: 健康检查 - tags: - - 系统 - /ready: - get: - responses: - "200": - content: - application/json: - schema: - properties: - code: - description: 响应码 - example: 0 - type: integer - data: - $ref: '#/components/schemas/RoutesHealthResponse' - msg: - description: 响应消息 - example: success - type: string - timestamp: - description: 时间戳 - format: date-time - type: string - required: - - code - - msg - - data - - timestamp - type: object - description: 成功 - "400": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 请求参数错误 - "500": - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - description: 服务器内部错误 - summary: 就绪检查 - tags: - - 系统 diff --git a/flow_tests/pytest.ini b/flow_tests/pytest.ini deleted file mode 100644 index 7e7abec..0000000 --- a/flow_tests/pytest.ini +++ /dev/null @@ -1,30 +0,0 @@ -[pytest] -# 测试目录 -testpaths = tests - -# Python 文件匹配 -python_files = test_*.py -python_classes = Test* -python_functions = test_* - -# 默认参数 -addopts = - -v - --tb=short - --strict-markers - -# 标记定义 -markers = - slow: 标记为慢速测试 - mock: 需要 Mock 服务的测试 - integration: 集成测试(需要完整环境) - smoke: 冒烟测试 - -# 日志配置 -log_cli = true -log_cli_level = INFO -log_cli_format = %(asctime)s [%(levelname)s] %(message)s -log_cli_date_format = %H:%M:%S - -# 超时设置(需要 pytest-timeout 插件) -# timeout = 60 diff --git a/flow_tests/requirements.txt b/flow_tests/requirements.txt deleted file mode 100644 index d48113a..0000000 --- a/flow_tests/requirements.txt +++ /dev/null @@ -1,22 +0,0 @@ -# 流程测试依赖 - -# 测试框架 -pytest>=7.4.0 -pytest-html>=4.1.0 # HTML 报告 -pytest-ordering>=0.6 # 测试排序 - -# HTTP 客户端 -requests>=2.31.0 -urllib3>=2.0.0 - -# 数据库 -psycopg2-binary>=2.9.9 # PostgreSQL -redis>=5.0.0 # Redis - -# 配置管理 -pyyaml>=6.0.1 - -# 工具 -python-dotenv>=1.0.0 # 环境变量 -tabulate>=0.9.0 # 表格输出 -colorama>=0.4.6 # 彩色输出 diff --git a/flow_tests/tests/__init__.py b/flow_tests/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/flow_tests/tests/test_example_flow.py b/flow_tests/tests/test_example_flow.py deleted file mode 100644 index f26470c..0000000 --- a/flow_tests/tests/test_example_flow.py +++ /dev/null @@ -1,61 +0,0 @@ -""" -示例流程测试 - -本文件展示如何编写流程测试,供参考。 -删除本文件后不影响测试框架运行。 -""" -import pytest - - -class TestExampleFlow: - """示例:账号登录流程""" - - def test_admin_login_flow(self, client, auth): - """ - 流程:超级管理员登录 - - 步骤: - 1. 使用超级管理员账号登录 - 2. 验证能获取用户信息 - """ - # === 1. 登录 === - auth.as_super_admin() - - # === 2. 获取用户信息 === - resp = client.get("/api/admin/auth/me") - - # 如果接口存在,验证返回 - if resp.status_code == 200: - assert resp.ok(), f"获取用户信息失败: {resp.msg}" - assert resp.data is not None - else: - pytest.skip("接口不存在,跳过测试") - - @pytest.mark.skip(reason="示例测试,实际使用时删除此标记") - def test_create_shop_flow(self, client, auth, tracker): - """ - 流程:创建店铺 - - 步骤: - 1. 平台管理员登录 - 2. 创建店铺 - 3. 验证店铺创建成功 - """ - # === 1. 登录 === - auth.as_platform_admin() - - # === 2. 创建店铺 === - resp = client.post("/api/admin/shops", json={ - "shop_name": "测试店铺_流程测试", - "contact_name": "测试联系人", - "contact_phone": "13800138000", - }) - assert resp.ok(), f"创建店铺失败: {resp.msg}" - - shop_id = resp.data["id"] - tracker.track("tb_shop", shop_id) - - # === 3. 验证店铺存在 === - resp = client.get(f"/api/admin/shops/{shop_id}") - assert resp.ok() - assert resp.data["shop_name"] == "测试店铺_流程测试"