{ "openapi": "3.1.0", "info": { "title": "NeoZQYY API", "description": "台球门店运营助手 — 后端 API(管理后台 + 微信小程序)", "version": "0.1.0" }, "paths": { "/api/auth/login": { "post": { "tags": [ "认证" ], "summary": "Login", "description": "用户登录。\n\n查询 admin_users 表验证用户名密码,成功后返回 JWT 令牌对。\n- 用户不存在或密码错误:401\n- 账号已禁用(is_active=false):401", "operationId": "login_api_auth_login_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LoginRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/auth/refresh": { "post": { "tags": [ "认证" ], "summary": "Refresh", "description": "刷新访问令牌。\n\n验证 refresh_token 有效性,成功后仅返回新的 access_token\n(refresh_token 保持不变,由客户端继续持有)。", "operationId": "refresh_api_auth_refresh_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RefreshRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TokenResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/tasks/registry": { "get": { "tags": [ "任务配置" ], "summary": "Get Task Registry", "description": "返回按业务域分组的任务列表", "operationId": "get_task_registry_api_tasks_registry_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TaskRegistryResponse" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/tasks/dwd-tables": { "get": { "tags": [ "任务配置" ], "summary": "Get Dwd Tables", "description": "返回按业务域分组的 DWD 表定义", "operationId": "get_dwd_tables_api_tasks_dwd_tables_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DwdTablesResponse" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/tasks/flows": { "get": { "tags": [ "任务配置" ], "summary": "Get Flows", "description": "返回 7 种 Flow 定义和 4 种处理模式定义", "operationId": "get_flows_api_tasks_flows_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FlowsResponse" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/tasks/validate": { "post": { "tags": [ "任务配置" ], "summary": "Validate Task Config", "description": "验证 TaskConfig 并返回生成的 CLI 命令预览\n\n从 JWT 注入 store_id,前端无需传递。", "operationId": "validate_task_config_api_tasks_validate_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidateRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidateResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/tasks/sync-check": { "get": { "tags": [ "任务配置" ], "summary": "Sync Check", "description": "对比后端硬编码任务列表与 ETL 真实注册表,返回差异。\n\n通过子进程调用 ETL CLI 获取真实任务列表,避免直接导入 ETL 代码。", "operationId": "sync_check_api_tasks_sync_check_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SyncCheckResponse" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/execution/run": { "post": { "tags": [ "任务执行" ], "summary": "Run Task", "description": "直接执行任务(不经过队列)。\n\n从 JWT 注入 store_id,创建 execution_id 后异步启动子进程。", "operationId": "run_task_api_execution_run_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TaskConfigSchema" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExecutionRunResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/execution/queue": { "get": { "tags": [ "任务执行" ], "summary": "Get Queue", "description": "获取当前门店的待执行队列。", "operationId": "get_queue_api_execution_queue_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/QueueTaskResponse" }, "type": "array", "title": "Response Get Queue Api Execution Queue Get" } } } } }, "security": [ { "HTTPBearer": [] } ] }, "post": { "tags": [ "任务执行" ], "summary": "Enqueue Task", "description": "将任务配置添加到执行队列。", "operationId": "enqueue_task_api_execution_queue_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TaskConfigSchema" } } }, "required": true }, "responses": { "201": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/QueueTaskResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/execution/queue/reorder": { "put": { "tags": [ "任务执行" ], "summary": "Reorder Queue", "description": "调整队列中任务的执行顺序。", "operationId": "reorder_queue_api_execution_queue_reorder_put", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ReorderRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "additionalProperties": true, "type": "object", "title": "Response Reorder Queue Api Execution Queue Reorder Put" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/execution/queue/{task_id}": { "delete": { "tags": [ "任务执行" ], "summary": "Delete Queue Task", "description": "从队列中删除待执行任务。仅允许删除 pending 状态的任务。", "operationId": "delete_queue_task_api_execution_queue__task_id__delete", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "task_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Task Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "object", "additionalProperties": true, "title": "Response Delete Queue Task Api Execution Queue Task Id Delete" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/execution/{execution_id}/cancel": { "post": { "tags": [ "任务执行" ], "summary": "Cancel Execution", "description": "取消正在执行的任务。", "operationId": "cancel_execution_api_execution__execution_id__cancel_post", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "execution_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Execution Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "object", "additionalProperties": true, "title": "Response Cancel Execution Api Execution Execution Id Cancel Post" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/execution/history": { "get": { "tags": [ "任务执行" ], "summary": "Get Execution History", "description": "获取执行历史记录,按 started_at 降序排列。", "operationId": "get_execution_history_api_execution_history_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 200, "minimum": 1, "default": 50, "title": "Limit" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ExecutionHistoryItem" }, "title": "Response Get Execution History Api Execution History Get" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/execution/{execution_id}/logs": { "get": { "tags": [ "任务执行" ], "summary": "Get Execution Logs", "description": "获取指定执行的完整日志。\n\n优先从内存缓冲区读取(执行中),否则从数据库读取(已完成)。", "operationId": "get_execution_logs_api_execution__execution_id__logs_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "execution_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Execution Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExecutionLogsResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/schedules": { "get": { "tags": [ "调度管理" ], "summary": "List Schedules", "description": "获取当前门店的所有调度任务。", "operationId": "list_schedules_api_schedules_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/ScheduleResponse" }, "type": "array", "title": "Response List Schedules Api Schedules Get" } } } } }, "security": [ { "HTTPBearer": [] } ] }, "post": { "tags": [ "调度管理" ], "summary": "Create Schedule", "description": "创建调度任务,自动计算 next_run_at。", "operationId": "create_schedule_api_schedules_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateScheduleRequest" } } }, "required": true }, "responses": { "201": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ScheduleResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/schedules/{schedule_id}": { "put": { "tags": [ "调度管理" ], "summary": "Update Schedule", "description": "更新调度任务,仅更新请求中提供的字段。", "operationId": "update_schedule_api_schedules__schedule_id__put", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "schedule_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Schedule Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateScheduleRequest" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ScheduleResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "delete": { "tags": [ "调度管理" ], "summary": "Delete Schedule", "description": "删除调度任务。", "operationId": "delete_schedule_api_schedules__schedule_id__delete", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "schedule_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Schedule Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "object", "additionalProperties": true, "title": "Response Delete Schedule Api Schedules Schedule Id Delete" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/schedules/{schedule_id}/toggle": { "patch": { "tags": [ "调度管理" ], "summary": "Toggle Schedule", "description": "切换调度任务的启用/禁用状态。\n\n禁用时 next_run_at 置 NULL;启用时重新计算 next_run_at。", "operationId": "toggle_schedule_api_schedules__schedule_id__toggle_patch", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "schedule_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Schedule Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ScheduleResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/env-config": { "get": { "tags": [ "环境配置" ], "summary": "Get Env Config", "description": "读取 .env 文件,敏感值以掩码展示。", "operationId": "get_env_config_api_env_config_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EnvConfigResponse" } } } } }, "security": [ { "HTTPBearer": [] } ] }, "put": { "tags": [ "环境配置" ], "summary": "Update Env Config", "description": "验证并写入 .env 文件。\n\n保留原文件中的注释行和空行。对于已有键,更新值;\n对于新键,追加到文件末尾。掩码值(****)的键跳过更新,保留原值。", "operationId": "update_env_config_api_env_config_put", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EnvConfigUpdateRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EnvConfigResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/env-config/export": { "get": { "tags": [ "环境配置" ], "summary": "Export Env Config", "description": "导出去除敏感值的配置文件(作为文件下载)。", "operationId": "export_env_config_api_env_config_export_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/db/schemas": { "get": { "tags": [ "数据库查看器" ], "summary": "List Schemas", "description": "返回 ETL 数据库中的 Schema 列表。", "operationId": "list_schemas_api_db_schemas_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/SchemaInfo" }, "type": "array", "title": "Response List Schemas Api Db Schemas Get" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/db/schemas/{name}/tables": { "get": { "tags": [ "数据库查看器" ], "summary": "List Tables", "description": "返回指定 Schema 下所有表的名称和行数统计。", "operationId": "list_tables_api_db_schemas__name__tables_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "name", "in": "path", "required": true, "schema": { "type": "string", "title": "Name" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TableInfo" }, "title": "Response List Tables Api Db Schemas Name Tables Get" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/db/tables/{schema}/{table}/columns": { "get": { "tags": [ "数据库查看器" ], "summary": "List Columns", "description": "返回指定表的列定义。", "operationId": "list_columns_api_db_tables__schema___table__columns_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "schema", "in": "path", "required": true, "schema": { "type": "string", "title": "Schema" } }, { "name": "table", "in": "path", "required": true, "schema": { "type": "string", "title": "Table" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ColumnInfo" }, "title": "Response List Columns Api Db Tables Schema Table Columns Get" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/db/query": { "post": { "tags": [ "数据库查看器" ], "summary": "Execute Query", "description": "只读 SQL 执行。\n\n安全措施:\n1. 拦截写操作关键词(INSERT / UPDATE / DELETE / DROP / TRUNCATE)\n2. 限制返回行数上限 1000 行\n3. 设置查询超时 30 秒", "operationId": "execute_query_api_db_query_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/QueryRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/QueryResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/etl-status/cursors": { "get": { "tags": [ "ETL 状态" ], "summary": "List Cursors", "description": "返回各 ODS 表的最新数据游标。\n\n查询 ETL 数据库中的 meta.etl_cursor 表。\n如果该表不存在,返回空列表而非报错。", "operationId": "list_cursors_api_etl_status_cursors_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/CursorInfo" }, "type": "array", "title": "Response List Cursors Api Etl Status Cursors Get" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/etl-status/recent-runs": { "get": { "tags": [ "ETL 状态" ], "summary": "List Recent Runs", "description": "返回最近 50 条任务执行记录。\n\n查询 zqyy_app 数据库中的 task_execution_log 表,\n按 site_id 过滤,按 started_at DESC 排序。", "operationId": "list_recent_runs_api_etl_status_recent_runs_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/RecentRun" }, "type": "array", "title": "Response List Recent Runs Api Etl Status Recent Runs Get" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/xcx-test": { "get": { "tags": [ "小程序MVP" ], "summary": "Get Xcx Test", "description": "读取 test.\"xcx-test\" 表 ti 列第一行。\n\n用于小程序 MVP 全链路验证:小程序 → API → DB → 返回数据。", "operationId": "get_xcx_test_api_xcx_test_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } }, "/api/wx/callback": { "get": { "tags": [ "微信回调" ], "summary": "Verify", "description": "微信服务器验证接口。\n\n配置消息推送时微信会发 GET 请求,验签通过后原样返回 echostr。", "operationId": "verify_api_wx_callback_get", "parameters": [ { "name": "signature", "in": "query", "required": true, "schema": { "type": "string", "title": "Signature" } }, { "name": "timestamp", "in": "query", "required": true, "schema": { "type": "string", "title": "Timestamp" } }, { "name": "nonce", "in": "query", "required": true, "schema": { "type": "string", "title": "Nonce" } }, { "name": "echostr", "in": "query", "required": true, "schema": { "type": "string", "title": "Echostr" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "post": { "tags": [ "微信回调" ], "summary": "Receive Message", "description": "接收微信推送的消息/事件。\n\n当前为明文模式,直接解析 JSON 包体。\n后续切安全模式时需增加 AES 解密逻辑。", "operationId": "receive_message_api_wx_callback_post", "parameters": [ { "name": "signature", "in": "query", "required": false, "schema": { "type": "string", "default": "", "title": "Signature" } }, { "name": "timestamp", "in": "query", "required": false, "schema": { "type": "string", "default": "", "title": "Timestamp" } }, { "name": "nonce", "in": "query", "required": false, "schema": { "type": "string", "default": "", "title": "Nonce" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/retention-clue": { "post": { "tags": [ "维客线索" ], "summary": "Submit Retention Clue", "description": "提交维客线索(INSERT)。\n\n同一会员可有多条不同大类的线索。", "operationId": "submit_retention_clue_api_retention_clue_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RetentionClueSubmit" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/retention-clue/{member_id}": { "get": { "tags": [ "维客线索" ], "summary": "Get Retention Clues", "description": "查询某会员的全部维客线索,按录入时间倒序。", "operationId": "get_retention_clues_api_retention_clue__member_id__get", "parameters": [ { "name": "member_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Member Id" } }, { "name": "site_id", "in": "query", "required": true, "schema": { "type": "integer", "title": "Site Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/RetentionClueOut" }, "title": "Response Get Retention Clues Api Retention Clue Member Id Get" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/retention-clue/{clue_id}": { "delete": { "tags": [ "维客线索" ], "summary": "Delete Retention Clue", "description": "删除单条维客线索。", "operationId": "delete_retention_clue_api_retention_clue__clue_id__delete", "parameters": [ { "name": "clue_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Clue Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/ops/system": { "get": { "tags": [ "运维面板" ], "summary": "Get System Info", "description": "获取服务器系统资源概况。", "operationId": "get_system_info_api_ops_system_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SystemInfo" } } } } } } }, "/api/ops/services": { "get": { "tags": [ "运维面板" ], "summary": "Get Services Status", "description": "获取所有环境的服务运行状态。", "operationId": "get_services_status_api_ops_services_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/ServiceStatus" }, "type": "array", "title": "Response Get Services Status Api Ops Services Get" } } } } } } }, "/api/ops/services/{env}/start": { "post": { "tags": [ "运维面板" ], "summary": "Start Service", "description": "启动指定环境的后端服务。", "operationId": "start_service_api_ops_services__env__start_post", "parameters": [ { "name": "env", "in": "path", "required": true, "schema": { "type": "string", "title": "Env" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServiceActionResult" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/ops/services/{env}/stop": { "post": { "tags": [ "运维面板" ], "summary": "Stop Service", "description": "停止指定环境的后端服务。", "operationId": "stop_service_api_ops_services__env__stop_post", "parameters": [ { "name": "env", "in": "path", "required": true, "schema": { "type": "string", "title": "Env" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServiceActionResult" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/ops/services/{env}/restart": { "post": { "tags": [ "运维面板" ], "summary": "Restart Service", "description": "重启指定环境的后端服务。", "operationId": "restart_service_api_ops_services__env__restart_post", "parameters": [ { "name": "env", "in": "path", "required": true, "schema": { "type": "string", "title": "Env" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServiceActionResult" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/ops/git": { "get": { "tags": [ "运维面板" ], "summary": "Get Git Info", "description": "获取所有环境的 Git 状态。", "operationId": "get_git_info_api_ops_git_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/GitInfo" }, "type": "array", "title": "Response Get Git Info Api Ops Git Get" } } } } } } }, "/api/ops/git/{env}/pull": { "post": { "tags": [ "运维面板" ], "summary": "Git Pull", "description": "对指定环境执行 git pull。", "operationId": "git_pull_api_ops_git__env__pull_post", "parameters": [ { "name": "env", "in": "path", "required": true, "schema": { "type": "string", "title": "Env" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GitPullResult" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/ops/git/{env}/sync-deps": { "post": { "tags": [ "运维面板" ], "summary": "Sync Deps", "description": "对指定环境执行 uv sync --all-packages。", "operationId": "sync_deps_api_ops_git__env__sync_deps_post", "parameters": [ { "name": "env", "in": "path", "required": true, "schema": { "type": "string", "title": "Env" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServiceActionResult" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/ops/env-file/{env}": { "get": { "tags": [ "运维面板" ], "summary": "Get Env File", "description": "读取指定环境的 .env 文件(敏感值脱敏)。", "operationId": "get_env_file_api_ops_env_file__env__get", "parameters": [ { "name": "env", "in": "path", "required": true, "schema": { "type": "string", "title": "Env" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/xcx/login": { "post": { "tags": [ "小程序认证" ], "summary": "Wx Login", "description": "微信登录。\n\n流程:code → code2session(openid) → 查找/创建 auth.users → 签发 JWT。\n- disabled 用户返回 403\n- 新用户自动创建(status=new),前端引导至申请页\n- approved 用户签发包含 site_id + roles 的完整令牌\n- new/pending/rejected 用户签发受限令牌", "operationId": "wx_login_api_xcx_login_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WxLoginRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WxLoginResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/xcx/apply": { "post": { "tags": [ "小程序认证" ], "summary": "Submit Application", "description": "提交入驻申请。\n\n委托 application service 处理:\n检查重复 pending → site_code 映射 → 创建记录 → 更新 nickname。", "operationId": "submit_application_api_xcx_apply_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApplicationRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApplicationResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/xcx/me": { "get": { "tags": [ "小程序认证" ], "summary": "Get My Status", "description": "查询自身状态 + 所有申请记录。\n\npending / approved / rejected 用户均可访问。", "operationId": "get_my_status_api_xcx_me_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserStatusResponse" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/xcx/me/sites": { "get": { "tags": [ "小程序认证" ], "summary": "Get My Sites", "description": "查询当前用户关联的所有店铺及对应角色。\n\n仅 approved 用户可访问(通过 get_current_user 依赖保证)。", "operationId": "get_my_sites_api_xcx_me_sites_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/SiteInfo" }, "type": "array", "title": "Response Get My Sites Api Xcx Me Sites Get" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/xcx/switch-site": { "post": { "tags": [ "小程序认证" ], "summary": "Switch Site", "description": "切换当前店铺。\n\n验证用户在目标 site_id 下有角色绑定,然后签发包含新 site_id 的 JWT。", "operationId": "switch_site_api_xcx_switch_site_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SwitchSiteRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WxLoginResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/xcx/refresh": { "post": { "tags": [ "小程序认证" ], "summary": "Refresh Token", "description": "刷新令牌。\n\n解码 refresh_token → 根据用户当前状态签发新的令牌对。\n- 受限 refresh_token(limited=True)→ 签发新的受限令牌对\n- 完整 refresh_token → 签发新的完整令牌对(保持原 site_id)", "operationId": "refresh_token_api_xcx_refresh_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RefreshTokenRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WxLoginResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/xcx/dev-login": { "post": { "tags": [ "小程序认证" ], "summary": "Dev Login", "description": "开发模式 mock 登录。\n\n直接根据 openid 查找/创建用户,跳过微信 code2Session。\n- 已有用户:status 参数为空时保留当前状态,非空时覆盖\n- 新用户:status 参数为空时默认 new,非空时使用指定值\n仅在 WX_DEV_MODE=true 时注册。", "operationId": "dev_login_api_xcx_dev_login_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DevLoginRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WxLoginResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/admin/applications": { "get": { "tags": [ "管理端审核" ], "summary": "List Applications", "description": "查询申请列表,可按 status 过滤。", "operationId": "list_applications_api_admin_applications_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "status", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "按状态过滤:pending / approved / rejected", "title": "Status" }, "description": "按状态过滤:pending / approved / rejected" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ApplicationResponse" }, "title": "Response List Applications Api Admin Applications Get" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/admin/applications/{application_id}": { "get": { "tags": [ "管理端审核" ], "summary": "Get Application Detail", "description": "查询申请详情 + 候选匹配。", "operationId": "get_application_detail_api_admin_applications__application_id__get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "application_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Application Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/admin/applications/{application_id}/approve": { "post": { "tags": [ "管理端审核" ], "summary": "Approve", "description": "批准申请:分配角色 + 可选绑定。", "operationId": "approve_api_admin_applications__application_id__approve_post", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "application_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Application Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApproveRequest" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApplicationResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/admin/applications/{application_id}/reject": { "post": { "tags": [ "管理端审核" ], "summary": "Reject", "description": "拒绝申请:记录拒绝原因。", "operationId": "reject_api_admin_applications__application_id__reject_post", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "application_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Application Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RejectRequest" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApplicationResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/config/business-day": { "get": { "tags": [ "业务配置" ], "summary": "Get Business Day Config", "description": "返回当前营业日分割点配置。\n\n无需认证(公开配置),前端启动时调用一次缓存。", "operationId": "get_business_day_config_api_config_business_day_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } }, "/api/xcx/tasks": { "get": { "tags": [ "小程序任务" ], "summary": "Get Tasks V2", "description": "获取任务列表 + 绩效概览(TASK-1 扩展版)。\n\n返回分页任务列表,每个任务含扩展字段(lastVisitDays/balance/aiSuggestion),\n以及当月绩效概览(档位/收入/工时)。", "operationId": "get_tasks_v2_api_xcx_tasks_get", "parameters": [ { "name": "status", "in": "query", "required": false, "schema": { "type": "string", "enum": ["pending", "completed", "abandoned"], "default": "pending", "title": "Status" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "default": 1, "title": "Page" } }, { "name": "page_size", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 20, "title": "Page Size" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TaskListResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/xcx/tasks/{task_id}": { "get": { "tags": [ "小程序任务" ], "summary": "Get Task Detail", "description": "获取任务详情完整版(TASK-2)。\n\n包含维客线索、话术、服务记录、AI 分析、备注等模块。", "operationId": "get_task_detail_api_xcx_tasks__task_id__get", "parameters": [ { "name": "task_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Task Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TaskDetailResponse" } } } }, "403": { "description": "无权访问该任务" }, "404": { "description": "任务不存在" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/xcx/tasks/{task_id}/pin": { "post": { "tags": [ "小程序任务" ], "summary": "Pin Task", "description": "置顶任务。", "operationId": "pin_task_api_xcx_tasks__task_id__pin_post", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "task_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Task Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/xcx/tasks/{task_id}/unpin": { "post": { "tags": [ "小程序任务" ], "summary": "Unpin Task", "description": "取消置顶。", "operationId": "unpin_task_api_xcx_tasks__task_id__unpin_post", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "task_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Task Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/xcx/tasks/{task_id}/abandon": { "post": { "tags": [ "小程序任务" ], "summary": "Abandon Task", "description": "放弃任务(需填写原因)。", "operationId": "abandon_task_api_xcx_tasks__task_id__abandon_post", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "task_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Task Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AbandonRequest" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/xcx/tasks/{task_id}/restore": { "post": { "tags": [ "小程序任务" ], "summary": "Restore Task", "description": "取消放弃,恢复为活跃状态。", "operationId": "restore_task_api_xcx_tasks__task_id__restore_post", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "task_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Task Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/xcx/notes": { "post": { "tags": [ "小程序备注" ], "summary": "Create Note", "description": "创建备注(含星星评分,可选关联任务)。", "operationId": "create_note_api_xcx_notes_post", "security": [ { "HTTPBearer": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NoteCreateRequest" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NoteOut" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "get": { "tags": [ "小程序备注" ], "summary": "Get Notes", "description": "查询某目标的备注列表(按创建时间倒序)。", "operationId": "get_notes_api_xcx_notes_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "target_type", "in": "query", "required": false, "schema": { "type": "string", "description": "目标类型", "default": "member", "title": "Target Type" }, "description": "目标类型" }, { "name": "target_id", "in": "query", "required": true, "schema": { "type": "integer", "description": "目标 ID", "title": "Target Id" }, "description": "目标 ID" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/xcx/notes/{note_id}": { "delete": { "tags": [ "小程序备注" ], "summary": "Delete Note", "description": "删除备注(验证归属后硬删除)。", "operationId": "delete_note_api_xcx_notes__note_id__delete", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "note_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Note Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/xcx/performance": { "get": { "tags": [ "小程序绩效" ], "summary": "Get Performance Overview", "description": "绩效概览(PERF-1)。\n\n返回指定月份的收入档位、DateGroup 分组记录、新客/常客列表。", "operationId": "get_performance_overview_api_xcx_performance_get", "parameters": [ { "name": "year", "in": "query", "required": true, "schema": { "type": "integer", "title": "Year" } }, { "name": "month", "in": "query", "required": true, "schema": { "type": "integer", "minimum": 1, "maximum": 12, "title": "Month" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PerformanceOverviewResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/xcx/performance/records": { "get": { "tags": [ "小程序绩效" ], "summary": "Get Performance Records", "description": "绩效明细(PERF-2)。\n\n返回指定月份的服务记录明细,按日期分组,支持分页。", "operationId": "get_performance_records_api_xcx_performance_records_get", "parameters": [ { "name": "year", "in": "query", "required": true, "schema": { "type": "integer", "title": "Year" } }, { "name": "month", "in": "query", "required": true, "schema": { "type": "integer", "minimum": 1, "maximum": 12, "title": "Month" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "default": 1, "title": "Page" } }, { "name": "page_size", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 20, "title": "Page Size" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PerformanceRecordsResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } }, "security": [ { "HTTPBearer": [] } ] } }, "/api/xcx/customers/{customer_id}": { "get": { "tags": [ "小程序客户" ], "summary": "Get Customer Detail", "description": "客户详情(CUST-1)。\n\n返回客户完整详情:Banner 概览、AI 洞察、关联助教任务、最亲密助教、维客线索、消费记录(嵌套结构)、备注列表。\n所有金额使用 items_sum 口径(DWD-DOC 规则 1),助教费用使用 assistant_pd_money + assistant_cx_money 拆分(DWD-DOC 规则 2)。", "operationId": "get_customer_detail_api_xcx_customers__customer_id__get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "customer_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Customer Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomerDetailResponse" } } } }, "403": { "description": "用户未通过审核", "content": { "application/json": { "schema": { "type": "object", "properties": { "code": { "type": "integer", "example": 403 }, "message": { "type": "string", "example": "用户未通过审核,无法访问此资源" } } } } } }, "404": { "description": "客户不存在", "content": { "application/json": { "schema": { "type": "object", "properties": { "code": { "type": "integer", "example": 404 }, "message": { "type": "string", "example": "客户不存在" } } } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/xcx/customers/{customer_id}/records": { "get": { "tags": [ "小程序客户" ], "summary": "Get Customer Records", "description": "客户服务记录(CUST-2)。\n\n按月查询客户服务记录,支持台桌筛选和分页。返回月度统计汇总(monthCount/monthHours)和累计服务总次数。", "operationId": "get_customer_records_api_xcx_customers__customer_id__records_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "customer_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Customer Id" } }, { "name": "year", "in": "query", "required": true, "schema": { "type": "integer", "title": "Year" } }, { "name": "month", "in": "query", "required": true, "schema": { "type": "integer", "minimum": 1, "maximum": 12, "title": "Month" } }, { "name": "table", "in": "query", "required": false, "schema": { "type": "string", "title": "Table", "description": "台桌筛选(可选)" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "default": 1, "title": "Page" } }, { "name": "page_size", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 20, "title": "Page Size" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomerRecordsResponse" } } } }, "403": { "description": "用户未通过审核", "content": { "application/json": { "schema": { "type": "object", "properties": { "code": { "type": "integer", "example": 403 }, "message": { "type": "string", "example": "用户未通过审核,无法访问此资源" } } } } } }, "404": { "description": "客户不存在", "content": { "application/json": { "schema": { "type": "object", "properties": { "code": { "type": "integer", "example": 404 }, "message": { "type": "string", "example": "客户不存在" } } } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/xcx/coaches/{coach_id}": { "get": { "tags": [ "小程序助教" ], "summary": "Get Coach Detail", "description": "助教详情(COACH-1)。\n\n返回助教完整详情:基本信息、绩效指标、收入明细(本月/上月)、档位节点、任务分组(进行中/已过期/已放弃)、TOP 客户、近期服务记录、历史月份统计、备注列表。\n所有金额使用 items_sum 口径(DWD-DOC 规则 1),助教费用使用 assistant_pd_money + assistant_cx_money 拆分(DWD-DOC 规则 2)。", "operationId": "get_coach_detail_api_xcx_coaches__coach_id__get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "coach_id", "in": "path", "required": true, "schema": { "type": "integer", "title": "Coach Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CoachDetailResponse" } } } }, "403": { "description": "用户未通过审核", "content": { "application/json": { "schema": { "type": "object", "properties": { "code": { "type": "integer", "example": 403 }, "message": { "type": "string", "example": "用户未通过审核,无法访问此资源" } } } } } }, "404": { "description": "助教不存在", "content": { "application/json": { "schema": { "type": "object", "properties": { "code": { "type": "integer", "example": 404 }, "message": { "type": "string", "example": "助教不存在" } } } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/health": { "get": { "tags": [ "系统" ], "summary": "Health Check", "description": "健康检查端点,用于探活和监控。", "operationId": "health_check_health_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } }, "/api/xcx/board/coaches": { "get": { "tags": [ "看板" ], "summary": "Get Coach Board", "description": "助教排行看板(BOARD-1)。支持排序×技能×时间三重筛选,4 种维度卡片。time=last_6m + sort=sv_desc 互斥返回 400。", "operationId": "get_coach_board_api_xcx_board_coaches_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "sort", "in": "query", "required": false, "schema": { "type": "string", "enum": ["perf_desc", "perf_asc", "salary_desc", "salary_asc", "sv_desc", "task_desc"], "default": "perf_desc", "title": "Sort" } }, { "name": "skill", "in": "query", "required": false, "schema": { "type": "string", "enum": ["all", "chinese", "snooker", "both", "none"], "default": "all", "title": "Skill" } }, { "name": "time", "in": "query", "required": false, "schema": { "type": "string", "enum": ["month", "quarter", "last_month", "last_3m", "last_quarter", "last_6m"], "default": "month", "title": "Time" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CoachBoardResponse" } } } }, "400": { "description": "参数互斥错误(time=last_6m + sort=sv_desc)" }, "401": { "description": "未认证" }, "403": { "description": "无权限" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/xcx/board/customers": { "get": { "tags": [ "看板" ], "summary": "Get Customer Board", "description": "客户排行看板(BOARD-2)。8 个维度查看客户排行,支持分页。", "operationId": "get_customer_board_api_xcx_board_customers_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "dimension", "in": "query", "required": false, "schema": { "type": "string", "enum": ["recall", "potential", "balance", "recharge", "recent", "spend60", "freq60", "loyal"], "default": "recall", "title": "Dimension" } }, { "name": "project", "in": "query", "required": false, "schema": { "type": "string", "enum": ["all", "chinese", "snooker", "both", "none"], "default": "all", "title": "Project" } }, { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "default": 1, "title": "Page" } }, { "name": "page_size", "in": "query", "required": false, "schema": { "type": "integer", "default": 20, "title": "Page Size" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomerBoardResponse" } } } }, "401": { "description": "未认证" }, "403": { "description": "无权限" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/xcx/board/finance": { "get": { "tags": [ "看板" ], "summary": "Get Finance Board", "description": "财务看板(BOARD-3)。6 个独立板块:经营一览/预收资产/应计收入/现金流入/现金流出/助教分析。area≠all 时 recharge 为 null。compare=1 时包含环比数据。", "operationId": "get_finance_board_api_xcx_board_finance_get", "security": [ { "HTTPBearer": [] } ], "parameters": [ { "name": "time", "in": "query", "required": false, "schema": { "type": "string", "enum": ["month", "lastMonth", "week", "lastWeek", "quarter3", "quarter", "lastQuarter", "half6"], "default": "month", "title": "Time" } }, { "name": "area", "in": "query", "required": false, "schema": { "type": "string", "enum": ["all", "hall", "hallA", "hallB", "mahjong", "snooker", "other"], "default": "all", "title": "Area" } }, { "name": "compare", "in": "query", "required": false, "schema": { "type": "integer", "enum": [0, 1], "default": 0, "title": "Compare" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FinanceBoardResponse" } } } }, "401": { "description": "未认证" }, "403": { "description": "无权限" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/xcx/config/skill-types": { "get": { "tags": [ "配置" ], "summary": "Get Skill Types", "description": "技能类型配置(CONFIG-1)。返回技能类型列表,查询失败降级返回空数组。", "operationId": "get_skill_types_api_xcx_config_skill_types_get", "security": [ { "HTTPBearer": [] } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SkillTypeItem" }, "title": "Response Get Skill Types Api Xcx Config Skill Types Get" } } } }, "401": { "description": "未认证" }, "403": { "description": "无权限" } } } } }, "components": { "schemas": { "AbandonRequest": { "properties": { "reason": { "type": "string", "minLength": 1, "title": "Reason", "description": "放弃原因(必填)" } }, "type": "object", "required": [ "reason" ], "title": "AbandonRequest", "description": "放弃任务请求(reason 必填)。" }, "ApplicationRequest": { "properties": { "site_code": { "type": "string", "pattern": "^[A-Za-z]{2}\\d{3}$", "title": "Site Code", "description": "球房ID" }, "applied_role_text": { "type": "string", "maxLength": 100, "minLength": 1, "title": "Applied Role Text", "description": "申请身份" }, "phone": { "type": "string", "pattern": "^\\d{11}$", "title": "Phone", "description": "手机号" }, "employee_number": { "anyOf": [ { "type": "string", "maxLength": 50 }, { "type": "null" } ], "title": "Employee Number", "description": "员工编号" }, "nickname": { "anyOf": [ { "type": "string", "maxLength": 50 }, { "type": "null" } ], "title": "Nickname", "description": "昵称" } }, "type": "object", "required": [ "site_code", "applied_role_text", "phone" ], "title": "ApplicationRequest", "description": "用户申请提交请求。" }, "ApplicationResponse": { "properties": { "id": { "type": "integer", "title": "Id" }, "site_code": { "type": "string", "title": "Site Code" }, "applied_role_text": { "type": "string", "title": "Applied Role Text" }, "status": { "type": "string", "title": "Status" }, "review_note": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Review Note" }, "created_at": { "type": "string", "title": "Created At" }, "reviewed_at": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reviewed At" } }, "type": "object", "required": [ "id", "site_code", "applied_role_text", "status", "created_at" ], "title": "ApplicationResponse", "description": "申请记录响应。" }, "ApproveRequest": { "properties": { "role_id": { "type": "integer", "title": "Role Id" }, "binding": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "title": "Binding" }, "review_note": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Review Note" } }, "type": "object", "required": [ "role_id" ], "title": "ApproveRequest", "description": "批准申请请求。" }, "ClueCategory": { "type": "string", "enum": [ "客户基础信息", "消费习惯", "玩法偏好", "促销偏好", "社交关系", "重要反馈" ], "title": "ClueCategory", "description": "维客线索大类枚举" }, "ClueSource": { "type": "string", "enum": [ "manual", "ai_consumption", "ai_note" ], "title": "ClueSource", "description": "维客线索来源枚举" }, "ColumnInfo": { "properties": { "name": { "type": "string", "title": "Name" }, "data_type": { "type": "string", "title": "Data Type" }, "is_nullable": { "type": "boolean", "title": "Is Nullable" }, "column_default": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Column Default" } }, "type": "object", "required": [ "name", "data_type", "is_nullable" ], "title": "ColumnInfo", "description": "列定义。" }, "CreateScheduleRequest": { "properties": { "name": { "type": "string", "title": "Name" }, "task_codes": { "items": { "type": "string" }, "type": "array", "title": "Task Codes" }, "task_config": { "additionalProperties": true, "type": "object", "title": "Task Config" }, "schedule_config": { "$ref": "#/components/schemas/ScheduleConfigSchema" } }, "type": "object", "required": [ "name", "task_codes", "task_config", "schedule_config" ], "title": "CreateScheduleRequest", "description": "创建调度任务请求" }, "CursorInfo": { "properties": { "task_code": { "type": "string", "title": "Task Code" }, "last_fetch_time": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Last Fetch Time" }, "record_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Record Count" } }, "type": "object", "required": [ "task_code" ], "title": "CursorInfo", "description": "ETL 游标信息(单条任务的最后抓取状态)。" }, "DevLoginRequest": { "properties": { "openid": { "type": "string", "minLength": 1, "title": "Openid", "description": "模拟的微信 openid" }, "status": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Status", "description": "模拟的用户状态;为空时保留已有用户的当前状态,新用户默认 new" } }, "type": "object", "required": [ "openid" ], "title": "DevLoginRequest", "description": "开发模式 mock 登录请求(仅 WX_DEV_MODE=true 时可用)。" }, "DwdTableItem": { "properties": { "table_name": { "type": "string", "title": "Table Name" }, "display_name": { "type": "string", "title": "Display Name" }, "domain": { "type": "string", "title": "Domain" }, "ods_source": { "type": "string", "title": "Ods Source" }, "is_dimension": { "type": "boolean", "title": "Is Dimension" } }, "type": "object", "required": [ "table_name", "display_name", "domain", "ods_source", "is_dimension" ], "title": "DwdTableItem" }, "DwdTablesResponse": { "properties": { "groups": { "additionalProperties": { "items": { "$ref": "#/components/schemas/DwdTableItem" }, "type": "array" }, "type": "object", "title": "Groups" } }, "type": "object", "required": [ "groups" ], "title": "DwdTablesResponse", "description": "按业务域分组的 DWD 表定义" }, "EnvConfigResponse": { "properties": { "entries": { "items": { "$ref": "#/components/schemas/EnvEntry" }, "type": "array", "title": "Entries" } }, "type": "object", "required": [ "entries" ], "title": "EnvConfigResponse", "description": "GET 响应:键值对列表。" }, "EnvConfigUpdateRequest": { "properties": { "entries": { "items": { "$ref": "#/components/schemas/EnvEntry" }, "type": "array", "title": "Entries" } }, "type": "object", "required": [ "entries" ], "title": "EnvConfigUpdateRequest", "description": "PUT 请求体:键值对列表。" }, "EnvEntry": { "properties": { "key": { "type": "string", "title": "Key" }, "value": { "type": "string", "title": "Value" } }, "type": "object", "required": [ "key", "value" ], "title": "EnvEntry", "description": "单条环境变量键值对。" }, "ExecutionHistoryItem": { "properties": { "id": { "type": "string", "title": "Id" }, "site_id": { "type": "integer", "title": "Site Id" }, "task_codes": { "items": { "type": "string" }, "type": "array", "title": "Task Codes" }, "status": { "type": "string", "title": "Status" }, "started_at": { "type": "string", "format": "date-time", "title": "Started At" }, "finished_at": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ], "title": "Finished At" }, "exit_code": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Exit Code" }, "duration_ms": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Duration Ms" }, "command": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Command" }, "summary": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "title": "Summary" } }, "type": "object", "required": [ "id", "site_id", "task_codes", "status", "started_at" ], "title": "ExecutionHistoryItem", "description": "执行历史记录" }, "ExecutionLogsResponse": { "properties": { "execution_id": { "type": "string", "title": "Execution Id" }, "output_log": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Output Log" }, "error_log": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error Log" } }, "type": "object", "required": [ "execution_id" ], "title": "ExecutionLogsResponse", "description": "执行日志响应" }, "ExecutionRunResponse": { "properties": { "execution_id": { "type": "string", "title": "Execution Id" }, "message": { "type": "string", "title": "Message" } }, "type": "object", "required": [ "execution_id", "message" ], "title": "ExecutionRunResponse", "description": "直接执行任务的响应" }, "FlowDefinition": { "properties": { "id": { "type": "string", "title": "Id" }, "name": { "type": "string", "title": "Name" }, "layers": { "items": { "type": "string" }, "type": "array", "title": "Layers" } }, "type": "object", "required": [ "id", "name", "layers" ], "title": "FlowDefinition", "description": "执行流程(Flow)定义" }, "FlowsResponse": { "properties": { "flows": { "items": { "$ref": "#/components/schemas/FlowDefinition" }, "type": "array", "title": "Flows" }, "processing_modes": { "items": { "$ref": "#/components/schemas/ProcessingModeDefinition" }, "type": "array", "title": "Processing Modes" } }, "type": "object", "required": [ "flows", "processing_modes" ], "title": "FlowsResponse", "description": "Flow 定义 + 处理模式定义" }, "GitInfo": { "properties": { "env": { "type": "string", "title": "Env" }, "branch": { "type": "string", "title": "Branch" }, "last_commit_hash": { "type": "string", "title": "Last Commit Hash" }, "last_commit_message": { "type": "string", "title": "Last Commit Message" }, "last_commit_time": { "type": "string", "title": "Last Commit Time" }, "has_local_changes": { "type": "boolean", "title": "Has Local Changes" } }, "type": "object", "required": [ "env", "branch", "last_commit_hash", "last_commit_message", "last_commit_time", "has_local_changes" ], "title": "GitInfo" }, "GitPullResult": { "properties": { "env": { "type": "string", "title": "Env" }, "success": { "type": "boolean", "title": "Success" }, "output": { "type": "string", "title": "Output" } }, "type": "object", "required": [ "env", "success", "output" ], "title": "GitPullResult" }, "HTTPValidationError": { "properties": { "detail": { "items": { "$ref": "#/components/schemas/ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" }, "LoginRequest": { "properties": { "username": { "type": "string", "maxLength": 64, "minLength": 1, "title": "Username", "description": "用户名" }, "password": { "type": "string", "minLength": 1, "title": "Password", "description": "密码" } }, "type": "object", "required": [ "username", "password" ], "title": "LoginRequest", "description": "登录请求。" }, "NoteCreateRequest": { "properties": { "target_type": { "type": "string", "title": "Target Type", "default": "member" }, "target_id": { "type": "integer", "title": "Target Id" }, "content": { "type": "string", "minLength": 1, "title": "Content" }, "task_id": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Task Id" }, "rating_service_willingness": { "anyOf": [ { "type": "integer", "maximum": 5.0, "minimum": 1.0 }, { "type": "null" } ], "title": "Rating Service Willingness" }, "rating_revisit_likelihood": { "anyOf": [ { "type": "integer", "maximum": 5.0, "minimum": 1.0 }, { "type": "null" } ], "title": "Rating Revisit Likelihood" } }, "type": "object", "required": [ "target_id", "content" ], "title": "NoteCreateRequest", "description": "创建备注请求(含星星评分,评分 1-5 范围约束)。" }, "NoteOut": { "properties": { "id": { "type": "integer", "title": "Id" }, "type": { "type": "string", "title": "Type" }, "content": { "type": "string", "title": "Content" }, "rating_service_willingness": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Rating Service Willingness" }, "rating_revisit_likelihood": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Rating Revisit Likelihood" }, "ai_score": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Ai Score" }, "ai_analysis": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Ai Analysis" }, "task_id": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Task Id" }, "created_at": { "type": "string", "title": "Created At" }, "updated_at": { "type": "string", "title": "Updated At" } }, "type": "object", "required": [ "id", "type", "content", "rating_service_willingness", "rating_revisit_likelihood", "ai_score", "ai_analysis", "task_id", "created_at", "updated_at" ], "title": "NoteOut", "description": "备注输出模型(含评分 + AI 评分)。" }, "ProcessingModeDefinition": { "properties": { "id": { "type": "string", "title": "Id" }, "name": { "type": "string", "title": "Name" }, "description": { "type": "string", "title": "Description" } }, "type": "object", "required": [ "id", "name", "description" ], "title": "ProcessingModeDefinition", "description": "处理模式定义" }, "QueryRequest": { "properties": { "sql": { "type": "string", "title": "Sql" } }, "type": "object", "required": [ "sql" ], "title": "QueryRequest", "description": "SQL 查询请求。" }, "QueryResponse": { "properties": { "columns": { "items": { "type": "string" }, "type": "array", "title": "Columns" }, "rows": { "items": { "items": {}, "type": "array" }, "type": "array", "title": "Rows" }, "row_count": { "type": "integer", "title": "Row Count" } }, "type": "object", "required": [ "columns", "rows", "row_count" ], "title": "QueryResponse", "description": "SQL 查询响应。" }, "QueueTaskResponse": { "properties": { "id": { "type": "string", "title": "Id" }, "site_id": { "type": "integer", "title": "Site Id" }, "config": { "additionalProperties": true, "type": "object", "title": "Config" }, "status": { "type": "string", "title": "Status" }, "position": { "type": "integer", "title": "Position" }, "created_at": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ], "title": "Created At" }, "started_at": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ], "title": "Started At" }, "finished_at": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ], "title": "Finished At" }, "exit_code": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Exit Code" }, "error_message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error Message" } }, "type": "object", "required": [ "id", "site_id", "config", "status", "position" ], "title": "QueueTaskResponse", "description": "队列任务响应" }, "RecentRun": { "properties": { "id": { "type": "string", "title": "Id" }, "task_codes": { "items": { "type": "string" }, "type": "array", "title": "Task Codes" }, "status": { "type": "string", "title": "Status" }, "started_at": { "type": "string", "title": "Started At" }, "finished_at": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Finished At" }, "duration_ms": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Duration Ms" }, "exit_code": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Exit Code" } }, "type": "object", "required": [ "id", "task_codes", "status", "started_at" ], "title": "RecentRun", "description": "最近执行记录。" }, "RefreshRequest": { "properties": { "refresh_token": { "type": "string", "minLength": 1, "title": "Refresh Token", "description": "刷新令牌" } }, "type": "object", "required": [ "refresh_token" ], "title": "RefreshRequest", "description": "刷新令牌请求。" }, "RefreshTokenRequest": { "properties": { "refresh_token": { "type": "string", "minLength": 1, "title": "Refresh Token", "description": "刷新令牌" } }, "type": "object", "required": [ "refresh_token" ], "title": "RefreshTokenRequest", "description": "刷新令牌请求。" }, "RejectRequest": { "properties": { "review_note": { "type": "string", "minLength": 1, "title": "Review Note", "description": "拒绝原因" } }, "type": "object", "required": [ "review_note" ], "title": "RejectRequest", "description": "拒绝申请请求。" }, "ReorderRequest": { "properties": { "task_id": { "type": "string", "title": "Task Id" }, "new_position": { "type": "integer", "title": "New Position" } }, "type": "object", "required": [ "task_id", "new_position" ], "title": "ReorderRequest", "description": "队列重排请求" }, "RetentionClueOut": { "properties": { "id": { "type": "integer", "title": "Id" }, "member_id": { "type": "integer", "title": "Member Id" }, "category": { "$ref": "#/components/schemas/ClueCategory" }, "summary": { "type": "string", "title": "Summary" }, "detail": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Detail" }, "recorded_by_assistant_id": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Recorded By Assistant Id" }, "recorded_by_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Recorded By Name" }, "recorded_at": { "type": "string", "format": "date-time", "title": "Recorded At" }, "site_id": { "type": "integer", "title": "Site Id" }, "source": { "$ref": "#/components/schemas/ClueSource", "default": "manual" } }, "type": "object", "required": [ "id", "member_id", "category", "summary", "detail", "recorded_by_assistant_id", "recorded_by_name", "recorded_at", "site_id" ], "title": "RetentionClueOut", "description": "维客线索返回模型。" }, "RetentionClueSubmit": { "properties": { "member_id": { "type": "integer", "exclusiveMinimum": 0.0, "title": "Member Id", "description": "会员 ID" }, "category": { "$ref": "#/components/schemas/ClueCategory", "description": "线索大类" }, "summary": { "type": "string", "maxLength": 200, "minLength": 1, "title": "Summary", "description": "摘要:重点信息" }, "detail": { "anyOf": [ { "type": "string", "maxLength": 2000 }, { "type": "null" } ], "title": "Detail", "description": "详情:分析及扩展说明,可为空" }, "recorded_by_assistant_id": { "type": "integer", "exclusiveMinimum": 0.0, "title": "Recorded By Assistant Id", "description": "记录助教 ID" }, "recorded_by_name": { "type": "string", "maxLength": 50, "minLength": 1, "title": "Recorded By Name", "description": "记录助教姓名" }, "site_id": { "type": "integer", "exclusiveMinimum": 0.0, "title": "Site Id", "description": "门店 ID" }, "source": { "$ref": "#/components/schemas/ClueSource", "description": "线索来源", "default": "manual" } }, "type": "object", "required": [ "member_id", "category", "summary", "recorded_by_assistant_id", "recorded_by_name", "site_id" ], "title": "RetentionClueSubmit", "description": "提交维客线索请求。" }, "ScheduleConfigSchema": { "properties": { "schedule_type": { "type": "string", "enum": [ "once", "interval", "daily", "weekly", "cron" ], "title": "Schedule Type" }, "interval_value": { "type": "integer", "title": "Interval Value", "default": 1 }, "interval_unit": { "type": "string", "enum": [ "minutes", "hours", "days" ], "title": "Interval Unit", "default": "hours" }, "daily_time": { "type": "string", "title": "Daily Time", "default": "04:00" }, "weekly_days": { "items": { "type": "integer" }, "type": "array", "title": "Weekly Days", "default": [ 1 ] }, "weekly_time": { "type": "string", "title": "Weekly Time", "default": "04:00" }, "cron_expression": { "type": "string", "title": "Cron Expression", "default": "0 4 * * *" }, "enabled": { "type": "boolean", "title": "Enabled", "default": true }, "start_date": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Start Date" }, "end_date": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "End Date" } }, "type": "object", "required": [ "schedule_type" ], "title": "ScheduleConfigSchema", "description": "调度配置 — 支持 5 种调度类型" }, "ScheduleResponse": { "properties": { "id": { "type": "string", "title": "Id" }, "site_id": { "type": "integer", "title": "Site Id" }, "name": { "type": "string", "title": "Name" }, "task_codes": { "items": { "type": "string" }, "type": "array", "title": "Task Codes" }, "task_config": { "additionalProperties": true, "type": "object", "title": "Task Config" }, "schedule_config": { "additionalProperties": true, "type": "object", "title": "Schedule Config" }, "enabled": { "type": "boolean", "title": "Enabled" }, "last_run_at": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ], "title": "Last Run At" }, "next_run_at": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ], "title": "Next Run At" }, "run_count": { "type": "integer", "title": "Run Count" }, "last_status": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Last Status" }, "created_at": { "type": "string", "format": "date-time", "title": "Created At" }, "updated_at": { "type": "string", "format": "date-time", "title": "Updated At" } }, "type": "object", "required": [ "id", "site_id", "name", "task_codes", "task_config", "schedule_config", "enabled", "run_count", "created_at", "updated_at" ], "title": "ScheduleResponse", "description": "调度任务响应" }, "SchemaInfo": { "properties": { "name": { "type": "string", "title": "Name" } }, "type": "object", "required": [ "name" ], "title": "SchemaInfo", "description": "Schema 信息。" }, "ServiceActionResult": { "properties": { "env": { "type": "string", "title": "Env" }, "action": { "type": "string", "title": "Action" }, "success": { "type": "boolean", "title": "Success" }, "message": { "type": "string", "title": "Message" } }, "type": "object", "required": [ "env", "action", "success", "message" ], "title": "ServiceActionResult" }, "ServiceStatus": { "properties": { "env": { "type": "string", "title": "Env" }, "label": { "type": "string", "title": "Label" }, "running": { "type": "boolean", "title": "Running" }, "pid": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Pid" }, "port": { "type": "integer", "title": "Port" }, "uptime_seconds": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Uptime Seconds" }, "memory_mb": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Memory Mb" }, "cpu_percent": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Cpu Percent" } }, "type": "object", "required": [ "env", "label", "running", "port" ], "title": "ServiceStatus" }, "SiteInfo": { "properties": { "site_id": { "type": "integer", "title": "Site Id" }, "site_name": { "type": "string", "title": "Site Name" }, "roles": { "items": { "additionalProperties": true, "type": "object" }, "type": "array", "title": "Roles", "default": [] } }, "type": "object", "required": [ "site_id", "site_name" ], "title": "SiteInfo", "description": "店铺信息。" }, "SwitchSiteRequest": { "properties": { "site_id": { "type": "integer", "title": "Site Id" } }, "type": "object", "required": [ "site_id" ], "title": "SwitchSiteRequest", "description": "切换店铺请求。" }, "SyncCheckResponse": { "properties": { "in_sync": { "type": "boolean", "title": "In Sync" }, "backend_only": { "items": { "type": "string" }, "type": "array", "title": "Backend Only" }, "etl_only": { "items": { "type": "string" }, "type": "array", "title": "Etl Only" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" } }, "type": "object", "required": [ "in_sync", "backend_only", "etl_only" ], "title": "SyncCheckResponse", "description": "同步检查结果" }, "SystemInfo": { "properties": { "cpu_percent": { "type": "number", "title": "Cpu Percent" }, "memory_total_gb": { "type": "number", "title": "Memory Total Gb" }, "memory_used_gb": { "type": "number", "title": "Memory Used Gb" }, "memory_percent": { "type": "number", "title": "Memory Percent" }, "disk_total_gb": { "type": "number", "title": "Disk Total Gb" }, "disk_used_gb": { "type": "number", "title": "Disk Used Gb" }, "disk_percent": { "type": "number", "title": "Disk Percent" }, "boot_time": { "type": "string", "title": "Boot Time" } }, "type": "object", "required": [ "cpu_percent", "memory_total_gb", "memory_used_gb", "memory_percent", "disk_total_gb", "disk_used_gb", "disk_percent", "boot_time" ], "title": "SystemInfo" }, "TableInfo": { "properties": { "name": { "type": "string", "title": "Name" }, "row_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Row Count" } }, "type": "object", "required": [ "name" ], "title": "TableInfo", "description": "表信息(含行数统计)。" }, "TaskConfigSchema": { "properties": { "tasks": { "items": { "type": "string" }, "type": "array", "title": "Tasks" }, "flow": { "type": "string", "title": "Flow", "default": "api_ods_dwd" }, "processing_mode": { "type": "string", "title": "Processing Mode", "default": "increment_only" }, "dry_run": { "type": "boolean", "title": "Dry Run", "default": false }, "window_mode": { "type": "string", "title": "Window Mode", "default": "lookback" }, "window_start": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Window Start" }, "window_end": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Window End" }, "window_split": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Window Split" }, "window_split_days": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Window Split Days" }, "lookback_hours": { "type": "integer", "title": "Lookback Hours", "default": 24 }, "overlap_seconds": { "type": "integer", "title": "Overlap Seconds", "default": 600 }, "fetch_before_verify": { "type": "boolean", "title": "Fetch Before Verify", "default": false }, "skip_ods_when_fetch_before_verify": { "type": "boolean", "title": "Skip Ods When Fetch Before Verify", "default": false }, "ods_use_local_json": { "type": "boolean", "title": "Ods Use Local Json", "default": false }, "store_id": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Store Id" }, "dwd_only_tables": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Dwd Only Tables" }, "force_full": { "type": "boolean", "title": "Force Full", "default": false }, "extra_args": { "additionalProperties": true, "type": "object", "title": "Extra Args", "default": {} } }, "type": "object", "required": [ "tasks" ], "title": "TaskConfigSchema", "description": "任务配置 — 前后端传输格式\n\n字段与 CLI 参数的映射关系:\n- flow → --flow(Flow ID,7 种之一)\n- processing_mode → --processing-mode(4 种处理模式)\n- tasks → --tasks(逗号分隔)\n- dry_run → --dry-run(布尔标志)\n- window_mode → 决定使用 lookback 还是 custom 时间窗口(仅前端逻辑,不直接映射 CLI 参数)\n- window_start → --window-start\n- window_end → --window-end\n- window_split → --window-split\n- window_split_days → --window-split-days\n- lookback_hours → --lookback-hours\n- overlap_seconds → --overlap-seconds\n- fetch_before_verify → --fetch-before-verify(布尔标志)\n- store_id → --store-id(由后端从 JWT 注入,前端不传)\n- dwd_only_tables → 传入 extra_args 或未来扩展" }, "TaskItem": { "properties": { "code": { "type": "string", "title": "Code" }, "name": { "type": "string", "title": "Name" }, "description": { "type": "string", "title": "Description" }, "domain": { "type": "string", "title": "Domain" }, "layer": { "type": "string", "title": "Layer" }, "requires_window": { "type": "boolean", "title": "Requires Window" }, "is_ods": { "type": "boolean", "title": "Is Ods" }, "is_dimension": { "type": "boolean", "title": "Is Dimension" }, "default_enabled": { "type": "boolean", "title": "Default Enabled" }, "is_common": { "type": "boolean", "title": "Is Common" } }, "type": "object", "required": [ "code", "name", "description", "domain", "layer", "requires_window", "is_ods", "is_dimension", "default_enabled", "is_common" ], "title": "TaskItem" }, "TaskListItem": { "properties": { "id": { "type": "integer", "title": "Id" }, "task_type": { "type": "string", "title": "Task Type" }, "status": { "type": "string", "title": "Status" }, "priority_score": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Priority Score" }, "is_pinned": { "type": "boolean", "title": "Is Pinned" }, "expires_at": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Expires At" }, "created_at": { "type": "string", "title": "Created At" }, "member_id": { "type": "integer", "title": "Member Id" }, "member_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Member Name" }, "member_phone": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Member Phone" }, "rs_score": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Rs Score" }, "heart_icon": { "type": "string", "title": "Heart Icon" } }, "type": "object", "required": [ "id", "task_type", "status", "priority_score", "is_pinned", "expires_at", "created_at", "member_id", "member_name", "member_phone", "rs_score", "heart_icon" ], "title": "TaskListItem", "description": "任务列表项(含客户信息 + RS 指数 + 爱心 icon)。" }, "TaskListResponse": { "properties": { "items": { "items": { "$ref": "#/components/schemas/TaskListItem" }, "type": "array", "title": "Items", "description": "任务列表" }, "total": { "type": "integer", "title": "Total" }, "page": { "type": "integer", "title": "Page" }, "page_size": { "type": "integer", "title": "Page Size" }, "performance": { "$ref": "#/components/schemas/PerformanceSummary" } }, "type": "object", "required": ["items", "total", "page", "page_size", "performance"], "title": "TaskListResponse", "description": "TASK-1 响应:任务列表 + 绩效概览。" }, "PerformanceSummary": { "properties": { "total_hours": { "type": "number", "title": "Total Hours" }, "total_income": { "type": "number", "title": "Total Income" }, "total_customers": { "type": "integer", "title": "Total Customers" }, "month_label": { "type": "string", "title": "Month Label" }, "tier_nodes": { "items": { "type": "number" }, "type": "array", "title": "Tier Nodes" }, "basic_hours": { "type": "number", "title": "Basic Hours" }, "bonus_hours": { "type": "number", "title": "Bonus Hours" }, "current_tier": { "type": "integer", "title": "Current Tier" }, "next_tier_hours": { "type": "number", "title": "Next Tier Hours" }, "tier_completed": { "type": "boolean", "title": "Tier Completed" }, "bonus_money": { "type": "number", "title": "Bonus Money" }, "income_trend": { "type": "string", "title": "Income Trend" }, "income_trend_dir": { "type": "string", "enum": ["up", "down"], "title": "Income Trend Dir" }, "prev_month": { "type": "string", "title": "Prev Month" }, "current_tier_label": { "type": "string", "title": "Current Tier Label" } }, "type": "object", "required": ["total_hours", "total_income", "total_customers", "month_label", "current_tier", "income_trend", "income_trend_dir"], "title": "PerformanceSummary", "description": "绩效概览(附带在任务列表响应中)。" }, "TaskDetailResponse": { "properties": { "id": { "type": "integer", "title": "Id" }, "customer_name": { "type": "string", "title": "Customer Name" }, "customer_avatar": { "type": "string", "title": "Customer Avatar" }, "task_type": { "type": "string", "title": "Task Type" }, "task_type_label": { "type": "string", "title": "Task Type Label" }, "deadline": { "anyOf": [{ "type": "string" }, { "type": "null" }], "title": "Deadline" }, "heart_score": { "type": "number", "title": "Heart Score" }, "hobbies": { "items": { "type": "string" }, "type": "array", "title": "Hobbies" }, "is_pinned": { "type": "boolean", "title": "Is Pinned" }, "has_note": { "type": "boolean", "title": "Has Note" }, "status": { "type": "string", "title": "Status" }, "customer_id": { "type": "integer", "title": "Customer Id" }, "retention_clues": { "items": { "$ref": "#/components/schemas/RetentionClue" }, "type": "array", "title": "Retention Clues" }, "talking_points": { "items": { "type": "string" }, "type": "array", "title": "Talking Points" }, "service_summary": { "$ref": "#/components/schemas/ServiceSummary" }, "service_records": { "items": { "$ref": "#/components/schemas/ServiceRecord" }, "type": "array", "title": "Service Records" }, "ai_analysis": { "$ref": "#/components/schemas/AiAnalysis" }, "notes": { "items": { "$ref": "#/components/schemas/NoteItem" }, "type": "array", "title": "Notes" } }, "type": "object", "required": ["id", "customer_name", "task_type", "status", "customer_id", "retention_clues", "talking_points", "service_summary", "service_records", "ai_analysis", "notes"], "title": "TaskDetailResponse", "description": "TASK-2 响应:任务详情完整版。" }, "RetentionClue": { "properties": { "tag": { "type": "string", "title": "Tag" }, "tag_color": { "type": "string", "title": "Tag Color" }, "emoji": { "type": "string", "title": "Emoji" }, "text": { "type": "string", "title": "Text" }, "source": { "type": "string", "enum": ["manual", "ai_consumption", "ai_note"], "title": "Source" }, "desc": { "anyOf": [{ "type": "string" }, { "type": "null" }], "title": "Desc" } }, "type": "object", "required": ["tag", "tag_color", "emoji", "text", "source"], "title": "RetentionClue", "description": "维客线索。" }, "ServiceSummary": { "properties": { "total_hours": { "type": "number", "title": "Total Hours" }, "total_income": { "type": "number", "title": "Total Income" }, "avg_income": { "type": "number", "title": "Avg Income" } }, "type": "object", "required": ["total_hours", "total_income", "avg_income"], "title": "ServiceSummary", "description": "服务汇总。" }, "ServiceRecord": { "properties": { "table": { "anyOf": [{ "type": "string" }, { "type": "null" }], "title": "Table" }, "type": { "type": "string", "title": "Type" }, "type_class": { "type": "string", "enum": ["basic", "vip", "tip", "recharge", "incentive"], "title": "Type Class" }, "duration": { "type": "number", "title": "Duration" }, "duration_raw": { "anyOf": [{ "type": "number" }, { "type": "null" }], "title": "Duration Raw" }, "income": { "type": "number", "title": "Income" }, "is_estimate": { "anyOf": [{ "type": "boolean" }, { "type": "null" }], "title": "Is Estimate" }, "date": { "type": "string", "title": "Date" } }, "type": "object", "required": ["type", "type_class", "duration", "income", "date"], "title": "ServiceRecord", "description": "服务记录。" }, "AiAnalysis": { "properties": { "summary": { "type": "string", "title": "Summary" }, "suggestions": { "items": { "type": "string" }, "type": "array", "title": "Suggestions" } }, "type": "object", "required": ["summary", "suggestions"], "title": "AiAnalysis", "description": "AI 分析结果。" }, "NoteItem": { "properties": { "id": { "type": "integer", "title": "Id" }, "content": { "type": "string", "title": "Content" }, "tag_type": { "type": "string", "title": "Tag Type" }, "tag_label": { "type": "string", "title": "Tag Label" }, "created_at": { "type": "string", "title": "Created At" }, "ai_score": { "anyOf": [{ "type": "integer", "minimum": 1, "maximum": 10 }, { "type": "null" }], "title": "Ai Score", "description": "AI 应用 6 评分(1-10),星数 = ai_score ÷ 2" }, "rating_service_willingness": { "anyOf": [{ "type": "integer", "minimum": 1, "maximum": 5 }, { "type": "null" }], "title": "Rating Service Willingness", "description": "再次服务意愿(1-5)" }, "rating_revisit_likelihood": { "anyOf": [{ "type": "integer", "minimum": 1, "maximum": 5 }, { "type": "null" }], "title": "Rating Revisit Likelihood", "description": "再来店可能性(1-5)" } }, "type": "object", "required": ["id", "content", "tag_type", "tag_label", "created_at"], "title": "NoteItem", "description": "备注项。" }, "PerformanceOverviewResponse": { "properties": { "coach_name": { "type": "string", "title": "Coach Name" }, "coach_role": { "type": "string", "title": "Coach Role" }, "store_name": { "type": "string", "title": "Store Name" }, "monthly_income": { "type": "string", "title": "Monthly Income" }, "last_month_income": { "type": "string", "title": "Last Month Income" }, "current_tier": { "$ref": "#/components/schemas/TierInfo" }, "next_tier": { "$ref": "#/components/schemas/TierInfo" }, "upgrade_hours_needed": { "type": "number", "title": "Upgrade Hours Needed" }, "upgrade_bonus": { "type": "number", "title": "Upgrade Bonus" }, "income_items": { "items": { "$ref": "#/components/schemas/IncomeItem" }, "type": "array", "title": "Income Items" }, "monthly_total": { "type": "string", "title": "Monthly Total" }, "this_month_records": { "items": { "$ref": "#/components/schemas/DateGroup" }, "type": "array", "title": "This Month Records" }, "new_customers": { "items": { "$ref": "#/components/schemas/NewCustomer" }, "type": "array", "title": "New Customers" }, "regular_customers": { "items": { "$ref": "#/components/schemas/RegularCustomer" }, "type": "array", "title": "Regular Customers" } }, "type": "object", "required": ["coach_name", "coach_role", "store_name", "monthly_income", "last_month_income", "current_tier", "next_tier", "income_items", "monthly_total", "this_month_records", "new_customers", "regular_customers"], "title": "PerformanceOverviewResponse", "description": "PERF-1 响应:绩效概览。" }, "TierInfo": { "properties": { "basic_rate": { "type": "number", "title": "Basic Rate" }, "incentive_rate": { "type": "number", "title": "Incentive Rate" } }, "type": "object", "required": ["basic_rate", "incentive_rate"], "title": "TierInfo" }, "IncomeItem": { "properties": { "icon": { "type": "string", "title": "Icon" }, "label": { "type": "string", "title": "Label" }, "desc": { "type": "string", "title": "Desc" }, "value": { "type": "string", "title": "Value" } }, "type": "object", "required": ["icon", "label", "desc", "value"], "title": "IncomeItem" }, "DateGroup": { "properties": { "date": { "type": "string", "title": "Date" }, "total_hours": { "type": "string", "title": "Total Hours" }, "total_income": { "type": "string", "title": "Total Income" }, "records": { "items": { "$ref": "#/components/schemas/DateGroupRecord" }, "type": "array", "title": "Records" } }, "type": "object", "required": ["date", "total_hours", "total_income", "records"], "title": "DateGroup" }, "DateGroupRecord": { "properties": { "customer_name": { "type": "string", "title": "Customer Name" }, "avatar_char": { "anyOf": [{ "type": "string" }, { "type": "null" }], "title": "Avatar Char" }, "avatar_color": { "anyOf": [{ "type": "string" }, { "type": "null" }], "title": "Avatar Color" }, "time_range": { "type": "string", "title": "Time Range" }, "hours": { "type": "string", "title": "Hours" }, "course_type": { "type": "string", "title": "Course Type" }, "course_type_class": { "type": "string", "enum": ["basic", "vip", "tip", "recharge", "incentive"], "title": "Course Type Class" }, "location": { "type": "string", "title": "Location" }, "income": { "type": "string", "title": "Income" } }, "type": "object", "required": ["customer_name", "time_range", "hours", "course_type", "course_type_class", "location", "income"], "title": "DateGroupRecord" }, "NewCustomer": { "properties": { "name": { "type": "string", "title": "Name" }, "avatar_char": { "type": "string", "title": "Avatar Char" }, "avatar_color": { "type": "string", "title": "Avatar Color" }, "last_service": { "type": "string", "title": "Last Service" }, "count": { "type": "integer", "title": "Count" } }, "type": "object", "required": ["name", "avatar_char", "avatar_color", "last_service", "count"], "title": "NewCustomer" }, "RegularCustomer": { "properties": { "name": { "type": "string", "title": "Name" }, "avatar_char": { "type": "string", "title": "Avatar Char" }, "avatar_color": { "type": "string", "title": "Avatar Color" }, "hours": { "type": "number", "title": "Hours" }, "income": { "type": "string", "title": "Income" }, "count": { "type": "integer", "title": "Count" } }, "type": "object", "required": ["name", "avatar_char", "avatar_color", "hours", "income", "count"], "title": "RegularCustomer" }, "PerformanceRecordsResponse": { "properties": { "summary": { "$ref": "#/components/schemas/RecordsSummary" }, "date_groups": { "items": { "$ref": "#/components/schemas/DateGroup" }, "type": "array", "title": "Date Groups" }, "has_more": { "type": "boolean", "title": "Has More" } }, "type": "object", "required": ["summary", "date_groups", "has_more"], "title": "PerformanceRecordsResponse", "description": "PERF-2 响应:绩效明细。" }, "RecordsSummary": { "properties": { "total_count": { "type": "integer", "title": "Total Count" }, "total_hours": { "type": "number", "title": "Total Hours" }, "total_hours_raw": { "type": "number", "title": "Total Hours Raw" }, "total_income": { "type": "number", "title": "Total Income" } }, "type": "object", "required": ["total_count", "total_hours", "total_hours_raw", "total_income"], "title": "RecordsSummary" }, "TaskRegistryResponse": { "properties": { "groups": { "additionalProperties": { "items": { "$ref": "#/components/schemas/TaskItem" }, "type": "array" }, "type": "object", "title": "Groups" } }, "type": "object", "required": [ "groups" ], "title": "TaskRegistryResponse", "description": "按业务域分组的任务列表" }, "TokenResponse": { "properties": { "access_token": { "type": "string", "title": "Access Token" }, "refresh_token": { "type": "string", "title": "Refresh Token" }, "token_type": { "type": "string", "title": "Token Type", "default": "bearer" } }, "type": "object", "required": [ "access_token", "refresh_token" ], "title": "TokenResponse", "description": "令牌响应。" }, "UpdateScheduleRequest": { "properties": { "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "task_codes": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Task Codes" }, "task_config": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "title": "Task Config" }, "schedule_config": { "anyOf": [ { "$ref": "#/components/schemas/ScheduleConfigSchema" }, { "type": "null" } ] } }, "type": "object", "title": "UpdateScheduleRequest", "description": "更新调度任务请求(所有字段可选)" }, "UserStatusResponse": { "properties": { "user_id": { "type": "integer", "title": "User Id" }, "status": { "type": "string", "title": "Status" }, "nickname": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Nickname" }, "applications": { "items": { "$ref": "#/components/schemas/ApplicationResponse" }, "type": "array", "title": "Applications", "default": [] } }, "type": "object", "required": [ "user_id", "status" ], "title": "UserStatusResponse", "description": "用户状态查询响应。" }, "ValidateRequest": { "properties": { "config": { "$ref": "#/components/schemas/TaskConfigSchema" } }, "type": "object", "required": [ "config" ], "title": "ValidateRequest", "description": "验证请求体 — 复用 TaskConfigSchema,但 store_id 由后端注入" }, "ValidateResponse": { "properties": { "valid": { "type": "boolean", "title": "Valid" }, "command": { "type": "string", "title": "Command" }, "command_args": { "items": { "type": "string" }, "type": "array", "title": "Command Args" }, "errors": { "items": { "type": "string" }, "type": "array", "title": "Errors" } }, "type": "object", "required": [ "valid", "command", "command_args", "errors" ], "title": "ValidateResponse", "description": "验证结果 + CLI 命令预览" }, "ValidationError": { "properties": { "loc": { "items": { "anyOf": [ { "type": "string" }, { "type": "integer" } ] }, "type": "array", "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" }, "input": { "title": "Input" }, "ctx": { "type": "object", "title": "Context" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "CustomerDetailResponse": { "type": "object", "title": "CustomerDetailResponse", "description": "CUST-1 客户详情响应。包含基础信息、Banner 概览、AI 洞察、关联助教任务、最亲密助教、维客线索、消费记录、备注。", "required": ["id", "name", "phone", "phoneFull", "avatar", "memberLevel", "relationIndex"], "properties": { "id": { "type": "integer", "description": "客户唯一 ID" }, "name": { "type": "string", "description": "客户姓名(DQ-6: JOIN v_dim_member)" }, "phone": { "type": "string", "description": "脱敏手机号" }, "phoneFull": { "type": "string", "description": "完整手机号" }, "avatar": { "type": "string", "description": "头像 URL" }, "memberLevel": { "type": "string", "description": "会员等级(DQ-7: JOIN v_dim_member_card_account)" }, "relationIndex": { "type": "string", "description": "关系指数" }, "tags": { "type": "array", "items": { "type": "string" }, "description": "客户标签" }, "balance": { "type": "number", "nullable": true, "description": "客户余额(元,items_sum 口径)" }, "consumption60d": { "type": "number", "nullable": true, "description": "近 60 天消费(元)" }, "idealInterval": { "type": "integer", "nullable": true, "description": "理想到店间隔(天)" }, "daysSinceVisit": { "type": "integer", "nullable": true, "description": "距上次到店天数" }, "aiInsight": { "type": "object", "description": "AI 洞察" }, "coachTasks": { "type": "array", "items": { "type": "object" }, "description": "关联助教任务" }, "favoriteCoaches": { "type": "array", "items": { "type": "object" }, "description": "最亲密助教" }, "retentionClues": { "type": "array", "items": { "type": "object" }, "description": "维客线索" }, "consumptionRecords": { "type": "array", "items": { "type": "object" }, "description": "消费记录(嵌套结构)" }, "notes": { "type": "array", "items": { "type": "object" }, "description": "备注列表(最多 20 条)" } } }, "CustomerRecordsResponse": { "type": "object", "title": "CustomerRecordsResponse", "description": "CUST-2 客户服务记录响应。按月查询,含月度统计汇总。", "required": ["customerName", "customerPhone", "customerPhoneFull", "relationIndex", "totalServiceCount", "monthCount", "monthHours"], "properties": { "customerName": { "type": "string", "description": "客户姓名" }, "customerPhone": { "type": "string", "description": "脱敏手机号" }, "customerPhoneFull": { "type": "string", "description": "完整手机号" }, "relationIndex": { "type": "string", "description": "关系指数" }, "tables": { "type": "array", "items": { "type": "object" }, "description": "可选台桌列表" }, "totalServiceCount": { "type": "integer", "description": "累计服务总次数(跨月)" }, "monthCount": { "type": "integer", "description": "当月服务次数" }, "monthHours": { "type": "number", "description": "当月总工时" }, "records": { "type": "array", "items": { "type": "object" }, "description": "服务记录列表" }, "hasMore": { "type": "boolean", "description": "是否有更多数据" } } }, "CoachDetailResponse": { "type": "object", "title": "CoachDetailResponse", "description": "COACH-1 助教详情响应。包含基本信息、绩效、收入明细、档位节点、任务分组、TOP 客户、服务记录、历史月份、备注。", "required": ["id", "name", "avatar", "level", "performance", "income"], "properties": { "id": { "type": "integer", "description": "助教 ID" }, "name": { "type": "string", "description": "助教姓名" }, "avatar": { "type": "string", "description": "头像 URL" }, "level": { "type": "string", "description": "等级(初级/中级/高级/星级)" }, "skills": { "type": "array", "items": { "type": "string" }, "description": "技能标签" }, "workYears": { "type": "number", "description": "工龄(年)" }, "customerCount": { "type": "integer", "description": "客户数" }, "hireDate": { "type": "string", "nullable": true, "description": "入职日期" }, "performance": { "type": "object", "description": "绩效指标(6 项)" }, "income": { "type": "object", "description": "收入明细(thisMonth/lastMonth)" }, "tierNodes": { "type": "array", "items": { "type": "number" }, "description": "档位节点数组" }, "visibleTasks": { "type": "array", "items": { "type": "object" }, "description": "进行中任务" }, "hiddenTasks": { "type": "array", "items": { "type": "object" }, "description": "已过期任务" }, "abandonedTasks": { "type": "array", "items": { "type": "object" }, "description": "已放弃任务" }, "topCustomers": { "type": "array", "items": { "type": "object" }, "description": "TOP 客户(最多 20 条)" }, "serviceRecords": { "type": "array", "items": { "type": "object" }, "description": "近期服务记录" }, "historyMonths": { "type": "array", "items": { "type": "object" }, "description": "历史月份统计" }, "notes": { "type": "array", "items": { "type": "object" }, "description": "备注列表(最多 20 条)" } } }, "WxLoginRequest": { "properties": { "code": { "type": "string", "minLength": 1, "title": "Code", "description": "微信临时登录凭证" } }, "type": "object", "required": [ "code" ], "title": "WxLoginRequest", "description": "微信登录请求。" }, "WxLoginResponse": { "properties": { "access_token": { "type": "string", "title": "Access Token" }, "refresh_token": { "type": "string", "title": "Refresh Token" }, "token_type": { "type": "string", "title": "Token Type", "default": "bearer" }, "user_status": { "type": "string", "title": "User Status" }, "user_id": { "type": "integer", "title": "User Id" } }, "type": "object", "required": [ "access_token", "refresh_token", "user_status", "user_id" ], "title": "WxLoginResponse", "description": "微信登录响应。" }, "CoachBoardResponse": { "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/CoachBoardItem" }, "title": "Items" }, "dimType": { "type": "string", "title": "Dim Type" } }, "type": "object", "required": [ "items", "dimType" ], "title": "CoachBoardResponse", "description": "助教看板响应(BOARD-1)。" }, "CoachBoardItem": { "properties": { "id": { "type": "integer", "title": "Id" }, "name": { "type": "string", "title": "Name" }, "initial": { "type": "string", "title": "Initial" }, "avatarGradient": { "type": "string", "title": "Avatar Gradient" }, "level": { "type": "string", "title": "Level" }, "skills": { "type": "array", "items": { "type": "string" }, "title": "Skills" }, "topCustomers": { "type": "array", "items": { "type": "object" }, "title": "Top Customers" }, "perfHours": { "type": "number", "title": "Perf Hours" }, "salary": { "type": "number", "title": "Salary" }, "svAmount": { "type": "number", "title": "Sv Amount" }, "taskRecall": { "type": "object", "title": "Task Recall" } }, "type": "object", "required": [ "id", "name" ], "title": "CoachBoardItem", "description": "助教看板卡片项。" }, "CustomerBoardResponse": { "properties": { "items": { "type": "array", "items": { "type": "object" }, "title": "Items" }, "total": { "type": "integer", "title": "Total" }, "page": { "type": "integer", "title": "Page" }, "pageSize": { "type": "integer", "title": "Page Size" } }, "type": "object", "required": [ "items", "total", "page", "pageSize" ], "title": "CustomerBoardResponse", "description": "客户看板响应(BOARD-2)。" }, "FinanceBoardResponse": { "properties": { "overview": { "type": "object", "title": "Overview" }, "recharge": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Recharge" }, "revenue": { "type": "object", "title": "Revenue" }, "cashflow": { "type": "object", "title": "Cashflow" }, "expense": { "type": "object", "title": "Expense" }, "coachAnalysis": { "type": "object", "title": "Coach Analysis" } }, "type": "object", "required": [ "overview", "revenue", "cashflow", "expense", "coachAnalysis" ], "title": "FinanceBoardResponse", "description": "财务看板响应(BOARD-3)。area≠all 时 recharge 为 null。" }, "SkillTypeItem": { "properties": { "key": { "type": "string", "title": "Key" }, "label": { "type": "string", "title": "Label" }, "emoji": { "type": "string", "title": "Emoji" }, "cls": { "type": "string", "title": "Cls" } }, "type": "object", "required": [ "key", "label", "emoji", "cls" ], "title": "SkillTypeItem", "description": "技能类型配置项(CONFIG-1)。" } }, "securitySchemes": { "HTTPBearer": { "type": "http", "scheme": "bearer" } } } }