{
  "input": "{\"openapi\": \"3.0.3\", \"info\": {\"title\": \"食安平台全量接口（源码与前端证据合并）\", \"version\": \"2026.09.24\", \"description\": \"由后端控制器、仓库内 OpenAPI 与前端真实调用静态合并生成。导入不代表接口已测试通过；执行状态以测试报告为准。所有写入用例仅允许在隔离测试库运行。\"}, \"servers\": [{\"url\": \"http://localhost:3300\", \"description\": \"本地食安网关；在 Apifox 环境中按实际隔离测试地址覆盖\"}], \"tags\": [{\"name\": \"AI盒子与设备开放接口/AiboxAet6Control\"}, {\"name\": \"AI盒子与设备开放接口/AiboxAnalysisType\"}, {\"name\": \"AI盒子与设备开放接口/AiboxAuth\"}, {\"name\": \"AI盒子与设备开放接口/AiboxChannel\"}, {\"name\": \"AI盒子与设备开放接口/AiboxFaceInfo\"}, {\"name\": \"AI盒子与设备开放接口/AiboxFaceLib\"}, {\"name\": \"AI盒子与设备开放接口/AiboxInfo\"}, {\"name\": \"AI盒子与设备开放接口/AiboxPlateRecord\"}, {\"name\": \"AI盒子与设备开放接口/AiboxPush\"}, {\"name\": \"AI盒子与设备开放接口/AiboxSystem\"}, {\"name\": \"AI盒子与设备开放接口/AiboxVehicleInfo\"}, {\"name\": \"AI盒子与设备开放接口/AiboxVehicleLib\"}, {\"name\": \"AI盒子与设备开放接口/AiboxVideo\"}, {\"name\": \"AI盒子与设备开放接口/AiboxVideoSheet\"}, {\"name\": \"AI盒子与设备开放接口/CheckRecord\"}, {\"name\": \"AI盒子与设备开放接口/Dewo-Liuyangcheng\"}, {\"name\": \"AI盒子与设备开放接口/TrustIVS AI\"}, {\"name\": \"公共与系统/DB\"}, {\"name\": \"公共与系统/Device\"}, {\"name\": \"公共与系统/DeviceUpload\"}, {\"name\": \"公共与系统/Dewo-Liuyangcheng\"}, {\"name\": \"公共与系统/Health\"}, {\"name\": \"公共与系统/Home\"}, {\"name\": \"公共与系统/Integration\"}, {\"name\": \"公共与系统/Public Feedback\"}, {\"name\": \"公共与系统/Root\"}, {\"name\": \"公共与系统/Routes\"}, {\"name\": \"公共与系统/SamplingOperators\"}, {\"name\": \"公共与系统/SchoolReports\"}, {\"name\": \"公共与系统/System\"}, {\"name\": \"公共与系统/TrustIVS AI\"}, {\"name\": \"公共与系统/TrustIVS List\"}, {\"name\": \"公共与系统/TrustIVS Playback\"}, {\"name\": \"公共与系统/TrustIVS Stream\"}, {\"name\": \"公共与系统/TrustIVS.Camera\"}, {\"name\": \"公共与系统/TrustivsProxy\"}, {\"name\": \"大屏端/Screen Analytics\"}, {\"name\": \"学校端/AI\"}, {\"name\": \"学校端/Analytics\"}, {\"name\": \"学校端/Canteens\"}, {\"name\": \"学校端/CaterProxy\"}, {\"name\": \"学校端/Certificates\"}, {\"name\": \"学校端/Companion Meals\"}, {\"name\": \"学校端/Credentials\"}, {\"name\": \"学校端/Device Safety\"}, {\"name\": \"学校端/DeviceIotConfig\"}, {\"name\": \"学校端/Devices\"}, {\"name\": \"学校端/Dine\"}, {\"name\": \"学校端/DineApiAdapter\"}, {\"name\": \"学校端/Disinfection\"}, {\"name\": \"学校端/Emergency\"}, {\"name\": \"学校端/Hygiene\"}, {\"name\": \"学校端/Inventory\"}, {\"name\": \"学校端/MealPlans\"}, {\"name\": \"学校端/Morning Checks\"}, {\"name\": \"学校端/MorningCheckApiAdapter\"}, {\"name\": \"学校端/Personnel\"}, {\"name\": \"学校端/Pesticide\"}, {\"name\": \"学校端/Public Config\"}, {\"name\": \"学校端/Public Feedback\"}, {\"name\": \"学校端/Risk\"}, {\"name\": \"学校端/Sampling\"}, {\"name\": \"学校端/SamplingOperators\"}, {\"name\": \"学校端/School Home\"}, {\"name\": \"学校端/School Messages\"}, {\"name\": \"学校端/School System\"}, {\"name\": \"学校端/SchoolFoods\"}, {\"name\": \"学校端/Waste\"}, {\"name\": \"审计日志/Audit\"}, {\"name\": \"文件服务/Files\"}, {\"name\": \"文件服务/Static\"}, {\"name\": \"明厨亮灶/Bright Kitchen\"}, {\"name\": \"明厨亮灶/Bright Kitchen - Local\"}, {\"name\": \"物联网设备/IoT\"}, {\"name\": \"监管端/AI\"}, {\"name\": \"监管端/FoodWaste\"}, {\"name\": \"监管端/RegLedgers\"}, {\"name\": \"监管端/RegOverview\"}, {\"name\": \"监管端/Regulator Alerts\"}, {\"name\": \"监管端/Regulator Credentials\"}, {\"name\": \"监管端/Regulator Inspections\"}, {\"name\": \"监管端/Regulator Settings\"}, {\"name\": \"监管端/Regulator System\"}, {\"name\": \"监管端/Reports\"}, {\"name\": \"监管端/School Messages\"}, {\"name\": \"第三方设备数据接入/Dewo-Liuyangcheng\"}, {\"name\": \"第三方设备数据接入/PushWS\"}, {\"name\": \"第三方设备数据接入/Sakura\"}, {\"name\": \"第三方设备数据接入/Sammei\"}, {\"name\": \"第三方设备数据接入/WOS Integration\"}, {\"name\": \"认证与账号/Auth\"}], \"paths\": {\"/bright-local/aibox-boxes\": {\"delete\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"Delete AIBox box\", \"operationId\": \"BrightLocalController_deleteAiboxBox\", \"parameters\": [{\"name\": \"id\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(id)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:461；BrightLocalController.deleteAiboxBox\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:368；aiboxBoxDelete(id: number | string)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 461, \"controller\": \"BrightLocalController\", \"handler\": \"deleteAiboxBox\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 368, \"function\": \"aiboxBoxDelete(id: number | string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}, \"get\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"List AIBox boxes (id/name)\", \"operationId\": \"BrightLocalController_listAiboxBoxes\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:326；BrightLocalController.listAiboxBoxes\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 326, \"controller\": \"BrightLocalController\", \"handler\": \"listAiboxBoxes\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}, \"patch\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"Update AIBox box\", \"operationId\": \"BrightLocalController_updateAiboxBox\", \"parameters\": [{\"name\": \"id\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(id)；源码类型：string\"}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"oneOf\": [{\"type\": \"number\", \"example\": 1}, {\"type\": \"string\", \"example\": \"1\"}]}, \"canteenId\": {\"oneOf\": [{\"type\": \"number\", \"example\": 1}, {\"type\": \"string\", \"example\": \"1\"}, {}]}, \"aiboxName\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"aiboxBaseurl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}, \"aiboxAccount\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"aiboxPassword\": {\"type\": \"string\", \"example\": \"Test@123456\"}}}, \"example\": {\"schoolId\": 1, \"canteenId\": 1, \"aiboxName\": \"APIFOX_{{testBatch}}_测试数据\", \"aiboxBaseurl\": \"https://example.test/apifox-autotest.jpg\", \"aiboxAccount\": \"APIFOX_{{testBatch}}\", \"aiboxPassword\": \"Test@123456\"}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:427；BrightLocalController.updateAiboxBox\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:366；aiboxBoxUpdate(id: number | string, body: { schoolId?: number | string; canteenId?: number | string | null; aiboxName?: string; aiboxBaseurl?: string; aiboxAccount?: string; aiboxPassword?: string })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 427, \"controller\": \"BrightLocalController\", \"handler\": \"updateAiboxBox\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 366, \"function\": \"aiboxBoxUpdate(id: number | string, body: { schoolId?: number | string; canteenId?: number | string | null; aiboxName?: string; aiboxBaseurl?: string; aiboxAccount?: string; aiboxPassword?: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}, \"post\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"Create AIBox box\", \"operationId\": \"BrightLocalController_createAiboxBox\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"oneOf\": [{\"type\": \"number\", \"example\": 1}, {\"type\": \"string\", \"example\": \"1\"}]}, \"canteenId\": {\"oneOf\": [{\"type\": \"number\", \"example\": 1}, {\"type\": \"string\", \"example\": \"1\"}, {}]}, \"aiboxName\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"aiboxBaseurl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}, \"aiboxAccount\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"aiboxPassword\": {\"type\": \"string\", \"example\": \"Test@123456\"}}}, \"example\": {\"schoolId\": 1, \"canteenId\": 1, \"aiboxName\": \"APIFOX_{{testBatch}}_测试数据\", \"aiboxBaseurl\": \"https://example.test/apifox-autotest.jpg\", \"aiboxAccount\": \"APIFOX_{{testBatch}}\", \"aiboxPassword\": \"Test@123456\"}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:403；BrightLocalController.createAiboxBox\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:364；aiboxBoxCreate(body: { schoolId: number | string; canteenId?: number | string | null; aiboxName: string; aiboxBaseurl: string; aiboxAccount: string; aiboxPassword: string })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 403, \"controller\": \"BrightLocalController\", \"handler\": \"createAiboxBox\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 364, \"function\": \"aiboxBoxCreate(body: { schoolId: number | string; canteenId?: number | string | null; aiboxName: string; aiboxBaseurl: string; aiboxAccount: string; aiboxPassword: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/bright-local/channels\": {\"delete\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"BrightLocalController.remove\", \"operationId\": \"BrightLocalController_remove\", \"parameters\": [{\"name\": \"id\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(id)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:305；BrightLocalController.remove\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:370；aiboxLocalChannelDelete(id: number | string)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 305, \"controller\": \"BrightLocalController\", \"handler\": \"remove\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 370, \"function\": \"aiboxLocalChannelDelete(id: number | string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}, \"get\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"BrightLocalController.list\", \"operationId\": \"BrightLocalController_list\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：string\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：string\"}, {\"name\": \"channelId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(channelId)；源码类型：string\"}, {\"name\": \"channelName\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"description\": \"来源：Query(channelName)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:203；BrightLocalController.list\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:348；aiboxLocalChannels(params: { schoolId?: string | number; page?: number; pageSize?: number; channelId?: string; channelName?: string } | string | number)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 203, \"controller\": \"BrightLocalController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 348, \"function\": \"aiboxLocalChannels(params: { schoolId?: string | number; page?: number; pageSize?: number; channelId?: string; channelName?: string } | string | number)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}, \"patch\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"BrightLocalController.update\", \"operationId\": \"BrightLocalController_update\", \"parameters\": [{\"name\": \"id\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(id)；源码类型：string\"}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"canteenId\": {\"oneOf\": [{\"type\": \"number\", \"example\": 1}, {\"type\": \"string\", \"example\": \"1\"}, {}]}, \"unitName\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"aiboxId\": {\"oneOf\": [{\"type\": \"number\", \"example\": 1}, {\"type\": \"string\", \"example\": \"1\"}, {}]}, \"aiboxName\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"channelId\": {\"type\": \"string\", \"example\": \"1\"}, \"channelName\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"faislenationCode\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, {}]}, \"flv\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, {}]}, \"hls\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, {}]}, \"rtmp\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, {}]}, \"rtsp\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, {}]}, \"webrtc\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, {}]}, \"wsFlv\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, {}]}, \"enabled\": {\"type\": \"boolean\", \"example\": true}}}, \"example\": {\"canteenId\": 1, \"unitName\": \"APIFOX_{{testBatch}}_测试数据\", \"aiboxId\": 1, \"aiboxName\": \"APIFOX_{{testBatch}}_测试数据\", \"channelId\": \"1\", \"channelName\": \"APIFOX_{{testBatch}}_测试数据\", \"faislenationCode\": \"APIFOX_{{testBatch}}\", \"flv\": \"APIFOX_{{testBatch}}\", \"hls\": \"APIFOX_{{testBatch}}\", \"rtmp\": \"APIFOX_{{testBatch}}\", \"rtsp\": \"APIFOX_{{testBatch}}\", \"webrtc\": \"APIFOX_{{testBatch}}\", \"wsFlv\": \"APIFOX_{{testBatch}}\", \"enabled\": true}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:274；BrightLocalController.update\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:360；aiboxLocalChannelUpdate(id: number | string, patchBody: { canteenId?: number | string | null; unitName?: string; aiboxId?: number | string | null; aiboxName?: string; channelId?: string; channelName?: string; faislenationCode?: string | null; flv?: string | null; hls?: string | null; rtmp?: string | null; rtsp?: string | null; webrtc?: string | null; wsFlv?: string | null; enabled?: boolean })；body=patchBody\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 274, \"controller\": \"BrightLocalController\", \"handler\": \"update\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 360, \"function\": \"aiboxLocalChannelUpdate(id: number | string, patchBody: { canteenId?: number | string | null; unitName?: string; aiboxId?: number | string | null; aiboxName?: string; channelId?: string; channelName?: string; faislenationCode?: string | null; flv?: string | null; hls?: string | null; rtmp?: string | null; rtsp?: string | null; webrtc?: string | null; wsFlv?: string | null; enabled?: boolean })\", \"bodyExpression\": \"patchBody\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}, \"post\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"BrightLocalController.create\", \"operationId\": \"BrightLocalController_create\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"number\", \"example\": 1}, \"canteenId\": {\"oneOf\": [{\"type\": \"number\", \"example\": 1}, {\"type\": \"string\", \"example\": \"1\"}, {}]}, \"unitName\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"aiboxId\": {\"oneOf\": [{\"type\": \"number\", \"example\": 1}, {\"type\": \"string\", \"example\": \"1\"}, {}]}, \"aiboxName\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"channelId\": {\"type\": \"string\", \"example\": \"1\"}, \"channelName\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"faislenationCode\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"flv\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"hls\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"rtmp\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"rtsp\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"webrtc\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"wsFlv\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"enabled\": {\"type\": \"boolean\", \"example\": true}}, \"required\": [\"schoolId\", \"unitName\", \"channelId\"]}, \"example\": {\"schoolId\": 1, \"canteenId\": 1, \"unitName\": \"APIFOX_{{testBatch}}_测试数据\", \"aiboxId\": 1, \"aiboxName\": \"APIFOX_{{testBatch}}_测试数据\", \"channelId\": \"1\", \"channelName\": \"APIFOX_{{testBatch}}_测试数据\", \"faislenationCode\": \"APIFOX_{{testBatch}}\", \"flv\": \"APIFOX_{{testBatch}}\", \"hls\": \"APIFOX_{{testBatch}}\", \"rtmp\": \"APIFOX_{{testBatch}}\", \"rtsp\": \"APIFOX_{{testBatch}}\", \"webrtc\": \"APIFOX_{{testBatch}}\", \"wsFlv\": \"APIFOX_{{testBatch}}\", \"enabled\": true}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:244；BrightLocalController.create\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:358；aiboxLocalChannelCreate(body: { schoolId: number | string; canteenId?: number | string | null; unitName: string; aiboxId?: number | string | null; aiboxName?: string; channelId: string; channelName?: string; faislenationCode?: string; flv?: string; hls?: string; rtmp?: string; rtsp?: string; webrtc?: string; wsFlv?: string; enabled?: boolean })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 244, \"controller\": \"BrightLocalController\", \"handler\": \"create\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 358, \"function\": \"aiboxLocalChannelCreate(body: { schoolId: number | string; canteenId?: number | string | null; unitName: string; aiboxId?: number | string | null; aiboxName?: string; channelId: string; channelName?: string; faislenationCode?: string; flv?: string; hls?: string; rtmp?: string; rtsp?: string; webrtc?: string; wsFlv?: string; enabled?: boolean })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/school/companion-meals/{id}\": {\"delete\": {\"operationId\": \"CompanionMealController_remove\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Companion Meals\"], \"x-apifox-folder\": \"学校端/Companion Meals\", \"x-original-tags\": [\"Companion Meals\"], \"summary\": \"CompanionMealController.remove\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/companion-meal.controller.ts:50；CompanionMealController.remove\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1511；companionMealDelete(id: string | number)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/companion-meal.controller.ts\", \"line\": 50, \"controller\": \"CompanionMealController\", \"handler\": \"remove\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1511, \"function\": \"companionMealDelete(id: string | number)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"get\": {\"operationId\": \"CompanionMealController_detail\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Companion Meals\"], \"x-apifox-folder\": \"学校端/Companion Meals\", \"x-original-tags\": [\"Companion Meals\"], \"summary\": \"CompanionMealController.detail\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/companion-meal.controller.ts:37；CompanionMealController.detail\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1500；companionMealDetail(id: string | number)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/companion-meal.controller.ts\", \"line\": 37, \"controller\": \"CompanionMealController\", \"handler\": \"detail\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1500, \"function\": \"companionMealDetail(id: string | number)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"patch\": {\"operationId\": \"CompanionMealController_update\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\"}, \"example\": {}}}}, \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Companion Meals\"], \"x-apifox-folder\": \"学校端/Companion Meals\", \"x-original-tags\": [\"Companion Meals\"], \"summary\": \"CompanionMealController.update\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/companion-meal.controller.ts:43；CompanionMealController.update\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1502；companionMealUpdate(id: string | number, patch: any)；body=JSON.stringify(patch)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/companion-meal.controller.ts\", \"line\": 43, \"controller\": \"CompanionMealController\", \"handler\": \"update\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1502, \"function\": \"companionMealUpdate(id: string | number, patch: any)\", \"bodyExpression\": \"JSON.stringify(patch)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/device-iot\": {\"delete\": {\"tags\": [\"学校端/DeviceIotConfig\"], \"x-apifox-folder\": \"学校端/DeviceIotConfig\", \"summary\": \"删除设备接入配置\", \"operationId\": \"DeviceIotConfigsController_remove\", \"parameters\": [{\"name\": \"id\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(id)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/device-iot-configs.controller.ts:78；DeviceIotConfigsController.remove\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:741；deviceIotDelete(id: number)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/device-iot-configs.controller.ts\", \"line\": 78, \"controller\": \"DeviceIotConfigsController\", \"handler\": \"remove\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 741, \"function\": \"deviceIotDelete(id: number)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}, \"get\": {\"tags\": [\"学校端/DeviceIotConfig\"], \"x-apifox-folder\": \"学校端/DeviceIotConfig\", \"summary\": \"设备接入配置列表\", \"operationId\": \"DeviceIotConfigsController_list\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}, {\"name\": \"deviceKind\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(deviceKind)；源码类型：string\"}, {\"name\": \"vendor\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(vendor)；源码类型：string\"}, {\"name\": \"enabled\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"enum\": [\"true\", \"false\", \"all\"], \"example\": \"true\"}, \"description\": \"来源：Query(enabled)；源码类型：'true' | 'false' | 'all'\"}, {\"name\": \"q\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(q)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/device-iot-configs.controller.ts:19；DeviceIotConfigsController.list\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:738；deviceIotConfigs(params: { schoolId?: number; canteenId?: number; deviceKind?: string; vendor?: string; enabled?: 'true'|'false'|'all'; q?: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/device-iot-configs.controller.ts\", \"line\": 19, \"controller\": \"DeviceIotConfigsController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 738, \"function\": \"deviceIotConfigs(params: { schoolId?: number; canteenId?: number; deviceKind?: string; vendor?: string; enabled?: 'true'|'false'|'all'; q?: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}, \"patch\": {\"tags\": [\"学校端/DeviceIotConfig\"], \"x-apifox-folder\": \"学校端/DeviceIotConfig\", \"summary\": \"更新设备接入配置\", \"operationId\": \"DeviceIotConfigsController_update\", \"parameters\": [{\"name\": \"id\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(id)；源码类型：string\"}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/device-iot-configs.controller.ts:54；DeviceIotConfigsController.update\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:740；deviceIotUpdate(id: number, body: any)；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/device-iot-configs.controller.ts\", \"line\": 54, \"controller\": \"DeviceIotConfigsController\", \"handler\": \"update\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 740, \"function\": \"deviceIotUpdate(id: number, body: any)\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}, \"post\": {\"tags\": [\"学校端/DeviceIotConfig\"], \"x-apifox-folder\": \"学校端/DeviceIotConfig\", \"summary\": \"新增设备接入配置\", \"operationId\": \"DeviceIotConfigsController_create\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/device-iot-configs.controller.ts:43；DeviceIotConfigsController.create\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:739；deviceIotCreate(body: any)；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/device-iot-configs.controller.ts\", \"line\": 43, \"controller\": \"DeviceIotConfigsController\", \"handler\": \"create\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 739, \"function\": \"deviceIotCreate(body: any)\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/school/foods/{id}\": {\"delete\": {\"operationId\": \"SchoolFoodsController_remove\", \"summary\": \"删除菜品（并同步设备端删除）\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"code\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/SchoolFoods\"], \"x-apifox-folder\": \"学校端/SchoolFoods\", \"x-original-tags\": [\"SchoolFoods\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-foods.controller.ts:189；SchoolFoodsController.remove\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-foods.controller.ts\", \"line\": 189, \"controller\": \"SchoolFoodsController\", \"handler\": \"remove\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"patch\": {\"operationId\": \"SchoolFoodsController_update\", \"summary\": \"更新菜品（并同步设备端）\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/SchoolFoods\"], \"x-apifox-folder\": \"学校端/SchoolFoods\", \"x-original-tags\": [\"SchoolFoods\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-foods.controller.ts:155；SchoolFoodsController.update\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:687；schoolFoodsUpdate(id: number, body: any)；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-foods.controller.ts\", \"line\": 155, \"controller\": \"SchoolFoodsController\", \"handler\": \"update\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 687, \"function\": \"schoolFoodsUpdate(id: number, body: any)\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/meal-plans/{id}\": {\"delete\": {\"operationId\": \"MealPlansController_remove\", \"summary\": \"删除配餐\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/MealPlans\"], \"x-apifox-folder\": \"学校端/MealPlans\", \"x-original-tags\": [\"MealPlans\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/meal-plans.controller.ts:158；MealPlansController.remove\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:674；mealPlansDelete(id: number)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/meal-plans.controller.ts\", \"line\": 158, \"controller\": \"MealPlansController\", \"handler\": \"remove\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 674, \"function\": \"mealPlansDelete(id: number)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"patch\": {\"operationId\": \"MealPlansController_update\", \"summary\": \"更新配餐\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/MealPlans\"], \"x-apifox-folder\": \"学校端/MealPlans\", \"x-original-tags\": [\"MealPlans\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/meal-plans.controller.ts:117；MealPlansController.update\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:673；mealPlansUpdate(id: number, body: any)；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/meal-plans.controller.ts\", \"line\": 117, \"controller\": \"MealPlansController\", \"handler\": \"update\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 673, \"function\": \"mealPlansUpdate(id: number, body: any)\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/morning-checks/{id}\": {\"delete\": {\"operationId\": \"MorningCheckController_remove\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Morning Checks\"], \"x-apifox-folder\": \"学校端/Morning Checks\", \"x-original-tags\": [\"Morning Checks\"], \"summary\": \"MorningCheckController.remove\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/morning-check.controller.ts:287；MorningCheckController.remove\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:580；morningDelete(id: number)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/morning-check.controller.ts\", \"line\": 287, \"controller\": \"MorningCheckController\", \"handler\": \"remove\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 580, \"function\": \"morningDelete(id: number)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/sampling/operators\": {\"delete\": {\"operationId\": \"SamplingOperatorsController_remove\", \"summary\": \"批量移除留样人员\", \"parameters\": [{\"name\": \"ids\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(ids)；源码类型：string\"}, {\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"ids\"], \"properties\": {\"ids\": {\"type\": \"array\", \"items\": {\"type\": \"integer\"}}}}, \"example\": {\"ids\": [10]}}}}, \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/SamplingOperators\"], \"x-apifox-folder\": \"学校端/SamplingOperators\", \"x-original-tags\": [\"SamplingOperators\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sampling-operators.controller.ts:377；SamplingOperatorsController.remove\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sampling-operators.controller.ts\", \"line\": 377, \"controller\": \"SamplingOperatorsController\", \"handler\": \"remove\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"get\": {\"operationId\": \"SamplingOperatorsController_list\", \"summary\": \"留样人员列表\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}, {\"name\": \"canteenId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(canteenId)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/SamplingOperators\"], \"x-apifox-folder\": \"学校端/SamplingOperators\", \"x-original-tags\": [\"SamplingOperators\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sampling-operators.controller.ts:196；SamplingOperatorsController.list\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:729；samplingOpsList(params: { schoolId?: number; page?: number; pageSize?: number })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sampling-operators.controller.ts\", \"line\": 196, \"controller\": \"SamplingOperatorsController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 729, \"function\": \"samplingOpsList(params: { schoolId?: number; page?: number; pageSize?: number })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"SamplingOperatorsController_add\", \"summary\": \"添加留样人员\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"personnelIds\"], \"properties\": {\"schoolId\": {\"type\": \"integer\"}, \"canteenId\": {\"type\": \"integer\"}, \"personnelIds\": {\"type\": \"array\", \"items\": {\"type\": \"integer\"}}}}, \"example\": {\"schoolId\": 1, \"canteenId\": 1, \"personnelIds\": [10]}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/SamplingOperators\"], \"x-apifox-folder\": \"学校端/SamplingOperators\", \"x-original-tags\": [\"SamplingOperators\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sampling-operators.controller.ts:276；SamplingOperatorsController.add\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:730；samplingOpsAdd(body: { schoolId?: number; canteenId?: number; serialNumber?: string; password?: string; faceOssUrl?: string; faceFilePath?: string; personnelIds: number[] })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sampling-operators.controller.ts\", \"line\": 276, \"controller\": \"SamplingOperatorsController\", \"handler\": \"add\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 730, \"function\": \"samplingOpsAdd(body: { schoolId?: number; canteenId?: number; serialNumber?: string; password?: string; faceOssUrl?: string; faceFilePath?: string; personnelIds: number[] })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/waste/categories/{id}\": {\"delete\": {\"operationId\": \"WasteController_delete\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Waste\"], \"x-apifox-folder\": \"学校端/Waste\", \"x-original-tags\": [\"Waste\"], \"summary\": \"WasteController.delete\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/waste.controller.ts:40；WasteController.delete\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:935；wasteCategoryDelete(id: string)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/waste.controller.ts\", \"line\": 40, \"controller\": \"WasteController\", \"handler\": \"delete\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 935, \"function\": \"wasteCategoryDelete(id: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/waste/records/{id}\": {\"delete\": {\"operationId\": \"WasteController_deleteOne\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Waste\"], \"x-apifox-folder\": \"学校端/Waste\", \"x-original-tags\": [\"Waste\"], \"summary\": \"WasteController.deleteOne\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/waste.controller.ts:176；WasteController.deleteOne\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:965；wasteDelete(id: number)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/waste.controller.ts\", \"line\": 176, \"controller\": \"WasteController\", \"handler\": \"deleteOne\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 965, \"function\": \"wasteDelete(id: number)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"get\": {\"operationId\": \"WasteController_getOne\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Waste\"], \"x-apifox-folder\": \"学校端/Waste\", \"x-original-tags\": [\"Waste\"], \"summary\": \"WasteController.getOne\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/waste.controller.ts:171；WasteController.getOne\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/waste.controller.ts\", \"line\": 171, \"controller\": \"WasteController\", \"handler\": \"getOne\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/\": {\"get\": {\"operationId\": \"RootController_index\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/Root\"], \"x-apifox-folder\": \"公共与系统/Root\", \"x-original-tags\": [\"Root\"], \"summary\": \"RootController.index\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/root.controller.ts:9；RootController.index\\n\\n### 前端调用证据\\n- stream-tester: apps/stream-tester/server.js:123；frontend-helper；body=(_req, res) => { res.setHeader('Cache-Control', 'no-store'); res.sendFile(path.join(pub, 'index.html')); }\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/root.controller.ts\", \"line\": 9, \"controller\": \"RootController\", \"handler\": \"index\"}], \"x-frontend-evidence\": [{\"app\": \"stream-tester\", \"file\": \"apps/stream-tester/server.js\", \"line\": 123, \"function\": \"\", \"bodyExpression\": \"(_req, res) => { res.setHeader('Cache-Control', 'no-store'); res.sendFile(path.join(pub, 'index.html')); }\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/audit/logs\": {\"get\": {\"operationId\": \"AuditController_list\", \"summary\": \"Query audit logs (tenant isolated)\", \"parameters\": [{\"name\": \"excludeEventTypeLike\", \"required\": false, \"in\": \"query\", \"description\": \"Comma-separated patterns to exclude, e.g., reg.%\", \"schema\": {}}, {\"name\": \"keyword\", \"required\": false, \"in\": \"query\", \"schema\": {}}, {\"name\": \"to\", \"required\": false, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"format\": \"date-time\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"from\", \"required\": false, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"format\": \"date-time\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"objectId\", \"required\": false, \"in\": \"query\", \"schema\": {}}, {\"name\": \"objectType\", \"required\": false, \"in\": \"query\", \"schema\": {}}, {\"name\": \"actor\", \"required\": false, \"in\": \"query\", \"schema\": {}}, {\"name\": \"outcome\", \"required\": false, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"enum\": [\"success\", \"failed\", \"denied\", \"partial\"], \"example\": \"success\"}}, {\"name\": \"action\", \"required\": false, \"in\": \"query\", \"description\": \"create/read/update/delete/import/export/login/logout/approve/config_change/access\", \"schema\": {}}, {\"name\": \"eventTypeLike\", \"required\": false, \"in\": \"query\", \"description\": \"Prefix or LIKE pattern, e.g., auth.%\", \"schema\": {}}, {\"name\": \"eventType\", \"required\": false, \"in\": \"query\", \"schema\": {}}, {\"name\": \"pageSize\", \"required\": false, \"in\": \"query\", \"schema\": {\"type\": \"integer\", \"default\": 20, \"example\": 10}}, {\"name\": \"page\", \"required\": false, \"in\": \"query\", \"schema\": {\"type\": \"integer\", \"default\": 1, \"example\": 10}}], \"responses\": {\"200\": {\"description\": \"Paged audit logs\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"items\": {\"type\": \"array\", \"items\": {\"type\": \"object\"}}, \"total\": {\"type\": \"integer\"}, \"page\": {\"type\": \"integer\"}, \"pageSize\": {\"type\": \"integer\"}}}}}}, \"401\": {\"description\": \"Unauthorized\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}, \"403\": {\"description\": \"Forbidden\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}}, \"tags\": [\"审计日志/Audit\"], \"x-apifox-folder\": \"审计日志/Audit\", \"x-original-tags\": [\"Audit\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/audit/audit.controller.ts:17；AuditController.list\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/audit/audit.controller.ts\", \"line\": 17, \"controller\": \"AuditController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/audit/logs/{id}\": {\"get\": {\"tags\": [\"审计日志/Audit\"], \"x-apifox-folder\": \"审计日志/Audit\", \"summary\": \"Get single audit log by id (tenant isolated)\", \"operationId\": \"AuditController_detail\", \"parameters\": [{\"name\": \"id\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Param(id)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/audit/audit.controller.ts:70；AuditController.detail\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/audit.ts:47；fetchAuditLogDetail(id: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/audit/audit.controller.ts\", \"line\": 70, \"controller\": \"AuditController\", \"handler\": \"detail\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/audit.ts\", \"line\": 47, \"function\": \"fetchAuditLogDetail(id: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/audit/logs/export.csv\": {\"get\": {\"operationId\": \"AuditController_exportCsv\", \"summary\": \"Export audit logs as CSV (tenant isolated)\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"审计日志/Audit\"], \"x-apifox-folder\": \"审计日志/Audit\", \"x-original-tags\": [\"Audit\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/audit/audit.controller.ts:52；AuditController.exportCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/audit/audit.controller.ts\", \"line\": 52, \"controller\": \"AuditController\", \"handler\": \"exportCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/auth/me\": {\"get\": {\"operationId\": \"AuthController_me\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"认证与账号/Auth\"], \"x-apifox-folder\": \"认证与账号/Auth\", \"x-original-tags\": [\"Auth\"], \"summary\": \"AuthController.me\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/auth.controller.ts:215；AuthController.me\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/stores/auth.ts:106；refreshMe()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/auth.controller.ts\", \"line\": 215, \"controller\": \"AuthController\", \"handler\": \"me\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/stores/auth.ts\", \"line\": 106, \"function\": \"refreshMe()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/bright-local/ai/events\": {\"get\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"BrightLocalController.aiEvents\", \"operationId\": \"BrightLocalController_aiEvents\", \"parameters\": [{\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：string\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：string\"}, {\"name\": \"type\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(type)；源码类型：string\"}, {\"name\": \"status\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"enum\": [\"OPEN\", \"CLOSED\", \"FALSE\"], \"example\": \"OPEN\"}, \"description\": \"来源：Query(status)；源码类型：'OPEN' | 'CLOSED' | 'FALSE'\"}, {\"name\": \"canteenId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(canteenId)；源码类型：string\"}, {\"name\": \"start\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(start)；源码类型：string\"}, {\"name\": \"end\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(end)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:556；BrightLocalController.aiEvents\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:287；brightLocalAiEvents(params: { page?: number; pageSize?: number; type?: string; status?: 'OPEN'|'CLOSED'|'FALSE'|''; canteenId?: string|number; start?: string; end?: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 556, \"controller\": \"BrightLocalController\", \"handler\": \"aiEvents\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 287, \"function\": \"brightLocalAiEvents(params: { page?: number; pageSize?: number; type?: string; status?: 'OPEN'|'CLOSED'|'FALSE'|''; canteenId?: string|number; start?: string; end?: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/bright-local/ai/events/detail\": {\"get\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"BrightLocalController.detail\", \"operationId\": \"BrightLocalController_detail\", \"parameters\": [{\"name\": \"id\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(id)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:673；BrightLocalController.detail\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:298；brightLocalAiEventDetail(id: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 673, \"controller\": \"BrightLocalController\", \"handler\": \"detail\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 298, \"function\": \"brightLocalAiEventDetail(id: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/bright-local/ai/events/export.csv\": {\"get\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"Export local AI events (CSV)\", \"operationId\": \"BrightLocalController_exportCsv\", \"parameters\": [{\"name\": \"type\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(type)；源码类型：string\"}, {\"name\": \"status\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"enum\": [\"OPEN\", \"CLOSED\", \"FALSE\"], \"example\": \"OPEN\"}, \"description\": \"来源：Query(status)；源码类型：'OPEN' | 'CLOSED' | 'FALSE'\"}, {\"name\": \"canteenId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(canteenId)；源码类型：string\"}, {\"name\": \"start\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(start)；源码类型：string\"}, {\"name\": \"end\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(end)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:595；BrightLocalController.exportCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 595, \"controller\": \"BrightLocalController\", \"handler\": \"exportCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/bright-local/aibox-boxes/full\": {\"get\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"List AIBox boxes for management\", \"operationId\": \"BrightLocalController_listAiboxBoxesFull\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:376；BrightLocalController.listAiboxBoxesFull\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 376, \"controller\": \"BrightLocalController\", \"handler\": \"listAiboxBoxesFull\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/bright-local/playback\": {\"get\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"BrightLocalController.playback\", \"operationId\": \"BrightLocalController_playback\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}, {\"name\": \"channelId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(channelId)；源码类型：string\"}, {\"name\": \"date\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24\"}, \"description\": \"来源：Query(date)；源码类型：string\"}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：string\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:477；BrightLocalController.playback\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:282；brightLocalPlayback(schoolId: string, channelId: string, date: string, page: number, pageSize: number)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 477, \"controller\": \"BrightLocalController\", \"handler\": \"playback\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 282, \"function\": \"brightLocalPlayback(schoolId: string, channelId: string, date: string, page: number, pageSize: number)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/bright-local/strangers\": {\"get\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"List local strangers (paged)\", \"operationId\": \"BrightLocalController_strangers\", \"parameters\": [{\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：string\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：string\"}, {\"name\": \"canteenId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(canteenId)；源码类型：string\"}, {\"name\": \"start\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(start)；源码类型：string\"}, {\"name\": \"end\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(end)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:102；BrightLocalController.strangers\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:302；brightLocalStrangers(params: { canteenId?: string | number; start?: string; end?: string; page?: number; pageSize?: number })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 102, \"controller\": \"BrightLocalController\", \"handler\": \"strangers\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 302, \"function\": \"brightLocalStrangers(params: { canteenId?: string | number; start?: string; end?: string; page?: number; pageSize?: number })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/bright-local/strangers/export.csv\": {\"get\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"Export local strangers (CSV)\", \"operationId\": \"BrightLocalController_strangersExport\", \"parameters\": [{\"name\": \"canteenId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(canteenId)；源码类型：string\"}, {\"name\": \"start\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(start)；源码类型：string\"}, {\"name\": \"end\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(end)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:160；BrightLocalController.strangersExport\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 160, \"controller\": \"BrightLocalController\", \"handler\": \"strangersExport\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/bright/channels\": {\"get\": {\"operationId\": \"BrightController_channels\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"明厨亮灶/Bright Kitchen\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen\", \"x-original-tags\": [\"Bright Kitchen\"], \"summary\": \"BrightController.channels\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/bright.controller.ts:61；BrightController.channels\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/bright.controller.ts\", \"line\": 61, \"controller\": \"BrightController\", \"handler\": \"channels\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/bright/reg/cameras\": {\"get\": {\"operationId\": \"BrightController_regCameras\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"明厨亮灶/Bright Kitchen\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen\", \"x-original-tags\": [\"Bright Kitchen\"], \"summary\": \"BrightController.regCameras\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/bright.controller.ts:85；BrightController.regCameras\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/bright.controller.ts\", \"line\": 85, \"controller\": \"BrightController\", \"handler\": \"regCameras\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/bright/reg/download\": {\"get\": {\"operationId\": \"BrightController_regDownload\", \"parameters\": [{\"name\": \"cameraId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"明厨亮灶/Bright Kitchen\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen\", \"x-original-tags\": [\"Bright Kitchen\"], \"summary\": \"BrightController.regDownload\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/bright.controller.ts:319；BrightController.regDownload\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/bright.controller.ts\", \"line\": 319, \"controller\": \"BrightController\", \"handler\": \"regDownload\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/bright/reg/playback\": {\"get\": {\"operationId\": \"BrightController_playback\", \"parameters\": [{\"name\": \"cameraId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"明厨亮灶/Bright Kitchen\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen\", \"x-original-tags\": [\"Bright Kitchen\"], \"summary\": \"BrightController.playback\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/bright.controller.ts:177；BrightController.playback\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:342；brightPlayback(schoolId: string, cameraId: string, start: string, end: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/bright.controller.ts\", \"line\": 177, \"controller\": \"BrightController\", \"handler\": \"playback\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 342, \"function\": \"brightPlayback(schoolId: string, cameraId: string, start: string, end: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/bright/reg/snapshots\": {\"get\": {\"operationId\": \"BrightController_listSnaps\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"cameraId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"明厨亮灶/Bright Kitchen\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen\", \"x-original-tags\": [\"Bright Kitchen\"], \"summary\": \"BrightController.listSnaps\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/bright.controller.ts:269；BrightController.listSnaps\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:348；brightSnapshots(params: { schoolId?: string; cameraId?: string; start?: string; end?: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/bright.controller.ts\", \"line\": 269, \"controller\": \"BrightController\", \"handler\": \"listSnaps\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 348, \"function\": \"brightSnapshots(params: { schoolId?: string; cameraId?: string; start?: string; end?: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"BrightController_createSnap\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"明厨亮灶/Bright Kitchen\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen\", \"x-original-tags\": [\"Bright Kitchen\"], \"summary\": \"BrightController.createSnap\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"string\", \"example\": \"1\"}, \"cameraId\": {\"type\": \"string\", \"example\": \"1\"}, \"at\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"url\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}}, \"required\": [\"schoolId\", \"cameraId\"]}, \"example\": {\"schoolId\": \"1\", \"cameraId\": \"1\", \"at\": \"2026-09-24 10:00:00\", \"url\": \"https://example.test/apifox-autotest.jpg\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/bright.controller.ts:298；BrightController.createSnap\\n\\n### 前端调用证据\\n- mobile-emergency: apps/mobile-emergency/src/api/index.ts:12；makeSnapshot(b: { schoolId: string; cameraId: string; at?: string; url?: string })；body=b\\n- screen: apps/screen/src/api/index.ts:13；makeSnapshot(b: { schoolId: string; cameraId: string; at?: string; url?: string })；body=b\\n- web-regulator: apps/web-regulator/src/services/api.ts:357；brightCreateSnapshot(body: { schoolId: string; cameraId: string; at?: string; url?: string; })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/bright.controller.ts\", \"line\": 298, \"controller\": \"BrightController\", \"handler\": \"createSnap\"}], \"x-frontend-evidence\": [{\"app\": \"mobile-emergency\", \"file\": \"apps/mobile-emergency/src/api/index.ts\", \"line\": 12, \"function\": \"makeSnapshot(b: { schoolId: string; cameraId: string; at?: string; url?: string })\", \"bodyExpression\": \"b\"}, {\"app\": \"screen\", \"file\": \"apps/screen/src/api/index.ts\", \"line\": 13, \"function\": \"makeSnapshot(b: { schoolId: string; cameraId: string; at?: string; url?: string })\", \"bodyExpression\": \"b\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 357, \"function\": \"brightCreateSnapshot(body: { schoolId: string; cameraId: string; at?: string; url?: string; })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/bright/school/cameras\": {\"get\": {\"operationId\": \"BrightController_schoolCameras\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"明厨亮灶/Bright Kitchen\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen\", \"x-original-tags\": [\"Bright Kitchen\"], \"summary\": \"BrightController.schoolCameras\", \"security\": [], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/bright.controller.ts:118；BrightController.schoolCameras\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/bright.controller.ts\", \"line\": 118, \"controller\": \"BrightController\", \"handler\": \"schoolCameras\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/bright/school/download\": {\"get\": {\"operationId\": \"BrightController_schoolDownload\", \"parameters\": [{\"name\": \"cameraId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"明厨亮灶/Bright Kitchen\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen\", \"x-original-tags\": [\"Bright Kitchen\"], \"summary\": \"BrightController.schoolDownload\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/bright.controller.ts:331；BrightController.schoolDownload\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:335；brightDownload(schoolId: string, cameraId: string, start: string, end: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/bright.controller.ts\", \"line\": 331, \"controller\": \"BrightController\", \"handler\": \"schoolDownload\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 335, \"function\": \"brightDownload(schoolId: string, cameraId: string, start: string, end: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/bright/school/playback\": {\"get\": {\"operationId\": \"BrightController_schoolPlayback\", \"parameters\": [{\"name\": \"cameraId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"明厨亮灶/Bright Kitchen\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen\", \"x-original-tags\": [\"Bright Kitchen\"], \"summary\": \"BrightController.schoolPlayback\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/bright.controller.ts:198；BrightController.schoolPlayback\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:271；brightPlayback(schoolId: string, cameraId: string, start: string, end: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/bright.controller.ts\", \"line\": 198, \"controller\": \"BrightController\", \"handler\": \"schoolPlayback\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 271, \"function\": \"brightPlayback(schoolId: string, cameraId: string, start: string, end: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/bright/school/snapshots\": {\"get\": {\"operationId\": \"BrightController_schoolSnaps\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"cameraId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"明厨亮灶/Bright Kitchen\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen\", \"x-original-tags\": [\"Bright Kitchen\"], \"summary\": \"BrightController.schoolSnaps\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/bright.controller.ts:286；BrightController.schoolSnaps\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:341；brightSnapshots(params: { schoolId?: string; cameraId?: string; start?: string; end?: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/bright.controller.ts\", \"line\": 286, \"controller\": \"BrightController\", \"handler\": \"schoolSnaps\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 341, \"function\": \"brightSnapshots(params: { schoolId?: string; cameraId?: string; start?: string; end?: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"BrightController_createSchoolSnap\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"明厨亮灶/Bright Kitchen\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen\", \"x-original-tags\": [\"Bright Kitchen\"], \"summary\": \"BrightController.createSchoolSnap\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"string\", \"example\": \"1\"}, \"cameraId\": {\"type\": \"string\", \"example\": \"1\"}, \"at\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"url\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}}, \"required\": [\"cameraId\"]}, \"example\": {\"schoolId\": \"1\", \"cameraId\": \"1\", \"at\": \"2026-09-24 10:00:00\", \"url\": \"https://example.test/apifox-autotest.jpg\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/bright.controller.ts:312；BrightController.createSchoolSnap\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:376；brightCreateSnapshot(body: { schoolId?: string; cameraId: string; at?: string; url?: string; })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/bright.controller.ts\", \"line\": 312, \"controller\": \"BrightController\", \"handler\": \"createSchoolSnap\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 376, \"function\": \"brightCreateSnapshot(body: { schoolId?: string; cameraId: string; at?: string; url?: string; })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/bright/school/trustivs-camera-options\": {\"get\": {\"operationId\": \"BrightController_schoolTrustivsCameraOptions\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"明厨亮灶/Bright Kitchen\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen\", \"x-original-tags\": [\"Bright Kitchen\"], \"summary\": \"BrightController.schoolTrustivsCameraOptions\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/bright.controller.ts:248；BrightController.schoolTrustivsCameraOptions\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/bright.controller.ts\", \"line\": 248, \"controller\": \"BrightController\", \"handler\": \"schoolTrustivsCameraOptions\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/bright/school/trustivs-cameras\": {\"get\": {\"operationId\": \"BrightController_schoolTrustivsCameras\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"明厨亮灶/Bright Kitchen\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen\", \"x-original-tags\": [\"Bright Kitchen\"], \"summary\": \"BrightController.schoolTrustivsCameras\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/bright.controller.ts:212；BrightController.schoolTrustivsCameras\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/bright.controller.ts\", \"line\": 212, \"controller\": \"BrightController\", \"handler\": \"schoolTrustivsCameras\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/bright/start/{schoolId}/{cameraId}\": {\"get\": {\"operationId\": \"BrightController_start\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"cameraId\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"明厨亮灶/Bright Kitchen\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen\", \"x-original-tags\": [\"Bright Kitchen\"], \"summary\": \"BrightController.start\", \"security\": [], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/bright.controller.ts:71；BrightController.start\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:340；brightStart(schoolId: string, cameraId: string)\\n- web-school: apps/web-school/src/services/api.ts:269；brightStart(schoolId: string, cameraId: string)\\n- mobile-device: apps/mobile-device/src/services/api.ts:137；brightStart(schoolId: string|number, cameraId: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/bright.controller.ts\", \"line\": 71, \"controller\": \"BrightController\", \"handler\": \"start\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 340, \"function\": \"brightStart(schoolId: string, cameraId: string)\", \"bodyExpression\": \"\"}, {\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 269, \"function\": \"brightStart(schoolId: string, cameraId: string)\", \"bodyExpression\": \"\"}, {\"app\": \"mobile-device\", \"file\": \"apps/mobile-device/src/services/api.ts\", \"line\": 137, \"function\": \"brightStart(schoolId: string|number, cameraId: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/cabinet/findDeviceInfo\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/Dewo-Liuyangcheng\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/Dewo-Liuyangcheng\", \"summary\": \"设备心跳\", \"operationId\": \"DewoLiuyangchengController_heartbeat\", \"parameters\": [{\"name\": \"type\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(type)；源码类型：string\"}, {\"name\": \"serialNum\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(serialNum)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts:394；DewoLiuyangchengController.heartbeat\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts\", \"line\": 394, \"controller\": \"DewoLiuyangchengController\", \"handler\": \"heartbeat\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/device/morningChecker/employeeList\": {\"get\": {\"operationId\": \"DeviceController_employeeList\", \"parameters\": [{\"name\": \"equipmentCode\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/Device\"], \"x-apifox-folder\": \"公共与系统/Device\", \"x-original-tags\": [\"Device\"], \"summary\": \"DeviceController.employeeList\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/device.controller.ts:14；DeviceController.employeeList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/device.controller.ts\", \"line\": 14, \"controller\": \"DeviceController\", \"handler\": \"employeeList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/deviceIot/serials\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/Dewo-Liuyangcheng\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/Dewo-Liuyangcheng\", \"summary\": \"列出已注册的设备序列号（device_iot_configs.serial_number）\", \"operationId\": \"DewoLiuyangchengController_listSerials\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts:282；DewoLiuyangchengController.listSerials\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:745；deviceIotSerials()\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts\", \"line\": 282, \"controller\": \"DewoLiuyangchengController\", \"handler\": \"listSerials\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 745, \"function\": \"deviceIotSerials()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/api/devices\": {\"get\": {\"operationId\": \"IntegrationController_listDevices\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/Integration\"], \"x-apifox-folder\": \"公共与系统/Integration\", \"x-original-tags\": [\"Integration\"], \"summary\": \"IntegrationController.listDevices\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/integration.controller.ts:50；IntegrationController.listDevices\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/integration.controller.ts\", \"line\": 50, \"controller\": \"IntegrationController\", \"handler\": \"listDevices\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/api/employees\": {\"get\": {\"operationId\": \"IntegrationController_listEmployees\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/Integration\"], \"x-apifox-folder\": \"公共与系统/Integration\", \"x-original-tags\": [\"Integration\"], \"summary\": \"IntegrationController.listEmployees\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/integration.controller.ts:20；IntegrationController.listEmployees\\n\\n### 前端调用证据\\n- mobile-device: apps/mobile-device/src/api.ts:21；listEmployees()\\n- mobile-device: apps/mobile-device/src/api/integration.ts:38；megoEmployees()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/integration.controller.ts\", \"line\": 20, \"controller\": \"IntegrationController\", \"handler\": \"listEmployees\"}], \"x-frontend-evidence\": [{\"app\": \"mobile-device\", \"file\": \"apps/mobile-device/src/api.ts\", \"line\": 21, \"function\": \"listEmployees()\", \"bodyExpression\": \"\"}, {\"app\": \"mobile-device\", \"file\": \"apps/mobile-device/src/api/integration.ts\", \"line\": 38, \"function\": \"megoEmployees()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/files/view/{name}\": {\"get\": {\"operationId\": \"FilesController_view\", \"parameters\": [{\"name\": \"name\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}}, {\"name\": \"path\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Param(path)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"文件服务/Files\"], \"x-apifox-folder\": \"文件服务/Files\", \"x-original-tags\": [\"Files\"], \"summary\": \"FilesController.view\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/files.controller.ts:91；FilesController.view\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/files.controller.ts\", \"line\": 91, \"controller\": \"FilesController\", \"handler\": \"view\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/gateway/openApi/aet6control/beepStatus\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxAet6Control\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxAet6Control\", \"summary\": \"AiboxAet6ControlController.beepStatus\", \"operationId\": \"AiboxAet6ControlController_beepStatus\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts:17；AiboxAet6ControlController.beepStatus\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts\", \"line\": 17, \"controller\": \"AiboxAet6ControlController\", \"handler\": \"beepStatus\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/aet6control/getAllConfig\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxAet6Control\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxAet6Control\", \"summary\": \"AiboxAet6ControlController.getAllConfig\", \"operationId\": \"AiboxAet6ControlController_getAllConfig\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts:25；AiboxAet6ControlController.getAllConfig\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts\", \"line\": 25, \"controller\": \"AiboxAet6ControlController\", \"handler\": \"getAllConfig\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/aet6control/ledStatus\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxAet6Control\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxAet6Control\", \"summary\": \"AiboxAet6ControlController.ledStatus\", \"operationId\": \"AiboxAet6ControlController_ledStatus\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts:15；AiboxAet6ControlController.ledStatus\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts\", \"line\": 15, \"controller\": \"AiboxAet6ControlController\", \"handler\": \"ledStatus\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/aet6control/pwrStatus\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxAet6Control\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxAet6Control\", \"summary\": \"AiboxAet6ControlController.pwrStatus\", \"operationId\": \"AiboxAet6ControlController_pwrStatus\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts:19；AiboxAet6ControlController.pwrStatus\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts\", \"line\": 19, \"controller\": \"AiboxAet6ControlController\", \"handler\": \"pwrStatus\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/aet6control/reboot\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxAet6Control\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxAet6Control\", \"summary\": \"AiboxAet6ControlController.reboot\", \"operationId\": \"AiboxAet6ControlController_reboot\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts:26；AiboxAet6ControlController.reboot\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts\", \"line\": 26, \"controller\": \"AiboxAet6ControlController\", \"handler\": \"reboot\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/aet6control/setBeep\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxAet6Control\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxAet6Control\", \"summary\": \"AiboxAet6ControlController.setBeep\", \"operationId\": \"AiboxAet6ControlController_setBeep\", \"parameters\": [{\"name\": \"beep\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(beep)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts:16；AiboxAet6ControlController.setBeep\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts\", \"line\": 16, \"controller\": \"AiboxAet6ControlController\", \"handler\": \"setBeep\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/aet6control/setBitStream\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxAet6Control\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxAet6Control\", \"summary\": \"AiboxAet6ControlController.setBitStream\", \"operationId\": \"AiboxAet6ControlController_setBitStream\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts:21；AiboxAet6ControlController.setBitStream\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts\", \"line\": 21, \"controller\": \"AiboxAet6ControlController\", \"handler\": \"setBitStream\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/aet6control/setEncodeMode\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxAet6Control\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxAet6Control\", \"summary\": \"AiboxAet6ControlController.setEncodeMode\", \"operationId\": \"AiboxAet6ControlController_setEncodeMode\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts:22；AiboxAet6ControlController.setEncodeMode\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts\", \"line\": 22, \"controller\": \"AiboxAet6ControlController\", \"handler\": \"setEncodeMode\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/aet6control/setFrames\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxAet6Control\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxAet6Control\", \"summary\": \"AiboxAet6ControlController.setFrames\", \"operationId\": \"AiboxAet6ControlController_setFrames\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts:23；AiboxAet6ControlController.setFrames\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts\", \"line\": 23, \"controller\": \"AiboxAet6ControlController\", \"handler\": \"setFrames\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/aet6control/setled\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxAet6Control\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxAet6Control\", \"summary\": \"AiboxAet6ControlController.setLed\", \"operationId\": \"AiboxAet6ControlController_setLed\", \"parameters\": [{\"name\": \"red\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(red)；源码类型：string\"}, {\"name\": \"green\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(green)；源码类型：string\"}, {\"name\": \"blue\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(blue)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts:11；AiboxAet6ControlController.setLed\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts\", \"line\": 11, \"controller\": \"AiboxAet6ControlController\", \"handler\": \"setLed\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/aet6control/setPixel\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxAet6Control\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxAet6Control\", \"summary\": \"AiboxAet6ControlController.setPixel\", \"operationId\": \"AiboxAet6ControlController_setPixel\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts:24；AiboxAet6ControlController.setPixel\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts\", \"line\": 24, \"controller\": \"AiboxAet6ControlController\", \"handler\": \"setPixel\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/aet6control/setPwr\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxAet6Control\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxAet6Control\", \"summary\": \"AiboxAet6ControlController.setPwr\", \"operationId\": \"AiboxAet6ControlController_setPwr\", \"parameters\": [{\"name\": \"on\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(on)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts:18；AiboxAet6ControlController.setPwr\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts\", \"line\": 18, \"controller\": \"AiboxAet6ControlController\", \"handler\": \"setPwr\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/aet6control/setUsbCamera\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxAet6Control\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxAet6Control\", \"summary\": \"AiboxAet6ControlController.setUsbCamera\", \"operationId\": \"AiboxAet6ControlController_setUsbCamera\", \"parameters\": [{\"name\": \"enable\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(enable)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts:20；AiboxAet6ControlController.setUsbCamera\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-aet6control.controller.ts\", \"line\": 20, \"controller\": \"AiboxAet6ControlController\", \"handler\": \"setUsbCamera\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/AnalysisType/getAnalysistypes\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxAnalysisType\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxAnalysisType\", \"summary\": \"AiboxAnalysisTypeController.getAnalysistypes\", \"operationId\": \"AiboxAnalysisTypeController_getAnalysistypes\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-analysis-type.controller.ts:11；AiboxAnalysisTypeController.getAnalysistypes\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-analysis-type.controller.ts\", \"line\": 11, \"controller\": \"AiboxAnalysisTypeController\", \"handler\": \"getAnalysistypes\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/autoinfo/delete\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVehicleInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVehicleInfo\", \"summary\": \"AiboxVehicleInfoController.delete\", \"operationId\": \"AiboxVehicleInfoController_delete\", \"parameters\": [{\"name\": \"id\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(id)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehicleinfo.controller.ts:12；AiboxVehicleInfoController.delete\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehicleinfo.controller.ts\", \"line\": 12, \"controller\": \"AiboxVehicleInfoController\", \"handler\": \"delete\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/autolib/delete\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVehicleLib\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVehicleLib\", \"summary\": \"AiboxVehicleLibController.delete\", \"operationId\": \"AiboxVehicleLibController_delete\", \"parameters\": [{\"name\": \"fnumber\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"description\": \"来源：Query(fnumber)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehiclelib.controller.ts:12；AiboxVehicleLibController.delete\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehiclelib.controller.ts\", \"line\": 12, \"controller\": \"AiboxVehicleLibController\", \"handler\": \"delete\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/autolib/disable\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVehicleLib\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVehicleLib\", \"summary\": \"AiboxVehicleLibController.disable\", \"operationId\": \"AiboxVehicleLibController_disable\", \"parameters\": [{\"name\": \"fnumber\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"description\": \"来源：Query(fnumber)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehiclelib.controller.ts:14；AiboxVehicleLibController.disable\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehiclelib.controller.ts\", \"line\": 14, \"controller\": \"AiboxVehicleLibController\", \"handler\": \"disable\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/autolib/enable\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVehicleLib\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVehicleLib\", \"summary\": \"AiboxVehicleLibController.enable\", \"operationId\": \"AiboxVehicleLibController_enable\", \"parameters\": [{\"name\": \"fnumber\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"description\": \"来源：Query(fnumber)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehiclelib.controller.ts:13；AiboxVehicleLibController.enable\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehiclelib.controller.ts\", \"line\": 13, \"controller\": \"AiboxVehicleLibController\", \"handler\": \"enable\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/faceinfo/delete\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxFaceInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxFaceInfo\", \"summary\": \"AiboxFaceInfoController.delete\", \"operationId\": \"AiboxFaceInfoController_delete\", \"parameters\": [{\"name\": \"idnum\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(idnum)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts:23；AiboxFaceInfoController.delete\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts\", \"line\": 23, \"controller\": \"AiboxFaceInfoController\", \"handler\": \"delete\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/facelib/delete\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxFaceLib\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxFaceLib\", \"summary\": \"AiboxFaceLibController.delete\", \"operationId\": \"AiboxFaceLibController_delete\", \"parameters\": [{\"name\": \"fnumber\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"description\": \"来源：Query(fnumber)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-facelib.controller.ts:13；AiboxFaceLibController.delete\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-facelib.controller.ts\", \"line\": 13, \"controller\": \"AiboxFaceLibController\", \"handler\": \"delete\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/setLocalTime\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxSystem\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxSystem\", \"summary\": \"AiboxSystemController.setLocalTime\", \"operationId\": \"AiboxSystemController_setLocalTime\", \"parameters\": [{\"name\": \"time\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(time)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-system.controller.ts:11；AiboxSystemController.setLocalTime\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-system.controller.ts\", \"line\": 11, \"controller\": \"AiboxSystemController\", \"handler\": \"setLocalTime\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gatewayGBS/openApi/getBackUrl\": {\"get\": {\"operationId\": \"TrustivsPlaybackController_getBackUrl\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/TrustIVS Playback\"], \"x-apifox-folder\": \"公共与系统/TrustIVS Playback\", \"x-original-tags\": [\"TrustIVS Playback\"], \"summary\": \"TrustivsPlaybackController.getBackUrl\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs/controller/playback.controller.ts:15；TrustivsPlaybackController.getBackUrl\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/views/TrustivsTest.vue:104；onGetBackUrl()；body={ serial: serial.value, code: code.value, starttime: starttime.value, endtime: endtime.value }\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs/controller/playback.controller.ts\", \"line\": 15, \"controller\": \"TrustivsPlaybackController\", \"handler\": \"getBackUrl\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/views/TrustivsTest.vue\", \"line\": 104, \"function\": \"onGetBackUrl()\", \"bodyExpression\": \"{ serial: serial.value, code: code.value, starttime: starttime.value, endtime: endtime.value }\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/gatewayGBS/openApi/getCameraByCompany\": {\"get\": {\"operationId\": \"CameraController_getCameraByCompany\", \"summary\": \"按公司获取摄像头（内部POST优先，含405回退）\", \"parameters\": [{\"name\": \"pageNum\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"pageSize\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/TrustIVS.Camera\"], \"x-apifox-folder\": \"公共与系统/TrustIVS.Camera\", \"x-original-tags\": [\"TrustIVS.Camera\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs/camera.controller.ts:15；CameraController.getCameraByCompany\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/views/TrustivsTest.vue:142；onGetCameraByCompany()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs/camera.controller.ts\", \"line\": 15, \"controller\": \"CameraController\", \"handler\": \"getCameraByCompany\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/views/TrustivsTest.vue\", \"line\": 142, \"function\": \"onGetCameraByCompany()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/gatewayGBS/openApi/getDownloadUrl\": {\"get\": {\"operationId\": \"TrustivsPlaybackController_getDownloadUrl\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/TrustIVS Playback\"], \"x-apifox-folder\": \"公共与系统/TrustIVS Playback\", \"x-original-tags\": [\"TrustIVS Playback\"], \"summary\": \"TrustivsPlaybackController.getDownloadUrl\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs/controller/playback.controller.ts:21；TrustivsPlaybackController.getDownloadUrl\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/views/TrustivsTest.vue:113；onGetDownloadUrl()；body={ serial: serial.value, code: code.value, starttime: starttime.value, endtime: endtime.value }\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs/controller/playback.controller.ts\", \"line\": 21, \"controller\": \"TrustivsPlaybackController\", \"handler\": \"getDownloadUrl\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/views/TrustivsTest.vue\", \"line\": 113, \"function\": \"onGetDownloadUrl()\", \"bodyExpression\": \"{ serial: serial.value, code: code.value, starttime: starttime.value, endtime: endtime.value }\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/gatewayGBS/openApi/getSnap\": {\"get\": {\"operationId\": \"TrustivsStreamController_getSnap\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/TrustIVS Stream\"], \"x-apifox-folder\": \"公共与系统/TrustIVS Stream\", \"x-original-tags\": [\"TrustIVS Stream\"], \"summary\": \"TrustivsStreamController.getSnap\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs/controller/stream.controller.ts:21；TrustivsStreamController.getSnap\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs/controller/stream.controller.ts\", \"line\": 21, \"controller\": \"TrustivsStreamController\", \"handler\": \"getSnap\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/health\": {\"get\": {\"operationId\": \"HealthController_ping\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/Health\"], \"x-apifox-folder\": \"公共与系统/Health\", \"x-original-tags\": [\"Health\"], \"summary\": \"HealthController.ping\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/health.controller.ts:9；HealthController.ping\\n\\n### 前端调用证据\\n- screen: apps/screen/src/api/index.ts:5；serverTime()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/health.controller.ts\", \"line\": 9, \"controller\": \"HealthController\", \"handler\": \"ping\"}], \"x-frontend-evidence\": [{\"app\": \"screen\", \"file\": \"apps/screen/src/api/index.ts\", \"line\": 5, \"function\": \"serverTime()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/health/db\": {\"get\": {\"operationId\": \"DbHealthController_health\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/DB\"], \"x-apifox-folder\": \"公共与系统/DB\", \"x-original-tags\": [\"DB\"], \"summary\": \"DbHealthController.health\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/db.controller.ts:11；DbHealthController.health\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/db.controller.ts\", \"line\": 11, \"controller\": \"DbHealthController\", \"handler\": \"health\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/health/routes\": {\"get\": {\"operationId\": \"RoutesController_list\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/Routes\"], \"x-apifox-folder\": \"公共与系统/Routes\", \"x-original-tags\": [\"Routes\"], \"summary\": \"RoutesController.list\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/routes.controller.ts:11；RoutesController.list\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/routes.controller.ts\", \"line\": 11, \"controller\": \"RoutesController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/home/devices\": {\"get\": {\"operationId\": \"HomeController_devices\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/Home\"], \"x-apifox-folder\": \"公共与系统/Home\", \"x-original-tags\": [\"Home\"], \"summary\": \"HomeController.devices\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/home.controller.ts:31；HomeController.devices\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:237；devices()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/home.controller.ts\", \"line\": 31, \"controller\": \"HomeController\", \"handler\": \"devices\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 237, \"function\": \"devices()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/home/hygiene\": {\"get\": {\"operationId\": \"HomeController_hygiene\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/Home\"], \"x-apifox-folder\": \"公共与系统/Home\", \"x-original-tags\": [\"Home\"], \"summary\": \"HomeController.hygiene\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/home.controller.ts:24；HomeController.hygiene\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:236；hygiene()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/home.controller.ts\", \"line\": 24, \"controller\": \"HomeController\", \"handler\": \"hygiene\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 236, \"function\": \"hygiene()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/home/inbound\": {\"get\": {\"operationId\": \"HomeController_inbound\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/Home\"], \"x-apifox-folder\": \"公共与系统/Home\", \"x-original-tags\": [\"Home\"], \"summary\": \"HomeController.inbound\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/home.controller.ts:10；HomeController.inbound\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:234；inbound()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/home.controller.ts\", \"line\": 10, \"controller\": \"HomeController\", \"handler\": \"inbound\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 234, \"function\": \"inbound()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/home/outbound\": {\"get\": {\"operationId\": \"HomeController_outbound\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/Home\"], \"x-apifox-folder\": \"公共与系统/Home\", \"x-original-tags\": [\"Home\"], \"summary\": \"HomeController.outbound\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/home.controller.ts:17；HomeController.outbound\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:235；outbound()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/home.controller.ts\", \"line\": 17, \"controller\": \"HomeController\", \"handler\": \"outbound\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 235, \"function\": \"outbound()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/home/parent-feedback\": {\"get\": {\"operationId\": \"HomeController_parentFeedback\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/Home\"], \"x-apifox-folder\": \"公共与系统/Home\", \"x-original-tags\": [\"Home\"], \"summary\": \"HomeController.parentFeedback\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/home.controller.ts:38；HomeController.parentFeedback\\n\\n### 前端调用证据\\n- mobile-emergency: apps/mobile-emergency/src/api/index.ts:19；feedback()\\n- web-school: apps/web-school/src/services/api.ts:377；feedback()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/home.controller.ts\", \"line\": 38, \"controller\": \"HomeController\", \"handler\": \"parentFeedback\"}], \"x-frontend-evidence\": [{\"app\": \"mobile-emergency\", \"file\": \"apps/mobile-emergency/src/api/index.ts\", \"line\": 19, \"function\": \"feedback()\", \"bodyExpression\": \"\"}, {\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 377, \"function\": \"feedback()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/inspectionRecord/getLastRecord\": {\"get\": {\"tags\": [\"公共与系统/Dewo-Liuyangcheng\"], \"x-apifox-folder\": \"公共与系统/Dewo-Liuyangcheng\", \"summary\": \"得沃晨检机查询当天最近晨检记录\", \"operationId\": \"DewoLiuyangchengController_dewoMorningLastRecord\", \"parameters\": [{\"name\": \"personId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(personId)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts:489；DewoLiuyangchengController.dewoMorningLastRecord\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts\", \"line\": 489, \"controller\": \"DewoLiuyangchengController\", \"handler\": \"dewoMorningLastRecord\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/iot/cameras\": {\"get\": {\"operationId\": \"IotController_cameras\", \"parameters\": [{\"name\": \"company\", \"in\": \"query\", \"required\": true, \"schema\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}], \"nullable\": true}, \"description\": \"来源：Query(company)；源码类型：string | undefined\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"物联网设备/IoT\"], \"x-apifox-folder\": \"物联网设备/IoT\", \"x-original-tags\": [\"IoT\"], \"summary\": \"IotController.cameras\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/iot.controller.ts:13；IotController.cameras\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/iot.controller.ts\", \"line\": 13, \"controller\": \"IotController\", \"handler\": \"cameras\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/iot/streams/back\": {\"get\": {\"operationId\": \"IotController_back\", \"parameters\": [{\"name\": \"cameraId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"物联网设备/IoT\"], \"x-apifox-folder\": \"物联网设备/IoT\", \"x-original-tags\": [\"IoT\"], \"summary\": \"IotController.back\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/iot.controller.ts:49；IotController.back\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/iot.controller.ts\", \"line\": 49, \"controller\": \"IotController\", \"handler\": \"back\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/iot/streams/download\": {\"get\": {\"operationId\": \"IotController_download\", \"parameters\": [{\"name\": \"cameraId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"物联网设备/IoT\"], \"x-apifox-folder\": \"物联网设备/IoT\", \"x-original-tags\": [\"IoT\"], \"summary\": \"IotController.download\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/iot.controller.ts:60；IotController.download\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/iot.controller.ts\", \"line\": 60, \"controller\": \"IotController\", \"handler\": \"download\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/iot/streams/play\": {\"get\": {\"operationId\": \"IotController_play\", \"parameters\": [{\"name\": \"cameraId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"物联网设备/IoT\"], \"x-apifox-folder\": \"物联网设备/IoT\", \"x-original-tags\": [\"IoT\"], \"summary\": \"IotController.play\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/iot.controller.ts:30；IotController.play\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/api/streams.ts:37；play(cameraId: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/iot.controller.ts\", \"line\": 30, \"controller\": \"IotController\", \"handler\": \"play\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/api/streams.ts\", \"line\": 37, \"function\": \"play(cameraId: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/iot/streams/snapshot\": {\"get\": {\"operationId\": \"IotController_snapshot\", \"parameters\": [{\"name\": \"cameraId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"物联网设备/IoT\"], \"x-apifox-folder\": \"物联网设备/IoT\", \"x-original-tags\": [\"IoT\"], \"summary\": \"IotController.snapshot\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/iot.controller.ts:44；IotController.snapshot\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/iot.controller.ts\", \"line\": 44, \"controller\": \"IotController\", \"handler\": \"snapshot\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/api/morning-checks\": {\"get\": {\"operationId\": \"IntegrationController_listMorningChecks\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/Integration\"], \"x-apifox-folder\": \"公共与系统/Integration\", \"x-original-tags\": [\"Integration\"], \"summary\": \"IntegrationController.listMorningChecks\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/integration.controller.ts:194；IntegrationController.listMorningChecks\\n\\n### 前端调用证据\\n- mobile-device: apps/mobile-device/src/api/integration.ts:45；megoMorningChecks()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/integration.controller.ts\", \"line\": 194, \"controller\": \"IntegrationController\", \"handler\": \"listMorningChecks\"}], \"x-frontend-evidence\": [{\"app\": \"mobile-device\", \"file\": \"apps/mobile-device/src/api/integration.ts\", \"line\": 45, \"function\": \"megoMorningChecks()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/openApi/view/getChannelStream\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVideo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVideo\", \"summary\": \"AiboxVideoController.getChannelStream\", \"operationId\": \"AiboxVideoController_getChannelStream\", \"parameters\": [{\"name\": \"channel\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(channel)；源码类型：string\"}, {\"name\": \"protocol\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(protocol)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts:11；AiboxVideoController.getChannelStream\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts\", \"line\": 11, \"controller\": \"AiboxVideoController\", \"handler\": \"getChannelStream\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/view/getRecordLiveUrlBySDK\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVideo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVideo\", \"summary\": \"AiboxVideoController.getRecordLiveUrlBySDK\", \"operationId\": \"AiboxVideoController_getRecordLiveUrlBySDK\", \"parameters\": [{\"name\": \"channel\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(channel)；源码类型：string\"}, {\"name\": \"protocol\", \"in\": \"query\", \"required\": true, \"schema\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}], \"nullable\": true}, \"description\": \"来源：Query(protocol)；源码类型：string | undefined\"}, {\"name\": \"starttime\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(starttime)；源码类型：string\"}, {\"name\": \"endtime\", \"in\": \"query\", \"required\": true, \"schema\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}], \"nullable\": true}, \"description\": \"来源：Query(endtime)；源码类型：string | undefined\"}, {\"name\": \"speed\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"enum\": [\"0.5\", \"1\", \"2\", \"4\"], \"example\": \"0.5\"}, \"description\": \"来源：Query(speed)；源码类型：'0.5' | '1' | '2' | '4'\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts:89；AiboxVideoController.getRecordLiveUrlBySDK\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts\", \"line\": 89, \"controller\": \"AiboxVideoController\", \"handler\": \"getRecordLiveUrlBySDK\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/view/getSDKFileProgress\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVideo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVideo\", \"summary\": \"AiboxVideoController.getSDKFileProgress\", \"operationId\": \"AiboxVideoController_getSDKFileProgress\", \"parameters\": [{\"name\": \"streamid\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(streamid)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts:67；AiboxVideoController.getSDKFileProgress\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts\", \"line\": 67, \"controller\": \"AiboxVideoController\", \"handler\": \"getSDKFileProgress\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/view/getSDKRecordList\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVideo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVideo\", \"summary\": \"AiboxVideoController.getSDKRecordList\", \"operationId\": \"AiboxVideoController_getSDKRecordList\", \"parameters\": [{\"name\": \"channel\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(channel)；源码类型：string\"}, {\"name\": \"starttime\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(starttime)；源码类型：string\"}, {\"name\": \"endtime\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(endtime)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts:79；AiboxVideoController.getSDKRecordList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts\", \"line\": 79, \"controller\": \"AiboxVideoController\", \"handler\": \"getSDKRecordList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/view/getSnapByChannel\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVideo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVideo\", \"summary\": \"AiboxVideoController.getSnapByChannel\", \"operationId\": \"AiboxVideoController_getSnapByChannel\", \"parameters\": [{\"name\": \"channel\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(channel)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts:61；AiboxVideoController.getSnapByChannel\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts\", \"line\": 61, \"controller\": \"AiboxVideoController\", \"handler\": \"getSnapByChannel\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/view/getViewRecordAddress\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVideo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVideo\", \"summary\": \"AiboxVideoController.getViewRecordAddress\", \"operationId\": \"AiboxVideoController_getViewRecordAddress\", \"parameters\": [{\"name\": \"channel\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(channel)；源码类型：string\"}, {\"name\": \"operate\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"enum\": [\"play\", \"download\"], \"example\": \"play\"}, \"description\": \"来源：Query(operate)；源码类型：'play' | 'download'\"}, {\"name\": \"starttime\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(starttime)；源码类型：string\"}, {\"name\": \"endtime\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(endtime)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts:44；AiboxVideoController.getViewRecordAddress\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts\", \"line\": 44, \"controller\": \"AiboxVideoController\", \"handler\": \"getViewRecordAddress\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/view/getViewRecordAddressBySDK\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVideo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVideo\", \"summary\": \"AiboxVideoController.getViewRecordAddressBySDK\", \"operationId\": \"AiboxVideoController_getViewRecordAddressBySDK\", \"parameters\": [{\"name\": \"channel\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(channel)；源码类型：string\"}, {\"name\": \"starttime\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(starttime)；源码类型：string\"}, {\"name\": \"endtime\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(endtime)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts:101；AiboxVideoController.getViewRecordAddressBySDK\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts\", \"line\": 101, \"controller\": \"AiboxVideoController\", \"handler\": \"getViewRecordAddressBySDK\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/view/getViewRecordDay\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVideo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVideo\", \"summary\": \"AiboxVideoController.getViewRecordDay\", \"operationId\": \"AiboxVideoController_getViewRecordDay\", \"parameters\": [{\"name\": \"channel\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(channel)；源码类型：string\"}, {\"name\": \"period\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(period)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts:17；AiboxVideoController.getViewRecordDay\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts\", \"line\": 17, \"controller\": \"AiboxVideoController\", \"handler\": \"getViewRecordDay\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/view/setChannelConfig\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVideo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVideo\", \"summary\": \"AiboxVideoController.setChannelConfig\", \"operationId\": \"AiboxVideoController_setChannelConfig\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts:55；AiboxVideoController.setChannelConfig\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts\", \"line\": 55, \"controller\": \"AiboxVideoController\", \"handler\": \"setChannelConfig\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/view/stopRecordBySDK\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVideo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVideo\", \"summary\": \"AiboxVideoController.stopRecordBySDK\", \"operationId\": \"AiboxVideoController_stopRecordBySDK\", \"parameters\": [{\"name\": \"streamid\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(streamid)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts:73；AiboxVideoController.stopRecordBySDK\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-video.controller.ts\", \"line\": 73, \"controller\": \"AiboxVideoController\", \"handler\": \"stopRecordBySDK\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/push/foodList\": {\"get\": {\"operationId\": \"SammeiController_getFoodList\", \"summary\": \"查询菜品列表（用于前端选择）\", \"parameters\": [{\"name\": \"q\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"返回 Array<{ id, name }>\"}}, \"tags\": [\"第三方设备数据接入/Sammei\"], \"x-apifox-folder\": \"第三方设备数据接入/Sammei\", \"x-original-tags\": [\"Sammei\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sammei.controller.ts:202；SammeiController.getFoodList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sammei.controller.ts\", \"line\": 202, \"controller\": \"SammeiController\", \"handler\": \"getFoodList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"post\": {\"operationId\": \"SammeiController_pushFoodList\", \"summary\": \"菜品同步接口\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"preFoodListJson\"], \"properties\": {\"preFoodListJson\": {\"type\": \"string\", \"description\": \"菜品数组转 JSON 字符串（兼容 foodListJson）\"}, \"foodListJson\": {\"type\": \"string\", \"description\": \"兼容字段：菜品数组转 JSON 字符串\"}}}, \"example\": {\"preFoodListJson\": \"APIFOX_{{testBatch}}\", \"foodListJson\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"返回 { status: 0, message: \\\"成功\\\", data: \\\"\\\" }\"}}, \"tags\": [\"第三方设备数据接入/Sammei\"], \"x-apifox-folder\": \"第三方设备数据接入/Sammei\", \"x-original-tags\": [\"Sammei\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sammei.controller.ts:175；SammeiController.pushFoodList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sammei.controller.ts\", \"line\": 175, \"controller\": \"SammeiController\", \"handler\": \"pushFoodList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/push/hello\": {\"get\": {\"operationId\": \"SammeiController_helloGet\", \"summary\": \"连通测试（GET 别名）\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"返回 { status: 0, message: \\\"成功\\\", data: 当前时间 }\"}}, \"tags\": [\"第三方设备数据接入/Sammei\"], \"x-apifox-folder\": \"第三方设备数据接入/Sammei\", \"x-original-tags\": [\"Sammei\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sammei.controller.ts:35；SammeiController.helloGet\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sammei.controller.ts\", \"line\": 35, \"controller\": \"SammeiController\", \"handler\": \"helloGet\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"post\": {\"operationId\": \"SammeiController_hello\", \"summary\": \"连通测试\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"返回 { status: 0, message: \\\"成功\\\", data: 当前时间 }\"}}, \"tags\": [\"第三方设备数据接入/Sammei\"], \"x-apifox-folder\": \"第三方设备数据接入/Sammei\", \"x-original-tags\": [\"Sammei\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sammei.controller.ts:27；SammeiController.hello\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sammei.controller.ts\", \"line\": 27, \"controller\": \"SammeiController\", \"handler\": \"hello\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/push/mealTypeList\": {\"get\": {\"operationId\": \"SammeiController_getMealTypeList\", \"summary\": \"查询餐别列表\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"返回 Array<{ id, name, ord }>\"}}, \"tags\": [\"第三方设备数据接入/Sammei\"], \"x-apifox-folder\": \"第三方设备数据接入/Sammei\", \"x-original-tags\": [\"Sammei\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sammei.controller.ts:230；SammeiController.getMealTypeList\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:664；mealTypes()\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sammei.controller.ts\", \"line\": 230, \"controller\": \"SammeiController\", \"handler\": \"getMealTypeList\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 664, \"function\": \"mealTypes()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"SammeiController_pushMealTypeList\", \"summary\": \"餐别同步接口\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"mealTypeListJson\"], \"properties\": {\"mealTypeListJson\": {\"type\": \"string\", \"description\": \"餐别数组转 JSON 字符串\"}}}, \"example\": {\"mealTypeListJson\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"返回 { status: 0, message: \\\"成功\\\", data: \\\"\\\" }\"}}, \"tags\": [\"第三方设备数据接入/Sammei\"], \"x-apifox-folder\": \"第三方设备数据接入/Sammei\", \"x-original-tags\": [\"Sammei\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sammei.controller.ts:209；SammeiController.pushMealTypeList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sammei.controller.ts\", \"line\": 209, \"controller\": \"SammeiController\", \"handler\": \"pushMealTypeList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/push/ws/online\": {\"get\": {\"tags\": [\"第三方设备数据接入/PushWS\"], \"x-apifox-folder\": \"第三方设备数据接入/PushWS\", \"summary\": \"查询设备在线状态（无 deviceId 返回在线列表）\", \"operationId\": \"PushWsController_online\", \"parameters\": [{\"name\": \"deviceId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(deviceId)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/push-ws.controller.ts:51；PushWsController.online\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/push-ws.controller.ts\", \"line\": 51, \"controller\": \"PushWsController\", \"handler\": \"online\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/reg/ai/broadcast/logs\": {\"get\": {\"operationId\": \"AIController_bcList\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/AI\"], \"x-apifox-folder\": \"监管端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.bcList\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:790；AIController.bcList\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:333；aiBroadcastLogs()\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 790, \"controller\": \"AIController\", \"handler\": \"bcList\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 333, \"function\": \"aiBroadcastLogs()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/ai/events\": {\"get\": {\"operationId\": \"AIController_regEvents\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"type\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"status\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"ACTIVE\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/AI\"], \"x-apifox-folder\": \"监管端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.regEvents\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:620；AIController.regEvents\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:137；aiEvents(params: { schoolId?: string; type?: string; status?: 'OPEN' | 'ACK' | 'CLOSED' | ''; start?: string; end?: string; page?: number; pageSize?: number; })\\n- mobile-emergency: apps/mobile-emergency/src/api/index.ts:15；regAiEvents(params: { schoolId?: string; page?: number; pageSize?: number })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 620, \"controller\": \"AIController\", \"handler\": \"regEvents\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 137, \"function\": \"aiEvents(params: { schoolId?: string; type?: string; status?: 'OPEN' | 'ACK' | 'CLOSED' | ''; start?: string; end?: string; page?: number; pageSize?: number; })\", \"bodyExpression\": \"\"}, {\"app\": \"mobile-emergency\", \"file\": \"apps/mobile-emergency/src/api/index.ts\", \"line\": 15, \"function\": \"regAiEvents(params: { schoolId?: string; page?: number; pageSize?: number })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/ai/events/export.csv\": {\"get\": {\"operationId\": \"AIController_regEventsExport\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"type\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"status\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"ACTIVE\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/AI\"], \"x-apifox-folder\": \"监管端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.regEventsExport\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:666；AIController.regEventsExport\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 666, \"controller\": \"AIController\", \"handler\": \"regEventsExport\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/ai/methods\": {\"get\": {\"operationId\": \"AIController_methods\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/AI\"], \"x-apifox-folder\": \"监管端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.methods\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:73；AIController.methods\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:334；aiMethods()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 73, \"controller\": \"AIController\", \"handler\": \"methods\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 334, \"function\": \"aiMethods()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/ai/schools\": {\"get\": {\"operationId\": \"AIController_aiSchools\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/AI\"], \"x-apifox-folder\": \"监管端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.aiSchools\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:77；AIController.aiSchools\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:335；aiSchools()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 77, \"controller\": \"AIController\", \"handler\": \"aiSchools\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 335, \"function\": \"aiSchools()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/ai/tasks\": {\"get\": {\"operationId\": \"AIController_regTasks\", \"parameters\": [{\"name\": \"status\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"ACTIVE\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/AI\"], \"x-apifox-folder\": \"监管端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.regTasks\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:707；AIController.regTasks\\n\\n### 前端调用证据\\n- mobile-emergency: apps/mobile-emergency/src/api/index.ts:23；regAiTasks()\\n- web-regulator: apps/web-regulator/src/services/api.ts:311；aiTasks(params: { status?: '待处理' | '进行中' | '已完成' | ''; start?: string; end?: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 707, \"controller\": \"AIController\", \"handler\": \"regTasks\"}], \"x-frontend-evidence\": [{\"app\": \"mobile-emergency\", \"file\": \"apps/mobile-emergency/src/api/index.ts\", \"line\": 23, \"function\": \"regAiTasks()\", \"bodyExpression\": \"\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 311, \"function\": \"aiTasks(params: { status?: '待处理' | '进行中' | '已完成' | ''; start?: string; end?: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"AIController_createTask\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/AI\"], \"x-apifox-folder\": \"监管端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.createTask\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"items\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"method\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"period\": {\"type\": \"object\", \"properties\": {\"start\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"end\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}}, \"schools\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}}, \"required\": [\"name\", \"items\", \"method\", \"schools\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"items\": [\"APIFOX_{{testBatch}}\"], \"method\": \"APIFOX_{{testBatch}}\", \"period\": {\"start\": \"2026-09-24 10:00:00\", \"end\": \"2026-09-24 10:00:00\"}, \"schools\": [\"APIFOX_{{testBatch}}\"]}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:726；AIController.createTask\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:321；aiTaskCreate(body: { name: string; items: string[]; method: string; period?: { start?: string; end?: string }; schools: string[]; })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 726, \"controller\": \"AIController\", \"handler\": \"createTask\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 321, \"function\": \"aiTaskCreate(body: { name: string; items: string[]; method: string; period?: { start?: string; end?: string }; schools: string[]; })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/alerts/config\": {\"get\": {\"operationId\": \"RegAlertsController_getConfig\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Alerts\"], \"x-apifox-folder\": \"监管端/Regulator Alerts\", \"x-original-tags\": [\"Regulator Alerts\"], \"summary\": \"RegAlertsController.getConfig\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-alerts.controller.ts:311；RegAlertsController.getConfig\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1265；alertsConfigGet()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-alerts.controller.ts\", \"line\": 311, \"controller\": \"RegAlertsController\", \"handler\": \"getConfig\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1265, \"function\": \"alertsConfigGet()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"RegAlertsController_setConfig\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Alerts\"], \"x-apifox-folder\": \"监管端/Regulator Alerts\", \"x-original-tags\": [\"Regulator Alerts\"], \"summary\": \"RegAlertsController.setConfig\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-alerts.controller.ts:316；RegAlertsController.setConfig\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1272；alertsConfigSave(patch: any)；body=JSON.stringify(patch)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-alerts.controller.ts\", \"line\": 316, \"controller\": \"RegAlertsController\", \"handler\": \"setConfig\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1272, \"function\": \"alertsConfigSave(patch: any)\", \"bodyExpression\": \"JSON.stringify(patch)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/alerts/events\": {\"get\": {\"operationId\": \"RegAlertsController_events\", \"parameters\": [{\"name\": \"type\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Alerts\"], \"x-apifox-folder\": \"监管端/Regulator Alerts\", \"x-original-tags\": [\"Regulator Alerts\"], \"summary\": \"RegAlertsController.events\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-alerts.controller.ts:104；RegAlertsController.events\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-alerts.controller.ts\", \"line\": 104, \"controller\": \"RegAlertsController\", \"handler\": \"events\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/alerts/events/export.csv\": {\"get\": {\"operationId\": \"RegAlertsController_exportCsv\", \"parameters\": [{\"name\": \"type\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Alerts\"], \"x-apifox-folder\": \"监管端/Regulator Alerts\", \"x-original-tags\": [\"Regulator Alerts\"], \"summary\": \"RegAlertsController.exportCsv\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-alerts.controller.ts:284；RegAlertsController.exportCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-alerts.controller.ts\", \"line\": 284, \"controller\": \"RegAlertsController\", \"handler\": \"exportCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/alerts/stream\": {\"get\": {\"operationId\": \"RegAlertsController_stream\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Alerts\"], \"x-apifox-folder\": \"监管端/Regulator Alerts\", \"x-original-tags\": [\"Regulator Alerts\"], \"summary\": \"RegAlertsController.stream\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-alerts.controller.ts:331；RegAlertsController.stream\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-alerts.controller.ts\", \"line\": 331, \"controller\": \"RegAlertsController\", \"handler\": \"stream\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/alerts/summary\": {\"get\": {\"operationId\": \"RegAlertsController_summary\", \"parameters\": [{\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Alerts\"], \"x-apifox-folder\": \"监管端/Regulator Alerts\", \"x-original-tags\": [\"Regulator Alerts\"], \"summary\": \"RegAlertsController.summary\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-alerts.controller.ts:54；RegAlertsController.summary\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-alerts.controller.ts\", \"line\": 54, \"controller\": \"RegAlertsController\", \"handler\": \"summary\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/credentials/canteens\": {\"get\": {\"operationId\": \"RegCredentialsController_canteens\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {\"$ref\": \"#/components/schemas/CanteenCredentialDTO\"}}}}}}, \"tags\": [\"监管端/Regulator Credentials\"], \"x-apifox-folder\": \"监管端/Regulator Credentials\", \"x-original-tags\": [\"Regulator Credentials\"], \"summary\": \"RegCredentialsController.canteens\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-credentials.controller.ts:18；RegCredentialsController.canteens\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:395；getCertOverview()\\n- web-regulator: apps/web-regulator/src/services/api.ts:453；getExpiringCertificates(params: { days?: number })\\n- web-regulator: apps/web-regulator/src/services/api.ts:876；getCertificateDetail(params: { certificateId: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-credentials.controller.ts\", \"line\": 18, \"controller\": \"RegCredentialsController\", \"handler\": \"canteens\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 395, \"function\": \"getCertOverview()\", \"bodyExpression\": \"\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 453, \"function\": \"getExpiringCertificates(params: { days?: number })\", \"bodyExpression\": \"\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 876, \"function\": \"getCertificateDetail(params: { certificateId: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/credentials/exceptions\": {\"get\": {\"operationId\": \"RegCredentialsController_exceptions\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"type\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：EntityType\", \"x-source-type\": \"EntityType\"}, \"description\": \"来源：Query(type)；源码类型：EntityType\"}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {\"$ref\": \"#/components/schemas/CredentialExceptionDTO\"}}}}}}, \"tags\": [\"监管端/Regulator Credentials\"], \"x-apifox-folder\": \"监管端/Regulator Credentials\", \"x-original-tags\": [\"Regulator Credentials\"], \"summary\": \"RegCredentialsController.exceptions\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-credentials.controller.ts:99；RegCredentialsController.exceptions\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:433；getCertOverview()\\n- web-regulator: apps/web-regulator/src/services/api.ts:373；credExceptions(params: { type?: 'canteen' | 'worker' | 'supplier'; schoolId?: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-credentials.controller.ts\", \"line\": 99, \"controller\": \"RegCredentialsController\", \"handler\": \"exceptions\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 433, \"function\": \"getCertOverview()\", \"bodyExpression\": \"\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 373, \"function\": \"credExceptions(params: { type?: 'canteen' | 'worker' | 'supplier'; schoolId?: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/credentials/export.csv\": {\"get\": {\"operationId\": \"RegCredentialsController_exportCsv\", \"parameters\": [{\"name\": \"target\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"type\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：EntityType\", \"x-source-type\": \"EntityType\"}, \"description\": \"来源：Query(type)；源码类型：EntityType\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Credentials\"], \"x-apifox-folder\": \"监管端/Regulator Credentials\", \"x-original-tags\": [\"Regulator Credentials\"], \"summary\": \"RegCredentialsController.exportCsv\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-credentials.controller.ts:113；RegCredentialsController.exportCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-credentials.controller.ts\", \"line\": 113, \"controller\": \"RegCredentialsController\", \"handler\": \"exportCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/credentials/overview\": {\"get\": {\"operationId\": \"RegCredentialsController_overview\", \"parameters\": [{\"name\": \"days\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Credentials\"], \"x-apifox-folder\": \"监管端/Regulator Credentials\", \"x-original-tags\": [\"Regulator Credentials\"], \"summary\": \"RegCredentialsController.overview\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-credentials.controller.ts:38；RegCredentialsController.overview\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-credentials.controller.ts\", \"line\": 38, \"controller\": \"RegCredentialsController\", \"handler\": \"overview\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/credentials/suppliers\": {\"get\": {\"operationId\": \"RegCredentialsController_suppliers\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {\"$ref\": \"#/components/schemas/SupplierCredentialDTO\"}}}}}}, \"tags\": [\"监管端/Regulator Credentials\"], \"x-apifox-folder\": \"监管端/Regulator Credentials\", \"x-original-tags\": [\"Regulator Credentials\"], \"summary\": \"RegCredentialsController.suppliers\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-credentials.controller.ts:30；RegCredentialsController.suppliers\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:397；getCertOverview()\\n- web-regulator: apps/web-regulator/src/services/api.ts:455；getExpiringCertificates(params: { days?: number })\\n- web-regulator: apps/web-regulator/src/services/api.ts:878；getCertificateDetail(params: { certificateId: string })\\n- web-regulator: apps/web-regulator/src/services/api.ts:781；getSupplierRecords(params: { supplierId: string; startDate?: string; endDate?: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-credentials.controller.ts\", \"line\": 30, \"controller\": \"RegCredentialsController\", \"handler\": \"suppliers\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 397, \"function\": \"getCertOverview()\", \"bodyExpression\": \"\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 455, \"function\": \"getExpiringCertificates(params: { days?: number })\", \"bodyExpression\": \"\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 878, \"function\": \"getCertificateDetail(params: { certificateId: string })\", \"bodyExpression\": \"\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 781, \"function\": \"getSupplierRecords(params: { supplierId: string; startDate?: string; endDate?: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/credentials/workers\": {\"get\": {\"operationId\": \"RegCredentialsController_workers\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {\"$ref\": \"#/components/schemas/WorkerCredentialDTO\"}}}}}}, \"tags\": [\"监管端/Regulator Credentials\"], \"x-apifox-folder\": \"监管端/Regulator Credentials\", \"x-original-tags\": [\"Regulator Credentials\"], \"summary\": \"RegCredentialsController.workers\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-credentials.controller.ts:24；RegCredentialsController.workers\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:396；getCertOverview()\\n- web-regulator: apps/web-regulator/src/services/api.ts:454；getExpiringCertificates(params: { days?: number })\\n- web-regulator: apps/web-regulator/src/services/api.ts:877；getCertificateDetail(params: { certificateId: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-credentials.controller.ts\", \"line\": 24, \"controller\": \"RegCredentialsController\", \"handler\": \"workers\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 396, \"function\": \"getCertOverview()\", \"bodyExpression\": \"\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 454, \"function\": \"getExpiringCertificates(params: { days?: number })\", \"bodyExpression\": \"\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 877, \"function\": \"getCertificateDetail(params: { certificateId: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/food-waste/ranking\": {\"get\": {\"operationId\": \"RegFoodWasteController_ranking\", \"summary\": \"Food-waste school ranking\", \"parameters\": [{\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"metric\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/FoodWaste\"], \"x-apifox-folder\": \"监管端/FoodWaste\", \"x-original-tags\": [\"FoodWaste\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-food-waste.controller.ts:20；RegFoodWasteController.ranking\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1120；foodWasteRanking(params: { start?: string; end?: string; metric?: 'weight' | 'amount' })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-food-waste.controller.ts\", \"line\": 20, \"controller\": \"RegFoodWasteController\", \"handler\": \"ranking\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1120, \"function\": \"foodWasteRanking(params: { start?: string; end?: string; metric?: 'weight' | 'amount' })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/food-waste/trend\": {\"get\": {\"operationId\": \"RegFoodWasteController_trend\", \"summary\": \"Food-waste trend by period\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"bucket\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/FoodWaste\"], \"x-apifox-folder\": \"监管端/FoodWaste\", \"x-original-tags\": [\"FoodWaste\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-food-waste.controller.ts:45；RegFoodWasteController.trend\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1162；foodWasteTrend(params: { schoolId?: string; start?: string; end?: string; bucket?: 'day' | 'week' | 'month'; })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-food-waste.controller.ts\", \"line\": 45, \"controller\": \"RegFoodWasteController\", \"handler\": \"trend\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1162, \"function\": \"foodWasteTrend(params: { schoolId?: string; start?: string; end?: string; bucket?: 'day' | 'week' | 'month'; })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/inspections/config\": {\"get\": {\"operationId\": \"RegInspectionsController_getConfig\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.getConfig\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:302；RegInspectionsController.getConfig\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:295；regTemplates()\\n- web-regulator: apps/web-regulator/src/services/api.ts:1483；inspConfigGet()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 302, \"controller\": \"RegInspectionsController\", \"handler\": \"getConfig\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 295, \"function\": \"regTemplates()\", \"bodyExpression\": \"\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1483, \"function\": \"inspConfigGet()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/inspections/inspectors\": {\"get\": {\"operationId\": \"RegInspectionsController_listInspectors\", \"summary\": \"List inspectors\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {\"$ref\": \"#/components/schemas/InspectorDTO\"}}}}}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:276；RegInspectionsController.listInspectors\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 276, \"controller\": \"RegInspectionsController\", \"handler\": \"listInspectors\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"post\": {\"operationId\": \"RegInspectionsController_createInspector\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.createInspector\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"region\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"mobile\": {\"type\": \"string\", \"example\": \"13800138000\"}, \"grids\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}}, \"required\": [\"name\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"region\": \"APIFOX_{{testBatch}}\", \"mobile\": \"13800138000\", \"grids\": [\"APIFOX_{{testBatch}}\"]}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:283；RegInspectionsController.createInspector\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 283, \"controller\": \"RegInspectionsController\", \"handler\": \"createInspector\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/inspections/tasks\": {\"get\": {\"operationId\": \"RegInspectionsController_listTasks\", \"parameters\": [{\"name\": \"type\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"assignee\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"status\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：InspectStatus\", \"x-source-type\": \"InspectStatus\"}, \"description\": \"来源：Query(status)；源码类型：InspectStatus\"}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/PagedRegulatorTasks\"}}}}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.listTasks\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:34；RegInspectionsController.listTasks\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:287；regPlans(params: { status?: string; type?: string; start?: string; end?: string; owner?: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 34, \"controller\": \"RegInspectionsController\", \"handler\": \"listTasks\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 287, \"function\": \"regPlans(params: { status?: string; type?: string; start?: string; end?: string; owner?: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"RegInspectionsController_createTask\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.createTask\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"type\": {\"type\": \"object\", \"description\": \"源码类型：InspectType\", \"x-source-type\": \"InspectType\"}, \"schoolId\": {\"type\": \"string\", \"example\": \"1\"}, \"assignee\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"grid\": {\"type\": \"string\", \"example\": \"1\"}, \"content\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}, \"planAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, \"required\": [\"type\", \"schoolId\", \"content\"]}, \"example\": {\"type\": {}, \"schoolId\": \"1\", \"assignee\": \"APIFOX_{{testBatch}}\", \"grid\": \"1\", \"content\": \"APIFOX_{{testBatch}} 自动化测试数据\", \"planAt\": \"2026-09-24 10:00:00\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:87；RegInspectionsController.createTask\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:259；regTaskCreate(body: any)；body={ ...payloadBase, schoolId: sid, assignee: firstAssignee }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 87, \"controller\": \"RegInspectionsController\", \"handler\": \"createTask\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 259, \"function\": \"regTaskCreate(body: any)\", \"bodyExpression\": \"{ ...payloadBase, schoolId: sid, assignee: firstAssignee }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/inspections/tasks/{id}\": {\"get\": {\"operationId\": \"RegInspectionsController_detail\", \"summary\": \"Get task detail\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:148；RegInspectionsController.detail\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:284；regTaskDetail(id: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 148, \"controller\": \"RegInspectionsController\", \"handler\": \"detail\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 284, \"function\": \"regTaskDetail(id: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"patch\": {\"operationId\": \"RegInspectionsController_updateTask\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.updateTask\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:172；RegInspectionsController.updateTask\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:266；regTaskUpdate(id: string, patch: any)；body=patch\\n- web-regulator: apps/web-regulator/src/services/api.ts:268；regTaskStart(id: string)；body={ status: '进行中' }\\n- web-regulator: apps/web-regulator/src/services/api.ts:269；regTaskContinue(id: string)；body={ status: '进行中' }\\n- web-regulator: apps/web-regulator/src/services/api.ts:282；regTaskReassign(id: string, body: { to: string })；body={ assignee: body.to }\\n- web-regulator: apps/web-regulator/src/services/api.ts:283；regTaskDelay(id: string, body: { planAt: string })；body={ content: `【延期至】${body.planAt}`, planAt: body.planAt }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 172, \"controller\": \"RegInspectionsController\", \"handler\": \"updateTask\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 266, \"function\": \"regTaskUpdate(id: string, patch: any)\", \"bodyExpression\": \"patch\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 268, \"function\": \"regTaskStart(id: string)\", \"bodyExpression\": \"{ status: '进行中' }\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 269, \"function\": \"regTaskContinue(id: string)\", \"bodyExpression\": \"{ status: '进行中' }\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 282, \"function\": \"regTaskReassign(id: string, body: { to: string })\", \"bodyExpression\": \"{ assignee: body.to }\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 283, \"function\": \"regTaskDelay(id: string, body: { planAt: string })\", \"bodyExpression\": \"{ content: `【延期至】${body.planAt}`, planAt: body.planAt }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/inspections/tasks/export.csv\": {\"get\": {\"operationId\": \"RegInspectionsController_exportTasksCsv\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"assignee\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"type\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：InspectType\", \"x-source-type\": \"InspectType\"}, \"description\": \"来源：Query(type)；源码类型：InspectType\"}, {\"name\": \"status\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：InspectStatus\", \"x-source-type\": \"InspectStatus\"}, \"description\": \"来源：Query(status)；源码类型：InspectStatus\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.exportTasksCsv\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:230；RegInspectionsController.exportTasksCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 230, \"controller\": \"RegInspectionsController\", \"handler\": \"exportTasksCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/ledgers/data-stats\": {\"get\": {\"operationId\": \"RegLedgersController_dataStats\", \"parameters\": [{\"name\": \"schoolIds\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"date\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"metric\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"modules\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"noBySchool\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegLedgers\"], \"x-apifox-folder\": \"监管端/RegLedgers\", \"summary\": \"RegLedgersController.dataStats\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-ledgers.controller.ts:805；RegLedgersController.dataStats\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-ledgers.controller.ts\", \"line\": 805, \"controller\": \"RegLedgersController\", \"handler\": \"dataStats\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/ledgers/detail\": {\"get\": {\"operationId\": \"RegLedgersController_detail\", \"parameters\": [{\"name\": \"type\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegLedgers\"], \"x-apifox-folder\": \"监管端/RegLedgers\", \"summary\": \"RegLedgersController.detail\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-ledgers.controller.ts:496；RegLedgersController.detail\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1030；ledgerDetail(type: 'sampling' | 'disinfection' | 'dine' | 'waste', id: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-ledgers.controller.ts\", \"line\": 496, \"controller\": \"RegLedgersController\", \"handler\": \"detail\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1030, \"function\": \"ledgerDetail(type: 'sampling' | 'disinfection' | 'dine' | 'waste', id: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/ledgers/dine\": {\"get\": {\"operationId\": \"RegLedgersController_dineList\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"status\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"ACTIVE\"}}, {\"name\": \"meal\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegLedgers\"], \"x-apifox-folder\": \"监管端/RegLedgers\", \"summary\": \"RegLedgersController.dineList\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-ledgers.controller.ts:627；RegLedgersController.dineList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-ledgers.controller.ts\", \"line\": 627, \"controller\": \"RegLedgersController\", \"handler\": \"dineList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/ledgers/disinfection\": {\"get\": {\"operationId\": \"RegLedgersController_disinfectionList\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"schoolIds\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"method\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegLedgers\"], \"x-apifox-folder\": \"监管端/RegLedgers\", \"summary\": \"RegLedgersController.disinfectionList\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-ledgers.controller.ts:578；RegLedgersController.disinfectionList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-ledgers.controller.ts\", \"line\": 578, \"controller\": \"RegLedgersController\", \"handler\": \"disinfectionList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/ledgers/pesticide\": {\"get\": {\"operationId\": \"RegLedgersController_pesticideList\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"schoolIds\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"result\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegLedgers\"], \"x-apifox-folder\": \"监管端/RegLedgers\", \"summary\": \"RegLedgersController.pesticideList\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-ledgers.controller.ts:756；RegLedgersController.pesticideList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-ledgers.controller.ts\", \"line\": 756, \"controller\": \"RegLedgersController\", \"handler\": \"pesticideList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/ledgers/sampling\": {\"get\": {\"operationId\": \"RegLedgersController_samplingList\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"schoolIds\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegLedgers\"], \"x-apifox-folder\": \"监管端/RegLedgers\", \"summary\": \"RegLedgersController.samplingList\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-ledgers.controller.ts:531；RegLedgersController.samplingList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-ledgers.controller.ts\", \"line\": 531, \"controller\": \"RegLedgersController\", \"handler\": \"samplingList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/ledgers/search\": {\"get\": {\"operationId\": \"RegLedgersController_search\", \"parameters\": [{\"name\": \"schoolIds\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"type\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"page\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"pageSize\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"modules\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"noBySchool\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegLedgers\"], \"x-apifox-folder\": \"监管端/RegLedgers\", \"summary\": \"RegLedgersController.search\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-ledgers.controller.ts:61；RegLedgersController.search\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-ledgers.controller.ts\", \"line\": 61, \"controller\": \"RegLedgersController\", \"handler\": \"search\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/ledgers/stats\": {\"get\": {\"operationId\": \"RegLedgersController_stats\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegLedgers\"], \"x-apifox-folder\": \"监管端/RegLedgers\", \"summary\": \"RegLedgersController.stats\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-ledgers.controller.ts:444；RegLedgersController.stats\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-ledgers.controller.ts\", \"line\": 444, \"controller\": \"RegLedgersController\", \"handler\": \"stats\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/ledgers/submit-stats\": {\"get\": {\"operationId\": \"RegLedgersController_submitStats\", \"parameters\": [{\"name\": \"schoolIds\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegLedgers\"], \"x-apifox-folder\": \"监管端/RegLedgers\", \"summary\": \"RegLedgersController.submitStats\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-ledgers.controller.ts:271；RegLedgersController.submitStats\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-ledgers.controller.ts\", \"line\": 271, \"controller\": \"RegLedgersController\", \"handler\": \"submitStats\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/ledgers/waste\": {\"get\": {\"operationId\": \"RegLedgersController_wasteList\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"schoolIds\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"category\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegLedgers\"], \"x-apifox-folder\": \"监管端/RegLedgers\", \"summary\": \"RegLedgersController.wasteList\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-ledgers.controller.ts:691；RegLedgersController.wasteList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-ledgers.controller.ts\", \"line\": 691, \"controller\": \"RegLedgersController\", \"handler\": \"wasteList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/overview\": {\"get\": {\"operationId\": \"RegOverviewController_overview\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegOverview\"], \"x-apifox-folder\": \"监管端/RegOverview\", \"summary\": \"RegOverviewController.overview\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-overview.controller.ts:63；RegOverviewController.overview\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:96；overview()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-overview.controller.ts\", \"line\": 63, \"controller\": \"RegOverviewController\", \"handler\": \"overview\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 96, \"function\": \"overview()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/reports/daily\": {\"get\": {\"operationId\": \"ReportsController_daily\", \"parameters\": [{\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Reports\"], \"x-apifox-folder\": \"监管端/Reports\", \"x-original-tags\": [\"Reports\"], \"summary\": \"ReportsController.daily\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reports.controller.ts:121；ReportsController.daily\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reports.controller.ts\", \"line\": 121, \"controller\": \"ReportsController\", \"handler\": \"daily\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/reports/export\": {\"get\": {\"operationId\": \"ReportsController_export\", \"summary\": \"Export daily report (CSV/PDF)\", \"parameters\": [{\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"format\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(format)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Reports\"], \"x-apifox-folder\": \"监管端/Reports\", \"x-original-tags\": [\"Reports\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reports.controller.ts:130；ReportsController.export\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1100；dailyReportExportCsv(params: { start: string; end: string; schoolId?: string })\\n- web-regulator: apps/web-regulator/src/services/api.ts:1113；dailyReportExportPdf(params: { start: string; end: string; schoolId?: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reports.controller.ts\", \"line\": 130, \"controller\": \"ReportsController\", \"handler\": \"export\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1100, \"function\": \"dailyReportExportCsv(params: { start: string; end: string; schoolId?: string })\", \"bodyExpression\": \"\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1113, \"function\": \"dailyReportExportPdf(params: { start: string; end: string; schoolId?: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/schools\": {\"get\": {\"operationId\": \"RegOverviewController_schools\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegOverview\"], \"x-apifox-folder\": \"监管端/RegOverview\", \"summary\": \"RegOverviewController.schools\", \"security\": [], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-overview.controller.ts:198；RegOverviewController.schools\\n\\n### 前端调用证据\\n- mobile-device: apps/mobile-device/src/api/modules/school.ts:6；fetchRegSchools()；body=true\\n- mobile-device: apps/mobile-device/src/services/api.ts:132；regSchools()\\n- mobile-emergency: apps/mobile-emergency/src/api/index.ts:4；regSchools()\\n- screen: apps/screen/src/api/index.ts:6；regSchools()\\n- web-school: apps/web-school/src/services/api.ts:239；regSchools()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-overview.controller.ts\", \"line\": 198, \"controller\": \"RegOverviewController\", \"handler\": \"schools\"}], \"x-frontend-evidence\": [{\"app\": \"mobile-device\", \"file\": \"apps/mobile-device/src/api/modules/school.ts\", \"line\": 6, \"function\": \"fetchRegSchools()\", \"bodyExpression\": \"true\"}, {\"app\": \"mobile-device\", \"file\": \"apps/mobile-device/src/services/api.ts\", \"line\": 132, \"function\": \"regSchools()\", \"bodyExpression\": \"\"}, {\"app\": \"mobile-emergency\", \"file\": \"apps/mobile-emergency/src/api/index.ts\", \"line\": 4, \"function\": \"regSchools()\", \"bodyExpression\": \"\"}, {\"app\": \"screen\", \"file\": \"apps/screen/src/api/index.ts\", \"line\": 6, \"function\": \"regSchools()\", \"bodyExpression\": \"\"}, {\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 239, \"function\": \"regSchools()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/schools/{id}/cameras\": {\"get\": {\"operationId\": \"RegOverviewController_camsAny\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegOverview\"], \"x-apifox-folder\": \"监管端/RegOverview\", \"summary\": \"RegOverviewController.camsAny\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-overview.controller.ts:327；RegOverviewController.camsAny\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-overview.controller.ts\", \"line\": 327, \"controller\": \"RegOverviewController\", \"handler\": \"camsAny\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/schools/1/cameras\": {\"get\": {\"operationId\": \"RegOverviewController_cams1\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegOverview\"], \"x-apifox-folder\": \"监管端/RegOverview\", \"summary\": \"RegOverviewController.cams1\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-overview.controller.ts:315；RegOverviewController.cams1\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-overview.controller.ts\", \"line\": 315, \"controller\": \"RegOverviewController\", \"handler\": \"cams1\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/schools/2/cameras\": {\"get\": {\"operationId\": \"RegOverviewController_cams2\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegOverview\"], \"x-apifox-folder\": \"监管端/RegOverview\", \"summary\": \"RegOverviewController.cams2\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-overview.controller.ts:317；RegOverviewController.cams2\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-overview.controller.ts\", \"line\": 317, \"controller\": \"RegOverviewController\", \"handler\": \"cams2\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/schools/3/cameras\": {\"get\": {\"operationId\": \"RegOverviewController_cams3\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegOverview\"], \"x-apifox-folder\": \"监管端/RegOverview\", \"summary\": \"RegOverviewController.cams3\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-overview.controller.ts:319；RegOverviewController.cams3\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-overview.controller.ts\", \"line\": 319, \"controller\": \"RegOverviewController\", \"handler\": \"cams3\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/schools/4/cameras\": {\"get\": {\"operationId\": \"RegOverviewController_cams4\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegOverview\"], \"x-apifox-folder\": \"监管端/RegOverview\", \"summary\": \"RegOverviewController.cams4\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-overview.controller.ts:321；RegOverviewController.cams4\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-overview.controller.ts\", \"line\": 321, \"controller\": \"RegOverviewController\", \"handler\": \"cams4\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/schools/5/cameras\": {\"get\": {\"operationId\": \"RegOverviewController_cams5\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegOverview\"], \"x-apifox-folder\": \"监管端/RegOverview\", \"summary\": \"RegOverviewController.cams5\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-overview.controller.ts:323；RegOverviewController.cams5\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-overview.controller.ts\", \"line\": 323, \"controller\": \"RegOverviewController\", \"handler\": \"cams5\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/schools/config\": {\"get\": {\"operationId\": \"RegOverviewController_schoolsConfig\", \"parameters\": [{\"name\": \"q\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"enabled\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegOverview\"], \"x-apifox-folder\": \"监管端/RegOverview\", \"summary\": \"RegOverviewController.schoolsConfig\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-overview.controller.ts:218；RegOverviewController.schoolsConfig\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-overview.controller.ts\", \"line\": 218, \"controller\": \"RegOverviewController\", \"handler\": \"schoolsConfig\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"patch\": {\"operationId\": \"RegOverviewController_updateSchool\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegOverview\"], \"x-apifox-folder\": \"监管端/RegOverview\", \"summary\": \"RegOverviewController.updateSchool\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"enabled\": {\"type\": \"boolean\", \"example\": true}, \"defaultUsername\": {\"type\": \"string\", \"example\": \"apifox_autotest\"}, \"defaultPassword\": {\"type\": \"string\", \"example\": \"Test@123456\"}}}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"enabled\": true, \"defaultUsername\": \"apifox_autotest\", \"defaultPassword\": \"Test@123456\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-overview.controller.ts:262；RegOverviewController.updateSchool\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:103；sysSchoolUpdate(id: number, body: { name?: string; enabled?: boolean; defaultUsername?: string; defaultPassword?: string })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-overview.controller.ts\", \"line\": 262, \"controller\": \"RegOverviewController\", \"handler\": \"updateSchool\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 103, \"function\": \"sysSchoolUpdate(id: number, body: { name?: string; enabled?: boolean; defaultUsername?: string; defaultPassword?: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"RegOverviewController_createSchool\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegOverview\"], \"x-apifox-folder\": \"监管端/RegOverview\", \"summary\": \"RegOverviewController.createSchool\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"enabled\": {\"type\": \"boolean\", \"example\": true}, \"defaultUsername\": {\"type\": \"string\", \"example\": \"apifox_autotest\"}, \"defaultPassword\": {\"type\": \"string\", \"example\": \"Test@123456\"}}, \"required\": [\"name\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"enabled\": true, \"defaultUsername\": \"apifox_autotest\", \"defaultPassword\": \"Test@123456\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-overview.controller.ts:226；RegOverviewController.createSchool\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:102；sysSchoolCreate(body: { name: string; enabled?: boolean; defaultUsername?: string; defaultPassword?: string })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-overview.controller.ts\", \"line\": 226, \"controller\": \"RegOverviewController\", \"handler\": \"createSchool\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 102, \"function\": \"sysSchoolCreate(body: { name: string; enabled?: boolean; defaultUsername?: string; defaultPassword?: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/schools/stats\": {\"get\": {\"operationId\": \"RegOverviewController_schoolStats\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegOverview\"], \"x-apifox-folder\": \"监管端/RegOverview\", \"summary\": \"RegOverviewController.schoolStats\", \"security\": [], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-overview.controller.ts:304；RegOverviewController.schoolStats\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:97；schools()\\n- web-regulator: apps/web-regulator/src/services/api.ts:1191；<anonymous>()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-overview.controller.ts\", \"line\": 304, \"controller\": \"RegOverviewController\", \"handler\": \"schoolStats\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 97, \"function\": \"schools()\", \"bodyExpression\": \"\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1191, \"function\": \"<anonymous>()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/system/info\": {\"get\": {\"operationId\": \"RegSystemController_info\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.info\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:131；RegSystemController.info\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1450；sysInfoGet()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 131, \"controller\": \"RegSystemController\", \"handler\": \"info\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1450, \"function\": \"sysInfoGet()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"RegSystemController_saveInfo\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.saveInfo\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:136；RegSystemController.saveInfo\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1452；sysInfoSave(body: any)；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 136, \"controller\": \"RegSystemController\", \"handler\": \"saveInfo\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1452, \"function\": \"sysInfoSave(body: any)\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/system/permissions\": {\"get\": {\"operationId\": \"RegSystemController_permissions\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.permissions\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:115；RegSystemController.permissions\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1431；sysPermissions()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 115, \"controller\": \"RegSystemController\", \"handler\": \"permissions\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1431, \"function\": \"sysPermissions()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/system/roles\": {\"get\": {\"operationId\": \"RegSystemController_roles\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.roles\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:100；RegSystemController.roles\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1403；sysRoles()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 100, \"controller\": \"RegSystemController\", \"handler\": \"roles\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1403, \"function\": \"sysRoles()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"patch\": {\"operationId\": \"RegSystemController_updateRole\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.updateRole\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"number\", \"example\": 1}, \"patch\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"remark\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}}}, \"required\": [\"id\", \"patch\"]}, \"example\": {\"id\": 1, \"patch\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"remark\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:107；RegSystemController.updateRole\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1414；sysRoleUpdate(body: { id: number; patch: { name?: string; remark?: string } })；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 107, \"controller\": \"RegSystemController\", \"handler\": \"updateRole\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1414, \"function\": \"sysRoleUpdate(body: { id: number; patch: { name?: string; remark?: string } })\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"RegSystemController_createRole\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.createRole\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"remark\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}, \"required\": [\"name\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"remark\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:103；RegSystemController.createRole\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1405；sysRoleCreate(body: { name: string; remark?: string })；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 103, \"controller\": \"RegSystemController\", \"handler\": \"createRole\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1405, \"function\": \"sysRoleCreate(body: { name: string; remark?: string })\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/system/settings\": {\"get\": {\"operationId\": \"RegSettingsController_get\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Settings\"], \"x-apifox-folder\": \"监管端/Regulator Settings\", \"x-original-tags\": [\"Regulator Settings\"], \"summary\": \"RegSettingsController.get\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-settings.controller.ts:15；RegSettingsController.get\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1461；sysSettingsGet()\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-settings.controller.ts\", \"line\": 15, \"controller\": \"RegSettingsController\", \"handler\": \"get\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1461, \"function\": \"sysSettingsGet()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"RegSettingsController_save\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Settings\"], \"x-apifox-folder\": \"监管端/Regulator Settings\", \"x-original-tags\": [\"Regulator Settings\"], \"summary\": \"RegSettingsController.save\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"basic\": {}, \"business\": {}, \"maintenance\": {}, \"alerts\": {}}}, \"example\": {\"basic\": \"APIFOX_{{testBatch}}\", \"business\": \"APIFOX_{{testBatch}}\", \"maintenance\": \"APIFOX_{{testBatch}}\", \"alerts\": \"APIFOX_{{testBatch}}\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-settings.controller.ts:28；RegSettingsController.save\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1463；sysSettingsSave(body: any)；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-settings.controller.ts\", \"line\": 28, \"controller\": \"RegSettingsController\", \"handler\": \"save\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1463, \"function\": \"sysSettingsSave(body: any)\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/system/units\": {\"get\": {\"operationId\": \"RegSystemController_listUnits\", \"parameters\": [{\"name\": \"q\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.listUnits\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:143；RegSystemController.listUnits\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:108；regUnits(params: { page?: number; pageSize?: number; q?: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 143, \"controller\": \"RegSystemController\", \"handler\": \"listUnits\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 108, \"function\": \"regUnits(params: { page?: number; pageSize?: number; q?: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"patch\": {\"operationId\": \"RegSystemController_updateUnit\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.updateUnit\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:155；RegSystemController.updateUnit\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:112；regUnitUpdate(id: string, body: any)；body=body\\n- web-regulator: apps/web-regulator/src/services/api.ts:113；regUnitToggle(id: string, enabled: boolean)；body={ enabled }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 155, \"controller\": \"RegSystemController\", \"handler\": \"updateUnit\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 112, \"function\": \"regUnitUpdate(id: string, body: any)\", \"bodyExpression\": \"body\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 113, \"function\": \"regUnitToggle(id: string, enabled: boolean)\", \"bodyExpression\": \"{ enabled }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"RegSystemController_createUnit\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.createUnit\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:150；RegSystemController.createUnit\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:111；regUnitCreate(body: any)；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 150, \"controller\": \"RegSystemController\", \"handler\": \"createUnit\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 111, \"function\": \"regUnitCreate(body: any)\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/system/users\": {\"get\": {\"operationId\": \"RegSystemController_users\", \"parameters\": [{\"name\": \"unitId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.users\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:29；RegSystemController.users\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 29, \"controller\": \"RegSystemController\", \"handler\": \"users\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"patch\": {\"operationId\": \"RegSystemController_updateUser\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.updateUser\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:81；RegSystemController.updateUser\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1386；sysUserUpdate(id: string, patch: any)；body=JSON.stringify(patch)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 81, \"controller\": \"RegSystemController\", \"handler\": \"updateUser\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1386, \"function\": \"sysUserUpdate(id: string, patch: any)\", \"bodyExpression\": \"JSON.stringify(patch)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"RegSystemController_createUser\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.createUser\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"username\": {\"type\": \"string\", \"example\": \"apifox_autotest\"}, \"displayName\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"roles\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"enabled\": {\"type\": \"boolean\", \"example\": true}, \"unitId\": {\"type\": \"number\", \"example\": 1}}, \"required\": [\"username\", \"displayName\"]}, \"example\": {\"username\": \"apifox_autotest\", \"displayName\": \"APIFOX_{{testBatch}}_测试数据\", \"roles\": [\"APIFOX_{{testBatch}}\"], \"enabled\": true, \"unitId\": 1}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:60；RegSystemController.createUser\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1377；sysUserCreate(body: { username: string; displayName: string; roles?: string[]; enabled?: boolean; unitId?: number; })；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 60, \"controller\": \"RegSystemController\", \"handler\": \"createUser\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1377, \"function\": \"sysUserCreate(body: { username: string; displayName: string; roles?: string[]; enabled?: boolean; unitId?: number; })\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/system/users/detail\": {\"get\": {\"operationId\": \"RegSystemController_userDetail\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.userDetail\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:46；RegSystemController.userDetail\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1369；sysUserDetail(id: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 46, \"controller\": \"RegSystemController\", \"handler\": \"userDetail\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1369, \"function\": \"sysUserDetail(id: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/regulator/morning-checks\": {\"get\": {\"operationId\": \"RegulatorMorningChecksController_list\", \"parameters\": [{\"name\": \"x-api-key\", \"in\": \"header\", \"description\": \"Required if INGEST_API_KEY is set\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"List received morning checks\"}}, \"tags\": [\"公共与系统/Integration\"], \"x-apifox-folder\": \"公共与系统/Integration\", \"x-original-tags\": [\"Regulator\"], \"summary\": \"IntegrationController.listReg\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/integration.controller.ts:224；IntegrationController.listReg\\n- services/gateway-service/src/modules/regulator-morning-checks.controller.ts:20；RegulatorMorningChecksController.list\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/integration.controller.ts\", \"line\": 224, \"controller\": \"IntegrationController\", \"handler\": \"listReg\"}, {\"file\": \"services/gateway-service/src/modules/regulator-morning-checks.controller.ts\", \"line\": 20, \"controller\": \"RegulatorMorningChecksController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reports/school/daily\": {\"get\": {\"operationId\": \"SchoolReportsController_daily\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/SchoolReports\"], \"x-apifox-folder\": \"公共与系统/SchoolReports\", \"summary\": \"SchoolReportsController.daily\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-reports.controller.ts:7；SchoolReportsController.daily\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-reports.controller.ts\", \"line\": 7, \"controller\": \"SchoolReportsController\", \"handler\": \"daily\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/sakura/instrument/canteen\": {\"get\": {\"operationId\": \"SakuraController_instrumentCanteen\", \"summary\": \"获取食堂信息\", \"parameters\": [{\"name\": \"token\", \"required\": true, \"in\": \"header\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"produceCode\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"第三方设备数据接入/Sakura\"], \"x-apifox-folder\": \"第三方设备数据接入/Sakura\", \"x-original-tags\": [\"Sakura\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sakura.controller.ts:346；SakuraController.instrumentCanteen\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sakura.controller.ts\", \"line\": 346, \"controller\": \"SakuraController\", \"handler\": \"instrumentCanteen\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/sakura/instrument/mealType\": {\"get\": {\"operationId\": \"SakuraController_instrumentMealType\", \"summary\": \"获取餐次信息\", \"parameters\": [{\"name\": \"token\", \"required\": true, \"in\": \"header\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"produceCode\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"第三方设备数据接入/Sakura\"], \"x-apifox-folder\": \"第三方设备数据接入/Sakura\", \"x-original-tags\": [\"Sakura\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sakura.controller.ts:325；SakuraController.instrumentMealType\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sakura.controller.ts\", \"line\": 325, \"controller\": \"SakuraController\", \"handler\": \"instrumentMealType\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/sakura/instrument/samples\": {\"get\": {\"operationId\": \"SakuraController_instrumentSamples\", \"summary\": \"获取留样信息\", \"parameters\": [{\"name\": \"token\", \"required\": true, \"in\": \"header\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"produceCode\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"第三方设备数据接入/Sakura\"], \"x-apifox-folder\": \"第三方设备数据接入/Sakura\", \"x-original-tags\": [\"Sakura\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sakura.controller.ts:116；SakuraController.instrumentSamples\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sakura.controller.ts\", \"line\": 116, \"controller\": \"SakuraController\", \"handler\": \"instrumentSamples\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/sakura/instrument/user\": {\"get\": {\"operationId\": \"SakuraController_instrumentUser\", \"summary\": \"获取人员信息\", \"parameters\": [{\"name\": \"token\", \"required\": true, \"in\": \"header\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"produceCode\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"第三方设备数据接入/Sakura\"], \"x-apifox-folder\": \"第三方设备数据接入/Sakura\", \"x-original-tags\": [\"Sakura\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sakura.controller.ts:304；SakuraController.instrumentUser\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sakura.controller.ts\", \"line\": 304, \"controller\": \"SakuraController\", \"handler\": \"instrumentUser\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/sakura/menuTemplate/showMenuTemplate\": {\"get\": {\"operationId\": \"SakuraController_showMenuTemplate\", \"summary\": \"获取菜谱信息\", \"parameters\": [{\"name\": \"token\", \"required\": true, \"in\": \"header\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"produceCode\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"orgId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"第三方设备数据接入/Sakura\"], \"x-apifox-folder\": \"第三方设备数据接入/Sakura\", \"x-original-tags\": [\"Sakura\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sakura.controller.ts:387；SakuraController.showMenuTemplate\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sakura.controller.ts\", \"line\": 387, \"controller\": \"SakuraController\", \"handler\": \"showMenuTemplate\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/sample/sample/selectBySNCode\": {\"get\": {\"tags\": [\"第三方设备数据接入/Dewo-Liuyangcheng\"], \"x-apifox-folder\": \"第三方设备数据接入/Dewo-Liuyangcheng\", \"summary\": \"获取菜单数据（直调外部 select/selectAll；带 cookie 与 headers）\", \"operationId\": \"DewoLiuyangchengController_getMenu\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts:620；DewoLiuyangchengController.getMenu\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts\", \"line\": 620, \"controller\": \"DewoLiuyangchengController\", \"handler\": \"getMenu\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/sampling/operators\": {\"get\": {\"operationId\": \"SamplingOperatorsOpenController_list\", \"summary\": \"留样人员列表（开放别名，无 /school 前缀）\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/SamplingOperators\"], \"x-apifox-folder\": \"公共与系统/SamplingOperators\", \"x-original-tags\": [\"SamplingOperators\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sampling-operators.open.controller.ts:11；SamplingOperatorsOpenController.list\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sampling-operators.open.controller.ts\", \"line\": 11, \"controller\": \"SamplingOperatorsOpenController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/ai/events\": {\"get\": {\"operationId\": \"AIController_schoolEvents\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"type\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"status\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"ACTIVE\"}}, {\"name\": \"cameraId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/AI\"], \"x-apifox-folder\": \"学校端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.schoolEvents\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:205；AIController.schoolEvents\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:393；aiEventsList(params: { schoolId?: string; type?: string; status?: 'OPEN' | 'ACK' | 'CLOSED' | 'FALSE'; canteenId?: string; start?: string; end?: string; page?: number; pageSize?: number; })\\n- mobile-device: apps/mobile-device/src/api/modules/ai.ts:19；fetchAiEvents(params: { schoolId?: string; page?: number; pageSize?: number })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 205, \"controller\": \"AIController\", \"handler\": \"schoolEvents\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 393, \"function\": \"aiEventsList(params: { schoolId?: string; type?: string; status?: 'OPEN' | 'ACK' | 'CLOSED' | 'FALSE'; canteenId?: string; start?: string; end?: string; page?: number; pageSize?: number; })\", \"bodyExpression\": \"\"}, {\"app\": \"mobile-device\", \"file\": \"apps/mobile-device/src/api/modules/ai.ts\", \"line\": 19, \"function\": \"fetchAiEvents(params: { schoolId?: string; page?: number; pageSize?: number })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/ai/events/detail\": {\"get\": {\"operationId\": \"AIController_schoolEventDetail\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/AI\"], \"x-apifox-folder\": \"学校端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.schoolEventDetail\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:480；AIController.schoolEventDetail\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:489；aiEventDetail(id: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 480, \"controller\": \"AIController\", \"handler\": \"schoolEventDetail\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 489, \"function\": \"aiEventDetail(id: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/ai/events/export.csv\": {\"get\": {\"operationId\": \"AIController_schoolEventsExport\", \"summary\": \"Export AI events list (CSV)\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"type\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"status\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"ACTIVE\"}}, {\"name\": \"cameraId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/AI\"], \"x-apifox-folder\": \"学校端/AI\", \"x-original-tags\": [\"AI\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:310；AIController.schoolEventsExport\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:411；aiEventsExportCsv(params: { schoolId?: string; type?: string; status?: 'OPEN' | 'ACK' | 'CLOSED' | 'FALSE'; cameraId?: string; canteenId?: string; start?: string; end?: string; })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 310, \"controller\": \"AIController\", \"handler\": \"schoolEventsExport\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 411, \"function\": \"aiEventsExportCsv(params: { schoolId?: string; type?: string; status?: 'OPEN' | 'ACK' | 'CLOSED' | 'FALSE'; cameraId?: string; canteenId?: string; start?: string; end?: string; })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/ai/events/summary\": {\"get\": {\"operationId\": \"AIController_schoolEventsSummary\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"dim\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"canteenId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(canteenId)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/AI\"], \"x-apifox-folder\": \"学校端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"Get AI events summary for school\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:249；AIController.schoolEventsSummary\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:430；aiEventsSummary(params: { schoolId?: string; dim?: 'day' | 'week' | 'month'; start?: string; end?: string; })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 249, \"controller\": \"AIController\", \"handler\": \"schoolEventsSummary\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 430, \"function\": \"aiEventsSummary(params: { schoolId?: string; dim?: 'day' | 'week' | 'month'; start?: string; end?: string; })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/ai/events/summary/export.csv\": {\"get\": {\"operationId\": \"AIController_schoolEventsSummaryExport\", \"summary\": \"Export AI events summary (CSV)\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"dim\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"canteenId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(canteenId)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/AI\"], \"x-apifox-folder\": \"学校端/AI\", \"x-original-tags\": [\"AI\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:386；AIController.schoolEventsSummaryExport\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:463；aiEventsSummaryExportCsv(params: { schoolId?: string; dim?: 'day' | 'week' | 'month'; start?: string; end?: string; })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 386, \"controller\": \"AIController\", \"handler\": \"schoolEventsSummaryExport\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 463, \"function\": \"aiEventsSummaryExportCsv(params: { schoolId?: string; dim?: 'day' | 'week' | 'month'; start?: string; end?: string; })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/ai/home/summary/local\": {\"get\": {\"tags\": [\"学校端/AI\"], \"x-apifox-folder\": \"学校端/AI\", \"summary\": \"AIController.homeAiSummaryLocal\", \"operationId\": \"AIController_homeAiSummaryLocal\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"1\"}, {\"type\": \"number\", \"example\": 1}]}, \"description\": \"来源：Query(schoolId)；源码类型：string | number\"}, {\"name\": \"start\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(start)；源码类型：string\"}, {\"name\": \"end\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(end)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:123；AIController.homeAiSummaryLocal\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:448；aiHomeTypesLocal(params: { schoolId?: string; start?: string; end?: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 123, \"controller\": \"AIController\", \"handler\": \"homeAiSummaryLocal\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 448, \"function\": \"aiHomeTypesLocal(params: { schoolId?: string; start?: string; end?: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/school/ai/home/summary/network\": {\"get\": {\"tags\": [\"学校端/AI\"], \"x-apifox-folder\": \"学校端/AI\", \"summary\": \"AIController.homeAiSummaryNetwork\", \"operationId\": \"AIController_homeAiSummaryNetwork\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}, {\"name\": \"start\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(start)；源码类型：string\"}, {\"name\": \"end\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(end)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:98；AIController.homeAiSummaryNetwork\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:439；aiHomeTypesNetwork(params: { schoolId?: string; start?: string; end?: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 98, \"controller\": \"AIController\", \"handler\": \"homeAiSummaryNetwork\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 439, \"function\": \"aiHomeTypesNetwork(params: { schoolId?: string; start?: string; end?: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/school/ai/strangers\": {\"get\": {\"operationId\": \"AIController_schoolStrangers\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/AI\"], \"x-apifox-folder\": \"学校端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.schoolStrangers\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:159；AIController.schoolStrangers\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:494；aiStrangers(params: { schoolId?: string | number; start?: string; end?: string; page?: number; pageSize?: number })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 159, \"controller\": \"AIController\", \"handler\": \"schoolStrangers\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 494, \"function\": \"aiStrangers(params: { schoolId?: string | number; start?: string; end?: string; page?: number; pageSize?: number })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/ai/summary/pie\": {\"get\": {\"operationId\": \"AIController_schoolAiSummaryPie\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/AI\"], \"x-apifox-folder\": \"学校端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.schoolAiSummaryPie\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:356；AIController.schoolAiSummaryPie\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 356, \"controller\": \"AIController\", \"handler\": \"schoolAiSummaryPie\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/ai/types\": {\"get\": {\"operationId\": \"AIController_listTypes\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/AI\"], \"x-apifox-folder\": \"学校端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.listTypes\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:90；AIController.listTypes\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:95；aiTypes()\\n- web-school: apps/web-school/src/services/api.ts:380；aiTypes()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 90, \"controller\": \"AIController\", \"handler\": \"listTypes\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 95, \"function\": \"aiTypes()\", \"bodyExpression\": \"\"}, {\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 380, \"function\": \"aiTypes()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/analytics/alerts\": {\"get\": {\"operationId\": \"AnalyticsController_alerts\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"type\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"status\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"ACTIVE\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"regView\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Analytics\"], \"x-apifox-folder\": \"学校端/Analytics\", \"x-original-tags\": [\"Analytics\"], \"summary\": \"AnalyticsController.alerts\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/analytics.controller.ts:257；AnalyticsController.alerts\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1367；analyticsAlerts(params: { schoolId?: string; type?: string; status?: '未处理' | '已处理'; start?: string; end?: string; canteenId?: number })\\n- web-regulator: apps/web-regulator/src/services/api.ts:1215；alertsEvents(params: { type?: string; schoolId?: string; start?: string; end?: string; page?: number; pageSize?: number; })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/analytics.controller.ts\", \"line\": 257, \"controller\": \"AnalyticsController\", \"handler\": \"alerts\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1367, \"function\": \"analyticsAlerts(params: { schoolId?: string; type?: string; status?: '未处理' | '已处理'; start?: string; end?: string; canteenId?: number })\", \"bodyExpression\": \"\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1215, \"function\": \"alertsEvents(params: { type?: string; schoolId?: string; start?: string; end?: string; page?: number; pageSize?: number; })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/analytics/dashboard\": {\"get\": {\"operationId\": \"AnalyticsController_dashboard\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Analytics\"], \"x-apifox-folder\": \"学校端/Analytics\", \"x-original-tags\": [\"Analytics\"], \"summary\": \"AnalyticsController.dashboard\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/analytics.controller.ts:20；AnalyticsController.dashboard\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/analytics.controller.ts\", \"line\": 20, \"controller\": \"AnalyticsController\", \"handler\": \"dashboard\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/analytics/health\": {\"get\": {\"operationId\": \"AnalyticsController_health\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Analytics\"], \"x-apifox-folder\": \"学校端/Analytics\", \"x-original-tags\": [\"Analytics\"], \"summary\": \"AnalyticsController.health\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/analytics.controller.ts:47；AnalyticsController.health\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/analytics.controller.ts\", \"line\": 47, \"controller\": \"AnalyticsController\", \"handler\": \"health\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/analytics/personnel-health\": {\"get\": {\"operationId\": \"AnalyticsController_personnelHealth\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Analytics\"], \"x-apifox-folder\": \"学校端/Analytics\", \"x-original-tags\": [\"Analytics\"], \"summary\": \"AnalyticsController.personnelHealth\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/analytics.controller.ts:113；AnalyticsController.personnelHealth\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/analytics.controller.ts\", \"line\": 113, \"controller\": \"AnalyticsController\", \"handler\": \"personnelHealth\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/analytics/stream\": {\"get\": {\"operationId\": \"AnalyticsController_stream\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Analytics\"], \"x-apifox-folder\": \"学校端/Analytics\", \"x-original-tags\": [\"Analytics\"], \"summary\": \"AnalyticsController.stream\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/analytics.controller.ts:277；AnalyticsController.stream\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/analytics.controller.ts\", \"line\": 277, \"controller\": \"AnalyticsController\", \"handler\": \"stream\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/assets/maintenance\": {\"get\": {\"operationId\": \"HygieneController_listAssets\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"asset\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"pageSize\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/PagedAssets\"}}}}, \"401\": {\"description\": \"Unauthorized\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}, \"403\": {\"description\": \"Forbidden\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}}, \"tags\": [\"学校端/Hygiene\"], \"x-apifox-folder\": \"学校端/Hygiene\", \"x-original-tags\": [\"Hygiene\"], \"summary\": \"HygieneController.listAssets\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/hygiene.controller.ts:46；HygieneController.listAssets\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:873；assetsList(params: { asset?: string; start?: string; end?: string; page?: number; pageSize?: number; schoolId?: number; })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/hygiene.controller.ts\", \"line\": 46, \"controller\": \"HygieneController\", \"handler\": \"listAssets\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 873, \"function\": \"assetsList(params: { asset?: string; start?: string; end?: string; page?: number; pageSize?: number; schoolId?: number; })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"HygieneController_createAsset\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Hygiene\"], \"x-apifox-folder\": \"学校端/Hygiene\", \"x-original-tags\": [\"Hygiene\"], \"summary\": \"HygieneController.createAsset\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"string\", \"example\": \"1\"}, \"asset\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"date\": {\"type\": \"string\", \"example\": \"2026-09-24\"}, \"action\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"by\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"asset\", \"action\", \"by\"]}, \"example\": {\"schoolId\": \"1\", \"asset\": \"APIFOX_{{testBatch}}\", \"date\": \"2026-09-24\", \"action\": \"APIFOX_{{testBatch}}\", \"by\": \"APIFOX_{{testBatch}}\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/hygiene.controller.ts:61；HygieneController.createAsset\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:888；assetsCreate(body: { asset: string; date?: string; action: string; by: string; schoolId?: number; })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/hygiene.controller.ts\", \"line\": 61, \"controller\": \"HygieneController\", \"handler\": \"createAsset\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 888, \"function\": \"assetsCreate(body: { asset: string; date?: string; action: string; by: string; schoolId?: number; })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/canteen-detail\": {\"get\": {\"operationId\": \"CanteensController_canteenDetail\", \"parameters\": [{\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Canteens\"], \"x-apifox-folder\": \"学校端/Canteens\", \"x-original-tags\": [\"Canteens\"], \"summary\": \"CanteensController.canteenDetail\", \"security\": [], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/canteens.controller.ts:258；CanteensController.canteenDetail\\n\\n### 前端调用证据\\n- mobile-device: apps/mobile-device/src/services/api.ts:191；canteenDetail(params: { canteenId: number|string; schoolId?: number|string })\\n- web-school: apps/web-school/src/services/api.ts:1311；canteenDetail(canteenId: number | string, schoolId: number | string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/canteens.controller.ts\", \"line\": 258, \"controller\": \"CanteensController\", \"handler\": \"canteenDetail\"}], \"x-frontend-evidence\": [{\"app\": \"mobile-device\", \"file\": \"apps/mobile-device/src/services/api.ts\", \"line\": 191, \"function\": \"canteenDetail(params: { canteenId: number|string; schoolId?: number|string })\", \"bodyExpression\": \"\"}, {\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1311, \"function\": \"canteenDetail(canteenId: number | string, schoolId: number | string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"patch\": {\"operationId\": \"CanteensController_updateCanteenDetail\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Canteens\"], \"x-apifox-folder\": \"学校端/Canteens\", \"x-original-tags\": [\"Canteens\"], \"summary\": \"CanteensController.updateCanteenDetail\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"canteenId\": {\"type\": \"number\", \"example\": 1}, \"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"address\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"manager\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"phone\": {\"type\": \"string\", \"example\": \"13800138000\"}, \"areaCovered\": {\"type\": \"number\", \"example\": 10}, \"staffCount\": {\"type\": \"number\", \"example\": 10}, \"eatPersonCount\": {\"type\": \"number\", \"example\": 10}, \"remark\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}, \"biz\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"number\", \"example\": 1}, \"number\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"authority\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"issueAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"expireAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"imageUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}}, \"required\": [\"number\", \"issueAt\", \"expireAt\"]}, \"food\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"number\", \"example\": 1}, \"number\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"authority\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"permitItems\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"issueAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"expireAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"imageUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}}, \"required\": [\"number\", \"issueAt\", \"expireAt\"]}}, \"required\": [\"canteenId\"]}, \"example\": {\"canteenId\": 1, \"name\": \"APIFOX_{{testBatch}}_测试数据\", \"address\": \"APIFOX_{{testBatch}}\", \"manager\": \"APIFOX_{{testBatch}}\", \"phone\": \"13800138000\", \"areaCovered\": 10, \"staffCount\": 10, \"eatPersonCount\": 10, \"remark\": \"APIFOX_{{testBatch}} 自动化测试数据\", \"biz\": {\"id\": 1, \"number\": \"APIFOX_{{testBatch}}_001\", \"authority\": \"APIFOX_{{testBatch}}\", \"issueAt\": \"2026-09-24 10:00:00\", \"expireAt\": \"2026-09-24 10:00:00\", \"imageUrl\": \"https://example.test/apifox-autotest.jpg\"}, \"food\": {\"id\": 1, \"number\": \"APIFOX_{{testBatch}}_001\", \"authority\": \"APIFOX_{{testBatch}}\", \"permitItems\": \"APIFOX_{{testBatch}}\", \"issueAt\": \"2026-09-24 10:00:00\", \"expireAt\": \"2026-09-24 10:00:00\", \"imageUrl\": \"https://example.test/apifox-autotest.jpg\"}}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/canteens.controller.ts:290；CanteensController.updateCanteenDetail\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1325；canteenDetailUpdate(body: { canteenId: number; name?: string; address?: string; manager?: string; phone?: string; areaCovered?: number; staffCount?: number; eatPersonCount?: number; remark?: string; biz?: { id?: number; number: string; authority?: string; issueAt: string; expireAt: string; imageUrl?: string }; food?: { id?: number; number: string; authority?: string; permitItems?: string; issueAt: string; expireAt: string; imageUrl?: string }; })；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/canteens.controller.ts\", \"line\": 290, \"controller\": \"CanteensController\", \"handler\": \"updateCanteenDetail\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1325, \"function\": \"canteenDetailUpdate(body: { canteenId: number; name?: string; address?: string; manager?: string; phone?: string; areaCovered?: number; staffCount?: number; eatPersonCount?: number; remark?: string; biz?: { id?: number; number: string; authority?: string; issueAt: string; expireAt: string; imageUrl?: string }; food?: { id?: number; number: string; authority?: string; permitItems?: string; issueAt: string; expireAt: string; imageUrl?: string }; })\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/canteen-licenses\": {\"get\": {\"operationId\": \"CanteensController_listLicenses\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Canteens\"], \"x-apifox-folder\": \"学校端/Canteens\", \"x-original-tags\": [\"Canteens\"], \"summary\": \"CanteensController.listLicenses\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/canteens.controller.ts:186；CanteensController.listLicenses\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/canteens.controller.ts\", \"line\": 186, \"controller\": \"CanteensController\", \"handler\": \"listLicenses\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"patch\": {\"operationId\": \"CanteensController_updateLicense\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Canteens\"], \"x-apifox-folder\": \"学校端/Canteens\", \"x-original-tags\": [\"Canteens\"], \"summary\": \"CanteensController.updateLicense\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"number\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"authority\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"permitItems\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"issueAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"expireAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"imageUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}, \"type\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}}, \"example\": {\"number\": \"APIFOX_{{testBatch}}_001\", \"authority\": \"APIFOX_{{testBatch}}\", \"permitItems\": \"APIFOX_{{testBatch}}\", \"issueAt\": \"2026-09-24 10:00:00\", \"expireAt\": \"2026-09-24 10:00:00\", \"imageUrl\": \"https://example.test/apifox-autotest.jpg\", \"type\": \"APIFOX_{{testBatch}}\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/canteens.controller.ts:231；CanteensController.updateLicense\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/canteens.controller.ts\", \"line\": 231, \"controller\": \"CanteensController\", \"handler\": \"updateLicense\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"post\": {\"operationId\": \"CanteensController_createLicense\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Canteens\"], \"x-apifox-folder\": \"学校端/Canteens\", \"x-original-tags\": [\"Canteens\"], \"summary\": \"CanteensController.createLicense\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"canteenId\": {\"type\": \"number\", \"example\": 1}, \"type\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"number\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"authority\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"permitItems\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"issueAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"expireAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"imageUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}}, \"required\": [\"canteenId\", \"type\"]}, \"example\": {\"canteenId\": 1, \"type\": \"APIFOX_{{testBatch}}\", \"number\": \"APIFOX_{{testBatch}}_001\", \"authority\": \"APIFOX_{{testBatch}}\", \"permitItems\": \"APIFOX_{{testBatch}}\", \"issueAt\": \"2026-09-24 10:00:00\", \"expireAt\": \"2026-09-24 10:00:00\", \"imageUrl\": \"https://example.test/apifox-autotest.jpg\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/canteens.controller.ts:214；CanteensController.createLicense\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/canteens.controller.ts\", \"line\": 214, \"controller\": \"CanteensController\", \"handler\": \"createLicense\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/canteens\": {\"get\": {\"operationId\": \"CanteensController_listCanteens\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"enabled\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Canteens\"], \"x-apifox-folder\": \"学校端/Canteens\", \"x-original-tags\": [\"Canteens\"], \"summary\": \"CanteensController.listCanteens\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/canteens.controller.ts:24；CanteensController.listCanteens\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1251；canteensAll(schoolId: string | number)\\n- web-school: apps/web-school/src/services/api.ts:1259；canteensByStatus(schoolId: string | number, enabled: 'all' | 'true' | 'false')\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/canteens.controller.ts\", \"line\": 24, \"controller\": \"CanteensController\", \"handler\": \"listCanteens\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1251, \"function\": \"canteensAll(schoolId: string | number)\", \"bodyExpression\": \"\"}, {\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1259, \"function\": \"canteensByStatus(schoolId: string | number, enabled: 'all' | 'true' | 'false')\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"patch\": {\"operationId\": \"CanteensController_updateCanteen\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Canteens\"], \"x-apifox-folder\": \"学校端/Canteens\", \"x-original-tags\": [\"Canteens\"], \"summary\": \"CanteensController.updateCanteen\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"code\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"address\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"manager\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"phone\": {\"type\": \"string\", \"example\": \"13800138000\"}, \"enabled\": {\"type\": \"boolean\", \"example\": true}, \"ygSn\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, {}]}, \"instrument\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, {}]}}}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"code\": \"APIFOX_{{testBatch}}\", \"address\": \"APIFOX_{{testBatch}}\", \"manager\": \"APIFOX_{{testBatch}}\", \"phone\": \"13800138000\", \"enabled\": true, \"ygSn\": \"APIFOX_{{testBatch}}\", \"instrument\": \"APIFOX_{{testBatch}}\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/canteens.controller.ts:102；CanteensController.updateCanteen\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1267；canteenUpdateSimple(id: number, patchBody: { name?: string; code?: string; address?: string; manager?: string; phone?: string; enabled?: boolean; instrument?: string | null; ygSn?: string | null })；body=patchBody\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/canteens.controller.ts\", \"line\": 102, \"controller\": \"CanteensController\", \"handler\": \"updateCanteen\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1267, \"function\": \"canteenUpdateSimple(id: number, patchBody: { name?: string; code?: string; address?: string; manager?: string; phone?: string; enabled?: boolean; instrument?: string | null; ygSn?: string | null })\", \"bodyExpression\": \"patchBody\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"CanteensController_createCanteen\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Canteens\"], \"x-apifox-folder\": \"学校端/Canteens\", \"x-original-tags\": [\"Canteens\"], \"summary\": \"CanteensController.createCanteen\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"number\", \"example\": 1}, \"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"code\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"address\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"manager\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"phone\": {\"type\": \"string\", \"example\": \"13800138000\"}, \"enabled\": {\"type\": \"boolean\", \"example\": true}, \"ygSn\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, {}]}, \"instrument\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, {}]}}, \"required\": [\"name\"]}, \"example\": {\"schoolId\": 1, \"name\": \"APIFOX_{{testBatch}}_测试数据\", \"code\": \"APIFOX_{{testBatch}}\", \"address\": \"APIFOX_{{testBatch}}\", \"manager\": \"APIFOX_{{testBatch}}\", \"phone\": \"13800138000\", \"enabled\": true, \"ygSn\": \"APIFOX_{{testBatch}}\", \"instrument\": \"APIFOX_{{testBatch}}\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/canteens.controller.ts:90；CanteensController.createCanteen\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1262；canteenCreateSimple(body: { schoolId?: number; name: string; code?: string; address?: string; manager?: string; phone?: string; enabled?: boolean; instrument?: string; ygSn?: string })；body=body\\n- web-school: apps/web-school/src/services/api.ts:1343；canteenCreate(body: { schoolId?: number; name: string; address?: string; manager?: string; phone?: string })；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/canteens.controller.ts\", \"line\": 90, \"controller\": \"CanteensController\", \"handler\": \"createCanteen\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1262, \"function\": \"canteenCreateSimple(body: { schoolId?: number; name: string; code?: string; address?: string; manager?: string; phone?: string; enabled?: boolean; instrument?: string; ygSn?: string })\", \"bodyExpression\": \"body\"}, {\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1343, \"function\": \"canteenCreate(body: { schoolId?: number; name: string; address?: string; manager?: string; phone?: string })\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/canteens/summary\": {\"get\": {\"operationId\": \"CanteensController_listCanteenSummary\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Canteens\"], \"x-apifox-folder\": \"学校端/Canteens\", \"x-original-tags\": [\"Canteens\"], \"summary\": \"CanteensController.listCanteenSummary\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/canteens.controller.ts:44；CanteensController.listCanteenSummary\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/canteens.controller.ts\", \"line\": 44, \"controller\": \"CanteensController\", \"handler\": \"listCanteenSummary\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/cater/categories\": {\"get\": {\"tags\": [\"学校端/CaterProxy\"], \"x-apifox-folder\": \"学校端/CaterProxy\", \"summary\": \"外部菜品分类映射（静态）\", \"operationId\": \"CaterProxyController_categories\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/cater-proxy.controller.ts:13；CaterProxyController.categories\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:727；caterCategories()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/cater-proxy.controller.ts\", \"line\": 13, \"controller\": \"CaterProxyController\", \"handler\": \"categories\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 727, \"function\": \"caterCategories()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/school/cater/select\": {\"get\": {\"tags\": [\"学校端/CaterProxy\"], \"x-apifox-folder\": \"学校端/CaterProxy\", \"summary\": \"代理外部接口：仅分页 /p/cater/select（带 cookie 与 headers）\", \"operationId\": \"CaterProxyController_select\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/cater-proxy.controller.ts:27；CaterProxyController.select\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/cater-proxy.controller.ts\", \"line\": 27, \"controller\": \"CaterProxyController\", \"handler\": \"select\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/school/certificates\": {\"get\": {\"operationId\": \"SchoolCertificatesController_list\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"owner\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"type\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"status\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"ACTIVE\"}}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {\"$ref\": \"#/components/schemas/CertificateDTO\"}}}}}, \"401\": {\"description\": \"Unauthorized\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}, \"403\": {\"description\": \"Forbidden\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}}, \"tags\": [\"学校端/Certificates\"], \"x-apifox-folder\": \"学校端/Certificates\", \"x-original-tags\": [\"Certificates\"], \"summary\": \"SchoolCertificatesController.list\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-certificates.controller.ts:14；SchoolCertificatesController.list\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1198；certList(params: { owner?: string; type?: string; status?: '有效' | '过期'; schoolId?: string | number })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-certificates.controller.ts\", \"line\": 14, \"controller\": \"SchoolCertificatesController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1198, \"function\": \"certList(params: { owner?: string; type?: string; status?: '有效' | '过期'; schoolId?: string | number })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"patch\": {\"operationId\": \"SchoolCertificatesController_update\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/UpdateCertificateBodyDTO\"}}}}, \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/CertificateDTO\"}}}}, \"401\": {\"description\": \"Unauthorized\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}, \"403\": {\"description\": \"Forbidden\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}}, \"tags\": [\"学校端/Certificates\"], \"x-apifox-folder\": \"学校端/Certificates\", \"x-original-tags\": [\"Certificates\"], \"summary\": \"SchoolCertificatesController.update\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-certificates.controller.ts:38；SchoolCertificatesController.update\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1208；certUpdate(id: string, body: { owner?: string; type?: string; number?: string; expireAt?: string })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-certificates.controller.ts\", \"line\": 38, \"controller\": \"SchoolCertificatesController\", \"handler\": \"update\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1208, \"function\": \"certUpdate(id: string, body: { owner?: string; type?: string; number?: string; expireAt?: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"SchoolCertificatesController_create\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/CreateCertificateBodyDTO\"}}}}, \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/CertificateDTO\"}}}}, \"401\": {\"description\": \"Unauthorized\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}, \"403\": {\"description\": \"Forbidden\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}}, \"tags\": [\"学校端/Certificates\"], \"x-apifox-folder\": \"学校端/Certificates\", \"x-original-tags\": [\"Certificates\"], \"summary\": \"SchoolCertificatesController.create\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-certificates.controller.ts:27；SchoolCertificatesController.create\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1207；certCreate(body: { owner: string; type: string; number: string; expireAt: string; schoolId?: string | number })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-certificates.controller.ts\", \"line\": 27, \"controller\": \"SchoolCertificatesController\", \"handler\": \"create\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1207, \"function\": \"certCreate(body: { owner: string; type: string; number: string; expireAt: string; schoolId?: string | number })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/certificates/export.csv\": {\"get\": {\"operationId\": \"SchoolCertificatesController_exportCsv\", \"summary\": \"Export certificates CSV\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"owner\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"type\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"status\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"ACTIVE\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Certificates\"], \"x-apifox-folder\": \"学校端/Certificates\", \"x-original-tags\": [\"Certificates\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-certificates.controller.ts:57；SchoolCertificatesController.exportCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-certificates.controller.ts\", \"line\": 57, \"controller\": \"SchoolCertificatesController\", \"handler\": \"exportCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/companion-meals\": {\"get\": {\"operationId\": \"CompanionMealController_list\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenIds\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"person\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"ratingFilter\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"pageSize\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Companion Meals\"], \"x-apifox-folder\": \"学校端/Companion Meals\", \"x-original-tags\": [\"Companion Meals\"], \"summary\": \"CompanionMealController.list\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/companion-meal.controller.ts:11；CompanionMealController.list\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1468；companionMealsList(params: { schoolId?: string | number; canteenIds?: Array<string|number>; person?: string; ratingFilter?: 'all'|'good'|'normal'|'bad'; start?: string; end?: string; page?: number; pageSize?: number })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/companion-meal.controller.ts\", \"line\": 11, \"controller\": \"CompanionMealController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1468, \"function\": \"companionMealsList(params: { schoolId?: string | number; canteenIds?: Array<string|number>; person?: string; ratingFilter?: 'all'|'good'|'normal'|'bad'; start?: string; end?: string; page?: number; pageSize?: number })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"CompanionMealController_create\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\"}, \"example\": {}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Companion Meals\"], \"x-apifox-folder\": \"学校端/Companion Meals\", \"x-original-tags\": [\"Companion Meals\"], \"summary\": \"CompanionMealController.create\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/companion-meal.controller.ts:27；CompanionMealController.create\\n\\n### 前端调用证据\\n- mobile-device: apps/mobile-device/src/services/api.ts:201；companionCreate(body: any)；body=body\\n- web-school: apps/web-school/src/services/api.ts:1492；companionMealCreate(body: { schoolId?: string | number; canteenId?: string | number; dineDate: string; meal: '早餐'|'午餐'|'晚餐'; personName: string; dinersCount: number; dishAspects?: string[]; rating?: number; images?: string[]; opinion?: string; signatureData: string; status?: '草稿'|'已提交'; })；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/companion-meal.controller.ts\", \"line\": 27, \"controller\": \"CompanionMealController\", \"handler\": \"create\"}], \"x-frontend-evidence\": [{\"app\": \"mobile-device\", \"file\": \"apps/mobile-device/src/services/api.ts\", \"line\": 201, \"function\": \"companionCreate(body: any)\", \"bodyExpression\": \"body\"}, {\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1492, \"function\": \"companionMealCreate(body: { schoolId?: string | number; canteenId?: string | number; dineDate: string; meal: '早餐'|'午餐'|'晚餐'; personName: string; dinersCount: number; dishAspects?: string[]; rating?: number; images?: string[]; opinion?: string; signatureData: string; status?: '草稿'|'已提交'; })\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/credentials/canteens\": {\"get\": {\"tags\": [\"学校端/Credentials\"], \"x-apifox-folder\": \"学校端/Credentials\", \"summary\": \"CredentialsController.listCanteens\", \"operationId\": \"CredentialsController_listCanteens\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/credentials.controller.ts:21；CredentialsController.listCanteens\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/credentials.controller.ts\", \"line\": 21, \"controller\": \"CredentialsController\", \"handler\": \"listCanteens\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}, \"post\": {\"tags\": [\"学校端/Credentials\"], \"x-apifox-folder\": \"学校端/Credentials\", \"summary\": \"CredentialsController.createCanteen\", \"operationId\": \"CredentialsController_createCanteen\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"address\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"licenseExpireAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, \"required\": [\"name\", \"licenseExpireAt\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"address\": \"APIFOX_{{testBatch}}\", \"licenseExpireAt\": \"2026-09-24 10:00:00\"}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/credentials.controller.ts:26；CredentialsController.createCanteen\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/credentials.controller.ts\", \"line\": 26, \"controller\": \"CredentialsController\", \"handler\": \"createCanteen\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/school/credentials/exceptions\": {\"get\": {\"tags\": [\"学校端/Credentials\"], \"x-apifox-folder\": \"学校端/Credentials\", \"summary\": \"CredentialsController.listExceptions\", \"operationId\": \"CredentialsController_listExceptions\", \"parameters\": [{\"name\": \"type\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：EntityType\", \"x-source-type\": \"EntityType\"}, \"description\": \"来源：Query(type)；源码类型：EntityType\"}, {\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/credentials.controller.ts:63；CredentialsController.listExceptions\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/credentials.controller.ts\", \"line\": 63, \"controller\": \"CredentialsController\", \"handler\": \"listExceptions\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/school/credentials/stream\": {\"get\": {\"tags\": [\"学校端/Credentials\"], \"x-apifox-folder\": \"学校端/Credentials\", \"summary\": \"CredentialsController.stream\", \"operationId\": \"CredentialsController_stream\", \"responses\": {\"200\": {\"description\": \"Server-Sent Events stream\", \"content\": {\"text/event-stream\": {\"schema\": {\"type\": \"string\"}}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/credentials.controller.ts:80；CredentialsController.stream\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/credentials.controller.ts\", \"line\": 80, \"controller\": \"CredentialsController\", \"handler\": \"stream\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/school/credentials/suppliers\": {\"get\": {\"tags\": [\"学校端/Credentials\"], \"x-apifox-folder\": \"学校端/Credentials\", \"summary\": \"CredentialsController.listSuppliers\", \"operationId\": \"CredentialsController_listSuppliers\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/credentials.controller.ts:49；CredentialsController.listSuppliers\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/credentials.controller.ts\", \"line\": 49, \"controller\": \"CredentialsController\", \"handler\": \"listSuppliers\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}, \"post\": {\"tags\": [\"学校端/Credentials\"], \"x-apifox-folder\": \"学校端/Credentials\", \"summary\": \"CredentialsController.createSupplier\", \"operationId\": \"CredentialsController_createSupplier\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"phone\": {\"type\": \"string\", \"example\": \"13800138000\"}, \"licenseExpireAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, \"required\": [\"name\", \"licenseExpireAt\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"phone\": \"13800138000\", \"licenseExpireAt\": \"2026-09-24 10:00:00\"}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/credentials.controller.ts:54；CredentialsController.createSupplier\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/credentials.controller.ts\", \"line\": 54, \"controller\": \"CredentialsController\", \"handler\": \"createSupplier\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/school/credentials/workers\": {\"get\": {\"tags\": [\"学校端/Credentials\"], \"x-apifox-folder\": \"学校端/Credentials\", \"summary\": \"CredentialsController.listWorkers\", \"operationId\": \"CredentialsController_listWorkers\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/credentials.controller.ts:35；CredentialsController.listWorkers\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/credentials.controller.ts\", \"line\": 35, \"controller\": \"CredentialsController\", \"handler\": \"listWorkers\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}, \"post\": {\"tags\": [\"学校端/Credentials\"], \"x-apifox-folder\": \"学校端/Credentials\", \"summary\": \"CredentialsController.createWorker\", \"operationId\": \"CredentialsController_createWorker\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"role\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"healthCertExpireAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, \"required\": [\"name\", \"healthCertExpireAt\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"role\": \"APIFOX_{{testBatch}}\", \"healthCertExpireAt\": \"2026-09-24 10:00:00\"}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/credentials.controller.ts:40；CredentialsController.createWorker\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/credentials.controller.ts\", \"line\": 40, \"controller\": \"CredentialsController\", \"handler\": \"createWorker\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/school/device-safety\": {\"get\": {\"operationId\": \"DeviceSafetyController_list\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"pageSize\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/PagedDeviceSafetyRecords\"}}}}, \"401\": {\"description\": \"Unauthorized\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}, \"403\": {\"description\": \"Forbidden\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}}, \"tags\": [\"学校端/Device Safety\"], \"x-apifox-folder\": \"学校端/Device Safety\", \"x-original-tags\": [\"Device Safety\"], \"summary\": \"DeviceSafetyController.list\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/device-safety.controller.ts:12；DeviceSafetyController.list\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1413；deviceSafetyList(params: { schoolId?: number | string; canteenId?: number; start?: string; end?: string; page?: number; pageSize?: number })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/device-safety.controller.ts\", \"line\": 12, \"controller\": \"DeviceSafetyController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1413, \"function\": \"deviceSafetyList(params: { schoolId?: number | string; canteenId?: number; start?: string; end?: string; page?: number; pageSize?: number })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"DeviceSafetyController_create\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/CreateDeviceSafetyBodyDTO\"}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Device Safety\"], \"x-apifox-folder\": \"学校端/Device Safety\", \"x-original-tags\": [\"Device Safety\"], \"summary\": \"DeviceSafetyController.create\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/device-safety.controller.ts:28；DeviceSafetyController.create\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1431；deviceSafetyCreate(body: { schoolId?: number | string; canteenId?: number | string; deviceName: string; items: string[]; result: '正常' | '异常'; description?: string; measures?: string; handler?: string; imageUrl?: string; signatureData?: string; checkDate: string; })；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/device-safety.controller.ts\", \"line\": 28, \"controller\": \"DeviceSafetyController\", \"handler\": \"create\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1431, \"function\": \"deviceSafetyCreate(body: { schoolId?: number | string; canteenId?: number | string; deviceName: string; items: string[]; result: '正常' | '异常'; description?: string; measures?: string; handler?: string; imageUrl?: string; signatureData?: string; checkDate: string; })\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/device-safety/detail\": {\"get\": {\"operationId\": \"DeviceSafetyController_detail\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Device Safety\"], \"x-apifox-folder\": \"学校端/Device Safety\", \"x-original-tags\": [\"Device Safety\"], \"summary\": \"DeviceSafetyController.detail\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/device-safety.controller.ts:50；DeviceSafetyController.detail\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1439；deviceSafetyDetail(id: number | string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/device-safety.controller.ts\", \"line\": 50, \"controller\": \"DeviceSafetyController\", \"handler\": \"detail\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1439, \"function\": \"deviceSafetyDetail(id: number | string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/devices\": {\"get\": {\"operationId\": \"DevicesController_list\", \"summary\": \"List devices (school scope)\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"type\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"status\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"ACTIVE\"}}, {\"name\": \"q\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Devices\"], \"x-apifox-folder\": \"学校端/Devices\", \"x-original-tags\": [\"Devices\"], \"security\": [], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/devices.controller.ts:14；DevicesController.list\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1386；devicesList(params: { schoolId?: string; type?: string; status?: string; q?: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/devices.controller.ts\", \"line\": 14, \"controller\": \"DevicesController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1386, \"function\": \"devicesList(params: { schoolId?: string; type?: string; status?: string; q?: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/devices/statuses\": {\"get\": {\"operationId\": \"DevicesController_statuses\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Devices\"], \"x-apifox-folder\": \"学校端/Devices\", \"x-original-tags\": [\"Devices\"], \"summary\": \"DevicesController.statuses\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/devices.controller.ts:29；DevicesController.statuses\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/devices.controller.ts\", \"line\": 29, \"controller\": \"DevicesController\", \"handler\": \"statuses\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/devices/types\": {\"get\": {\"operationId\": \"DevicesController_types\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Devices\"], \"x-apifox-folder\": \"学校端/Devices\", \"x-original-tags\": [\"Devices\"], \"summary\": \"DevicesController.types\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/devices.controller.ts:26；DevicesController.types\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/devices.controller.ts\", \"line\": 26, \"controller\": \"DevicesController\", \"handler\": \"types\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/dine/meal-options\": {\"get\": {\"operationId\": \"DineController_mealOptions\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Dine\"], \"x-apifox-folder\": \"学校端/Dine\", \"x-original-tags\": [\"Dine\"], \"summary\": \"DineController.mealOptions\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dine.controller.ts:70；DineController.mealOptions\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:989；dineMealOptions()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dine.controller.ts\", \"line\": 70, \"controller\": \"DineController\", \"handler\": \"mealOptions\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 989, \"function\": \"dineMealOptions()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/dine/meals\": {\"get\": {\"operationId\": \"DineController_meals\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Dine\"], \"x-apifox-folder\": \"学校端/Dine\", \"x-original-tags\": [\"Dine\"], \"summary\": \"DineController.meals\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dine.controller.ts:64；DineController.meals\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:988；dineMeals()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dine.controller.ts\", \"line\": 64, \"controller\": \"DineController\", \"handler\": \"meals\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 988, \"function\": \"dineMeals()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/dine/records\": {\"get\": {\"operationId\": \"DineController_list\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"mealCode\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"mealKey\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"exception\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"pageSize\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"meal\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(meal)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/PagedDineRecords\"}}}}, \"401\": {\"description\": \"Unauthorized\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}, \"403\": {\"description\": \"Forbidden\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}}, \"tags\": [\"学校端/DineApiAdapter\"], \"x-apifox-folder\": \"学校端/DineApiAdapter\", \"x-original-tags\": [\"Dine\"], \"summary\": \"DineApiAdapterController.list\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-dine.adapter.controller.ts:23；DineApiAdapterController.list\\n- services/gateway-service/src/modules/dine.controller.ts:44；DineController.list\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1002；dineList(params: { meal?: string; mealCode?: number; exception?: 'true' | 'false'; start?: string; end?: string; page?: number; pageSize?: number; schoolId?: string; })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-dine.adapter.controller.ts\", \"line\": 23, \"controller\": \"DineApiAdapterController\", \"handler\": \"list\"}, {\"file\": \"services/gateway-service/src/modules/dine.controller.ts\", \"line\": 44, \"controller\": \"DineController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1002, \"function\": \"dineList(params: { meal?: string; mealCode?: number; exception?: 'true' | 'false'; start?: string; end?: string; page?: number; pageSize?: number; schoolId?: string; })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"DineController_create\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/CreateDineBodyDTO\"}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Dine\"], \"x-apifox-folder\": \"学校端/Dine\", \"x-original-tags\": [\"Dine\"], \"summary\": \"DineController.create\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dine.controller.ts:82；DineController.create\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1018；dineCreate(body: { meal?: string; mealCode?: number; people: string[]; imageUrl?: string; comment?: string; schoolId?: string; })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dine.controller.ts\", \"line\": 82, \"controller\": \"DineController\", \"handler\": \"create\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1018, \"function\": \"dineCreate(body: { meal?: string; mealCode?: number; people: string[]; imageUrl?: string; comment?: string; schoolId?: string; })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/dine/stream\": {\"get\": {\"operationId\": \"DineController_stream\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/DineApiAdapter\"], \"x-apifox-folder\": \"学校端/DineApiAdapter\", \"x-original-tags\": [\"Dine\"], \"summary\": \"DineApiAdapterController.stream\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-dine.adapter.controller.ts:39；DineApiAdapterController.stream\\n- services/gateway-service/src/modules/dine.controller.ts:142；DineController.stream\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-dine.adapter.controller.ts\", \"line\": 39, \"controller\": \"DineApiAdapterController\", \"handler\": \"stream\"}, {\"file\": \"services/gateway-service/src/modules/dine.controller.ts\", \"line\": 142, \"controller\": \"DineController\", \"handler\": \"stream\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/disinfection/records\": {\"get\": {\"operationId\": \"DisinfectionController_list\", \"summary\": \"List disinfection records\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"exception\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"pageSize\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"method\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：DisinfectionMethod\", \"x-source-type\": \"DisinfectionMethod\"}, \"description\": \"来源：Query(method)；源码类型：DisinfectionMethod\"}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/PagedDisinfectionRecords\"}}}}, \"401\": {\"description\": \"Unauthorized\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}, \"403\": {\"description\": \"Forbidden\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}}, \"tags\": [\"学校端/Disinfection\"], \"x-apifox-folder\": \"学校端/Disinfection\", \"x-original-tags\": [\"Disinfection\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/disinfection.controller.ts:23；DisinfectionController.list\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:901；disinfectionList(params: { method?: string; exception?: 'true' | 'false'; start?: string; end?: string; page?: number; pageSize?: number; schoolId?: string; })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/disinfection.controller.ts\", \"line\": 23, \"controller\": \"DisinfectionController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 901, \"function\": \"disinfectionList(params: { method?: string; exception?: 'true' | 'false'; start?: string; end?: string; page?: number; pageSize?: number; schoolId?: string; })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"DisinfectionController_create\", \"summary\": \"Create disinfection record\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/CreateDisinfectionBodyDTO\"}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Disinfection\"], \"x-apifox-folder\": \"学校端/Disinfection\", \"x-original-tags\": [\"Disinfection\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/disinfection.controller.ts:41；DisinfectionController.create\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:920；disinfectionCreate(body: { method: string; duration: number; items: string; canteenId: number; responsible: string; at: string; // ISO datetime temperature?: number; imageUrl?: string; schoolId?: string; })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/disinfection.controller.ts\", \"line\": 41, \"controller\": \"DisinfectionController\", \"handler\": \"create\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 920, \"function\": \"disinfectionCreate(body: { method: string; duration: number; items: string; canteenId: number; responsible: string; at: string; // ISO datetime temperature?: number; imageUrl?: string; schoolId?: string; })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/disinfection/records/{id}\": {\"get\": {\"operationId\": \"DisinfectionController_detail\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Disinfection\"], \"x-apifox-folder\": \"学校端/Disinfection\", \"x-original-tags\": [\"Disinfection\"], \"summary\": \"DisinfectionController.detail\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/disinfection.controller.ts:92；DisinfectionController.detail\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:922；disinfectionDetail(id: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/disinfection.controller.ts\", \"line\": 92, \"controller\": \"DisinfectionController\", \"handler\": \"detail\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 922, \"function\": \"disinfectionDetail(id: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/disinfection/stream\": {\"get\": {\"operationId\": \"DisinfectionController_stream\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Disinfection\"], \"x-apifox-folder\": \"学校端/Disinfection\", \"x-original-tags\": [\"Disinfection\"], \"summary\": \"DisinfectionController.stream\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/disinfection.controller.ts:117；DisinfectionController.stream\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/disinfection.controller.ts\", \"line\": 117, \"controller\": \"DisinfectionController\", \"handler\": \"stream\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/cameras\": {\"get\": {\"operationId\": \"EmergencyController_cameras\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.cameras\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:79；EmergencyController.cameras\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 79, \"controller\": \"EmergencyController\", \"handler\": \"cameras\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/duty\": {\"get\": {\"operationId\": \"EmergencyController_duty\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.duty\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:40；EmergencyController.duty\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 40, \"controller\": \"EmergencyController\", \"handler\": \"duty\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"post\": {\"operationId\": \"EmergencyController_saveDuty\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.saveDuty\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"string\", \"example\": \"1\"}, \"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"members\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"oncall\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"name\", \"members\", \"oncall\"]}, \"example\": {\"id\": \"1\", \"name\": \"APIFOX_{{testBatch}}_测试数据\", \"members\": [\"APIFOX_{{testBatch}}\"], \"oncall\": \"APIFOX_{{testBatch}}\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:43；EmergencyController.saveDuty\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 43, \"controller\": \"EmergencyController\", \"handler\": \"saveDuty\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/duty/export.csv\": {\"get\": {\"operationId\": \"EmergencyController_exportDutyCsv\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.exportDutyCsv\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:129；EmergencyController.exportDutyCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 129, \"controller\": \"EmergencyController\", \"handler\": \"exportDutyCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/events\": {\"get\": {\"operationId\": \"EmergencyController_listEvents\", \"parameters\": [{\"name\": \"type\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：AlertType\", \"x-source-type\": \"AlertType\"}, \"description\": \"来源：Query(type)；源码类型：AlertType\"}, {\"name\": \"status\", \"in\": \"query\", \"required\": false, \"schema\": {}, \"description\": \"来源：Query(status)；源码类型：any\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.listEvents\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:15；EmergencyController.listEvents\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 15, \"controller\": \"EmergencyController\", \"handler\": \"listEvents\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/events/export.csv\": {\"get\": {\"operationId\": \"EmergencyController_exportEventsCsv\", \"parameters\": [{\"name\": \"type\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：AlertType\", \"x-source-type\": \"AlertType\"}, \"description\": \"来源：Query(type)；源码类型：AlertType\"}, {\"name\": \"status\", \"in\": \"query\", \"required\": false, \"schema\": {}, \"description\": \"来源：Query(status)；源码类型：any\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.exportEventsCsv\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:97；EmergencyController.exportEventsCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 97, \"controller\": \"EmergencyController\", \"handler\": \"exportEventsCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/meetings\": {\"get\": {\"operationId\": \"EmergencyController_meetings\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.meetings\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:49；EmergencyController.meetings\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 49, \"controller\": \"EmergencyController\", \"handler\": \"meetings\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"post\": {\"operationId\": \"EmergencyController_createMeeting\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.createMeeting\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"scene\": {\"type\": \"object\", \"description\": \"源码类型：AlertType\", \"x-source-type\": \"AlertType\"}, \"title\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"micOn\": {\"type\": \"boolean\", \"example\": true}, \"camOn\": {\"type\": \"boolean\", \"example\": true}}, \"required\": [\"scene\", \"title\"]}, \"example\": {\"scene\": {}, \"title\": \"APIFOX_{{testBatch}}_测试数据\", \"micOn\": true, \"camOn\": true}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:52；EmergencyController.createMeeting\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 52, \"controller\": \"EmergencyController\", \"handler\": \"createMeeting\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/overview\": {\"get\": {\"operationId\": \"EmergencyController_overview\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.overview\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:11；EmergencyController.overview\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 11, \"controller\": \"EmergencyController\", \"handler\": \"overview\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/plans\": {\"get\": {\"operationId\": \"EmergencyController_plans\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.plans\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:31；EmergencyController.plans\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 31, \"controller\": \"EmergencyController\", \"handler\": \"plans\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"post\": {\"operationId\": \"EmergencyController_createPlan\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.createPlan\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"title\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"flow\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"law\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"actions\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}}, \"required\": [\"title\", \"flow\"]}, \"example\": {\"title\": \"APIFOX_{{testBatch}}_测试数据\", \"flow\": \"APIFOX_{{testBatch}}\", \"law\": \"APIFOX_{{testBatch}}\", \"actions\": [\"APIFOX_{{testBatch}}\"]}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:34；EmergencyController.createPlan\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 34, \"controller\": \"EmergencyController\", \"handler\": \"createPlan\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/plans/export.csv\": {\"get\": {\"operationId\": \"EmergencyController_exportPlansCsv\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.exportPlansCsv\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:111；EmergencyController.exportPlansCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 111, \"controller\": \"EmergencyController\", \"handler\": \"exportPlansCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/resources\": {\"get\": {\"operationId\": \"EmergencyController_resources\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.resources\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:82；EmergencyController.resources\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 82, \"controller\": \"EmergencyController\", \"handler\": \"resources\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/stream\": {\"get\": {\"operationId\": \"EmergencyController_stream\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.stream\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:92；EmergencyController.stream\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 92, \"controller\": \"EmergencyController\", \"handler\": \"stream\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/tasks\": {\"get\": {\"operationId\": \"EmergencyController_tasks\", \"parameters\": [{\"name\": \"scene\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：AlertType\", \"x-source-type\": \"AlertType\"}, \"description\": \"来源：Query(scene)；源码类型：AlertType\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.tasks\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:66；EmergencyController.tasks\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 66, \"controller\": \"EmergencyController\", \"handler\": \"tasks\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"post\": {\"operationId\": \"EmergencyController_createTask\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.createTask\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"scene\": {\"type\": \"object\", \"description\": \"源码类型：AlertType\", \"x-source-type\": \"AlertType\"}, \"title\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"assignees\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}}, \"required\": [\"scene\", \"title\", \"assignees\"]}, \"example\": {\"scene\": {}, \"title\": \"APIFOX_{{testBatch}}_测试数据\", \"assignees\": [\"APIFOX_{{testBatch}}\"]}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:69；EmergencyController.createTask\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 69, \"controller\": \"EmergencyController\", \"handler\": \"createTask\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/tasks/export.csv\": {\"get\": {\"operationId\": \"EmergencyController_exportTasksCsv\", \"parameters\": [{\"name\": \"scene\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：AlertType\", \"x-source-type\": \"AlertType\"}, \"description\": \"来源：Query(scene)；源码类型：AlertType\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.exportTasksCsv\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:141；EmergencyController.exportTasksCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 141, \"controller\": \"EmergencyController\", \"handler\": \"exportTasksCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/foods\": {\"get\": {\"operationId\": \"SchoolFoodsController_list\", \"summary\": \"菜品库列表\", \"parameters\": [{\"name\": \"q\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"status\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"ACTIVE\"}}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}, {\"name\": \"canteenId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(canteenId)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/SchoolFoods\"], \"x-apifox-folder\": \"学校端/SchoolFoods\", \"x-original-tags\": [\"SchoolFoods\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-foods.controller.ts:17；SchoolFoodsController.list\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:685；schoolFoodsList(params: { q?: string; status?: 'enabled'|'disabled'|'all'; canteenId?: number; page?: number; pageSize?: number })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-foods.controller.ts\", \"line\": 17, \"controller\": \"SchoolFoodsController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 685, \"function\": \"schoolFoodsList(params: { q?: string; status?: 'enabled'|'disabled'|'all'; canteenId?: number; page?: number; pageSize?: number })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"SchoolFoodsController_create\", \"summary\": \"新增菜品（并同步设备端）\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"name\"], \"properties\": {\"code\": {\"type\": \"string\", \"description\": \"菜品编号（可选，不传则生成）\"}, \"name\": {\"type\": \"string\"}, \"imageUrl\": {\"type\": \"string\"}, \"remark\": {\"type\": \"string\"}, \"enabled\": {\"type\": \"boolean\", \"default\": true}, \"by\": {\"type\": \"string\"}}}, \"example\": {\"code\": \"APIFOX_{{testBatch}}\", \"name\": \"APIFOX_{{testBatch}}_测试数据\", \"imageUrl\": \"https://example.test/apifox-autotest.jpg\", \"remark\": \"APIFOX_{{testBatch}} 自动化测试数据\", \"enabled\": true, \"by\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/SchoolFoods\"], \"x-apifox-folder\": \"学校端/SchoolFoods\", \"x-original-tags\": [\"SchoolFoods\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-foods.controller.ts:93；SchoolFoodsController.create\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:686；schoolFoodsCreate(body: { code?: string; name: string; canteenId?: number; remark?: string; imageUrl?: string; enabled?: boolean; by?: string })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-foods.controller.ts\", \"line\": 93, \"controller\": \"SchoolFoodsController\", \"handler\": \"create\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 686, \"function\": \"schoolFoodsCreate(body: { code?: string; name: string; canteenId?: number; remark?: string; imageUrl?: string; enabled?: boolean; by?: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/foods/exists\": {\"get\": {\"tags\": [\"学校端/SchoolFoods\"], \"x-apifox-folder\": \"学校端/SchoolFoods\", \"summary\": \"检查菜品名称是否已存在\", \"operationId\": \"SchoolFoodsController_exists\", \"parameters\": [{\"name\": \"name\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"description\": \"来源：Query(name)；源码类型：string\"}, {\"name\": \"canteenId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(canteenId)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-foods.controller.ts:83；SchoolFoodsController.exists\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:697；schoolFoodsExists(name: string, canteenId: number)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-foods.controller.ts\", \"line\": 83, \"controller\": \"SchoolFoodsController\", \"handler\": \"exists\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 697, \"function\": \"schoolFoodsExists(name: string, canteenId: number)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/school/foods/export.csv\": {\"get\": {\"operationId\": \"SchoolFoodsController_exportCsv\", \"summary\": \"导出菜品 CSV\", \"parameters\": [{\"name\": \"q\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"status\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"ACTIVE\"}}], \"responses\": {\"200\": {\"description\": \"返回 { csv }\"}}, \"tags\": [\"学校端/SchoolFoods\"], \"x-apifox-folder\": \"学校端/SchoolFoods\", \"x-original-tags\": [\"SchoolFoods\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-foods.controller.ts:235；SchoolFoodsController.exportCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-foods.controller.ts\", \"line\": 235, \"controller\": \"SchoolFoodsController\", \"handler\": \"exportCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/home/overview\": {\"get\": {\"operationId\": \"SchoolHomeController_overview\", \"summary\": \"Aggregated home overview (single API)\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"aiPeriod\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School Home\"], \"x-apifox-folder\": \"学校端/School Home\", \"x-original-tags\": [\"School Home\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-home.controller.ts:46；SchoolHomeController.overview\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:227；homeOverview(params: { schoolId?: string; canteenId?: string; aiPeriod?: 'week' | '7d' })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-home.controller.ts\", \"line\": 46, \"controller\": \"SchoolHomeController\", \"handler\": \"overview\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 227, \"function\": \"homeOverview(params: { schoolId?: string; canteenId?: string; aiPeriod?: 'week' | '7d' })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/hygiene/inspections\": {\"get\": {\"operationId\": \"HygieneController_listInspections\", \"summary\": \"List hygiene inspections\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"pageSize\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"result\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：InspectResult\", \"x-source-type\": \"InspectResult\"}, \"description\": \"来源：Query(result)；源码类型：InspectResult\"}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/PagedHygieneInspections\"}}}}, \"401\": {\"description\": \"Unauthorized\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}, \"403\": {\"description\": \"Forbidden\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}}, \"tags\": [\"学校端/Hygiene\"], \"x-apifox-folder\": \"学校端/Hygiene\", \"x-original-tags\": [\"Hygiene\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/hygiene.controller.ts:14；HygieneController.listInspections\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:847；hygieneList(params: { result?: '合格' | '不合格'; start?: string; end?: string; page?: number; pageSize?: number; schoolId?: number; })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/hygiene.controller.ts\", \"line\": 14, \"controller\": \"HygieneController\", \"handler\": \"listInspections\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 847, \"function\": \"hygieneList(params: { result?: '合格' | '不合格'; start?: string; end?: string; page?: number; pageSize?: number; schoolId?: number; })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"HygieneController_createInspection\", \"summary\": \"Create hygiene inspection\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Hygiene\"], \"x-apifox-folder\": \"学校端/Hygiene\", \"x-original-tags\": [\"Hygiene\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"string\", \"example\": \"1\"}, \"date\": {\"type\": \"string\", \"example\": \"2026-09-24\"}, \"result\": {\"type\": \"object\", \"description\": \"源码类型：InspectResult\", \"x-source-type\": \"InspectResult\"}, \"by\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"remark\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}, \"required\": [\"result\", \"by\"]}, \"example\": {\"schoolId\": \"1\", \"date\": \"2026-09-24\", \"result\": {}, \"by\": \"APIFOX_{{testBatch}}\", \"remark\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/hygiene.controller.ts:30；HygieneController.createInspection\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:862；hygieneCreate(body: { date?: string; result: '合格' | '不合格'; by: string; remark?: string; schoolId?: number; })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/hygiene.controller.ts\", \"line\": 30, \"controller\": \"HygieneController\", \"handler\": \"createInspection\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 862, \"function\": \"hygieneCreate(body: { date?: string; result: '合格' | '不合格'; by: string; remark?: string; schoolId?: number; })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/hygiene/stream\": {\"get\": {\"operationId\": \"HygieneController_stream\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Hygiene\"], \"x-apifox-folder\": \"学校端/Hygiene\", \"x-original-tags\": [\"Hygiene\"], \"summary\": \"HygieneController.stream\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/hygiene.controller.ts:69；HygieneController.stream\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/hygiene.controller.ts\", \"line\": 69, \"controller\": \"HygieneController\", \"handler\": \"stream\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/inventory/additives\": {\"get\": {\"operationId\": \"InventoryController_listAdditives\", \"summary\": \"List food additives\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:664；InventoryController.listAdditives\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 664, \"controller\": \"InventoryController\", \"handler\": \"listAdditives\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"post\": {\"operationId\": \"InventoryController_createAdditive\", \"summary\": \"Create food additive record\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"number\", \"example\": 1}, \"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"amount\": {\"type\": \"number\", \"example\": 10}, \"dish\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"by\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"name\", \"amount\"]}, \"example\": {\"schoolId\": 1, \"name\": \"APIFOX_{{testBatch}}_测试数据\", \"amount\": 10, \"dish\": \"APIFOX_{{testBatch}}\", \"by\": \"APIFOX_{{testBatch}}\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:669；InventoryController.createAdditive\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1194；invAdditiveCreate(body: { name: string; amount: number; dish?: string; by?: string; schoolId?: string; })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 669, \"controller\": \"InventoryController\", \"handler\": \"createAdditive\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1194, \"function\": \"invAdditiveCreate(body: { name: string; amount: number; dish?: string; by?: string; schoolId?: string; })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/categories\": {\"get\": {\"operationId\": \"InventoryController_listCategories\", \"summary\": \"List categories\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:20；InventoryController.listCategories\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 20, \"controller\": \"InventoryController\", \"handler\": \"listCategories\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"post\": {\"operationId\": \"InventoryController_createCategory\", \"summary\": \"Create category\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"string\", \"example\": \"1\"}, \"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}}, \"required\": [\"name\"]}, \"example\": {\"schoolId\": \"1\", \"name\": \"APIFOX_{{testBatch}}_测试数据\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:25；InventoryController.createCategory\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1023；invCategoryCreate(name: string, schoolId: string)；body={ name, schoolId }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 25, \"controller\": \"InventoryController\", \"handler\": \"createCategory\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1023, \"function\": \"invCategoryCreate(name: string, schoolId: string)\", \"bodyExpression\": \"{ name, schoolId }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/inbound\": {\"get\": {\"operationId\": \"InventoryController_listInbound\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {\"$ref\": \"#/components/schemas/InboundRecordDTO\"}}}}}, \"401\": {\"description\": \"Unauthorized\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}, \"403\": {\"description\": \"Forbidden\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"summary\": \"InventoryController.listInbound\", \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:283；InventoryController.listInbound\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 283, \"controller\": \"InventoryController\", \"handler\": \"listInbound\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"post\": {\"operationId\": \"InventoryController_createInbound\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/CreateInboundBodyDTO\"}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"summary\": \"InventoryController.createInbound\", \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:358；InventoryController.createInbound\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1114；invInboundCreate(body: { productId: string; qty: number; supplierId?: string; warehouseId?: string; imageUrl?: string; schoolId?: string; })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 358, \"controller\": \"InventoryController\", \"handler\": \"createInbound\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1114, \"function\": \"invInboundCreate(body: { productId: string; qty: number; supplierId?: string; warehouseId?: string; imageUrl?: string; schoolId?: string; })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/inbound/doc\": {\"get\": {\"operationId\": \"InventoryController_inboundDocDetail\", \"parameters\": [{\"name\": \"docNo\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/InboundDocDTO\"}}}}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"summary\": \"InventoryController.inboundDocDetail\", \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:390；InventoryController.inboundDocDetail\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1117；invInboundDocDetail(docNo: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 390, \"controller\": \"InventoryController\", \"handler\": \"inboundDocDetail\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1117, \"function\": \"invInboundDocDetail(docNo: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"patch\": {\"operationId\": \"InventoryController_updateInboundDoc\", \"summary\": \"Update inbound document\", \"parameters\": [{\"name\": \"docNo\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/UpdateInboundDocBodyDTO\"}}}}, \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:396；InventoryController.updateInboundDoc\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1119；invInboundUpdateDoc(docNo: string, body: any)；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 396, \"controller\": \"InventoryController\", \"handler\": \"updateInboundDoc\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1119, \"function\": \"invInboundUpdateDoc(docNo: string, body: any)\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"InventoryController_createInboundDoc\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/CreateInboundDocBodyDTO\"}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"summary\": \"InventoryController.createInboundDoc\", \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:374；InventoryController.createInboundDoc\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1118；invInboundCreateDoc(body: any)；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 374, \"controller\": \"InventoryController\", \"handler\": \"createInboundDoc\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1118, \"function\": \"invInboundCreateDoc(body: any)\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/inbound/docs\": {\"get\": {\"operationId\": \"InventoryController_listInboundDocs\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {\"$ref\": \"#/components/schemas/InboundDocDTO\"}}}}}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"summary\": \"InventoryController.listInboundDocs\", \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:290；InventoryController.listInboundDocs\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 290, \"controller\": \"InventoryController\", \"handler\": \"listInboundDocs\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/inventory/inbound/export.csv\": {\"get\": {\"operationId\": \"InventoryController_exportInboundCsv\", \"summary\": \"Export inbound document summary (CSV)\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:296；InventoryController.exportInboundCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 296, \"controller\": \"InventoryController\", \"handler\": \"exportInboundCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/inventory/outbound\": {\"get\": {\"operationId\": \"InventoryController_listOutbound\", \"summary\": \"List outbound records\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {\"$ref\": \"#/components/schemas/OutboundRecordDTO\"}}}}}, \"401\": {\"description\": \"Unauthorized\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}, \"403\": {\"description\": \"Forbidden\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:438；InventoryController.listOutbound\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 438, \"controller\": \"InventoryController\", \"handler\": \"listOutbound\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"post\": {\"operationId\": \"InventoryController_createOutbound\", \"summary\": \"Create outbound record\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/CreateOutboundBodyDTO\"}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:498；InventoryController.createOutbound\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1151；invOutboundCreate(body: { productId: string; qty: number; purpose?: string; by?: string; receiver?: string; canteenId?: number; date?: string; warehouseId?: string; schoolId?: string; })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 498, \"controller\": \"InventoryController\", \"handler\": \"createOutbound\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1151, \"function\": \"invOutboundCreate(body: { productId: string; qty: number; purpose?: string; by?: string; receiver?: string; canteenId?: number; date?: string; warehouseId?: string; schoolId?: string; })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/outbound/batches\": {\"get\": {\"operationId\": \"InventoryController_outboundBatches\", \"summary\": \"List outbound batches (recent)\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"1\"}, {\"type\": \"number\", \"example\": 1}]}, \"description\": \"来源：Query(schoolId)；源码类型：string | number\"}, {\"name\": \"productId\", \"in\": \"query\", \"required\": false, \"schema\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"1\"}, {\"type\": \"number\", \"example\": 1}]}, \"description\": \"来源：Query(productId)；源码类型：string | number\"}, {\"name\": \"canteenId\", \"in\": \"query\", \"required\": false, \"schema\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"1\"}, {\"type\": \"number\", \"example\": 1}]}, \"description\": \"来源：Query(canteenId)；源码类型：string | number\"}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {\"$ref\": \"#/components/schemas/OutboundBatchDTO\"}}}}}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:552；InventoryController.outboundBatches\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1131；invOutboundBatches(params: { schoolId?: string | number; productId: string | number; canteenId?: string | number })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 552, \"controller\": \"InventoryController\", \"handler\": \"outboundBatches\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1131, \"function\": \"invOutboundBatches(params: { schoolId?: string | number; productId: string | number; canteenId?: string | number })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/outbound/export.csv\": {\"get\": {\"operationId\": \"InventoryController_exportOutboundCsv\", \"summary\": \"Export outbound records (CSV)\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:446；InventoryController.exportOutboundCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 446, \"controller\": \"InventoryController\", \"handler\": \"exportOutboundCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/inventory/products\": {\"get\": {\"operationId\": \"InventoryController_listProductsV2\", \"summary\": \"List products\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:33；InventoryController.listProductsV2\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 33, \"controller\": \"InventoryController\", \"handler\": \"listProductsV2\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"patch\": {\"operationId\": \"InventoryController_updateProductV2\", \"summary\": \"Update product\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:44；InventoryController.updateProductV2\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1027；invProductUpdate(id: number, patchBody: any)；body=patchBody\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 44, \"controller\": \"InventoryController\", \"handler\": \"updateProductV2\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1027, \"function\": \"invProductUpdate(id: number, patchBody: any)\", \"bodyExpression\": \"patchBody\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"InventoryController_createProductV2\", \"summary\": \"Create product\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"string\", \"example\": \"1\"}, \"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"unit\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"category\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"spec\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"lastPrice\": {\"type\": \"number\", \"example\": 10}}, \"required\": [\"name\", \"unit\"]}, \"example\": {\"schoolId\": \"1\", \"name\": \"APIFOX_{{testBatch}}_测试数据\", \"unit\": \"APIFOX_{{testBatch}}\", \"category\": \"APIFOX_{{testBatch}}\", \"spec\": \"APIFOX_{{testBatch}}\", \"lastPrice\": 10}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:38；InventoryController.createProductV2\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1026；invProductCreate(body: { schoolId?: string | number; name: string; unit: string; category?: string; spec?: string; lastPrice?: number })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 38, \"controller\": \"InventoryController\", \"handler\": \"createProductV2\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1026, \"function\": \"invProductCreate(body: { schoolId?: string | number; name: string; unit: string; category?: string; spec?: string; lastPrice?: number })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/stock\": {\"get\": {\"operationId\": \"InventoryController_stock\", \"summary\": \"Stock summary\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:564；InventoryController.stock\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 564, \"controller\": \"InventoryController\", \"handler\": \"stock\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/inventory/stock/batches\": {\"get\": {\"operationId\": \"InventoryController_stockBatches\", \"summary\": \"List stock batches by product\", \"parameters\": [{\"name\": \"near\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"oneOf\": [{\"type\": \"number\", \"example\": 1}, {\"type\": \"string\", \"example\": \"1\"}]}, \"description\": \"来源：Query(schoolId)；源码类型：number | string\"}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {\"$ref\": \"#/components/schemas/BatchStockDTO\"}}}}}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:575；InventoryController.stockBatches\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1158；invStockBatches(params: { schoolId?: string | number; near?: 'true' | 'false' })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 575, \"controller\": \"InventoryController\", \"handler\": \"stockBatches\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1158, \"function\": \"invStockBatches(params: { schoolId?: string | number; near?: 'true' | 'false' })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/stock/export.csv\": {\"get\": {\"operationId\": \"InventoryController_exportStockCsv\", \"summary\": \"Export stock batches (CSV)\", \"parameters\": [{\"name\": \"near\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"oneOf\": [{\"type\": \"number\", \"example\": 1}, {\"type\": \"string\", \"example\": \"1\"}]}, \"description\": \"来源：Query(schoolId)；源码类型：number | string\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:585；InventoryController.exportStockCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 585, \"controller\": \"InventoryController\", \"handler\": \"exportStockCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/inventory/stream\": {\"get\": {\"operationId\": \"InventoryController_stream\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"summary\": \"InventoryController.stream\", \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:678；InventoryController.stream\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 678, \"controller\": \"InventoryController\", \"handler\": \"stream\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/inventory/suppliers\": {\"get\": {\"operationId\": \"InventoryController_listSuppliers\", \"summary\": \"List suppliers (paged, filterable)\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"q\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"enabled\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"expired\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"expireStart\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"expireEnd\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/PagedSuppliers\"}}}}, \"401\": {\"description\": \"Unauthorized\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}, \"403\": {\"description\": \"Forbidden\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:73；InventoryController.listSuppliers\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1044；invSuppliers(params: { q?: string; enabled?: 'true' | 'false'; expired?: 'true' | 'false'; expireStart?: string; expireEnd?: string; page?: number; pageSize?: number; schoolId?: string; })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 73, \"controller\": \"InventoryController\", \"handler\": \"listSuppliers\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1044, \"function\": \"invSuppliers(params: { q?: string; enabled?: 'true' | 'false'; expired?: 'true' | 'false'; expireStart?: string; expireEnd?: string; page?: number; pageSize?: number; schoolId?: string; })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"patch\": {\"operationId\": \"InventoryController_updateSupplier\", \"summary\": \"Update supplier\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:114；InventoryController.updateSupplier\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1276；invSupplierUpdate(id: string, body: any)；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 114, \"controller\": \"InventoryController\", \"handler\": \"updateSupplier\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1276, \"function\": \"invSupplierUpdate(id: string, body: any)\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"InventoryController_createSupplier\", \"summary\": \"Create supplier\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/CreateSupplierBodyDTO\"}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:95；InventoryController.createSupplier\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1053；invSupplierCreate(body: any)；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 95, \"controller\": \"InventoryController\", \"handler\": \"createSupplier\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1053, \"function\": \"invSupplierCreate(body: any)\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/suppliers/{id}/certificates/export.csv\": {\"get\": {\"operationId\": \"InventoryController_exportSupplierCerts\", \"summary\": \"Export supplier certificates CSV\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:148；InventoryController.exportSupplierCerts\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 148, \"controller\": \"InventoryController\", \"handler\": \"exportSupplierCerts\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/inventory/suppliers/detail\": {\"get\": {\"operationId\": \"InventoryController_getSupplier\", \"summary\": \"Supplier detail\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:90；InventoryController.getSupplier\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1278；invSupplierDetail(id: string | number)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 90, \"controller\": \"InventoryController\", \"handler\": \"getSupplier\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1278, \"function\": \"invSupplierDetail(id: string | number)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/suppliers/export.csv\": {\"get\": {\"operationId\": \"InventoryController_exportCsv\", \"summary\": \"Export suppliers CSV\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:173；InventoryController.exportCsv\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1281；invSuppliersExportCsv()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 173, \"controller\": \"InventoryController\", \"handler\": \"exportCsv\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1281, \"function\": \"invSuppliersExportCsv()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/suppliers/summary\": {\"get\": {\"operationId\": \"InventoryController_summary\", \"summary\": \"Supplier summary\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:168；InventoryController.summary\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1307；invSupplierSummary(id: string | number)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 168, \"controller\": \"InventoryController\", \"handler\": \"summary\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1307, \"function\": \"invSupplierSummary(id: string | number)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/tickets\": {\"get\": {\"operationId\": \"InventoryController_listTickets\", \"summary\": \"List purchase tickets\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {\"$ref\": \"#/components/schemas/TicketDTO\"}}}}}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:650；InventoryController.listTickets\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 650, \"controller\": \"InventoryController\", \"handler\": \"listTickets\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"post\": {\"operationId\": \"InventoryController_createTicket\", \"summary\": \"Create purchase ticket\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"number\", \"example\": 1}, \"productId\": {\"type\": \"string\", \"example\": \"1\"}, \"type\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"imageUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}}, \"required\": [\"productId\", \"type\"]}, \"example\": {\"schoolId\": 1, \"productId\": \"1\", \"type\": \"APIFOX_{{testBatch}}\", \"imageUrl\": \"https://example.test/apifox-autotest.jpg\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:656；InventoryController.createTicket\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 656, \"controller\": \"InventoryController\", \"handler\": \"createTicket\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/inventory/warehouses\": {\"get\": {\"operationId\": \"InventoryController_listWarehouses\", \"summary\": \"List warehouses\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:245；InventoryController.listWarehouses\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 245, \"controller\": \"InventoryController\", \"handler\": \"listWarehouses\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"patch\": {\"operationId\": \"InventoryController_updateWarehouse\", \"summary\": \"Update warehouse\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"location\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"capacity\": {\"type\": \"number\", \"example\": 10}}}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"location\": \"APIFOX_{{testBatch}}\", \"capacity\": 10}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:258；InventoryController.updateWarehouse\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1074；invWarehouseUpdate(id: string, body: { name?: string; location?: string; capacity?: number })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 258, \"controller\": \"InventoryController\", \"handler\": \"updateWarehouse\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1074, \"function\": \"invWarehouseUpdate(id: string, body: { name?: string; location?: string; capacity?: number })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"InventoryController_createWarehouse\", \"summary\": \"Create warehouse\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"string\", \"example\": \"1\"}, \"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"location\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"capacity\": {\"type\": \"number\", \"example\": 10}}, \"required\": [\"name\"]}, \"example\": {\"schoolId\": \"1\", \"name\": \"APIFOX_{{testBatch}}_测试数据\", \"location\": \"APIFOX_{{testBatch}}\", \"capacity\": 10}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:250；InventoryController.createWarehouse\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1064；invWarehouseCreate(body: { name: string; location?: string; capacity?: number; schoolId?: string; })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 250, \"controller\": \"InventoryController\", \"handler\": \"createWarehouse\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1064, \"function\": \"invWarehouseCreate(body: { name: string; location?: string; capacity?: number; schoolId?: string; })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/meal-plans\": {\"get\": {\"operationId\": \"MealPlansController_list\", \"summary\": \"列表查询配餐\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"meal\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"page\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"pageSize\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/MealPlans\"], \"x-apifox-folder\": \"学校端/MealPlans\", \"x-original-tags\": [\"MealPlans\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/meal-plans.controller.ts:55；MealPlansController.list\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:669；mealPlansList(params: { schoolId?: number; canteenId?: number; start?: string; end?: string; meal?: string; page?: number; pageSize?: number })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/meal-plans.controller.ts\", \"line\": 55, \"controller\": \"MealPlansController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 669, \"function\": \"mealPlansList(params: { schoolId?: number; canteenId?: number; start?: string; end?: string; meal?: string; page?: number; pageSize?: number })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"MealPlansController_create\", \"summary\": \"新增/覆盖配餐\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"schoolId\", \"date\", \"meal\", \"foods\"], \"properties\": {\"schoolId\": {\"type\": \"integer\"}, \"canteenId\": {\"type\": \"integer\"}, \"date\": {\"type\": \"string\", \"example\": \"2025-01-01\"}, \"meal\": {\"type\": \"string\", \"example\": \"早餐\"}, \"foods\": {\"type\": \"array\", \"items\": {\"type\": \"string\"}, \"description\": \"菜品名称数组\"}, \"remark\": {\"type\": \"string\"}, \"by\": {\"type\": \"string\", \"description\": \"操作员\"}}}, \"example\": {\"schoolId\": 1, \"canteenId\": 1, \"date\": \"2025-01-01\", \"meal\": \"早餐\", \"foods\": [\"APIFOX_{{testBatch}}\"], \"remark\": \"APIFOX_{{testBatch}} 自动化测试数据\", \"by\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/MealPlans\"], \"x-apifox-folder\": \"学校端/MealPlans\", \"x-original-tags\": [\"MealPlans\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/meal-plans.controller.ts:81；MealPlansController.create\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:672；mealPlansCreate(body: { schoolId: number; canteenId?: number; date: string; meal: string; foods: string[]; remark?: string; by?: string })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/meal-plans.controller.ts\", \"line\": 81, \"controller\": \"MealPlansController\", \"handler\": \"create\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 672, \"function\": \"mealPlansCreate(body: { schoolId: number; canteenId?: number; date: string; meal: string; foods: string[]; remark?: string; by?: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/meal-plans/export.csv\": {\"get\": {\"operationId\": \"MealPlansController_exportCsv\", \"summary\": \"导出CSV\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"返回 CSV 文本\"}}, \"tags\": [\"学校端/MealPlans\"], \"x-apifox-folder\": \"学校端/MealPlans\", \"x-original-tags\": [\"MealPlans\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/meal-plans.controller.ts:269；MealPlansController.exportCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/meal-plans.controller.ts\", \"line\": 269, \"controller\": \"MealPlansController\", \"handler\": \"exportCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/messages/rectify\": {\"get\": {\"operationId\": \"SchoolMessagesController_schoolRectifyList\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"pageSize\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School Messages\"], \"x-apifox-folder\": \"学校端/School Messages\", \"x-original-tags\": [\"School Messages\"], \"summary\": \"SchoolMessagesController.schoolRectifyList\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-messages.controller.ts:38；SchoolMessagesController.schoolRectifyList\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1651；schoolRectifyMessages(params: { schoolId?: string; start?: string; end?: string; page?: number; pageSize?: number })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-messages.controller.ts\", \"line\": 38, \"controller\": \"SchoolMessagesController\", \"handler\": \"schoolRectifyList\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1651, \"function\": \"schoolRectifyMessages(params: { schoolId?: string; start?: string; end?: string; page?: number; pageSize?: number })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/morning-checks\": {\"get\": {\"operationId\": \"MorningCheckController_list\", \"summary\": \"List morning checks (paged, filterable)\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"schoolIds\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"staff\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"pageSize\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"result\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：MCResult\", \"x-source-type\": \"MCResult\"}, \"description\": \"来源：Query(result)；源码类型：MCResult\"}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/PagedMorningChecks\"}}}}}, \"tags\": [\"学校端/MorningCheckApiAdapter\"], \"x-apifox-folder\": \"学校端/MorningCheckApiAdapter\", \"x-original-tags\": [\"Morning Checks\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-mc.adapter.controller.ts:11；MorningCheckApiAdapterController.list\\n- services/gateway-service/src/modules/morning-check.controller.ts:47；MorningCheckController.list\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:533；morningList(params: { schoolId?: number; canteenId?: number|string; staff?: string; result?: '正常' | '异常'; start?: string; end?: string; page?: number; pageSize?: number })\\n- mobile-emergency: apps/mobile-emergency/src/api/index.ts:30；morningChecks(params: { schoolId?: string; page?: number; pageSize?: number })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-mc.adapter.controller.ts\", \"line\": 11, \"controller\": \"MorningCheckApiAdapterController\", \"handler\": \"list\"}, {\"file\": \"services/gateway-service/src/modules/morning-check.controller.ts\", \"line\": 47, \"controller\": \"MorningCheckController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 533, \"function\": \"morningList(params: { schoolId?: number; canteenId?: number|string; staff?: string; result?: '正常' | '异常'; start?: string; end?: string; page?: number; pageSize?: number })\", \"bodyExpression\": \"\"}, {\"app\": \"mobile-emergency\", \"file\": \"apps/mobile-emergency/src/api/index.ts\", \"line\": 30, \"function\": \"morningChecks(params: { schoolId?: string; page?: number; pageSize?: number })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"MorningCheckController_create\", \"summary\": \"Create morning check record\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/CreateMorningCheckBodyDTO\"}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Morning Checks\"], \"x-apifox-folder\": \"学校端/Morning Checks\", \"x-original-tags\": [\"Morning Checks\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/morning-check.controller.ts:231；MorningCheckController.create\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:579；morningCreate(body: { staff: string; temp: number; schoolId?: number; at?: string; // 指定日期/时间（可选） hygiene?: '正常'|'异常'; photoUrl?: string; // Optional third-party-compatible fields State?: number; CheckResult?: number; HeathResult?: number; IsUrl?: boolean | number; Picture_Img_Base64?: string; Picture_Img_Url?: string; Face_Img_Base64?: string; Face_Img_Url?: string; Picture_Back_Img_Base64?: string; Picture_Back_Img_Url?: string; })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/morning-check.controller.ts\", \"line\": 231, \"controller\": \"MorningCheckController\", \"handler\": \"create\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 579, \"function\": \"morningCreate(body: { staff: string; temp: number; schoolId?: number; at?: string; // 指定日期/时间（可选） hygiene?: '正常'|'异常'; photoUrl?: string; // Optional third-party-compatible fields State?: number; CheckResult?: number; HeathResult?: number; IsUrl?: boolean | number; Picture_Img_Base64?: string; Picture_Img_Url?: string; Face_Img_Base64?: string; Face_Img_Url?: string; Picture_Back_Img_Base64?: string; Picture_Back_Img_Url?: string; })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/morning-checks/export.csv\": {\"get\": {\"tags\": [\"学校端/Morning Checks\"], \"x-apifox-folder\": \"学校端/Morning Checks\", \"summary\": \"Export morning checks (CSV)\", \"operationId\": \"MorningCheckController_exportCsv\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}, {\"name\": \"canteenId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(canteenId)；源码类型：string\"}, {\"name\": \"staff\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(staff)；源码类型：string\"}, {\"name\": \"result\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：MCResult\", \"x-source-type\": \"MCResult\"}, \"description\": \"来源：Query(result)；源码类型：MCResult\"}, {\"name\": \"start\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(start)；源码类型：string\"}, {\"name\": \"end\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(end)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/morning-check.controller.ts:301；MorningCheckController.exportCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/morning-check.controller.ts\", \"line\": 301, \"controller\": \"MorningCheckController\", \"handler\": \"exportCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/school/morning-checks/history\": {\"get\": {\"tags\": [\"学校端/Morning Checks\"], \"x-apifox-folder\": \"学校端/Morning Checks\", \"summary\": \"List all morning checks for a staff on a date\", \"operationId\": \"MorningCheckController_history\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}, {\"name\": \"staff\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(staff)；源码类型：string\"}, {\"name\": \"date\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24\"}, \"description\": \"来源：Query(date)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/morning-check.controller.ts:216；MorningCheckController.history\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:543；morningHistory(params: { schoolId: number | string; staff: number | string; date: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/morning-check.controller.ts\", \"line\": 216, \"controller\": \"MorningCheckController\", \"handler\": \"history\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 543, \"function\": \"morningHistory(params: { schoolId: number | string; staff: number | string; date: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/school/morning-checks/overview\": {\"get\": {\"operationId\": \"MorningCheckController_overview\", \"summary\": \"Daily overview by canteen\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"date\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Morning Checks\"], \"x-apifox-folder\": \"学校端/Morning Checks\", \"x-original-tags\": [\"Morning Checks\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/morning-check.controller.ts:140；MorningCheckController.overview\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:553；morningOverview(params: { schoolId?: number|string; date?: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/morning-check.controller.ts\", \"line\": 140, \"controller\": \"MorningCheckController\", \"handler\": \"overview\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 553, \"function\": \"morningOverview(params: { schoolId?: number|string; date?: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/morning-checks/stream\": {\"get\": {\"operationId\": \"MorningCheckController_sse\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/MorningCheckApiAdapter\"], \"x-apifox-folder\": \"学校端/MorningCheckApiAdapter\", \"x-original-tags\": [\"Morning Checks\"], \"summary\": \"MorningCheckApiAdapterController.sse\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-mc.adapter.controller.ts:25；MorningCheckApiAdapterController.sse\\n- services/gateway-service/src/modules/morning-check.controller.ts:296；MorningCheckController.sse\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-mc.adapter.controller.ts\", \"line\": 25, \"controller\": \"MorningCheckApiAdapterController\", \"handler\": \"sse\"}, {\"file\": \"services/gateway-service/src/modules/morning-check.controller.ts\", \"line\": 296, \"controller\": \"MorningCheckController\", \"handler\": \"sse\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/personnel\": {\"get\": {\"operationId\": \"PersonnelController_list\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"name\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}}, {\"name\": \"phone\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"13800138000\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"page\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"pageSize\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/PagedPersonnel\"}}}}, \"401\": {\"description\": \"Unauthorized\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}, \"403\": {\"description\": \"Forbidden\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}}, \"tags\": [\"学校端/Personnel\"], \"x-apifox-folder\": \"学校端/Personnel\", \"x-original-tags\": [\"Personnel\"], \"summary\": \"PersonnelController.list\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/personnel.controller.ts:70；PersonnelController.list\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:767；personnelList(params: { schoolId?: number; name?: string; phone?: string; canteenId?: number; page?: number; pageSize?: number })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/personnel.controller.ts\", \"line\": 70, \"controller\": \"PersonnelController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 767, \"function\": \"personnelList(params: { schoolId?: number; name?: string; phone?: string; canteenId?: number; page?: number; pageSize?: number })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"patch\": {\"operationId\": \"PersonnelController_update\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Personnel\"], \"x-apifox-folder\": \"学校端/Personnel\", \"x-original-tags\": [\"Personnel\"], \"summary\": \"PersonnelController.update\", \"requestBody\": {\"required\": false, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"canteenId\": {\"type\": \"number\", \"example\": 1}, \"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"gender\": {\"type\": \"string\", \"enum\": [\"男\", \"女\"], \"example\": \"男\"}, \"phone\": {\"type\": \"string\", \"example\": \"13800138000\"}, \"jobTitle\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"healthCertNo\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"healthCertAuthority\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"healthCertIssueAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"healthCertExpireAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"healthCertFrontUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}, \"healthCertBackUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}, \"enabled\": {\"type\": \"boolean\", \"example\": true}}}, \"example\": {\"canteenId\": 1, \"name\": \"APIFOX_{{testBatch}}_测试数据\", \"gender\": \"男\", \"phone\": \"13800138000\", \"jobTitle\": \"APIFOX_{{testBatch}}_测试数据\", \"healthCertNo\": \"APIFOX_{{testBatch}}_001\", \"healthCertAuthority\": \"APIFOX_{{testBatch}}\", \"healthCertIssueAt\": \"2026-09-24 10:00:00\", \"healthCertExpireAt\": \"2026-09-24 10:00:00\", \"healthCertFrontUrl\": \"https://example.test/apifox-autotest.jpg\", \"healthCertBackUrl\": \"https://example.test/apifox-autotest.jpg\", \"enabled\": true}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/personnel.controller.ts:225；PersonnelController.update\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1273；personnelUpdate(id: number, patchBody: any)；body=patchBody\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/personnel.controller.ts\", \"line\": 225, \"controller\": \"PersonnelController\", \"handler\": \"update\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1273, \"function\": \"personnelUpdate(id: number, patchBody: any)\", \"bodyExpression\": \"patchBody\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"PersonnelController_create\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Personnel\"], \"x-apifox-folder\": \"学校端/Personnel\", \"x-original-tags\": [\"Personnel\"], \"summary\": \"PersonnelController.create\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"number\", \"example\": 1}, \"canteenId\": {\"type\": \"number\", \"example\": 1}, \"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"gender\": {\"type\": \"string\", \"enum\": [\"男\", \"女\"], \"example\": \"男\"}, \"phone\": {\"type\": \"string\", \"example\": \"13800138000\"}, \"jobTitle\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"healthCertNo\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"healthCertAuthority\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"healthCertIssueAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"healthCertExpireAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"healthCertFrontUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}, \"healthCertBackUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}, \"enabled\": {\"type\": \"boolean\", \"example\": true}, \"idCardNumber\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"accessCard\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"idCardFrontUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}, \"facePhotoUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}}, \"required\": [\"name\"]}, \"example\": {\"schoolId\": 1, \"canteenId\": 1, \"name\": \"APIFOX_{{testBatch}}_测试数据\", \"gender\": \"男\", \"phone\": \"13800138000\", \"jobTitle\": \"APIFOX_{{testBatch}}_测试数据\", \"healthCertNo\": \"APIFOX_{{testBatch}}_001\", \"healthCertAuthority\": \"APIFOX_{{testBatch}}\", \"healthCertIssueAt\": \"2026-09-24 10:00:00\", \"healthCertExpireAt\": \"2026-09-24 10:00:00\", \"healthCertFrontUrl\": \"https://example.test/apifox-autotest.jpg\", \"healthCertBackUrl\": \"https://example.test/apifox-autotest.jpg\", \"enabled\": true, \"idCardNumber\": \"APIFOX_{{testBatch}}_001\", \"accessCard\": \"APIFOX_{{testBatch}}\", \"idCardFrontUrl\": \"https://example.test/apifox-autotest.jpg\", \"facePhotoUrl\": \"https://example.test/apifox-autotest.jpg\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/personnel.controller.ts:136；PersonnelController.create\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1272；personnelCreate(body: any)；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/personnel.controller.ts\", \"line\": 136, \"controller\": \"PersonnelController\", \"handler\": \"create\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1272, \"function\": \"personnelCreate(body: any)\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/personnel/detail\": {\"get\": {\"operationId\": \"PersonnelController_detail\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Personnel\"], \"x-apifox-folder\": \"学校端/Personnel\", \"x-original-tags\": [\"Personnel\"], \"summary\": \"PersonnelController.detail\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/personnel.controller.ts:296；PersonnelController.detail\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1275；personnelDetail(id: number | string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/personnel.controller.ts\", \"line\": 296, \"controller\": \"PersonnelController\", \"handler\": \"detail\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1275, \"function\": \"personnelDetail(id: number | string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/pesticide/records\": {\"get\": {\"operationId\": \"PesticideController_list\", \"summary\": \"List pesticide test records\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"q\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"sort\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"page\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"pageSize\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"result\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：PesticideResult\", \"x-source-type\": \"PesticideResult\"}, \"description\": \"来源：Query(result)；源码类型：PesticideResult\"}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/PagedPesticideRecords\"}}}}, \"401\": {\"description\": \"Unauthorized\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}, \"403\": {\"description\": \"Forbidden\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}}, \"tags\": [\"学校端/Pesticide\"], \"x-apifox-folder\": \"学校端/Pesticide\", \"x-original-tags\": [\"Pesticide\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/pesticide.controller.ts:25；PesticideController.list\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:780；pesticideList(params: { q?: string; result?: '合格' | '不合格'; start?: string; end?: string; page?: number; pageSize?: number; schoolId?: number; })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/pesticide.controller.ts\", \"line\": 25, \"controller\": \"PesticideController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 780, \"function\": \"pesticideList(params: { q?: string; result?: '合格' | '不合格'; start?: string; end?: string; page?: number; pageSize?: number; schoolId?: number; })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"PesticideController_create\", \"summary\": \"Create pesticide test record\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/CreatePesticideBodyDTO\"}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Pesticide\"], \"x-apifox-folder\": \"学校端/Pesticide\", \"x-original-tags\": [\"Pesticide\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/pesticide.controller.ts:96；PesticideController.create\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:822；pesticideCreate(body: { sample: string; device: string; result: '合格' | '不合格'; imageUrl?: string; remark?: string; schoolId?: number; canteenId?: number; jiancedidian?: string; lianxidianhua?: string; tester?: string; value?: number | string; at?: string; // 检测时间（可选 ISO） })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/pesticide.controller.ts\", \"line\": 96, \"controller\": \"PesticideController\", \"handler\": \"create\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 822, \"function\": \"pesticideCreate(body: { sample: string; device: string; result: '合格' | '不合格'; imageUrl?: string; remark?: string; schoolId?: number; canteenId?: number; jiancedidian?: string; lianxidianhua?: string; tester?: string; value?: number | string; at?: string; // 检测时间（可选 ISO） })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/pesticide/records/export.csv\": {\"get\": {\"operationId\": \"PesticideController_exportCsv\", \"summary\": \"Export pesticide rapid-test records (CSV)\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"q\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"result\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：PesticideResult\", \"x-source-type\": \"PesticideResult\"}, \"description\": \"来源：Query(result)；源码类型：PesticideResult\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Pesticide\"], \"x-apifox-folder\": \"学校端/Pesticide\", \"x-original-tags\": [\"Pesticide\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/pesticide.controller.ts:44；PesticideController.exportCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/pesticide.controller.ts\", \"line\": 44, \"controller\": \"PesticideController\", \"handler\": \"exportCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/pesticide/stream\": {\"get\": {\"operationId\": \"PesticideController_stream\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Pesticide\"], \"x-apifox-folder\": \"学校端/Pesticide\", \"x-original-tags\": [\"Pesticide\"], \"summary\": \"PesticideController.stream\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/pesticide.controller.ts:146；PesticideController.stream\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/pesticide.controller.ts\", \"line\": 146, \"controller\": \"PesticideController\", \"handler\": \"stream\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/public/config\": {\"get\": {\"operationId\": \"PublicConfigController_get\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/PublicConfigDTO\"}}}}}, \"tags\": [\"学校端/Public Config\"], \"x-apifox-folder\": \"学校端/Public Config\", \"x-original-tags\": [\"Public Config\"], \"summary\": \"PublicConfigController.get\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/public-config.controller.ts:12；PublicConfigController.get\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/public-config.controller.ts\", \"line\": 12, \"controller\": \"PublicConfigController\", \"handler\": \"get\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"post\": {\"operationId\": \"PublicConfigController_update\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/PublicConfigUpdateBodyDTO\"}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Public Config\"], \"x-apifox-folder\": \"学校端/Public Config\", \"x-original-tags\": [\"Public Config\"], \"summary\": \"PublicConfigController.update\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/public-config.controller.ts:18；PublicConfigController.update\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1353；publicConfigUpdate(cfg: any & { schoolId?: string })；body=cfg\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/public-config.controller.ts\", \"line\": 18, \"controller\": \"PublicConfigController\", \"handler\": \"update\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1353, \"function\": \"publicConfigUpdate(cfg: any & { schoolId?: string })\", \"bodyExpression\": \"cfg\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/public/config/audit\": {\"get\": {\"operationId\": \"PublicConfigController_audit\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Public Config\"], \"x-apifox-folder\": \"学校端/Public Config\", \"x-original-tags\": [\"Public Config\"], \"summary\": \"PublicConfigController.audit\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/public-config.controller.ts:37；PublicConfigController.audit\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/public-config.controller.ts\", \"line\": 37, \"controller\": \"PublicConfigController\", \"handler\": \"audit\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/public/config/feedback/qr\": {\"get\": {\"operationId\": \"PublicConfigController_feedbackQr\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"Feedback QR for mobile Sunshine page\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\"}}}}}, \"tags\": [\"学校端/Public Config\"], \"x-apifox-folder\": \"学校端/Public Config\", \"x-original-tags\": [\"Public Config\"], \"summary\": \"PublicConfigController.feedbackQr\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/public-config.controller.ts:43；PublicConfigController.feedbackQr\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1356；publicFeedbackQr(params: { schoolId?: string; canteenId?: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/public-config.controller.ts\", \"line\": 43, \"controller\": \"PublicConfigController\", \"handler\": \"feedbackQr\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1356, \"function\": \"publicFeedbackQr(params: { schoolId?: string; canteenId?: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/public/feedback\": {\"get\": {\"operationId\": \"PublicFeedbackController_list\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"page\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"pageSize\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Public Feedback\"], \"x-apifox-folder\": \"学校端/Public Feedback\", \"x-original-tags\": [\"Public Feedback\"], \"summary\": \"PublicFeedbackController.list\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/public-feedback.controller.ts:40；PublicFeedbackController.list\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:478；publicFeedbackList(params: { schoolId: number | string; canteenId?: number | string; page?: number; pageSize?: number })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/public-feedback.controller.ts\", \"line\": 40, \"controller\": \"PublicFeedbackController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 478, \"function\": \"publicFeedbackList(params: { schoolId: number | string; canteenId?: number | string; page?: number; pageSize?: number })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/risk/catalog\": {\"get\": {\"operationId\": \"RiskController_catalog\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Risk\"], \"x-apifox-folder\": \"学校端/Risk\", \"summary\": \"RiskController.catalog\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/risk.controller.ts:27；RiskController.catalog\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1394；riskCatalog()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/risk.controller.ts\", \"line\": 27, \"controller\": \"RiskController\", \"handler\": \"catalog\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1394, \"function\": \"riskCatalog()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"patch\": {\"operationId\": \"RiskController_updateCatalog\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Risk\"], \"x-apifox-folder\": \"学校端/Risk\", \"summary\": \"RiskController.updateCatalog\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/risk.controller.ts:35；RiskController.updateCatalog\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1519；riskCatalogUpdate(id: string, body: any)；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/risk.controller.ts\", \"line\": 35, \"controller\": \"RiskController\", \"handler\": \"updateCatalog\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1519, \"function\": \"riskCatalogUpdate(id: string, body: any)\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"RiskController_createCatalog\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Risk\"], \"x-apifox-folder\": \"学校端/Risk\", \"summary\": \"RiskController.createCatalog\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"category\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"title\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"level\": {}, \"desc\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"title\", \"level\"]}, \"example\": {\"category\": \"APIFOX_{{testBatch}}\", \"title\": \"APIFOX_{{testBatch}}_测试数据\", \"level\": \"APIFOX_{{testBatch}}\", \"desc\": \"APIFOX_{{testBatch}}\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/risk.controller.ts:30；RiskController.createCatalog\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1401；riskCatalogCreate(body: { category?: string; title: string; level: '低' | '中' | '高'; desc?: string; })；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/risk.controller.ts\", \"line\": 30, \"controller\": \"RiskController\", \"handler\": \"createCatalog\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1401, \"function\": \"riskCatalogCreate(body: { category?: string; title: string; level: '低' | '中' | '高'; desc?: string; })\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/risk/catalog/export.csv\": {\"get\": {\"operationId\": \"RiskController_catalogExportCsv\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Risk\"], \"x-apifox-folder\": \"学校端/Risk\", \"summary\": \"RiskController.catalogExportCsv\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/risk.controller.ts:42；RiskController.catalogExportCsv\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1640；riskCatalogExportCsv()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/risk.controller.ts\", \"line\": 42, \"controller\": \"RiskController\", \"handler\": \"catalogExportCsv\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1640, \"function\": \"riskCatalogExportCsv()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/risk/reports\": {\"get\": {\"operationId\": \"RiskController_reports\", \"parameters\": [{\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"location\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"object\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"status\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：ReportStatus\", \"x-source-type\": \"ReportStatus\"}, \"description\": \"来源：Query(status)；源码类型：ReportStatus\"}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Risk\"], \"x-apifox-folder\": \"学校端/Risk\", \"summary\": \"RiskController.reports\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/risk.controller.ts:55；RiskController.reports\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1548；riskReports(params: { schoolId?: string; status?: '待处理' | '整改中' | '已整改'; start?: string; end?: string; location?: string; object?: string; page?: number; pageSize?: number; })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/risk.controller.ts\", \"line\": 55, \"controller\": \"RiskController\", \"handler\": \"reports\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1548, \"function\": \"riskReports(params: { schoolId?: string; status?: '待处理' | '整改中' | '已整改'; start?: string; end?: string; location?: string; object?: string; page?: number; pageSize?: number; })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"RiskController_createReport\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Risk\"], \"x-apifox-folder\": \"学校端/Risk\", \"summary\": \"RiskController.createReport\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"string\", \"example\": \"1\"}, \"location\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"object\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"desc\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"images\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"riskId\": {\"type\": \"string\", \"example\": \"1\"}}, \"required\": [\"location\", \"object\", \"desc\"]}, \"example\": {\"schoolId\": \"1\", \"location\": \"APIFOX_{{testBatch}}\", \"object\": \"APIFOX_{{testBatch}}\", \"desc\": \"APIFOX_{{testBatch}}\", \"images\": [\"APIFOX_{{testBatch}}\"], \"riskId\": \"1\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/risk.controller.ts:66；RiskController.createReport\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1559；riskReportCreate(body: { schoolId?: string; location: string; object: string; desc: string; images?: string[]; riskId?: string; })；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/risk.controller.ts\", \"line\": 66, \"controller\": \"RiskController\", \"handler\": \"createReport\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1559, \"function\": \"riskReportCreate(body: { schoolId?: string; location: string; object: string; desc: string; images?: string[]; riskId?: string; })\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/risk/reports/detail\": {\"get\": {\"operationId\": \"RiskController_reportDetail\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Risk\"], \"x-apifox-folder\": \"学校端/Risk\", \"summary\": \"RiskController.reportDetail\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/risk.controller.ts:79；RiskController.reportDetail\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1648；riskReportDetail(id: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/risk.controller.ts\", \"line\": 79, \"controller\": \"RiskController\", \"handler\": \"reportDetail\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1648, \"function\": \"riskReportDetail(id: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/risk/reports/export.csv\": {\"get\": {\"operationId\": \"RiskController_reportsExport\", \"parameters\": [{\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"location\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"object\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"status\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：ReportStatus\", \"x-source-type\": \"ReportStatus\"}, \"description\": \"来源：Query(status)；源码类型：ReportStatus\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Risk\"], \"x-apifox-folder\": \"学校端/Risk\", \"summary\": \"RiskController.reportsExport\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/risk.controller.ts:89；RiskController.reportsExport\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/risk.controller.ts\", \"line\": 89, \"controller\": \"RiskController\", \"handler\": \"reportsExport\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/risk/tasks\": {\"get\": {\"operationId\": \"RiskController_tasks\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"assignee\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"status\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：TaskStatus\", \"x-source-type\": \"TaskStatus\"}, \"description\": \"来源：Query(status)；源码类型：TaskStatus\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Risk\"], \"x-apifox-folder\": \"学校端/Risk\", \"summary\": \"RiskController.tasks\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/risk.controller.ts:137；RiskController.tasks\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1595；riskTasks(params: { schoolId?: string; assignee?: string; status?: '待处理' | '进行中' | '已完成'; start?: string; end?: string; })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/risk.controller.ts\", \"line\": 137, \"controller\": \"RiskController\", \"handler\": \"tasks\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1595, \"function\": \"riskTasks(params: { schoolId?: string; assignee?: string; status?: '待处理' | '进行中' | '已完成'; start?: string; end?: string; })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"RiskController_createTask\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Risk\"], \"x-apifox-folder\": \"学校端/Risk\", \"summary\": \"RiskController.createTask\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"1\"}, {\"type\": \"number\", \"example\": 1}]}, \"assignee\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"location\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"object\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"riskId\": {\"type\": \"string\", \"example\": \"1\"}, \"dueAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"note\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}}, \"required\": [\"assignee\", \"location\", \"object\"]}, \"example\": {\"schoolId\": \"1\", \"assignee\": \"APIFOX_{{testBatch}}\", \"location\": \"APIFOX_{{testBatch}}\", \"object\": \"APIFOX_{{testBatch}}\", \"riskId\": \"1\", \"dueAt\": \"2026-09-24 10:00:00\", \"note\": \"APIFOX_{{testBatch}}_001\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/risk.controller.ts:147；RiskController.createTask\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1606；riskTaskCreate(body: { assignee: string; location: string; object: string; riskId?: string; dueAt?: string; note?: string; })；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/risk.controller.ts\", \"line\": 147, \"controller\": \"RiskController\", \"handler\": \"createTask\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1606, \"function\": \"riskTaskCreate(body: { assignee: string; location: string; object: string; riskId?: string; dueAt?: string; note?: string; })\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/risk/tasks/detail\": {\"get\": {\"operationId\": \"RiskController_taskDetail\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Risk\"], \"x-apifox-folder\": \"学校端/Risk\", \"summary\": \"RiskController.taskDetail\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/risk.controller.ts:161；RiskController.taskDetail\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1646；riskTaskDetail(id: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/risk.controller.ts\", \"line\": 161, \"controller\": \"RiskController\", \"handler\": \"taskDetail\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1646, \"function\": \"riskTaskDetail(id: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/risk/tasks/export.csv\": {\"get\": {\"operationId\": \"RiskController_tasksExport\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"assignee\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"status\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：TaskStatus\", \"x-source-type\": \"TaskStatus\"}, \"description\": \"来源：Query(status)；源码类型：TaskStatus\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Risk\"], \"x-apifox-folder\": \"学校端/Risk\", \"summary\": \"RiskController.tasksExport\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/risk.controller.ts:171；RiskController.tasksExport\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/risk.controller.ts\", \"line\": 171, \"controller\": \"RiskController\", \"handler\": \"tasksExport\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/sampling/operators/detail\": {\"get\": {\"tags\": [\"学校端/SamplingOperators\"], \"x-apifox-folder\": \"学校端/SamplingOperators\", \"summary\": \"获取留样人员详情（含密码，仅用于编辑回显）\", \"operationId\": \"SamplingOperatorsController_detail\", \"parameters\": [{\"name\": \"id\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(id)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sampling-operators.controller.ts:465；SamplingOperatorsController.detail\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:734；samplingOpsDetail(id: string|number)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sampling-operators.controller.ts\", \"line\": 465, \"controller\": \"SamplingOperatorsController\", \"handler\": \"detail\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 734, \"function\": \"samplingOpsDetail(id: string|number)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/school/sampling/records\": {\"get\": {\"operationId\": \"SamplingController_listRecords\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"sample\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"exception\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"pageSize\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"status\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：SampleStatus\", \"x-source-type\": \"SampleStatus\"}, \"description\": \"来源：Query(status)；源码类型：SampleStatus\"}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/PagedSamplingRecords\"}}}}, \"401\": {\"description\": \"Unauthorized\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}, \"403\": {\"description\": \"Forbidden\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}}, \"tags\": [\"学校端/Sampling\"], \"x-apifox-folder\": \"学校端/Sampling\", \"x-original-tags\": [\"Sampling\"], \"summary\": \"SamplingController.listRecords\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sampling.controller.ts:28；SamplingController.listRecords\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:622；samplingList(params: { sample?: string; status?: string; exception?: 'true' | 'false'; start?: string; end?: string; page?: number; pageSize?: number; schoolId?: number; })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sampling.controller.ts\", \"line\": 28, \"controller\": \"SamplingController\", \"handler\": \"listRecords\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 622, \"function\": \"samplingList(params: { sample?: string; status?: string; exception?: 'true' | 'false'; start?: string; end?: string; page?: number; pageSize?: number; schoolId?: number; })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"SamplingController_createRecord\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/CreateSamplingBodyDTO\"}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Sampling\"], \"x-apifox-folder\": \"学校端/Sampling\", \"x-original-tags\": [\"Sampling\"], \"summary\": \"SamplingController.createRecord\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sampling.controller.ts:56；SamplingController.createRecord\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:661；samplingCreate(body: { sample: string; weight: number; imageUrl?: string; duration: number; by: string; cabinet?: string; schoolId?: number; canteenId?: number; cookTime?: string; })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sampling.controller.ts\", \"line\": 56, \"controller\": \"SamplingController\", \"handler\": \"createRecord\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 661, \"function\": \"samplingCreate(body: { sample: string; weight: number; imageUrl?: string; duration: number; by: string; cabinet?: string; schoolId?: number; canteenId?: number; cookTime?: string; })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/sampling/records/export.csv\": {\"get\": {\"operationId\": \"SamplingController_exportCsv\", \"summary\": \"Export sampling records (CSV)\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"sample\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"exception\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"status\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：SampleStatus\", \"x-source-type\": \"SampleStatus\"}, \"description\": \"来源：Query(status)；源码类型：SampleStatus\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Sampling\"], \"x-apifox-folder\": \"学校端/Sampling\", \"x-original-tags\": [\"Sampling\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sampling.controller.ts:128；SamplingController.exportCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sampling.controller.ts\", \"line\": 128, \"controller\": \"SamplingController\", \"handler\": \"exportCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/sampling/stream\": {\"get\": {\"operationId\": \"SamplingController_stream\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Sampling\"], \"x-apifox-folder\": \"学校端/Sampling\", \"x-original-tags\": [\"Sampling\"], \"summary\": \"SamplingController.stream\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sampling.controller.ts:182；SamplingController.stream\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sampling.controller.ts\", \"line\": 182, \"controller\": \"SamplingController\", \"handler\": \"stream\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/system/announcements\": {\"get\": {\"operationId\": \"SystemController_listAnnouncements\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.listAnnouncements\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:24；SystemController.listAnnouncements\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1658；sysAnnouncements(params: { page?: number; pageSize?: number })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 24, \"controller\": \"SystemController\", \"handler\": \"listAnnouncements\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1658, \"function\": \"sysAnnouncements(params: { page?: number; pageSize?: number })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"SystemController_createAnnouncement\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.createAnnouncement\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"title\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"content\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}, \"required\": [\"title\", \"content\"]}, \"example\": {\"title\": \"APIFOX_{{testBatch}}_测试数据\", \"content\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:36；SystemController.createAnnouncement\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1664；sysAnnouncementCreate(body: { title: string; content: string }, traceId: string)；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 36, \"controller\": \"SystemController\", \"handler\": \"createAnnouncement\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1664, \"function\": \"sysAnnouncementCreate(body: { title: string; content: string }, traceId: string)\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/system/announcements/detail\": {\"get\": {\"operationId\": \"SystemController_announcementDetail\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.announcementDetail\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:42；SystemController.announcementDetail\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1662；sysAnnouncementDetail(id: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 42, \"controller\": \"SystemController\", \"handler\": \"announcementDetail\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1662, \"function\": \"sysAnnouncementDetail(id: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/system/apps\": {\"get\": {\"operationId\": \"SystemController_apps\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.apps\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:85；SystemController.apps\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1706；sysApps()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 85, \"controller\": \"SystemController\", \"handler\": \"apps\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1706, \"function\": \"sysApps()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/system/canteen\": {\"get\": {\"operationId\": \"SystemController_canteen\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.canteen\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:57；SystemController.canteen\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1673；sysCanteenGet()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 57, \"controller\": \"SystemController\", \"handler\": \"canteen\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1673, \"function\": \"sysCanteenGet()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"SystemController_saveCanteen\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.saveCanteen\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:60；SystemController.saveCanteen\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1678；sysCanteenSave(body: any)；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 60, \"controller\": \"SystemController\", \"handler\": \"saveCanteen\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1678, \"function\": \"sysCanteenSave(body: any)\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/system/linkage\": {\"get\": {\"operationId\": \"SystemController_linkageList\", \"parameters\": [{\"name\": \"status\", \"in\": \"query\", \"required\": false, \"schema\": {}, \"description\": \"来源：Query(status)；源码类型：any\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.linkageList\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:69；SystemController.linkageList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 69, \"controller\": \"SystemController\", \"handler\": \"linkageList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/system/meals\": {\"get\": {\"operationId\": \"SystemController_meals\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.meals\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:113；SystemController.meals\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 113, \"controller\": \"SystemController\", \"handler\": \"meals\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"post\": {\"operationId\": \"SystemController_saveMeals\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.saveMeals\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"items\": {\"type\": \"array\", \"items\": {}}}, \"required\": [\"items\"]}, \"example\": {\"items\": [\"APIFOX_{{testBatch}}\"]}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:116；SystemController.saveMeals\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 116, \"controller\": \"SystemController\", \"handler\": \"saveMeals\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/system/news\": {\"get\": {\"operationId\": \"SystemController_schoolNews\", \"parameters\": [{\"name\": \"enabled\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.schoolNews\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:283；SystemController.schoolNews\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:825；sysNews(params: { page?: number; pageSize?: number; enabled?: 'true' | 'false' })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 283, \"controller\": \"SystemController\", \"handler\": \"schoolNews\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 825, \"function\": \"sysNews(params: { page?: number; pageSize?: number; enabled?: 'true' | 'false' })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/system/news/detail\": {\"get\": {\"operationId\": \"SystemController_schoolNewsDetail\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.schoolNewsDetail\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:290；SystemController.schoolNewsDetail\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:829；sysNewsDetail(id: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 290, \"controller\": \"SystemController\", \"handler\": \"schoolNewsDetail\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 829, \"function\": \"sysNewsDetail(id: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/system/org-type\": {\"get\": {\"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"summary\": \"SystemController.getOrgType\", \"operationId\": \"SystemController_getOrgType\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:90；SystemController.getOrgType\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 90, \"controller\": \"SystemController\", \"handler\": \"getOrgType\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}, \"post\": {\"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"summary\": \"SystemController.saveOrgType\", \"operationId\": \"SystemController_saveOrgType\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"number\", \"example\": 1}, \"orgType\": {\"type\": \"string\", \"enum\": [\"school\", \"enterprise\"], \"example\": \"school\"}}, \"required\": [\"orgType\"]}, \"example\": {\"schoolId\": 1, \"orgType\": \"school\"}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:101；SystemController.saveOrgType\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1823；sysOrgTypeSave(orgType: 'school'|'enterprise', schoolId: number|string)；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 101, \"controller\": \"SystemController\", \"handler\": \"saveOrgType\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1823, \"function\": \"sysOrgTypeSave(orgType: 'school'|'enterprise', schoolId: number|string)\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/school/system/permissions\": {\"get\": {\"operationId\": \"SystemController_permissions\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.permissions\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:259；SystemController.permissions\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1804；sysPermissions()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 259, \"controller\": \"SystemController\", \"handler\": \"permissions\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1804, \"function\": \"sysPermissions()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/system/roles\": {\"get\": {\"operationId\": \"SystemController_roles\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"q\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.roles\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:162；SystemController.roles\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1749；sysRoles(params: { schoolId?: number; q?: string })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 162, \"controller\": \"SystemController\", \"handler\": \"roles\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1749, \"function\": \"sysRoles(params: { schoolId?: number; q?: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"patch\": {\"operationId\": \"SystemController_updateRole\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.updateRole\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"number\", \"example\": 1}, \"patch\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"remark\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}}}, \"required\": [\"id\", \"patch\"]}, \"example\": {\"id\": 1, \"patch\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"remark\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:184；SystemController.updateRole\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1771；sysRoleUpdate(id: number, patch: { name?: string; remark?: string }, traceId: string)；body=JSON.stringify({ id, patch })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 184, \"controller\": \"SystemController\", \"handler\": \"updateRole\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1771, \"function\": \"sysRoleUpdate(id: number, patch: { name?: string; remark?: string }, traceId: string)\", \"bodyExpression\": \"JSON.stringify({ id, patch })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"SystemController_createRole\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.createRole\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"number\", \"example\": 1}, \"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"remark\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}, \"required\": [\"name\"]}, \"example\": {\"schoolId\": 1, \"name\": \"APIFOX_{{testBatch}}_测试数据\", \"remark\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:174；SystemController.createRole\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1753；sysRoleCreate(name: string, remark: string, schoolId: number, traceId: string)；body=JSON.stringify({ name, remark, schoolId })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 174, \"controller\": \"SystemController\", \"handler\": \"createRole\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1753, \"function\": \"sysRoleCreate(name: string, remark: string, schoolId: number, traceId: string)\", \"bodyExpression\": \"JSON.stringify({ name, remark, schoolId })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/system/roles/permissions\": {\"get\": {\"operationId\": \"SystemController_rolePermissions\", \"parameters\": [{\"name\": \"name\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.rolePermissions\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:262；SystemController.rolePermissions\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1805；sysRolePermissions(name: string)\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 262, \"controller\": \"SystemController\", \"handler\": \"rolePermissions\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1805, \"function\": \"sysRolePermissions(name: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"SystemController_setRolePerms\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.setRolePerms\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"permissions\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}}, \"required\": [\"name\", \"permissions\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"permissions\": [\"APIFOX_{{testBatch}}\"]}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:268；SystemController.setRolePerms\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1807；sysRoleSetPermissions(name: string, permissions: string[], traceId: string)；body=JSON.stringify({ name, permissions })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 268, \"controller\": \"SystemController\", \"handler\": \"setRolePerms\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1807, \"function\": \"sysRoleSetPermissions(name: string, permissions: string[], traceId: string)\", \"bodyExpression\": \"JSON.stringify({ name, permissions })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/system/users\": {\"get\": {\"operationId\": \"SystemController_users\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"q\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.users\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:125；SystemController.users\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 125, \"controller\": \"SystemController\", \"handler\": \"users\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}, \"patch\": {\"operationId\": \"SystemController_updateUser\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.updateUser\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"oneOf\": [{\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"number\", \"example\": 1}, \"patch\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"phone\": {\"type\": \"string\", \"example\": \"13800138000\"}, \"remark\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}, \"enabled\": {\"type\": \"boolean\", \"example\": true}, \"password\": {\"type\": \"string\", \"example\": \"Test@123456\"}}}}, \"required\": [\"id\"]}, {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"number\", \"example\": 1}, \"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"phone\": {\"type\": \"string\", \"example\": \"13800138000\"}, \"remark\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}, \"enabled\": {\"type\": \"boolean\", \"example\": true}, \"password\": {\"type\": \"string\", \"example\": \"Test@123456\"}}, \"required\": [\"id\"]}]}, \"example\": {\"id\": 1, \"patch\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"phone\": \"13800138000\", \"remark\": \"APIFOX_{{testBatch}} 自动化测试数据\", \"enabled\": true, \"password\": \"Test@123456\"}}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:217；SystemController.updateUser\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1722；sysUserUpdate(id: number | string, patch: { name?: string; phone?: string; remark?: string; enabled?: boolean; password?: string }, traceId: string)；body=JSON.stringify({ id, patch })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 217, \"controller\": \"SystemController\", \"handler\": \"updateUser\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1722, \"function\": \"sysUserUpdate(id: number | string, patch: { name?: string; phone?: string; remark?: string; enabled?: boolean; password?: string }, traceId: string)\", \"bodyExpression\": \"JSON.stringify({ id, patch })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"SystemController_createUser\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.createUser\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"phone\": {\"type\": \"string\", \"example\": \"13800138000\"}, \"roles\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"remark\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}, \"enabled\": {\"type\": \"boolean\", \"example\": true}, \"password\": {\"type\": \"string\", \"example\": \"Test@123456\"}, \"schoolId\": {\"type\": \"number\", \"example\": 1}}, \"required\": [\"name\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"phone\": \"13800138000\", \"roles\": [\"APIFOX_{{testBatch}}\"], \"remark\": \"APIFOX_{{testBatch}} 自动化测试数据\", \"enabled\": true, \"password\": \"Test@123456\", \"schoolId\": 1}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:137；SystemController.createUser\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1709；sysUserCreate(body: { name: string; phone?: string; roles?: string[]; remark?: string; enabled?: boolean; password?: string }, traceId: string)；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 137, \"controller\": \"SystemController\", \"handler\": \"createUser\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1709, \"function\": \"sysUserCreate(body: { name: string; phone?: string; roles?: string[]; remark?: string; enabled?: boolean; password?: string }, traceId: string)\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/waste/categories\": {\"get\": {\"operationId\": \"WasteController_categories\", \"parameters\": [{\"name\": \"enabled\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Waste\"], \"x-apifox-folder\": \"学校端/Waste\", \"x-original-tags\": [\"Waste\"], \"summary\": \"WasteController.categories\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/waste.controller.ts:19；WasteController.categories\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:932；wasteCategories()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/waste.controller.ts\", \"line\": 19, \"controller\": \"WasteController\", \"handler\": \"categories\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 932, \"function\": \"wasteCategories()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"WasteController_createCategory\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Waste\"], \"x-apifox-folder\": \"学校端/Waste\", \"x-original-tags\": [\"Waste\"], \"summary\": \"WasteController.createCategory\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}}, \"required\": [\"name\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/waste.controller.ts:25；WasteController.createCategory\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:933；wasteCategoryCreate(name: string)；body={ name }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/waste.controller.ts\", \"line\": 25, \"controller\": \"WasteController\", \"handler\": \"createCategory\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 933, \"function\": \"wasteCategoryCreate(name: string)\", \"bodyExpression\": \"{ name }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/waste/records\": {\"get\": {\"operationId\": \"WasteController_list\", \"summary\": \"List waste records (paged)\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"page\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"pageSize\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"category\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：WasteCategory\", \"x-source-type\": \"WasteCategory\"}, \"description\": \"来源：Query(category)；源码类型：WasteCategory\"}], \"responses\": {\"200\": {\"description\": \"\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/PagedWasteRecords\"}}}}, \"401\": {\"description\": \"Unauthorized\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}, \"403\": {\"description\": \"Forbidden\", \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/ErrorEnvelope\"}}}}}, \"tags\": [\"学校端/Waste\"], \"x-apifox-folder\": \"学校端/Waste\", \"x-original-tags\": [\"Waste\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/waste.controller.ts:49；WasteController.list\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:947；wasteList(params: { category?: string; start?: string; end?: string; page?: number; pageSize?: number; schoolId?: number; canteenId?: number; })\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/waste.controller.ts\", \"line\": 49, \"controller\": \"WasteController\", \"handler\": \"list\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 947, \"function\": \"wasteList(params: { category?: string; start?: string; end?: string; page?: number; pageSize?: number; schoolId?: number; canteenId?: number; })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}, \"post\": {\"operationId\": \"WasteController_create\", \"summary\": \"Create waste record\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/CreateWasteBodyDTO\"}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Waste\"], \"x-apifox-folder\": \"学校端/Waste\", \"x-original-tags\": [\"Waste\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/waste.controller.ts:152；WasteController.create\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:964；wasteCreate(body: { date?: string; category: string; amount: number; buyer: string; person: string; schoolId?: number; canteenId?: number; })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/waste.controller.ts\", \"line\": 152, \"controller\": \"WasteController\", \"handler\": \"create\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 964, \"function\": \"wasteCreate(body: { date?: string; category: string; amount: number; buyer: string; person: string; schoolId?: number; canteenId?: number; })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/waste/records/export.csv\": {\"get\": {\"operationId\": \"WasteController_exportCsv\", \"summary\": \"Export waste records (CSV)\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"category\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"object\", \"description\": \"源码类型：WasteCategory\", \"x-source-type\": \"WasteCategory\"}, \"description\": \"来源：Query(category)；源码类型：WasteCategory\"}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Waste\"], \"x-apifox-folder\": \"学校端/Waste\", \"x-original-tags\": [\"Waste\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/waste.controller.ts:74；WasteController.exportCsv\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/waste.controller.ts\", \"line\": 74, \"controller\": \"WasteController\", \"handler\": \"exportCsv\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/screen/analytics/ai/events\": {\"get\": {\"tags\": [\"大屏端/Screen Analytics\"], \"x-apifox-folder\": \"大屏端/Screen Analytics\", \"summary\": \"ScreenAnalyticsController.aiEvents\", \"operationId\": \"ScreenAnalyticsController_aiEvents\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}, {\"name\": \"canteenId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(canteenId)；源码类型：string\"}, {\"name\": \"start\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(start)；源码类型：string\"}, {\"name\": \"end\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(end)；源码类型：string\"}, {\"name\": \"page\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(page)；源码类型：未声明\"}, {\"name\": \"pageSize\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(pageSize)；源码类型：未声明\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/screen-analytics.controller.ts:254；ScreenAnalyticsController.aiEvents\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/screen-analytics.controller.ts\", \"line\": 254, \"controller\": \"ScreenAnalyticsController\", \"handler\": \"aiEvents\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/screen/analytics/ai/pie\": {\"get\": {\"tags\": [\"大屏端/Screen Analytics\"], \"x-apifox-folder\": \"大屏端/Screen Analytics\", \"summary\": \"ScreenAnalyticsController.aiTypesPie\", \"operationId\": \"ScreenAnalyticsController_aiTypesPie\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}, {\"name\": \"start\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(start)；源码类型：string\"}, {\"name\": \"end\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"description\": \"来源：Query(end)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/screen-analytics.controller.ts:155；ScreenAnalyticsController.aiTypesPie\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/screen-analytics.controller.ts\", \"line\": 155, \"controller\": \"ScreenAnalyticsController\", \"handler\": \"aiTypesPie\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/screen/analytics/cameras\": {\"get\": {\"tags\": [\"大屏端/Screen Analytics\"], \"x-apifox-folder\": \"大屏端/Screen Analytics\", \"summary\": \"ScreenAnalyticsController.cameras\", \"operationId\": \"ScreenAnalyticsController_cameras\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}, {\"name\": \"canteenId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(canteenId)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/screen-analytics.controller.ts:324；ScreenAnalyticsController.cameras\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/screen-analytics.controller.ts\", \"line\": 324, \"controller\": \"ScreenAnalyticsController\", \"handler\": \"cameras\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/screen/analytics/devices\": {\"get\": {\"tags\": [\"大屏端/Screen Analytics\"], \"x-apifox-folder\": \"大屏端/Screen Analytics\", \"summary\": \"ScreenAnalyticsController.devicesList\", \"operationId\": \"ScreenAnalyticsController_devicesList\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}, {\"name\": \"type\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(type)；源码类型：string\"}, {\"name\": \"status\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"ACTIVE\"}, \"description\": \"来源：Query(status)；源码类型：string\"}, {\"name\": \"q\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(q)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/screen-analytics.controller.ts:306；ScreenAnalyticsController.devicesList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/screen-analytics.controller.ts\", \"line\": 306, \"controller\": \"ScreenAnalyticsController\", \"handler\": \"devicesList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/screen/analytics/devices/statuses\": {\"get\": {\"tags\": [\"大屏端/Screen Analytics\"], \"x-apifox-folder\": \"大屏端/Screen Analytics\", \"summary\": \"ScreenAnalyticsController.deviceStatuses\", \"operationId\": \"ScreenAnalyticsController_deviceStatuses\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/screen-analytics.controller.ts:319；ScreenAnalyticsController.deviceStatuses\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/screen-analytics.controller.ts\", \"line\": 319, \"controller\": \"ScreenAnalyticsController\", \"handler\": \"deviceStatuses\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/screen/analytics/devices/types\": {\"get\": {\"tags\": [\"大屏端/Screen Analytics\"], \"x-apifox-folder\": \"大屏端/Screen Analytics\", \"summary\": \"ScreenAnalyticsController.deviceTypes\", \"operationId\": \"ScreenAnalyticsController_deviceTypes\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/screen-analytics.controller.ts:316；ScreenAnalyticsController.deviceTypes\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/screen-analytics.controller.ts\", \"line\": 316, \"controller\": \"ScreenAnalyticsController\", \"handler\": \"deviceTypes\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/screen/analytics/personnel-health\": {\"get\": {\"operationId\": \"ScreenAnalyticsController_personnelHealth\", \"parameters\": [{\"name\": \"schoolId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"canteenId\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}, {\"name\": \"start\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}, {\"name\": \"end\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"大屏端/Screen Analytics\"], \"x-apifox-folder\": \"大屏端/Screen Analytics\", \"x-original-tags\": [\"Screen Analytics\"], \"summary\": \"ScreenAnalyticsController.personnelHealth\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/screen-analytics.controller.ts:98；ScreenAnalyticsController.personnelHealth\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/screen-analytics.controller.ts\", \"line\": 98, \"controller\": \"ScreenAnalyticsController\", \"handler\": \"personnelHealth\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/static/{path}\": {\"get\": {\"tags\": [\"文件服务/Static\"], \"x-apifox-folder\": \"文件服务/Static\", \"summary\": \"StaticController.view\", \"operationId\": \"StaticController_view\", \"parameters\": [{\"name\": \"path\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Param(path)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"Binary file\", \"content\": {\"application/octet-stream\": {\"schema\": {\"type\": \"string\", \"format\": \"binary\"}}}}, \"404\": {\"description\": \"File not found\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/files.controller.ts:118；StaticController.view\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/files.controller.ts\", \"line\": 118, \"controller\": \"StaticController\", \"handler\": \"view\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/system/group/device/active-group\": {\"get\": {\"tags\": [\"AI盒子与设备开放接口/Dewo-Liuyangcheng\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/Dewo-Liuyangcheng\", \"summary\": \"得沃晨检机获取当前问卷\", \"operationId\": \"DewoLiuyangchengController_dewoMorningActiveGroup\", \"parameters\": [{\"name\": \"deviceSn\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"description\": \"来源：Query(deviceSn)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts:475；DewoLiuyangchengController.dewoMorningActiveGroup\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts\", \"line\": 475, \"controller\": \"DewoLiuyangchengController\", \"handler\": \"dewoMorningActiveGroup\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/system/storage/init\": {\"get\": {\"tags\": [\"公共与系统/System\"], \"x-apifox-folder\": \"公共与系统/System\", \"summary\": \"Initialize storage provider (ensure MinIO bucket exists)\", \"operationId\": \"StorageController_init\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/storage.controller.ts:21；StorageController.init\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/storage.controller.ts\", \"line\": 21, \"controller\": \"StorageController\", \"handler\": \"init\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/system/storage/status\": {\"get\": {\"tags\": [\"公共与系统/System\"], \"x-apifox-folder\": \"公共与系统/System\", \"summary\": \"Get object storage mode and configuration status\", \"operationId\": \"StorageController_status\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/storage.controller.ts:9；StorageController.status\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:742；storageStatus()\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/storage.controller.ts\", \"line\": 9, \"controller\": \"StorageController\", \"handler\": \"status\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 742, \"function\": \"storageStatus()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/trustivs/proxy/hls\": {\"get\": {\"operationId\": \"TrustivsProxyController_proxyHls\", \"parameters\": [{\"name\": \"url\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/TrustivsProxy\"], \"x-apifox-folder\": \"公共与系统/TrustivsProxy\", \"summary\": \"TrustivsProxyController.proxyHls\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs/controller/proxy.controller.ts:26；TrustivsProxyController.proxyHls\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：READ_ONLY\\n- 执行策略：AUTO_AFTER_AUTH\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs/controller/proxy.controller.ts\", \"line\": 26, \"controller\": \"TrustivsProxyController\", \"handler\": \"proxyHls\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"READ_ONLY\", \"x-test-execution-policy\": \"AUTO_AFTER_AUTH\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/ai/tasks/{id}\": {\"patch\": {\"operationId\": \"AIController_updateTask\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/AI\"], \"x-apifox-folder\": \"监管端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.updateTask\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"items\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"method\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"period\": {\"type\": \"object\", \"properties\": {\"start\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"end\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}}, \"schools\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"status\": {\"type\": \"string\", \"enum\": [\"待处理\", \"进行中\", \"已完成\"], \"example\": \"待处理\"}}}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"items\": [\"APIFOX_{{testBatch}}\"], \"method\": \"APIFOX_{{testBatch}}\", \"period\": {\"start\": \"2026-09-24 10:00:00\", \"end\": \"2026-09-24 10:00:00\"}, \"schools\": [\"APIFOX_{{testBatch}}\"], \"status\": \"待处理\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:750；AIController.updateTask\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:324；aiTaskUpdate(id: string, patch: any)；body=patch\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 750, \"controller\": \"AIController\", \"handler\": \"updateTask\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 324, \"function\": \"aiTaskUpdate(id: string, patch: any)\", \"bodyExpression\": \"patch\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/ai/tasks/{id}/status\": {\"patch\": {\"operationId\": \"AIController_setTaskStatus\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/AI\"], \"x-apifox-folder\": \"监管端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.setTaskStatus\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"status\": {\"type\": \"string\", \"enum\": [\"待处理\", \"进行中\", \"已完成\"], \"example\": \"待处理\"}}, \"required\": [\"status\"]}, \"example\": {\"status\": \"待处理\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:768；AIController.setTaskStatus\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:327；aiTaskSetStatus(id: string, status: '待处理' | '进行中' | '已完成')；body={ status }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 768, \"controller\": \"AIController\", \"handler\": \"setTaskStatus\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 327, \"function\": \"aiTaskSetStatus(id: string, status: '待处理' | '进行中' | '已完成')\", \"bodyExpression\": \"{ status }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/credentials/exceptions/measure\": {\"patch\": {\"operationId\": \"RegCredentialsController_setMeasure\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Credentials\"], \"x-apifox-folder\": \"监管端/Regulator Credentials\", \"x-original-tags\": [\"Regulator Credentials\"], \"summary\": \"RegCredentialsController.setMeasure\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"measure\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"measure\"]}, \"example\": {\"measure\": \"APIFOX_{{testBatch}}\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-credentials.controller.ts:108；RegCredentialsController.setMeasure\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:377；credSetMeasure(id: string, measure: string)；body={ measure }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-credentials.controller.ts\", \"line\": 108, \"controller\": \"RegCredentialsController\", \"handler\": \"setMeasure\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 377, \"function\": \"credSetMeasure(id: string, measure: string)\", \"bodyExpression\": \"{ measure }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/inspections/inspectors/{id}\": {\"patch\": {\"operationId\": \"RegInspectionsController_updateInspector\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.updateInspector\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:290；RegInspectionsController.updateInspector\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 290, \"controller\": \"RegInspectionsController\", \"handler\": \"updateInspector\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/ai/events/status\": {\"patch\": {\"operationId\": \"AIController_setStatus\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/AI\"], \"x-apifox-folder\": \"学校端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.setStatus\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"status\": {\"type\": \"string\", \"enum\": [\"OPEN\", \"ACK\", \"CLOSED\", \"FALSE\"], \"example\": \"OPEN\"}, \"note\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"handledBy\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"status\"]}, \"example\": {\"status\": \"OPEN\", \"note\": \"APIFOX_{{testBatch}}_001\", \"handledBy\": \"APIFOX_{{testBatch}}\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:466；AIController.setStatus\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:491；aiEventMarkFalse(id: string)；body={ status: 'FALSE' }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 466, \"controller\": \"AIController\", \"handler\": \"setStatus\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 491, \"function\": \"aiEventMarkFalse(id: string)\", \"bodyExpression\": \"{ status: 'FALSE' }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/credentials/exceptions/{id}/measure\": {\"patch\": {\"tags\": [\"学校端/Credentials\"], \"x-apifox-folder\": \"学校端/Credentials\", \"summary\": \"CredentialsController.setMeasure\", \"operationId\": \"CredentialsController_setMeasure\", \"parameters\": [{\"name\": \"id\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Param(id)；源码类型：string\"}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"measure\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"measure\"]}, \"example\": {\"measure\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/credentials.controller.ts:71；CredentialsController.setMeasure\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/credentials.controller.ts\", \"line\": 71, \"controller\": \"CredentialsController\", \"handler\": \"setMeasure\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/school/device-safety/{id}\": {\"patch\": {\"operationId\": \"DeviceSafetyController_update\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/UpdateDeviceSafetyBodyDTO\"}, \"example\": {}}}}, \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Device Safety\"], \"x-apifox-folder\": \"学校端/Device Safety\", \"x-original-tags\": [\"Device Safety\"], \"summary\": \"DeviceSafetyController.update\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/device-safety.controller.ts:56；DeviceSafetyController.update\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1457；deviceSafetyUpdate(id: number | string, body: { canteenId?: number | string | null; deviceName?: string; items?: string[]; result?: '正常' | '异常'; description?: string | null; measures?: string | null; handler?: string | null; imageUrl?: string | null; signatureData?: string | null; checkDate?: string; schoolId?: number | string; // ignored server-side for update })；body=JSON.stringify(payload)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/device-safety.controller.ts\", \"line\": 56, \"controller\": \"DeviceSafetyController\", \"handler\": \"update\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1457, \"function\": \"deviceSafetyUpdate(id: number | string, body: { canteenId?: number | string | null; deviceName?: string; items?: string[]; result?: '正常' | '异常'; description?: string | null; measures?: string | null; handler?: string | null; imageUrl?: string | null; signatureData?: string | null; checkDate?: string; schoolId?: number | string; // ignored server-side for update })\", \"bodyExpression\": \"JSON.stringify(payload)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/dine/records/{id}/measure\": {\"patch\": {\"operationId\": \"DineController_setMeasure\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/MeasureBodyDTO\"}}}}, \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Dine\"], \"x-apifox-folder\": \"学校端/Dine\", \"x-original-tags\": [\"Dine\"], \"summary\": \"DineController.setMeasure\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dine.controller.ts:118；DineController.setMeasure\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1019；dineSetMeasure(id: string, measure: string)；body={ measure }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dine.controller.ts\", \"line\": 118, \"controller\": \"DineController\", \"handler\": \"setMeasure\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1019, \"function\": \"dineSetMeasure(id: string, measure: string)\", \"bodyExpression\": \"{ measure }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/disinfection/records/{id}/measure\": {\"patch\": {\"operationId\": \"DisinfectionController_setMeasure\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/MeasureBodyDTO\"}}}}, \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Disinfection\"], \"x-apifox-folder\": \"学校端/Disinfection\", \"x-original-tags\": [\"Disinfection\"], \"summary\": \"DisinfectionController.setMeasure\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/disinfection.controller.ts:80；DisinfectionController.setMeasure\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:921；disinfectionSetMeasure(id: string, measure: string)；body={ measure }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/disinfection.controller.ts\", \"line\": 80, \"controller\": \"DisinfectionController\", \"handler\": \"setMeasure\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 921, \"function\": \"disinfectionSetMeasure(id: string, measure: string)\", \"bodyExpression\": \"{ measure }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/emergency/meetings/state\": {\"patch\": {\"operationId\": \"EmergencyController_setMeetingState\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.setMeetingState\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"micOn\": {\"type\": \"boolean\", \"example\": true}, \"camOn\": {\"type\": \"boolean\", \"example\": true}, \"sharing\": {\"type\": \"boolean\", \"example\": true}}}, \"example\": {\"micOn\": true, \"camOn\": true, \"sharing\": true}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:57；EmergencyController.setMeetingState\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 57, \"controller\": \"EmergencyController\", \"handler\": \"setMeetingState\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/tasks/status\": {\"patch\": {\"operationId\": \"EmergencyController_setTaskStatus\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.setTaskStatus\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"status\": {\"type\": \"string\", \"enum\": [\"待办\", \"进行中\", \"已完成\"], \"example\": \"待办\"}}, \"required\": [\"status\"]}, \"example\": {\"status\": \"待办\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:72；EmergencyController.setTaskStatus\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 72, \"controller\": \"EmergencyController\", \"handler\": \"setTaskStatus\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/morning-checks/{id}/handle\": {\"patch\": {\"tags\": [\"学校端/Morning Checks\"], \"x-apifox-folder\": \"学校端/Morning Checks\", \"summary\": \"MorningCheckController.setHandle\", \"operationId\": \"MorningCheckController_setHandle\", \"parameters\": [{\"name\": \"id\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"number\", \"example\": 1}, \"description\": \"来源：Param(id)；源码类型：number\"}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"decision\": {\"type\": \"string\", \"enum\": [\"allow\", \"suspend\"], \"example\": \"allow\"}, \"note\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"by\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"decision\", \"note\"]}, \"example\": {\"decision\": \"allow\", \"note\": \"APIFOX_{{testBatch}}_001\", \"by\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/morning-check.controller.ts:277；MorningCheckController.setHandle\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:582；morningSetHandle(id: number, body: { decision: 'allow'|'suspend'; note: string })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/morning-check.controller.ts\", \"line\": 277, \"controller\": \"MorningCheckController\", \"handler\": \"setHandle\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 582, \"function\": \"morningSetHandle(id: number, body: { decision: 'allow'|'suspend'; note: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/school/morning-checks/{id}/measure\": {\"patch\": {\"operationId\": \"MorningCheckController_setMeasure\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/MeasureBodyDTO\"}}}}, \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Morning Checks\"], \"x-apifox-folder\": \"学校端/Morning Checks\", \"x-original-tags\": [\"Morning Checks\"], \"summary\": \"MorningCheckController.setMeasure\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/morning-check.controller.ts:267；MorningCheckController.setMeasure\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:581；morningSetMeasure(id: number, measure: string)；body={ measure }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/morning-check.controller.ts\", \"line\": 267, \"controller\": \"MorningCheckController\", \"handler\": \"setMeasure\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 581, \"function\": \"morningSetMeasure(id: number, measure: string)\", \"bodyExpression\": \"{ measure }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/pesticide/records/{id}/measure\": {\"patch\": {\"operationId\": \"PesticideController_setMeasure\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/MeasureBodyDTO\"}}}}, \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Pesticide\"], \"x-apifox-folder\": \"学校端/Pesticide\", \"x-original-tags\": [\"Pesticide\"], \"summary\": \"PesticideController.setMeasure\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/pesticide.controller.ts:136；PesticideController.setMeasure\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:986；pesticideSetMeasure(id: number, measure: string)；body={ measure }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/pesticide.controller.ts\", \"line\": 136, \"controller\": \"PesticideController\", \"handler\": \"setMeasure\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 986, \"function\": \"pesticideSetMeasure(id: number, measure: string)\", \"bodyExpression\": \"{ measure }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/risk/reports/status\": {\"patch\": {\"operationId\": \"RiskController_setReportStatus\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Risk\"], \"x-apifox-folder\": \"学校端/Risk\", \"summary\": \"RiskController.setReportStatus\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"status\": {\"type\": \"object\", \"description\": \"源码类型：ReportStatus\", \"x-source-type\": \"ReportStatus\"}, \"measures\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"rectifiedBy\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"status\"]}, \"example\": {\"status\": {}, \"measures\": \"APIFOX_{{testBatch}}\", \"rectifiedBy\": \"APIFOX_{{testBatch}}\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/risk.controller.ts:82；RiskController.setReportStatus\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1571；riskReportSetStatus(id: string, body: { status: '待处理' | '整改中' | '已整改'; measures?: string; rectifiedBy?: string })；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/risk.controller.ts\", \"line\": 82, \"controller\": \"RiskController\", \"handler\": \"setReportStatus\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1571, \"function\": \"riskReportSetStatus(id: string, body: { status: '待处理' | '整改中' | '已整改'; measures?: string; rectifiedBy?: string })\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/risk/tasks/status\": {\"patch\": {\"operationId\": \"RiskController_setTaskStatus\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Risk\"], \"x-apifox-folder\": \"学校端/Risk\", \"summary\": \"RiskController.setTaskStatus\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"status\": {\"type\": \"object\", \"description\": \"源码类型：TaskStatus\", \"x-source-type\": \"TaskStatus\"}}, \"required\": [\"status\"]}, \"example\": {\"status\": {}}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/risk.controller.ts:164；RiskController.setTaskStatus\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1615；riskTaskSetStatus(id: string, status: '待处理' | '进行中' | '已完成')；body=JSON.stringify({ status })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/risk.controller.ts\", \"line\": 164, \"controller\": \"RiskController\", \"handler\": \"setTaskStatus\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1615, \"function\": \"riskTaskSetStatus(id: string, status: '待处理' | '进行中' | '已完成')\", \"bodyExpression\": \"JSON.stringify({ status })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/sampling/records/{id}/measure\": {\"patch\": {\"operationId\": \"SamplingController_setMeasure\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"$ref\": \"#/components/schemas/MeasureBodyDTO\"}}}}, \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Sampling\"], \"x-apifox-folder\": \"学校端/Sampling\", \"x-original-tags\": [\"Sampling\"], \"summary\": \"SamplingController.setMeasure\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sampling.controller.ts:98；SamplingController.setMeasure\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:662；samplingSetMeasure(id: number, measure: string)；body={ measure }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sampling.controller.ts\", \"line\": 98, \"controller\": \"SamplingController\", \"handler\": \"setMeasure\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 662, \"function\": \"samplingSetMeasure(id: number, measure: string)\", \"bodyExpression\": \"{ measure }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/sampling/records/{id}/status\": {\"patch\": {\"tags\": [\"学校端/Sampling\"], \"x-apifox-folder\": \"学校端/Sampling\", \"summary\": \"SamplingController.setStatus\", \"operationId\": \"SamplingController_setStatus\", \"parameters\": [{\"name\": \"id\", \"in\": \"path\", \"required\": true, \"schema\": {\"type\": \"number\", \"example\": 1}, \"description\": \"来源：Param(id)；源码类型：number\"}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"status\": {\"type\": \"string\", \"enum\": [\"ACTIVE\", \"CLEARED\"], \"example\": \"ACTIVE\"}, \"quyangUserName\": {\"type\": \"string\", \"example\": \"apifox_autotest\"}, \"takeTime\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}}}, \"example\": {\"status\": \"ACTIVE\", \"quyangUserName\": \"apifox_autotest\", \"takeTime\": \"2026-09-24 10:00:00\"}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sampling.controller.ts:108；SamplingController.setStatus\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1069；samplingUpdateStatus(id: number, body: { status?: 'ACTIVE' | 'CLEARED'; quyangUserName?: string; takeTime?: string })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sampling.controller.ts\", \"line\": 108, \"controller\": \"SamplingController\", \"handler\": \"setStatus\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1069, \"function\": \"samplingUpdateStatus(id: number, body: { status?: 'ACTIVE' | 'CLEARED'; quyangUserName?: string; takeTime?: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/school/system/linkage/review\": {\"patch\": {\"operationId\": \"SystemController_reviewLinkage\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.reviewLinkage\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"status\": {}, \"comment\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"status\"]}, \"example\": {\"status\": \"ACTIVE\", \"comment\": \"APIFOX_{{testBatch}}\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:77；SystemController.reviewLinkage\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1698；sysLinkageReview(id: string, status: 'APPROVED' | 'REJECTED', comment: string)；body=JSON.stringify({ status, comment })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 77, \"controller\": \"SystemController\", \"handler\": \"reviewLinkage\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1698, \"function\": \"sysLinkageReview(id: string, status: 'APPROVED' | 'REJECTED', comment: string)\", \"bodyExpression\": \"JSON.stringify({ status, comment })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/waste/categories/{id}/enable\": {\"patch\": {\"operationId\": \"WasteController_setEnabled\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"number\", \"example\": 1}}], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"学校端/Waste\"], \"x-apifox-folder\": \"学校端/Waste\", \"x-original-tags\": [\"Waste\"], \"summary\": \"WasteController.setEnabled\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"enabled\": {\"type\": \"boolean\", \"example\": true}}, \"required\": [\"enabled\"]}, \"example\": {\"enabled\": true}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/waste.controller.ts:31；WasteController.setEnabled\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:934；wasteCategorySetEnabled(id: string, enabled: boolean)；body={ enabled }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/waste.controller.ts\", \"line\": 31, \"controller\": \"WasteController\", \"handler\": \"setEnabled\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 934, \"function\": \"wasteCategorySetEnabled(id: string, enabled: boolean)\", \"bodyExpression\": \"{ enabled }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/auth/change-password\": {\"post\": {\"tags\": [\"认证与账号/Auth\"], \"x-apifox-folder\": \"认证与账号/Auth\", \"summary\": \"Change current user password\", \"operationId\": \"AuthController_changePassword\", \"requestBody\": {\"required\": false, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"oldPassword\": {\"type\": \"string\", \"example\": \"Test@123456\"}, \"newPassword\": {\"type\": \"string\", \"example\": \"Test@123456\"}}}, \"example\": {\"oldPassword\": \"Test@123456\", \"newPassword\": \"Test@123456\"}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/auth.controller.ts:302；AuthController.changePassword\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:241；changePassword(body: { oldPassword: string; newPassword: string })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/auth.controller.ts\", \"line\": 302, \"controller\": \"AuthController\", \"handler\": \"changePassword\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 241, \"function\": \"changePassword(body: { oldPassword: string; newPassword: string })\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/auth/login\": {\"post\": {\"operationId\": \"AuthController_login\", \"summary\": \"User login (JWT)\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"认证与账号/Auth\"], \"x-apifox-folder\": \"认证与账号/Auth\", \"x-original-tags\": [\"Auth\"], \"requestBody\": {\"required\": false, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"username\": {\"type\": \"string\", \"example\": \"apifox_autotest\"}, \"password\": {\"type\": \"string\", \"example\": \"Test@123456\"}}}, \"example\": {\"username\": \"apifox_autotest\", \"password\": \"Test@123456\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/auth.controller.ts:33；AuthController.login\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/stores/auth.ts:24；login(username: string, password: string)；body=JSON.stringify({ username, password })\\n- web-school: apps/web-school/src/stores/auth.ts:161；login(username: string, password: string)；body=JSON.stringify({ username, password })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/auth.controller.ts\", \"line\": 33, \"controller\": \"AuthController\", \"handler\": \"login\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/stores/auth.ts\", \"line\": 24, \"function\": \"login(username: string, password: string)\", \"bodyExpression\": \"JSON.stringify({ username, password })\"}, {\"app\": \"web-school\", \"file\": \"apps/web-school/src/stores/auth.ts\", \"line\": 161, \"function\": \"login(username: string, password: string)\", \"bodyExpression\": \"JSON.stringify({ username, password })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/auth/logout\": {\"post\": {\"operationId\": \"AuthController_logout\", \"summary\": \"User logout (invalidate current token)\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"认证与账号/Auth\"], \"x-apifox-folder\": \"认证与账号/Auth\", \"x-original-tags\": [\"Auth\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/auth.controller.ts:282；AuthController.logout\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/stores/auth.ts:52；logout()\\n- web-school: apps/web-school/src/stores/auth.ts:188；logout()\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/auth.controller.ts\", \"line\": 282, \"controller\": \"AuthController\", \"handler\": \"logout\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/stores/auth.ts\", \"line\": 52, \"function\": \"logout()\", \"bodyExpression\": \"\"}, {\"app\": \"web-school\", \"file\": \"apps/web-school/src/stores/auth.ts\", \"line\": 188, \"function\": \"logout()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/auth/refresh\": {\"post\": {\"operationId\": \"AuthController_refresh\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"认证与账号/Auth\"], \"x-apifox-folder\": \"认证与账号/Auth\", \"x-original-tags\": [\"Auth\"], \"summary\": \"AuthController.refresh\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/auth.controller.ts:268；AuthController.refresh\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/stores/auth.ts:138；refreshToken()\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/auth.controller.ts\", \"line\": 268, \"controller\": \"AuthController\", \"handler\": \"refresh\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/stores/auth.ts\", \"line\": 138, \"function\": \"refreshToken()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/auth/zhct-login\": {\"post\": {\"tags\": [\"认证与账号/Auth\"], \"x-apifox-folder\": \"认证与账号/Auth\", \"summary\": \"Proxy ZHCT external login and return token\", \"operationId\": \"AuthController_zhctLogin\", \"requestBody\": {\"required\": false, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"username\": {\"type\": \"string\", \"example\": \"apifox_autotest\"}, \"password\": {\"type\": \"string\", \"example\": \"Test@123456\"}}}, \"example\": {\"username\": \"apifox_autotest\", \"password\": \"Test@123456\"}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/auth.controller.ts:155；AuthController.zhctLogin\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1846；zhctExternalLogin(username, password)；body=JSON.stringify({ username, password })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/auth.controller.ts\", \"line\": 155, \"controller\": \"AuthController\", \"handler\": \"zhctLogin\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1846, \"function\": \"zhctExternalLogin(username, password)\", \"bodyExpression\": \"JSON.stringify({ username, password })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/bright-local/ai/events/handle\": {\"post\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"BrightLocalController.handleLocal\", \"operationId\": \"BrightLocalController_handleLocal\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"eventId\": {\"type\": \"string\", \"example\": \"1\"}, \"decision\": {\"type\": \"string\", \"enum\": [\"已现场纠正\", \"误报\", \"其他\"], \"example\": \"已现场纠正\"}, \"note\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"evidence\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"handledBy\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"eventId\"]}, \"example\": {\"eventId\": \"1\", \"decision\": \"已现场纠正\", \"note\": \"APIFOX_{{testBatch}}_001\", \"evidence\": [\"APIFOX_{{testBatch}}\"], \"handledBy\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:631；BrightLocalController.handleLocal\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:297；brightLocalAiEventHandleEx(body: { eventId: string; decision?: '已现场纠正' | '误报' | '其他'; note?: string; evidence?: string[]; handledBy?: string })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 631, \"controller\": \"BrightLocalController\", \"handler\": \"handleLocal\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 297, \"function\": \"brightLocalAiEventHandleEx(body: { eventId: string; decision?: '已现场纠正' | '误报' | '其他'; note?: string; evidence?: string[]; handledBy?: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/bright-local/ai/events/handle/batch\": {\"post\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"BrightLocalController.handleBatch\", \"operationId\": \"BrightLocalController_handleBatch\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"oneOf\": [{\"type\": \"array\", \"items\": {\"type\": \"object\", \"properties\": {\"eventId\": {\"type\": \"string\", \"example\": \"1\"}, \"decision\": {\"type\": \"string\", \"enum\": [\"误报\", \"已现场纠正\"], \"example\": \"误报\"}}, \"required\": [\"eventId\"]}}, {\"type\": \"object\", \"properties\": {\"items\": {\"type\": \"array\", \"items\": {\"type\": \"object\", \"properties\": {\"eventId\": {\"type\": \"string\", \"example\": \"1\"}, \"decision\": {\"type\": \"string\", \"enum\": [\"误报\", \"已现场纠正\"], \"example\": \"误报\"}}, \"required\": [\"eventId\"]}}, \"handledBy\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"items\"]}]}, \"example\": [{\"eventId\": \"1\", \"decision\": \"误报\"}]}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:658；BrightLocalController.handleBatch\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:299；brightLocalAiEventsBatchHandle(items: Array<{ eventId: string; decision?: '误报' | '已现场纠正' }>)；body=items\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 658, \"controller\": \"BrightLocalController\", \"handler\": \"handleBatch\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 299, \"function\": \"brightLocalAiEventsBatchHandle(items: Array<{ eventId: string; decision?: '误报' | '已现场纠正' }>)\", \"bodyExpression\": \"items\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/bright-local/refresh\": {\"post\": {\"tags\": [\"明厨亮灶/Bright Kitchen - Local\"], \"x-apifox-folder\": \"明厨亮灶/Bright Kitchen - Local\", \"summary\": \"BrightLocalController.refresh\", \"operationId\": \"BrightLocalController_refresh\", \"parameters\": [{\"name\": \"schoolId\", \"in\": \"query\", \"required\": true, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(schoolId)；源码类型：string\"}, {\"name\": \"channelId\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"1\"}, \"description\": \"来源：Query(channelId)；源码类型：string\"}, {\"name\": \"date\", \"in\": \"query\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"2026-09-24\"}, \"description\": \"来源：Query(date)；源码类型：string\"}], \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/aibox-local.controller.ts:530；BrightLocalController.refresh\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:332；brightLocalRefresh(schoolId: string, channelId: string, date: string)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/aibox-local.controller.ts\", \"line\": 530, \"controller\": \"BrightLocalController\", \"handler\": \"refresh\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 332, \"function\": \"brightLocalRefresh(schoolId: string, channelId: string, date: string)\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/common/empowerOSSAccess\": {\"post\": {\"operationId\": \"SammeiCommonController_empowerOSSAccess\", \"summary\": \"上传留样图片-OSS 授权\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"method\", \"contentType\", \"suffix\"], \"properties\": {\"method\": {\"type\": \"string\", \"description\": \"OSS 文件上传 method，通常为 PUT\", \"example\": \"PUT\"}, \"contentType\": {\"type\": \"string\", \"description\": \"OSS 文件上传 Content-Type\", \"example\": \"image/jpeg\"}, \"rootFileName\": {\"type\": \"string\", \"description\": \"上传到哪个根目录下（可选）\", \"example\": \"sampling\"}, \"fileName\": {\"type\": \"string\", \"description\": \"上传后的新文件名（可选，不含后缀）\", \"example\": \"sample_001\"}, \"suffix\": {\"type\": \"string\", \"description\": \"文件后缀，不含点\", \"example\": \"jpg\"}}}, \"example\": {\"method\": \"PUT\", \"contentType\": \"image/jpeg\", \"rootFileName\": \"sampling\", \"fileName\": \"sample_001\", \"suffix\": \"jpg\"}}}}, \"responses\": {\"200\": {\"description\": \"返回 { status: 0, message: \\\"成功\\\", data: { ossFileUrl, fileUrl } }\"}}, \"tags\": [\"第三方设备数据接入/Sammei\"], \"x-apifox-folder\": \"第三方设备数据接入/Sammei\", \"x-original-tags\": [\"Sammei\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sammei.controller.ts:447；SammeiCommonController.empowerOSSAccess\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sammei.controller.ts\", \"line\": 447, \"controller\": \"SammeiCommonController\", \"handler\": \"empowerOSSAccess\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/common/file/upload\": {\"post\": {\"operationId\": \"SammeiCommonController_uploadToServer\", \"summary\": \"上传留样图片-服务器\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"multipart/form-data\": {\"schema\": {\"type\": \"object\", \"required\": [\"file\"], \"properties\": {\"file\": {\"type\": \"string\", \"format\": \"binary\", \"description\": \"文件\"}, \"prefix\": {\"type\": \"string\", \"description\": \"上传到哪个根目录下（可选）\", \"example\": \"20250923\"}}}}}}, \"responses\": {\"200\": {\"description\": \"返回 { status: 0, message: \\\"成功\\\", data: { newName } }\"}}, \"tags\": [\"第三方设备数据接入/Sammei\"], \"x-apifox-folder\": \"第三方设备数据接入/Sammei\", \"x-original-tags\": [\"Sammei\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sammei.controller.ts:482；SammeiCommonController.uploadToServer\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sammei.controller.ts\", \"line\": 482, \"controller\": \"SammeiCommonController\", \"handler\": \"uploadToServer\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/common/upload\": {\"post\": {\"tags\": [\"第三方设备数据接入/Dewo-Liuyangcheng\"], \"x-apifox-folder\": \"第三方设备数据接入/Dewo-Liuyangcheng\", \"summary\": \"图片保存接口\", \"operationId\": \"DewoLiuyangchengController_upload\", \"requestBody\": {\"required\": true, \"content\": {\"multipart/form-data\": {\"schema\": {\"type\": \"object\", \"properties\": {\"file\": {\"type\": \"string\", \"format\": \"binary\"}}, \"required\": [\"file\"]}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts:921；DewoLiuyangchengController.upload\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts\", \"line\": 921, \"controller\": \"DewoLiuyangchengController\", \"handler\": \"upload\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/control/upload/data/uploadData\": {\"post\": {\"operationId\": \"PesticideUploadController_upload\", \"summary\": \"设备数据上报（表单：KEY=JSON）\", \"parameters\": [], \"responses\": {\"200\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/DeviceUpload\"], \"x-apifox-folder\": \"公共与系统/DeviceUpload\", \"x-original-tags\": [\"DeviceUpload\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/pesticide-upload.controller.ts:31；PesticideUploadController.upload\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：FILE_OR_BULK_WRITE\\n- 执行策略：ISOLATED_STORAGE_AND_DB\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/pesticide-upload.controller.ts\", \"line\": 31, \"controller\": \"PesticideUploadController\", \"handler\": \"upload\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"FILE_OR_BULK_WRITE\", \"x-test-execution-policy\": \"ISOLATED_STORAGE_AND_DB\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/device/morningChecker/heartBeatInfo\": {\"post\": {\"operationId\": \"DeviceMockController_heartBeat\", \"parameters\": [{\"name\": \"x-sign\", \"in\": \"header\", \"description\": \"Signature header (optional if sign is provided in body)\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"requestBody\": {\"required\": true, \"content\": {\"application/x-www-form-urlencoded\": {\"schema\": {\"type\": \"object\", \"properties\": {\"equipmentCode\": {\"type\": \"string\"}, \"sign\": {\"type\": \"string\"}}, \"required\": [\"equipmentCode\"]}, \"example\": {\"equipmentCode\": \"APIFOX_{{testBatch}}\", \"sign\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"Heartbeat accepted\"}}, \"tags\": [\"公共与系统/Device\"], \"x-apifox-folder\": \"公共与系统/Device\", \"x-original-tags\": [\"Device\"], \"summary\": \"DeviceMockController.heartBeat\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/device-mock.controller.ts:15；DeviceMockController.heartBeat\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/device-mock.controller.ts\", \"line\": 15, \"controller\": \"DeviceMockController\", \"handler\": \"heartBeat\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/deviceIot/deviceLogin\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/Dewo-Liuyangcheng\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/Dewo-Liuyangcheng\", \"summary\": \"得沃晨检机设备登录\", \"operationId\": \"DewoLiuyangchengController_dewoMorningLogin\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"allOf\": [{\"type\": \"object\", \"description\": \"源码类型：DeviceLoginRequestDto\", \"x-source-type\": \"DeviceLoginRequestDto\"}, {\"type\": \"object\", \"properties\": {\"serial_number\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"sn\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}}]}, \"example\": {\"serial_number\": \"APIFOX_{{testBatch}}_001\", \"sn\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts:450；DewoLiuyangchengController.dewoMorningLogin\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts\", \"line\": 450, \"controller\": \"DewoLiuyangchengController\", \"handler\": \"dewoMorningLogin\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/deviceIot/getDeviceIdBySerialNumber\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/Dewo-Liuyangcheng\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/Dewo-Liuyangcheng\", \"summary\": \"获取 MQTT 服务地址\", \"operationId\": \"DewoLiuyangchengController_getMqtt\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"description\": \"源码类型：GetMqttAddressRequestDto\", \"x-source-type\": \"GetMqttAddressRequestDto\"}, \"example\": {}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts:292；DewoLiuyangchengController.getMqtt\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:736；dewoBindSerial(serialNumber: string)；body={ serialNumber }\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts\", \"line\": 292, \"controller\": \"DewoLiuyangchengController\", \"handler\": \"getMqtt\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 736, \"function\": \"dewoBindSerial(serialNumber: string)\", \"bodyExpression\": \"{ serialNumber }\"}], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/api/devices/discover\": {\"post\": {\"operationId\": \"IntegrationController_discover\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/Integration\"], \"x-apifox-folder\": \"公共与系统/Integration\", \"x-original-tags\": [\"Integration\"], \"summary\": \"IntegrationController.discover\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/integration.controller.ts:58；IntegrationController.discover\\n\\n### 前端调用证据\\n- mobile-device: apps/mobile-device/src/api/integration.ts:16；megoDiscover(body: { equipmentCode: string; candidates: string[] })；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/integration.controller.ts\", \"line\": 58, \"controller\": \"IntegrationController\", \"handler\": \"discover\"}], \"x-frontend-evidence\": [{\"app\": \"mobile-device\", \"file\": \"apps/mobile-device/src/api/integration.ts\", \"line\": 16, \"function\": \"megoDiscover(body: { equipmentCode: string; candidates: string[] })\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/dewo/mqtt/person\": {\"post\": {\"tags\": [\"第三方设备数据接入/Dewo-Liuyangcheng\"], \"x-apifox-folder\": \"第三方设备数据接入/Dewo-Liuyangcheng\", \"summary\": \"MQTT 下发人员指令\", \"operationId\": \"DewoLiuyangchengController_sendPersonCommand\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts:1042；DewoLiuyangchengController.sendPersonCommand\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts\", \"line\": 1042, \"controller\": \"DewoLiuyangchengController\", \"handler\": \"sendPersonCommand\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/api/employees/refresh\": {\"post\": {\"operationId\": \"IntegrationController_refreshEmployees\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/Integration\"], \"x-apifox-folder\": \"公共与系统/Integration\", \"x-original-tags\": [\"Integration\"], \"summary\": \"IntegrationController.refreshEmployees\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/integration.controller.ts:24；IntegrationController.refreshEmployees\\n\\n### 前端调用证据\\n- mobile-device: apps/mobile-device/src/api.ts:10；refreshEmployees(equipmentCode: string)；body=JSON.stringify({ equipmentCode })\\n- mobile-device: apps/mobile-device/src/api/integration.ts:27；megoEmployeesRefresh(equipmentCode: string)；body=JSON.stringify({ equipmentCode })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/integration.controller.ts\", \"line\": 24, \"controller\": \"IntegrationController\", \"handler\": \"refreshEmployees\"}], \"x-frontend-evidence\": [{\"app\": \"mobile-device\", \"file\": \"apps/mobile-device/src/api.ts\", \"line\": 10, \"function\": \"refreshEmployees(equipmentCode: string)\", \"bodyExpression\": \"JSON.stringify({ equipmentCode })\"}, {\"app\": \"mobile-device\", \"file\": \"apps/mobile-device/src/api/integration.ts\", \"line\": 27, \"function\": \"megoEmployeesRefresh(equipmentCode: string)\", \"bodyExpression\": \"JSON.stringify({ equipmentCode })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/files/upload\": {\"post\": {\"operationId\": \"FilesController_upload\", \"summary\": \"Upload image (dataURL/base64/plain), returns view URL\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"文件服务/Files\"], \"x-apifox-folder\": \"文件服务/Files\", \"x-original-tags\": [\"Files\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"filename\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"content\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}, \"required\": [\"filename\", \"content\"]}, \"example\": {\"filename\": \"APIFOX_{{testBatch}}_测试数据\", \"content\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/files.controller.ts:16；FilesController.upload\\n\\n### 前端调用证据\\n- mobile-device: apps/mobile-device/src/pages/companion/quick.vue:316；requestUpload(filename: string, dataUrl: string)；body=JSON.stringify({ filename, content: dataUrl })\\n- web-regulator: apps/web-regulator/src/services/api.ts:1473；uploadImageBase64(filename: string, content: string)；body=JSON.stringify({ filename, content })\\n- web-school: apps/web-school/src/services/api.ts:832；uploadFile(filename: string, content: string)；body={ filename, content }\\n\\n### 自动化约束\\n- 风险：FILE_OR_BULK_WRITE\\n- 执行策略：ISOLATED_STORAGE_AND_DB\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/files.controller.ts\", \"line\": 16, \"controller\": \"FilesController\", \"handler\": \"upload\"}], \"x-frontend-evidence\": [{\"app\": \"mobile-device\", \"file\": \"apps/mobile-device/src/pages/companion/quick.vue\", \"line\": 316, \"function\": \"requestUpload(filename: string, dataUrl: string)\", \"bodyExpression\": \"JSON.stringify({ filename, content: dataUrl })\"}, {\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1473, \"function\": \"uploadImageBase64(filename: string, content: string)\", \"bodyExpression\": \"JSON.stringify({ filename, content })\"}, {\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 832, \"function\": \"uploadFile(filename: string, content: string)\", \"bodyExpression\": \"{ filename, content }\"}], \"x-test-risk\": \"FILE_OR_BULK_WRITE\", \"x-test-execution-policy\": \"ISOLATED_STORAGE_AND_DB\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/gateway/openApi/AnalysisType/setAnalysistypesStatus\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxAnalysisType\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxAnalysisType\", \"summary\": \"AiboxAnalysisTypeController.setAnalysistypesStatus\", \"operationId\": \"AiboxAnalysisTypeController_setAnalysistypesStatus\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"typeStatusList\": {\"type\": \"array\", \"items\": {\"type\": \"object\", \"additionalProperties\": {\"type\": \"number\", \"example\": 10}}}}, \"required\": [\"typeStatusList\"]}, \"example\": {\"typeStatusList\": [{}]}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-analysis-type.controller.ts:17；AiboxAnalysisTypeController.setAnalysistypesStatus\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-analysis-type.controller.ts\", \"line\": 17, \"controller\": \"AiboxAnalysisTypeController\", \"handler\": \"setAnalysistypesStatus\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/autoinfo/add\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVehicleInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVehicleInfo\", \"summary\": \"AiboxVehicleInfoController.add\", \"operationId\": \"AiboxVehicleInfoController_add\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehicleinfo.controller.ts:10；AiboxVehicleInfoController.add\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehicleinfo.controller.ts\", \"line\": 10, \"controller\": \"AiboxVehicleInfoController\", \"handler\": \"add\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/autoinfo/get\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVehicleInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVehicleInfo\", \"summary\": \"AiboxVehicleInfoController.get\", \"operationId\": \"AiboxVehicleInfoController_get\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehicleinfo.controller.ts:13；AiboxVehicleInfoController.get\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehicleinfo.controller.ts\", \"line\": 13, \"controller\": \"AiboxVehicleInfoController\", \"handler\": \"get\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/autoinfo/update\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVehicleInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVehicleInfo\", \"summary\": \"AiboxVehicleInfoController.update\", \"operationId\": \"AiboxVehicleInfoController_update\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehicleinfo.controller.ts:11；AiboxVehicleInfoController.update\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehicleinfo.controller.ts\", \"line\": 11, \"controller\": \"AiboxVehicleInfoController\", \"handler\": \"update\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/autolib/get\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVehicleLib\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVehicleLib\", \"summary\": \"AiboxVehicleLibController.get\", \"operationId\": \"AiboxVehicleLibController_get\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehiclelib.controller.ts:15；AiboxVehicleLibController.get\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehiclelib.controller.ts\", \"line\": 15, \"controller\": \"AiboxVehicleLibController\", \"handler\": \"get\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/autolib/save\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVehicleLib\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVehicleLib\", \"summary\": \"AiboxVehicleLibController.save\", \"operationId\": \"AiboxVehicleLibController_save\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehiclelib.controller.ts:10；AiboxVehicleLibController.save\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehiclelib.controller.ts\", \"line\": 10, \"controller\": \"AiboxVehicleLibController\", \"handler\": \"save\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/autolib/update\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVehicleLib\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVehicleLib\", \"summary\": \"AiboxVehicleLibController.update\", \"operationId\": \"AiboxVehicleLibController_update\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehiclelib.controller.ts:11；AiboxVehicleLibController.update\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-vehiclelib.controller.ts\", \"line\": 11, \"controller\": \"AiboxVehicleLibController\", \"handler\": \"update\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/autorecord/get\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxPlateRecord\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxPlateRecord\", \"summary\": \"AiboxPlateRecordController.get\", \"operationId\": \"AiboxPlateRecordController_get\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-platerecord.controller.ts:10；AiboxPlateRecordController.get\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-platerecord.controller.ts\", \"line\": 10, \"controller\": \"AiboxPlateRecordController\", \"handler\": \"get\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/channel/getChannels\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxChannel\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxChannel\", \"summary\": \"AiboxChannelController.getChannels\", \"operationId\": \"AiboxChannelController_getChannels\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-channel.controller.ts:11；AiboxChannelController.getChannels\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-channel.controller.ts\", \"line\": 11, \"controller\": \"AiboxChannelController\", \"handler\": \"getChannels\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/channel/updateChannelStatus\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxChannel\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxChannel\", \"summary\": \"AiboxChannelController.updateChannelStatus\", \"operationId\": \"AiboxChannelController_updateChannelStatus\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"Channel\": {\"type\": \"number\", \"example\": 10}, \"enable\": {\"type\": \"number\", \"example\": 10}}, \"required\": [\"Channel\", \"enable\"]}, \"example\": {\"Channel\": 10, \"enable\": 10}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-channel.controller.ts:17；AiboxChannelController.updateChannelStatus\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-channel.controller.ts\", \"line\": 17, \"controller\": \"AiboxChannelController\", \"handler\": \"updateChannelStatus\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/faceinfo/get\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxFaceInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxFaceInfo\", \"summary\": \"AiboxFaceInfoController.get\", \"operationId\": \"AiboxFaceInfoController_get\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts:29；AiboxFaceInfoController.get\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts\", \"line\": 29, \"controller\": \"AiboxFaceInfoController\", \"handler\": \"get\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/faceinfo/getFeature\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxFaceInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxFaceInfo\", \"summary\": \"AiboxFaceInfoController.getFeature\", \"operationId\": \"AiboxFaceInfoController_getFeature\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"imgBase64\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"imgBase64\"]}, \"example\": {\"imgBase64\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts:35；AiboxFaceInfoController.getFeature\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts\", \"line\": 35, \"controller\": \"AiboxFaceInfoController\", \"handler\": \"getFeature\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/faceinfo/getPeopleByID\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxFaceInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxFaceInfo\", \"summary\": \"AiboxFaceInfoController.getPeopleByID\", \"operationId\": \"AiboxFaceInfoController_getPeopleByID\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts:53；AiboxFaceInfoController.getPeopleByID\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts\", \"line\": 53, \"controller\": \"AiboxFaceInfoController\", \"handler\": \"getPeopleByID\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/faceinfo/getPeopleByValue\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxFaceInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxFaceInfo\", \"summary\": \"AiboxFaceInfoController.getPeopleByValue\", \"operationId\": \"AiboxFaceInfoController_getPeopleByValue\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts:41；AiboxFaceInfoController.getPeopleByValue\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts\", \"line\": 41, \"controller\": \"AiboxFaceInfoController\", \"handler\": \"getPeopleByValue\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/faceinfo/getPeopleScore\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxFaceInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxFaceInfo\", \"summary\": \"AiboxFaceInfoController.getPeopleScore\", \"operationId\": \"AiboxFaceInfoController_getPeopleScore\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts:47；AiboxFaceInfoController.getPeopleScore\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts\", \"line\": 47, \"controller\": \"AiboxFaceInfoController\", \"handler\": \"getPeopleScore\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/faceinfo/save\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxFaceInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxFaceInfo\", \"summary\": \"AiboxFaceInfoController.save\", \"operationId\": \"AiboxFaceInfoController_save\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts:11；AiboxFaceInfoController.save\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts\", \"line\": 11, \"controller\": \"AiboxFaceInfoController\", \"handler\": \"save\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/faceinfo/update\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxFaceInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxFaceInfo\", \"summary\": \"AiboxFaceInfoController.update\", \"operationId\": \"AiboxFaceInfoController_update\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts:17；AiboxFaceInfoController.update\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts\", \"line\": 17, \"controller\": \"AiboxFaceInfoController\", \"handler\": \"update\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/faceinfo/videoAnalysis/getPeopleFromVideo\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxFaceInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxFaceInfo\", \"summary\": \"AiboxFaceInfoController.getPeopleFromVideo\", \"operationId\": \"AiboxFaceInfoController_getPeopleFromVideo\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts:59；AiboxFaceInfoController.getPeopleFromVideo\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-faceinfo.controller.ts\", \"line\": 59, \"controller\": \"AiboxFaceInfoController\", \"handler\": \"getPeopleFromVideo\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/facelib/disable\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxFaceLib\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxFaceLib\", \"summary\": \"AiboxFaceLibController.disable\", \"operationId\": \"AiboxFaceLibController_disable\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-facelib.controller.ts:15；AiboxFaceLibController.disable\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-facelib.controller.ts\", \"line\": 15, \"controller\": \"AiboxFaceLibController\", \"handler\": \"disable\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/facelib/enable\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxFaceLib\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxFaceLib\", \"summary\": \"AiboxFaceLibController.enable\", \"operationId\": \"AiboxFaceLibController_enable\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-facelib.controller.ts:14；AiboxFaceLibController.enable\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-facelib.controller.ts\", \"line\": 14, \"controller\": \"AiboxFaceLibController\", \"handler\": \"enable\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/facelib/get\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxFaceLib\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxFaceLib\", \"summary\": \"AiboxFaceLibController.get\", \"operationId\": \"AiboxFaceLibController_get\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-facelib.controller.ts:16；AiboxFaceLibController.get\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-facelib.controller.ts\", \"line\": 16, \"controller\": \"AiboxFaceLibController\", \"handler\": \"get\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/facelib/getFeature\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxFaceLib\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxFaceLib\", \"summary\": \"AiboxFaceLibController.getFeature\", \"operationId\": \"AiboxFaceLibController_getFeature\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-facelib.controller.ts:18；AiboxFaceLibController.getFeature\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-facelib.controller.ts\", \"line\": 18, \"controller\": \"AiboxFaceLibController\", \"handler\": \"getFeature\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/facelib/save\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxFaceLib\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxFaceLib\", \"summary\": \"AiboxFaceLibController.save\", \"operationId\": \"AiboxFaceLibController_save\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-facelib.controller.ts:11；AiboxFaceLibController.save\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-facelib.controller.ts\", \"line\": 11, \"controller\": \"AiboxFaceLibController\", \"handler\": \"save\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/facelib/update\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxFaceLib\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxFaceLib\", \"summary\": \"AiboxFaceLibController.update\", \"operationId\": \"AiboxFaceLibController_update\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-facelib.controller.ts:12；AiboxFaceLibController.update\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-facelib.controller.ts\", \"line\": 12, \"controller\": \"AiboxFaceLibController\", \"handler\": \"update\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/token/getThirdPlatToken\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxAuth\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxAuth\", \"summary\": \"AiboxAuthController.getThirdPlatToken\", \"operationId\": \"AiboxAuthController_getThirdPlatToken\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"fnumber\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"fpwd\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}}, \"example\": {\"fnumber\": \"APIFOX_{{testBatch}}_001\", \"fpwd\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-auth.controller.ts:12；AiboxAuthController.getThirdPlatToken\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-auth.controller.ts\", \"line\": 12, \"controller\": \"AiboxAuthController\", \"handler\": \"getThirdPlatToken\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/videoSheet/deleteOpenApi\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVideoSheet\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVideoSheet\", \"summary\": \"AiboxVideoSheetController.deleteOpenApi\", \"operationId\": \"AiboxVideoSheetController_deleteOpenApi\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-videosheet.controller.ts:11；AiboxVideoSheetController.deleteOpenApi\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-videosheet.controller.ts\", \"line\": 11, \"controller\": \"AiboxVideoSheetController\", \"handler\": \"deleteOpenApi\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gateway/openApi/videoSheet/saveOrUpdateOpenApi\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxVideoSheet\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxVideoSheet\", \"summary\": \"AiboxVideoSheetController.saveOrUpdate\", \"operationId\": \"AiboxVideoSheetController_saveOrUpdate\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {}}, \"example\": [\"APIFOX_{{testBatch}}\"]}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-videosheet.controller.ts:10；AiboxVideoSheetController.saveOrUpdate\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-videosheet.controller.ts\", \"line\": 10, \"controller\": \"AiboxVideoSheetController\", \"handler\": \"saveOrUpdate\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/gatewayGBS/openApi/getAIRecordByCompany\": {\"post\": {\"operationId\": \"TrustivsAIController_getAIRecordByCompany\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/TrustIVS AI\"], \"x-apifox-folder\": \"公共与系统/TrustIVS AI\", \"x-original-tags\": [\"TrustIVS AI\"], \"summary\": \"TrustivsAIController.getAIRecordByCompany\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs/controller/ai.controller.ts:15；TrustivsAIController.getAIRecordByCompany\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/views/TrustivsTest.vue:161；onGetAIRecords()；body={ pageNum: 1, pageSize: 10, fsocialcreditcode: fsocialcreditcode.value, startTime: aiStart.value, endTime: aiEnd.value }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs/controller/ai.controller.ts\", \"line\": 15, \"controller\": \"TrustivsAIController\", \"handler\": \"getAIRecordByCompany\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/views/TrustivsTest.vue\", \"line\": 161, \"function\": \"onGetAIRecords()\", \"bodyExpression\": \"{ pageNum: 1, pageSize: 10, fsocialcreditcode: fsocialcreditcode.value, startTime: aiStart.value, endTime: aiEnd.value }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/gatewayGBS/openApi/getChannelByDevice\": {\"post\": {\"operationId\": \"TrustivsListController_getChannelByDevice\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/TrustIVS List\"], \"x-apifox-folder\": \"公共与系统/TrustIVS List\", \"x-original-tags\": [\"TrustIVS List\"], \"summary\": \"TrustivsListController.getChannelByDevice\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs/controller/list.controller.ts:33；TrustivsListController.getChannelByDevice\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/views/TrustivsTest.vue:151；onGetChannelByDevice()；body={ deviceId: deviceId.value }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs/controller/list.controller.ts\", \"line\": 33, \"controller\": \"TrustivsListController\", \"handler\": \"getChannelByDevice\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/views/TrustivsTest.vue\", \"line\": 151, \"function\": \"onGetChannelByDevice()\", \"bodyExpression\": \"{ deviceId: deviceId.value }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/gatewayGBS/openApi/getCompanyList\": {\"post\": {\"operationId\": \"TrustivsListController_getCompanyList\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/TrustIVS List\"], \"x-apifox-folder\": \"公共与系统/TrustIVS List\", \"x-original-tags\": [\"TrustIVS List\"], \"summary\": \"TrustivsListController.getCompanyList\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs/controller/list.controller.ts:19；TrustivsListController.getCompanyList\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/views/TrustivsTest.vue:123；onGetCompanyList()；body={ pageNum: 1, pageSize: 10, fsocialcreditcode: fsocialcreditcode.value }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs/controller/list.controller.ts\", \"line\": 19, \"controller\": \"TrustivsListController\", \"handler\": \"getCompanyList\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/views/TrustivsTest.vue\", \"line\": 123, \"function\": \"onGetCompanyList()\", \"bodyExpression\": \"{ pageNum: 1, pageSize: 10, fsocialcreditcode: fsocialcreditcode.value }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/gatewayGBS/openApi/getDeviceListByCompany\": {\"post\": {\"operationId\": \"TrustivsListController_getDeviceListByCompany\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/TrustIVS List\"], \"x-apifox-folder\": \"公共与系统/TrustIVS List\", \"x-original-tags\": [\"TrustIVS List\"], \"summary\": \"TrustivsListController.getDeviceListByCompany\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs/controller/list.controller.ts:25；TrustivsListController.getDeviceListByCompany\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/views/TrustivsTest.vue:132；onGetDeviceList()；body={ pageNum: 1, pageSize: 10, fsocialcreditcode: fsocialcreditcode.value }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs/controller/list.controller.ts\", \"line\": 25, \"controller\": \"TrustivsListController\", \"handler\": \"getDeviceListByCompany\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/views/TrustivsTest.vue\", \"line\": 132, \"function\": \"onGetDeviceList()\", \"bodyExpression\": \"{ pageNum: 1, pageSize: 10, fsocialcreditcode: fsocialcreditcode.value }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/gatewayGBS/openApi/getStreamURL\": {\"post\": {\"operationId\": \"TrustivsStreamController_getStreamURL\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/TrustIVS Stream\"], \"x-apifox-folder\": \"公共与系统/TrustIVS Stream\", \"x-original-tags\": [\"TrustIVS Stream\"], \"summary\": \"TrustivsStreamController.getStreamURL\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs/controller/stream.controller.ts:15；TrustivsStreamController.getStreamURL\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/views/TrustivsTest.vue:94；onGetStream()；body={ serial: serial.value, code: code.value, type: streamType.value }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs/controller/stream.controller.ts\", \"line\": 15, \"controller\": \"TrustivsStreamController\", \"handler\": \"getStreamURL\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/views/TrustivsTest.vue\", \"line\": 94, \"function\": \"onGetStream()\", \"bodyExpression\": \"{ serial: serial.value, code: code.value, type: streamType.value }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/api/integrations/morning-checks/mego\": {\"post\": {\"operationId\": \"IntegrationController_megoIngest\", \"parameters\": [{\"name\": \"x-sign\", \"in\": \"header\", \"description\": \"Signature header (optional if sign is provided in body)\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"requestBody\": {\"required\": true, \"content\": {\"multipart/form-data\": {\"schema\": {\"type\": \"object\", \"properties\": {\"equipmentCode\": {\"type\": \"string\"}, \"uuid\": {\"type\": \"string\"}, \"userId\": {\"type\": \"string\"}, \"checkTime\": {\"type\": \"string\", \"description\": \"YYYY-MM-DD HH:mm:ss\"}, \"foreheadTemp\": {\"type\": \"number\"}, \"normalTemperatureRange\": {\"type\": \"string\", \"example\": \"35.9-37.3\"}, \"abnormalTemp\": {\"type\": \"integer\", \"enum\": [0, 1]}, \"handCheckResult\": {\"type\": \"string\", \"description\": \"CSV list\"}, \"healthAskResult\": {\"type\": \"string\", \"description\": \"CSV list\"}, \"health\": {\"type\": \"integer\", \"enum\": [0, 1]}, \"faceFile\": {\"type\": \"string\", \"format\": \"binary\"}, \"palmFile\": {\"type\": \"string\", \"format\": \"binary\"}, \"backOfHandFile\": {\"type\": \"string\", \"format\": \"binary\"}, \"sign\": {\"type\": \"string\"}}, \"required\": [\"equipmentCode\", \"userId\", \"checkTime\", \"foreheadTemp\"]}}}}, \"responses\": {\"200\": {\"description\": \"Accepted\"}}, \"tags\": [\"公共与系统/Integration\"], \"x-apifox-folder\": \"公共与系统/Integration\", \"x-original-tags\": [\"Integration\"], \"summary\": \"IntegrationController.megoIngest\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/integration.controller.ts:83；IntegrationController.megoIngest\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/integration.controller.ts\", \"line\": 83, \"controller\": \"IntegrationController\", \"handler\": \"megoIngest\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/openApi/aisleInfo/reportAisleInfos\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxPush\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxPush\", \"summary\": \"AiboxPushController.reportAisleInfos\", \"operationId\": \"AiboxPushController_reportAisleInfos\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {}}, \"example\": [\"APIFOX_{{testBatch}}\"]}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-push.controller.ts:11；AiboxPushController.reportAisleInfos\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-push.controller.ts\", \"line\": 11, \"controller\": \"AiboxPushController\", \"handler\": \"reportAisleInfos\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/checkRecord/reportCheckRecords\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/CheckRecord\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/CheckRecord\", \"summary\": \"CheckRecordController.reportCheckRecords\", \"operationId\": \"CheckRecordController_reportCheckRecords\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/check-record.controller.ts:17；CheckRecordController.reportCheckRecords\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-push.controller.ts:14；AiboxPushController.reportCheckRecords\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/check-record.controller.ts\", \"line\": 17, \"controller\": \"CheckRecordController\", \"handler\": \"reportCheckRecords\"}, {\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-push.controller.ts\", \"line\": 14, \"controller\": \"AiboxPushController\", \"handler\": \"reportCheckRecords\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/checkRecord/reportVideo\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxPush\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxPush\", \"summary\": \"AiboxPushController.reportVideo\", \"operationId\": \"AiboxPushController_reportVideo\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-push.controller.ts:30；AiboxPushController.reportVideo\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-push.controller.ts\", \"line\": 30, \"controller\": \"AiboxPushController\", \"handler\": \"reportVideo\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/custStatisticRecord/reportCustStatisticRecords\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxPush\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxPush\", \"summary\": \"AiboxPushController.reportCustStatisticRecords\", \"operationId\": \"AiboxPushController_reportCustStatisticRecords\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {}}, \"example\": [\"APIFOX_{{testBatch}}\"]}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-push.controller.ts:24；AiboxPushController.reportCustStatisticRecords\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-push.controller.ts\", \"line\": 24, \"controller\": \"AiboxPushController\", \"handler\": \"reportCustStatisticRecords\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/faceRecord/reportFaceRecords\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxPush\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxPush\", \"summary\": \"AiboxPushController.reportFaceRecords\", \"operationId\": \"AiboxPushController_reportFaceRecords\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {}}, \"example\": [\"APIFOX_{{testBatch}}\"]}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-push.controller.ts:18；AiboxPushController.reportFaceRecords\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-push.controller.ts\", \"line\": 18, \"controller\": \"AiboxPushController\", \"handler\": \"reportFaceRecords\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/humCheckRecord/reportHumCheckRecord\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxPush\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxPush\", \"summary\": \"AiboxPushController.reportHumCheckRecord\", \"operationId\": \"AiboxPushController_reportHumCheckRecord\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-push.controller.ts:27；AiboxPushController.reportHumCheckRecord\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-push.controller.ts\", \"line\": 27, \"controller\": \"AiboxPushController\", \"handler\": \"reportHumCheckRecord\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/info/getAlgAnalysisDetail\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxInfo\", \"summary\": \"AiboxInfoController.getAlgAnalysisDetail\", \"operationId\": \"AiboxInfoController_getAlgAnalysisDetail\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-info.controller.ts:12；AiboxInfoController.getAlgAnalysisDetail\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-info.controller.ts\", \"line\": 12, \"controller\": \"AiboxInfoController\", \"handler\": \"getAlgAnalysisDetail\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/info/getParamList\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxInfo\", \"summary\": \"AiboxInfoController.getParamList\", \"operationId\": \"AiboxInfoController_getParamList\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-info.controller.ts:15；AiboxInfoController.getParamList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-info.controller.ts\", \"line\": 15, \"controller\": \"AiboxInfoController\", \"handler\": \"getParamList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/info/getServerConfig\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxInfo\", \"summary\": \"AiboxInfoController.getServerConfig\", \"operationId\": \"AiboxInfoController_getServerConfig\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-info.controller.ts:13；AiboxInfoController.getServerConfig\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-info.controller.ts\", \"line\": 13, \"controller\": \"AiboxInfoController\", \"handler\": \"getServerConfig\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/info/getServerInfo\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxInfo\", \"summary\": \"AiboxInfoController.getServerInfo\", \"operationId\": \"AiboxInfoController_getServerInfo\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-info.controller.ts:11；AiboxInfoController.getServerInfo\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-info.controller.ts\", \"line\": 11, \"controller\": \"AiboxInfoController\", \"handler\": \"getServerInfo\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/info/getStream0Config\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxInfo\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxInfo\", \"summary\": \"AiboxInfoController.getStream0Config\", \"operationId\": \"AiboxInfoController_getStream0Config\", \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-info.controller.ts:14；AiboxInfoController.getStream0Config\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-info.controller.ts\", \"line\": 14, \"controller\": \"AiboxInfoController\", \"handler\": \"getStream0Config\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/openApi/sendAIRecordByCompany\": {\"post\": {\"operationId\": \"TrustivsAIController_sendAIRecordByCompany\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"AI盒子与设备开放接口/TrustIVS AI\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/TrustIVS AI\", \"x-original-tags\": [\"TrustIVS AI\"], \"summary\": \"TrustivsAIController.sendAIRecordByCompany\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs/controller/ai.controller.ts:21；TrustivsAIController.sendAIRecordByCompany\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs/controller/ai.controller.ts\", \"line\": 21, \"controller\": \"TrustivsAIController\", \"handler\": \"sendAIRecordByCompany\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/openApi/strangerRecord/reportStrangerRecords\": {\"post\": {\"tags\": [\"AI盒子与设备开放接口/AiboxPush\"], \"x-apifox-folder\": \"AI盒子与设备开放接口/AiboxPush\", \"summary\": \"AiboxPushController.reportStrangerRecords\", \"operationId\": \"AiboxPushController_reportStrangerRecords\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"array\", \"items\": {}}, \"example\": [\"APIFOX_{{testBatch}}\"]}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/trustivs_aibox/controller/aibox-push.controller.ts:21；AiboxPushController.reportStrangerRecords\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/trustivs_aibox/controller/aibox-push.controller.ts\", \"line\": 21, \"controller\": \"AiboxPushController\", \"handler\": \"reportStrangerRecords\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/public/feedback\": {\"post\": {\"operationId\": \"PublicFeedbackController_create\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"公共与系统/Public Feedback\"], \"x-apifox-folder\": \"公共与系统/Public Feedback\", \"x-original-tags\": [\"Public Feedback\"], \"summary\": \"PublicFeedbackController.create\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"oneOf\": [{\"type\": \"number\", \"example\": 1}, {\"type\": \"string\", \"example\": \"1\"}]}, \"canteenId\": {\"oneOf\": [{\"type\": \"number\", \"example\": 1}, {\"type\": \"string\", \"example\": \"1\"}, {}]}, \"content\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}, \"contact\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"type\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"user\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}}, \"example\": {\"schoolId\": 1, \"canteenId\": 1, \"content\": \"APIFOX_{{testBatch}} 自动化测试数据\", \"contact\": \"APIFOX_{{testBatch}}\", \"type\": \"APIFOX_{{testBatch}}\", \"user\": \"APIFOX_{{testBatch}}\"}}}}, \"security\": [], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/public-feedback.controller.ts:15；PublicFeedbackController.create\\n\\n### 前端调用证据\\n- mobile-device: apps/mobile-device/src/services/api.ts:199；publicFeedback(body: { content: string; contact: string; schoolId?: string|number; canteenId?: string|number; at?: string })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/public-feedback.controller.ts\", \"line\": 15, \"controller\": \"PublicFeedbackController\", \"handler\": \"create\"}], \"x-frontend-evidence\": [{\"app\": \"mobile-device\", \"file\": \"apps/mobile-device/src/services/api.ts\", \"line\": 199, \"function\": \"publicFeedback(body: { content: string; contact: string; schoolId?: string|number; canteenId?: string|number; at?: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/push/deleteList\": {\"post\": {\"operationId\": \"SammeiController_pushDeleteList\", \"summary\": \"删除记录同步\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"type\", \"ids\"], \"properties\": {\"type\": {\"type\": \"string\", \"enum\": [\"user\", \"mealType\", \"food\", \"preFood\"], \"description\": \"删除类型：操作员/餐别/菜品/配餐\"}, \"ids\": {\"type\": \"string\", \"description\": \"删除记录的ids，英文逗号分隔\"}}}, \"example\": {\"type\": \"user\", \"ids\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"返回 { status: 0, message: \\\"成功\\\", data: \\\"\\\" }\"}}, \"tags\": [\"第三方设备数据接入/Sammei\"], \"x-apifox-folder\": \"第三方设备数据接入/Sammei\", \"x-original-tags\": [\"Sammei\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sammei.controller.ts:254；SammeiController.pushDeleteList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sammei.controller.ts\", \"line\": 254, \"controller\": \"SammeiController\", \"handler\": \"pushDeleteList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/push/detailList\": {\"post\": {\"operationId\": \"SammeiController_pushDetailList\", \"summary\": \"留样记录同步接口\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"sampleListJson\"], \"properties\": {\"sampleListJson\": {\"type\": \"string\", \"description\": \"留样记录数组转 JSON 字符串\"}}}, \"example\": {\"sampleListJson\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"返回 { status: 0, message: \\\"成功\\\", data: \\\"\\\" }\"}}, \"tags\": [\"第三方设备数据接入/Sammei\"], \"x-apifox-folder\": \"第三方设备数据接入/Sammei\", \"x-original-tags\": [\"Sammei\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sammei.controller.ts:237；SammeiController.pushDetailList\\n- services/gateway-service/src/modules/sammei.controller.ts:296；SammeiController.pushDetailList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sammei.controller.ts\", \"line\": 237, \"controller\": \"SammeiController\", \"handler\": \"pushDetailList\"}, {\"file\": \"services/gateway-service/src/modules/sammei.controller.ts\", \"line\": 296, \"controller\": \"SammeiController\", \"handler\": \"pushDetailList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/push/foodInfo\": {\"post\": {\"operationId\": \"SammeiController_pushFoodInfo\", \"summary\": \"菜品新增、删除、修改\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"msgType\", \"msgContent\"], \"properties\": {\"deviceType\": {\"type\": \"string\", \"example\": \"lockLyg\", \"description\": \"设备类型（可选）\"}, \"msgType\": {\"type\": \"string\", \"example\": \"foodInfo\", \"description\": \"消息类型：固定为 foodInfo\"}, \"deviceId\": {\"type\": \"string\", \"example\": \"67f88471cf3b5d04\", \"description\": \"设备ID（可选）\"}, \"msgContent\": {\"type\": \"string\", \"description\": \"JSON 字符串：{ msgType, dataStatus, data: [...], timestamp }\", \"example\": \"{\\\"msgType\\\":\\\"foodInfo\\\",\\\"dataStatus\\\":\\\"upd\\\",\\\"data\\\":[{\\\"id\\\":\\\"9e66af9c-163e-443e-a010-20ed6bbc991a\\\",\\\"foodName\\\":\\\"西红柿\\\",\\\"userName\\\":\\\"pc-admin\\\",\\\"userNo\\\":\\\"\\\"}],\\\"timestamp\\\":1752740213511}\"}}}, \"example\": {\"deviceType\": \"lockLyg\", \"msgType\": \"foodInfo\", \"deviceId\": \"67f88471cf3b5d04\", \"msgContent\": \"{\\\"msgType\\\":\\\"foodInfo\\\",\\\"dataStatus\\\":\\\"upd\\\",\\\"data\\\":[{\\\"id\\\":\\\"9e66af9c-163e-443e-a010-20ed6bbc991a\\\",\\\"foodName\\\":\\\"西红柿\\\",\\\"userName\\\":\\\"pc-admin\\\",\\\"userNo\\\":\\\"\\\"}],\\\"timestamp\\\":1752740213511}\"}}}}, \"responses\": {\"200\": {\"description\": \"返回 { status: 0, message: \\\"成功\\\", data: \\\"\\\" }\"}}, \"tags\": [\"第三方设备数据接入/Sammei\"], \"x-apifox-folder\": \"第三方设备数据接入/Sammei\", \"x-original-tags\": [\"Sammei\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sammei.controller.ts:40；SammeiController.pushFoodInfo\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sammei.controller.ts\", \"line\": 40, \"controller\": \"SammeiController\", \"handler\": \"pushFoodInfo\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/push/foodPlanList\": {\"post\": {\"operationId\": \"SammeiController_pushFoodPlanList\", \"summary\": \"配餐同步接口\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"preFoodListJson\": {\"type\": \"string\", \"description\": \"配餐数组转 JSON 字符串（优先）\"}, \"foodListJson\": {\"type\": \"string\", \"description\": \"兼容字段：配餐数组转 JSON 字符串\"}, \"preFoodList\": {\"type\": \"array\", \"items\": {\"type\": \"object\"}, \"description\": \"兼容数组字段\"}, \"foodList\": {\"type\": \"array\", \"items\": {\"type\": \"object\"}, \"description\": \"兼容数组字段\"}}}, \"example\": {\"preFoodListJson\": \"APIFOX_{{testBatch}}\", \"foodListJson\": \"APIFOX_{{testBatch}}\", \"preFoodList\": [{}], \"foodList\": [{}]}}}}, \"responses\": {\"200\": {\"description\": \"返回 { status: 0, message: \\\"成功\\\", data: \\\"\\\" }\"}}, \"tags\": [\"第三方设备数据接入/Sammei\"], \"x-apifox-folder\": \"第三方设备数据接入/Sammei\", \"x-original-tags\": [\"Sammei\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sammei.controller.ts:269；SammeiController.pushFoodPlanList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sammei.controller.ts\", \"line\": 269, \"controller\": \"SammeiController\", \"handler\": \"pushFoodPlanList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/push/operateLogList\": {\"post\": {\"operationId\": \"SammeiController_pushOperateLogList\", \"summary\": \"操作日志同步\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"operateLogListJson\"], \"properties\": {\"operateLogListJson\": {\"type\": \"string\", \"description\": \"操作日志数组转 JSON 字符串\"}}}, \"example\": {\"operateLogListJson\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"返回 { status: 0, message: \\\"成功\\\", data: \\\"\\\" }\"}}, \"tags\": [\"第三方设备数据接入/Sammei\"], \"x-apifox-folder\": \"第三方设备数据接入/Sammei\", \"x-original-tags\": [\"Sammei\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sammei.controller.ts:427；SammeiController.pushOperateLogList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sammei.controller.ts\", \"line\": 427, \"controller\": \"SammeiController\", \"handler\": \"pushOperateLogList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/push/operateUserList\": {\"post\": {\"operationId\": \"SammeiController_pushOperateUserList\", \"summary\": \"操作员同步接口\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"userListJson\"], \"properties\": {\"userListJson\": {\"type\": \"string\", \"description\": \"操作员数组转 JSON 字符串\"}}}, \"example\": {\"userListJson\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"返回 { status: 0, message: \\\"成功\\\", data: \\\"\\\" }\"}}, \"tags\": [\"第三方设备数据接入/Sammei\"], \"x-apifox-folder\": \"第三方设备数据接入/Sammei\", \"x-original-tags\": [\"Sammei\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sammei.controller.ts:404；SammeiController.pushOperateUserList\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sammei.controller.ts\", \"line\": 404, \"controller\": \"SammeiController\", \"handler\": \"pushOperateUserList\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/push/preFoodInfo\": {\"post\": {\"operationId\": \"SammeiController_pushPreFoodInfo\", \"summary\": \"配餐新增、删除、修改\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"msgType\", \"msgContent\"], \"properties\": {\"deviceType\": {\"type\": \"string\", \"example\": \"lockLyg\", \"description\": \"设备类型（可选）\"}, \"msgType\": {\"type\": \"string\", \"example\": \"preFoodInfo\", \"description\": \"消息类型：固定为 preFoodInfo\"}, \"deviceId\": {\"type\": \"string\", \"example\": \"67f88471cf3b5d04\", \"description\": \"设备ID（可选）\"}, \"msgContent\": {\"type\": \"string\", \"description\": \"JSON 字符串：{ msgType, dataStatus, data: [...], timestamp }\", \"example\": \"{\\\"msgType\\\":\\\"preFoodInfo\\\",\\\"dataStatus\\\":\\\"upd\\\",\\\"data\\\":[{\\\"id\\\":\\\"25887c5f-82fb-45fe-99a9-63bebf70664f\\\",\\\"foodId\\\":\\\"9e66af9c-163e-443e-a010-20ed6bbc991a\\\",\\\"foodName\\\":\\\"西红柿\\\",\\\"mealTypeId\\\":\\\"9e66999c-163e-443e-a010-20fffbbc991a\\\",\\\"mealTypeName\\\":\\\"早餐\\\",\\\"date\\\":\\\"2025-12-05\\\",\\\"userName\\\":\\\"pc-admin\\\",\\\"userNo\\\":\\\"\\\"}],\\\"timestamp\\\":1752740213511}\"}}}, \"example\": {\"deviceType\": \"lockLyg\", \"msgType\": \"preFoodInfo\", \"deviceId\": \"67f88471cf3b5d04\", \"msgContent\": \"{\\\"msgType\\\":\\\"preFoodInfo\\\",\\\"dataStatus\\\":\\\"upd\\\",\\\"data\\\":[{\\\"id\\\":\\\"25887c5f-82fb-45fe-99a9-63bebf70664f\\\",\\\"foodId\\\":\\\"9e66af9c-163e-443e-a010-20ed6bbc991a\\\",\\\"foodName\\\":\\\"西红柿\\\",\\\"mealTypeId\\\":\\\"9e66999c-163e-443e-a010-20fffbbc991a\\\",\\\"mealTypeName\\\":\\\"早餐\\\",\\\"date\\\":\\\"2025-12-05\\\",\\\"userName\\\":\\\"pc-admin\\\",\\\"userNo\\\":\\\"\\\"}],\\\"timestamp\\\":1752740213511}\"}}}}, \"responses\": {\"200\": {\"description\": \"返回 { status: 0, message: \\\"成功\\\", data: \\\"\\\" }\"}}, \"tags\": [\"第三方设备数据接入/Sammei\"], \"x-apifox-folder\": \"第三方设备数据接入/Sammei\", \"x-original-tags\": [\"Sammei\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sammei.controller.ts:89；SammeiController.pushPreFoodInfo\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sammei.controller.ts\", \"line\": 89, \"controller\": \"SammeiController\", \"handler\": \"pushPreFoodInfo\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/push/ws/foodInfo\": {\"post\": {\"tags\": [\"第三方设备数据接入/PushWS\"], \"x-apifox-folder\": \"第三方设备数据接入/PushWS\", \"summary\": \"通过 WebSocket 下发 foodInfo（外部系统 -> 设备）\", \"operationId\": \"PushWsController_downFoodInfo\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/push-ws.controller.ts:31；PushWsController.downFoodInfo\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/push-ws.controller.ts\", \"line\": 31, \"controller\": \"PushWsController\", \"handler\": \"downFoodInfo\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/push/ws/preFoodInfo\": {\"post\": {\"tags\": [\"第三方设备数据接入/PushWS\"], \"x-apifox-folder\": \"第三方设备数据接入/PushWS\", \"summary\": \"通过 WebSocket 下发 preFoodInfo（外部系统 -> 设备）\", \"operationId\": \"PushWsController_downPreFoodInfo\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/push-ws.controller.ts:41；PushWsController.downPreFoodInfo\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/push-ws.controller.ts\", \"line\": 41, \"controller\": \"PushWsController\", \"handler\": \"downPreFoodInfo\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/reg/ai/broadcast\": {\"post\": {\"operationId\": \"AIController_broadcast\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/AI\"], \"x-apifox-folder\": \"监管端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.broadcast\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"school\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"camera\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"text\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"school\", \"camera\", \"text\"]}, \"example\": {\"school\": \"APIFOX_{{testBatch}}\", \"camera\": \"APIFOX_{{testBatch}}\", \"text\": \"APIFOX_{{testBatch}}\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:777；AIController.broadcast\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:331；aiBroadcast(body: { school: string; camera: string; text: string })；body=body\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 777, \"controller\": \"AIController\", \"handler\": \"broadcast\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 331, \"function\": \"aiBroadcast(body: { school: string; camera: string; text: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/ai/events/ingest\": {\"post\": {\"operationId\": \"AIController_ingest\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/AI\"], \"x-apifox-folder\": \"监管端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.ingest\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"string\", \"example\": \"1\"}, \"cameraId\": {\"type\": \"string\", \"example\": \"1\"}, \"type\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"snapshotUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}, \"detectedAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"personName\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}}, \"required\": [\"schoolId\", \"type\"]}, \"example\": {\"schoolId\": \"1\", \"cameraId\": \"1\", \"type\": \"APIFOX_{{testBatch}}\", \"snapshotUrl\": \"https://example.test/apifox-autotest.jpg\", \"detectedAt\": \"2026-09-24 10:00:00\", \"personName\": \"APIFOX_{{testBatch}}_测试数据\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:796；AIController.ingest\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 796, \"controller\": \"AIController\", \"handler\": \"ingest\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/alerts/notify\": {\"post\": {\"operationId\": \"RegAlertsController_notify\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Alerts\"], \"x-apifox-folder\": \"监管端/Regulator Alerts\", \"x-original-tags\": [\"Regulator Alerts\"], \"summary\": \"RegAlertsController.notify\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"to\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"message\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"channel\": {\"type\": \"string\", \"enum\": [\"sms\", \"app\", \"both\"], \"example\": \"sms\"}}, \"required\": [\"to\", \"message\"]}, \"example\": {\"to\": [\"APIFOX_{{testBatch}}\"], \"message\": \"APIFOX_{{testBatch}}\", \"channel\": \"sms\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-alerts.controller.ts:322；RegAlertsController.notify\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1290；alertsNotify(body: { to: string[]; message: string; channel?: 'sms' | 'app' | 'both'; })；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-alerts.controller.ts\", \"line\": 322, \"controller\": \"RegAlertsController\", \"handler\": \"notify\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1290, \"function\": \"alertsNotify(body: { to: string[]; message: string; channel?: 'sms' | 'app' | 'both'; })\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/alerts/notify-rectify\": {\"post\": {\"operationId\": \"SchoolMessagesController_regNotifyRectify\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/School Messages\"], \"x-apifox-folder\": \"监管端/School Messages\", \"x-original-tags\": [\"School Messages\"], \"summary\": \"SchoolMessagesController.regNotifyRectify\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"oneOf\": [{\"type\": \"number\", \"example\": 1}, {\"type\": \"string\", \"example\": \"1\"}]}, \"title\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"detail\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, {}]}, \"at\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"refId\": {\"type\": \"string\", \"example\": \"1\"}}, \"required\": [\"schoolId\", \"title\"]}, \"example\": {\"schoolId\": 1, \"title\": \"APIFOX_{{testBatch}}_测试数据\", \"detail\": \"APIFOX_{{testBatch}}\", \"at\": \"2026-09-24 10:00:00\", \"refId\": \"1\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-messages.controller.ts:15；SchoolMessagesController.regNotifyRectify\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1302；alertsNotifyRectify(payload: { schoolId: string | number; title: string; detail?: string; refId?: string })；body=JSON.stringify(payload)\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-messages.controller.ts\", \"line\": 15, \"controller\": \"SchoolMessagesController\", \"handler\": \"regNotifyRectify\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1302, \"function\": \"alertsNotifyRectify(payload: { schoolId: string | number; title: string; detail?: string; refId?: string })\", \"bodyExpression\": \"JSON.stringify(payload)\"}], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/inspections/config/items\": {\"post\": {\"operationId\": \"RegInspectionsController_addItem\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.addItem\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}}, \"required\": [\"name\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:307；RegInspectionsController.addItem\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1484；inspConfigAddItem(name: string)；body={ name }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 307, \"controller\": \"RegInspectionsController\", \"handler\": \"addItem\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1484, \"function\": \"inspConfigAddItem(name: string)\", \"bodyExpression\": \"{ name }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/inspections/config/items/remove\": {\"post\": {\"operationId\": \"RegInspectionsController_removeItem\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.removeItem\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}}, \"required\": [\"name\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:322；RegInspectionsController.removeItem\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1485；inspConfigRemoveItem(name: string)；body={ name }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 322, \"controller\": \"RegInspectionsController\", \"handler\": \"removeItem\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1485, \"function\": \"inspConfigRemoveItem(name: string)\", \"bodyExpression\": \"{ name }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/inspections/config/penalties\": {\"post\": {\"operationId\": \"RegInspectionsController_addPenalty\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.addPenalty\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}}, \"required\": [\"name\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:312；RegInspectionsController.addPenalty\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1486；inspConfigAddPenalty(name: string)；body={ name }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 312, \"controller\": \"RegInspectionsController\", \"handler\": \"addPenalty\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1486, \"function\": \"inspConfigAddPenalty(name: string)\", \"bodyExpression\": \"{ name }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/inspections/config/penalties/remove\": {\"post\": {\"operationId\": \"RegInspectionsController_removePenalty\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.removePenalty\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}}, \"required\": [\"name\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:327；RegInspectionsController.removePenalty\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1487；inspConfigRemovePenalty(name: string)；body={ name }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 327, \"controller\": \"RegInspectionsController\", \"handler\": \"removePenalty\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1487, \"function\": \"inspConfigRemovePenalty(name: string)\", \"bodyExpression\": \"{ name }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/inspections/config/publications\": {\"post\": {\"operationId\": \"RegInspectionsController_addPublication\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.addPublication\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}}, \"required\": [\"name\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:317；RegInspectionsController.addPublication\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1488；inspConfigAddPublication(name: string)；body={ name }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 317, \"controller\": \"RegInspectionsController\", \"handler\": \"addPublication\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1488, \"function\": \"inspConfigAddPublication(name: string)\", \"bodyExpression\": \"{ name }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/inspections/config/publications/remove\": {\"post\": {\"operationId\": \"RegInspectionsController_removePublication\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.removePublication\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}}, \"required\": [\"name\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:332；RegInspectionsController.removePublication\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1489；inspConfigRemovePublication(name: string)；body={ name }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 332, \"controller\": \"RegInspectionsController\", \"handler\": \"removePublication\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1489, \"function\": \"inspConfigRemovePublication(name: string)\", \"bodyExpression\": \"{ name }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/inspections/inspectors/{id}/delete\": {\"post\": {\"operationId\": \"RegInspectionsController_deleteInspector\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.deleteInspector\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:295；RegInspectionsController.deleteInspector\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 295, \"controller\": \"RegInspectionsController\", \"handler\": \"deleteInspector\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/inspections/tasks/{id}/submit\": {\"post\": {\"operationId\": \"RegInspectionsController_submit\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.submit\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"passed\": {\"type\": \"boolean\", \"example\": true}, \"items\": {\"type\": \"array\", \"items\": {\"type\": \"object\", \"properties\": {\"item\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"ok\": {\"type\": \"boolean\", \"example\": true}, \"remark\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}, \"penaltyType\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"extra\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"item\", \"ok\"]}}, \"summary\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"images\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}}, \"required\": [\"passed\", \"items\"]}, \"example\": {\"passed\": true, \"items\": [{\"item\": \"APIFOX_{{testBatch}}\", \"ok\": true, \"remark\": \"APIFOX_{{testBatch}} 自动化测试数据\", \"penaltyType\": \"APIFOX_{{testBatch}}\", \"extra\": \"APIFOX_{{testBatch}}\"}], \"summary\": \"APIFOX_{{testBatch}}\", \"images\": [\"APIFOX_{{testBatch}}\"]}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:178；RegInspectionsController.submit\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:279；regTaskSubmitReport(id: string, body: any)；body={ passed, items: mapped, summary: body?.record?.text || '', images: imgs }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 178, \"controller\": \"RegInspectionsController\", \"handler\": \"submit\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 279, \"function\": \"regTaskSubmitReport(id: string, body: any)\", \"bodyExpression\": \"{ passed, items: mapped, summary: body?.record?.text || '', images: imgs }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/inspections/tasks/bulk\": {\"post\": {\"operationId\": \"RegInspectionsController_createTasksBulk\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.createTasksBulk\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"type\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"schools\": {\"type\": \"array\", \"items\": {\"oneOf\": [{\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, {\"type\": \"number\", \"example\": 10}]}}, \"assignees\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"grid\": {\"type\": \"string\", \"example\": \"1\"}, \"content\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}, \"planAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"perAssignee\": {\"type\": \"boolean\", \"example\": true}}, \"required\": [\"schools\", \"content\"]}, \"example\": {\"type\": \"APIFOX_{{testBatch}}\", \"schools\": [\"APIFOX_{{testBatch}}\"], \"assignees\": [\"APIFOX_{{testBatch}}\"], \"grid\": \"1\", \"content\": \"APIFOX_{{testBatch}} 自动化测试数据\", \"planAt\": \"2026-09-24 10:00:00\", \"perAssignee\": true}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:105；RegInspectionsController.createTasksBulk\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:246；regTaskCreate(body: any)；body={ type: payloadBase.type, schools, assignees, grid: undefined, content, planAt, perAssignee: true, }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 105, \"controller\": \"RegInspectionsController\", \"handler\": \"createTasksBulk\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 246, \"function\": \"regTaskCreate(body: any)\", \"bodyExpression\": \"{ type: payloadBase.type, schools, assignees, grid: undefined, content, planAt, perAssignee: true, }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/inspections/tasks/clear\": {\"post\": {\"operationId\": \"RegInspectionsController_clearAll\", \"summary\": \"Clear all inspection tasks\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:214；RegInspectionsController.clearAll\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 214, \"controller\": \"RegInspectionsController\", \"handler\": \"clearAll\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/inspections/tasks/clear-mem\": {\"post\": {\"operationId\": \"RegInspectionsController_clearMem\", \"summary\": \"Clear in-memory tasks only (keep DB data)\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:222；RegInspectionsController.clearMem\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 222, \"controller\": \"RegInspectionsController\", \"handler\": \"clearMem\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/inspections/tasks/random\": {\"post\": {\"operationId\": \"RegInspectionsController_random\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator Inspections\"], \"x-apifox-folder\": \"监管端/Regulator Inspections\", \"x-original-tags\": [\"Regulator Inspections\"], \"summary\": \"RegInspectionsController.random\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"item\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"inspectorCount\": {\"type\": \"number\", \"example\": 10}, \"schoolIds\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"schoolCount\": {\"type\": \"number\", \"example\": 10}}, \"required\": [\"item\"]}, \"example\": {\"item\": \"APIFOX_{{testBatch}}\", \"inspectorCount\": 10, \"schoolIds\": [\"APIFOX_{{testBatch}}\"], \"schoolCount\": 10}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-inspections.controller.ts:193；RegInspectionsController.random\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-inspections.controller.ts\", \"line\": 193, \"controller\": \"RegInspectionsController\", \"handler\": \"random\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/reg/schools/config/delete\": {\"post\": {\"operationId\": \"RegOverviewController_deleteSchool\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/RegOverview\"], \"x-apifox-folder\": \"监管端/RegOverview\", \"summary\": \"RegOverviewController.deleteSchool\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"number\", \"example\": 1}}, \"required\": [\"id\"]}, \"example\": {\"id\": 1}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-overview.controller.ts:295；RegOverviewController.deleteSchool\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:104；sysSchoolDelete(id: number)；body={ id }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-overview.controller.ts\", \"line\": 295, \"controller\": \"RegOverviewController\", \"handler\": \"deleteSchool\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 104, \"function\": \"sysSchoolDelete(id: number)\", \"bodyExpression\": \"{ id }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/system/roles/delete\": {\"post\": {\"operationId\": \"RegSystemController_deleteRole\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.deleteRole\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"number\", \"example\": 1}}, \"required\": [\"id\"]}, \"example\": {\"id\": 1}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:111；RegSystemController.deleteRole\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1423；sysRoleDelete(id: number)；body=JSON.stringify({ id })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 111, \"controller\": \"RegSystemController\", \"handler\": \"deleteRole\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1423, \"function\": \"sysRoleDelete(id: number)\", \"bodyExpression\": \"JSON.stringify({ id })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/system/roles/permissions\": {\"post\": {\"operationId\": \"RegSystemController_setRolePerms\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.setRolePerms\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"permissions\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}}, \"required\": [\"name\", \"permissions\"]}, \"example\": {\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"permissions\": [\"APIFOX_{{testBatch}}\"]}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:124；RegSystemController.setRolePerms\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1442；sysSetRolePerms(name: string, permissions: string[])；body=JSON.stringify({ name, permissions })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 124, \"controller\": \"RegSystemController\", \"handler\": \"setRolePerms\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1442, \"function\": \"sysSetRolePerms(name: string, permissions: string[])\", \"bodyExpression\": \"JSON.stringify({ name, permissions })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/system/units/clear\": {\"post\": {\"operationId\": \"RegSystemController_clearUnits\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.clearUnits\", \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:165；RegSystemController.clearUnits\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:115；regUnitsClear()\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 165, \"controller\": \"RegSystemController\", \"handler\": \"clearUnits\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 115, \"function\": \"regUnitsClear()\", \"bodyExpression\": \"\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/system/units/delete\": {\"post\": {\"operationId\": \"RegSystemController_deleteUnit\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.deleteUnit\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"string\", \"example\": \"1\"}}, \"required\": [\"id\"]}, \"example\": {\"id\": \"1\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:160；RegSystemController.deleteUnit\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:114；regUnitDelete(id: string)；body={ id }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 160, \"controller\": \"RegSystemController\", \"handler\": \"deleteUnit\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 114, \"function\": \"regUnitDelete(id: string)\", \"bodyExpression\": \"{ id }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/system/users/delete\": {\"post\": {\"operationId\": \"RegSystemController_deleteUser\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.deleteUser\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"string\", \"example\": \"1\"}}, \"required\": [\"id\"]}, \"example\": {\"id\": \"1\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:93；RegSystemController.deleteUser\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1395；sysUserDelete(id: string)；body=JSON.stringify({ id })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 93, \"controller\": \"RegSystemController\", \"handler\": \"deleteUser\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1395, \"function\": \"sysUserDelete(id: string)\", \"bodyExpression\": \"JSON.stringify({ id })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/reg/system/users/roles\": {\"post\": {\"operationId\": \"RegSystemController_setUserRoles\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"监管端/Regulator System\"], \"x-apifox-folder\": \"监管端/Regulator System\", \"x-original-tags\": [\"Regulator System\"], \"summary\": \"RegSystemController.setUserRoles\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"string\", \"example\": \"1\"}, \"roles\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}}, \"required\": [\"id\", \"roles\"]}, \"example\": {\"id\": \"1\", \"roles\": [\"APIFOX_{{testBatch}}\"]}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/reg-system.controller.ts:120；RegSystemController.setUserRoles\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1433；sysSetUserRoles(id: string, roles: string[])；body=JSON.stringify({ id, roles })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/reg-system.controller.ts\", \"line\": 120, \"controller\": \"RegSystemController\", \"handler\": \"setUserRoles\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1433, \"function\": \"sysSetUserRoles(id: string, roles: string[])\", \"bodyExpression\": \"JSON.stringify({ id, roles })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/regulator/morning-checks/push\": {\"post\": {\"operationId\": \"RegulatorMorningChecksController_push\", \"parameters\": [{\"name\": \"x-api-key\", \"in\": \"header\", \"description\": \"Required if INGEST_API_KEY is set\", \"required\": false, \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"requestBody\": {\"required\": true, \"description\": \"Push a morning-check payload from school/ingestion\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\"}, \"example\": {}}}}, \"responses\": {\"200\": {\"description\": \"Accepted with generated id\"}}, \"tags\": [\"公共与系统/Integration\"], \"x-apifox-folder\": \"公共与系统/Integration\", \"x-original-tags\": [\"Regulator\"], \"summary\": \"IntegrationController.pushReg\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/integration.controller.ts:214；IntegrationController.pushReg\\n- services/gateway-service/src/modules/regulator-morning-checks.controller.ts:27；RegulatorMorningChecksController.push\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/integration.controller.ts\", \"line\": 214, \"controller\": \"IntegrationController\", \"handler\": \"pushReg\"}, {\"file\": \"services/gateway-service/src/modules/regulator-morning-checks.controller.ts\", \"line\": 27, \"controller\": \"RegulatorMorningChecksController\", \"handler\": \"push\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/sakura/instrument/login\": {\"post\": {\"operationId\": \"SakuraController_instrumentLogin\", \"summary\": \"仪器登录\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"第三方设备数据接入/Sakura\"], \"x-apifox-folder\": \"第三方设备数据接入/Sakura\", \"x-original-tags\": [\"Sakura\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"userId\": {\"type\": \"string\", \"example\": \"1\"}, \"password\": {\"type\": \"string\", \"example\": \"Test@123456\"}}}, \"example\": {\"userId\": \"1\", \"password\": \"Test@123456\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sakura.controller.ts:56；SakuraController.instrumentLogin\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sakura.controller.ts\", \"line\": 56, \"controller\": \"SakuraController\", \"handler\": \"instrumentLogin\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/sakura/instrument/updateFileImage\": {\"post\": {\"operationId\": \"SakuraController_updateFileImage\", \"summary\": \"图片分类上传（单图）\", \"parameters\": [{\"name\": \"token\", \"required\": true, \"in\": \"header\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, {\"name\": \"produceCode\", \"required\": true, \"in\": \"query\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"requestBody\": {\"required\": true, \"content\": {\"multipart/form-data\": {\"schema\": {\"type\": \"object\", \"required\": [\"file\", \"produceCode\", \"flowId\", \"type\"], \"properties\": {\"file\": {\"type\": \"string\", \"format\": \"binary\", \"description\": \"图片文件\"}, \"produceCode\": {\"type\": \"string\", \"description\": \"仪器编号\"}, \"flowId\": {\"type\": \"string\", \"description\": \"留样菜品服务器唯一ID\"}, \"type\": {\"type\": \"integer\", \"enum\": [1, 2, 3], \"description\": \"图片类型：1放入 2取出 3签名\"}}}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"第三方设备数据接入/Sakura\"], \"x-apifox-folder\": \"第三方设备数据接入/Sakura\", \"x-original-tags\": [\"Sakura\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sakura.controller.ts:181；SakuraController.updateFileImage\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sakura.controller.ts\", \"line\": 181, \"controller\": \"SakuraController\", \"handler\": \"updateFileImage\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/sakura/instrument/updateSamples\": {\"post\": {\"operationId\": \"SakuraController_updateSamples\", \"summary\": \"更新留样信息（单条）\", \"parameters\": [{\"name\": \"token\", \"required\": true, \"in\": \"header\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"第三方设备数据接入/Sakura\"], \"x-apifox-folder\": \"第三方设备数据接入/Sakura\", \"x-original-tags\": [\"Sakura\"], \"requestBody\": {\"required\": false, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sakura.controller.ts:245；SakuraController.updateSamples\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sakura.controller.ts\", \"line\": 245, \"controller\": \"SakuraController\", \"handler\": \"updateSamples\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/sakura/user/login\": {\"post\": {\"operationId\": \"SakuraController_userLogin\", \"summary\": \"留样人员在线登录\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"userId\", \"password\"], \"properties\": {\"userId\": {\"type\": \"string\", \"description\": \"用户名\"}, \"password\": {\"type\": \"string\", \"description\": \"用户密码\"}}}, \"example\": {\"userId\": \"1\", \"password\": \"Test@123456\"}}}}, \"responses\": {\"200\": {\"description\": \"登录成功\"}}, \"tags\": [\"第三方设备数据接入/Sakura\"], \"x-apifox-folder\": \"第三方设备数据接入/Sakura\", \"x-original-tags\": [\"Sakura\"], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sakura.controller.ts:81；SakuraController.userLogin\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sakura.controller.ts\", \"line\": 81, \"controller\": \"SakuraController\", \"handler\": \"userLogin\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/sample/sample/saveOrUpdateDishSample\": {\"post\": {\"tags\": [\"第三方设备数据接入/Dewo-Liuyangcheng\"], \"x-apifox-folder\": \"第三方设备数据接入/Dewo-Liuyangcheng\", \"summary\": \"保存/更新留样菜单\", \"operationId\": \"DewoLiuyangchengController_saveOrUpdate\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts:722；DewoLiuyangchengController.saveOrUpdate\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts\", \"line\": 722, \"controller\": \"DewoLiuyangchengController\", \"handler\": \"saveOrUpdate\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/sample/sample/upload\": {\"post\": {\"tags\": [\"第三方设备数据接入/Dewo-Liuyangcheng\"], \"x-apifox-folder\": \"第三方设备数据接入/Dewo-Liuyangcheng\", \"summary\": \"样品模块图片上传\", \"operationId\": \"DewoLiuyangchengController_uploadSampleImage\", \"requestBody\": {\"required\": true, \"content\": {\"multipart/form-data\": {\"schema\": {\"type\": \"object\", \"properties\": {\"file\": {\"type\": \"string\", \"format\": \"binary\"}}, \"required\": [\"file\"]}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts:956；DewoLiuyangchengController.uploadSampleImage\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts\", \"line\": 956, \"controller\": \"DewoLiuyangchengController\", \"handler\": \"uploadSampleImage\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/school/ai/events/handle\": {\"post\": {\"operationId\": \"AIController_handleSchool\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/AI\"], \"x-apifox-folder\": \"学校端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.handleSchool\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"eventId\": {\"type\": \"string\", \"example\": \"1\"}, \"decision\": {\"type\": \"string\", \"enum\": [\"已现场纠正\", \"误报\", \"其他\"], \"example\": \"已现场纠正\"}, \"measure\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"eventId\"]}, \"example\": {\"eventId\": \"1\", \"decision\": \"已现场纠正\", \"measure\": \"APIFOX_{{testBatch}}\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:439；AIController.handleSchool\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:487；aiEventHandle(eventId: string, measure: string)；body={ eventId, measure }\\n- web-school: apps/web-school/src/services/api.ts:488；aiEventHandleEx(body: { eventId: string; decision?: '已现场纠正' | '误报' | '其他'; note?: string; evidence?: string[]; handledBy?: string })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 439, \"controller\": \"AIController\", \"handler\": \"handleSchool\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 487, \"function\": \"aiEventHandle(eventId: string, measure: string)\", \"bodyExpression\": \"{ eventId, measure }\"}, {\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 488, \"function\": \"aiEventHandleEx(body: { eventId: string; decision?: '已现场纠正' | '误报' | '其他'; note?: string; evidence?: string[]; handledBy?: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/ai/events/mock\": {\"post\": {\"operationId\": \"AIController_mockSchoolEvents\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/AI\"], \"x-apifox-folder\": \"学校端/AI\", \"x-original-tags\": [\"AI\"], \"summary\": \"AIController.mockSchoolEvents\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"string\", \"example\": \"1\"}}}, \"example\": {\"schoolId\": \"1\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/ai.controller.ts:494；AIController.mockSchoolEvents\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:492；aiEventsMock(body: { schoolId?: string; count?: number; perCameraCount?: number; start?: string; end?: string; handledRatio?: number; falseRatio?: number; cameraIds?: string[] })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/ai.controller.ts\", \"line\": 494, \"controller\": \"AIController\", \"handler\": \"mockSchoolEvents\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 492, \"function\": \"aiEventsMock(body: { schoolId?: string; count?: number; perCameraCount?: number; start?: string; end?: string; handledRatio?: number; falseRatio?: number; cameraIds?: string[] })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/analytics/alerts/handle\": {\"post\": {\"operationId\": \"AnalyticsController_handleAlert\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Analytics\"], \"x-apifox-folder\": \"学校端/Analytics\", \"x-original-tags\": [\"Analytics\"], \"summary\": \"AnalyticsController.handleAlert\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"string\", \"example\": \"1\"}, \"type\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"measure\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"status\": {\"type\": \"string\", \"enum\": [\"未处理\", \"已处理\"], \"example\": \"未处理\"}}, \"required\": [\"id\", \"type\"]}, \"example\": {\"id\": \"1\", \"type\": \"APIFOX_{{testBatch}}\", \"measure\": \"APIFOX_{{testBatch}}\", \"status\": \"未处理\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/analytics.controller.ts:271；AnalyticsController.handleAlert\\n\\n### 前端调用证据\\n- web-regulator: apps/web-regulator/src/services/api.ts:1314；analyticsAlertHandle(payload: { id: string; type: string; measure?: string; status?: '未处理' | '已处理' })；body=JSON.stringify(payload)\\n- web-school: apps/web-school/src/services/api.ts:1375；analyticsAlertHandle(payload: { id: string; type: string; measure?: string; status?: '未处理' | '已处理' })；body=JSON.stringify(payload)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/analytics.controller.ts\", \"line\": 271, \"controller\": \"AnalyticsController\", \"handler\": \"handleAlert\"}], \"x-frontend-evidence\": [{\"app\": \"web-regulator\", \"file\": \"apps/web-regulator/src/services/api.ts\", \"line\": 1314, \"function\": \"analyticsAlertHandle(payload: { id: string; type: string; measure?: string; status?: '未处理' | '已处理' })\", \"bodyExpression\": \"JSON.stringify(payload)\"}, {\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1375, \"function\": \"analyticsAlertHandle(payload: { id: string; type: string; measure?: string; status?: '未处理' | '已处理' })\", \"bodyExpression\": \"JSON.stringify(payload)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/canteen-detail/delete\": {\"post\": {\"operationId\": \"CanteensController_deleteCanteenDetail\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Canteens\"], \"x-apifox-folder\": \"学校端/Canteens\", \"x-original-tags\": [\"Canteens\"], \"summary\": \"CanteensController.deleteCanteenDetail\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"canteenId\": {\"type\": \"number\", \"example\": 1}}, \"required\": [\"canteenId\"]}, \"example\": {\"canteenId\": 1}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/canteens.controller.ts:365；CanteensController.deleteCanteenDetail\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1334；canteenDetailDelete(canteenId: number)；body=JSON.stringify({ canteenId })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/canteens.controller.ts\", \"line\": 365, \"controller\": \"CanteensController\", \"handler\": \"deleteCanteenDetail\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1334, \"function\": \"canteenDetailDelete(canteenId: number)\", \"bodyExpression\": \"JSON.stringify({ canteenId })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/canteen-licenses/delete\": {\"post\": {\"operationId\": \"CanteensController_deleteLicense\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Canteens\"], \"x-apifox-folder\": \"学校端/Canteens\", \"x-original-tags\": [\"Canteens\"], \"summary\": \"CanteensController.deleteLicense\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"number\", \"example\": 1}}, \"required\": [\"id\"]}, \"example\": {\"id\": 1}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/canteens.controller.ts:245；CanteensController.deleteLicense\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/canteens.controller.ts\", \"line\": 245, \"controller\": \"CanteensController\", \"handler\": \"deleteLicense\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/canteens/delete\": {\"post\": {\"operationId\": \"CanteensController_deleteCanteen\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Canteens\"], \"x-apifox-folder\": \"学校端/Canteens\", \"x-original-tags\": [\"Canteens\"], \"summary\": \"CanteensController.deleteCanteen\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"number\", \"example\": 1}}, \"required\": [\"id\"]}, \"example\": {\"id\": 1}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/canteens.controller.ts:169；CanteensController.deleteCanteen\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/canteens.controller.ts\", \"line\": 169, \"controller\": \"CanteensController\", \"handler\": \"deleteCanteen\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/certificates/delete\": {\"post\": {\"operationId\": \"SchoolCertificatesController_remove\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Certificates\"], \"x-apifox-folder\": \"学校端/Certificates\", \"x-original-tags\": [\"Certificates\"], \"summary\": \"SchoolCertificatesController.remove\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"oneOf\": [{\"type\": \"number\", \"example\": 1}, {\"type\": \"string\", \"example\": \"1\"}]}}}, \"example\": {\"id\": 1}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-certificates.controller.ts:51；SchoolCertificatesController.remove\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1209；certDelete(id: string)；body={ id }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-certificates.controller.ts\", \"line\": 51, \"controller\": \"SchoolCertificatesController\", \"handler\": \"remove\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1209, \"function\": \"certDelete(id: string)\", \"bodyExpression\": \"{ id }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/dine/camera/callback\": {\"post\": {\"operationId\": \"DineController_camera\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Dine\"], \"x-apifox-folder\": \"学校端/Dine\", \"x-original-tags\": [\"Dine\"], \"summary\": \"DineController.camera\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"string\", \"example\": \"1\"}, \"meal\": {\"type\": \"object\", \"description\": \"源码类型：Meal\", \"x-source-type\": \"Meal\"}, \"mealCode\": {\"type\": \"number\", \"example\": 10}, \"mealKey\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"people\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"imageUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}, \"comment\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"people\", \"imageUrl\"]}, \"example\": {\"schoolId\": \"1\", \"meal\": {}, \"mealCode\": 10, \"mealKey\": \"APIFOX_{{testBatch}}\", \"people\": [\"APIFOX_{{testBatch}}\"], \"imageUrl\": \"https://example.test/apifox-autotest.jpg\", \"comment\": \"APIFOX_{{testBatch}}\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dine.controller.ts:101；DineController.camera\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dine.controller.ts\", \"line\": 101, \"controller\": \"DineController\", \"handler\": \"camera\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/dine/qr/create\": {\"post\": {\"operationId\": \"DineController_createQr\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Dine\"], \"x-apifox-folder\": \"学校端/Dine\", \"x-original-tags\": [\"Dine\"], \"summary\": \"DineController.createQr\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"string\", \"example\": \"1\"}, \"meal\": {\"type\": \"object\", \"description\": \"源码类型：Meal\", \"x-source-type\": \"Meal\"}, \"mealCode\": {\"type\": \"number\", \"example\": 10}, \"mealKey\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}}, \"example\": {\"schoolId\": \"1\", \"meal\": {}, \"mealCode\": 10, \"mealKey\": \"APIFOX_{{testBatch}}\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dine.controller.ts:129；DineController.createQr\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1020；dineQrCreate(mealOrCode: string | number, schoolId: string)；body=typeof mealOrCode === 'number' ? { mealCode: mealOrCode, schoolId } : { mealKey: mealOrCode, schoolId }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dine.controller.ts\", \"line\": 129, \"controller\": \"DineController\", \"handler\": \"createQr\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1020, \"function\": \"dineQrCreate(mealOrCode: string | number, schoolId: string)\", \"bodyExpression\": \"typeof mealOrCode === 'number' ? { mealCode: mealOrCode, schoolId } : { mealKey: mealOrCode, schoolId }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/dine/qr/submit\": {\"post\": {\"operationId\": \"DineController_submitQr\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Dine\"], \"x-apifox-folder\": \"学校端/Dine\", \"x-original-tags\": [\"Dine\"], \"summary\": \"DineController.submitQr\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"token\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"people\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"imageUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}, \"comment\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"token\", \"people\"]}, \"example\": {\"token\": \"APIFOX_{{testBatch}}\", \"people\": [\"APIFOX_{{testBatch}}\"], \"imageUrl\": \"https://example.test/apifox-autotest.jpg\", \"comment\": \"APIFOX_{{testBatch}}\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dine.controller.ts:136；DineController.submitQr\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dine.controller.ts\", \"line\": 136, \"controller\": \"DineController\", \"handler\": \"submitQr\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/disinfection/device/callback\": {\"post\": {\"operationId\": \"DisinfectionController_device\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Disinfection\"], \"x-apifox-folder\": \"学校端/Disinfection\", \"x-original-tags\": [\"Disinfection\"], \"summary\": \"DisinfectionController.device\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"string\", \"example\": \"1\"}, \"canteenId\": {\"type\": \"number\", \"example\": 1}, \"method\": {\"type\": \"object\", \"description\": \"源码类型：DisinfectionMethod\", \"x-source-type\": \"DisinfectionMethod\"}, \"duration\": {\"type\": \"number\", \"example\": 10}, \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"temperature\": {\"type\": \"number\", \"example\": 10}, \"responsible\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"imageUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}}, \"required\": [\"method\", \"duration\", \"items\"]}, \"example\": {\"schoolId\": \"1\", \"canteenId\": 1, \"method\": {}, \"duration\": 10, \"items\": \"APIFOX_{{testBatch}}\", \"temperature\": 10, \"responsible\": \"APIFOX_{{testBatch}}\", \"imageUrl\": \"https://example.test/apifox-autotest.jpg\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/disinfection.controller.ts:62；DisinfectionController.device\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/disinfection.controller.ts\", \"line\": 62, \"controller\": \"DisinfectionController\", \"handler\": \"device\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/disinfection/records/import\": {\"post\": {\"operationId\": \"DisinfectionController_import\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Disinfection\"], \"x-apifox-folder\": \"学校端/Disinfection\", \"x-original-tags\": [\"Disinfection\"], \"summary\": \"DisinfectionController.import\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/disinfection.controller.ts:97；DisinfectionController.import\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:925；disinfectionImport(payload: { items: any[] } | string)；body=isCsv ? (payload as string) : payload\\n\\n### 自动化约束\\n- 风险：FILE_OR_BULK_WRITE\\n- 执行策略：ISOLATED_STORAGE_AND_DB\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/disinfection.controller.ts\", \"line\": 97, \"controller\": \"DisinfectionController\", \"handler\": \"import\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 925, \"function\": \"disinfectionImport(payload: { items: any[] } | string)\", \"bodyExpression\": \"isCsv ? (payload as string) : payload\"}], \"x-test-risk\": \"FILE_OR_BULK_WRITE\", \"x-test-execution-policy\": \"ISOLATED_STORAGE_AND_DB\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/emergency/alerts/raise\": {\"post\": {\"operationId\": \"EmergencyController_raise\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.raise\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"type\": {\"type\": \"object\", \"description\": \"源码类型：AlertType\", \"x-source-type\": \"AlertType\"}, \"title\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"level\": {}}, \"required\": [\"type\", \"title\"]}, \"example\": {\"type\": {}, \"title\": \"APIFOX_{{testBatch}}_测试数据\", \"level\": \"APIFOX_{{testBatch}}\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:18；EmergencyController.raise\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 18, \"controller\": \"EmergencyController\", \"handler\": \"raise\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/events/accept\": {\"post\": {\"operationId\": \"EmergencyController_accept\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.accept\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"string\", \"example\": \"1\"}}, \"required\": [\"id\"]}, \"example\": {\"id\": \"1\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:21；EmergencyController.accept\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 21, \"controller\": \"EmergencyController\", \"handler\": \"accept\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/events/clear\": {\"post\": {\"operationId\": \"EmergencyController_clear\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.clear\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"string\", \"example\": \"1\"}}, \"required\": [\"id\"]}, \"example\": {\"id\": \"1\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:24；EmergencyController.clear\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 24, \"controller\": \"EmergencyController\", \"handler\": \"clear\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/events/start-plan\": {\"post\": {\"operationId\": \"EmergencyController_startPlan\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.startPlan\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"string\", \"example\": \"1\"}, \"planId\": {\"type\": \"string\", \"example\": \"1\"}}, \"required\": [\"id\", \"planId\"]}, \"example\": {\"id\": \"1\", \"planId\": \"1\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:27；EmergencyController.startPlan\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 27, \"controller\": \"EmergencyController\", \"handler\": \"startPlan\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/meetings/invite\": {\"post\": {\"operationId\": \"EmergencyController_invite\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.invite\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"string\", \"example\": \"1\"}, \"who\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"id\", \"who\"]}, \"example\": {\"id\": \"1\", \"who\": \"APIFOX_{{testBatch}}\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:63；EmergencyController.invite\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 63, \"controller\": \"EmergencyController\", \"handler\": \"invite\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/emergency/notify\": {\"post\": {\"operationId\": \"EmergencyController_notify\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Emergency\"], \"x-apifox-folder\": \"学校端/Emergency\", \"summary\": \"EmergencyController.notify\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"scene\": {\"type\": \"object\", \"description\": \"源码类型：AlertType\", \"x-source-type\": \"AlertType\"}, \"to\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"via\": {\"type\": \"string\", \"enum\": [\"sms\", \"voice\", \"app\"], \"example\": \"sms\"}, \"content\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}, \"required\": [\"scene\", \"to\", \"via\", \"content\"]}, \"example\": {\"scene\": {}, \"to\": \"APIFOX_{{testBatch}}\", \"via\": \"sms\", \"content\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/emergency.controller.ts:86；EmergencyController.notify\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/emergency.controller.ts\", \"line\": 86, \"controller\": \"EmergencyController\", \"handler\": \"notify\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/foods/import\": {\"post\": {\"operationId\": \"SchoolFoodsController_import\", \"summary\": \"批量导入（CSV/JSON）\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"items\": {\"type\": \"array\", \"items\": {\"type\": \"object\"}}, \"csv\": {\"type\": \"string\"}, \"overwrite\": {\"type\": \"boolean\"}, \"by\": {\"type\": \"string\"}}}, \"example\": {\"items\": [{}], \"csv\": \"APIFOX_{{testBatch}}\", \"overwrite\": true, \"by\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/SchoolFoods\"], \"x-apifox-folder\": \"学校端/SchoolFoods\", \"x-original-tags\": [\"SchoolFoods\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/school-foods.controller.ts:198；SchoolFoodsController.import\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:689；schoolFoodsImport(body: { items?: any[]; csv?: string; overwrite?: boolean; by?: string })；body=body\\n\\n### 自动化约束\\n- 风险：FILE_OR_BULK_WRITE\\n- 执行策略：ISOLATED_STORAGE_AND_DB\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/school-foods.controller.ts\", \"line\": 198, \"controller\": \"SchoolFoodsController\", \"handler\": \"import\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 689, \"function\": \"schoolFoodsImport(body: { items?: any[]; csv?: string; overwrite?: boolean; by?: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"FILE_OR_BULK_WRITE\", \"x-test-execution-policy\": \"ISOLATED_STORAGE_AND_DB\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/inbound/scale\": {\"post\": {\"operationId\": \"InventoryController_scaleInbound\", \"summary\": \"Scale inbound (+/- quantity)\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"number\", \"example\": 1}, \"productId\": {\"type\": \"string\", \"example\": \"1\"}, \"weight\": {\"type\": \"number\", \"example\": 10}, \"supplierId\": {\"type\": \"string\", \"example\": \"1\"}, \"warehouseId\": {\"type\": \"string\", \"example\": \"1\"}, \"imageUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}}, \"required\": [\"productId\", \"weight\"]}, \"example\": {\"schoolId\": 1, \"productId\": \"1\", \"weight\": 10, \"supplierId\": \"1\", \"warehouseId\": \"1\", \"imageUrl\": \"https://example.test/apifox-autotest.jpg\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:421；InventoryController.scaleInbound\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 421, \"controller\": \"InventoryController\", \"handler\": \"scaleInbound\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/inventory/outbound/clear\": {\"post\": {\"operationId\": \"InventoryController_clearOutbound\", \"summary\": \"Clear outbound batch\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"number\", \"example\": 1}}}, \"example\": {\"schoolId\": 1}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:538；InventoryController.clearOutbound\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 538, \"controller\": \"InventoryController\", \"handler\": \"clearOutbound\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/inventory/outbound/scale\": {\"post\": {\"operationId\": \"InventoryController_scaleOutbound\", \"summary\": \"Scale outbound (+/- quantity)\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"number\", \"example\": 1}, \"productId\": {\"type\": \"string\", \"example\": \"1\"}, \"weight\": {\"type\": \"number\", \"example\": 10}, \"purpose\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"by\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"receiver\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"canteenId\": {\"type\": \"number\", \"example\": 1}, \"warehouseId\": {\"type\": \"string\", \"example\": \"1\"}}, \"required\": [\"productId\", \"weight\"]}, \"example\": {\"schoolId\": 1, \"productId\": \"1\", \"weight\": 10, \"purpose\": \"APIFOX_{{testBatch}}\", \"by\": \"APIFOX_{{testBatch}}\", \"receiver\": \"APIFOX_{{testBatch}}\", \"canteenId\": 1, \"warehouseId\": \"1\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:518；InventoryController.scaleOutbound\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 518, \"controller\": \"InventoryController\", \"handler\": \"scaleOutbound\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/inventory/products/delete\": {\"post\": {\"operationId\": \"InventoryController_deleteProductV2\", \"summary\": \"Delete product\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"number\", \"example\": 1}}, \"required\": [\"id\"]}, \"example\": {\"id\": 1}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:62；InventoryController.deleteProductV2\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1030；invProductDelete(id: number)；body={ id }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 62, \"controller\": \"InventoryController\", \"handler\": \"deleteProductV2\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1030, \"function\": \"invProductDelete(id: number)\", \"bodyExpression\": \"{ id }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/products/import/cloud\": {\"post\": {\"operationId\": \"InventoryController_importCloudV2\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"summary\": \"InventoryController.importCloudV2\", \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:53；InventoryController.importCloudV2\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：FILE_OR_BULK_WRITE\\n- 执行策略：ISOLATED_STORAGE_AND_DB\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 53, \"controller\": \"InventoryController\", \"handler\": \"importCloudV2\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"FILE_OR_BULK_WRITE\", \"x-test-execution-policy\": \"ISOLATED_STORAGE_AND_DB\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/inventory/products/import/template\": {\"post\": {\"operationId\": \"InventoryController_importTemplateV2\", \"summary\": \"Import products from template\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"oneOf\": [{\"type\": \"number\", \"example\": 1}, {\"type\": \"string\", \"example\": \"1\"}]}, \"items\": {\"type\": \"array\", \"items\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"unit\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"category\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"spec\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"lastPrice\": {\"type\": \"number\", \"example\": 10}}, \"required\": [\"name\", \"unit\"]}}}, \"required\": [\"items\"]}, \"example\": {\"schoolId\": 1, \"items\": [{\"name\": \"APIFOX_{{testBatch}}_测试数据\", \"unit\": \"APIFOX_{{testBatch}}\", \"category\": \"APIFOX_{{testBatch}}\", \"spec\": \"APIFOX_{{testBatch}}\", \"lastPrice\": 10}]}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:56；InventoryController.importTemplateV2\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1029；invImportTemplate(schoolId: string | number | undefined, items: Array<{ name: string; unit: string; category?: string; spec?: string; lastPrice?: number }>)；body={ schoolId, items }\\n\\n### 自动化约束\\n- 风险：FILE_OR_BULK_WRITE\\n- 执行策略：ISOLATED_STORAGE_AND_DB\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 56, \"controller\": \"InventoryController\", \"handler\": \"importTemplateV2\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1029, \"function\": \"invImportTemplate(schoolId: string | number | undefined, items: Array<{ name: string; unit: string; category?: string; spec?: string; lastPrice?: number }>)\", \"bodyExpression\": \"{ schoolId, items }\"}], \"x-test-risk\": \"FILE_OR_BULK_WRITE\", \"x-test-execution-policy\": \"ISOLATED_STORAGE_AND_DB\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/stock/stocktake\": {\"post\": {\"operationId\": \"InventoryController_stocktake\", \"summary\": \"Stocktake one product\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"number\", \"example\": 1}, \"productId\": {\"type\": \"string\", \"example\": \"1\"}, \"qty\": {\"type\": \"number\", \"example\": 10}}, \"required\": [\"productId\", \"qty\"]}, \"example\": {\"schoolId\": 1, \"productId\": \"1\", \"qty\": 10}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:569；InventoryController.stocktake\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1181；invStocktake(body: { productId: string; qty: number; schoolId?: string })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 569, \"controller\": \"InventoryController\", \"handler\": \"stocktake\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1181, \"function\": \"invStocktake(body: { productId: string; qty: number; schoolId?: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/stock/stocktake-batch\": {\"post\": {\"operationId\": \"InventoryController_stocktakeBatch\", \"summary\": \"Batch stocktake multiple products\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"number\", \"example\": 1}, \"inboundId\": {\"type\": \"number\", \"example\": 1}, \"actualQty\": {\"type\": \"number\", \"example\": 10}, \"operator\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"inboundId\", \"actualQty\"]}, \"example\": {\"schoolId\": 1, \"inboundId\": 1, \"actualQty\": 10, \"operator\": \"APIFOX_{{testBatch}}\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:640；InventoryController.stocktakeBatch\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1180；invStocktakeBatch(body: { schoolId?: string | number; inboundId: number | string; actualQty: number; operator?: string })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 640, \"controller\": \"InventoryController\", \"handler\": \"stocktakeBatch\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1180, \"function\": \"invStocktakeBatch(body: { schoolId?: string | number; inboundId: number | string; actualQty: number; operator?: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/suppliers/{id}/certificates\": {\"post\": {\"operationId\": \"InventoryController_addCert\", \"summary\": \"Add supplier certificate\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"type\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"number\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}, \"authority\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"expireAt\": {\"type\": \"string\", \"example\": \"2026-09-24 10:00:00\"}, \"imageUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}}, \"required\": [\"type\"]}, \"example\": {\"type\": \"APIFOX_{{testBatch}}\", \"number\": \"APIFOX_{{testBatch}}_001\", \"authority\": \"APIFOX_{{testBatch}}\", \"expireAt\": \"2026-09-24 10:00:00\", \"imageUrl\": \"https://example.test/apifox-autotest.jpg\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:141；InventoryController.addCert\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1304；invSupplierAddCert(id: string | number, body: { type: string; number?: string; authority?: string; expireAt?: string; imageUrl?: string })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 141, \"controller\": \"InventoryController\", \"handler\": \"addCert\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1304, \"function\": \"invSupplierAddCert(id: string | number, body: { type: string; number?: string; authority?: string; expireAt?: string; imageUrl?: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/suppliers/{id}/certificates/import\": {\"post\": {\"operationId\": \"InventoryController_importSupplierCerts\", \"summary\": \"Import supplier certificates\", \"parameters\": [{\"name\": \"id\", \"required\": true, \"in\": \"path\", \"schema\": {\"type\": \"string\", \"example\": \"1\"}}], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:162；InventoryController.importSupplierCerts\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：FILE_OR_BULK_WRITE\\n- 执行策略：ISOLATED_STORAGE_AND_DB\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 162, \"controller\": \"InventoryController\", \"handler\": \"importSupplierCerts\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"FILE_OR_BULK_WRITE\", \"x-test-execution-policy\": \"ISOLATED_STORAGE_AND_DB\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/inventory/suppliers/delete\": {\"post\": {\"operationId\": \"InventoryController_deleteSupplier\", \"summary\": \"Delete supplier\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"string\", \"example\": \"1\"}}, \"required\": [\"id\"]}, \"example\": {\"id\": \"1\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:123；InventoryController.deleteSupplier\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1277；invSupplierDelete(id: string)；body={ id }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 123, \"controller\": \"InventoryController\", \"handler\": \"deleteSupplier\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1277, \"function\": \"invSupplierDelete(id: string)\", \"bodyExpression\": \"{ id }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/suppliers/enable/batch\": {\"post\": {\"operationId\": \"InventoryController_batchEnable\", \"summary\": \"Batch enable/disable suppliers\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"ids\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"enabled\": {\"type\": \"boolean\", \"example\": true}}, \"required\": [\"ids\", \"enabled\"]}, \"example\": {\"ids\": [\"APIFOX_{{testBatch}}\"], \"enabled\": true}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:132；InventoryController.batchEnable\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1279；invSuppliersBatchEnable(ids: string[], enabled: boolean)；body={ ids, enabled }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 132, \"controller\": \"InventoryController\", \"handler\": \"batchEnable\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1279, \"function\": \"invSuppliersBatchEnable(ids: string[], enabled: boolean)\", \"bodyExpression\": \"{ ids, enabled }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/suppliers/import\": {\"post\": {\"operationId\": \"InventoryController_importSuppliers\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"summary\": \"InventoryController.importSuppliers\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:210；InventoryController.importSuppliers\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1293；invSuppliersImport(payload: { items: any[] } | string)；body=isCsv ? (payload as string) : payload\\n\\n### 自动化约束\\n- 风险：FILE_OR_BULK_WRITE\\n- 执行策略：ISOLATED_STORAGE_AND_DB\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 210, \"controller\": \"InventoryController\", \"handler\": \"importSuppliers\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1293, \"function\": \"invSuppliersImport(payload: { items: any[] } | string)\", \"bodyExpression\": \"isCsv ? (payload as string) : payload\"}], \"x-test-risk\": \"FILE_OR_BULK_WRITE\", \"x-test-execution-policy\": \"ISOLATED_STORAGE_AND_DB\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/inventory/warehouses/delete\": {\"post\": {\"operationId\": \"InventoryController_deleteWarehouse\", \"summary\": \"Delete warehouse\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Inventory\"], \"x-apifox-folder\": \"学校端/Inventory\", \"x-original-tags\": [\"Inventory\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"string\", \"example\": \"1\"}}, \"required\": [\"id\"]}, \"example\": {\"id\": \"1\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/inventory/inventory.controller.ts:272；InventoryController.deleteWarehouse\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1076；invWarehouseDelete(id: string)；body={ id }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/inventory/inventory.controller.ts\", \"line\": 272, \"controller\": \"InventoryController\", \"handler\": \"deleteWarehouse\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1076, \"function\": \"invWarehouseDelete(id: string)\", \"bodyExpression\": \"{ id }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/meal-plans/copy-week\": {\"post\": {\"operationId\": \"MealPlansController_copyWeek\", \"summary\": \"复制上一周配餐到本周\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"schoolId\", \"from\", \"to\"], \"properties\": {\"schoolId\": {\"type\": \"integer\"}, \"canteenId\": {\"type\": \"integer\"}, \"from\": {\"type\": \"string\", \"example\": \"2025-01-06\"}, \"to\": {\"type\": \"string\", \"example\": \"2025-01-13\"}, \"overwrite\": {\"type\": \"boolean\"}}}, \"example\": {\"schoolId\": 1, \"canteenId\": 1, \"from\": \"2025-01-06\", \"to\": \"2025-01-13\", \"overwrite\": true}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/MealPlans\"], \"x-apifox-folder\": \"学校端/MealPlans\", \"x-original-tags\": [\"MealPlans\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/meal-plans.controller.ts:282；MealPlansController.copyWeek\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:683；mealPlansCopyWeek(body: { schoolId: number; canteenId?: number; from: string; to: string; overwrite?: boolean })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/meal-plans.controller.ts\", \"line\": 282, \"controller\": \"MealPlansController\", \"handler\": \"copyWeek\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 683, \"function\": \"mealPlansCopyWeek(body: { schoolId: number; canteenId?: number; from: string; to: string; overwrite?: boolean })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/meal-plans/import\": {\"post\": {\"operationId\": \"MealPlansController_import\", \"summary\": \"批量导入（CSV/JSON）\", \"parameters\": [], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"items\": {\"type\": \"array\", \"items\": {\"type\": \"object\"}}, \"overwrite\": {\"type\": \"boolean\"}}}, \"example\": {\"items\": [{}], \"overwrite\": true}}}}, \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/MealPlans\"], \"x-apifox-folder\": \"学校端/MealPlans\", \"x-original-tags\": [\"MealPlans\"], \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/meal-plans.controller.ts:192；MealPlansController.import\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:682；mealPlansImport(body: { items: any[]; overwrite?: boolean })；body=body\\n\\n### 自动化约束\\n- 风险：FILE_OR_BULK_WRITE\\n- 执行策略：ISOLATED_STORAGE_AND_DB\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/meal-plans.controller.ts\", \"line\": 192, \"controller\": \"MealPlansController\", \"handler\": \"import\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 682, \"function\": \"mealPlansImport(body: { items: any[]; overwrite?: boolean })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"FILE_OR_BULK_WRITE\", \"x-test-execution-policy\": \"ISOLATED_STORAGE_AND_DB\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/morning-checks/device/callback\": {\"post\": {\"operationId\": \"MorningCheckController_deviceCallback\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Morning Checks\"], \"x-apifox-folder\": \"学校端/Morning Checks\", \"x-original-tags\": [\"Morning Checks\"], \"summary\": \"MorningCheckController.deviceCallback\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"number\", \"example\": 1}, \"staff\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"temp\": {\"type\": \"number\", \"example\": 10}}, \"required\": [\"staff\", \"temp\"]}, \"example\": {\"schoolId\": 1, \"staff\": \"APIFOX_{{testBatch}}\", \"temp\": 10}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/morning-check.controller.ts:261；MorningCheckController.deviceCallback\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/morning-check.controller.ts\", \"line\": 261, \"controller\": \"MorningCheckController\", \"handler\": \"deviceCallback\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/personnel/delete\": {\"post\": {\"operationId\": \"PersonnelController_remove\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Personnel\"], \"x-apifox-folder\": \"学校端/Personnel\", \"x-original-tags\": [\"Personnel\"], \"summary\": \"PersonnelController.remove\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"number\", \"example\": 1}}}, \"example\": {\"id\": 1}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/personnel.controller.ts:285；PersonnelController.remove\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1274；personnelDelete(id: number)；body={ id }\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/personnel.controller.ts\", \"line\": 285, \"controller\": \"PersonnelController\", \"handler\": \"remove\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1274, \"function\": \"personnelDelete(id: number)\", \"bodyExpression\": \"{ id }\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/pesticide/device/callback\": {\"post\": {\"operationId\": \"PesticideController_device\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Pesticide\"], \"x-apifox-folder\": \"学校端/Pesticide\", \"x-original-tags\": [\"Pesticide\"], \"summary\": \"PesticideController.device\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"number\", \"example\": 1}, \"sample\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"device\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"result\": {\"type\": \"object\", \"description\": \"源码类型：PesticideResult\", \"x-source-type\": \"PesticideResult\"}, \"imageUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}, \"remark\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}, \"required\": [\"sample\", \"device\", \"result\"]}, \"example\": {\"schoolId\": 1, \"sample\": \"APIFOX_{{testBatch}}\", \"device\": \"APIFOX_{{testBatch}}\", \"result\": {}, \"imageUrl\": \"https://example.test/apifox-autotest.jpg\", \"remark\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/pesticide.controller.ts:120；PesticideController.device\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:985；pesticideDeviceCallback(body: { sample: string; device: string; result: '合格' | '不合格'; remark?: string; schoolId?: number; })；body=body\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/pesticide.controller.ts\", \"line\": 120, \"controller\": \"PesticideController\", \"handler\": \"device\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 985, \"function\": \"pesticideDeviceCallback(body: { sample: string; device: string; result: '合格' | '不合格'; remark?: string; schoolId?: number; })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/risk/catalog/delete\": {\"post\": {\"operationId\": \"RiskController_deleteCatalog\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Risk\"], \"x-apifox-folder\": \"学校端/Risk\", \"summary\": \"RiskController.deleteCatalog\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"string\", \"example\": \"1\"}}, \"required\": [\"id\"]}, \"example\": {\"id\": \"1\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/risk.controller.ts:38；RiskController.deleteCatalog\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1528；riskCatalogDelete(id: string)；body=JSON.stringify({ id })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/risk.controller.ts\", \"line\": 38, \"controller\": \"RiskController\", \"handler\": \"deleteCatalog\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1528, \"function\": \"riskCatalogDelete(id: string)\", \"bodyExpression\": \"JSON.stringify({ id })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/risk/tasks/submit\": {\"post\": {\"operationId\": \"RiskController_submitTask\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Risk\"], \"x-apifox-folder\": \"学校端/Risk\", \"summary\": \"RiskController.submitTask\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"string\", \"example\": \"1\"}, \"result\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"images\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}}, \"required\": [\"id\", \"result\"]}, \"example\": {\"id\": \"1\", \"result\": \"APIFOX_{{testBatch}}\", \"images\": [\"APIFOX_{{testBatch}}\"]}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/risk.controller.ts:167；RiskController.submitTask\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1624；riskTaskSubmit(id: string, result: string, images: string[])；body=JSON.stringify({ id, result, images })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/risk.controller.ts\", \"line\": 167, \"controller\": \"RiskController\", \"handler\": \"submitTask\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1624, \"function\": \"riskTaskSubmit(id: string, result: string, images: string[])\", \"bodyExpression\": \"JSON.stringify({ id, result, images })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/sampling/device/callback\": {\"post\": {\"operationId\": \"SamplingController_deviceCallback\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/Sampling\"], \"x-apifox-folder\": \"学校端/Sampling\", \"x-original-tags\": [\"Sampling\"], \"summary\": \"SamplingController.deviceCallback\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"number\", \"example\": 1}, \"sample\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"weight\": {\"type\": \"number\", \"example\": 10}, \"imageUrl\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}, \"duration\": {\"type\": \"number\", \"example\": 10}, \"by\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"cabinet\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}, \"required\": [\"sample\", \"weight\", \"duration\", \"by\"]}, \"example\": {\"schoolId\": 1, \"sample\": \"APIFOX_{{testBatch}}\", \"weight\": 10, \"imageUrl\": \"https://example.test/apifox-autotest.jpg\", \"duration\": 10, \"by\": \"APIFOX_{{testBatch}}\", \"cabinet\": \"APIFOX_{{testBatch}}\"}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sampling.controller.ts:81；SamplingController.deviceCallback\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sampling.controller.ts\", \"line\": 81, \"controller\": \"SamplingController\", \"handler\": \"deviceCallback\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/school/sampling/operators/remove\": {\"post\": {\"tags\": [\"学校端/SamplingOperators\"], \"x-apifox-folder\": \"学校端/SamplingOperators\", \"summary\": \"批量移除留样人员（POST 兼容，删除 sammei_users）\", \"operationId\": \"SamplingOperatorsController_removeByPost\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"ids\": {\"type\": \"array\", \"items\": {\"oneOf\": [{\"type\": \"number\", \"example\": 10}, {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}]}}, \"schoolId\": {\"type\": \"number\", \"example\": 1}, \"serialNumber\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_001\"}}}, \"example\": {\"ids\": [10], \"schoolId\": 1, \"serialNumber\": \"APIFOX_{{testBatch}}_001\"}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sampling-operators.controller.ts:416；SamplingOperatorsController.removeByPost\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:731；samplingOpsRemove(body: { ids: number[] })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sampling-operators.controller.ts\", \"line\": 416, \"controller\": \"SamplingOperatorsController\", \"handler\": \"removeByPost\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 731, \"function\": \"samplingOpsRemove(body: { ids: number[] })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/school/sampling/operators/sync\": {\"post\": {\"operationId\": \"SamplingOperatorsController_sync\", \"summary\": \"向设备同步留样人员（OperateUserList）\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/SamplingOperators\"], \"x-apifox-folder\": \"学校端/SamplingOperators\", \"x-original-tags\": [\"SamplingOperators\"], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"schoolId\": {\"type\": \"number\", \"example\": 1}}}, \"example\": {\"schoolId\": 1}}}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sampling-operators.controller.ts:443；SamplingOperatorsController.sync\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:732；samplingOpsSync(body: { schoolId?: number })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sampling-operators.controller.ts\", \"line\": 443, \"controller\": \"SamplingOperatorsController\", \"handler\": \"sync\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 732, \"function\": \"samplingOpsSync(body: { schoolId?: number })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/sampling/operators/upsert\": {\"post\": {\"tags\": [\"学校端/SamplingOperators\"], \"x-apifox-folder\": \"学校端/SamplingOperators\", \"summary\": \"新增/更新单个留样人员（含人脸与时间等扩展字段）\", \"operationId\": \"SamplingOperatorsController_upsert\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {}, \"example\": \"APIFOX_{{testBatch}}\"}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/sampling-operators.controller.ts:308；SamplingOperatorsController.upsert\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:733；samplingOpsUpsert(body: { id: string|number; userName?: string; faceOssUrl?: string; faceFilePath?: string; updTime?: string; pushTime?: string; userNo?: string; jobTitle?: string; enabled?: boolean; canteenId?: number; serialNumber?: string; password?: string })；body=body\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/sampling-operators.controller.ts\", \"line\": 308, \"controller\": \"SamplingOperatorsController\", \"handler\": \"upsert\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 733, \"function\": \"samplingOpsUpsert(body: { id: string|number; userName?: string; faceOssUrl?: string; faceFilePath?: string; updTime?: string; pushTime?: string; userNo?: string; jobTitle?: string; enabled?: boolean; canteenId?: number; serialNumber?: string; password?: string })\", \"bodyExpression\": \"body\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_FRONTEND\"}}, \"/school/system/announcements/attach\": {\"post\": {\"operationId\": \"SystemController_attach\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.attach\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"string\", \"example\": \"1\"}, \"name\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}_测试数据\"}, \"url\": {\"type\": \"string\", \"example\": \"https://example.test/apifox-autotest.jpg\"}, \"schoolId\": {\"type\": \"number\", \"example\": 1}}, \"required\": [\"id\", \"name\", \"url\"]}, \"example\": {\"id\": \"1\", \"name\": \"APIFOX_{{testBatch}}_测试数据\", \"url\": \"https://example.test/apifox-autotest.jpg\", \"schoolId\": 1}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:49；SystemController.attach\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1826；sysAnnouncementAttach(id: string, att: { name: string; url: string }, traceId: string)；body=JSON.stringify({ id, ...att })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 49, \"controller\": \"SystemController\", \"handler\": \"attach\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1826, \"function\": \"sysAnnouncementAttach(id: string, att: { name: string; url: string }, traceId: string)\", \"bodyExpression\": \"JSON.stringify({ id, ...att })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/system/linkage/apply\": {\"post\": {\"operationId\": \"SystemController_applyLinkage\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.applyLinkage\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"org\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"contact\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}, \"remark\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}, \"required\": [\"org\"]}, \"example\": {\"org\": \"APIFOX_{{testBatch}}\", \"contact\": \"APIFOX_{{testBatch}}\", \"remark\": \"APIFOX_{{testBatch}} 自动化测试数据\"}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:72；SystemController.applyLinkage\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1689；sysLinkageApply(body: { org: string; contact?: string; remark?: string })；body=JSON.stringify(body)\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 72, \"controller\": \"SystemController\", \"handler\": \"applyLinkage\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1689, \"function\": \"sysLinkageApply(body: { org: string; contact?: string; remark?: string })\", \"bodyExpression\": \"JSON.stringify(body)\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/system/roles/delete\": {\"post\": {\"operationId\": \"SystemController_deleteRole\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.deleteRole\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"number\", \"example\": 1}}, \"required\": [\"id\"]}, \"example\": {\"id\": 1}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:196；SystemController.deleteRole\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1787；sysRoleDelete(id: number)；body=JSON.stringify({ id })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 196, \"controller\": \"SystemController\", \"handler\": \"deleteRole\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1787, \"function\": \"sysRoleDelete(id: number)\", \"bodyExpression\": \"JSON.stringify({ id })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/system/users/delete\": {\"post\": {\"operationId\": \"SystemController_removeUser\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.removeUser\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"number\", \"example\": 1}}, \"required\": [\"id\"]}, \"example\": {\"id\": 1}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:249；SystemController.removeUser\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1731；sysUserDelete(id: number | string, traceId: string)；body=JSON.stringify({ id })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 249, \"controller\": \"SystemController\", \"handler\": \"removeUser\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1731, \"function\": \"sysUserDelete(id: number | string, traceId: string)\", \"bodyExpression\": \"JSON.stringify({ id })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/system/users/enabled\": {\"post\": {\"operationId\": \"SystemController_setUserEnabled\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.setUserEnabled\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"number\", \"example\": 1}, \"enabled\": {\"type\": \"boolean\", \"example\": true}}, \"required\": [\"id\", \"enabled\"]}, \"example\": {\"id\": 1, \"enabled\": true}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:240；SystemController.setUserEnabled\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1740；sysUserSetEnabled(id: number | string, enabled: boolean, traceId: string)；body=JSON.stringify({ id, enabled })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 240, \"controller\": \"SystemController\", \"handler\": \"setUserEnabled\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1740, \"function\": \"sysUserSetEnabled(id: number | string, enabled: boolean, traceId: string)\", \"bodyExpression\": \"JSON.stringify({ id, enabled })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/school/system/users/roles\": {\"post\": {\"operationId\": \"SystemController_setUserRoles\", \"parameters\": [], \"responses\": {\"201\": {\"description\": \"\"}}, \"tags\": [\"学校端/School System\"], \"x-apifox-folder\": \"学校端/School System\", \"x-original-tags\": [\"School System\"], \"summary\": \"SystemController.setUserRoles\", \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"id\": {\"type\": \"string\", \"example\": \"1\"}, \"roles\": {\"type\": \"array\", \"items\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}}, \"required\": [\"id\", \"roles\"]}, \"example\": {\"id\": \"1\", \"roles\": [\"APIFOX_{{testBatch}}\"]}}}}, \"security\": [{\"bearerAuth\": []}], \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/system.controller.ts:209；SystemController.setUserRoles\\n\\n### 前端调用证据\\n- web-school: apps/web-school/src/services/api.ts:1796；sysUserSetRoles(id: string, roles: string[], traceId: string)；body=JSON.stringify({ id, roles })\\n\\n### 自动化约束\\n- 风险：DATABASE_WRITE\\n- 执行策略：ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/system.controller.ts\", \"line\": 209, \"controller\": \"SystemController\", \"handler\": \"setUserRoles\"}], \"x-frontend-evidence\": [{\"app\": \"web-school\", \"file\": \"apps/web-school/src/services/api.ts\", \"line\": 1796, \"function\": \"sysUserSetRoles(id: string, roles: string[], traceId: string)\", \"bodyExpression\": \"JSON.stringify({ id, roles })\"}], \"x-test-risk\": \"DATABASE_WRITE\", \"x-test-execution-policy\": \"ISOLATED_DB_WITH_VERIFY_AND_CLEANUP\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI_FRONTEND\"}}, \"/uploadInspectionRecord\": {\"post\": {\"tags\": [\"第三方设备数据接入/Dewo-Liuyangcheng\"], \"x-apifox-folder\": \"第三方设备数据接入/Dewo-Liuyangcheng\", \"summary\": \"得沃晨检机上传晨检记录\", \"operationId\": \"DewoLiuyangchengController_uploadInspectionRecord\", \"requestBody\": {\"required\": true, \"content\": {\"multipart/form-data\": {\"schema\": {\"type\": \"object\", \"properties\": {\"file\": {\"type\": \"string\", \"format\": \"binary\"}}, \"required\": [\"file\"]}}}}, \"responses\": {\"200\": {\"description\": \"业务成功响应；实际 envelope 以接口实现为准\", \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"additionalProperties\": true, \"example\": {\"ok\": true, \"data\": {}}}}}}, \"400\": {\"description\": \"请求参数错误\"}, \"401\": {\"description\": \"未登录或令牌失效\"}, \"403\": {\"description\": \"无权限\"}, \"500\": {\"description\": \"服务端错误\"}}, \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts:527；DewoLiuyangchengController.uploadInspectionRecord\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/dewo-liuyangcheng.controller.ts\", \"line\": 527, \"controller\": \"DewoLiuyangchengController\", \"handler\": \"uploadInspectionRecord\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_ONLY\"}}, \"/wosapi/YGCJRobotOpenApi/GetDepInfo\": {\"post\": {\"operationId\": \"WosController_getDepInfo\", \"parameters\": [{\"name\": \"yg_sn\", \"required\": true, \"in\": \"header\", \"description\": \"设备唯一序列号\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"获取单位信息（食堂信息）（成功）\"}}, \"tags\": [\"第三方设备数据接入/WOS Integration\"], \"x-apifox-folder\": \"第三方设备数据接入/WOS Integration\", \"x-original-tags\": [\"WOS Integration\"], \"summary\": \"WosController.getDepInfo\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/wos.controller.ts:132；WosController.getDepInfo\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/wos.controller.ts\", \"line\": 132, \"controller\": \"WosController\", \"handler\": \"getDepInfo\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/wosapi/YGCJRobotOpenApi/GetPlatInfo\": {\"post\": {\"operationId\": \"WosController_getPlatInfo\", \"parameters\": [{\"name\": \"yg_sn\", \"required\": true, \"in\": \"header\", \"description\": \"设备唯一序列号\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"responses\": {\"200\": {\"description\": \"获取平台配置信息（成功）\"}}, \"tags\": [\"第三方设备数据接入/WOS Integration\"], \"x-apifox-folder\": \"第三方设备数据接入/WOS Integration\", \"x-original-tags\": [\"WOS Integration\"], \"summary\": \"WosController.getPlatInfo\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/wos.controller.ts:212；WosController.getPlatInfo\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/wos.controller.ts\", \"line\": 212, \"controller\": \"WosController\", \"handler\": \"getPlatInfo\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/wosapi/YGCJRobotOpenApi/PageStaff\": {\"post\": {\"operationId\": \"WosController_pageStaff\", \"parameters\": [{\"name\": \"yg_sn\", \"required\": true, \"in\": \"header\", \"description\": \"设备唯一序列号\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"pageIndex\", \"pageSize\"], \"properties\": {\"pageIndex\": {\"type\": \"integer\", \"minimum\": 0}, \"pageSize\": {\"type\": \"integer\", \"minimum\": 0}}}, \"example\": {\"pageIndex\": 10, \"pageSize\": 10}}}}, \"responses\": {\"200\": {\"description\": \"工勤人员分页查询（成功）\"}}, \"tags\": [\"第三方设备数据接入/WOS Integration\"], \"x-apifox-folder\": \"第三方设备数据接入/WOS Integration\", \"x-original-tags\": [\"WOS Integration\"], \"summary\": \"WosController.pageStaff\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/wos.controller.ts:699；WosController.pageStaff\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/wos.controller.ts\", \"line\": 699, \"controller\": \"WosController\", \"handler\": \"pageStaff\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/wosapi/YGCJRobotOpenApi/PushCheckData\": {\"post\": {\"operationId\": \"WosController_pushCheckData\", \"parameters\": [{\"name\": \"yg_sn\", \"required\": true, \"in\": \"header\", \"description\": \"设备唯一序列号\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"data\"], \"properties\": {\"data\": {\"type\": \"object\", \"properties\": {\"LicenseKey\": {\"type\": \"string\"}, \"UserName\": {\"type\": \"string\"}, \"UserPwd\": {\"type\": \"string\"}, \"DataList\": {\"type\": \"array\", \"items\": {\"type\": \"object\", \"properties\": {\"ThirdKey\": {\"type\": \"string\"}, \"UserName\": {\"type\": \"string\"}, \"Temperature\": {\"type\": \"number\"}, \"State\": {\"type\": \"integer\", \"enum\": [0, 1]}, \"IsOffline\": {\"type\": \"integer\", \"enum\": [0, 1]}, \"CheckResult\": {\"type\": \"integer\"}, \"HeathResult\": {\"type\": \"integer\", \"nullable\": true}, \"CheckDate\": {\"type\": \"string\"}, \"IsUrl\": {\"type\": \"boolean\"}, \"Picture_Img_Base64\": {\"type\": \"string\", \"nullable\": true}, \"Picture_Img_Url\": {\"type\": \"string\", \"nullable\": true}, \"Face_Img_Base64\": {\"type\": \"string\", \"nullable\": true}, \"Face_Img_Url\": {\"type\": \"string\", \"nullable\": true}, \"Picture_Back_Img_Base64\": {\"type\": \"string\", \"nullable\": true}, \"Picture_Back_Img_Url\": {\"type\": \"string\", \"nullable\": true}}}}}, \"required\": [\"DataList\"]}}}, \"example\": {\"data\": {\"LicenseKey\": \"APIFOX_{{testBatch}}\", \"UserName\": \"apifox_autotest\", \"UserPwd\": \"APIFOX_{{testBatch}}\", \"DataList\": [{\"ThirdKey\": \"APIFOX_{{testBatch}}\", \"UserName\": \"apifox_autotest\", \"Temperature\": 10, \"State\": 0, \"IsOffline\": 0, \"CheckResult\": 10, \"HeathResult\": 10, \"CheckDate\": \"2026-09-24\", \"IsUrl\": true, \"Picture_Img_Base64\": \"APIFOX_{{testBatch}}\", \"Picture_Img_Url\": \"https://example.test/apifox-autotest.jpg\", \"Face_Img_Base64\": \"APIFOX_{{testBatch}}\", \"Face_Img_Url\": \"https://example.test/apifox-autotest.jpg\", \"Picture_Back_Img_Base64\": \"APIFOX_{{testBatch}}\", \"Picture_Back_Img_Url\": \"https://example.test/apifox-autotest.jpg\"}]}}}}}, \"responses\": {\"200\": {\"description\": \"晨检信息上传（成功）\"}}, \"tags\": [\"第三方设备数据接入/WOS Integration\"], \"x-apifox-folder\": \"第三方设备数据接入/WOS Integration\", \"x-original-tags\": [\"WOS Integration\"], \"summary\": \"WosController.pushCheckData\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/wos.controller.ts:230；WosController.pushCheckData\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/wos.controller.ts\", \"line\": 230, \"controller\": \"WosController\", \"handler\": \"pushCheckData\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/wosapi/YGCJRobotOpenApi/StaffAdd\": {\"post\": {\"operationId\": \"WosController_staffAdd\", \"parameters\": [{\"name\": \"yg_sn\", \"required\": true, \"in\": \"header\", \"description\": \"设备唯一序列号\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"personName\": {\"type\": \"string\", \"description\": \"人员姓名\"}, \"personSex\": {\"type\": \"integer\", \"enum\": [0, 1, 2], \"description\": \"0:男 1:女 2:未知\"}, \"personAge\": {\"type\": \"integer\", \"description\": \"人员年龄\"}, \"entryDate\": {\"type\": \"string\", \"description\": \"入职时间 yyyy-MM-dd\"}, \"position\": {\"type\": \"string\", \"description\": \"职务岗位\"}, \"IDcard\": {\"type\": \"string\", \"description\": \"身份证号码\"}, \"phone\": {\"type\": \"string\", \"description\": \"手机号\"}, \"AccessCard\": {\"type\": \"string\", \"description\": \"门禁卡号(韦根34)\"}, \"hCCode\": {\"type\": \"string\", \"description\": \"健康证号\"}, \"hCStartTime\": {\"type\": \"string\", \"description\": \"健康证开始时间 yyyy-MM-dd\"}, \"hCEndTime\": {\"type\": \"string\", \"description\": \"健康证结束时间 yyyy-MM-dd\"}, \"hCPicBase64\": {\"type\": \"string\", \"description\": \"健康证图片 base64\"}, \"idCardFacePicBase64\": {\"type\": \"string\", \"description\": \"身份证正面图片 base64\"}, \"faceToFacePicBase64\": {\"type\": \"string\", \"description\": \"人脸正视图图片 base64\"}}, \"required\": [\"personName\", \"personSex\", \"personAge\", \"entryDate\", \"position\", \"IDcard\", \"phone\", \"hCCode\", \"hCStartTime\", \"hCEndTime\", \"hCPicBase64\"]}, \"example\": {\"personName\": \"APIFOX_{{testBatch}}_测试数据\", \"personSex\": 0, \"personAge\": 10, \"entryDate\": \"2026-09-24\", \"position\": \"APIFOX_{{testBatch}}\", \"IDcard\": \"APIFOX_{{testBatch}}\", \"phone\": \"13800138000\", \"AccessCard\": \"APIFOX_{{testBatch}}\", \"hCCode\": \"APIFOX_{{testBatch}}\", \"hCStartTime\": \"2026-09-24 10:00:00\", \"hCEndTime\": \"2026-09-24 10:00:00\", \"hCPicBase64\": \"APIFOX_{{testBatch}}\", \"idCardFacePicBase64\": \"APIFOX_{{testBatch}}\", \"faceToFacePicBase64\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"工勤人员增加（成功）\"}}, \"tags\": [\"第三方设备数据接入/WOS Integration\"], \"x-apifox-folder\": \"第三方设备数据接入/WOS Integration\", \"x-original-tags\": [\"WOS Integration\"], \"summary\": \"WosController.staffAdd\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/wos.controller.ts:463；WosController.staffAdd\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/wos.controller.ts\", \"line\": 463, \"controller\": \"WosController\", \"handler\": \"staffAdd\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/wosapi/YGCJRobotOpenApi/StaffById\": {\"post\": {\"operationId\": \"WosController_staffById\", \"parameters\": [{\"name\": \"yg_sn\", \"required\": true, \"in\": \"header\", \"description\": \"设备唯一序列号\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"thirdKey\"], \"properties\": {\"thirdKey\": {\"type\": \"string\", \"description\": \"工勤人员编号(Base64)\"}}}, \"example\": {\"thirdKey\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"工勤人员查询单个详细信息（成功）\"}}, \"tags\": [\"第三方设备数据接入/WOS Integration\"], \"x-apifox-folder\": \"第三方设备数据接入/WOS Integration\", \"x-original-tags\": [\"WOS Integration\"], \"summary\": \"WosController.staffById\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/wos.controller.ts:556；WosController.staffById\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/wos.controller.ts\", \"line\": 556, \"controller\": \"WosController\", \"handler\": \"staffById\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/wosapi/YGCJRobotOpenApi/StaffDelete\": {\"post\": {\"operationId\": \"WosController_staffDelete\", \"parameters\": [{\"name\": \"yg_sn\", \"required\": true, \"in\": \"header\", \"description\": \"设备唯一序列号\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"thirdKey\"], \"properties\": {\"thirdKey\": {\"type\": \"string\", \"description\": \"工勤人员编号(Base64)\"}}}, \"example\": {\"thirdKey\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"工勤人员删除（成功）\"}}, \"tags\": [\"第三方设备数据接入/WOS Integration\"], \"x-apifox-folder\": \"第三方设备数据接入/WOS Integration\", \"x-original-tags\": [\"WOS Integration\"], \"summary\": \"WosController.staffDelete\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/wos.controller.ts:421；WosController.staffDelete\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/wos.controller.ts\", \"line\": 421, \"controller\": \"WosController\", \"handler\": \"staffDelete\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/wosapi/YGCJRobotOpenApi/StaffUpdate\": {\"post\": {\"operationId\": \"WosController_staffUpdate\", \"parameters\": [{\"name\": \"yg_sn\", \"required\": true, \"in\": \"header\", \"description\": \"设备唯一序列号\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"properties\": {\"thirdKey\": {\"type\": \"string\", \"description\": \"工勤人员编号(Base64)\"}, \"personName\": {\"type\": \"string\", \"description\": \"人员姓名\"}, \"personSex\": {\"type\": \"integer\", \"enum\": [0, 1, 2], \"description\": \"0:男 1:女 2:未知\"}, \"personAge\": {\"type\": \"integer\", \"description\": \"人员年龄\"}, \"entryDate\": {\"type\": \"string\", \"description\": \"入职时间 yyyy-MM-dd\"}, \"position\": {\"type\": \"string\", \"description\": \"职务岗位\"}, \"IDcard\": {\"type\": \"string\", \"description\": \"身份证号码\"}, \"phone\": {\"type\": \"string\", \"description\": \"手机号\"}, \"AccessCard\": {\"type\": \"string\", \"description\": \"门禁卡号(韦根34)\"}, \"hCCode\": {\"type\": \"string\", \"description\": \"健康证号\"}, \"hCStartTime\": {\"type\": \"string\", \"description\": \"健康证开始时间 yyyy-MM-dd\"}, \"hCEndTime\": {\"type\": \"string\", \"description\": \"健康证结束时间 yyyy-MM-dd\"}, \"hCPicBase64\": {\"type\": \"string\", \"description\": \"健康证图片 base64\"}, \"idCardFacePicBase64\": {\"type\": \"string\", \"description\": \"身份证正面图片 base64\"}, \"faceToFacePicBase64\": {\"type\": \"string\", \"description\": \"人脸正视图图片 base64\"}}, \"required\": [\"thirdKey\", \"personName\", \"personSex\", \"personAge\", \"entryDate\", \"position\", \"IDcard\", \"phone\", \"hCCode\", \"hCStartTime\", \"hCEndTime\", \"hCPicBase64\"]}, \"example\": {\"thirdKey\": \"APIFOX_{{testBatch}}\", \"personName\": \"APIFOX_{{testBatch}}_测试数据\", \"personSex\": 0, \"personAge\": 10, \"entryDate\": \"2026-09-24\", \"position\": \"APIFOX_{{testBatch}}\", \"IDcard\": \"APIFOX_{{testBatch}}\", \"phone\": \"13800138000\", \"AccessCard\": \"APIFOX_{{testBatch}}\", \"hCCode\": \"APIFOX_{{testBatch}}\", \"hCStartTime\": \"2026-09-24 10:00:00\", \"hCEndTime\": \"2026-09-24 10:00:00\", \"hCPicBase64\": \"APIFOX_{{testBatch}}\", \"idCardFacePicBase64\": \"APIFOX_{{testBatch}}\", \"faceToFacePicBase64\": \"APIFOX_{{testBatch}}\"}}}}, \"responses\": {\"200\": {\"description\": \"工勤人员修改（成功）\"}}, \"tags\": [\"第三方设备数据接入/WOS Integration\"], \"x-apifox-folder\": \"第三方设备数据接入/WOS Integration\", \"x-original-tags\": [\"WOS Integration\"], \"summary\": \"WosController.staffUpdate\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/wos.controller.ts:616；WosController.staffUpdate\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/wos.controller.ts\", \"line\": 616, \"controller\": \"WosController\", \"handler\": \"staffUpdate\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}, \"/wosapi/YGCJRobotOpenApi/UpdateDepInfo\": {\"post\": {\"operationId\": \"WosController_updateDepInfo\", \"parameters\": [{\"name\": \"yg_sn\", \"required\": true, \"in\": \"header\", \"description\": \"设备唯一序列号\", \"schema\": {\"type\": \"string\", \"example\": \"APIFOX_{{testBatch}}\"}}], \"requestBody\": {\"required\": true, \"content\": {\"application/json\": {\"schema\": {\"type\": \"object\", \"required\": [\"data\"], \"properties\": {\"data\": {\"type\": \"object\", \"required\": [\"ThirdKey\", \"DepName\", \"DepType\", \"EBusinessType\", \"Address\", \"Person\", \"Phone\", \"AreaCovered\", \"StaffCount\", \"EatPersonCount\"], \"properties\": {\"ThirdKey\": {\"type\": \"string\", \"description\": \"单位唯一编号(Base64)\"}, \"DepName\": {\"type\": \"string\"}, \"DepType\": {\"type\": \"integer\"}, \"EBusinessType\": {\"type\": \"integer\"}, \"Address\": {\"type\": \"string\"}, \"Person\": {\"type\": \"string\"}, \"Phone\": {\"type\": \"string\"}, \"AreaCovered\": {\"type\": \"number\"}, \"StaffCount\": {\"type\": \"integer\"}, \"EatPersonCount\": {\"type\": \"integer\"}, \"Remark\": {\"type\": \"string\", \"nullable\": true}, \"BssLcsPicUrlBase64\": {\"type\": \"string\", \"nullable\": true}, \"FoodBssLcsPicUrlBase64\": {\"type\": \"string\", \"nullable\": true}}}}}, \"example\": {\"data\": {\"ThirdKey\": \"APIFOX_{{testBatch}}\", \"DepName\": \"APIFOX_{{testBatch}}_测试数据\", \"DepType\": 10, \"EBusinessType\": 10, \"Address\": \"APIFOX_{{testBatch}}\", \"Person\": \"APIFOX_{{testBatch}}\", \"Phone\": \"13800138000\", \"AreaCovered\": 10, \"StaffCount\": 10, \"EatPersonCount\": 10, \"Remark\": \"APIFOX_{{testBatch}} 自动化测试数据\", \"BssLcsPicUrlBase64\": \"https://example.test/apifox-autotest.jpg\", \"FoodBssLcsPicUrlBase64\": \"https://example.test/apifox-autotest.jpg\"}}}}}, \"responses\": {\"200\": {\"description\": \"更新单位信息（食堂信息）（成功）\"}}, \"tags\": [\"第三方设备数据接入/WOS Integration\"], \"x-apifox-folder\": \"第三方设备数据接入/WOS Integration\", \"x-original-tags\": [\"WOS Integration\"], \"summary\": \"WosController.updateDepInfo\", \"description\": \"### 源码证据\\n- services/gateway-service/src/modules/wos.controller.ts:333；WosController.updateDepInfo\\n\\n### 前端调用证据\\n- 未发现可静态匹配的前端调用；不代表接口未使用。\\n\\n### 自动化约束\\n- 风险：EXTERNAL_SIDE_EFFECT\\n- 执行策略：SANDBOX_OR_STUB_ONLY\\n- 测试数据批次：`APIFOX_{{testBatch}}`；真实写库前必须绑定隔离环境、测试账号、租户/学校和回读/清理策略。\", \"x-source-evidence\": [{\"file\": \"services/gateway-service/src/modules/wos.controller.ts\", \"line\": 333, \"controller\": \"WosController\", \"handler\": \"updateDepInfo\"}], \"x-frontend-evidence\": [], \"x-test-risk\": \"EXTERNAL_SIDE_EFFECT\", \"x-test-execution-policy\": \"SANDBOX_OR_STUB_ONLY\", \"x-test-data-prefix\": \"APIFOX_{{testBatch}}\", \"x-contract-evidence-level\": \"SOURCE_OPENAPI\"}}}, \"components\": {\"securitySchemes\": {\"bearer\": {\"scheme\": \"bearer\", \"bearerFormat\": \"JWT\", \"type\": \"http\"}, \"bearerAuth\": {\"type\": \"http\", \"scheme\": \"bearer\", \"bearerFormat\": \"JWT\"}}, \"schemas\": {\"PagedSamplingRecords\": {\"type\": \"object\", \"properties\": {}}, \"ErrorEnvelope\": {\"type\": \"object\", \"properties\": {}}, \"PagedPesticideRecords\": {\"type\": \"object\", \"properties\": {}}, \"PagedDisinfectionRecords\": {\"type\": \"object\", \"properties\": {}}, \"PagedHygieneInspections\": {\"type\": \"object\", \"properties\": {}}, \"PagedWasteRecords\": {\"type\": \"object\", \"properties\": {}}, \"PublicConfigDTO\": {\"type\": \"object\", \"properties\": {}}, \"PagedPersonnel\": {\"type\": \"object\", \"properties\": {}}, \"PagedDeviceSafetyRecords\": {\"type\": \"object\", \"properties\": {}}, \"UpdateDeviceSafetyBodyDTO\": {\"type\": \"object\", \"properties\": {}}, \"PagedRegulatorTasks\": {\"type\": \"object\", \"properties\": {}}, \"PagedMorningChecks\": {\"type\": \"object\", \"properties\": {}}, \"PagedDineRecords\": {\"type\": \"object\", \"properties\": {}}, \"PagedSuppliers\": {\"type\": \"object\", \"properties\": {}}}}, \"x-generation-summary\": {\"generatedAt\": \"2026-09-24T00:00:00+08:00\", \"sourceUniqueOperations\": 572, \"reusedExistingOpenApiOperations\": 430, \"staticallyGeneratedOperations\": 142, \"frontendMatchedOperations\": 285, \"note\": \"固定日期仅标识任务批次，避免生成文件每次运行产生无意义时间漂移。\"}}",
  "options": {
    "targetEndpointFolderId": 0,
    "targetSchemaFolderId": 0,
    "endpointOverwriteBehavior": "OVERWRITE_EXISTING",
    "schemaOverwriteBehavior": "KEEP_EXISTING",
    "updateFolderOfChangedEndpoint": true,
    "prependBasePath": false
  }
}