From 2026007045d5d5325c86d45a67bd2e6a65e2f4dd Mon Sep 17 00:00:00 2001 From: zhaojie <1710884619@qq.com> Date: Mon, 8 Dec 2025 00:53:23 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E5=86=97?= =?UTF-8?q?=E4=BD=99=E6=96=87=E4=BB=B6=E5=B9=B6=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除多个不再使用的脚本和配置文件,包括 `auto_push.bat`, `check_and_fix_users.py`, `init.sql` 等。 - 新增 `git_push.bat` 和 `git_push.sh` 脚本以简化 Git 推送流程。 - 更新 `README.md` 以反映最新的功能和结构变化。 - 优化前端代码,添加新的页面和组件,提升用户体验。 此提交旨在清理项目结构并增强代码可维护性。 --- .claude/settings.local.json | 9 + LLM配置统一说明.md | 144 - README.md | 34 +- TSP智能助手完整文档.md | 524 - UTF8_ENCODING_STANDARD.md | 83 - auto_push.bat | 68 +- auto_push.ps1 | 268 - check_and_fix_users.py | 147 - check_encoding.py | 157 - config/__pycache__/llm_config.cpython-311.pyc | Bin 0 -> 1996 bytes config/unified_config.json | 6 +- convert_encoding.bat | 94 - create_admin_user.py | 29 +- database_init_report.json | 9 - database_migration_notes.md | 119 - fix_admin_user.py | 86 - fix_git_push.bat | 161 - git_push.bat | 26 + git_push.sh | 23 + init.sql | 211 - init_database.py | 62 +- local_test.db | Bin 0 -> 65536 bytes logs/dashboard.log | 16204 +--------------- logs/tsp_assistant.log | 70 - simple_git_push.bat | 108 - src/__pycache__/__init__.cpython-311.pyc | Bin 207 -> 200 bytes .../agent_assistant.cpython-311.pyc | Bin 23051 -> 23044 bytes src/__pycache__/main.cpython-311.pyc | Bin 30436 -> 30429 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 684 -> 677 bytes .../__pycache__/agent_core.cpython-311.pyc | Bin 15090 -> 15083 bytes .../__pycache__/executor.cpython-311.pyc | Bin 25179 -> 25172 bytes .../__pycache__/goal_manager.cpython-311.pyc | Bin 25787 -> 25780 bytes .../__pycache__/llm_client.cpython-311.pyc | Bin 16216 -> 16209 bytes src/agent/__pycache__/planner.cpython-311.pyc | Bin 19509 -> 19502 bytes .../reasoning_engine.cpython-311.pyc | Bin 21114 -> 21107 bytes .../__pycache__/tool_manager.cpython-311.pyc | Bin 21969 -> 21962 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 156 -> 149 bytes .../ai_success_monitor.cpython-311.pyc | Bin 26019 -> 26012 bytes .../__pycache__/alert_system.cpython-311.pyc | Bin 24031 -> 24024 bytes .../analytics_manager.cpython-311.pyc | Bin 18301 -> 18294 bytes .../monitor_service.cpython-311.pyc | Bin 13583 -> 13576 bytes .../__pycache__/token_monitor.cpython-311.pyc | Bin 21378 -> 21371 bytes src/analytics/alert_system.py | 13 + .../__pycache__/__init__.cpython-311.pyc | Bin 153 -> 146 bytes src/config/__pycache__/config.cpython-311.pyc | Bin 2696 -> 2689 bytes .../unified_config.cpython-311.pyc | Bin 16921 -> 16950 bytes src/config/config.py | 1 + src/config/unified_config.py | 6 +- src/core/__pycache__/__init__.cpython-311.pyc | Bin 151 -> 144 bytes .../__pycache__/auth_manager.cpython-311.pyc | Bin 0 -> 8336 bytes .../backup_manager.cpython-311.pyc | Bin 15240 -> 15233 bytes .../__pycache__/cache_manager.cpython-311.pyc | Bin 13286 -> 13279 bytes src/core/__pycache__/database.cpython-311.pyc | Bin 6492 -> 9658 bytes .../__pycache__/llm_client.cpython-311.pyc | Bin 7626 -> 7619 bytes src/core/__pycache__/models.cpython-311.pyc | Bin 10920 -> 13202 bytes .../query_optimizer.cpython-311.pyc | Bin 27002 -> 27019 bytes .../__pycache__/redis_manager.cpython-311.pyc | Bin 4871 -> 4864 bytes .../system_optimizer.cpython-311.pyc | Bin 24404 -> 24397 bytes .../workorder_permissions.cpython-311.pyc | Bin 10123 -> 10116 bytes src/core/auth_manager.py | 144 + src/core/database.py | 43 +- src/core/models.py | 37 + src/core/query_optimizer.py | 2 +- .../__pycache__/__init__.cpython-311.pyc | Bin 155 -> 148 bytes .../conversation_history.cpython-311.pyc | Bin 35623 -> 35616 bytes .../dialogue_manager.cpython-311.pyc | Bin 24250 -> 24243 bytes .../__pycache__/realtime_chat.cpython-311.pyc | Bin 26235 -> 26676 bytes src/dialogue/realtime_chat.py | 8 +- .../__pycache__/__init__.cpython-311.pyc | Bin 253 -> 246 bytes .../ai_suggestion_service.cpython-311.pyc | Bin 21690 -> 25240 bytes .../config_manager.cpython-311.pyc | Bin 14532 -> 14525 bytes .../__pycache__/feishu_client.cpython-311.pyc | Bin 14658 -> 14651 bytes .../feishu_permission_checker.cpython-311.pyc | Bin 13354 -> 13347 bytes .../flexible_field_mapper.cpython-311.pyc | Bin 21168 -> 21161 bytes .../workorder_sync.cpython-311.pyc | Bin 29902 -> 29895 bytes src/integrations/ai_suggestion_service.py | 155 +- .../__pycache__/__init__.cpython-311.pyc | Bin 161 -> 154 bytes .../knowledge_manager.cpython-311.pyc | Bin 22755 -> 24205 bytes src/knowledge_base/knowledge_manager.py | 20 + .../__pycache__/__init__.cpython-311.pyc | Bin 152 -> 145 bytes src/utils/__pycache__/helpers.cpython-311.pyc | Bin 11132 -> 11125 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 313 -> 306 bytes .../vehicle_data_manager.cpython-311.pyc | Bin 16244 -> 16237 bytes src/web/__pycache__/app.cpython-310.pyc | Bin 0 -> 17260 bytes src/web/__pycache__/app.cpython-311.pyc | Bin 34948 -> 12831 bytes src/web/__pycache__/app.cpython-312.pyc | Bin 0 -> 30511 bytes .../error_handlers.cpython-310.pyc | Bin 0 -> 2878 bytes .../error_handlers.cpython-311.pyc | Bin 5339 -> 5332 bytes .../service_manager.cpython-310.pyc | Bin 0 -> 3135 bytes .../service_manager.cpython-311.pyc | Bin 4096 -> 4589 bytes .../websocket_server.cpython-310.pyc | Bin 0 -> 8198 bytes .../websocket_server.cpython-311.pyc | Bin 16064 -> 16441 bytes src/web/app.py | 413 +- .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 216 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 251 -> 244 bytes .../__pycache__/agent.cpython-311.pyc | Bin 0 -> 15050 bytes .../__pycache__/alerts.cpython-310.pyc | Bin 0 -> 3165 bytes .../__pycache__/alerts.cpython-311.pyc | Bin 6533 -> 6526 bytes .../__pycache__/analytics.cpython-311.pyc | Bin 0 -> 2464 bytes .../__pycache__/auth.cpython-311.pyc | Bin 15533 -> 6308 bytes .../__pycache__/conversations.cpython-310.pyc | Bin 0 -> 9488 bytes .../__pycache__/conversations.cpython-311.pyc | Bin 20601 -> 20594 bytes .../__pycache__/core.cpython-310.pyc | Bin 0 -> 11525 bytes .../__pycache__/core.cpython-311.pyc | Bin 26790 -> 26783 bytes .../__pycache__/feishu_sync.cpython-310.pyc | Bin 0 -> 10568 bytes .../__pycache__/feishu_sync.cpython-311.pyc | Bin 22239 -> 22232 bytes .../__pycache__/knowledge.cpython-310.pyc | Bin 0 -> 6034 bytes .../__pycache__/knowledge.cpython-311.pyc | Bin 13008 -> 12951 bytes .../__pycache__/monitoring.cpython-310.pyc | Bin 0 -> 11252 bytes .../__pycache__/monitoring.cpython-311.pyc | Bin 24971 -> 24964 bytes .../__pycache__/system.cpython-310.pyc | Bin 0 -> 13309 bytes .../__pycache__/system.cpython-311.pyc | Bin 28679 -> 28672 bytes .../__pycache__/test.cpython-311.pyc | Bin 0 -> 2603 bytes .../__pycache__/vehicle.cpython-311.pyc | Bin 0 -> 6048 bytes .../__pycache__/workorders.cpython-310.pyc | Bin 0 -> 16586 bytes .../__pycache__/workorders.cpython-311.pyc | Bin 59019 -> 38549 bytes src/web/blueprints/agent.py | 257 + src/web/blueprints/analytics.py | 52 + src/web/blueprints/auth.py | 150 + src/web/blueprints/knowledge.py | 3 +- src/web/blueprints/test.py | 52 + src/web/blueprints/vehicle.py | 93 + src/web/blueprints/workorders.py | 624 +- src/web/decorators.py | 79 + src/web/error_handlers.py | 2 +- src/web/service_manager.py | 9 +- src/web/static/css/components.css | 519 + src/web/static/css/layout.css | 590 + src/web/static/css/main.css | 417 + src/web/static/css/variables.css | 90 + src/web/static/js/app-new.js | 130 + src/web/static/js/chat.js | 108 +- src/web/static/js/components/AlertManager.js | 355 + .../js/components/NotificationManager.js | 137 + src/web/static/js/components/modal.js | 418 + src/web/static/js/components/navbar.js | 414 + src/web/static/js/components/sidebar.js | 235 + src/web/static/js/core/api.js | 472 + src/web/static/js/core/router.js | 466 + src/web/static/js/core/store.js | 203 + src/web/static/js/core/utils.js | 431 + src/web/static/js/core/websocket.js | 441 + src/web/static/js/dashboard.js | 6739 ++++++- src/web/static/js/main.js | 406 + src/web/static/js/navigation.js | 142 - src/web/static/js/pages/agent.js | 560 + src/web/static/js/pages/alerts.js | 738 + src/web/static/js/pages/chat.js | 33 + src/web/static/js/pages/dashboard.js | 454 + src/web/static/js/pages/feishu.js | 451 + src/web/static/js/pages/knowledge.js | 33 + src/web/static/js/pages/login.js | 216 + src/web/static/js/pages/monitoring.js | 33 + src/web/static/js/pages/notfound.js | 142 + src/web/static/js/pages/settings.js | 428 + src/web/static/js/pages/vehicle.js | 402 + src/web/static/js/pages/workorders.js | 329 + src/web/static/js/services/api.js | 160 + src/web/static/manifest.json | 77 + src/web/static/sw.js | 93 + src/web/templates/chat.html | 45 - src/web/templates/chat_http.html | 45 - src/web/templates/dashboard.html | 64 +- src/web/templates/index.html | 40 +- src/web/websocket_server.py | 169 +- start_dashboard.py | 30 +- test_git_push.bat | 79 - test_mysql_connection.py | 130 - test_navigation.py | 121 - test_refactor.py | 91 + 部署更新指南.md | 355 - 171 files changed, 19316 insertions(+), 19520 deletions(-) create mode 100644 .claude/settings.local.json delete mode 100644 LLM配置统一说明.md delete mode 100644 TSP智能助手完整文档.md delete mode 100644 UTF8_ENCODING_STANDARD.md delete mode 100644 auto_push.ps1 delete mode 100644 check_and_fix_users.py delete mode 100644 check_encoding.py create mode 100644 config/__pycache__/llm_config.cpython-311.pyc delete mode 100644 convert_encoding.bat delete mode 100644 database_init_report.json delete mode 100644 database_migration_notes.md delete mode 100644 fix_admin_user.py delete mode 100644 fix_git_push.bat create mode 100644 git_push.bat create mode 100644 git_push.sh delete mode 100644 init.sql create mode 100644 local_test.db delete mode 100644 logs/tsp_assistant.log delete mode 100644 simple_git_push.bat create mode 100644 src/core/__pycache__/auth_manager.cpython-311.pyc create mode 100644 src/core/auth_manager.py create mode 100644 src/web/__pycache__/app.cpython-310.pyc create mode 100644 src/web/__pycache__/app.cpython-312.pyc create mode 100644 src/web/__pycache__/error_handlers.cpython-310.pyc create mode 100644 src/web/__pycache__/service_manager.cpython-310.pyc create mode 100644 src/web/__pycache__/websocket_server.cpython-310.pyc create mode 100644 src/web/blueprints/__pycache__/__init__.cpython-310.pyc create mode 100644 src/web/blueprints/__pycache__/agent.cpython-311.pyc create mode 100644 src/web/blueprints/__pycache__/alerts.cpython-310.pyc create mode 100644 src/web/blueprints/__pycache__/analytics.cpython-311.pyc create mode 100644 src/web/blueprints/__pycache__/conversations.cpython-310.pyc create mode 100644 src/web/blueprints/__pycache__/core.cpython-310.pyc create mode 100644 src/web/blueprints/__pycache__/feishu_sync.cpython-310.pyc create mode 100644 src/web/blueprints/__pycache__/knowledge.cpython-310.pyc create mode 100644 src/web/blueprints/__pycache__/monitoring.cpython-310.pyc create mode 100644 src/web/blueprints/__pycache__/system.cpython-310.pyc create mode 100644 src/web/blueprints/__pycache__/test.cpython-311.pyc create mode 100644 src/web/blueprints/__pycache__/vehicle.cpython-311.pyc create mode 100644 src/web/blueprints/__pycache__/workorders.cpython-310.pyc create mode 100644 src/web/blueprints/agent.py create mode 100644 src/web/blueprints/analytics.py create mode 100644 src/web/blueprints/auth.py create mode 100644 src/web/blueprints/test.py create mode 100644 src/web/blueprints/vehicle.py create mode 100644 src/web/decorators.py create mode 100644 src/web/static/css/components.css create mode 100644 src/web/static/css/layout.css create mode 100644 src/web/static/css/main.css create mode 100644 src/web/static/css/variables.css create mode 100644 src/web/static/js/app-new.js create mode 100644 src/web/static/js/components/AlertManager.js create mode 100644 src/web/static/js/components/NotificationManager.js create mode 100644 src/web/static/js/components/modal.js create mode 100644 src/web/static/js/components/navbar.js create mode 100644 src/web/static/js/components/sidebar.js create mode 100644 src/web/static/js/core/api.js create mode 100644 src/web/static/js/core/router.js create mode 100644 src/web/static/js/core/store.js create mode 100644 src/web/static/js/core/utils.js create mode 100644 src/web/static/js/core/websocket.js create mode 100644 src/web/static/js/main.js delete mode 100644 src/web/static/js/navigation.js create mode 100644 src/web/static/js/pages/agent.js create mode 100644 src/web/static/js/pages/alerts.js create mode 100644 src/web/static/js/pages/chat.js create mode 100644 src/web/static/js/pages/dashboard.js create mode 100644 src/web/static/js/pages/feishu.js create mode 100644 src/web/static/js/pages/knowledge.js create mode 100644 src/web/static/js/pages/login.js create mode 100644 src/web/static/js/pages/monitoring.js create mode 100644 src/web/static/js/pages/notfound.js create mode 100644 src/web/static/js/pages/settings.js create mode 100644 src/web/static/js/pages/vehicle.js create mode 100644 src/web/static/js/pages/workorders.js create mode 100644 src/web/static/js/services/api.js create mode 100644 src/web/static/manifest.json create mode 100644 src/web/static/sw.js delete mode 100644 test_git_push.bat delete mode 100644 test_mysql_connection.py delete mode 100644 test_navigation.py create mode 100644 test_refactor.py delete mode 100644 部署更新指南.md diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..2f339c5 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,9 @@ +{ + "permissions": { + "allow": [ + "Bash(curl:*)" + ], + "deny": [], + "ask": [] + } +} diff --git a/LLM配置统一说明.md b/LLM配置统一说明.md deleted file mode 100644 index e791ceb..0000000 --- a/LLM配置统一说明.md +++ /dev/null @@ -1,144 +0,0 @@ -# LLMͳһ˵ - -## ? - -ĿѽLLMͳһȷĿֻһطǧģͣеطͳһûȡ - -## ?? üܹ - -### 1. ļ`config/llm_config.py` - -**Ψһ**LLMԴǧģ͵ã - -```python -QWEN_CONFIG = LLMConfig( - provider="qwen", - api_key="sk-c0dbefa1718d46eaa897199135066f00", - base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", - model="qwen-plus-latest", - temperature=0.7, - max_tokens=2000 -) - -# Ĭʹǧģ -DEFAULT_CONFIG = QWEN_CONFIG -``` - -### 2. ͳһù`src/config/unified_config.py` - -ͳһùڳʼʱԶ `config/llm_config.py` ã - -```python -def _load_default_llm_config(self) -> LLMConfig: - """ĬLLM""" - try: - from config.llm_config import DEFAULT_CONFIG - # תøʽ - return LLMConfig(...) - except Exception as e: - logger.warning(f"޷ĬLLMãʹĬֵ: {e}") - return LLMConfig() -``` - -### 3. ȫʵ - -ͨ `get_config()` ȡȫʵ - -```python -from src.config.unified_config import get_config - -config = get_config() -llm_config = config.llm # ȡLLM -``` - -## ? ʹ - -### κҪʹLLMĵط - -```python -from src.config.unified_config import get_config - -# ȡLLM -llm_config = get_config().llm - -# ʹ -print(f"Provider: {llm_config.provider}") -print(f"Model: {llm_config.model}") -print(f"API Key: {llm_config.api_key}") -``` - -### ʾAI - -```python -class AISuggestionService: - def __init__(self): - # ͳһùȡLLM - self.llm_config = get_config().llm - logger.info(f"ʹLLM: {self.llm_config.provider} - {self.llm_config.model}") -``` - -## ? ȼ - -1. **һȼ**ͳһùеãͨļ򻷾ã -2. **ڶȼ**`config/llm_config.py` е `DEFAULT_CONFIG` -3. **ѡ**õĬֵ - -## ? ޸ - -### 1޸ļƼ - -ֱӱ༭ `config/llm_config.py`޸APIԿģͣ - -```python -QWEN_CONFIG = LLMConfig( - provider="qwen", - api_key="APIԿ", # ޸ - model="qwen-max", # ޸ģ - ... -) -``` - -### 2ͨͳһļ - -༭ `config/unified_config.json`ڣ - -```json -{ - "llm": { - "provider": "qwen", - "api_key": "APIԿ", - "model": "qwen-plus-latest", - ... - } -} -``` - -### 3ѡ - -```bash -export LLM_API_KEY="APIԿ" -export LLM_MODEL="qwen-plus-latest" -``` - -## ? - -1. **һԴ**ֻҪ `config/llm_config.py` һ -2. **ͳһ**ģ鶼ͨͳһùȡ -3. **ά**޸òҪ޸Ķദ -4. **Զͬ**޸úʹøõĵطԶ -5. ****fallbackƣȷϵͳȶ - -## ? Ѹµļ - -- ? `config/llm_config.py` - `get_default_llm_config()` -- ? `src/config/unified_config.py` - `config/llm_config.py` Ĭ -- ? `src/integrations/ai_suggestion_service.py` - ʹͳһ -- ? `src/agent/agent_assistant_core.py` - ʹͳһ - -## ? ע - -- **Ҫ**ڴӲOpenAIģ͵ -- **Ҫ**ֱӴ `config/llm_config.py` 루Ϊfallback -- ****ͨ `get_config().llm` ȡ -- ޸úӦʹЧ - diff --git a/README.md b/README.md index 3caa925..6ce051a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # TSP智能助手 (TSP Assistant) -[![Version](https://img.shields.io/badge/version-2.0.0-blue.svg)](version.json) +[![Version](https://img.shields.io/badge/version-2.1.0-blue.svg)](version.json) [![Python](https://img.shields.io/badge/python-3.11+-green.svg)](requirements.txt) [![Docker](https://img.shields.io/badge/docker-supported-blue.svg)](Dockerfile) [![License](https://img.shields.io/badge/license-MIT-yellow.svg)](LICENSE) @@ -15,19 +15,22 @@ - **智能规划**: 基于目标驱动的任务规划和执行 - **自主学习**: 从用户反馈中持续优化响应质量 - **实时监控**: 主动监控系统状态和异常情况 -- **模块化重构**: 代码优化,降低运行风险,提升维护性 +- **模块化重构**: 后端服务(Agent, 车辆数据, 分析, 测试)蓝图化,提高可维护性和扩展性 +- **前端模块化**: 引入ES6模块化架构,优化UI组件、状态管理和API服务 ### 💬 智能对话系统 -- **实时通信**: WebSocket支持,毫秒级响应 +- **实时通信**: WebSocket支持,毫秒级响应,已修复连接稳定性问题 - **上下文理解**: 多轮对话记忆和上下文关联 - **VIN识别**: 自动识别车辆VIN码并获取实时数据 - **知识库集成**: 基于TF-IDF和余弦相似度的智能检索 +- **自定义提示词**: 支持飞书同步和实时对话不同场景的LLM提示词 ### 📊 数据驱动分析 - **真实数据**: 基于数据库的真实性能趋势分析 - **多维度统计**: 工单、预警、满意度、性能指标 - **可视化展示**: Chart.js图表,直观的数据呈现 - **系统监控**: 实时CPU、内存、健康状态监控 +- **专属蓝图**: 独立的数据分析API模块,提供专业数据报告导出 ### 🔧 企业级管理 - **多环境部署**: 开发、测试、生产环境隔离 @@ -35,6 +38,7 @@ - **热更新**: 支持前端文件热更新,无需重启服务 - **自动备份**: 更新前自动备份,支持一键回滚 - **飞书集成**: 支持飞书多维表格数据同步和管理 +- **统一错误处理**: 后端API统一异常处理,提高系统健壮性 ## 🏗️ 系统架构 @@ -66,18 +70,21 @@ - **VIN识别**: 自动识别车辆VIN并获取实时数据 - **知识库检索**: 智能匹配相关技术文档和解决方案 - **工单创建**: 对话中直接创建和关联工单 +- **错误修复**: 解决了WebSocket连接TypeError问题 ### 2. Agent管理 🤖 - **工具管理**: 10+内置工具,支持自定义工具注册 - **执行监控**: 实时监控Agent任务执行状态 - **性能统计**: 工具使用频率和成功率分析 - **智能规划**: 基于目标的任务分解和执行 +- **专用蓝图**: Agent相关API已独立为蓝图管理 ### 3. 工单系统 📋 - **AI建议**: 基于知识库生成工单处理建议 - **人工审核**: 支持人工输入和AI建议对比 - **相似度评估**: 自动计算AI与人工建议的相似度 - **知识库更新**: 高相似度建议自动入库 +- **飞书AI提示词**: 针对飞书同步场景提供更详细的AI建议提示词 ### 4. 知识库管理 📚 - **多格式支持**: TXT、PDF、DOC、DOCX、MD文件 @@ -90,12 +97,14 @@ - **多维度统计**: 工单、预警、满意度等关键指标 - **系统健康**: CPU、内存、响应时间监控 - **可视化展示**: 丰富的图表和仪表板 +- **专用蓝图**: 数据分析API已独立为蓝图管理,并支持Excel报告导出 ### 6. 系统设置 ⚙️ - **API管理**: 支持多种LLM提供商配置 - **模型参数**: 温度、最大令牌数等参数调节 - **端口配置**: Web服务和WebSocket端口管理 - **日志级别**: 灵活的日志级别控制 +- **数据库健壮性**: 优化了数据库连接配置和错误处理 ### 7. 飞书集成 📱 - **多维表格同步**: 自动同步飞书多维表格数据 @@ -377,6 +386,25 @@ TZ=Asia/Shanghai ## 📝 更新日志 +### v2.1.0 (2025-12-08) - 全面架构优化与问题修复 +- ⚙️ **后端架构重构**: + - 将Agent、车辆数据、数据分析、API测试相关路由拆分为独立蓝图。 + - 精简 `app.py` 主应用文件,提升模块化和可维护性。 + - 引入统一错误处理装饰器和依赖注入机制。 +- 🎨 **前端架构优化**: + - 实现了JavaScript模块化架构,划分 `core`, `services`, `components` 目录。 + - 引入了统一状态管理 (`store.js`) 和API服务 (`api.js`)。 + - 优化了通知管理和预警显示组件。 +- 🛠️ **关键问题修复**: + - 修复了WebSocket连接中 `TypeError: missing 1 required positional argument: 'path'` 错误。 + - 改进了数据库连接的健壮性,优化MySQL连接池配置,并增强了异常处理和重连机制。 + - 解决了 `generator didn't stop` 错误,确保数据库会话的正确关闭。 + - 增强了预警系统异常处理,并在规则检查失败时生成系统预警。 + - 优化了API错误响应,包含更详细的错误信息。 +- ✨ **新功能增强**: + - 为飞书同步和实时对话场景引入了不同的LLM提示词,提升AI建议的针对性。 + - 增加了对`Analysising`工单状态的映射处理。 + ### v2.0.0 (2025-09-22) - Docker环境全面升级 - 🐳 **Docker环境重构**: 升级到Python 3.11,优化镜像构建 - 🐳 **多服务编排**: MySQL 8.0 + Redis 7 + Nginx + Prometheus + Grafana diff --git a/TSP智能助手完整文档.md b/TSP智能助手完整文档.md deleted file mode 100644 index ae7eef9..0000000 --- a/TSP智能助手完整文档.md +++ /dev/null @@ -1,524 +0,0 @@ -# TSP智能助手完整文档 - -## 📋 目录 -- [项目概述](#项目概述) -- [系统架构](#系统架构) -- [核心功能](#核心功能) -- [技术栈](#技术栈) -- [安装部署](#安装部署) -- [配置说明](#配置说明) -- [使用指南](#使用指南) -- [API接口](#api接口) -- [数据库设计](#数据库设计) -- [开发指南](#开发指南) -- [故障排除](#故障排除) -- [更新日志](#更新日志) - ---- - -## 🚀 项目概述 - -TSP智能助手是一个基于大语言模型的智能客服系统,专为TSP(Telematics Service Provider)车辆服务提供商设计。系统集成了智能对话、工单管理、知识库、数据分析、飞书集成等核心功能。 - -### 核心特性 -- **智能Agent架构**: 多工具集成,智能规划,自主学习 -- **实时对话系统**: WebSocket支持,上下文理解,VIN识别 -- **数据驱动分析**: 真实数据统计,可视化展示,系统监控 -- **企业级管理**: 多环境部署,版本控制,热更新,自动备份 -- **飞书集成**: 支持飞书多维表格数据同步和管理 -- **AI准确率优化**: 智能判断AI建议质量,优先使用高质量内容入库 - ---- - -## 🏗️ 系统架构 - -### 整体架构 -``` -┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ -│ 前端界面 │ │ 后端服务 │ │ 数据存储 │ -│ │ │ │ │ │ -│ • 仪表板 │◄──►│ • Flask API │◄──►│ • MySQL DB │ -│ • 智能对话 │ │ • WebSocket │ │ • 知识库 │ -│ • Agent管理 │ │ • Agent核心 │ │ • 工单系统 │ -│ • 数据分析 │ │ • LLM集成 │ │ • 车辆数据 │ -│ • 飞书同步 │ │ • 备份系统 │ │ • SQLite备份 │ -└─────────────────┘ └─────────────────┘ └─────────────────┘ -``` - -### 模块化设计 -- **Web层**: Flask蓝图架构,模块化API设计 -- **业务层**: Agent核心、对话管理、工单处理 -- **数据层**: MySQL主库 + SQLite备份,ORM映射 -- **集成层**: 飞书API、LLM服务、监控系统 - ---- - -## 🎯 核心功能 - -### 1. 智能对话系统 💬 -- **多轮对话**: 支持上下文关联的连续对话 -- **VIN识别**: 自动识别车辆VIN并获取实时数据 -- **知识库检索**: 基于TF-IDF和余弦相似度的智能检索 -- **工单创建**: 对话中直接创建和关联工单 - -### 2. Agent管理系统 🤖 -- **工具管理**: 10+内置工具,支持自定义工具注册 -- **执行监控**: 实时监控Agent任务执行状态 -- **性能统计**: 工具使用频率和成功率分析 -- **智能规划**: 基于目标的任务分解和执行 - -### 3. 工单管理系统 📋 -- **AI建议生成**: 基于知识库生成工单处理建议 -- **人工审核**: 支持人工输入和AI建议对比 -- **语义相似度**: 使用sentence-transformers进行准确度评估 -- **智能入库**: AI准确率<90%时优先使用人工描述入库 -- **知识库更新**: 高相似度建议自动入库 - -### 4. 知识库管理 📚 -- **多格式支持**: TXT、PDF、DOC、DOCX、MD文件 -- **智能提取**: 自动从文档中提取Q&A对 -- **向量化检索**: TF-IDF + 余弦相似度搜索 -- **质量验证**: 支持知识条目验证和置信度设置 - -### 5. 数据分析系统 📊 -- **实时趋势**: 基于真实数据的性能趋势分析 -- **多维度统计**: 工单、预警、满意度等关键指标 -- **系统健康**: CPU、内存、响应时间监控 -- **可视化展示**: 丰富的图表和仪表板 - -### 6. 飞书集成系统 📱 -- **多维表格同步**: 自动同步飞书多维表格数据 -- **字段映射**: 智能映射飞书字段到本地数据库 -- **实时更新**: 支持增量同步和全量同步 -- **数据预览**: 同步前预览数据,确保准确性 - -### 7. 系统设置管理 ⚙️ -- **API管理**: 支持多种LLM提供商配置 -- **模型参数**: 温度、最大令牌数等参数调节 -- **端口配置**: Web服务和WebSocket端口管理 -- **日志级别**: 灵活的日志级别控制 - ---- - -## 🛠️ 技术栈 - -### 后端技术 -- **Python 3.8+**: 核心开发语言 -- **Flask**: Web框架和API服务 -- **SQLAlchemy**: ORM数据库操作 -- **WebSocket**: 实时通信支持 -- **psutil**: 系统资源监控 - -### 前端技术 -- **Bootstrap 5**: UI框架 -- **Chart.js**: 数据可视化 -- **JavaScript ES6+**: 前端逻辑 -- **WebSocket**: 实时通信客户端 - -### AI/ML技术 -- **大语言模型**: 支持OpenAI、通义千问等 -- **sentence-transformers**: 语义相似度计算 -- **TF-IDF**: 文本向量化 -- **余弦相似度**: 语义相似度计算 -- **Agent框架**: 智能任务规划 - -### 部署运维 -- **Docker**: 容器化部署 -- **Nginx**: 反向代理和静态文件服务 -- **Systemd**: 服务管理 -- **Git**: 版本控制 - ---- - -## 🚀 安装部署 - -### 环境要求 -- Python 3.8+ -- Node.js 16+ (可选,用于前端构建) -- Git -- MySQL 8.0+ - -### 安装步骤 - -1. **克隆项目** -```bash -git clone http://jeason.online:3000/zhaojie/assist.git -cd assist -``` - -2. **安装依赖** -```bash -pip install -r requirements.txt -``` - -3. **配置数据库** -```bash -# 创建MySQL数据库 -mysql -u root -p -CREATE DATABASE tsp_assistant CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -``` - -4. **初始化数据库** -```bash -python init_database.py -``` - -5. **启动服务** -```bash -python start_dashboard.py -``` - -6. **访问系统** -- 打开浏览器访问: `http://localhost:5000` -- 默认端口: 5000 (可在系统设置中修改) - -### Windows快速启动 -```cmd -# 双击运行 -快速启动.bat -``` - ---- - -## ⚙️ 配置说明 - -### 环境变量 -```bash -# 数据库配置 -DATABASE_URL=mysql+pymysql://user:password@host:port/database - -# LLM配置 -LLM_PROVIDER=openai -LLM_API_KEY=your_api_key -LLM_MODEL=gpt-3.5-turbo - -# 服务配置 -SERVER_PORT=5000 -WEBSOCKET_PORT=8765 -LOG_LEVEL=INFO -``` - -### 配置文件结构 -``` -config/ -├── llm_config.py # LLM客户端配置 -├── integrations_config.json # 飞书集成配置 -├── ai_accuracy_config.py # AI准确率配置 -└── README.md # 配置说明文档 -``` - -### 飞书集成配置 -```json -{ - "feishu": { - "app_id": "cli_a8b50ec0eed1500d", - "app_secret": "ccxkE7ZCFQZcwkkM1rLy0ccZRXYsT2xK", - "app_token": "XXnEbiCmEaMblSs6FDJcFCqsnIg", - "table_id": "tblnl3vJPpgMTSiP", - "status": "active" - }, - "system": { - "sync_limit": 10, - "ai_suggestions_enabled": true, - "auto_sync_interval": 0 - } -} -``` - -### AI准确率配置 -```python -# 默认配置 -auto_approve_threshold = 0.95 # 自动审批阈值 -use_human_resolution_threshold = 0.90 # 使用人工描述阈值 -manual_review_threshold = 0.80 # 人工审核阈值 -``` - ---- - -## 📖 使用指南 - -### 基础操作 - -#### 1. 智能对话 -1. 在"智能对话"页面输入问题 -2. 系统自动检索知识库并生成回答 -3. 支持VIN码识别和车辆数据查询 - -#### 2. 工单管理 -1. 创建工单并获取AI建议 -2. 输入人工处理描述 -3. 系统自动计算语义相似度 -4. 根据相似度决定入库策略 - -#### 3. 知识库维护 -1. 手动添加Q&A对 -2. 上传文档自动提取知识 -3. 设置置信度和验证状态 - -#### 4. 飞书数据同步 -1. 配置飞书应用凭证 -2. 在主仪表板"飞书同步"标签页 -3. 测试连接并执行数据同步 - -### 高级功能 - -#### 1. Agent工具管理 -- 查看工具使用统计 -- 注册自定义工具 -- 监控执行历史 - -#### 2. 数据分析 -- 多维度数据统计 -- 自定义时间范围 -- 导出分析报告 - -#### 3. 系统配置 -- API和模型参数配置 -- 端口和日志级别设置 -- 环境变量管理 - ---- - -## 🔌 API接口 - -### 工单管理API -```http -POST /api/workorders/{id}/ai-suggestion -POST /api/workorders/{id}/human-resolution -POST /api/workorders/{id}/approve-to-knowledge -GET /api/workorders -POST /api/workorders -PUT /api/workorders/{id} -DELETE /api/workorders/{id} -``` - -### 知识库API -```http -GET /api/knowledge -POST /api/knowledge -PUT /api/knowledge/{id} -DELETE /api/knowledge/{id} -POST /api/knowledge/search -POST /api/knowledge/upload -``` - -### 对话API -```http -POST /api/chat/session -GET /api/chat/session/{id} -DELETE /api/chat/session/{id} -POST /api/chat/message -``` - -### Agent管理API -```http -GET /api/agent/status -POST /api/agent/tools/execute -POST /api/agent/tools/register -GET /api/agent/tools/stats -``` - ---- - -## 🗄️ 数据库设计 - -### 核心表结构 - -#### work_orders (工单表) -```sql -CREATE TABLE work_orders ( - id INT PRIMARY KEY AUTO_INCREMENT, - order_id VARCHAR(50) UNIQUE NOT NULL, - title VARCHAR(200) NOT NULL, - description TEXT NOT NULL, - category VARCHAR(100) NOT NULL, - priority VARCHAR(20) NOT NULL, - status VARCHAR(20) NOT NULL, - created_at DATETIME DEFAULT CURRENT_TIMESTAMP, - updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - resolution TEXT, - satisfaction_score FLOAT, - - -- 飞书集成字段 - feishu_record_id VARCHAR(100), - source VARCHAR(50), - module VARCHAR(100), - created_by VARCHAR(100), - wilfulness VARCHAR(100), - date_of_close DATETIME, - vehicle_type VARCHAR(100), - vin_sim VARCHAR(50), - app_remote_control_version VARCHAR(100), - hmi_sw VARCHAR(100), - parent_record VARCHAR(100), - has_updated_same_day VARCHAR(50), - operating_time VARCHAR(100) -); -``` - -#### work_order_suggestions (工单建议表) -```sql -CREATE TABLE work_order_suggestions ( - id INT PRIMARY KEY AUTO_INCREMENT, - work_order_id INT NOT NULL, - ai_suggestion TEXT, - human_resolution TEXT, - ai_similarity FLOAT, - approved BOOLEAN DEFAULT FALSE, - use_human_resolution BOOLEAN DEFAULT FALSE, - created_at DATETIME DEFAULT CURRENT_TIMESTAMP, - updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - FOREIGN KEY (work_order_id) REFERENCES work_orders(id) -); -``` - -#### knowledge_entries (知识库表) -```sql -CREATE TABLE knowledge_entries ( - id INT PRIMARY KEY AUTO_INCREMENT, - question TEXT NOT NULL, - answer TEXT NOT NULL, - category VARCHAR(100), - confidence_score FLOAT DEFAULT 0.5, - usage_count INT DEFAULT 0, - is_active BOOLEAN DEFAULT TRUE, - is_verified BOOLEAN DEFAULT FALSE, - verified_by VARCHAR(100), - verified_at DATETIME, - created_at DATETIME DEFAULT CURRENT_TIMESTAMP, - updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -); -``` - ---- - -## 👨‍💻 开发指南 - -### 项目结构 -``` -tsp-assistant/ -├── src/ # 源代码 -│ ├── agent/ # Agent核心模块 -│ ├── analytics/ # 数据分析模块 -│ ├── config/ # 配置模块 -│ ├── core/ # 核心模块 -│ ├── dialogue/ # 对话模块 -│ ├── integrations/ # 集成模块 -│ ├── knowledge_base/ # 知识库模块 -│ ├── utils/ # 工具模块 -│ ├── vehicle/ # 车辆数据模块 -│ └── web/ # Web应用模块 -├── config/ # 配置文件 -├── scripts/ # 脚本文件 -├── uploads/ # 上传文件 -├── requirements.txt # 依赖文件 -├── init_database.py # 数据库初始化 -└── start_dashboard.py # 启动脚本 -``` - -### 代码规范 -- **Python**: 遵循PEP 8规范 -- **JavaScript**: 使用ES6+语法 -- **提交信息**: 使用约定式提交格式 -- **文档**: 新功能需要添加相应的文档 - -### 开发流程 -1. Fork项目到个人仓库 -2. 创建功能分支: `git checkout -b feature/new-feature` -3. 提交更改: `git commit -m "Add new feature"` -4. 推送分支: `git push origin feature/new-feature` -5. 创建Pull Request - ---- - -## 🚨 故障排除 - -### 常见问题 - -#### 1. 数据库连接失败 -```bash -# 检查数据库服务状态 -systemctl status mysql - -# 检查连接配置 -python -c "from src.core.database import db_manager; print(db_manager.test_connection())" -``` - -#### 2. 飞书集成问题 -- 检查飞书应用权限配置 -- 验证app_token和table_id是否正确 -- 确认网络连接和API访问权限 - -#### 3. AI建议生成失败 -- 检查LLM API配置 -- 验证知识库数据完整性 -- 查看应用日志 - -#### 4. 数据库字段缺失 -```bash -# 运行数据库迁移 -python init_database.py - -# 手动添加字段 -mysql -u root -p tsp_assistant -ALTER TABLE work_order_suggestions ADD COLUMN use_human_resolution BOOLEAN DEFAULT FALSE; -``` - -### 日志位置 -- **应用日志**: `logs/tsp_assistant.log` -- **访问日志**: Nginx访问日志 -- **错误追踪**: 详细的错误堆栈信息 - -### 性能优化 -- **数据库索引**: 为常用查询字段添加索引 -- **缓存策略**: 使用Redis缓存热点数据 -- **异步处理**: 耗时操作使用异步处理 -- **连接池**: 配置数据库连接池 - ---- - -## 📝 更新日志 - -### v1.4.0 (2025-09-19) -- ✅ 飞书集成功能:支持飞书多维表格数据同步 -- ✅ 页面功能合并:飞书同步页面合并到主仪表板 -- ✅ 数据库架构优化:扩展工单表字段,支持飞书数据 -- ✅ 代码重构优化:大文件拆分,降低运行风险 -- ✅ 字段映射完善:智能映射飞书字段到本地数据库 -- ✅ 数据库初始化改进:集成字段迁移到初始化流程 -- ✅ AI准确率优化:AI准确率<90%时优先使用人工描述入库 -- ✅ 语义相似度计算:使用sentence-transformers提升准确度 - -### v1.3.0 (2025-09-17) -- ✅ 数据库架构优化:MySQL主数据库+SQLite备份系统 -- ✅ 工单详情API修复:解决数据库会话管理问题 -- ✅ 备份管理系统:自动备份MySQL数据到SQLite -- ✅ 数据库状态监控:实时监控MySQL和SQLite状态 -- ✅ 备份管理API:支持数据备份和恢复操作 - -### v1.2.0 (2025-09-16) -- ✅ 系统设置扩展:API管理、模型参数配置、端口管理 -- ✅ 真实数据分析:修复性能趋势图表显示问题 -- ✅ 工单AI建议功能:智能生成处理建议 -- ✅ 知识库搜索优化:提升检索准确率 -- ✅ Agent管理改进:工具使用统计和自定义工具 - ---- - -## 📄 许可证 - -本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情 - -## 📞 支持与联系 - -- **项目地址**: http://jeason.online:3000/zhaojie/assist -- **问题反馈**: 请在Issues中提交问题 -- **功能建议**: 欢迎提交Feature Request - -## 🙏 致谢 - -感谢所有为项目做出贡献的开发者和用户! - ---- - -**TSP智能助手** - 让车辆服务更智能,让客户体验更美好! 🚗✨ diff --git a/UTF8_ENCODING_STANDARD.md b/UTF8_ENCODING_STANDARD.md deleted file mode 100644 index 57bdcea..0000000 --- a/UTF8_ENCODING_STANDARD.md +++ /dev/null @@ -1,83 +0,0 @@ -# UTF-8 编码规范 - -## 项目编码标准 - -本项目所有文件必须使用 **UTF-8** 编码格式,以确保中文和特殊字符的正确显示和处理。 - -## 文件编码要求 - -### 1. Python 文件 -- **必须** 在文件开头添加编码声明: - ```python - # -*- coding: utf-8 -*- - ``` - 或 - ```python - # coding: utf-8 - ``` - -### 2. 文件保存 -- 所有文件保存时使用 **UTF-8** 编码(无BOM) -- 禁止使用 GBK、GB2312 等其他编码格式 - -### 3. 文件读取/写入 -- 所有文件操作必须明确指定 `encoding='utf-8'`: - ```python - with open('file.txt', 'r', encoding='utf-8') as f: - content = f.read() - - with open('file.txt', 'w', encoding='utf-8') as f: - f.write(content) - ``` - -## Cursor/VS Code 配置 - -项目已配置 `.vscode/settings.json`,确保: -- 默认文件编码:UTF-8 -- 自动检测编码:禁用(避免误判) -- 文件行尾:LF(Unix风格) - -## 控制台输出 - -### Windows 系统 -在 Python 脚本中,需要设置标准输出编码: -```python -import sys -import io - -if sys.platform == 'win32': - sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace') - sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace') -``` - -## 检查脚本 - -使用 `check_encoding.py` 脚本检查所有文件的编码格式: -```bash -python check_encoding.py -``` - -## 常见问题 - -### 1. 控制台输出乱码 -- 确保文件以 UTF-8 保存 -- 在脚本开头设置标准输出编码 -- Windows 系统运行 `chcp 65001` 设置控制台代码页 - -### 2. 文件读取乱码 -- 检查文件实际编码(可用 `check_encoding.py`) -- 确保使用 `encoding='utf-8'` 参数 - -### 3. 文件保存乱码 -- 检查编辑器编码设置 -- 确保 Cursor/VS Code 设置为 UTF-8 - -## 验证清单 - -创建新文件时,请确认: -- [ ] 文件以 UTF-8 编码保存 -- [ ] Python 文件包含编码声明 -- [ ] 文件读写操作指定 `encoding='utf-8'` -- [ ] 控制台输出脚本设置了 UTF-8 编码 -- [ ] 测试输出中文显示正常 - diff --git a/auto_push.bat b/auto_push.bat index d2c0a0f..4186fdf 100644 --- a/auto_push.bat +++ b/auto_push.bat @@ -200,56 +200,18 @@ echo ✅ 提交成功 echo. echo [4/4] 推送到远程仓库... -:: 获取当前分支名称(在延迟变量扩展内) -set current_branch= -for /f "tokens=*" %%b in ('git branch --show-current 2^>nul') do set current_branch=%%b - -if "!current_branch!"=="" ( - echo ❌ 无法获取当前分支名称 - echo 尝试使用默认分支 main... - set current_branch=main -) else ( - echo 📍 当前分支: !current_branch! -) - -echo. - :: 先尝试拉取最新更改 echo 🔄 检查远程更新... -git fetch origin !current_branch! >nul 2>&1 -set fetch_result=!errorlevel! -if !fetch_result! neq 0 ( - echo ⚠️ 无法获取远程更新,尝试获取所有分支... - git fetch origin >nul 2>&1 - set fetch_all_result=!errorlevel! - if !fetch_all_result! neq 0 ( - echo ⚠️ 无法获取远程更新,继续推送... - ) else ( - echo ✅ 远程更新检查完成 - ) +git fetch origin main +if %errorlevel% neq 0 ( + echo ⚠️ 无法获取远程更新,继续推送... ) else ( echo ✅ 远程更新检查完成 ) -:: 检查远程分支是否存在,如果不存在则设置上游 -echo 🔍 检查远程分支状态... -git ls-remote --heads origin !current_branch! >nul 2>&1 -set remote_exists=!errorlevel! -set push_result=0 - -if !remote_exists! equ 0 ( - echo 远程分支 !current_branch! 已存在 - :: 推送到远程(分支已存在) - git push origin !current_branch! - set push_result=!errorlevel! -) else ( - echo 远程分支 !current_branch! 不存在,将创建并设置上游 - :: 推送到远程并设置上游(分支不存在) - git push -u origin !current_branch! - set push_result=!errorlevel! -) - -if !push_result! neq 0 ( +:: 推送到远程 +git push origin main +if %errorlevel% neq 0 ( echo ❌ 推送失败 echo. echo 💡 可能的原因: @@ -259,20 +221,18 @@ if !push_result! neq 0 ( echo - 需要先拉取远程更改 echo. echo 🔧 尝试自动解决冲突... - git pull origin !current_branch! --rebase - set pull_result=!errorlevel! - if !pull_result! equ 0 ( + git pull origin main --rebase + if %errorlevel% equ 0 ( echo ✅ 冲突已解决,重新推送... - git push origin !current_branch! - set final_push_result=!errorlevel! - if !final_push_result! equ 0 ( + git push origin main + if %errorlevel% equ 0 ( echo ✅ 推送成功! ) else ( echo ❌ 重新推送失败 echo. echo 🔧 建议手动解决: - echo 1. 运行: git pull origin !current_branch! - echo 2. 解决冲突后运行: git push origin !current_branch! + echo 1. 运行: git pull origin main + echo 2. 解决冲突后运行: git push origin main pause exit /b 1 ) @@ -280,8 +240,8 @@ if !push_result! neq 0 ( echo ❌ 无法自动解决冲突 echo. echo 🔧 建议手动解决: - echo 1. 运行: git pull origin !current_branch! - echo 2. 解决冲突后运行: git push origin !current_branch! + echo 1. 运行: git pull origin main + echo 2. 解决冲突后运行: git push origin main pause exit /b 1 ) diff --git a/auto_push.ps1 b/auto_push.ps1 deleted file mode 100644 index c1fda3b..0000000 --- a/auto_push.ps1 +++ /dev/null @@ -1,268 +0,0 @@ -# TSP智能助手 - 自动推送脚本 (PowerShell版本) -# 使用方法: .\auto_push.ps1 [提交信息] - -param( - [string]$CommitMessage = "", - [switch]$Force = $false, - [switch]$NoConfirm = $false -) - -# 设置控制台编码 -[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 - -# 颜色输出函数 -function Write-ColorOutput { - param( - [string]$Message, - [string]$Color = "White" - ) - Write-Host $Message -ForegroundColor $Color -} - -function Write-Step { - param( - [int]$Step, - [int]$Total, - [string]$Message - ) - Write-ColorOutput "[$Step/$Total] $Message" "Cyan" -} - -function Show-GitStatus { - Write-ColorOutput "`n📋 当前Git状态:" "Yellow" - $status = git status --porcelain - if ($status) { - $status | ForEach-Object { - $line = $_ - if ($line.StartsWith("??")) { - Write-ColorOutput " + $($line.Substring(3))" "Green" - } elseif ($line.StartsWith(" M")) { - Write-ColorOutput " ~ $($line.Substring(3))" "Yellow" - } elseif ($line.StartsWith(" D")) { - Write-ColorOutput " - $($line.Substring(3))" "Red" - } else { - Write-ColorOutput " $line" "White" - } - } - } else { - Write-ColorOutput " 工作区干净,无更改" "Green" - } -} - -function Get-CommitMessage { - if ($CommitMessage) { - return $CommitMessage - } - - # 尝试从最近提交生成智能消息 - $lastCommit = git log --oneline -1 2>$null - if ($lastCommit) { - $suggested = "feat: 自动提交更新 - $(Get-Date -Format 'yyyy-MM-dd HH:mm')" - } else { - $suggested = "feat: 初始提交 - $(Get-Date -Format 'yyyy-MM-dd HH:mm')" - } - - Write-ColorOutput "`n💡 建议的提交信息: $suggested" "Cyan" - $custom = Read-Host "请输入自定义提交信息 (直接回车使用建议)" - - if ($custom) { - return $custom - } else { - return $suggested - } -} - -function Test-GitRepository { - try { - git status --porcelain >$null 2>&1 - return $LASTEXITCODE -eq 0 - } catch { - return $false - } -} - -function Show-CommitStats { - Write-ColorOutput "`n📊 提交统计:" "Yellow" - $commitHash = git log --oneline -1 | Select-String -Pattern "^\w+" | ForEach-Object { $_.Matches[0].Value } - $filesChanged = git diff --cached --numstat | Measure-Object | Select-Object -ExpandProperty Count - $insertions = git diff --cached --numstat | ForEach-Object { - $parts = $_ -split '\s+' - if ($parts[0] -match '^\d+$') { [int]$parts[0] } else { 0 } - } | Measure-Object -Sum | Select-Object -ExpandProperty Sum - $deletions = git diff --cached --numstat | ForEach-Object { - $parts = $_ -split '\s+' - if ($parts[1] -match '^\d+$') { [int]$parts[1] } else { 0 } - } | Measure-Object -Sum | Select-Object -ExpandProperty Sum - - Write-ColorOutput " 提交哈希: $commitHash" "White" - Write-ColorOutput " 文件变更: $filesChanged 个文件" "White" - Write-ColorOutput " 新增行数: $insertions 行" "Green" - Write-ColorOutput " 删除行数: $deletions 行" "Red" - Write-ColorOutput " 净增加: $($insertions - $deletions) 行" "Cyan" -} - -# 主程序开始 -Write-ColorOutput "========================================" "Magenta" -Write-ColorOutput "TSP智能助手 - 自动推送脚本 v2.0" "Magenta" -Write-ColorOutput "========================================" "Magenta" - -# 检查Git仓库 -Write-Step 1 4 "检查Git仓库状态" -if (-not (Test-GitRepository)) { - Write-ColorOutput "❌ Git未初始化或不在Git仓库中" "Red" - Write-ColorOutput "请确保在正确的Git仓库目录中运行此脚本" "Yellow" - Read-Host "按任意键退出" - exit 1 -} -Write-ColorOutput "✅ Git仓库状态正常" "Green" - -# 显示状态 -Show-GitStatus - -# 检查是否有更改 -$hasChanges = git status --porcelain | Measure-Object | Select-Object -ExpandProperty Count -if ($hasChanges -eq 0) { - Write-ColorOutput "`n✅ 工作区干净,无需提交" "Green" - Read-Host "按任意键退出" - exit 0 -} - -# 显示详细状态 -Write-ColorOutput "`n📊 详细状态信息:" "Yellow" - -# 检查未暂存的更改 -$unstaged = git diff --name-only 2>$null -if ($unstaged) { - Write-ColorOutput " 未暂存更改: $($unstaged.Count) 个文件" "Yellow" - $unstaged | ForEach-Object { Write-ColorOutput " ~ $_" "Yellow" } -} else { - Write-ColorOutput " 未暂存更改: 无" "Green" -} - -# 检查已暂存的更改 -$staged = git diff --cached --name-only 2>$null -if ($staged) { - Write-ColorOutput " 已暂存更改: $($staged.Count) 个文件" "Green" - $staged | ForEach-Object { Write-ColorOutput " + $_" "Green" } -} else { - Write-ColorOutput " 已暂存更改: 无" "Green" -} - -# 检查未跟踪的文件 -$untracked = git ls-files --others --exclude-standard 2>$null -if ($untracked) { - Write-ColorOutput " 未跟踪文件: $($untracked.Count) 个文件" "Cyan" - $untracked | ForEach-Object { Write-ColorOutput " + $_" "Cyan" } -} else { - Write-ColorOutput " 未跟踪文件: 无" "Green" -} - -# 确认操作 -if (-not $NoConfirm) { - Write-ColorOutput "`n❓ 是否继续推送?" "Yellow" - $confirm = Read-Host "输入 'y' 继续,其他键取消" - if ($confirm -ne 'y') { - Write-ColorOutput "操作已取消" "Yellow" - Read-Host "按任意键退出" - exit 0 - } -} - -# 添加文件 -Write-Step 2 4 "添加所有更改到暂存区" -try { - git add . - Write-ColorOutput "✅ 文件已添加到暂存区" "Green" -} catch { - Write-ColorOutput "❌ 添加文件失败: $($_.Exception.Message)" "Red" - Read-Host "按任意键退出" - exit 1 -} - -# 生成提交信息 -Write-Step 3 4 "生成提交信息" -$finalCommitMessage = Get-CommitMessage -Write-ColorOutput "提交信息: $finalCommitMessage" "Cyan" - -# 提交更改 -try { - git commit -m $finalCommitMessage - Write-ColorOutput "✅ 提交成功" "Green" -} catch { - Write-ColorOutput "❌ 提交失败: $($_.Exception.Message)" "Red" - Read-Host "按任意键退出" - exit 1 -} - -# 推送到远程 -Write-Step 4 4 "推送到远程仓库" - -# 先尝试拉取最新更改 -Write-ColorOutput "🔄 检查远程更新..." "Cyan" -try { - git fetch origin main - Write-ColorOutput "✅ 远程更新检查完成" "Green" -} catch { - Write-ColorOutput "⚠️ 无法获取远程更新,继续推送..." "Yellow" -} - -# 推送到远程 -try { - git push origin main - Write-ColorOutput "✅ 推送成功" "Green" -} catch { - Write-ColorOutput "❌ 推送失败: $($_.Exception.Message)" "Red" - Write-ColorOutput "`n💡 可能的原因:" "Yellow" - Write-ColorOutput " - 网络连接问题" "White" - Write-ColorOutput " - 远程仓库权限不足" "White" - Write-ColorOutput " - 分支冲突" "White" - Write-ColorOutput " - 需要先拉取远程更改" "White" - - Write-ColorOutput "`n🔧 尝试自动解决冲突..." "Cyan" - try { - git pull origin main --rebase - if ($LASTEXITCODE -eq 0) { - Write-ColorOutput "✅ 冲突已解决,重新推送..." "Green" - git push origin main - if ($LASTEXITCODE -eq 0) { - Write-ColorOutput "✅ 推送成功!" "Green" - } else { - Write-ColorOutput "❌ 重新推送失败" "Red" - Write-ColorOutput "`n🔧 建议手动解决:" "Yellow" - Write-ColorOutput " 1. 运行: git pull origin main" "White" - Write-ColorOutput " 2. 解决冲突后运行: git push origin main" "White" - Read-Host "按任意键退出" - exit 1 - } - } else { - Write-ColorOutput "❌ 无法自动解决冲突" "Red" - Write-ColorOutput "`n🔧 建议手动解决:" "Yellow" - Write-ColorOutput " 1. 运行: git pull origin main" "White" - Write-ColorOutput " 2. 解决冲突后运行: git push origin main" "White" - Read-Host "按任意键退出" - exit 1 - } - } catch { - Write-ColorOutput "❌ 自动解决冲突失败: $($_.Exception.Message)" "Red" - Write-ColorOutput "`n🔧 建议手动解决:" "Yellow" - Write-ColorOutput " 1. 运行: git pull origin main" "White" - Write-ColorOutput " 2. 解决冲突后运行: git push origin main" "White" - Read-Host "按任意键退出" - exit 1 - } -} - -# 显示结果 -Write-ColorOutput "`n========================================" "Magenta" -Write-ColorOutput "✅ 推送完成!" "Green" -Write-ColorOutput "========================================" "Magenta" - -Show-CommitStats - -Write-ColorOutput "`n🌐 远程仓库状态:" "Yellow" -git status --short - -Write-ColorOutput "`n🎉 所有操作完成!" "Green" -if (-not $NoConfirm) { - Read-Host "按任意键退出" -} diff --git a/check_and_fix_users.py b/check_and_fix_users.py deleted file mode 100644 index a330049..0000000 --- a/check_and_fix_users.py +++ /dev/null @@ -1,147 +0,0 @@ -# -*- coding: utf-8 -*- -import sys -import os -sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) - -from src.core.database import db_manager -from sqlalchemy import text, inspect - -print("Checking users table structure...") - -try: - with db_manager.get_session() as session: - inspector = inspect(db_manager.engine) - cols = inspector.get_columns('users') - - print("\nUsers table columns:") - required_fields = {} - optional_fields = {} - - for col in cols: - name = col['name'] - nullable = col.get('nullable', True) - default = col.get('default', None) - - if nullable or default is not None: - optional_fields[name] = col - print(f" {name}: {col['type']} (nullable: {nullable}, default: {default})") - else: - required_fields[name] = col - print(f" {name}: {col['type']} (REQUIRED, nullable: {nullable})") - - print(f"\nRequired fields: {list(required_fields.keys())}") - print(f"Optional fields: {list(optional_fields.keys())}") - - # Check for existing admin user - result = session.execute(text("SELECT * FROM users WHERE username = 'admin' LIMIT 1")) - admin_row = result.fetchone() - - if admin_row: - print("\nAdmin user found in database") - # Update password - from werkzeug.security import generate_password_hash - password_hash = generate_password_hash('admin123') - session.execute(text(""" - UPDATE users - SET password_hash = :password_hash, - is_active = 1, - updated_at = NOW() - WHERE username = 'admin' - """), {'password_hash': password_hash}) - session.commit() - print("Admin password updated successfully") - else: - print("\nAdmin user not found, creating...") - from werkzeug.security import generate_password_hash - password_hash = generate_password_hash('admin123') - - # Build INSERT with all required fields - insert_fields = ['username', 'email', 'password_hash', 'role'] - insert_values = { - 'username': 'admin', - 'email': 'admin@tsp.com', - 'password_hash': password_hash, - 'role': 'admin' - } - - # Add optional fields that exist in table - if 'is_active' in optional_fields or 'is_active' not in required_fields: - insert_fields.append('is_active') - insert_values['is_active'] = True - - if 'region' in optional_fields or 'region' not in required_fields: - insert_fields.append('region') - insert_values['region'] = None - - # Handle full_name if it exists - if 'full_name' in required_fields: - insert_fields.append('full_name') - insert_values['full_name'] = 'Administrator' - elif 'full_name' in optional_fields: - insert_fields.append('full_name') - insert_values['full_name'] = 'Administrator' - - # Handle other required fields with defaults - for field_name in required_fields: - if field_name not in insert_fields: - if field_name in ['created_at', 'updated_at']: - insert_fields.append(field_name) - insert_values[field_name] = 'NOW()' - else: - # Use empty string or default value - insert_fields.append(field_name) - insert_values[field_name] = '' - - fields_str = ', '.join(insert_fields) - values_str = ', '.join([f':{f}' for f in insert_fields]) - - sql = f""" - INSERT INTO users ({fields_str}) - VALUES ({values_str}) - """ - - # Fix NOW() placeholders - final_values = {} - for k, v in insert_values.items(): - if v == 'NOW()': - # Will use SQL NOW() - continue - final_values[k] = v - - # Use raw SQL with NOW() - sql_final = f""" - INSERT INTO users ({fields_str.replace(':created_at', 'created_at').replace(':updated_at', 'updated_at')}) - VALUES ({values_str.replace(':created_at', 'NOW()').replace(':updated_at', 'NOW()')}) - """ - - # Clean up the SQL - for k in ['created_at', 'updated_at']: - if f':{k}' in values_str: - values_str = values_str.replace(f':{k}', 'NOW()') - if k in final_values: - del final_values[k] - - # Final SQL construction - final_sql = f"INSERT INTO users ({', '.join([f if f not in ['created_at', 'updated_at'] else f for f in insert_fields])}) VALUES ({', '.join([f':{f}' if f not in ['created_at', 'updated_at'] else 'NOW()' for f in insert_fields])})" - - print(f"Executing SQL with fields: {insert_fields}") - session.execute(text(final_sql), final_values) - session.commit() - print("Admin user created successfully") - - # Verify - result = session.execute(text("SELECT username, email, role, is_active FROM users WHERE username = 'admin'")) - admin_data = result.fetchone() - if admin_data: - print(f"\nVerification:") - print(f" Username: {admin_data[0]}") - print(f" Email: {admin_data[1]}") - print(f" Role: {admin_data[2]}") - print(f" Is Active: {admin_data[3]}") - print("\nAdmin user ready for login!") - -except Exception as e: - print(f"Error: {e}") - import traceback - traceback.print_exc() - diff --git a/check_encoding.py b/check_encoding.py deleted file mode 100644 index f00431a..0000000 --- a/check_encoding.py +++ /dev/null @@ -1,157 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -文件编码检查工具 -检查项目中所有文件是否使用UTF-8编码 -""" - -import os -import sys -import chardet -from pathlib import Path - -def check_file_encoding(file_path: Path) -> dict: - """检查文件编码""" - try: - with open(file_path, 'rb') as f: - raw_data = f.read() - result = chardet.detect(raw_data) - encoding = result.get('encoding', 'unknown') - confidence = result.get('confidence', 0) - - # 检查文件是否有BOM - has_bom = False - if raw_data.startswith(b'\xef\xbb\xbf'): - has_bom = True - encoding = 'utf-8-sig' - - return { - 'file': str(file_path), - 'encoding': encoding, - 'confidence': confidence, - 'has_bom': has_bom, - 'is_utf8': encoding.lower() in ['utf-8', 'utf-8-sig', 'ascii'], - 'size': len(raw_data) - } - except Exception as e: - return { - 'file': str(file_path), - 'error': str(e) - } - -def check_python_file_header(file_path: Path) -> bool: - """检查Python文件是否有编码声明""" - try: - with open(file_path, 'r', encoding='utf-8') as f: - first_lines = [f.readline() for _ in range(3)] - for line in first_lines: - if 'coding' in line.lower() or 'encoding' in line.lower(): - return True - return False - except: - return False - -def main(): - """主函数""" - project_root = Path(__file__).parent - - # 需要检查的文件扩展名 - check_extensions = {'.py', '.json', '.md', '.txt', '.html', '.css', '.js', '.sql', '.bat', '.sh'} - - # 排除的目录 - exclude_dirs = {'.git', '.venv', '__pycache__', 'node_modules', '.idea', 'logs', 'data', 'dist', 'build'} - - results = [] - python_files_without_encoding = [] - - print("=" * 80) - print("文件编码检查工具") - print("=" * 80) - print() - - # 遍历所有文件 - for root, dirs, files in os.walk(project_root): - # 排除指定目录 - dirs[:] = [d for d in dirs if d not in exclude_dirs] - - for file in files: - file_path = Path(root) / file - - # 只检查指定扩展名的文件 - if file_path.suffix.lower() not in check_extensions: - continue - - # 检查编码 - result = check_file_encoding(file_path) - results.append(result) - - # 检查Python文件的编码声明 - if file_path.suffix == '.py': - if not check_python_file_header(file_path): - python_files_without_encoding.append(file_path) - - # 统计结果 - total_files = len(results) - utf8_files = sum(1 for r in results if r.get('is_utf8', False)) - non_utf8_files = total_files - utf8_files - - print(f"总计检查文件: {total_files}") - print(f"UTF-8 编码文件: {utf8_files}") - print(f"非 UTF-8 编码文件: {non_utf8_files}") - print() - - # 显示非UTF-8文件 - if non_utf8_files > 0: - print("=" * 80) - print("⚠️ 非 UTF-8 编码文件:") - print("=" * 80) - for result in results: - if not result.get('is_utf8', False) and 'error' not in result: - print(f" {result['file']}") - print(f" 编码: {result['encoding']} (置信度: {result['confidence']:.2%})") - if result.get('has_bom'): - print(f" ⚠️ 包含 BOM") - print() - - # 显示缺少编码声明的Python文件 - if python_files_without_encoding: - print("=" * 80) - print("⚠️ Python 文件缺少编码声明:") - print("=" * 80) - for file_path in python_files_without_encoding: - print(f" {file_path}") - print() - print("建议在这些文件开头添加: # -*- coding: utf-8 -*-") - print() - - # 显示错误 - errors = [r for r in results if 'error' in r] - if errors: - print("=" * 80) - print("❌ 检查出错的文件:") - print("=" * 80) - for result in errors: - print(f" {result['file']}: {result['error']}") - print() - - # 总结 - print("=" * 80) - if non_utf8_files == 0 and not python_files_without_encoding: - print("✅ 所有文件编码检查通过!") - else: - print("⚠️ 发现编码问题,请根据上述信息修复") - print("=" * 80) - - return non_utf8_files == 0 and not python_files_without_encoding - -if __name__ == "__main__": - try: - import chardet - except ImportError: - print("错误: 需要安装 chardet 库") - print("运行: pip install chardet") - sys.exit(1) - - success = main() - sys.exit(0 if success else 1) - diff --git a/config/__pycache__/llm_config.cpython-311.pyc b/config/__pycache__/llm_config.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7942acb4573b5cb139ecff65f67852f8136b4f48 GIT binary patch literal 1996 zcma)7UrbY17(e&+|D~m+eqHeRyTUrnSUA8IWX2Q@-mqo(TT<*Dr8{6LQ-dhoZ z330lSY&u4as4-d-$1ob=l4VyUx-z@4Jbx>9XlE1Aq{2oyRZ!G?q}Z0< zT1kU@@0fLKLY7X6SdeuKmk`4zg)!Ya#3@2JDMxh^(G%6HR3VlSWKK=Wg3iRa(_vLQ zDZ~}s3}=XQ;`mlL{+N`M+0vW^O)O|)M+8|IcMK;~wms0n!uBD_Z<0xburKg8P~_p|B}3% z18sLJ8ehnS?A;_2a(t6a8)i1igxc67(}AluGVeJz*4r_(9jV1?E_q@Hk{JrA_Gf4X~)&dQbC0LKUUBUVX6l(Ebnmj)!}W^dCC> zj^7{`_nJ$3bt~DAMP60NZn((W_Jex|d8pSxPEkZfg)uq6;4?dc#F+jPF^%DwNk%su zp$U|{23`3RU=kG=m#Im!cBMCdTFut!`mY-Peb!2@Vnzv!LZ>BF*H-8}GZOwXHD~xo2%lL+}z9G$BKf7yY*Ok%q z&b=A;zN~wnR@;2je$Afx_=^5mljcIH7E0{pEy1J^k;f`ky1P`>MU)pPWEQVjr6kxyKs$0Tg zEb-y6?j<4QhK0BqC^|4I!cZ;-s_OlZdi%>!(H%#Q_V({Tygqg9??3+T2S<(`?kTUx z^%5MM#14U5y`Dxb&wm9o za@J0Xn!}^nLz?4ljcL$a9?j_impEx~iIWDGIO)l%f)~})PunzyPqX_qrmjq@GS>hN z;0b|AN5O@>jnmzlqgJyAHD*VJ<|Q;Qp?T>vauwXj-8flYF#D*cl&yf^=Y=4@0+;z0 DPN*AB literal 0 HcmV?d00001 diff --git a/config/unified_config.json b/config/unified_config.json index 8223b8d..ebe5870 100644 --- a/config/unified_config.json +++ b/config/unified_config.json @@ -7,10 +7,10 @@ "pool_recycle": 3600 }, "llm": { - "provider": "openai", - "api_key": "", + "provider": "qwen", + "api_key": "sk-c0dbefa1718d46eaa897199135066f00", "base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1", - "model": "qwen-turbo", + "model": "qwen-plus-latest", "temperature": 0.7, "max_tokens": 2000, "timeout": 30 diff --git a/convert_encoding.bat b/convert_encoding.bat deleted file mode 100644 index a976581..0000000 --- a/convert_encoding.bat +++ /dev/null @@ -1,94 +0,0 @@ -@echo off -setlocal enabledelayedexpansion -chcp 65001 >nul 2>&1 -echo ======================================== -echo 代码文件编码批量转换工具 -echo ======================================== -echo. - -:: 设置要扫描的文件扩展名 -set "extensions=*.py *.java *.js *.ts *.html *.css *.xml *.json *.md *.txt *.bat *.cmd *.ps1 *.sh *.yml *.yaml *.ini *.cfg *.conf *.properties" - -:: 设置目标目录(默认为当前目录) -set "target_dir=%cd%" -if not "%~1"=="" set "target_dir=%~1" - -echo 目标目录: %target_dir% -echo. - -:: 检查目录是否存在 -if not exist "%target_dir%" ( - echo 错误:指定的目录不存在 - pause - exit /b 1 -) - -:: 创建临时目录 -set "temp_dir=%temp%\encoding_convert_%random%" -mkdir "%temp_dir%" - -:: 统计变量 -set "total_files=0" -set "converted_files=0" -set "skipped_files=0" - -echo 开始扫描文件... -echo. - -:: 遍历所有指定扩展名的文件 -for %%e in (%extensions%) do ( - for /r "%target_dir%" %%f in (%%e) do ( - set /a total_files+=1 - call :process_file "%%f" - ) -) - -echo. -echo ======================================== -echo 转换完成 -echo ======================================== -echo 总文件数: %total_files% -echo 已转换: %converted_files% -echo 已跳过: %skipped_files% -echo. - -:: 清理临时目录 -rd /s /q "%temp_dir%" 2>nul - -pause -exit /b - -:process_file -set "file=%~1" -set "is_utf8=0" - -:: 检查文件是否已经是UTF-8编码 -powershell -Command "try { $content = [System.IO.File]::ReadAllText('%file%', [System.Text.Encoding]::UTF8); $content | Out-Null; exit 0 } catch { exit 1 }" >nul 2>&1 -if %errorlevel% equ 0 set "is_utf8=1" - -if %is_utf8% equ 1 ( - echo [跳过] %file% (已经是UTF-8) - set /a skipped_files+=1 -) else ( - echo [转换] %file% - - :: 尝试检测并转换编码 - powershell -Command ^ - "$path = '%file%'; ^ - try { ^ - $bytes = [System.IO.File]::ReadAllBytes($path); ^ - $encoding = [System.Text.Encoding]::GetEncoding('GB2312'); ^ - $content = $encoding.GetString($bytes); ^ - [System.IO.File]::WriteAllText($path, $content, [System.Text.Encoding]::UTF8); ^ - exit 0 ^ - } catch { ^ - exit 1 ^ - }" - - if %errorlevel% equ 0 ( - set /a converted_files+=1 - ) else ( - echo [警告] 无法转换 %file% - ) -) -goto :eof diff --git a/create_admin_user.py b/create_admin_user.py index 480348c..1ccc740 100644 --- a/create_admin_user.py +++ b/create_admin_user.py @@ -9,7 +9,7 @@ sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from src.core.database import db_manager from src.core.models import User -from werkzeug.security import generate_password_hash, check_password_hash +# from werkzeug.security import generate_password_hash, check_password_hash from sqlalchemy import text, inspect print("=" * 60) @@ -37,12 +37,12 @@ try: print(f" 激活状态: {admin_user.is_active}") # 验证密码 - password_ok = check_password_hash(admin_user.password_hash, 'admin123') + password_ok = admin_user.check_password('admin123') print(f" 密码验证: {'正确' if password_ok else '错误'}") if not password_ok: print("\n密码不匹配,正在更新密码...") - admin_user.password_hash = generate_password_hash('admin123') + admin_user.set_password('admin123') admin_user.is_active = True if hasattr(admin_user, 'region'): admin_user.region = None @@ -56,7 +56,7 @@ try: print("用户已激活") # 最终验证 - test_password = check_password_hash(admin_user.password_hash, 'admin123') + test_password = admin_user.check_password('admin123') if test_password and admin_user.is_active: print("\n管理员用户已就绪!") print(" 用户名: admin") @@ -69,8 +69,10 @@ try: else: print("\n未找到admin用户,正在创建...") - # 准备密码哈希 - password_hash = generate_password_hash('admin123') + # 创建用户对象来生成密码哈希 + temp_user = User() + temp_user.set_password('admin123') + password_hash = temp_user.password_hash # 检查表结构,使用SQL直接插入避免字段不匹配 try: @@ -78,6 +80,7 @@ try: new_admin = User( username='admin', email='admin@tsp.com', + name='系统管理员', password_hash=password_hash, role='admin', is_active=True @@ -93,10 +96,11 @@ try: session.rollback() # 使用SQL直接插入 - insert_fields = ['username', 'email', 'password_hash', 'role'] + insert_fields = ['username', 'email', 'name', 'password_hash', 'role'] insert_values = { 'username': 'admin', 'email': 'admin@tsp.com', + 'name': '系统管理员', 'password_hash': password_hash, 'role': 'admin' } @@ -124,7 +128,7 @@ try: # 验证创建结果 verify_user = session.query(User).filter(User.username == 'admin').first() if verify_user: - test_password = check_password_hash(verify_user.password_hash, 'admin123') + test_password = verify_user.check_password('admin123') print(f"\n验证结果:") print(f" 用户ID: {verify_user.id}") print(f" 密码正确: {test_password}") @@ -138,9 +142,9 @@ try: print("\n警告: 用户创建成功但状态异常") # 创建其他示例用户 - for username, email, password, role, region in [ - ('overseas_ops', 'overseas@tsp.com', 'ops123', 'overseas_ops', 'overseas'), - ('domestic_ops', 'domestic@tsp.com', 'ops123', 'domestic_ops', 'domestic') + for username, name, email, password, role, region in [ + ('overseas_ops', '海外运维', 'overseas@tsp.com', 'ops123', 'overseas_ops', 'overseas'), + ('domestic_ops', '国内运维', 'domestic@tsp.com', 'ops123', 'domestic_ops', 'domestic') ]: ops_user = session.query(User).filter(User.username == username).first() if not ops_user: @@ -148,11 +152,12 @@ try: try: new_user = User( username=username, + name=name, email=email, - password_hash=generate_password_hash(password), role=role, is_active=True ) + new_user.set_password(password) if 'region' in existing_columns: new_user.region = region session.add(new_user) diff --git a/database_init_report.json b/database_init_report.json deleted file mode 100644 index 4d99062..0000000 --- a/database_init_report.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "init_time": "2025-10-31T12:46:01.637890", - "database_version": "MySQL 8.4.6", - "database_url": "mysql+pymysql://tsp_assistant:***@43.134.68.207/tsp_assistant?charset=utf8mb4", - "migrations_applied": 0, - "tables_created": 16, - "initial_data_inserted": true, - "verification_passed": true -} \ No newline at end of file diff --git a/database_migration_notes.md b/database_migration_notes.md deleted file mode 100644 index 5114108..0000000 --- a/database_migration_notes.md +++ /dev/null @@ -1,119 +0,0 @@ -# 数据库迁移说明 - -## 工单处理过程记录系统迁移 - -### 新增表:`work_order_process_history` - -```sql -CREATE TABLE IF NOT EXISTS work_order_process_history ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - work_order_id INTEGER NOT NULL, - processor_name VARCHAR(100) NOT NULL, - processor_role VARCHAR(50), - processor_region VARCHAR(50), - process_content TEXT NOT NULL, - action_type VARCHAR(50) NOT NULL, - previous_status VARCHAR(50), - new_status VARCHAR(50), - assigned_module VARCHAR(50), - process_time DATETIME NOT NULL, - created_at DATETIME DEFAULT CURRENT_TIMESTAMP, - FOREIGN KEY (work_order_id) REFERENCES work_orders(id) -); - -CREATE INDEX idx_process_history_workorder ON work_order_process_history(work_order_id); -CREATE INDEX idx_process_history_time ON work_order_process_history(process_time); -``` - -### WorkOrder表新增字段 - -如果使用SQLite,可以使用以下SQL添加字段: - -```sql --- 注意:SQLite不支持直接ALTER TABLE添加多个列,需要逐个添加 - -ALTER TABLE work_orders ADD COLUMN assigned_module VARCHAR(50); -ALTER TABLE work_orders ADD COLUMN module_owner VARCHAR(100); -ALTER TABLE work_orders ADD COLUMN dispatcher VARCHAR(100); -ALTER TABLE work_orders ADD COLUMN dispatch_time DATETIME; -ALTER TABLE work_orders ADD COLUMN region VARCHAR(50); -``` - -### 使用Python脚本迁移(推荐) - -创建迁移脚本 `migrate_process_history.py`: - -```python -# -*- coding: utf-8 -*- -""" -数据库迁移脚本:添加工单处理过程记录表和相关字段 -""" -from src.core.database import db_manager -from src.core.models import Base, WorkOrderProcessHistory -from sqlalchemy import text - -def migrate_database(): - """执行数据库迁移""" - try: - with db_manager.get_session() as session: - # 创建新表 - WorkOrderProcessHistory.__table__.create(db_manager.engine, checkfirst=True) - - # 检查并添加新字段(SQLite需要特殊处理) - try: - # 尝试添加字段(如果已存在会报错,可以忽略) - session.execute(text("ALTER TABLE work_orders ADD COLUMN assigned_module VARCHAR(50)")) - except Exception as e: - print(f"字段 assigned_module 可能已存在: {e}") - - try: - session.execute(text("ALTER TABLE work_orders ADD COLUMN module_owner VARCHAR(100)")) - except Exception as e: - print(f"字段 module_owner 可能已存在: {e}") - - try: - session.execute(text("ALTER TABLE work_orders ADD COLUMN dispatcher VARCHAR(100)")) - except Exception as e: - print(f"字段 dispatcher 可能已存在: {e}") - - try: - session.execute(text("ALTER TABLE work_orders ADD COLUMN dispatch_time DATETIME")) - except Exception as e: - print(f"字段 dispatch_time 可能已存在: {e}") - - try: - session.execute(text("ALTER TABLE work_orders ADD COLUMN region VARCHAR(50)")) - except Exception as e: - print(f"字段 region 可能已存在: {e}") - - session.commit() - print("数据库迁移完成!") - - except Exception as e: - print(f"数据库迁移失败: {e}") - raise - -if __name__ == "__main__": - migrate_database() -``` - -### 执行迁移 - -运行迁移脚本: -```bash -python migrate_process_history.py -``` - -或者直接在Python交互式环境中执行: -```python -from migrate_process_history import migrate_database -migrate_database() -``` - -## 注意事项 - -1. **备份数据库**:在执行迁移前,请务必备份现有数据库 -2. **SQLite限制**:如果使用SQLite,ALTER TABLE添加列的操作在某些情况下可能失败,如果字段已存在会报错 -3. **数据迁移**:现有工单的处理过程历史记录(存储在`resolution`字段中的)不会自动迁移到新表,需要手动处理 -4. **索引优化**:新表已包含必要的索引,如果数据量大可以考虑添加更多索引 - diff --git a/fix_admin_user.py b/fix_admin_user.py deleted file mode 100644 index 94d2770..0000000 --- a/fix_admin_user.py +++ /dev/null @@ -1,86 +0,0 @@ -# -*- coding: utf-8 -*- -""" -修复管理员用户 -""" - -import sys -import os -sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) - -from src.core.database import db_manager -from sqlalchemy import text -from werkzeug.security import generate_password_hash - -print("Fixing admin user...") - -try: - with db_manager.get_session() as session: - # Check if admin user exists - result = session.execute(text("SELECT id FROM users WHERE username = 'admin'")) - admin_row = result.fetchone() - - password_hash = generate_password_hash('admin123') - - if admin_row: - print("Admin user exists, updating password...") - session.execute(text(""" - UPDATE users - SET password_hash = :password_hash, - is_active = 1, - updated_at = NOW() - WHERE username = 'admin' - """), {'password_hash': password_hash}) - session.commit() - print("Admin password updated successfully") - else: - print("Admin user not found, creating...") - session.execute(text(""" - INSERT INTO users ( - username, email, password_hash, role, full_name, - is_active, region, created_at, updated_at - ) VALUES ( - 'admin', 'admin@tsp.com', :password_hash, 'admin', 'Administrator', - 1, NULL, NOW(), NOW() - ) - """), {'password_hash': password_hash}) - session.commit() - print("Admin user created successfully") - - # Verify - result = session.execute(text(""" - SELECT username, email, role, is_active, full_name - FROM users - WHERE username = 'admin' - """)) - admin_data = result.fetchone() - - if admin_data: - print("\nVerification:") - print(f" Username: {admin_data[0]}") - print(f" Email: {admin_data[1]}") - print(f" Role: {admin_data[2]}") - print(f" Is Active: {admin_data[3]}") - print(f" Full Name: {admin_data[4]}") - - # Test password verification - result = session.execute(text("SELECT password_hash FROM users WHERE username = 'admin'")) - stored_hash = result.fetchone()[0] - from werkzeug.security import check_password_hash - password_ok = check_password_hash(stored_hash, 'admin123') - print(f" Password Check: {'PASS' if password_ok else 'FAIL'}") - - if password_ok and admin_data[3]: - print("\n[SUCCESS] Admin user is ready for login!") - print(" Username: admin") - print(" Password: admin123") - else: - print("\n[WARNING] User exists but password or status issue") - else: - print("\n[ERROR] User not found after creation") - -except Exception as e: - print(f"Error: {e}") - import traceback - traceback.print_exc() - sys.exit(1) - diff --git a/fix_git_push.bat b/fix_git_push.bat deleted file mode 100644 index 942c84e..0000000 --- a/fix_git_push.bat +++ /dev/null @@ -1,161 +0,0 @@ -@echo off -setlocal enabledelayedexpansion -chcp 65001 >nul 2>&1 -echo ======================================== -echo Git推送问题诊断和修复工具 -echo ======================================== -echo. - -:: 1. 检查Git状态 -echo [1] 检查Git状态... -git status >nul 2>&1 -if %errorlevel% neq 0 ( - echo ? Git未初始化或不可用 - echo 请确保: - echo 1. 已安装Git - echo 2. 当前目录是Git仓库 - pause - exit /b 1 -) -echo ? Git状态正常 -echo. - -:: 2. 检查远程仓库配置 -echo [2] 检查远程仓库配置... -git remote -v >nul 2>&1 -if %errorlevel% neq 0 ( - echo ? 未配置远程仓库 - echo 请先运行: git remote add origin ^<仓库地址^> - pause - exit /b 1 -) -echo ? 远程仓库配置正常 -git remote -v -echo. - -:: 3. 检查当前分支 -echo [3] 检查当前分支... -for /f "tokens=*" %%b in ('git branch --show-current 2^>nul') do set current_branch=%%b -if "!current_branch!"=="" ( - echo ? 无法获取当前分支信息 - pause - exit /b 1 -) -echo 当前分支: !current_branch! -echo. - -:: 4. 检查是否有未提交的更改 -echo [4] 检查未提交的更改... -git status --porcelain >nul 2>&1 -if %errorlevel% equ 0 ( - git status --porcelain | findstr /r "." >nul - if !errorlevel! equ 0 ( - echo ?? 有未提交的更改 - set /p commit="是否先提交更改? (y/n): " - if /i "!commit!"=="y" ( - git add . - set /p msg="请输入提交信息: " - if "!msg!"=="" set msg=自动提交 - git commit -m "!msg!" - if !errorlevel! neq 0 ( - echo ? 提交失败 - pause - exit /b 1 - ) - ) - ) -) -echo ? 暂存区状态正常 -echo. - -:: 5. 尝试获取远程分支信息 -echo [5] 获取远程分支信息... -git fetch origin >nul 2>&1 -if %errorlevel% neq 0 ( - echo ? 无法连接到远程仓库 - echo. - echo 可能的原因: - echo 1. 网络连接问题 - echo 2. 远程仓库地址错误 - echo 3. 需要认证(请检查是否已配置SSH密钥或Token) - echo. - echo 远程仓库地址: - git config --get remote.origin.url - echo. - echo 解决建议: - echo 1. 检查网络连接 - echo 2. 验证远程仓库地址 - echo 3. 配置SSH密钥或访问令牌 - pause - exit /b 1 -) -echo ? 远程仓库连接成功 -echo. - -:: 6. 检查分支跟踪关系 -echo [6] 检查分支跟踪关系... -git branch -vv -echo. - -:: 7. 尝试推送到远程 -echo [7] 尝试推送... -echo 当前分支: !current_branch! -echo. - -:: 检查远程是否存在该分支 -git ls-remote --heads origin !current_branch! >nul 2>&1 -if %errorlevel% equ 0 ( - echo 远程分支 !current_branch! 已存在 - echo. - echo 尝试使用当前分支名称推送... - git push origin !current_branch! - if !errorlevel! neq 0 ( - echo. - echo ? 推送失败,尝试拉取最新更改... - git pull origin !current_branch! --rebase - if !errorlevel! equ 0 ( - echo ? 重新尝试推送... - git push origin !current_branch! - ) else ( - echo ? 拉取失败,请检查冲突 - pause - exit /b 1 - ) - ) -) else ( - echo 远程分支 !current_branch! 不存在 - echo. - echo 尝试设置上游并推送... - git push -u origin !current_branch! -) - -if %errorlevel% equ 0 ( - echo. - echo ? 推送成功! -) else ( - echo. - echo ? 推送失败 - echo. - echo ? 常见问题和解决方案: - echo. - echo 1. 如果是认证问题: - echo - 检查SSH密钥: ssh -T git@github.com (GitHub) 或 ssh -T git@gitee.com (Gitee) - echo - 或使用HTTPS + Token方式 - echo. - echo 2. 如果是分支冲突: - echo - 运行: git pull origin !current_branch! --rebase - echo - 解决冲突后: git push origin !current_branch! - echo. - echo 3. 如果远程分支名称不同: - echo - 检查远程分支: git branch -r - echo - 可能需要推送主分支: git push origin main 或 git push origin master - echo. - pause - exit /b 1 -) - -echo. -echo ======================================== -echo ? 诊断完成! -echo ======================================== -pause diff --git a/git_push.bat b/git_push.bat new file mode 100644 index 0000000..24b1214 --- /dev/null +++ b/git_push.bat @@ -0,0 +1,26 @@ +@echo off + +rem 获取当前日期和时间 +for /f "tokens=1-6 delims=/ " %%a in ('date /t') do set CDATE=%%a-%%b-%%c +for /f "tokens=1-2 delims=:\ " %%a in ('time /t') do set CTIME=%%a-%%b + +set COMMIT_MESSAGE="feat: %CDATE% %CTIME% - 全面架构重构、功能增强及问题修复" + +rem 添加所有变更到暂存区 +git add . + +rem 检查是否有文件被添加、修改或删除 +git diff --cached --quiet +if %errorlevel% equ 0 ( + echo 没有检测到需要提交的变更。 +) else ( + rem 提交变更 + git commit -m %COMMIT_MESSAGE% + + rem 推送变更到远程仓库 + git push origin master + + echo Git 推送完成! +) + +pause diff --git a/git_push.sh b/git_push.sh new file mode 100644 index 0000000..da7c16d --- /dev/null +++ b/git_push.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# 获取当前日期和时间 +COMMIT_DATE=$(date +"%Y-%m-%d %H:%M:%S") + +# 添加所有变更到暂存区 +git add . + +# 检查是否有文件被添加、修改或删除 +if git diff --cached --quiet; then + echo "没有检测到需要提交的变更。" +else + # 创建提交消息 + COMMIT_MESSAGE="feat: ${COMMIT_DATE} - 全面架构重构、功能增强及问题修复" + + # 提交变更 + git commit -m "$COMMIT_MESSAGE" + + # 推送变更到远程仓库 + git push origin master + + echo "Git 推送完成!" +fi diff --git a/init.sql b/init.sql deleted file mode 100644 index 10e11c4..0000000 --- a/init.sql +++ /dev/null @@ -1,211 +0,0 @@ --- TSP智能助手数据库初始化脚本 - --- 创建数据库(如果不存在) -CREATE DATABASE IF NOT EXISTS tsp_assistant CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - --- 使用数据库 -USE tsp_assistant; - --- 创建用户表 -CREATE TABLE IF NOT EXISTS users ( - id INT AUTO_INCREMENT PRIMARY KEY, - username VARCHAR(50) UNIQUE NOT NULL, - email VARCHAR(100) UNIQUE NOT NULL, - password_hash VARCHAR(255) NOT NULL, - role ENUM('admin', 'user', 'operator') DEFAULT 'user', - is_active BOOLEAN DEFAULT TRUE, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -); - --- 创建工单表 -CREATE TABLE IF NOT EXISTS work_orders ( - id INT AUTO_INCREMENT PRIMARY KEY, - order_id VARCHAR(50) UNIQUE NOT NULL, - title VARCHAR(200) NOT NULL, - description TEXT NOT NULL, - category VARCHAR(100) NOT NULL, - priority VARCHAR(20) NOT NULL DEFAULT 'medium', - status VARCHAR(20) NOT NULL DEFAULT 'pending', - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - resolution TEXT, - satisfaction_score FLOAT, - - -- 飞书集成字段 - feishu_record_id VARCHAR(100) UNIQUE, - assignee VARCHAR(100), - solution TEXT, - ai_suggestion TEXT, - - -- 扩展飞书字段 - source VARCHAR(50), - module VARCHAR(100), - created_by VARCHAR(100), - wilfulness VARCHAR(100), - date_of_close TIMESTAMP NULL, - vehicle_type VARCHAR(100), - vin_sim VARCHAR(50), - app_remote_control_version VARCHAR(100), - hmi_sw VARCHAR(100), - parent_record VARCHAR(100), - has_updated_same_day VARCHAR(50), - operating_time VARCHAR(100), - - -- 工单分发和权限管理字段 - assigned_module VARCHAR(50), - module_owner VARCHAR(100), - dispatcher VARCHAR(100), - dispatch_time TIMESTAMP NULL, - region VARCHAR(50), - - INDEX idx_order_id (order_id), - INDEX idx_status (status), - INDEX idx_priority (priority), - INDEX idx_created_at (created_at), - INDEX idx_assigned_module (assigned_module), - INDEX idx_region (region), - INDEX idx_feishu_record_id (feishu_record_id) -); - --- 创建预警表 -CREATE TABLE IF NOT EXISTS alerts ( - id INT AUTO_INCREMENT PRIMARY KEY, - rule_name VARCHAR(100) NOT NULL, - alert_type VARCHAR(50) NOT NULL, - level VARCHAR(20) NOT NULL DEFAULT 'info', - severity VARCHAR(20) NOT NULL DEFAULT 'medium', - message TEXT NOT NULL, - data TEXT, - is_active BOOLEAN DEFAULT TRUE, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - resolved_at TIMESTAMP NULL, - INDEX idx_level (level), - INDEX idx_alert_type (alert_type), - INDEX idx_severity (severity), - INDEX idx_is_active (is_active), - INDEX idx_created_at (created_at) -); - --- 创建对话表 -CREATE TABLE IF NOT EXISTS conversations ( - id INT AUTO_INCREMENT PRIMARY KEY, - work_order_id INT, - user_message TEXT NOT NULL, - assistant_response TEXT NOT NULL, - timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - confidence_score FLOAT, - knowledge_used TEXT, - response_time FLOAT, - FOREIGN KEY (work_order_id) REFERENCES work_orders(id) ON DELETE CASCADE, - INDEX idx_work_order_id (work_order_id), - INDEX idx_timestamp (timestamp) -); - --- 创建知识库表 -CREATE TABLE IF NOT EXISTS knowledge_entries ( - id INT AUTO_INCREMENT PRIMARY KEY, - question TEXT NOT NULL, - answer TEXT NOT NULL, - category VARCHAR(100) NOT NULL, - confidence_score FLOAT DEFAULT 0.0, - usage_count INT DEFAULT 0, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - is_active BOOLEAN DEFAULT TRUE, - is_verified BOOLEAN DEFAULT FALSE, - verified_by VARCHAR(100), - verified_at TIMESTAMP NULL, - vector_embedding TEXT, - INDEX idx_category (category), - INDEX idx_is_active (is_active), - INDEX idx_is_verified (is_verified) -); - --- 创建工单建议表 -CREATE TABLE IF NOT EXISTS work_order_suggestions ( - id INT AUTO_INCREMENT PRIMARY KEY, - work_order_id INT NOT NULL, - ai_suggestion TEXT, - human_resolution TEXT, - ai_similarity FLOAT, - approved BOOLEAN DEFAULT FALSE, - use_human_resolution BOOLEAN DEFAULT FALSE, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - FOREIGN KEY (work_order_id) REFERENCES work_orders(id) ON DELETE CASCADE, - INDEX idx_work_order_id (work_order_id), - INDEX idx_approved (approved) -); - --- 创建工单处理过程记录表 -CREATE TABLE IF NOT EXISTS work_order_process_history ( - id INT AUTO_INCREMENT PRIMARY KEY, - work_order_id INT NOT NULL, - processor_name VARCHAR(100) NOT NULL, - processor_role VARCHAR(50), - processor_region VARCHAR(50), - process_content TEXT NOT NULL, - action_type VARCHAR(50) NOT NULL, - previous_status VARCHAR(50), - new_status VARCHAR(50), - assigned_module VARCHAR(50), - process_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - FOREIGN KEY (work_order_id) REFERENCES work_orders(id) ON DELETE CASCADE, - INDEX idx_work_order_id (work_order_id), - INDEX idx_process_time (process_time), - INDEX idx_action_type (action_type), - INDEX idx_processor_name (processor_name) -); - --- 创建系统配置表 -CREATE TABLE IF NOT EXISTS system_settings ( - id INT AUTO_INCREMENT PRIMARY KEY, - key_name VARCHAR(100) UNIQUE NOT NULL, - value TEXT, - description TEXT, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -); - --- 插入默认管理员用户 -INSERT IGNORE INTO users (username, email, password_hash, role) VALUES -('admin', 'admin@tsp.com', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewdBPj4J/8K8K8K8', 'admin'); - --- 插入默认系统配置 -INSERT IGNORE INTO system_settings (key_name, value, description) VALUES -('system_name', 'TSP智能助手', '系统名称'), -('version', '2.0.0', '系统版本'), -('maintenance_mode', 'false', '维护模式'), -('max_concurrent_users', '100', '最大并发用户数'), -('session_timeout', '3600', '会话超时时间(秒)'); - --- 创建分析统计表 -CREATE TABLE IF NOT EXISTS analytics ( - id INT AUTO_INCREMENT PRIMARY KEY, - date TIMESTAMP NOT NULL, - total_orders INT DEFAULT 0, - resolved_orders INT DEFAULT 0, - avg_resolution_time FLOAT DEFAULT 0.0, - satisfaction_avg FLOAT DEFAULT 0.0, - knowledge_hit_rate FLOAT DEFAULT 0.0, - category_distribution TEXT, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - INDEX idx_date (date) -); - --- 创建车辆实时数据表(如果不存在) -CREATE TABLE IF NOT EXISTS vehicle_data ( - id INT AUTO_INCREMENT PRIMARY KEY, - vehicle_id VARCHAR(50) NOT NULL, - vehicle_vin VARCHAR(17), - data_type VARCHAR(50) NOT NULL, - data_value TEXT NOT NULL, - timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - is_active BOOLEAN DEFAULT TRUE, - INDEX idx_vehicle_id (vehicle_id), - INDEX idx_vehicle_vin (vehicle_vin), - INDEX idx_data_type (data_type), - INDEX idx_timestamp (timestamp) -); diff --git a/init_database.py b/init_database.py index c5f2ae4..c49081a 100644 --- a/init_database.py +++ b/init_database.py @@ -20,7 +20,7 @@ from src.utils.helpers import setup_logging from src.core.database import db_manager from src.core.models import ( Base, WorkOrder, KnowledgeEntry, Conversation, Analytics, Alert, VehicleData, - WorkOrderSuggestion, WorkOrderProcessHistory + WorkOrderSuggestion, WorkOrderProcessHistory, User ) class DatabaseInitializer: @@ -168,6 +168,7 @@ class DatabaseInitializer: print("\n执行数据库迁移...") migrations = [ + self._migrate_user_table_structure, self._migrate_knowledge_verification_fields, self._migrate_alert_severity_field, self._migrate_vehicle_data_table, @@ -192,6 +193,51 @@ class DatabaseInitializer: print(f"完成 {success_count}/{len(migrations)} 个迁移") return success_count > 0 + def _migrate_user_table_structure(self) -> bool: + """迁移用户表结构""" + print(" 检查用户表结构...") + + try: + with db_manager.get_session() as session: + # 检查users表是否存在 + inspector = inspect(db_manager.engine) + if 'users' not in inspector.get_table_names(): + print(" 创建users表...") + # 创建User模型的表 + User.__table__.create(session.bind, checkfirst=True) + print(" users表创建成功") + return True + + # 检查users表的列 + existing_columns = [col['name'] for col in inspector.get_columns('users')] + print(f" users表现有字段: {existing_columns}") + + # 检查必需的字段 + required_fields = { + 'name': 'VARCHAR(100)', + 'email': 'VARCHAR(120)', + 'role': 'VARCHAR(20) DEFAULT \'user\'', + 'is_active': 'BOOLEAN DEFAULT TRUE', + 'created_at': 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP', + 'last_login': 'TIMESTAMP NULL' + } + + fields_to_add = [] + for field_name, field_type in required_fields.items(): + if field_name not in existing_columns: + fields_to_add.append((field_name, field_type)) + + if fields_to_add: + print(f" 需要添加字段: {[f[0] for f in fields_to_add]}") + return self._add_table_columns('users', fields_to_add) + else: + print(" users表结构完整") + return True + + except Exception as e: + print(f" 用户表结构迁移失败: {e}") + return False + def _migrate_knowledge_verification_fields(self) -> bool: """迁移知识库验证字段""" print(" 检查知识库验证字段...") @@ -454,7 +500,18 @@ class DatabaseInitializer: try: with db_manager.get_session() as session: - # 检查是否已有数据 + # 检查是否已有用户数据 + existing_users = session.query(User).count() + if existing_users == 0: + # 创建默认管理员用户 + from src.core.auth_manager import auth_manager + admin_user = auth_manager.create_default_admin() + if admin_user: + print(" 默认管理员用户已创建: admin/admin123") + else: + print(" 创建默认管理员用户失败") + + # 检查是否已有知识库数据 existing_count = session.query(KnowledgeEntry).count() if existing_count > 0: print(f" 数据库中已有 {existing_count} 条知识库条目,跳过初始数据插入") @@ -653,6 +710,7 @@ class DatabaseInitializer: with db_manager.get_session() as session: # 检查各表的记录数 tables_info = { + 'users': User, 'work_orders': WorkOrder, 'conversations': Conversation, 'knowledge_entries': KnowledgeEntry, diff --git a/local_test.db b/local_test.db new file mode 100644 index 0000000000000000000000000000000000000000..12443a37cab57ae055f89857ca6d5bad7a938ff9 GIT binary patch literal 65536 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 AyZ`_I literal 0 HcmV?d00001 diff --git a/logs/dashboard.log b/logs/dashboard.log index c003862..aabaf24 100644 --- a/logs/dashboard.log +++ b/logs/dashboard.log @@ -1,15432 +1,1230 @@ - -2025-09-22 16:12:02,841 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:12:02] "POST /api/batch-delete/workorders HTTP/1.1" 500 - -2025-09-22 16:14:25,739 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-22 16:14:25,740 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-22 16:14:30,236 - src.core.database - INFO - 数据库初始化成功 -2025-09-22 16:14:31,767 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-22 16:14:31,773 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-22 16:14:31,844 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. +2025-12-07 22:35:31,916 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-07 22:35:31,916 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-07 22:35:31,935 - __main__ - ERROR - 启动失败: unexpected indent (app.py, line 703) +2025-12-07 22:35:34,855 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-07 22:35:34,855 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-07 22:35:34,894 - __main__ - ERROR - 启动失败: unexpected indent (app.py, line 703) +2025-12-07 22:38:40,362 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-07 22:38:40,362 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-07 22:38:47,496 - src.core.database - INFO - 数据库初始化成功 +2025-12-07 22:38:50,400 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-07 22:38:50,400 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-07 22:38:50,531 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-22 16:14:31,845 - werkzeug - INFO - Press CTRL+C to quit -2025-09-22 16:14:32,202 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 22 个条目 -2025-09-22 16:14:32,539 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-22 16:14:32,544 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-22 16:14:32,545 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-22 16:14:45,399 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 22 个条目 -2025-09-22 16:14:46,081 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 22 个条目 -2025-09-22 16:14:46,421 - src.main - INFO - TSP助手初始化完成 -2025-09-22 16:14:46,421 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 16:14:46,503 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:46] "GET / HTTP/1.1" 200 - -2025-09-22 16:14:46,564 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:46] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-22 16:14:46,580 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:46] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 16:14:46,584 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:46] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 16:14:47,796 - src.core.query_optimizer - WARNING - 慢查询检测: get_workorders_optimized 耗时 1.22s -2025-09-22 16:14:47,808 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 22 个条目 -2025-09-22 16:14:47,819 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 22 个条目 -2025-09-22 16:14:47,869 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 22 个条目 -2025-09-22 16:14:48,137 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:48] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 16:14:48,145 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:48] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 16:14:48,168 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-22 16:14:48,168 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:48] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 16:14:48,222 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 16:14:48,223 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-22 16:14:48,224 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-22 16:14:48,225 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-22 16:14:48,226 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-22 16:14:48,227 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-22 16:14:48,228 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-22 16:14:48,228 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-22 16:14:48,229 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-22 16:14:48,230 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-22 16:14:48,231 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-22 16:14:48,232 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-22 16:14:48,232 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-22 16:14:48,233 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-22 16:14:48,234 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-22 16:14:48,235 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-22 16:14:48,237 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-22 16:14:48,238 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-22 16:14:48,238 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-22 16:14:48,240 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-22 16:14:48,241 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-22 16:14:48,242 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-22 16:14:48,243 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-22 16:14:48,499 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 22 个条目 -2025-09-22 16:14:48,502 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:48] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 16:14:48,841 - src.main - INFO - TSP助手初始化完成 -2025-09-22 16:14:49,115 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:49] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 16:14:50,250 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:50] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 16:14:51,316 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-22 16:14:51,430 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:14:51,431 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:14:51,666 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:51] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 16:14:52,091 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:52] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 16:14:53,124 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:53] "POST /api/batch-delete/workorders HTTP/1.1" 200 - -2025-09-22 16:14:53,128 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:53] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 16:14:53,850 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:14:53,851 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:14:54,155 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.02s -2025-09-22 16:14:54,516 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:54] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 16:14:55,594 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-22 16:14:55,960 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:55] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 16:14:57,047 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:57] "GET / HTTP/1.1" 200 - -2025-09-22 16:14:57,058 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:57] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-22 16:14:57,092 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:57] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 16:14:57,094 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:57] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 16:14:57,098 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:57] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 16:14:57,100 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:57] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 16:14:57,104 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:57] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 16:14:57,962 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:57] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 16:14:58,179 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:58] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 16:14:58,489 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:58] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 16:14:59,502 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.01s -2025-09-22 16:14:59,837 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:14:59] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 16:15:00,320 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:15:00] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 16:15:00,657 - src.web.error_handlers - ERROR - 错误响应: 工单不存在: [60] - None -2025-09-22 16:15:01,009 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:15:01] "POST /api/batch-delete/workorders HTTP/1.1" 404 - -2025-09-22 16:16:43,530 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:16:43] "GET / HTTP/1.1" 200 - -2025-09-22 16:16:43,544 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:16:43] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-22 16:16:43,602 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:16:43] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 16:16:43,606 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:16:43] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 16:16:43,616 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:16:43] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 16:16:44,303 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:16:44] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 16:16:44,306 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:16:44] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 16:16:44,455 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:16:44] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 16:16:44,667 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:16:44] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 16:16:45,020 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:16:45] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 16:16:46,069 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-22 16:16:46,420 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:16:46] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 16:16:46,430 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:16:46] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 16:16:52,281 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:16:52] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 16:16:55,569 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:16:55] "GET /api/conversations/34 HTTP/1.1" 200 - -2025-09-22 16:17:02,301 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:17:02] "GET /api/conversations/34 HTTP/1.1" 200 - -2025-09-22 16:17:11,029 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:17:11] "GET /api/conversations/31 HTTP/1.1" 200 - -2025-09-22 16:17:15,974 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 22 个条目 -2025-09-22 16:17:15,980 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 22 个条目 -2025-09-22 16:17:16,644 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 22 个条目 -2025-09-22 16:17:16,672 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 22 个条目 -2025-09-22 16:17:17,032 - src.main - INFO - TSP助手初始化完成 -2025-09-22 16:17:17,032 - src.main - INFO - TSP助手初始化完成 -2025-09-22 16:17:17,032 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 16:17:17,032 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 16:17:17,032 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 16:17:17,033 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 16:17:17,033 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 16:17:17,033 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 16:17:17,033 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 16:17:17,033 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 16:17:17,033 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 16:17:17,033 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 16:17:17,034 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 16:17:17,034 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 16:17:17,034 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 16:17:17,034 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 16:17:17,034 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 16:17:17,034 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 16:17:17,034 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 16:17:17,034 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 16:17:17,035 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 16:17:17,035 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 16:17:17,035 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 16:17:17,035 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 16:17:17,035 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 16:17:17,035 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 16:17:17,039 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 16:17:17,040 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 16:17:17,040 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:17:17] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-22 16:17:17,042 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 16:17:17,042 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 16:17:17,042 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:17:17] "GET /api/agent/tools/stats HTTP/1.1" 500 - -2025-09-22 16:17:19,607 - src.dialogue.realtime_chat - INFO - 创建新会话: session_user_001_1758554239 -2025-09-22 16:17:19,608 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:17:19] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-22 16:17:22,033 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:17:22,033 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:17:22,033 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:17:22,034 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:18:04,700 - src.core.llm_client - INFO - API请求成功 -2025-09-22 16:18:05,381 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:18:05] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-22 16:18:32,062 - src.core.llm_client - INFO - API请求成功 -2025-09-22 16:18:32,743 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:18:32] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-22 16:18:39,747 - src.dialogue.realtime_chat - INFO - 结束会话: session_user_001_1758554239 -2025-09-22 16:18:39,748 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:18:39] "DELETE /api/chat/session/session_user_001_1758554239 HTTP/1.1" 200 - -2025-09-22 16:19:16,384 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 22 个条目 -2025-09-22 16:19:17,079 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 22 个条目 -2025-09-22 16:19:17,415 - src.main - INFO - TSP助手初始化完成 -2025-09-22 16:19:18,438 - src.dialogue.dialogue_manager - INFO - 创建工单成功: WO20250922161917 -2025-09-22 16:19:18,779 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:19:18] "POST /api/workorders HTTP/1.1" 200 - -2025-09-22 16:19:19,505 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:19:19] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 16:19:20,462 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:19:20] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 16:19:20,588 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.08s -2025-09-22 16:19:20,944 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:19:20] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 16:19:22,015 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-22 16:19:22,362 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:19:22] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 16:19:22,418 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:19:22,418 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:19:23,257 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:19:23] "GET /api/workorders/65 HTTP/1.1" 200 - -2025-09-22 16:19:29,592 - src.core.llm_client - INFO - API请求成功 -2025-09-22 16:19:30,268 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:19:30] "POST /api/workorders/65/ai-suggestion HTTP/1.1" 200 - -2025-09-22 16:19:52,607 - src.utils.semantic_similarity - INFO - 正在加载语义相似度模型: all-MiniLM-L6-v2 -2025-09-22 16:19:52,611 - sentence_transformers.SentenceTransformer - INFO - Use pytorch device_name: cpu -2025-09-22 16:19:52,611 - sentence_transformers.SentenceTransformer - INFO - Load pretrained SentenceTransformer: all-MiniLM-L6-v2 -2025-09-22 16:19:54,297 - src.utils.semantic_similarity - INFO - 语义相似度模型加载成功 -2025-09-22 16:19:54,300 - src.web.blueprints.workorders - INFO - AI建议与人工描述语义相似度: 1.0000 -2025-09-22 16:19:54,813 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:19:54] "POST /api/workorders/65/human-resolution HTTP/1.1" 200 - -2025-09-22 16:20:01,973 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:01] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 16:20:04,825 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:04] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 16:20:13,716 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:13] "GET /api/knowledge?page=3&per_page=10 HTTP/1.1" 200 - -2025-09-22 16:20:16,443 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:16] "GET /api/knowledge?page=2&per_page=10 HTTP/1.1" 200 - -2025-09-22 16:20:20,039 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:20] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 16:20:23,714 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:23] "GET / HTTP/1.1" 200 - -2025-09-22 16:20:23,728 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:23] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-22 16:20:23,793 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:23] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 16:20:23,797 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:23] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 16:20:23,800 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:23] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 16:20:23,804 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:23] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 16:20:24,641 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:24] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 16:20:24,681 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:24] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 16:20:24,830 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:24] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 16:20:25,168 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:25] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 16:20:26,252 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.08s -2025-09-22 16:20:26,603 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:26] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 16:20:26,615 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:20:26] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 16:21:04,599 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:04] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 16:21:07,316 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:07] "GET /api/workorders/65 HTTP/1.1" 200 - -2025-09-22 16:21:10,145 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:10] "GET /api/workorders/65 HTTP/1.1" 200 - -2025-09-22 16:21:18,757 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:18] "PUT /api/workorders/65 HTTP/1.1" 200 - -2025-09-22 16:21:19,468 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:19] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 16:21:20,514 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-22 16:21:20,858 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:20] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 16:21:21,890 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.03s -2025-09-22 16:21:22,230 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:22] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 16:21:26,158 - src.core.llm_client - INFO - API请求成功 -2025-09-22 16:21:26,903 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:26] "POST /api/workorders/65/ai-suggestion HTTP/1.1" 200 - -2025-09-22 16:21:28,255 - src.web.blueprints.workorders - INFO - AI建议与人工描述语义相似度: 0.1459 -2025-09-22 16:21:28,802 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:28] "POST /api/workorders/65/human-resolution HTTP/1.1" 200 - -2025-09-22 16:21:35,571 - src.web.blueprints.workorders - INFO - 工单 65 使用人工描述入库,AI相似度: 0.1459 -2025-09-22 16:21:36,957 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:36] "POST /api/workorders/65/approve-to-knowledge HTTP/1.1" 200 - -2025-09-22 16:21:43,688 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:43] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 16:21:45,191 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:45] "GET / HTTP/1.1" 200 - -2025-09-22 16:21:45,203 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:45] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-22 16:21:45,259 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:45] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 16:21:45,261 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:45] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 16:21:45,264 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:45] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 16:21:45,269 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:45] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 16:21:46,139 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:46] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 16:21:46,152 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:46] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 16:21:46,337 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:46] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 16:21:46,644 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:46] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 16:21:47,687 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-22 16:21:48,023 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:48] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 16:21:48,039 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:21:48] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 16:22:22,521 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:22:22] "GET /api/knowledge/search?q=网络 HTTP/1.1" 200 - -2025-09-22 16:23:40,118 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:23:40] "GET /api/knowledge HTTP/1.1" 200 - -2025-09-22 16:23:42,889 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:23:42] "GET /api/knowledge/search?q=技术 HTTP/1.1" 200 - -2025-09-22 16:23:45,630 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:23:45] "GET /api/knowledge/search?q=APP HTTP/1.1" 200 - -2025-09-22 16:24:25,571 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:24:25] "GET /api/knowledge/search?q=技术 HTTP/1.1" 200 - -2025-09-22 16:24:28,337 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:24:28] "GET /api/knowledge/search?q=APP HTTP/1.1" 200 - -2025-09-22 16:24:31,075 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:24:31] "GET /api/knowledge/search?q=蓝牙 HTTP/1.1" 200 - -2025-09-22 16:24:33,798 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:24:33] "GET /api/knowledge/search?q=远程控制 HTTP/1.1" 200 - -2025-09-22 16:25:16,636 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:25:16] "GET /api/knowledge/search?q=蓝牙 HTTP/1.1" 200 - -2025-09-22 16:25:26,347 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:25:26] "GET /api/knowledge/search?q=APP HTTP/1.1" 200 - -2025-09-22 16:25:41,250 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:25:41] "GET /api/knowledge/search?q=蓝牙 HTTP/1.1" 200 - -2025-09-22 16:26:02,511 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:26:02] "GET /api/knowledge/search?q=APP HTTP/1.1" 200 - -2025-09-22 16:26:38,416 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-22 16:26:38,417 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-22 16:26:42,633 - src.core.database - INFO - 数据库初始化成功 -2025-09-22 16:26:44,100 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-22 16:26:44,106 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-22 16:26:44,164 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on http://192.168.31.202:5000 +2025-12-07 22:38:50,531 - werkzeug - INFO - Press CTRL+C to quit +2025-12-07 22:38:51,090 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 22:38:51,498 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-07 22:38:51,514 - websockets.server - INFO - server listening on 127.0.0.1:8765 +2025-12-07 22:38:51,516 - websockets.server - INFO - server listening on [::1]:8765 +2025-12-07 22:38:53,504 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:53] "GET / HTTP/1.1" 200 - +2025-12-07 22:38:53,802 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:53] "GET /static/js/main.js?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 22:38:53,818 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:53] "GET /static/css/main.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 22:38:53,830 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:53] "GET /static/css/variables.css HTTP/1.1" 304 - +2025-12-07 22:38:53,830 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:53] "GET /static/css/components.css HTTP/1.1" 304 - +2025-12-07 22:38:53,834 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:53] "GET /static/css/layout.css HTTP/1.1" 304 - +2025-12-07 22:38:53,890 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:53] "GET /static/js/core/utils.js HTTP/1.1" 304 - +2025-12-07 22:38:53,890 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:53] "GET /static/js/core/store.js HTTP/1.1" 304 - +2025-12-07 22:38:53,890 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:53] "GET /static/js/core/router.js HTTP/1.1" 304 - +2025-12-07 22:38:53,898 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:53] "GET /static/js/core/websocket.js HTTP/1.1" 304 - +2025-12-07 22:38:53,907 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:53] "GET /static/js/components/navbar.js HTTP/1.1" 304 - +2025-12-07 22:38:53,909 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:53] "GET /static/js/components/sidebar.js HTTP/1.1" 304 - +2025-12-07 22:38:53,914 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:53] "GET /static/js/components/modal.js HTTP/1.1" 304 - +2025-12-07 22:38:53,931 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:53] "GET /static/js/pages/login.js HTTP/1.1" 304 - +2025-12-07 22:38:53,931 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:53] "GET /sw.js HTTP/1.1" 404 - +2025-12-07 22:38:54,298 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET / HTTP/1.1" 200 - +2025-12-07 22:38:54,340 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/main.js?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 22:38:54,340 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/css/main.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 22:38:54,366 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/css/variables.css HTTP/1.1" 304 - +2025-12-07 22:38:54,380 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/css/components.css HTTP/1.1" 304 - +2025-12-07 22:38:54,380 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/css/layout.css HTTP/1.1" 304 - +2025-12-07 22:38:54,410 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/core/utils.js HTTP/1.1" 304 - +2025-12-07 22:38:54,423 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/core/store.js HTTP/1.1" 304 - +2025-12-07 22:38:54,427 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/core/router.js HTTP/1.1" 304 - +2025-12-07 22:38:54,427 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/core/websocket.js HTTP/1.1" 304 - +2025-12-07 22:38:54,442 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/components/navbar.js HTTP/1.1" 304 - +2025-12-07 22:38:54,442 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/components/sidebar.js HTTP/1.1" 304 - +2025-12-07 22:38:54,442 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/components/modal.js HTTP/1.1" 304 - +2025-12-07 22:38:54,481 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/pages/login.js HTTP/1.1" 304 - +2025-12-07 22:38:54,490 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /sw.js HTTP/1.1" 404 - +2025-12-07 22:38:54,833 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET / HTTP/1.1" 200 - +2025-12-07 22:38:54,859 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/css/main.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 22:38:54,867 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/main.js?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 22:38:54,885 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/css/variables.css HTTP/1.1" 304 - +2025-12-07 22:38:54,890 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/css/components.css HTTP/1.1" 304 - +2025-12-07 22:38:54,890 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/css/layout.css HTTP/1.1" 304 - +2025-12-07 22:38:54,915 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/core/utils.js HTTP/1.1" 304 - +2025-12-07 22:38:54,915 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/core/store.js HTTP/1.1" 304 - +2025-12-07 22:38:54,923 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/core/router.js HTTP/1.1" 304 - +2025-12-07 22:38:54,923 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/core/websocket.js HTTP/1.1" 304 - +2025-12-07 22:38:54,936 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/components/navbar.js HTTP/1.1" 304 - +2025-12-07 22:38:54,940 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/components/sidebar.js HTTP/1.1" 304 - +2025-12-07 22:38:54,947 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/components/modal.js HTTP/1.1" 304 - +2025-12-07 22:38:54,970 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /static/js/pages/login.js HTTP/1.1" 304 - +2025-12-07 22:38:54,970 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:38:54] "GET /sw.js HTTP/1.1" 404 - +2025-12-07 22:39:02,958 - src.web.error_handlers - ERROR - 错误响应: 用户名或密码错误 - None +2025-12-07 22:39:02,958 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:39:02] "POST /api/login HTTP/1.1" 401 - +2025-12-07 22:42:12,287 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-07 22:42:12,287 - src.web.error_handlers - ERROR - 未处理错误 login: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-07 22:42:12,287 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:42:12] "POST /api/login HTTP/1.1" 500 - +2025-12-07 22:43:22,951 - src.web.error_handlers - ERROR - 未处理错误 login: Instance is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: https://sqlalche.me/e/20/bhk3) +2025-12-07 22:43:22,951 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:43:22] "POST /api/login HTTP/1.1" 500 - +2025-12-07 22:44:23,984 - src.web.error_handlers - ERROR - 未处理错误 login: Instance is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: https://sqlalche.me/e/20/bhk3) +2025-12-07 22:44:23,984 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:44:23] "POST /api/login HTTP/1.1" 500 - +2025-12-07 22:45:00,229 - src.web.error_handlers - ERROR - 未处理错误 login: Instance is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: https://sqlalche.me/e/20/bhk3) +2025-12-07 22:45:00,229 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:45:00] "POST /api/login HTTP/1.1" 500 - +2025-12-07 22:45:22,453 - src.web.error_handlers - ERROR - 未处理错误 login: Instance is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: https://sqlalche.me/e/20/bhk3) +2025-12-07 22:45:22,453 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:45:22] "POST /api/login HTTP/1.1" 500 - +2025-12-07 22:46:50,929 - src.web.error_handlers - ERROR - 未处理错误 login: Instance is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: https://sqlalche.me/e/20/bhk3) +2025-12-07 22:46:50,929 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:46:50] "POST /api/login HTTP/1.1" 500 - +2025-12-07 22:47:31,069 - src.web.error_handlers - ERROR - 未处理错误 login: Instance is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: https://sqlalche.me/e/20/bhk3) +2025-12-07 22:47:31,069 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:47:31] "POST /api/login HTTP/1.1" 500 - +2025-12-07 22:48:52,888 - src.web.error_handlers - ERROR - 未处理错误 login: Instance is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: https://sqlalche.me/e/20/bhk3) +2025-12-07 22:48:52,888 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:48:52] "POST /api/login HTTP/1.1" 500 - +2025-12-07 22:49:30,361 - src.web.error_handlers - ERROR - 未处理错误 login: Instance is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: https://sqlalche.me/e/20/bhk3) +2025-12-07 22:49:30,361 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:49:30] "POST /api/login HTTP/1.1" 500 - +2025-12-07 22:50:24,422 - src.web.error_handlers - ERROR - 未处理错误 login: Instance is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: https://sqlalche.me/e/20/bhk3) +2025-12-07 22:50:24,422 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 22:50:24] "POST /api/login HTTP/1.1" 500 - +2025-12-07 23:11:26,193 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-07 23:11:26,193 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-07 23:11:32,645 - src.core.database - INFO - 数据库初始化成功 +2025-12-07 23:11:35,621 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-07 23:11:35,637 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-07 23:11:35,797 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-22 16:26:44,164 - werkzeug - INFO - Press CTRL+C to quit -2025-09-22 16:26:44,532 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 16:26:44,880 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-22 16:26:44,887 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-22 16:26:44,887 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-22 16:26:49,463 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 16:26:50,162 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 16:26:50,508 - src.main - INFO - TSP助手初始化完成 -2025-09-22 16:26:50,508 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 16:26:55,517 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:26:55,518 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:26:59,381 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:26:59] "GET / HTTP/1.1" 200 - -2025-09-22 16:26:59,444 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:26:59] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-22 16:26:59,461 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:26:59] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 16:27:00,680 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 16:27:00,686 - src.core.query_optimizer - WARNING - 慢查询检测: get_workorders_optimized 耗时 1.23s -2025-09-22 16:27:00,698 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 16:27:00,710 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 16:27:01,031 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:27:01] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 16:27:01,035 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:27:01] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 16:27:01,054 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-22 16:27:01,055 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:27:01] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 16:27:01,359 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:27:01] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 16:27:01,373 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 16:27:01,389 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 16:27:01,431 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 16:27:01,727 - src.main - INFO - TSP助手初始化完成 -2025-09-22 16:27:01,739 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 16:27:01,741 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-22 16:27:01,741 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-22 16:27:01,742 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-22 16:27:01,743 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-22 16:27:01,744 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-22 16:27:01,745 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-22 16:27:01,745 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-22 16:27:01,746 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-22 16:27:01,747 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-22 16:27:01,748 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-22 16:27:01,748 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-22 16:27:01,749 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-22 16:27:01,750 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-22 16:27:01,751 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-22 16:27:01,752 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-22 16:27:01,754 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-22 16:27:01,755 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-22 16:27:01,757 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-22 16:27:01,758 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-22 16:27:01,759 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-22 16:27:01,760 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-22 16:27:01,760 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-22 16:27:01,786 - src.main - INFO - TSP助手初始化完成 -2025-09-22 16:27:02,621 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:27:02] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 16:27:02,655 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:27:02] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 16:27:03,145 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:27:03] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 16:27:04,219 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-22 16:27:04,581 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:27:04] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 16:27:04,594 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:27:04] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 16:27:06,735 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:27:06,735 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:27:06,795 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:27:06,795 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:27:06,834 - src.web.blueprints.knowledge - INFO - 搜索查询: 'APP' -2025-09-22 16:27:07,196 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'APP' 返回 5 个结果 -2025-09-22 16:27:07,539 - src.web.blueprints.knowledge - INFO - 搜索结果数量: 5 -2025-09-22 16:27:07,540 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:27:07] "GET /api/knowledge/search?q=APP HTTP/1.1" 200 - -2025-09-22 16:27:25,028 - src.web.blueprints.knowledge - INFO - 搜索查询: 'ROOT' -2025-09-22 16:27:25,386 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'ROOT' 返回 1 个结果 -2025-09-22 16:27:25,732 - src.web.blueprints.knowledge - INFO - 搜索结果数量: 1 -2025-09-22 16:27:25,733 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:27:25] "GET /api/knowledge/search?q=ROOT HTTP/1.1" 200 - -2025-09-22 16:27:25,736 - src.web.blueprints.knowledge - INFO - 搜索查询: 'ROOT' -2025-09-22 16:27:26,089 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'ROOT' 返回 1 个结果 -2025-09-22 16:27:26,440 - src.web.blueprints.knowledge - INFO - 搜索结果数量: 1 -2025-09-22 16:27:26,441 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:27:26] "GET /api/knowledge/search?q=ROOT HTTP/1.1" 200 - -2025-09-22 16:27:32,509 - src.web.blueprints.knowledge - INFO - 搜索查询: '重置' -2025-09-22 16:27:32,857 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '重置' 返回 1 个结果 -2025-09-22 16:27:33,201 - src.web.blueprints.knowledge - INFO - 搜索结果数量: 1 -2025-09-22 16:27:33,202 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:27:33] "GET /api/knowledge/search?q=重置 HTTP/1.1" 200 - -2025-09-22 16:52:12,904 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-22 16:52:12,904 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-22 16:52:17,379 - src.core.database - INFO - 数据库初始化成功 -2025-09-22 16:52:19,686 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-22 16:52:19,693 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-22 16:52:19,754 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on http://192.168.31.202:5000 +2025-12-07 23:11:35,805 - werkzeug - INFO - Press CTRL+C to quit +2025-12-07 23:11:36,246 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:11:36,639 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-07 23:11:36,662 - websockets.server - INFO - server listening on [::1]:8765 +2025-12-07 23:11:36,662 - websockets.server - INFO - server listening on 127.0.0.1:8765 +2025-12-07 23:11:38,588 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:38] "GET / HTTP/1.1" 200 - +2025-12-07 23:11:38,864 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:38] "GET /static/js/main.js?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 23:11:38,884 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:38] "GET /static/css/main.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 23:11:38,896 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:38] "GET /static/css/variables.css HTTP/1.1" 200 - +2025-12-07 23:11:38,896 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:38] "GET /static/css/components.css HTTP/1.1" 200 - +2025-12-07 23:11:38,896 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:38] "GET /static/css/layout.css HTTP/1.1" 200 - +2025-12-07 23:11:38,964 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:38] "GET /static/js/core/utils.js HTTP/1.1" 304 - +2025-12-07 23:11:38,971 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:38] "GET /static/js/core/store.js HTTP/1.1" 304 - +2025-12-07 23:11:38,971 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:38] "GET /static/js/core/router.js HTTP/1.1" 304 - +2025-12-07 23:11:38,977 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:38] "GET /static/js/core/websocket.js HTTP/1.1" 304 - +2025-12-07 23:11:38,987 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:38] "GET /static/js/components/sidebar.js HTTP/1.1" 304 - +2025-12-07 23:11:38,987 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:38] "GET /static/js/components/navbar.js HTTP/1.1" 200 - +2025-12-07 23:11:38,987 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:38] "GET /static/js/components/modal.js HTTP/1.1" 304 - +2025-12-07 23:11:39,029 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /sw.js HTTP/1.1" 404 - +2025-12-07 23:11:39,029 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/js/pages/dashboard.js HTTP/1.1" 200 - +2025-12-07 23:11:39,086 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/js/core/api.js HTTP/1.1" 304 - +2025-12-07 23:11:39,397 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET / HTTP/1.1" 200 - +2025-12-07 23:11:39,457 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/js/main.js?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 23:11:39,457 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/css/main.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 23:11:39,471 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/css/variables.css HTTP/1.1" 304 - +2025-12-07 23:11:39,480 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/css/components.css HTTP/1.1" 304 - +2025-12-07 23:11:39,484 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/css/layout.css HTTP/1.1" 304 - +2025-12-07 23:11:39,503 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/js/core/utils.js HTTP/1.1" 304 - +2025-12-07 23:11:39,513 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/js/core/store.js HTTP/1.1" 304 - +2025-12-07 23:11:39,522 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/js/core/router.js HTTP/1.1" 304 - +2025-12-07 23:11:39,522 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/js/core/websocket.js HTTP/1.1" 304 - +2025-12-07 23:11:39,539 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/js/components/navbar.js HTTP/1.1" 304 - +2025-12-07 23:11:39,539 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/js/components/sidebar.js HTTP/1.1" 304 - +2025-12-07 23:11:39,539 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/js/components/modal.js HTTP/1.1" 304 - +2025-12-07 23:11:39,554 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/js/pages/dashboard.js HTTP/1.1" 304 - +2025-12-07 23:11:39,570 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /sw.js HTTP/1.1" 404 - +2025-12-07 23:11:39,587 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/js/core/api.js HTTP/1.1" 304 - +2025-12-07 23:11:39,928 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET / HTTP/1.1" 200 - +2025-12-07 23:11:39,953 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/css/main.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 23:11:39,953 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/js/main.js?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 23:11:39,969 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/css/variables.css HTTP/1.1" 304 - +2025-12-07 23:11:39,977 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/css/components.css HTTP/1.1" 304 - +2025-12-07 23:11:39,977 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:39] "GET /static/css/layout.css HTTP/1.1" 304 - +2025-12-07 23:11:40,016 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:40] "GET /static/js/core/utils.js HTTP/1.1" 304 - +2025-12-07 23:11:40,020 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:40] "GET /static/js/core/router.js HTTP/1.1" 304 - +2025-12-07 23:11:40,020 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:40] "GET /static/js/core/store.js HTTP/1.1" 304 - +2025-12-07 23:11:40,025 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:40] "GET /static/js/core/websocket.js HTTP/1.1" 304 - +2025-12-07 23:11:40,040 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:40] "GET /static/js/components/navbar.js HTTP/1.1" 304 - +2025-12-07 23:11:40,044 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:40] "GET /static/js/components/sidebar.js HTTP/1.1" 304 - +2025-12-07 23:11:40,047 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:40] "GET /static/js/components/modal.js HTTP/1.1" 304 - +2025-12-07 23:11:40,070 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:40] "GET /sw.js HTTP/1.1" 404 - +2025-12-07 23:11:40,072 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:40] "GET /static/js/pages/dashboard.js HTTP/1.1" 304 - +2025-12-07 23:11:40,080 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:40] "GET /static/js/core/api.js HTTP/1.1" 304 - +2025-12-07 23:11:41,826 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:11:41,920 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:41] "GET /api/workorders?page=1&per_page=5&sort=created_at&order=desc HTTP/1.1" 200 - +2025-12-07 23:11:41,990 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:41] "GET /api/alerts?page=1&per_page=5&sort=created_at&order=desc HTTP/1.1" 200 - +2025-12-07 23:11:42,026 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:11:42,275 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:42] "GET /api/workorders?page=1&per_page=5&sort=created_at&order=desc HTTP/1.1" 200 - +2025-12-07 23:11:42,292 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:11:42,465 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:11:42,531 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:42] "GET /api/workorders?page=1&per_page=5&sort=created_at&order=desc HTTP/1.1" 200 - +2025-12-07 23:11:42,589 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:11:42,639 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:42] "GET /api/alerts?page=1&per_page=5&sort=created_at&order=desc HTTP/1.1" 200 - +2025-12-07 23:11:42,814 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:11:43,220 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:43] "GET /api/alerts?page=1&per_page=5&sort=created_at&order=desc HTTP/1.1" 200 - +2025-12-07 23:11:45,122 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-07 23:11:45,122 - src.core.query_optimizer - ERROR - 优化分析查询失败: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-07 23:11:45,122 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:45] "GET /api/analytics?days=30 HTTP/1.1" 200 - +2025-12-07 23:11:52,053 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:52] "GET / HTTP/1.1" 200 - +2025-12-07 23:11:52,253 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:52] "GET /static/css/main.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-07 23:11:52,383 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:52] "GET /static/js/main.js?v=1.0.0 HTTP/1.1" 200 - +2025-12-07 23:11:52,703 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:52] "GET /static/css/components.css HTTP/1.1" 200 - +2025-12-07 23:11:52,711 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:52] "GET /static/css/variables.css HTTP/1.1" 200 - +2025-12-07 23:11:52,728 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:52] "GET /static/css/layout.css HTTP/1.1" 200 - +2025-12-07 23:11:53,270 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:53] "GET /static/js/core/utils.js HTTP/1.1" 200 - +2025-12-07 23:11:53,336 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:53] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-07 23:11:53,403 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) +2025-12-07 23:11:53,403 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:53] "GET /static/js/core/router.js HTTP/1.1" 200 - +2025-12-07 23:11:53,511 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:53] "GET /static/js/core/websocket.js HTTP/1.1" 200 - +2025-12-07 23:11:53,602 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:53] "GET /static/js/components/navbar.js HTTP/1.1" 200 - +2025-12-07 23:11:53,705 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:53] "GET /static/js/components/sidebar.js HTTP/1.1" 200 - +2025-12-07 23:11:53,720 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:53] "GET /static/js/components/modal.js HTTP/1.1" 200 - +2025-12-07 23:11:54,220 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:54] "GET /static/js/pages/login.js HTTP/1.1" 200 - +2025-12-07 23:11:54,237 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:54] "GET /static/images/favicon-32.png HTTP/1.1" 404 - +2025-12-07 23:11:54,237 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:54] "GET /sw.js HTTP/1.1" 404 - +2025-12-07 23:11:54,295 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:54] "GET /static/manifest.json HTTP/1.1" 200 - +2025-12-07 23:11:54,363 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:54] "GET /static/images/favicon-16.png HTTP/1.1" 404 - +2025-12-07 23:11:54,406 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:54] "GET /static/sw.js HTTP/1.1" 200 - +2025-12-07 23:11:54,662 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:54] "GET /static/images/icon-144.png HTTP/1.1" 404 - +2025-12-07 23:11:54,730 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:54] "GET / HTTP/1.1" 200 - +2025-12-07 23:11:54,906 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:54] "GET /static/css/main.css HTTP/1.1" 200 - +2025-12-07 23:11:54,906 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:54] "GET /static/js/main.js HTTP/1.1" 200 - +2025-12-07 23:11:54,927 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:54] "GET /static/js/core/utils.js HTTP/1.1" 304 - +2025-12-07 23:11:55,144 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:55] "GET /static/js/core/api.js HTTP/1.1" 200 - +2025-12-07 23:11:55,312 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:55] "GET /api/analytics?days=30 HTTP/1.1" 200 - +2025-12-07 23:11:55,316 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:55] "GET /static/js/core/store.js HTTP/1.1" 304 - +2025-12-07 23:11:55,321 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:55] "GET /static/js/core/websocket.js HTTP/1.1" 304 - +2025-12-07 23:11:55,329 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:55] "GET /static/js/core/router.js HTTP/1.1" 304 - +2025-12-07 23:11:55,510 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:55] "GET /static/js/components/navbar.js HTTP/1.1" 304 - +2025-12-07 23:11:55,654 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:55] "GET /static/js/components/sidebar.js HTTP/1.1" 304 - +2025-12-07 23:11:55,654 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:55] "GET /static/js/components/modal.js HTTP/1.1" 304 - +2025-12-07 23:11:55,661 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:55] "GET /static/js/pages/dashboard.js HTTP/1.1" 200 - +2025-12-07 23:11:55,836 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:55] "GET /static/js/pages/alerts.js HTTP/1.1" 200 - +2025-12-07 23:11:55,986 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:55] "GET /static/js/pages/workorders.js HTTP/1.1" 200 - +2025-12-07 23:11:55,999 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:55] "GET /static/js/pages/knowledge.js HTTP/1.1" 200 - +2025-12-07 23:11:56,007 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:56] "GET /static/js/pages/chat.js HTTP/1.1" 200 - +2025-12-07 23:11:56,171 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:56] "GET /static/js/pages/monitoring.js HTTP/1.1" 200 - +2025-12-07 23:11:56,305 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:11:56] "GET /static/js/pages/settings.js HTTP/1.1" 200 - +2025-12-07 23:12:22,703 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) +2025-12-07 23:12:24,118 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:12:24] "GET /api/analytics?days=30 HTTP/1.1" 200 - +2025-12-07 23:12:30,237 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:12:30] "POST /api/login HTTP/1.1" 200 - +2025-12-07 23:12:30,669 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:12:30] "GET /static/js/pages/dashboard.js HTTP/1.1" 304 - +2025-12-07 23:12:30,921 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:12:30] "GET /static/js/core/api.js HTTP/1.1" 304 - +2025-12-07 23:12:32,142 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:12:32] "GET /api/workorders?page=1&per_page=5&sort=created_at&order=desc HTTP/1.1" 200 - +2025-12-07 23:12:32,142 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:12:32] "GET /api/alerts?page=1&per_page=5&sort=created_at&order=desc HTTP/1.1" 200 - +2025-12-07 23:12:40,971 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) +2025-12-07 23:12:42,471 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:12:42] "GET /api/analytics?days=30 HTTP/1.1" 200 - +2025-12-07 23:14:38,300 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:14:38] "GET / HTTP/1.1" 200 - +2025-12-07 23:14:55,194 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:14:55] "POST /api/login HTTP/1.1" 500 - +2025-12-07 23:15:52,129 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:15:52] "POST /api/login HTTP/1.1" 200 - +2025-12-07 23:16:17,378 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:16:17] "GET /login HTTP/1.1" 200 - +2025-12-07 23:16:33,047 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:16:33] "GET /static/js/main.js HTTP/1.1" 200 - +2025-12-07 23:18:46,886 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-07 23:18:46,886 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-07 23:18:53,982 - src.core.database - INFO - 数据库初始化成功 +2025-12-07 23:18:57,082 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-07 23:18:57,104 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-07 23:18:57,265 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-22 16:52:19,755 - werkzeug - INFO - Press CTRL+C to quit -2025-09-22 16:52:20,141 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 16:52:20,500 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-22 16:52:20,508 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-22 16:52:20,508 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-22 16:52:24,267 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:52:24] "GET / HTTP/1.1" 200 - -2025-09-22 16:52:24,348 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:52:24] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-22 16:52:24,391 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:52:24] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 16:52:24,743 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 16:52:25,098 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-22 16:52:25,099 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:52:25] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 16:52:25,102 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:52:25] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 16:52:25,463 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 16:52:25,585 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 16:52:25,613 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 16:52:25,814 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 16:52:25,816 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-22 16:52:25,817 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-22 16:52:25,818 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-22 16:52:25,819 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-22 16:52:25,819 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-22 16:52:25,820 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-22 16:52:25,821 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-22 16:52:25,822 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-22 16:52:25,822 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-22 16:52:25,823 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-22 16:52:25,824 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-22 16:52:25,824 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-22 16:52:25,825 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-22 16:52:25,826 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-22 16:52:25,828 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-22 16:52:25,829 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-22 16:52:25,830 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-22 16:52:25,832 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-22 16:52:25,833 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-22 16:52:25,834 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-22 16:52:25,835 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-22 16:52:25,836 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-22 16:52:26,092 - src.core.database - ERROR - 数据库操作失败: 'Alert' object has no attribute 'status' -2025-09-22 16:52:26,092 - src.web.error_handlers - ERROR - 错误响应: 获取预警列表失败: 'Alert' object has no attribute 'status' - None -2025-09-22 16:52:26,093 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:52:26] "GET /api/alerts HTTP/1.1" 500 - -2025-09-22 16:52:26,129 - src.core.database - ERROR - 数据库操作失败: 'WorkOrder' object has no attribute 'user_id' -2025-09-22 16:52:26,130 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:52:26] "GET /api/workorders HTTP/1.1" 500 - -2025-09-22 16:52:26,182 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:52:26] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 16:52:26,266 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 16:52:26,305 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 16:52:26,606 - src.main - INFO - TSP助手初始化完成 -2025-09-22 16:52:26,606 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 16:52:26,656 - src.main - INFO - TSP助手初始化完成 -2025-09-22 16:52:26,715 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:52:26] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 16:52:28,070 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:52:28] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 16:52:31,621 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:52:31,621 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:52:31,667 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:52:31,667 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 16:52:31,900 - src.core.database - ERROR - 数据库操作失败: 'WorkOrder' object has no attribute 'user_id' -2025-09-22 16:52:31,900 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:52:31] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 500 - -2025-09-22 16:52:47,740 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:52:47] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 16:54:32,046 - src.core.database - ERROR - 数据库操作失败: 'Alert' object has no attribute 'status' -2025-09-22 16:54:32,046 - src.web.error_handlers - ERROR - 错误响应: 获取预警列表失败: 'Alert' object has no attribute 'status' - None -2025-09-22 16:54:32,047 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:54:32] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 500 - -2025-09-22 16:54:34,952 - src.core.database - ERROR - 数据库操作失败: 'WorkOrder' object has no attribute 'user_id' -2025-09-22 16:54:34,953 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:54:34] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 500 - -2025-09-22 16:54:37,919 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:54:37] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 16:54:41,166 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:54:41] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 16:56:23,347 - src.core.database - ERROR - 数据库操作失败: 'Alert' object has no attribute 'status' -2025-09-22 16:56:23,348 - src.web.error_handlers - ERROR - 错误响应: 获取预警列表失败: 'Alert' object has no attribute 'status' - None -2025-09-22 16:56:23,349 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:56:23] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 500 - -2025-09-22 16:56:26,289 - src.core.database - ERROR - 数据库操作失败: 'WorkOrder' object has no attribute 'user_id' -2025-09-22 16:56:26,290 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:56:26] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 500 - -2025-09-22 16:56:29,191 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:56:29] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 16:56:32,469 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:56:32] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 16:57:53,709 - src.core.database - ERROR - 数据库操作失败: 'Alert' object has no attribute 'status' -2025-09-22 16:57:53,710 - src.web.error_handlers - ERROR - 错误响应: 获取预警列表失败: 'Alert' object has no attribute 'status' - None -2025-09-22 16:57:53,710 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:57:53] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 500 - -2025-09-22 16:57:56,629 - src.core.database - ERROR - 数据库操作失败: 'WorkOrder' object has no attribute 'user_id' -2025-09-22 16:57:56,629 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:57:56] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 500 - -2025-09-22 16:57:59,533 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:57:59] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 16:58:02,820 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 16:58:02] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:00:03,052 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-22 17:00:03,052 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-22 17:00:07,252 - src.core.database - INFO - 数据库初始化成功 -2025-09-22 17:00:09,564 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-22 17:00:09,572 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-22 17:00:09,654 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on http://192.168.31.202:5000 +2025-12-07 23:18:57,265 - werkzeug - INFO - Press CTRL+C to quit +2025-12-07 23:18:57,681 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:18:58,078 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-07 23:18:58,094 - websockets.server - INFO - server listening on [::1]:8765 +2025-12-07 23:18:58,094 - websockets.server - INFO - server listening on 127.0.0.1:8765 +2025-12-07 23:19:09,129 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:09] "GET / HTTP/1.1" 200 - +2025-12-07 23:19:09,486 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:09] "GET /static/css/main.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 23:19:09,495 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:09] "GET /static/js/main.js?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 23:19:09,545 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:09] "GET /static/css/variables.css HTTP/1.1" 200 - +2025-12-07 23:19:09,545 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:09] "GET /static/css/components.css HTTP/1.1" 200 - +2025-12-07 23:19:09,551 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:09] "GET /static/css/layout.css HTTP/1.1" 200 - +2025-12-07 23:19:09,595 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:09] "GET /static/js/core/utils.js HTTP/1.1" 304 - +2025-12-07 23:19:09,595 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:09] "GET /static/js/core/store.js HTTP/1.1" 304 - +2025-12-07 23:19:09,603 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:09] "GET /static/js/core/router.js HTTP/1.1" 304 - +2025-12-07 23:19:09,610 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:09] "GET /static/js/core/websocket.js HTTP/1.1" 304 - +2025-12-07 23:19:09,610 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:09] "GET /static/js/components/navbar.js HTTP/1.1" 200 - +2025-12-07 23:19:09,618 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:09] "GET /static/js/components/sidebar.js HTTP/1.1" 304 - +2025-12-07 23:19:09,618 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:09] "GET /static/js/components/modal.js HTTP/1.1" 304 - +2025-12-07 23:19:09,645 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:09] "GET /sw.js HTTP/1.1" 404 - +2025-12-07 23:19:09,653 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:09] "GET /static/js/pages/dashboard.js HTTP/1.1" 200 - +2025-12-07 23:19:09,700 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:09] "GET /static/js/core/api.js HTTP/1.1" 304 - +2025-12-07 23:19:12,128 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:19:12,628 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:12] "GET /api/alerts?page=1&per_page=5&sort=created_at&order=desc HTTP/1.1" 200 - +2025-12-07 23:19:12,848 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:19:14,748 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-07 23:19:14,748 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:14] "GET /api/workorders?page=1&per_page=5&sort=created_at&order=desc HTTP/1.1" 500 - +2025-12-07 23:19:21,245 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) +2025-12-07 23:19:22,937 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:19:22] "GET /api/analytics?days=30 HTTP/1.1" 200 - +2025-12-07 23:33:48,313 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-07 23:33:48,313 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-07 23:33:54,795 - src.core.database - INFO - 数据库初始化成功 +2025-12-07 23:33:58,382 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-07 23:33:58,421 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-07 23:33:58,592 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-22 17:00:09,655 - werkzeug - INFO - Press CTRL+C to quit -2025-09-22 17:00:10,022 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:00:10,359 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-22 17:00:10,365 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-22 17:00:10,366 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-22 17:00:27,286 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:00:27,969 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:00:28,140 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:28] "GET / HTTP/1.1" 200 - -2025-09-22 17:00:28,208 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:28] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-22 17:00:28,225 - src.web.app - ERROR - Exception on /api/alerts [GET] + * Running on http://192.168.31.202:5000 +2025-12-07 23:33:58,600 - werkzeug - INFO - Press CTRL+C to quit +2025-12-07 23:33:59,099 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:33:59,496 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-07 23:33:59,513 - websockets.server - INFO - server listening on [::1]:8765 +2025-12-07 23:33:59,513 - websockets.server - INFO - server listening on 127.0.0.1:8765 +2025-12-07 23:34:00,645 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:34:01,063 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:34:01,463 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:34:01,863 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-07 23:34:01,872 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:34:02,262 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-07 23:34:03,962 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:03] "GET /api/alerts HTTP/1.1" 200 - +2025-12-07 23:34:04,855 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:04] "GET / HTTP/1.1" 200 - +2025-12-07 23:34:05,112 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:05] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-07 23:34:05,152 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:05] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-07 23:34:05,171 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:05] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-07 23:34:05,180 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:05] "GET /static/css/design-system.css HTTP/1.1" 200 - +2025-12-07 23:34:05,446 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:05] "GET /api/system/info HTTP/1.1" 200 - +2025-12-07 23:34:05,564 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:34:05,572 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 920, in full_dispatch_request - return self.finalize_request(rv) - ~~~~~~~~~~~~~~~~~~~~~^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 939, in finalize_request - response = self.make_response(rv) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1212, in make_response - raise TypeError( - ...<3 lines>... - ) -TypeError: The view function for 'alerts.get_alerts' did not return a valid response. The function either returned None or ended without a return statement. -2025-09-22 17:00:28,229 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:28] "GET /api/alerts HTTP/1.1" 500 - -2025-09-22 17:00:28,230 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:28] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:00:28,239 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:28] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:00:28,309 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:00:28,309 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:00:29,418 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:00:29,441 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:00:29,445 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:00:29,478 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:00:29,810 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-22 17:00:29,811 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:29] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:00:29,858 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:00:29,861 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-22 17:00:29,862 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-22 17:00:29,864 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-22 17:00:29,866 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-22 17:00:29,867 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-22 17:00:29,868 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-22 17:00:29,869 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-22 17:00:29,871 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-22 17:00:29,872 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-22 17:00:29,874 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-22 17:00:29,875 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-22 17:00:29,877 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-22 17:00:29,878 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-22 17:00:29,880 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-22 17:00:29,881 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-22 17:00:29,883 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-22 17:00:29,884 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-22 17:00:29,886 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-22 17:00:29,887 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-22 17:00:29,889 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-22 17:00:29,890 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-22 17:00:29,892 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-22 17:00:30,021 - src.core.query_optimizer - WARNING - 慢查询检测: get_conversations_paginated 耗时 1.78s -2025-09-22 17:00:30,022 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:30] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:00:30,106 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:00:30,159 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:00:30,376 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:30] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:00:30,464 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:00:30,507 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:00:30,507 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:00:30,775 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:30] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:00:31,886 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:31] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:00:33,320 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:00:33,320 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:00:35,478 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:00:35,478 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:00:35,508 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:00:35,508 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:00:43,142 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:43] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:00:47,909 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:47] "GET /api/token-monitor/stats HTTP/1.1" 200 - -2025-09-22 17:00:48,605 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:48] "GET /api/token-monitor/records HTTP/1.1" 200 - -2025-09-22 17:00:51,777 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:51] "GET /api/ai-monitor/stats HTTP/1.1" 200 - -2025-09-22 17:00:52,492 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:52] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - -2025-09-22 17:00:52,492 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:52] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - -2025-09-22 17:00:52,493 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:52] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - -2025-09-22 17:00:52,790 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:52] "GET /api/token-monitor/chart HTTP/1.1" 200 - -2025-09-22 17:00:56,028 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:56] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-09-22 17:00:56,033 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:56] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-09-22 17:00:56,034 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:56] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-09-22 17:00:56,035 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:56] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-09-22 17:00:56,963 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.08s -2025-09-22 17:00:57,054 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-22 17:00:57,314 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:57] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:00:57,401 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:57] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 17:00:58,462 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-22 17:00:58,811 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:58] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 17:00:58,974 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:00:58] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:07:00,102 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-22 17:07:00,103 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-22 17:07:04,421 - src.core.database - INFO - 数据库初始化成功 -2025-09-22 17:07:06,258 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-22 17:07:06,266 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-22 17:07:06,334 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-22 17:07:06,335 - werkzeug - INFO - Press CTRL+C to quit -2025-09-22 17:07:06,407 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:06] "GET / HTTP/1.1" 200 - -2025-09-22 17:07:06,627 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:06] "GET /static/css/style.css HTTP/1.1" 200 - -2025-09-22 17:07:06,651 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:06] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:07:06,658 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:06] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-22 17:07:06,701 - src.web.app - ERROR - Exception on /api/alerts [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 920, in full_dispatch_request - return self.finalize_request(rv) - ~~~~~~~~~~~~~~~~~~~~~^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 939, in finalize_request - response = self.make_response(rv) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1212, in make_response - raise TypeError( - ...<3 lines>... - ) -TypeError: The view function for 'alerts.get_alerts' did not return a valid response. The function either returned None or ended without a return statement. -2025-09-22 17:07:06,703 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:07:06,710 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:06] "GET /api/alerts HTTP/1.1" 500 - -2025-09-22 17:07:06,712 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:06] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:07:06,723 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:06] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:07:07,048 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-22 17:07:07,055 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-22 17:07:07,055 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-22 17:07:07,927 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:07:07,929 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:07:07,950 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:07:07,959 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:07:08,292 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:07:08,294 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-22 17:07:08,295 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-22 17:07:08,296 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-22 17:07:08,297 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-22 17:07:08,298 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-22 17:07:08,300 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-22 17:07:08,301 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-22 17:07:08,302 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-22 17:07:08,303 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-22 17:07:08,303 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-22 17:07:08,304 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-22 17:07:08,305 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-22 17:07:08,306 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-22 17:07:08,307 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-22 17:07:08,307 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-22 17:07:08,308 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-22 17:07:08,309 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-22 17:07:08,310 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-22 17:07:08,310 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-22 17:07:08,310 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:08] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:07:08,311 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-22 17:07:08,312 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-22 17:07:08,314 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-22 17:07:08,316 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-22 17:07:08,438 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:08] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:07:08,490 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:08] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:07:08,607 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:07:08,619 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:07:08,945 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:07:08,971 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:07:08,971 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:07:09,197 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:09] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:07:10,322 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:10] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:07:13,945 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:07:13,960 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:07:13,975 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:07:13,975 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:07:14,166 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:14] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:07:20,480 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:20] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-09-22 17:07:20,487 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:20] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-09-22 17:07:20,488 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:20] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-09-22 17:07:20,489 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:20] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-09-22 17:07:21,710 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:21] "POST /api/system-optimizer/optimize-cpu HTTP/1.1" 200 - -2025-09-22 17:07:24,143 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:24] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-09-22 17:07:24,147 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:24] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-09-22 17:07:24,149 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:24] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-09-22 17:07:24,150 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:24] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-09-22 17:07:25,236 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.03s -2025-09-22 17:07:25,355 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-22 17:07:25,572 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:25] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:07:25,701 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:25] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 17:07:26,781 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.08s -2025-09-22 17:07:27,155 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:27] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 17:07:29,354 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:29] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 17:07:31,386 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:31] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:07:31,387 - src.web.app - ERROR - Exception on /api/alerts [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 920, in full_dispatch_request - return self.finalize_request(rv) - ~~~~~~~~~~~~~~~~~~~~~^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 939, in finalize_request - response = self.make_response(rv) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1212, in make_response - raise TypeError( - ...<3 lines>... - ) -TypeError: The view function for 'alerts.get_alerts' did not return a valid response. The function either returned None or ended without a return statement. -2025-09-22 17:07:31,390 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:31] "GET /api/alerts HTTP/1.1" 500 - -2025-09-22 17:07:32,265 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:32] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:07:32,819 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:32] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:07:45,972 - src.dialogue.realtime_chat - INFO - 创建新会话: session_user_001_1758557265 -2025-09-22 17:07:45,973 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:45] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-22 17:07:48,590 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '蓝牙授权失败' 返回 2 个结果 -2025-09-22 17:07:55,626 - src.core.llm_client - INFO - API请求成功 -2025-09-22 17:07:56,319 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:07:56] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-22 17:08:08,677 - src.web.app - ERROR - Exception on /api/alerts [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 920, in full_dispatch_request - return self.finalize_request(rv) - ~~~~~~~~~~~~~~~~~~~~~^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 939, in finalize_request - response = self.make_response(rv) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1212, in make_response - raise TypeError( - ...<3 lines>... - ) -TypeError: The view function for 'alerts.get_alerts' did not return a valid response. The function either returned None or ended without a return statement. -2025-09-22 17:08:08,678 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:08] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 500 - -2025-09-22 17:08:17,098 - src.web.app - ERROR - Exception on /api/alerts [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 920, in full_dispatch_request - return self.finalize_request(rv) - ~~~~~~~~~~~~~~~~~~~~~^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 939, in finalize_request - response = self.make_response(rv) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1212, in make_response - raise TypeError( - ...<3 lines>... - ) -TypeError: The view function for 'alerts.get_alerts' did not return a valid response. The function either returned None or ended without a return statement. -2025-09-22 17:08:17,101 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:17] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 500 - -2025-09-22 17:08:27,096 - src.web.app - ERROR - Exception on /api/alerts [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 920, in full_dispatch_request - return self.finalize_request(rv) - ~~~~~~~~~~~~~~~~~~~~~^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 939, in finalize_request - response = self.make_response(rv) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1212, in make_response - raise TypeError( - ...<3 lines>... - ) -TypeError: The view function for 'alerts.get_alerts' did not return a valid response. The function either returned None or ended without a return statement. -2025-09-22 17:08:27,097 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:27] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 500 - -2025-09-22 17:08:37,102 - src.web.app - ERROR - Exception on /api/alerts [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 920, in full_dispatch_request - return self.finalize_request(rv) - ~~~~~~~~~~~~~~~~~~~~~^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 939, in finalize_request - response = self.make_response(rv) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1212, in make_response - raise TypeError( - ...<3 lines>... - ) -TypeError: The view function for 'alerts.get_alerts' did not return a valid response. The function either returned None or ended without a return statement. -2025-09-22 17:08:37,103 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:37] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 500 - -2025-09-22 17:08:47,088 - src.web.app - ERROR - Exception on /api/alerts [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 920, in full_dispatch_request - return self.finalize_request(rv) - ~~~~~~~~~~~~~~~~~~~~~^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 939, in finalize_request - response = self.make_response(rv) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1212, in make_response - raise TypeError( - ...<3 lines>... - ) -TypeError: The view function for 'alerts.get_alerts' did not return a valid response. The function either returned None or ended without a return statement. -2025-09-22 17:08:47,090 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:47] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 500 - -2025-09-22 17:08:56,972 - src.web.app - ERROR - Exception on /api/alerts [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 920, in full_dispatch_request - return self.finalize_request(rv) - ~~~~~~~~~~~~~~~~~~~~~^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 939, in finalize_request - response = self.make_response(rv) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1212, in make_response - raise TypeError( - ...<3 lines>... - ) -TypeError: The view function for 'alerts.get_alerts' did not return a valid response. The function either returned None or ended without a return statement. -2025-09-22 17:08:56,975 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:56] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 500 - -2025-09-22 17:08:58,436 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:58] "GET / HTTP/1.1" 200 - -2025-09-22 17:08:58,451 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:58] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-22 17:08:58,453 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:58] "GET /static/css/style.css HTTP/1.1" 304 - -2025-09-22 17:08:58,455 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:58] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-22 17:08:58,550 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:58] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:08:58,550 - src.web.app - ERROR - Exception on /api/alerts [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 920, in full_dispatch_request - return self.finalize_request(rv) - ~~~~~~~~~~~~~~~~~~~~~^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 939, in finalize_request - response = self.make_response(rv) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1212, in make_response - raise TypeError( - ...<3 lines>... - ) -TypeError: The view function for 'alerts.get_alerts' did not return a valid response. The function either returned None or ended without a return statement. -2025-09-22 17:08:58,557 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:58] "GET /api/alerts HTTP/1.1" 500 - -2025-09-22 17:08:58,557 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:58] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:08:58,560 - src.web.app - ERROR - Exception on /api/alerts [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 920, in full_dispatch_request - return self.finalize_request(rv) - ~~~~~~~~~~~~~~~~~~~~~^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 939, in finalize_request - response = self.make_response(rv) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1212, in make_response - raise TypeError( - ...<3 lines>... - ) -TypeError: The view function for 'alerts.get_alerts' did not return a valid response. The function either returned None or ended without a return statement. -2025-09-22 17:08:58,563 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:58] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:08:58,566 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:58] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 500 - -2025-09-22 17:08:59,436 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:59] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:08:59,446 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:59] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:08:59,907 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:08:59] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:09:00,217 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:00] "GET / HTTP/1.1" 200 - -2025-09-22 17:09:00,230 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:00] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-22 17:09:00,231 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:00] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-22 17:09:00,232 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:00] "GET /static/css/style.css HTTP/1.1" 304 - -2025-09-22 17:09:00,264 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:00] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:09:00,265 - src.web.app - ERROR - Exception on /api/alerts [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 920, in full_dispatch_request - return self.finalize_request(rv) - ~~~~~~~~~~~~~~~~~~~~~^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 939, in finalize_request - response = self.make_response(rv) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1212, in make_response - raise TypeError( - ...<3 lines>... - ) -TypeError: The view function for 'alerts.get_alerts' did not return a valid response. The function either returned None or ended without a return statement. -2025-09-22 17:09:00,269 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:00] "GET /api/alerts HTTP/1.1" 500 - -2025-09-22 17:09:00,273 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:00] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:09:00,275 - src.web.app - ERROR - Exception on /api/alerts [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 920, in full_dispatch_request - return self.finalize_request(rv) - ~~~~~~~~~~~~~~~~~~~~~^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 939, in finalize_request - response = self.make_response(rv) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1212, in make_response - raise TypeError( - ...<3 lines>... - ) -TypeError: The view function for 'alerts.get_alerts' did not return a valid response. The function either returned None or ended without a return statement. -2025-09-22 17:09:00,278 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:00] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:09:00,280 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:00] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 500 - -2025-09-22 17:09:01,131 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:01] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:09:01,159 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:01] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:09:01,658 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:01] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:09:04,635 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:04] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:09:05,475 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:05] "GET / HTTP/1.1" 200 - -2025-09-22 17:09:05,488 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:05] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-22 17:09:05,491 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:05] "GET /static/css/style.css HTTP/1.1" 304 - -2025-09-22 17:09:05,492 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:05] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-22 17:09:05,512 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:05] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:09:05,513 - src.web.app - ERROR - Exception on /api/alerts [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 920, in full_dispatch_request - return self.finalize_request(rv) - ~~~~~~~~~~~~~~~~~~~~~^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 939, in finalize_request - response = self.make_response(rv) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1212, in make_response - raise TypeError( - ...<3 lines>... - ) -TypeError: The view function for 'alerts.get_alerts' did not return a valid response. The function either returned None or ended without a return statement. -2025-09-22 17:09:05,517 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:05] "GET /api/alerts HTTP/1.1" 500 - -2025-09-22 17:09:05,519 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:05] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:09:05,525 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:05] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:09:06,370 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:06] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:09:06,370 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:06] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:09:06,375 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:06] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:09:06,911 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:09:06] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:09:33,125 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-22 17:09:33,126 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-22 17:09:37,348 - src.core.database - INFO - 数据库初始化成功 -2025-09-22 17:09:39,134 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-22 17:09:39,142 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-22 17:09:39,230 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-22 17:09:39,231 - werkzeug - INFO - Press CTRL+C to quit -2025-09-22 17:09:39,601 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:09:39,938 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-22 17:09:39,943 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-22 17:09:39,944 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-22 17:09:51,444 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:09:52,150 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:09:52,514 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:09:52,514 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:09:57,520 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:09:57,520 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:10:01,795 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:01] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:10:08,160 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:08] "GET /api/alerts?page=1&per_page=5 HTTP/1.1" 200 - -2025-09-22 17:10:33,848 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:33] "GET / HTTP/1.1" 200 - -2025-09-22 17:10:34,033 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:34] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-22 17:10:34,043 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:34] "GET /static/css/style.css HTTP/1.1" 304 - -2025-09-22 17:10:34,047 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:34] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-22 17:10:34,067 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:34] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:10:34,405 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:10:34,747 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-22 17:10:34,748 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:34] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:10:34,752 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:34] "GET / HTTP/1.1" 200 - -2025-09-22 17:10:34,756 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:34] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:10:34,766 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:34] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-22 17:10:34,768 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:34] "GET /static/css/style.css HTTP/1.1" 304 - -2025-09-22 17:10:34,770 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:34] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-22 17:10:34,806 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:34] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:10:34,810 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:34] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:10:34,814 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:34] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:10:35,103 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:10:35,310 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:10:35,454 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:10:35,456 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-22 17:10:35,457 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-22 17:10:35,458 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-22 17:10:35,458 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-22 17:10:35,459 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-22 17:10:35,460 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-22 17:10:35,461 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-22 17:10:35,461 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-22 17:10:35,462 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-22 17:10:35,463 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-22 17:10:35,463 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-22 17:10:35,464 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-22 17:10:35,465 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-22 17:10:35,466 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-22 17:10:35,467 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-22 17:10:35,468 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-22 17:10:35,470 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-22 17:10:35,471 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-22 17:10:35,472 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-22 17:10:35,473 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-22 17:10:35,474 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-22 17:10:35,474 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-22 17:10:35,753 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:35] "GET / HTTP/1.1" 200 - -2025-09-22 17:10:35,763 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:35] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-22 17:10:35,765 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:35] "GET /static/css/style.css HTTP/1.1" 304 - -2025-09-22 17:10:35,767 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:35] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-22 17:10:35,796 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:35] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:10:35,799 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:35] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:10:35,821 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:35] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:10:35,841 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:35] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:10:35,842 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:35] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:10:35,989 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:10:36,004 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:10:36,028 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:10:36,321 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:36] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:10:36,341 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:10:36,342 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-22 17:10:36,343 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-22 17:10:36,344 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-22 17:10:36,345 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-22 17:10:36,345 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-22 17:10:36,346 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-22 17:10:36,347 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-22 17:10:36,348 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-22 17:10:36,348 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-22 17:10:36,350 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-22 17:10:36,351 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-22 17:10:36,353 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-22 17:10:36,355 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-22 17:10:36,357 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-22 17:10:36,358 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-22 17:10:36,359 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-22 17:10:36,360 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-22 17:10:36,361 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-22 17:10:36,362 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-22 17:10:36,362 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-22 17:10:36,363 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-22 17:10:36,364 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-22 17:10:36,378 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:10:36,519 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:36] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:10:36,542 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:36] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:10:36,544 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:36] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:10:36,676 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:10:36,997 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:10:37,021 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:10:37,251 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:37] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:10:37,486 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:37] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:10:37,487 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:37] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:10:37,489 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:37] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:10:37,526 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:37] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:10:37,527 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:37] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:10:37,674 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:10:37,812 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:37] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:10:38,050 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:10:38,386 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:38] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:10:39,434 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:39] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:10:39,984 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:39] "GET / HTTP/1.1" 200 - -2025-09-22 17:10:39,996 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:39] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-22 17:10:39,997 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:39] "GET /static/css/style.css HTTP/1.1" 304 - -2025-09-22 17:10:39,998 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:39] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-22 17:10:40,026 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:40] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:10:40,031 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:40] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:10:40,038 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:40] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:10:40,875 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:40] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:10:40,879 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:40] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:10:40,901 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:40] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:10:40,907 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:40] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:10:41,385 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:10:41,386 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:10:41,402 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:10:41] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:10:42,021 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:10:42,036 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:10:43,050 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:10:43,050 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:11:38,655 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-22 17:11:38,656 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-22 17:11:42,919 - src.core.database - INFO - 数据库初始化成功 -2025-09-22 17:11:44,329 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-22 17:11:44,335 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-22 17:11:44,393 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-22 17:11:44,393 - werkzeug - INFO - Press CTRL+C to quit -2025-09-22 17:11:44,761 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:11:45,109 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-22 17:11:45,116 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-22 17:11:45,116 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-22 17:11:53,116 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:11:53] "GET / HTTP/1.1" 200 - -2025-09-22 17:11:53,269 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:11:53] "GET /static/css/style.css HTTP/1.1" 304 - -2025-09-22 17:11:53,274 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:11:53] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-22 17:11:53,279 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:11:53] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-22 17:11:53,337 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:11:53] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:11:53,682 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:11:54,028 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-22 17:11:54,029 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:11:54] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:11:54,031 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:11:54] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:11:54,408 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:11:54,566 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:11:54,568 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:11:54,756 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:11:54,758 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-22 17:11:54,759 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-22 17:11:54,759 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-22 17:11:54,760 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-22 17:11:54,761 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-22 17:11:54,761 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-22 17:11:54,762 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-22 17:11:54,763 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-22 17:11:54,764 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-22 17:11:54,764 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-22 17:11:54,765 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-22 17:11:54,766 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-22 17:11:54,767 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-22 17:11:54,768 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-22 17:11:54,769 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-22 17:11:54,770 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-22 17:11:54,772 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-22 17:11:54,772 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-22 17:11:54,773 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-22 17:11:54,774 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-22 17:11:54,775 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-22 17:11:54,775 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-22 17:11:55,074 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:11:55] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:11:55,075 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:11:55] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:11:55,078 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:11:55] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:11:55,244 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:11:55,255 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:11:55,589 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:11:55,617 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:11:55,617 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:11:55,659 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:11:55] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:11:56,949 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:11:56] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:12:00,599 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:12:00,599 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:12:00,628 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:12:00,629 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:13:35,497 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:35] "GET / HTTP/1.1" 200 - -2025-09-22 17:13:35,511 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:35] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-22 17:13:35,513 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:35] "GET /static/css/style.css HTTP/1.1" 304 - -2025-09-22 17:13:35,514 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:35] "GET /static/js/dashboard.js HTTP/1.1" 304 - -2025-09-22 17:13:35,571 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:35] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:13:35,577 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:35] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:13:35,587 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:35] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:13:36,445 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:36] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:13:36,448 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:36] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:13:36,481 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:36] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:13:36,963 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:36] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:13:37,299 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:37] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:13:37,745 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:37] "GET / HTTP/1.1" 200 - -2025-09-22 17:13:37,761 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:37] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:13:37,761 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:37] "GET /static/css/style.css HTTP/1.1" 200 - -2025-09-22 17:13:37,762 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:37] "GET /static/js/dashboard.js HTTP/1.1" 200 - -2025-09-22 17:13:37,817 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:37] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:13:37,822 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:37] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:13:37,827 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:37] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:13:38,687 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:38] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:13:38,691 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:38] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:13:38,712 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:38] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:13:38,733 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:38] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:13:39,196 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:39] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:13:39,606 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:39] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:13:46,123 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-22 17:13:46,123 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-22 17:13:50,279 - src.core.database - INFO - 数据库初始化成功 -2025-09-22 17:13:51,957 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-22 17:13:51,964 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-22 17:13:52,020 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-22 17:13:52,020 - werkzeug - INFO - Press CTRL+C to quit -2025-09-22 17:13:52,117 - src.web.app - ERROR - Exception on / [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 919, in full_dispatch_request - rv = self.handle_user_exception(e) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask_cors\extension.py", line 176, in wrapped_function - return cors_after_request(app.make_response(f(*args, **kwargs))) - ~^^^^^^^^^^^^^^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 917, in full_dispatch_request - rv = self.dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 902, in dispatch_request - return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return] - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^ - File "e:\tsp-assistant\src\web\app.py", line 79, in index - response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate' - ^^^^^^^^^^^^^^^^ -AttributeError: 'str' object has no attribute 'headers' -2025-09-22 17:13:52,121 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:52] "GET / HTTP/1.1" 500 - -2025-09-22 17:13:52,385 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:13:52,777 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-22 17:13:52,783 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-22 17:13:52,783 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-22 17:13:54,679 - src.web.app - ERROR - Exception on / [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 919, in full_dispatch_request - rv = self.handle_user_exception(e) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask_cors\extension.py", line 176, in wrapped_function - return cors_after_request(app.make_response(f(*args, **kwargs))) - ~^^^^^^^^^^^^^^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 917, in full_dispatch_request - rv = self.dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 902, in dispatch_request - return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return] - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^ - File "e:\tsp-assistant\src\web\app.py", line 79, in index - response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate' - ^^^^^^^^^^^^^^^^ -AttributeError: 'str' object has no attribute 'headers' -2025-09-22 17:13:54,682 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:54] "GET / HTTP/1.1" 500 - -2025-09-22 17:13:55,406 - src.web.app - ERROR - Exception on / [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 919, in full_dispatch_request - rv = self.handle_user_exception(e) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask_cors\extension.py", line 176, in wrapped_function - return cors_after_request(app.make_response(f(*args, **kwargs))) - ~^^^^^^^^^^^^^^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 917, in full_dispatch_request - rv = self.dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 902, in dispatch_request - return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return] - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^ - File "e:\tsp-assistant\src\web\app.py", line 79, in index - response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate' - ^^^^^^^^^^^^^^^^ -AttributeError: 'str' object has no attribute 'headers' -2025-09-22 17:13:55,410 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:55] "GET / HTTP/1.1" 500 - -2025-09-22 17:13:55,954 - src.web.app - ERROR - Exception on / [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 919, in full_dispatch_request - rv = self.handle_user_exception(e) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask_cors\extension.py", line 176, in wrapped_function - return cors_after_request(app.make_response(f(*args, **kwargs))) - ~^^^^^^^^^^^^^^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 917, in full_dispatch_request - rv = self.dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 902, in dispatch_request - return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return] - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^ - File "e:\tsp-assistant\src\web\app.py", line 79, in index - response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate' - ^^^^^^^^^^^^^^^^ -AttributeError: 'str' object has no attribute 'headers' -2025-09-22 17:13:55,958 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:55] "GET / HTTP/1.1" 500 - -2025-09-22 17:13:56,127 - src.web.app - ERROR - Exception on / [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 919, in full_dispatch_request - rv = self.handle_user_exception(e) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask_cors\extension.py", line 176, in wrapped_function - return cors_after_request(app.make_response(f(*args, **kwargs))) - ~^^^^^^^^^^^^^^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 917, in full_dispatch_request - rv = self.dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 902, in dispatch_request - return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return] - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^ - File "e:\tsp-assistant\src\web\app.py", line 79, in index - response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate' - ^^^^^^^^^^^^^^^^ -AttributeError: 'str' object has no attribute 'headers' -2025-09-22 17:13:56,131 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:13:56] "GET / HTTP/1.1" 500 - -2025-09-22 17:14:02,336 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:14:02] "GET /dashboard HTTP/1.1" 404 - -2025-09-22 17:14:04,368 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:14:04] "GET /dashboard HTTP/1.1" 404 - -2025-09-22 17:14:04,966 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:14:04] "GET /dashboard HTTP/1.1" 404 - -2025-09-22 17:14:05,155 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:14:05] "GET /dashboard HTTP/1.1" 404 - -2025-09-22 17:14:05,334 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:14:05] "GET /dashboard HTTP/1.1" 404 - -2025-09-22 17:14:18,941 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:14:18] "GET /dashboard HTTP/1.1" 404 - -2025-09-22 17:14:21,374 - src.web.app - ERROR - Exception on / [GET] -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 919, in full_dispatch_request - rv = self.handle_user_exception(e) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask_cors\extension.py", line 176, in wrapped_function - return cors_after_request(app.make_response(f(*args, **kwargs))) - ~^^^^^^^^^^^^^^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 917, in full_dispatch_request - rv = self.dispatch_request() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\flask\app.py", line 902, in dispatch_request - return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return] - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^ - File "e:\tsp-assistant\src\web\app.py", line 79, in index - response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate' - ^^^^^^^^^^^^^^^^ -AttributeError: 'str' object has no attribute 'headers' -2025-09-22 17:14:21,376 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:14:21] "GET / HTTP/1.1" 500 - -2025-09-22 17:15:51,700 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-22 17:15:51,700 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-22 17:15:57,178 - src.core.database - INFO - 数据库初始化成功 -2025-09-22 17:16:00,608 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-22 17:16:00,617 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-22 17:16:00,705 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-22 17:16:00,705 - werkzeug - INFO - Press CTRL+C to quit -2025-09-22 17:16:00,867 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:00] "GET /dashboard HTTP/1.1" 200 - -2025-09-22 17:16:01,090 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:16:01,444 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-22 17:16:01,450 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-22 17:16:01,451 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-22 17:16:16,417 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:16] "GET / HTTP/1.1" 200 - -2025-09-22 17:16:16,719 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:16] "GET /static/js/dashboard.js?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:16,741 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:16] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:16,750 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:16] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:16,760 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:16] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-22 17:16:16,948 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:16] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:16:17,286 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:16:17,641 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-22 17:16:17,642 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:17] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:16:17,647 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:17] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:16:18,008 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:16:18,157 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:16:18,186 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:16:18,361 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:16:18,363 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-22 17:16:18,364 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-22 17:16:18,365 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-22 17:16:18,366 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-22 17:16:18,367 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-22 17:16:18,369 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-22 17:16:18,370 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-22 17:16:18,371 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-22 17:16:18,371 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-22 17:16:18,372 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-22 17:16:18,373 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-22 17:16:18,374 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-22 17:16:18,375 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-22 17:16:18,376 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-22 17:16:18,377 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-22 17:16:18,379 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-22 17:16:18,381 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-22 17:16:18,383 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-22 17:16:18,384 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-22 17:16:18,385 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-22 17:16:18,387 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-22 17:16:18,388 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-22 17:16:18,657 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:18] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:16:18,678 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:18] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:16:18,730 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:18] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:16:18,848 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:16:18,890 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:16:19,192 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:16:19,192 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:16:19,239 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:16:19,275 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:19] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:16:20,631 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:20] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:16:24,203 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:16:24,204 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:16:24,249 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:16:24,249 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:16:36,352 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:36] "GET /dashboard HTTP/1.1" 200 - -2025-09-22 17:16:36,368 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:36] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:36,622 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:36] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:36,681 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:36] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:16:36,940 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:36] "GET /static/js/dashboard.js?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:37,286 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:37] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:16:37,287 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:37] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:16:37,599 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:37] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:16:37,918 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:37] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:16:38,148 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:38] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:16:38,156 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:38] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:16:38,476 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:38] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:16:38,681 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:38] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:16:39,751 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:39] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:16:43,566 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:43] "GET / HTTP/1.1" 200 - -2025-09-22 17:16:43,579 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:43] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-22 17:16:43,581 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:43] "GET /static/js/dashboard.js?v=1.0.0 HTTP/1.1" 304 - -2025-09-22 17:16:43,581 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:43] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-22 17:16:43,588 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:43] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-22 17:16:43,601 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:43] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:16:43,609 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:43] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:16:43,613 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:43] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:16:44,473 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:44] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:16:44,473 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:44] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:16:44,474 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:44] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:16:44,499 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:44] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:16:44,988 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:44] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:16:46,170 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:46] "GET / HTTP/1.1" 200 - -2025-09-22 17:16:46,184 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:46] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:46,185 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:46] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:46,186 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:46] "GET /static/js/dashboard.js?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:46,192 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:46] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:16:46,236 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:46] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:16:46,242 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:46] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:16:46,245 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:46] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:16:47,103 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:47] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:16:47,103 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:47] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:16:47,107 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:47] "GET / HTTP/1.1" 200 - -2025-09-22 17:16:47,109 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:47] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:16:47,124 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:47] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:16:47,125 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:47] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:47,126 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:47] "GET /static/js/dashboard.js?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:47,126 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:47] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:47,132 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:47] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:16:47,173 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:47] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:16:47,179 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:47] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:16:47,182 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:47] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:16:47,615 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:47] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:16:47,991 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:47] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:16:48,046 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:16:48,049 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET / HTTP/1.1" 200 - -2025-09-22 17:16:48,055 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:16:48,066 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:48,067 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:48,067 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:16:48,068 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /static/js/dashboard.js?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:48,077 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:16:48,106 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:16:48,113 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:16:48,114 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET / HTTP/1.1" 200 - -2025-09-22 17:16:48,121 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:16:48,142 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:48,143 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:48,147 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /static/js/dashboard.js?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:48,150 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:16:48,181 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:16:48,188 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:16:48,191 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:16:48,900 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:16:48,901 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:16:48,985 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:48] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:16:49,018 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:16:49,379 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:16:49,544 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:16:49,866 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:16:49,905 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:16:49,905 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:16:49,906 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:16:49,910 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET / HTTP/1.1" 200 - -2025-09-22 17:16:49,913 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:16:49,913 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:16:49,928 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:49,929 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:49,930 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /static/js/dashboard.js?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:49,936 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:16:49,947 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET / HTTP/1.1" 200 - -2025-09-22 17:16:49,959 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:49,960 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:49,963 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /static/js/dashboard.js?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:49,964 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:16:49,966 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:16:49,998 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:49] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:16:50,005 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:50] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:16:50,009 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:50] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:16:50,454 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:50] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:16:50,864 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:50] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:16:50,866 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:50] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:16:50,868 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:50] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:16:50,869 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:50] "GET / HTTP/1.1" 200 - -2025-09-22 17:16:50,871 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:50] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:16:50,883 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:50] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:50,884 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:50] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:50,885 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:50] "GET /static/js/dashboard.js?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:16:50,892 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:50] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:16:50,892 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:50] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:16:50,917 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:50] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:16:50,924 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:50] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:16:50,928 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:50] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:16:51,378 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:51] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:16:51,779 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:51] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:16:51,782 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:51] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:16:51,791 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:51] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:16:51,795 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:51] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:16:51,848 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:51] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:16:52,346 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:16:52] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:18:33,287 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:33] "GET /dashboard HTTP/1.1" 200 - -2025-09-22 17:18:33,601 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:33] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:18:33,606 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:33] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:18:33,607 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:33] "GET /static/js/dashboard.js?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:18:33,922 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:33] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:18:34,242 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:34] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:18:34,247 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:34] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:18:34,560 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:34] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:18:35,099 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:35] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:18:35,103 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:35] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:18:35,407 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:35] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:18:35,417 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:35] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:18:35,616 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:35] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:18:35,766 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:35] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:18:37,858 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:37] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:18:38,567 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:18:38,583 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:18:39,260 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:18:39,293 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:18:39,644 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:18:39,644 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:18:39,644 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:18:39,644 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:18:39,645 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:18:39,645 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:18:39,645 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:18:39,645 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:18:39,645 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:18:39,645 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:18:39,645 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:18:39,645 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:18:39,646 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:18:39,650 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:18:39,650 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:18:39,651 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:39] "GET /api/agent/tools/stats HTTP/1.1" 500 - -2025-09-22 17:18:39,652 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:18:39,653 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:18:39,653 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:18:39,653 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:18:39,653 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:18:39,653 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:18:39,654 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:18:39,654 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:18:39,654 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:18:39,654 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:18:39,655 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:18:39,655 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:18:39,655 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:18:39,657 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:18:39,658 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:18:39,658 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:39] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-22 17:18:42,507 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:18:42] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 17:18:44,644 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:18:44,644 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:18:44,660 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:18:44,660 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:19:15,981 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:15] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:19:16,939 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:16] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:19:17,244 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:19:17,244 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:19:17,930 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:19:17,944 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:19:18,270 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:19:18,270 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:19:18,271 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:19:18,271 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:19:18,271 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:19:18,271 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:19:18,271 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:19:18,271 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:19:18,271 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:19:18,271 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:19:18,272 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:19:18,272 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:19:18,272 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:19:18,274 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:19:18,274 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:19:18,274 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:18] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-22 17:19:18,294 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:19:18,294 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:19:18,294 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:19:18,294 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:19:18,294 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:19:18,294 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:19:18,295 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:19:18,295 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:19:18,295 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:19:18,295 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:19:18,295 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:19:18,295 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:19:18,295 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:19:18,297 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:19:18,298 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:19:18,298 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:18] "GET /api/agent/tools/stats HTTP/1.1" 500 - -2025-09-22 17:19:18,690 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:18] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:19:19,988 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:19] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:19:21,151 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:21] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:19:21,151 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:21] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:19:21,667 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:21] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:19:22,113 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:19:22,974 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:22] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:19:22,992 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:22] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:19:23,272 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:19:23,273 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:19:23,303 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:19:23,304 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:19:23,532 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:23] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:19:24,250 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:24] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:19:25,125 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:25] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:19:25,125 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:25] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:19:25,244 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:25] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:19:25,652 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:25] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:19:26,433 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:26] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:19:26,444 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:26] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:19:27,363 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:27] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:19:34,414 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:34] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:19:35,292 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:35] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:19:35,301 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:35] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:19:35,775 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:35] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:19:39,778 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:19:40,088 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:19:40,471 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:19:40,794 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:19:40,812 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:19:40,812 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:19:40,812 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:19:40,812 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:19:40,812 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:19:40,812 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:19:40,812 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:19:40,813 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:19:40,813 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:19:40,813 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:19:40,813 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:19:40,813 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:19:40,813 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:19:40,815 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:19:40,815 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:19:40,815 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:40] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-22 17:19:41,158 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:19:41,159 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:19:41,159 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:19:41,159 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:19:41,160 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:19:41,160 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:19:41,160 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:19:41,160 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:19:41,161 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:19:41,161 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:19:41,161 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:19:41,161 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:19:41,161 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:19:41,165 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:19:41,165 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:19:41,166 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:41] "GET /api/agent/tools/stats HTTP/1.1" 500 - -2025-09-22 17:19:44,582 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:19:44,586 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:19:45,284 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:19:45,286 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:19:45,649 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:19:45,649 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:19:45,649 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:19:45,649 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:19:45,649 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:19:45,649 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:19:45,650 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:19:45,650 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:19:45,650 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:19:45,650 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:19:45,650 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:19:45,650 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:19:45,650 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:19:45,651 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:19:45,651 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:19:45,651 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:19:45,651 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:19:45,651 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:19:45,651 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:19:45,651 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:19:45,651 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:19:45,652 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:19:45,652 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:19:45,652 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:19:45,652 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:19:45,652 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:19:45,655 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:19:45,655 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:19:45,655 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:45] "GET /api/agent/tools/stats HTTP/1.1" 500 - -2025-09-22 17:19:45,657 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:19:45,657 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:19:45,657 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:19:45] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-22 17:19:45,813 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:19:45,813 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:19:46,163 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:19:46,164 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:19:50,656 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:19:50,657 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:19:50,657 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:19:50,657 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:20:08,090 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:08] "POST /api/batch-delete/alerts HTTP/1.1" 200 - -2025-09-22 17:20:16,499 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:16] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:20:17,388 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:17] "GET /api/token-monitor/stats HTTP/1.1" 200 - -2025-09-22 17:20:18,415 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:18] "GET /api/token-monitor/records HTTP/1.1" 200 - -2025-09-22 17:20:21,209 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:21] "GET /api/ai-monitor/stats HTTP/1.1" 200 - -2025-09-22 17:20:22,197 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:22] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - -2025-09-22 17:20:22,198 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:22] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - -2025-09-22 17:20:22,222 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:22] "GET /api/ai-monitor/stats HTTP/1.1" 200 - -2025-09-22 17:20:22,235 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:22] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - -2025-09-22 17:20:22,644 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:22] "GET /api/token-monitor/chart HTTP/1.1" 200 - -2025-09-22 17:20:23,224 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:23] "GET /api/token-monitor/stats HTTP/1.1" 200 - -2025-09-22 17:20:23,239 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:23] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - -2025-09-22 17:20:23,239 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:23] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - -2025-09-22 17:20:23,262 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:23] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - -2025-09-22 17:20:23,643 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:23] "GET /api/ai-monitor/stats HTTP/1.1" 200 - -2025-09-22 17:20:24,241 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:24] "GET /api/token-monitor/records HTTP/1.1" 200 - -2025-09-22 17:20:24,659 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:24] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - -2025-09-22 17:20:24,659 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:24] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - -2025-09-22 17:20:24,693 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:24] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - -2025-09-22 17:20:26,006 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:26] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-09-22 17:20:26,327 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:26] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-09-22 17:20:26,327 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:26] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-09-22 17:20:26,328 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:26] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-09-22 17:20:28,482 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:28] "GET /api/token-monitor/chart HTTP/1.1" 200 - -2025-09-22 17:20:29,207 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:20:29,209 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:20:29,899 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:20:29,912 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:20:30,237 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:20:30,237 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:20:30,237 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:20:30,237 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:20:30,238 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:20:30,238 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:20:30,238 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:20:30,238 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:20:30,238 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:20:30,238 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:20:30,239 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:20:30,239 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:20:30,239 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:20:30,241 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:20:30,241 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:20:30,241 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:30] "GET /api/agent/tools/stats HTTP/1.1" 500 - -2025-09-22 17:20:30,262 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:20:30,262 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:20:30,263 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:20:30,263 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:20:30,263 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:20:30,263 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:20:30,263 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:20:30,263 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:20:30,264 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:20:30,264 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:20:30,264 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:20:30,264 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:20:30,264 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:20:30,266 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:20:30,267 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:20:30,267 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:20:30] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-22 17:20:35,244 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:20:35,245 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:20:35,275 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:20:35,276 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:21:57,451 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-22 17:21:57,452 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-22 17:22:02,100 - src.core.database - INFO - 数据库初始化成功 -2025-09-22 17:22:05,179 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-22 17:22:05,197 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-22 17:22:05,333 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-22 17:22:05,334 - werkzeug - INFO - Press CTRL+C to quit -2025-09-22 17:22:05,709 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:22:06,050 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-22 17:22:06,056 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-22 17:22:06,056 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-22 17:22:06,678 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:22:07,362 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:22:07,712 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:22:07,712 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:22:09,514 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:09] "GET / HTTP/1.1" 200 - -2025-09-22 17:22:09,921 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:09] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:22:09,936 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:09] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:22:09,937 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:09] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:22:09,960 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:09] "GET /static/js/dashboard.js?v=1.0.2 HTTP/1.1" 200 - -2025-09-22 17:22:10,051 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:10] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:22:10,090 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:10] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:22:10,395 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:22:10,738 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-22 17:22:10,739 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:10] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:22:10,746 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:10] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:22:11,341 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:22:11,343 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:22:11,678 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:22:11,680 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-22 17:22:11,681 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-22 17:22:11,682 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-22 17:22:11,682 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-22 17:22:11,683 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-22 17:22:11,684 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-22 17:22:11,684 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-22 17:22:11,685 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-22 17:22:11,687 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-22 17:22:11,688 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-22 17:22:11,689 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-22 17:22:11,691 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-22 17:22:11,693 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-22 17:22:11,693 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-22 17:22:11,694 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-22 17:22:11,695 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-22 17:22:11,696 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-22 17:22:11,696 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-22 17:22:11,697 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-22 17:22:11,698 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-22 17:22:11,698 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-22 17:22:11,699 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-22 17:22:11,858 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:11] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:22:11,868 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:11] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:22:12,058 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:22:12,406 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:22:12,585 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:12] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:22:12,714 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:22:12,715 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:22:13,854 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:22:17,411 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:22:17,411 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:22:20,044 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:20] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:22:20,929 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:20] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:22:20,930 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:20] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:22:21,503 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:21] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:22:30,094 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:30] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:22:30,940 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:30] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:22:30,944 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:30] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:22:31,482 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:31] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:22:40,098 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:40] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:22:40,955 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:40] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:22:40,957 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:40] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:22:41,496 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:41] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:22:50,094 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:50] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:22:50,951 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:50] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:22:50,951 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:50] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:22:51,495 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:22:51] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:23:00,093 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:23:00] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:23:00,987 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:23:00] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:23:00,987 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:23:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:23:01,471 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:23:01] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:23:03,525 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:23:03,527 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:23:04,196 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:23:04,215 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:23:04,541 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:23:04,542 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:23:04,542 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:23:04,542 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:23:04,542 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:23:04,542 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:23:04,542 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:23:04,542 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:23:04,543 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:23:04,543 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:23:04,543 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:23:04,543 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:23:04,543 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:23:04,547 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:23:04,548 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:23:04,548 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:23:04] "GET /api/agent/tools/stats HTTP/1.1" 500 - -2025-09-22 17:23:04,567 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:23:04,567 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:23:04,568 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:23:04,568 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:23:04,568 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:23:04,568 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:23:04,569 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:23:04,569 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:23:04,569 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:23:04,569 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:23:04,569 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:23:04,570 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:23:04,570 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:23:04,574 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:23:04,574 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:23:04,575 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:23:04] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-22 17:23:09,549 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:23:09,550 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:23:09,579 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:23:09,580 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:23:10,440 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:23:10,480 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:23:11,132 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:23:11,181 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:23:11,492 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:23:11,493 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:23:11,493 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:23:11,493 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:23:11,493 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:23:11,493 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:23:11,494 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:23:11,494 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:23:11,494 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:23:11,494 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:23:11,494 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:23:11,494 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:23:11,495 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:23:11,497 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:23:11,497 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:23:11,497 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:23:11] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-22 17:23:11,531 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:23:11,531 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:23:11,531 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:23:11,532 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:23:11,532 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:23:11,532 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:23:11,532 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:23:11,532 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:23:11,532 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:23:11,532 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:23:11,533 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:23:11,533 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:23:11,533 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:23:11,535 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:23:11,535 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:23:11,536 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:23:11] "GET /api/agent/tools/stats HTTP/1.1" 500 - -2025-09-22 17:23:16,506 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:23:16,507 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:23:16,537 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:23:16,537 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:23:20,455 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:23:20,459 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:23:21,164 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:23:21,173 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:23:21,502 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:23:21,503 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:23:21,503 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:23:21,503 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:23:21,503 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:23:21,503 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:23:21,504 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:23:21,504 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:23:21,504 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:23:21,504 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:23:21,504 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:23:21,504 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:23:21,505 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:23:21,507 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:23:21,508 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:23:21,508 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:23:21] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-22 17:23:21,534 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:23:21,535 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:23:21,535 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:23:21,535 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:23:21,535 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:23:21,535 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:23:21,535 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:23:21,535 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:23:21,535 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:23:21,536 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:23:21,536 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:23:21,536 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:23:21,536 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:23:21,539 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:23:21,539 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:23:21,539 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:23:21] "GET /api/agent/tools/stats HTTP/1.1" 500 - -2025-09-22 17:23:26,505 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:23:26,506 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:23:26,536 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:23:26,536 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:23:30,574 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:23:30,588 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:23:31,320 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:23:31,328 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:23:31,685 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:23:31,685 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:23:31,686 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:23:31,686 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:23:31,686 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:23:31,686 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:23:31,686 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:23:31,687 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:23:31,687 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:23:31,687 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:23:31,687 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:23:31,687 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:23:31,687 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:23:31,689 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:23:31,689 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:23:31,689 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:23:31] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-22 17:23:31,694 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:23:31,694 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:23:31,694 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:23:31,695 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:23:31,695 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:23:31,695 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:23:31,695 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:23:31,695 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:23:31,695 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:23:31,695 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:23:31,695 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:23:31,696 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:23:31,696 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:23:31,697 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:23:31,697 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:23:31,698 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:23:31] "GET /api/agent/tools/stats HTTP/1.1" 500 - -2025-09-22 17:23:36,700 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:23:36,700 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:23:36,700 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:23:36,700 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:23:39,283 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:23:39] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:24:15,142 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:15] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:24:34,803 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:34] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:24:51,699 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:51] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:24:54,660 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:54] "GET /api/token-monitor/stats HTTP/1.1" 200 - -2025-09-22 17:24:55,292 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:55] "GET /api/ai-monitor/stats HTTP/1.1" 200 - -2025-09-22 17:24:55,340 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:55] "GET /api/token-monitor/records HTTP/1.1" 200 - -2025-09-22 17:24:55,980 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:55] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - -2025-09-22 17:24:56,004 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:56] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - -2025-09-22 17:24:56,028 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:56] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - -2025-09-22 17:24:57,108 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.02s -2025-09-22 17:24:57,225 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.03s -2025-09-22 17:24:57,449 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:57] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:24:57,470 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:57] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-09-22 17:24:57,477 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:57] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-09-22 17:24:57,477 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:57] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-09-22 17:24:57,478 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:57] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-09-22 17:24:57,564 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:57] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 17:24:58,617 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-22 17:24:58,962 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:58] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 17:24:58,994 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:58] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 17:24:59,536 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:24:59] "GET /api/token-monitor/chart HTTP/1.1" 200 - -2025-09-22 17:26:12,615 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:26:12] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:26:15,542 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:26:15] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:26:21,319 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-22 17:26:21,319 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-22 17:26:26,418 - src.core.database - INFO - 数据库初始化成功 -2025-09-22 17:26:28,213 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-22 17:26:28,226 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-22 17:26:28,292 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-22 17:26:28,293 - werkzeug - INFO - Press CTRL+C to quit -2025-09-22 17:26:28,673 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:26:29,026 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-22 17:26:29,032 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-22 17:26:29,033 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-22 17:26:46,801 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:26:47,151 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-22 17:26:47,152 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:26:47] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:26:49,446 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:26:50,148 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:26:50,322 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:26:50,497 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:26:50,498 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:26:50,653 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:26:50,927 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:26:50] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:26:51,016 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:26:51,366 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:26:51,369 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:26:51,370 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:26:51,713 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:26:51,713 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:26:53,844 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:26:53] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:26:55,494 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:55] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:26:55,512 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:26:55,512 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:26:56,353 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:56] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:26:56,373 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:26:56,373 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:26:56,383 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:56] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:26:56,449 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:56] "GET / HTTP/1.1" 200 - -2025-09-22 17:26:56,634 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:56] "GET /static/js/dashboard.js?v=1.0.2 HTTP/1.1" 200 - -2025-09-22 17:26:56,651 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:56] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:26:56,656 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:56] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:26:56,667 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:56] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:26:56,706 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:56] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:26:56,712 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:56] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:26:56,719 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:56] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:26:56,720 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:26:56,721 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:26:56,944 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:56] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:26:57,592 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:57] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:26:57,810 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:57] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:26:57,920 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:26:58,089 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:58] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:26:58,157 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:26:58] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:26:58,265 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:26:58,267 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-22 17:26:58,268 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-22 17:26:58,269 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-22 17:26:58,271 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-22 17:26:58,272 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-22 17:26:58,273 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-22 17:26:58,275 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-22 17:26:58,277 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-22 17:26:58,279 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-22 17:26:58,281 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-22 17:26:58,282 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-22 17:26:58,283 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-22 17:26:58,283 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-22 17:26:58,284 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-22 17:26:58,285 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-22 17:26:58,286 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-22 17:26:58,286 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-22 17:26:58,287 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-22 17:26:58,289 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-22 17:26:58,290 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-22 17:26:58,292 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-22 17:26:58,293 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-22 17:26:58,436 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:58] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:26:58,482 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:58] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:26:59,148 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:59] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:26:59,298 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:59] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:26:59,497 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:26:59] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:27:01,261 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:01] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:27:01,808 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:01] "GET / HTTP/1.1" 200 - -2025-09-22 17:27:01,823 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:01] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-22 17:27:01,825 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:01] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-22 17:27:01,826 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:01] "GET /static/js/dashboard.js?v=1.0.2 HTTP/1.1" 304 - -2025-09-22 17:27:01,834 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:01] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-22 17:27:01,852 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:01] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:27:01,855 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:01] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:27:01,863 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:01] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:27:02,725 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:02] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:27:02,746 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:02] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:27:02,761 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:02] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:27:02,768 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:02] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:27:03,286 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:03] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:27:03,905 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:03] "GET / HTTP/1.1" 200 - -2025-09-22 17:27:03,922 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:03] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:27:03,923 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:03] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:27:03,925 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:03] "GET /static/js/dashboard.js?v=1.0.2 HTTP/1.1" 200 - -2025-09-22 17:27:03,934 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:03] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:27:03,975 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:03] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:27:03,979 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:03] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:27:03,987 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:03] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:27:04,841 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:04] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:27:04,845 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:04] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:27:04,852 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:04] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:27:04,854 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:04] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:27:04,878 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:04] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:27:05,361 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:27:05] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:27:06,831 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:27:06] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:28:06,680 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:06] "GET / HTTP/1.1" 200 - -2025-09-22 17:28:06,710 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:06] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:28:06,712 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:06] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:28:06,713 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:06] "GET /static/js/dashboard.js?v=1.0.2 HTTP/1.1" 200 - -2025-09-22 17:28:06,726 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:06] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:28:06,781 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:06] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:28:06,787 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:06] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:28:06,799 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:06] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:28:07,659 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:07] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:28:07,664 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:07] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:28:07,683 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:07] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:28:07,709 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:07] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:28:07,709 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:07] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:28:08,197 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:08] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:28:08,309 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:08] "GET / HTTP/1.1" 200 - -2025-09-22 17:28:08,329 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:08] "GET /static/js/dashboard.js?v=1.0.2 HTTP/1.1" 200 - -2025-09-22 17:28:08,331 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:08] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:28:08,332 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:08] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:28:08,344 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:08] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:28:08,381 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:08] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:28:08,384 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:08] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:28:08,392 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:08] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:28:09,265 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:28:09,269 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:28:09,274 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-22 17:28:09,280 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:28:09,283 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET / HTTP/1.1" 200 - -2025-09-22 17:28:09,286 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:28:09,311 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:28:09,313 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET / HTTP/1.1" 200 - -2025-09-22 17:28:09,313 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:28:09,316 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET /static/js/dashboard.js?v=1.0.2 HTTP/1.1" 200 - -2025-09-22 17:28:09,339 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:28:09,340 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:28:09,341 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET /static/js/dashboard.js?v=1.0.2 HTTP/1.1" 200 - -2025-09-22 17:28:09,355 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:28:09,415 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:28:09,422 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:28:09,433 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:28:09,629 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 17:28:09,813 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:09] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:28:10,115 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:10] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:28:10,289 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:10] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:28:10,296 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:10] "GET / HTTP/1.1" 200 - -2025-09-22 17:28:10,304 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:10] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:28:10,313 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:10] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:28:10,319 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:10] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:28:10,320 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:10] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:28:10,320 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:10] "GET /static/js/dashboard.js?v=1.0.2 HTTP/1.1" 200 - -2025-09-22 17:28:10,379 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:10] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:28:10,392 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:10] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:28:10,398 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:10] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:28:10,407 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:10] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:28:10,848 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:10] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:28:11,141 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:11] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:28:11,181 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:11] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:28:11,254 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:11] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:28:11,262 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:11] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:28:11,263 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:11] "GET / HTTP/1.1" 200 - -2025-09-22 17:28:11,271 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:11] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:28:11,272 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:11] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:28:11,286 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:11] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:28:11,287 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:11] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:28:11,288 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:11] "GET /static/js/dashboard.js?v=1.0.2 HTTP/1.1" 200 - -2025-09-22 17:28:11,302 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:11] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:28:11,323 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:11] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:28:11,339 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:11] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:28:11,346 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:11] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:28:11,753 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:11] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:28:12,169 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:12] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:28:12,200 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:12] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:28:12,209 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:12] "GET / HTTP/1.1" 200 - -2025-09-22 17:28:12,219 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:12] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:28:12,222 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:12] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:28:12,239 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:12] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:28:12,245 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:12] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:28:12,245 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:12] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:28:12,248 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:12] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:28:12,249 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:12] "GET /static/js/dashboard.js?v=1.0.2 HTTP/1.1" 200 - -2025-09-22 17:28:12,283 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:12] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:28:12,312 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:12] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:28:12,322 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:12] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:28:12,330 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:12] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:28:12,731 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:12] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:28:13,216 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:28:13,216 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:13] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:28:13,216 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:28:13,226 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:13] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:28:13,231 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:13] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:28:13,308 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:28:13,757 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:28:14,135 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:14] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:28:14,690 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:14] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:28:14,889 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.13s -2025-09-22 17:28:15,244 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:15] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 17:28:15,267 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:15] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 17:28:16,320 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-22 17:28:16,339 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.09s -2025-09-22 17:28:16,661 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:16] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:28:16,700 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:16] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 17:28:16,719 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:16] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 17:28:17,722 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-22 17:28:17,794 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-22 17:28:18,075 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:18] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 17:28:18,142 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:18] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:28:19,210 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-22 17:28:19,557 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:19] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 17:28:23,094 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:23] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:28:23,960 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:23] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:28:23,985 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:23] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:28:24,479 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:24] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:28:25,557 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-22 17:28:25,912 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:25] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 17:28:25,934 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:25] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 17:28:26,509 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:26] "GET /api/token-monitor/stats HTTP/1.1" 200 - -2025-09-22 17:28:27,001 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-22 17:28:27,233 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:27] "GET /api/token-monitor/records HTTP/1.1" 200 - -2025-09-22 17:28:27,349 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:27] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:28:27,641 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:27] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-09-22 17:28:27,649 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:27] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-09-22 17:28:27,650 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:27] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-09-22 17:28:27,651 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:27] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-09-22 17:28:28,404 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-22 17:28:28,750 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:28] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 17:28:29,243 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:29] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:28:31,429 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:31] "GET /api/token-monitor/chart HTTP/1.1" 200 - -2025-09-22 17:28:33,261 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:33] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:28:35,901 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:35] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:28:36,899 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:28:36,903 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:28:37,591 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:28:37,608 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:28:37,783 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:28:37] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:28:37,936 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:28:37,936 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:28:37,937 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:28:37,937 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:28:37,937 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:28:37,937 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:28:37,937 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:28:37,937 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:28:37,937 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:28:37,937 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:28:37,938 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:28:37,938 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:28:37,938 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:28:37,943 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:28:37,943 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:28:37,944 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:37] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-22 17:28:37,951 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:28:37,951 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:28:37,951 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:28:37,951 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:28:37,951 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:28:37,952 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:28:37,952 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:28:37,952 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:28:37,952 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:28:37,952 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:28:37,952 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:28:37,952 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:28:37,952 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:28:37,954 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:28:37,954 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:28:37,955 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:37] "GET /api/agent/tools/stats HTTP/1.1" 500 - -2025-09-22 17:28:38,919 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:38] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:28:39,779 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:39] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:28:39,779 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:39] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:28:40,288 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:40] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:28:40,709 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:28:40] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:28:41,365 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-22 17:28:41,736 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:41] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 17:28:41,750 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:41] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 17:28:42,809 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-22 17:28:42,943 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:28:42,943 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:28:42,958 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:28:42,958 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:28:43,187 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:43] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:28:43,640 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:28:43] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:28:44,298 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.10s -2025-09-22 17:28:44,647 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:28:44] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 17:28:47,029 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:28:47] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:28:50,116 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-22 17:28:50,471 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:28:50] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:29:05,617 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:05] "GET / HTTP/1.1" 200 - -2025-09-22 17:29:05,635 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:05] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:29:05,637 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:05] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:29:05,637 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:05] "GET /static/js/dashboard.js?v=1.0.2 HTTP/1.1" 200 - -2025-09-22 17:29:05,648 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:05] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:29:05,710 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:05] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:29:05,715 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:05] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:29:05,725 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:05] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:29:06,569 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:06] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:29:06,576 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:06] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:29:06,578 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:06] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:29:06,593 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:06] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:29:06,595 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:06] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:29:07,078 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:07] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:29:08,146 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-22 17:29:08,494 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:08] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 17:29:08,533 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:08] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 17:29:09,599 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-22 17:29:09,953 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:09] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:29:11,270 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.31s -2025-09-22 17:29:11,623 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:11] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 17:29:18,528 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-22 17:29:18,528 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-22 17:29:22,992 - src.core.database - INFO - 数据库初始化成功 -2025-09-22 17:29:25,184 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-22 17:29:25,198 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-22 17:29:25,264 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-22 17:29:25,264 - werkzeug - INFO - Press CTRL+C to quit -2025-09-22 17:29:25,427 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:25] "GET / HTTP/1.1" 200 - -2025-09-22 17:29:25,529 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:25] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-22 17:29:25,532 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:25] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-22 17:29:25,540 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:25] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-22 17:29:25,646 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:29:25,652 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:25] "GET /static/js/dashboard.js?v=1.0.3 HTTP/1.1" 200 - -2025-09-22 17:29:25,677 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:25] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:29:25,991 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-22 17:29:25,996 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-22 17:29:25,996 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-22 17:29:26,883 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:29:26,938 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:29:26,940 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:29:27,293 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-22 17:29:27,293 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:27] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:29:27,298 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:27] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:29:27,391 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:27] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:29:27,424 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:27] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:29:27,448 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:27] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:29:27,576 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:29:27,657 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:29:27,663 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:29:27,917 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:29:27,917 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:29:28,006 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:29:28,006 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:29:28,014 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:29:28,016 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-22 17:29:28,017 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-22 17:29:28,018 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-22 17:29:28,019 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-22 17:29:28,019 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-22 17:29:28,020 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-22 17:29:28,021 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-22 17:29:28,022 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-22 17:29:28,023 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-22 17:29:28,024 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-22 17:29:28,025 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-22 17:29:28,026 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-22 17:29:28,028 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-22 17:29:28,029 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-22 17:29:28,030 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-22 17:29:28,030 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-22 17:29:28,031 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-22 17:29:28,032 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-22 17:29:28,033 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-22 17:29:28,033 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-22 17:29:28,034 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-22 17:29:28,035 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-22 17:29:28,900 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:28] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:29:29,346 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:29] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:29:30,395 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-22 17:29:30,740 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:30] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 17:29:30,762 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:30] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 17:29:31,809 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-22 17:29:32,157 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:32] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:29:32,921 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:29:32,921 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:29:33,012 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:29:33,012 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:29:33,242 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.08s -2025-09-22 17:29:33,604 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:33] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 17:29:49,478 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:49] "GET / HTTP/1.1" 200 - -2025-09-22 17:29:49,494 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:49] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-22 17:29:49,496 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:49] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-22 17:29:49,496 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:49] "GET /static/js/dashboard.js?v=1.0.3 HTTP/1.1" 304 - -2025-09-22 17:29:49,503 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:49] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-22 17:29:49,530 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:49] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:29:49,532 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:49] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:29:49,540 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:49] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:29:50,428 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:50] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:29:50,482 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:50] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:29:50,483 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:50] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:29:51,029 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:51] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:29:51,385 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:51] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:29:52,094 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-22 17:29:52,444 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:52] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 17:29:52,458 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:52] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 17:29:52,649 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:52] "GET / HTTP/1.1" 200 - -2025-09-22 17:29:52,666 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:52] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:29:52,666 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:52] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:29:52,667 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:52] "GET /static/js/dashboard.js?v=1.0.3 HTTP/1.1" 200 - -2025-09-22 17:29:52,677 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:52] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:29:52,718 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:52] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:29:52,723 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:52] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:29:52,730 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:52] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:29:53,556 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.09s -2025-09-22 17:29:53,645 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:53] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:29:53,647 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:53] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:29:53,652 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:53] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:29:53,922 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:53] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:29:54,208 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:54] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:29:54,568 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:54] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:29:54,569 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:54] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:29:55,334 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.12s -2025-09-22 17:29:55,694 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:55] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 17:29:55,711 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:55] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 17:29:56,851 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.13s -2025-09-22 17:29:57,208 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:57] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:29:58,325 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.11s -2025-09-22 17:29:58,689 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:29:58] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 17:30:01,543 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.09s -2025-09-22 17:30:01,905 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:30:01] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:30:49,208 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:30:49,214 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:30:49,916 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:30:49,963 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:30:50,143 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-22 17:30:50,294 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:30:50,294 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:30:50,294 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:30:50,294 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:30:50,294 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:30:50,295 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:30:50,295 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:30:50,295 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:30:50,295 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:30:50,295 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:30:50,295 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:30:50,295 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:30:50,296 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:30:50,300 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:30:50,300 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:30:50,300 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:30:50] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-22 17:30:50,325 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:30:50,325 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:30:50,325 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:30:50,326 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:30:50,326 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:30:50,326 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:30:50,326 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:30:50,326 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:30:50,326 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:30:50,327 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:30:50,327 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:30:50,327 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:30:50,327 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:30:50,330 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:30:50,330 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:30:50,330 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:30:50] "GET /api/agent/tools/stats HTTP/1.1" 500 - -2025-09-22 17:30:50,494 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:30:50] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:30:53,465 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:30:53,466 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:30:54,224 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:30:54,226 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:30:54,599 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:30:54,599 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:30:54,599 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:30:54,599 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:30:54,600 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:30:54,600 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:30:54,600 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:30:54,600 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:30:54,600 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:30:54,600 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:30:54,600 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:30:54,600 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:30:54,600 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:30:54,601 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:30:54,601 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:30:54,601 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:30:54,601 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:30:54,601 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:30:54,601 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:30:54,601 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:30:54,601 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:30:54,601 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:30:54,602 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:30:54,602 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:30:54,602 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:30:54,602 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:30:54,604 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:30:54,604 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:30:54,604 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:30:54] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-22 17:30:54,606 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:30:54,606 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:30:54,607 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:30:54] "GET /api/agent/tools/stats HTTP/1.1" 500 - -2025-09-22 17:30:55,299 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:30:55,300 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:30:55,330 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:30:55,330 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:30:59,611 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:30:59,612 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:30:59,612 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:30:59,612 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:31:03,463 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:31:03,465 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:31:04,197 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:31:04,199 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:31:04,573 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:31:04,573 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:31:04,573 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:31:04,574 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:31:04,574 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:31:04,574 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:31:04,574 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:31:04,575 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:31:04,575 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:31:04,575 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:31:04,575 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:31:04,575 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:31:04,576 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:31:04,576 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:31:04,576 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:31:04,576 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:31:04,576 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:31:04,577 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:31:04,577 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:31:04,577 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:31:04,577 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:31:04,578 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:31:04,578 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:31:04,578 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:31:04,578 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:31:04,579 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:31:04,584 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:31:04,584 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:31:04,585 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:31:04] "GET /api/agent/tools/stats HTTP/1.1" 500 - -2025-09-22 17:31:04,588 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:31:04,589 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:31:04,590 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:31:04] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-22 17:31:09,587 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:31:09,588 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:31:09,588 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:31:09,588 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:31:13,081 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:31:13,085 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:31:13,817 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:31:13,832 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:31:14,179 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:31:14,179 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:31:14,179 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:31:14,179 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:31:14,180 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:31:14,180 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:31:14,180 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:31:14,180 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:31:14,180 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:31:14,181 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:31:14,181 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:31:14,181 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:31:14,181 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:31:14,181 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:31:14,181 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:31:14,181 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:31:14,182 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:31:14,182 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:31:14,182 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:31:14,182 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:31:14,182 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:31:14,182 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:31:14,182 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:31:14,182 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:31:14,183 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:31:14,183 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:31:14,186 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:31:14,186 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:31:14,186 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:31:14] "GET /api/agent/status HTTP/1.1" 500 - -2025-09-22 17:31:14,189 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:31:14,189 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: IntelligentAgent.__init__() got an unexpected keyword argument 'llm_manager' -2025-09-22 17:31:14,189 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:31:14] "GET /api/agent/tools/stats HTTP/1.1" 500 - -2025-09-22 17:31:19,180 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:31:19,180 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:31:19,180 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:31:19,180 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:33:39,454 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-22 17:33:39,455 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-22 17:33:43,904 - src.core.database - INFO - 数据库初始化成功 -2025-09-22 17:33:47,098 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-22 17:33:47,113 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-22 17:33:47,180 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-22 17:33:47,181 - werkzeug - INFO - Press CTRL+C to quit -2025-09-22 17:33:47,559 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:33:47,911 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-22 17:33:47,917 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-22 17:33:47,917 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-22 17:33:48,497 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:33:48,526 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:33:48,536 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:33:49,254 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:33:49,282 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:33:49,321 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:33:49,483 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:33:49,499 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:49] "GET / HTTP/1.1" 200 - -2025-09-22 17:33:49,602 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:33:49,602 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:33:49,602 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:33:49,603 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:33:49,603 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:33:49,603 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:33:49,603 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:33:49,604 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:33:49,604 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:33:49,604 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:33:49,604 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:33:49,604 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:33:49,605 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:33:49,611 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:33:49,611 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-09-22 17:33:49,611 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-09-22 17:33:49,611 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-09-22 17:33:49,612 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:49] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-22 17:33:49,680 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:49] "GET /static/js/dashboard.js?v=1.0.5 HTTP/1.1" 200 - -2025-09-22 17:33:49,686 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:33:49,686 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:33:49,686 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-22 17:33:49,686 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:33:49,687 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-22 17:33:49,688 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-22 17:33:49,688 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-22 17:33:49,689 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-22 17:33:49,689 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-22 17:33:49,689 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-22 17:33:49,690 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-22 17:33:49,690 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-22 17:33:49,690 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-22 17:33:49,690 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-22 17:33:49,690 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-22 17:33:49,693 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:49] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:33:49,695 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:33:49,695 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-09-22 17:33:49,696 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-09-22 17:33:49,696 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-09-22 17:33:49,697 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:49] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-09-22 17:33:49,701 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:49] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:33:49,712 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:49] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:33:49,749 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:49] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:33:49,763 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:49] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-22 17:33:49,770 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:49] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-09-22 17:33:49,779 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:49] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:33:50,236 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:33:50,599 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:33:50,600 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:33:50,698 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:50] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:33:50,700 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:33:50,983 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:33:51,046 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:33:51,330 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-22 17:33:51,331 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:51] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:33:51,391 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:33:51,393 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-22 17:33:51,394 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-22 17:33:51,395 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-22 17:33:51,395 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-22 17:33:51,396 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-22 17:33:51,397 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-22 17:33:51,399 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-22 17:33:51,400 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-22 17:33:51,400 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-22 17:33:51,401 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-22 17:33:51,402 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-22 17:33:51,403 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-22 17:33:51,404 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-22 17:33:51,404 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-22 17:33:51,405 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-22 17:33:51,406 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-22 17:33:51,407 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-22 17:33:51,408 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-22 17:33:51,409 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-22 17:33:51,410 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-22 17:33:51,411 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-22 17:33:51,412 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-22 17:33:51,420 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:33:51,595 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:51] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:33:51,770 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:33:51,770 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:33:52,002 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:52] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:33:52,303 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:52] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:33:53,256 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:53] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 17:33:53,272 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:53] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 17:33:53,664 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:53] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:33:54,482 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:54] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:33:54,613 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:33:54,613 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:33:54,687 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:33:54,688 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:33:54,688 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:33:54,688 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:33:55,533 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-22 17:33:55,601 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:33:55,602 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:33:55,904 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:55] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 17:33:56,783 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:33:56,783 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:33:58,699 - werkzeug - INFO - 192.168.1.96 - - [22/Sep/2025 17:33:58] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:35:07,202 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:07] "GET /dashboard HTTP/1.1" 200 - -2025-09-22 17:35:07,539 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:07] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-22 17:35:07,539 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:07] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-22 17:35:07,540 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:07] "GET /static/js/dashboard.js?v=1.0.5 HTTP/1.1" 200 - -2025-09-22 17:35:07,798 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:07] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-22 17:35:08,131 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:08] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:35:08,134 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:08] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:35:08,448 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:08] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:35:09,020 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:09] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:35:09,030 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:09] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:35:09,301 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:09] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:35:09,329 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:09] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:35:09,473 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:09] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:35:09,645 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:09] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:35:10,821 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-22 17:35:11,158 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:11] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 17:35:11,483 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:11] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 17:35:12,870 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-22 17:35:13,230 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:13] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:35:14,619 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-22 17:35:14,973 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:35:14] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 17:36:05,370 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-22 17:36:05,371 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-22 17:36:09,838 - src.core.database - INFO - 数据库初始化成功 -2025-09-22 17:36:11,535 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-22 17:36:11,553 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-22 17:36:11,634 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-22 17:36:11,635 - werkzeug - INFO - Press CTRL+C to quit -2025-09-22 17:36:12,015 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:36:12,368 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-22 17:36:12,373 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-22 17:36:12,373 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-22 17:36:14,987 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-22 17:36:15,333 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:36:15] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:36:18,260 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:36:18] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:38:15,845 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:15] "GET / HTTP/1.1" 200 - -2025-09-22 17:38:15,997 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:15] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-22 17:38:16,003 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:16] "GET /static/js/dashboard.js?v=1.0.6 HTTP/1.1" 200 - -2025-09-22 17:38:16,009 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:16] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-22 17:38:16,228 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:16] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-22 17:38:16,271 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:16] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:38:16,612 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:38:16,963 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-22 17:38:16,963 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:16] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:38:16,967 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:16] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:38:17,323 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:38:17,454 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:38:17,528 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:38:17,668 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-22 17:38:17,669 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-22 17:38:17,670 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-22 17:38:17,671 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-22 17:38:17,673 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-22 17:38:17,674 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-22 17:38:17,675 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-22 17:38:17,676 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-22 17:38:17,677 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-22 17:38:17,678 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-22 17:38:17,679 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-22 17:38:17,680 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-22 17:38:17,682 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-22 17:38:17,683 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-22 17:38:17,684 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-22 17:38:17,685 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-22 17:38:17,686 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-22 17:38:17,687 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-22 17:38:17,688 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-22 17:38:17,690 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-22 17:38:17,691 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-22 17:38:17,692 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-22 17:38:17,694 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-22 17:38:18,009 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:18] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:38:18,011 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:18] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:38:18,028 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:18] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:38:18,128 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:38:18,230 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:18] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:38:18,241 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-22 17:38:18,475 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:38:18,475 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:38:18,571 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:18] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:38:18,594 - src.main - INFO - TSP助手初始化完成 -2025-09-22 17:38:18,594 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-22 17:38:20,005 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:20] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:38:21,053 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.03s -2025-09-22 17:38:21,392 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:21] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-22 17:38:21,407 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:21] "GET /api/settings HTTP/1.1" 200 - -2025-09-22 17:38:22,468 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-22 17:38:22,814 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:22] "GET /api/analytics HTTP/1.1" 200 - -2025-09-22 17:38:23,477 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:38:23,477 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:38:23,597 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:38:23,597 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-22 17:38:23,883 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-22 17:38:24,239 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:24] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-22 17:38:28,518 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:28] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:38:30,990 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:30] "GET / HTTP/1.1" 200 - -2025-09-22 17:38:31,003 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:31] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:38:31,004 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:31] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-22 17:38:31,005 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:31] "GET /static/js/dashboard.js?v=1.0.6 HTTP/1.1" 200 - -2025-09-22 17:38:31,010 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:31] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-22 17:38:31,083 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:31] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-22 17:38:31,088 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:31] "GET /api/system/info HTTP/1.1" 200 - -2025-09-22 17:38:31,093 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:31] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-22 17:38:31,955 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:31] "GET /api/workorders HTTP/1.1" 200 - -2025-09-22 17:38:31,958 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:31] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-22 17:38:31,959 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:31] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-22 17:38:31,971 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:31] "GET /api/alerts HTTP/1.1" 200 - -2025-09-22 17:38:31,988 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:31] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-22 17:38:32,503 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:32] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-22 17:38:33,551 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-22 17:38:33,900 - werkzeug - INFO - 127.0.0.1 - - [22/Sep/2025 17:38:33] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 13:49:13,939 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-23 13:49:13,941 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-23 13:49:18,960 - src.core.database - INFO - 数据库初始化成功 -2025-09-23 13:49:21,321 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-23 13:49:21,339 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-23 13:49:21,400 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-23 13:49:21,400 - werkzeug - INFO - Press CTRL+C to quit -2025-09-23 13:49:21,783 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 13:49:22,132 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-23 13:49:22,143 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-23 13:49:22,143 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-23 13:49:29,305 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:29] "GET / HTTP/1.1" 200 - -2025-09-23 13:49:29,478 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:29] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 13:49:29,492 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:29] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-23 13:49:29,496 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:29] "GET /static/js/dashboard.js?v=1.0.6 HTTP/1.1" 200 - -2025-09-23 13:49:29,501 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:29] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 13:49:29,565 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:29] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 13:49:29,585 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:29] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 13:49:29,908 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 13:49:30,252 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-23 13:49:30,253 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:30] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 13:49:30,255 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:30] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-23 13:49:30,761 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 13:49:30,763 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 13:49:30,771 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 13:49:31,122 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 13:49:31,123 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-23 13:49:31,124 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-23 13:49:31,125 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-23 13:49:31,126 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-23 13:49:31,127 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-23 13:49:31,128 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-23 13:49:31,129 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-23 13:49:31,130 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-23 13:49:31,131 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-23 13:49:31,132 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-23 13:49:31,133 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-23 13:49:31,134 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-23 13:49:31,134 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-23 13:49:31,135 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-23 13:49:31,136 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-23 13:49:31,137 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-23 13:49:31,139 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-23 13:49:31,140 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-23 13:49:31,141 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-23 13:49:31,142 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-23 13:49:31,144 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-23 13:49:31,145 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-23 13:49:31,323 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:31] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 13:49:31,323 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:31] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 13:49:31,544 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 13:49:31,546 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 13:49:31,941 - src.main - INFO - TSP助手初始化完成 -2025-09-23 13:49:31,942 - src.main - INFO - TSP助手初始化完成 -2025-09-23 13:49:31,942 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 13:49:31,942 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 13:49:32,137 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:32] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 13:49:33,526 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:33] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 13:49:34,792 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.26s -2025-09-23 13:49:35,226 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:35] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 13:49:35,241 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:35] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 13:49:35,789 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:35] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 13:49:36,499 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.25s -2025-09-23 13:49:36,876 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:36] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 13:49:36,887 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:36] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 13:49:36,888 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:36] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 13:49:36,950 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 13:49:36,950 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 13:49:36,950 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 13:49:36,950 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 13:49:37,463 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:37] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 13:49:38,005 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.11s -2025-09-23 13:49:38,345 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:38] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 13:49:38,494 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.03s -2025-09-23 13:49:38,833 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:38] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 13:49:38,846 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:38] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 13:49:39,884 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.03s -2025-09-23 13:49:40,230 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:40] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 13:49:41,284 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 13:49:41,629 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:41] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 13:49:42,413 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 13:49:42,420 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 13:49:43,092 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 13:49:43,103 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 13:49:43,431 - src.main - INFO - TSP助手初始化完成 -2025-09-23 13:49:43,431 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-23 13:49:43,432 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-23 13:49:43,433 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-23 13:49:43,433 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-23 13:49:43,434 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-23 13:49:43,434 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-23 13:49:43,435 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-23 13:49:43,435 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-23 13:49:43,435 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-23 13:49:43,436 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-23 13:49:43,437 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-23 13:49:43,437 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-23 13:49:43,453 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 13:49:43,454 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-09-23 13:49:43,455 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-09-23 13:49:43,456 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-09-23 13:49:43,457 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:43] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-23 13:49:43,457 - src.main - INFO - TSP助手初始化完成 -2025-09-23 13:49:43,458 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-23 13:49:43,459 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-23 13:49:43,459 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-23 13:49:43,460 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-23 13:49:43,460 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-23 13:49:43,461 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-23 13:49:43,462 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-23 13:49:43,462 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-23 13:49:43,463 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-23 13:49:43,464 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-23 13:49:43,465 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-23 13:49:43,466 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-23 13:49:43,475 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 13:49:43,475 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-09-23 13:49:43,476 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-09-23 13:49:43,476 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-09-23 13:49:43,478 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:43] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-09-23 13:49:48,436 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 13:49:48,437 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 13:49:48,466 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 13:49:48,466 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 13:49:48,971 - src.agent.tool_manager - ERROR - 工具 'search_knowledge' 执行失败: ToolManager._search_knowledge_tool() missing 1 required positional argument: 'query' -2025-09-23 13:49:48,973 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:48] "POST /api/agent/tools/execute HTTP/1.1" 200 - -2025-09-23 13:49:52,225 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:52] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 13:49:55,817 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:49:55] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 13:50:08,547 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:50:08] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 13:50:11,298 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:50:11] "GET /api/workorders/65 HTTP/1.1" 200 - -2025-09-23 13:50:14,868 - src.core.database - ERROR - 数据库操作失败: name 'service_manager' is not defined -2025-09-23 13:50:14,869 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:50:14] "POST /api/workorders/65/ai-suggestion HTTP/1.1" 500 - -2025-09-23 13:50:19,855 - src.core.database - ERROR - 数据库操作失败: name 'service_manager' is not defined -2025-09-23 13:50:19,856 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:50:19] "POST /api/workorders/65/ai-suggestion HTTP/1.1" 500 - -2025-09-23 13:53:18,595 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:53:18] "GET /api/workorders?page=1&per_page=1 HTTP/1.1" 200 - -2025-09-23 13:53:21,303 - src.core.database - ERROR - 数据库操作失败: name 'service_manager' is not defined -2025-09-23 13:53:21,304 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:53:21] "POST /api/workorders/65/ai-suggestion HTTP/1.1" 500 - -2025-09-23 13:53:35,598 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-23 13:53:35,599 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-23 13:53:40,053 - src.core.database - INFO - 数据库初始化成功 -2025-09-23 13:53:42,542 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-23 13:53:42,564 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-23 13:53:42,642 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-23 13:53:42,642 - werkzeug - INFO - Press CTRL+C to quit -2025-09-23 13:53:43,010 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 13:53:43,348 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-23 13:53:43,354 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-23 13:53:43,354 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-23 13:53:44,758 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:53:44] "GET /api/workorders?page=1&per_page=1 HTTP/1.1" 200 - -2025-09-23 13:53:48,886 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 13:53:49,598 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 13:53:49,952 - src.main - INFO - TSP助手初始化完成 -2025-09-23 13:53:49,952 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 13:53:50,311 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'APP报错环境问题' 返回 1 个结果 -2025-09-23 13:53:54,571 - src.core.llm_client - INFO - API请求成功 -2025-09-23 13:53:54,956 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 13:53:54,956 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 13:53:55,250 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:53:55] "POST /api/workorders/65/ai-suggestion HTTP/1.1" 200 - -2025-09-23 13:54:04,227 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'APP报错环境问题' 返回 1 个结果 -2025-09-23 13:54:07,879 - src.core.llm_client - INFO - API请求成功 -2025-09-23 13:54:08,564 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:54:08] "POST /api/workorders/65/ai-suggestion HTTP/1.1" 200 - -2025-09-23 13:55:24,841 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'APP报错环境问题' 返回 1 个结果 -2025-09-23 13:55:28,344 - src.core.llm_client - INFO - API请求成功 -2025-09-23 13:55:29,062 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:55:29] "POST /api/workorders/65/ai-suggestion HTTP/1.1" 200 - -2025-09-23 13:55:36,829 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'APP报错环境问题' 返回 1 个结果 -2025-09-23 13:55:40,022 - src.core.llm_client - INFO - API请求成功 -2025-09-23 13:55:40,723 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:55:40] "POST /api/workorders/65/ai-suggestion HTTP/1.1" 200 - -2025-09-23 13:57:42,846 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 13:57:42] "GET /api/workorders/65 HTTP/1.1" 200 - -2025-09-23 14:01:01,938 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-23 14:01:01,938 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-23 14:01:06,194 - src.core.database - INFO - 数据库初始化成功 -2025-09-23 14:01:07,637 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-23 14:01:07,649 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-23 14:01:07,702 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-23 14:01:07,702 - werkzeug - INFO - Press CTRL+C to quit -2025-09-23 14:01:08,101 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:01:08,453 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-23 14:01:08,460 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-23 14:01:08,461 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-23 14:01:21,844 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:21] "GET / HTTP/1.1" 200 - -2025-09-23 14:01:22,006 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:22] "GET /static/js/dashboard.js?v=1.0.7 HTTP/1.1" 200 - -2025-09-23 14:01:22,013 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:22] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 14:01:22,017 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:22] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 14:01:22,022 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:22] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-23 14:01:22,083 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:22] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 14:01:22,431 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:01:22,780 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-23 14:01:22,780 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 14:01:22,783 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:22] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 14:01:23,141 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:01:23,299 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:01:23,308 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:01:23,492 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 14:01:23,494 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-23 14:01:23,495 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-23 14:01:23,496 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-23 14:01:23,497 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-23 14:01:23,497 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-23 14:01:23,498 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-23 14:01:23,499 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-23 14:01:23,500 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-23 14:01:23,501 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-23 14:01:23,502 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-23 14:01:23,502 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-23 14:01:23,503 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-23 14:01:23,504 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-23 14:01:23,505 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-23 14:01:23,505 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-23 14:01:23,506 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-23 14:01:23,508 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-23 14:01:23,509 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-23 14:01:23,511 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-23 14:01:23,512 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-23 14:01:23,514 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-23 14:01:23,515 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-23 14:01:23,821 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:23] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 14:01:23,846 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:23] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 14:01:23,889 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:23] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:01:23,996 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:01:24,013 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:01:24,345 - src.main - INFO - TSP助手初始化完成 -2025-09-23 14:01:24,345 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 14:01:24,373 - src.main - INFO - TSP助手初始化完成 -2025-09-23 14:01:24,373 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 14:01:24,426 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:24] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 14:01:25,785 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:25] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 14:01:26,865 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.08s -2025-09-23 14:01:27,222 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:27] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 14:01:27,236 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:27] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 14:01:27,715 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:27] "GET /api/workorders/65 HTTP/1.1" 200 - -2025-09-23 14:01:28,313 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-23 14:01:28,687 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:28] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 14:01:29,352 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:01:29,352 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:01:29,382 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:01:29,383 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:01:29,758 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-23 14:01:30,111 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:30] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 14:01:30,724 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'APP报错环境问题' 返回 1 个结果 -2025-09-23 14:01:34,041 - src.core.llm_client - INFO - API请求成功 -2025-09-23 14:01:34,740 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:01:34] "POST /api/workorders/65/ai-suggestion HTTP/1.1" 200 - -2025-09-23 14:01:58,070 - src.utils.semantic_similarity - INFO - 正在加载语义相似度模型: all-MiniLM-L6-v2 -2025-09-23 14:01:58,076 - sentence_transformers.SentenceTransformer - INFO - Use pytorch device_name: cpu -2025-09-23 14:01:58,077 - sentence_transformers.SentenceTransformer - INFO - Load pretrained SentenceTransformer: all-MiniLM-L6-v2 -2025-09-23 14:01:59,935 - src.utils.semantic_similarity - INFO - 语义相似度模型加载成功 -2025-09-23 14:01:59,940 - src.web.blueprints.workorders - INFO - AI建议与人工描述语义相似度: 0.2597 -2025-09-23 14:02:00,459 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:02:00] "POST /api/workorders/65/human-resolution HTTP/1.1" 200 - -2025-09-23 14:02:04,952 - src.web.blueprints.workorders - INFO - 工单 65 使用人工描述入库,AI相似度: 0.2597 -2025-09-23 14:02:06,372 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:02:06] "POST /api/workorders/65/approve-to-knowledge HTTP/1.1" 200 - -2025-09-23 14:02:10,536 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:02:10] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:02:17,950 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:02:18,301 - src.knowledge_base.knowledge_manager - INFO - 删除知识库条目成功: 29 -2025-09-23 14:02:18,302 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:02:18] "DELETE /api/knowledge/delete/29 HTTP/1.1" 200 - -2025-09-23 14:02:19,159 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:02:19] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:02:32,954 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:02:32] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:11:27,852 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-23 14:11:27,853 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-23 14:11:32,416 - src.core.database - INFO - 数据库初始化成功 -2025-09-23 14:11:34,371 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-23 14:11:34,385 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-23 14:11:34,450 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-23 14:11:34,451 - werkzeug - INFO - Press CTRL+C to quit -2025-09-23 14:11:34,855 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:11:35,236 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-23 14:11:35,241 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-23 14:11:35,242 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-23 14:11:43,443 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:11:44,150 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:11:44,498 - src.main - INFO - TSP助手初始化完成 -2025-09-23 14:11:44,498 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 14:11:44,865 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:44] "GET / HTTP/1.1" 200 - -2025-09-23 14:11:45,101 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:45] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 14:11:45,122 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:45] "GET /static/js/dashboard.js?v=1.0.8 HTTP/1.1" 200 - -2025-09-23 14:11:45,126 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:45] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 14:11:45,136 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:45] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-23 14:11:45,154 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:45] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 14:11:46,392 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:11:46,744 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders ORDER BY work_orders.created_at DESC) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:11:46,744 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-23 14:11:46,745 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:46] "GET /api/workorders HTTP/1.1" 500 - -2025-09-23 14:11:46,745 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:46] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 14:11:46,748 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:46] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 14:11:46,890 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:46] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 14:11:46,898 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:46] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:11:47,097 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:11:47,462 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:47] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 14:11:47,465 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 14:11:47,468 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-23 14:11:47,469 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-23 14:11:47,470 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-23 14:11:47,471 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-23 14:11:47,472 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-23 14:11:47,473 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-23 14:11:47,474 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-23 14:11:47,475 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-23 14:11:47,476 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-23 14:11:47,477 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-23 14:11:47,478 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-23 14:11:47,478 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-23 14:11:47,480 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-23 14:11:47,481 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-23 14:11:47,482 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-23 14:11:47,484 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-23 14:11:47,486 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-23 14:11:47,487 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-23 14:11:47,488 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-23 14:11:47,490 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-23 14:11:47,491 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-23 14:11:47,491 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-23 14:11:48,043 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:11:48,046 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:11:48,176 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:11:48,177 - src.core.query_optimizer - ERROR - 优化分析查询失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:11:48,179 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:48] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 14:11:48,188 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:48] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 14:11:48,222 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:11:48,223 - src.integrations.workorder_sync - ERROR - 获取同步状态失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:11:48,224 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:48] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 14:11:48,752 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:11:48,754 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:11:48,913 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:11:48,914 - src.core.query_optimizer - ERROR - 优化分析查询失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:11:48,915 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:48] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 14:11:49,002 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:11:49,003 - src.web.error_handlers - ERROR - 未处理错误 get_health: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:11:49,117 - src.main - INFO - TSP助手初始化完成 -2025-09-23 14:11:49,117 - src.main - INFO - TSP助手初始化完成 -2025-09-23 14:11:49,117 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-23 14:11:49,117 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-23 14:11:49,117 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-23 14:11:49,117 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-23 14:11:49,117 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-23 14:11:49,118 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-23 14:11:49,118 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-23 14:11:49,118 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-23 14:11:49,118 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-23 14:11:49,118 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-23 14:11:49,118 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-23 14:11:49,118 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-23 14:11:49,118 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-23 14:11:49,118 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-23 14:11:49,119 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-23 14:11:49,119 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-23 14:11:49,119 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-23 14:11:49,119 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-23 14:11:49,119 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-23 14:11:49,119 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-23 14:11:49,119 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-23 14:11:49,119 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-23 14:11:49,120 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-23 14:11:49,120 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-23 14:11:49,124 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 14:11:49,125 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-09-23 14:11:49,125 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-09-23 14:11:49,125 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-09-23 14:11:49,125 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:49] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-09-23 14:11:49,127 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 14:11:49,127 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-09-23 14:11:49,127 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-09-23 14:11:49,127 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-09-23 14:11:49,128 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:49] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-23 14:11:49,511 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:11:49,512 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:11:49,644 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:11:49,644 - src.core.query_optimizer - ERROR - 优化分析查询失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:11:49,646 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:11:49] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 14:11:53,667 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:11:53,667 - src.web.error_handlers - ERROR - 未处理错误 get_health: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:11:54,127 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:11:54,127 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:11:54,127 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:11:54,127 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:12:19,867 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:12:19,868 - src.web.error_handlers - ERROR - 未处理错误 get_health: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:12:20,394 - src.dialogue.realtime_chat - INFO - 创建新会话: session_user_001_1758633140 -2025-09-23 14:12:20,395 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:12:20] "POST /api/chat/session HTTP/1.1" 200 - -2025-09-23 14:12:21,455 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'APP显示车辆信息错误' 返回 1 个结果 -2025-09-23 14:12:25,154 - src.core.llm_client - INFO - API请求成功 -2025-09-23 14:12:25,869 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:12:25] "POST /api/chat/message HTTP/1.1" 200 - -2025-09-23 14:12:28,575 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:12:28] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-23 14:12:28,576 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:12:28] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-09-23 14:12:29,979 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:12:29] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:12:30,414 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:12:30] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:12:31,058 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders ORDER BY work_orders.created_at DESC) AS anon_1] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:12:31,059 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:12:31] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 500 - -2025-09-23 14:12:48,709 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:12:48,710 - src.web.error_handlers - ERROR - 未处理错误 get_health: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:12:53,269 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:12:53,270 - src.web.error_handlers - ERROR - 未处理错误 get_health: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:13:19,673 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:13:19,674 - src.web.error_handlers - ERROR - 未处理错误 get_health: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:13:49,606 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:13:49,607 - src.web.error_handlers - ERROR - 未处理错误 get_health: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:13:54,112 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:13:54,113 - src.web.error_handlers - ERROR - 未处理错误 get_health: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:14:19,654 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:14:19,655 - src.web.error_handlers - ERROR - 未处理错误 get_health: (pymysql.err.OperationalError) (1054, "Unknown column 'work_orders.language_mode' in 'field list'") -[SQL: SELECT count(*) AS count_1 -FROM (SELECT work_orders.id AS work_orders_id, work_orders.order_id AS work_orders_order_id, work_orders.title AS work_orders_title, work_orders.description AS work_orders_description, work_orders.category AS work_orders_category, work_orders.priority AS work_orders_priority, work_orders.status AS work_orders_status, work_orders.created_at AS work_orders_created_at, work_orders.updated_at AS work_orders_updated_at, work_orders.resolution AS work_orders_resolution, work_orders.satisfaction_score AS work_orders_satisfaction_score, work_orders.feishu_record_id AS work_orders_feishu_record_id, work_orders.assignee AS work_orders_assignee, work_orders.solution AS work_orders_solution, work_orders.ai_suggestion AS work_orders_ai_suggestion, work_orders.source AS work_orders_source, work_orders.module AS work_orders_module, work_orders.created_by AS work_orders_created_by, work_orders.wilfulness AS work_orders_wilfulness, work_orders.date_of_close AS work_orders_date_of_close, work_orders.vehicle_type AS work_orders_vehicle_type, work_orders.vin_sim AS work_orders_vin_sim, work_orders.app_remote_control_version AS work_orders_app_remote_control_version, work_orders.hmi_sw AS work_orders_hmi_sw, work_orders.parent_record AS work_orders_parent_record, work_orders.has_updated_same_day AS work_orders_has_updated_same_day, work_orders.operating_time AS work_orders_operating_time, work_orders.language_mode AS work_orders_language_mode -FROM work_orders -WHERE work_orders.status = %(status_1)s) AS anon_1] -[parameters: {'status_1': 'open'}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-09-23 14:14:43,063 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-23 14:14:43,064 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-23 14:14:48,585 - src.core.database - INFO - 数据库初始化成功 -2025-09-23 14:14:50,826 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-23 14:14:50,843 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-23 14:14:50,913 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-23 14:14:50,913 - werkzeug - INFO - Press CTRL+C to quit -2025-09-23 14:14:51,292 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:14:51,673 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-23 14:14:51,678 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-23 14:14:51,679 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-23 14:14:58,927 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:14:58] "GET / HTTP/1.1" 200 - -2025-09-23 14:14:59,065 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:14:59] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 14:14:59,080 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:14:59] "GET /static/js/dashboard.js?v=1.0.7 HTTP/1.1" 200 - -2025-09-23 14:14:59,084 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:14:59] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 14:14:59,092 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:14:59] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-23 14:14:59,116 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:14:59] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 14:14:59,462 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:14:59,814 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-23 14:14:59,815 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:14:59] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 14:14:59,817 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:14:59] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 14:15:00,178 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:15:00,306 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:15:00,355 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:15:00,533 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 14:15:00,534 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-23 14:15:00,535 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-23 14:15:00,536 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-23 14:15:00,537 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-23 14:15:00,538 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-23 14:15:00,539 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-23 14:15:00,540 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-23 14:15:00,541 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-23 14:15:00,542 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-23 14:15:00,543 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-23 14:15:00,544 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-23 14:15:00,545 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-23 14:15:00,546 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-23 14:15:00,548 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-23 14:15:00,549 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-23 14:15:00,551 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-23 14:15:00,553 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-23 14:15:00,554 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-23 14:15:00,555 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-23 14:15:00,557 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-23 14:15:00,558 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-23 14:15:00,560 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-23 14:15:00,828 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:00] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 14:15:00,896 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 14:15:00,969 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:00] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:15:00,995 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:15:01,059 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:15:01,333 - src.main - INFO - TSP助手初始化完成 -2025-09-23 14:15:01,333 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 14:15:01,419 - src.main - INFO - TSP助手初始化完成 -2025-09-23 14:15:01,420 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 14:15:01,443 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:01] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 14:15:02,850 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:02] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 14:15:03,885 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.03s -2025-09-23 14:15:04,224 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:04] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 14:15:06,348 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:15:06,348 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:15:06,422 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:15:06,422 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:15:07,076 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:07] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 14:15:08,135 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 14:15:08,480 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:08] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 14:15:08,491 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:08] "DELETE /api/workorders/51 HTTP/1.1" 200 - -2025-09-23 14:15:09,531 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.03s -2025-09-23 14:15:09,595 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.11s -2025-09-23 14:15:09,878 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:09] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 14:15:09,967 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:09] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 14:15:11,046 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-23 14:15:11,394 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:11] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 14:15:32,554 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:32] "GET / HTTP/1.1" 200 - -2025-09-23 14:15:32,567 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:32] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 14:15:32,567 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:32] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 14:15:32,568 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:32] "GET /static/js/dashboard.js?v=1.0.7 HTTP/1.1" 304 - -2025-09-23 14:15:32,573 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:32] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-23 14:15:32,606 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:32] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 14:15:32,611 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:32] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 14:15:32,617 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:32] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 14:15:33,475 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:33] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 14:15:33,516 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:33] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:15:33,524 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:33] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 14:15:34,054 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:34] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 14:15:34,406 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:34] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 14:15:35,138 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.08s -2025-09-23 14:15:35,506 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:35] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 14:15:35,518 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:35] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 14:15:36,660 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.14s -2025-09-23 14:15:37,029 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:37] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 14:15:38,124 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.09s -2025-09-23 14:15:38,479 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:38] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 14:15:48,537 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:48] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:15:55,904 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.08s -2025-09-23 14:15:56,293 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:15:56] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 14:23:08,670 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-23 14:23:08,670 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-23 14:23:12,892 - src.core.database - INFO - 数据库初始化成功 -2025-09-23 14:23:14,423 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-23 14:23:14,435 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-23 14:23:14,492 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-23 14:23:14,493 - werkzeug - INFO - Press CTRL+C to quit -2025-09-23 14:23:14,890 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:23:15,263 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-23 14:23:15,269 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-23 14:23:15,269 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-23 14:23:33,015 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:23:33,804 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:23:34,222 - src.main - INFO - TSP助手初始化完成 -2025-09-23 14:23:34,222 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 14:23:39,226 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:23:39,226 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:26:57,065 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:26:57] "GET / HTTP/1.1" 200 - -2025-09-23 14:26:57,243 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:26:57] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 14:26:57,254 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:26:57] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 14:26:57,258 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:26:57] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-23 14:26:57,261 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:26:57] "GET /static/js/dashboard.js?v=1.0.8 HTTP/1.1" 200 - -2025-09-23 14:26:57,298 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:26:57] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 14:26:58,504 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:26:58,846 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-23 14:26:58,846 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:26:58] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 14:26:58,850 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:26:58] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 14:26:58,985 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:26:58] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 14:26:59,079 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:26:59] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 14:26:59,079 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:26:59] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:26:59,198 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:26:59,540 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 14:26:59,541 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-23 14:26:59,542 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-23 14:26:59,543 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-23 14:26:59,544 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-23 14:26:59,544 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-23 14:26:59,545 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-23 14:26:59,546 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-23 14:26:59,547 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-23 14:26:59,548 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-23 14:26:59,549 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-23 14:26:59,550 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-23 14:26:59,552 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-23 14:26:59,553 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-23 14:26:59,554 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-23 14:26:59,555 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:26:59] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 14:26:59,556 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-23 14:26:59,559 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-23 14:26:59,561 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-23 14:26:59,562 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-23 14:26:59,563 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-23 14:26:59,564 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-23 14:26:59,565 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-23 14:26:59,566 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-23 14:27:00,449 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:27:00] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 14:27:00,594 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:27:00,594 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:27:00,595 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.03s -2025-09-23 14:27:00,935 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:27:00] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 14:27:00,945 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:27:00] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 14:27:02,017 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:27:02,017 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:27:02,018 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-23 14:27:02,371 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:27:02] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 14:27:03,446 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:27:03,447 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:27:03,447 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-23 14:27:03,793 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:27:03] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 14:32:40,368 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-23 14:32:40,369 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-23 14:32:45,048 - src.core.database - INFO - 数据库初始化成功 -2025-09-23 14:32:47,040 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-23 14:32:47,055 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-23 14:32:47,117 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-23 14:32:47,118 - werkzeug - INFO - Press CTRL+C to quit -2025-09-23 14:32:47,512 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:32:47,874 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-23 14:32:47,881 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-23 14:32:47,882 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-23 14:32:51,491 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:32:52,254 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:32:52,619 - src.main - INFO - TSP助手初始化完成 -2025-09-23 14:32:52,620 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 14:32:57,626 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:32:57,627 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:33:34,401 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:34] "GET / HTTP/1.1" 200 - -2025-09-23 14:33:34,582 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:34] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 14:33:34,594 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:34] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-09-23 14:33:34,600 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:34] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 14:33:34,611 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:34] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-23 14:33:34,631 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:34] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 14:33:35,835 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:33:36,184 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-23 14:33:36,185 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:36] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 14:33:36,188 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:36] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 14:33:36,358 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:36] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 14:33:36,391 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:36] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:33:36,537 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:33:36,704 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:36] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 14:33:36,869 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:36] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 14:33:36,882 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 14:33:36,884 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-23 14:33:36,885 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-23 14:33:36,885 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-23 14:33:36,887 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-23 14:33:36,888 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-23 14:33:36,889 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-23 14:33:36,891 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-23 14:33:36,892 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-23 14:33:36,894 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-23 14:33:36,895 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-23 14:33:36,897 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-23 14:33:36,897 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-23 14:33:36,898 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-23 14:33:36,899 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-23 14:33:36,900 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-23 14:33:36,901 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-23 14:33:36,901 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-23 14:33:36,902 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-23 14:33:36,904 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-23 14:33:36,905 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-23 14:33:36,906 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-23 14:33:36,908 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-23 14:33:37,775 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:37] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 14:33:37,931 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:33:37,931 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:33:37,931 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 6, 'closed': 0} -2025-09-23 14:33:37,932 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-23 14:33:38,280 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:38] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 14:33:38,293 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:38] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 14:33:39,336 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:33:39,336 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:33:39,337 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 6, 'closed': 0} -2025-09-23 14:33:39,338 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-23 14:33:39,684 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:39] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 14:33:40,738 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:33:40,739 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:33:40,739 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 6, 'closed': 0} -2025-09-23 14:33:40,740 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 14:33:41,088 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:33:41] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 14:36:27,012 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:36:27,012 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:36:27,013 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 6, 'closed': 0} -2025-09-23 14:36:27,013 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-23 14:36:27,365 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:36:27] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 14:44:05,397 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-23 14:44:05,398 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-23 14:44:09,523 - src.core.database - INFO - 数据库初始化成功 -2025-09-23 14:44:11,104 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-23 14:44:11,119 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-23 14:44:11,206 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-23 14:44:11,207 - werkzeug - INFO - Press CTRL+C to quit -2025-09-23 14:44:11,573 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:44:11,916 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-23 14:44:11,921 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-23 14:44:11,921 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-23 14:44:14,222 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:14] "GET / HTTP/1.1" 200 - -2025-09-23 14:44:14,518 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:14] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 14:44:14,535 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:14] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-23 14:44:14,554 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:14] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-09-23 14:44:14,569 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:14] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 14:44:14,696 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:14] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 14:44:15,026 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:44:15,714 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:44:15,925 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:44:15,927 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:44:16,055 - src.main - INFO - TSP助手初始化完成 -2025-09-23 14:44:16,055 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 14:44:16,291 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-23 14:44:16,292 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:16] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 14:44:16,295 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:16] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 14:44:16,396 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:16] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 14:44:16,397 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:16] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 14:44:16,451 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:16] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:44:16,631 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:44:16,661 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:44:16,994 - src.main - INFO - TSP助手初始化完成 -2025-09-23 14:44:16,994 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 14:44:17,021 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 14:44:17,022 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-23 14:44:17,023 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-23 14:44:17,025 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-23 14:44:17,027 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-23 14:44:17,029 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-23 14:44:17,030 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-23 14:44:17,031 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-23 14:44:17,032 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-23 14:44:17,033 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-23 14:44:17,034 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-23 14:44:17,035 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-23 14:44:17,036 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-23 14:44:17,037 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-23 14:44:17,038 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-23 14:44:17,039 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-23 14:44:17,040 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-23 14:44:17,042 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-23 14:44:17,044 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-23 14:44:17,046 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-23 14:44:17,047 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-23 14:44:17,048 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-23 14:44:17,050 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-23 14:44:17,924 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:17] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 14:44:18,367 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:18] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 14:44:19,413 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:44:19,413 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:44:19,414 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 14:44:19,414 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-23 14:44:19,761 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:19] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 14:44:19,775 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:19] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 14:44:20,858 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:44:20,858 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:44:20,859 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 14:44:20,859 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.08s -2025-09-23 14:44:21,061 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:44:21,062 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:44:21,218 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:21] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 14:44:22,005 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:44:22,006 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:44:22,286 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:44:22,286 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:44:22,286 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 14:44:22,287 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-23 14:44:22,638 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:22] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 14:44:26,992 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:26] "GET /api/workorders/by-status/in_progress HTTP/1.1" 200 - -2025-09-23 14:44:37,336 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:37] "GET / HTTP/1.1" 200 - -2025-09-23 14:44:37,349 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:37] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 14:44:37,349 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:37] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 14:44:37,351 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:37] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-09-23 14:44:37,358 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:37] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-23 14:44:37,377 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:37] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 14:44:37,384 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:37] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 14:44:37,392 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:37] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 14:44:38,227 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:38] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 14:44:38,251 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:38] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 14:44:38,252 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:38] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:44:38,255 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:38] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 14:44:38,792 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:38] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 14:44:39,281 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:39] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 14:44:39,831 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:44:39,831 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:44:39,832 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 14:44:39,832 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.03s -2025-09-23 14:44:40,144 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:40] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 14:44:40,159 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:40] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 14:44:40,177 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:40] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 14:44:40,188 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:40] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 14:44:40,635 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:40] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 14:44:41,266 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:44:41,267 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:44:41,267 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 14:44:41,268 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-23 14:44:41,623 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:41] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 14:44:41,688 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:44:41,688 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:44:41,688 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 14:44:41,689 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 14:44:42,036 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:42] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 14:44:42,047 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:42] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 14:44:42,676 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:44:42,676 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:44:42,677 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 14:44:42,677 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 14:44:43,019 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:43] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 14:44:43,080 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:44:43,080 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:44:43,080 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 14:44:43,081 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.03s -2025-09-23 14:44:43,420 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:43] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 14:44:44,457 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:44:44,457 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:44:44,457 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 14:44:44,458 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.03s -2025-09-23 14:44:44,800 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:44] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 14:44:45,619 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:44:45,622 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:44:45,676 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:45] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:44:46,320 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:44:46,323 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 14:44:46,662 - src.main - INFO - TSP助手初始化完成 -2025-09-23 14:44:46,662 - src.main - INFO - TSP助手初始化完成 -2025-09-23 14:44:46,662 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-23 14:44:46,662 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-23 14:44:46,663 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-23 14:44:46,663 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-23 14:44:46,663 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-23 14:44:46,663 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-23 14:44:46,663 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-23 14:44:46,663 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-23 14:44:46,663 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-23 14:44:46,663 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-23 14:44:46,664 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-23 14:44:46,664 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-23 14:44:46,664 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-23 14:44:46,664 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-23 14:44:46,664 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-23 14:44:46,664 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-23 14:44:46,665 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-23 14:44:46,665 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-23 14:44:46,665 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-23 14:44:46,665 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-23 14:44:46,665 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-23 14:44:46,665 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-23 14:44:46,666 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-23 14:44:46,666 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-23 14:44:46,671 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 14:44:46,671 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-09-23 14:44:46,672 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-09-23 14:44:46,672 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-09-23 14:44:46,672 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:46] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-09-23 14:44:46,675 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 14:44:46,675 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-09-23 14:44:46,676 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-09-23 14:44:46,677 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-09-23 14:44:46,678 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:46] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-23 14:44:47,917 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:44:47] "GET /api/alerts/by-level/warning HTTP/1.1" 200 - -2025-09-23 14:44:51,674 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:44:51,675 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:44:51,675 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:44:51,675 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 14:46:06,231 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:06] "GET / HTTP/1.1" 200 - -2025-09-23 14:46:06,243 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:06] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 14:46:06,249 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:06] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 14:46:06,251 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:06] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-09-23 14:46:06,257 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:06] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-23 14:46:06,306 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:06] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 14:46:06,311 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:06] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 14:46:06,315 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:06] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 14:46:07,174 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:07] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 14:46:07,175 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:07] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:46:07,176 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:07] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 14:46:07,180 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:07] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-23 14:46:07,190 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:07] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 14:46:07,688 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:07] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 14:46:08,740 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:46:08,741 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:46:08,741 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 14:46:08,742 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 14:46:09,103 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:09] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 14:46:09,117 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:09] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 14:46:10,201 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:46:10,201 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:46:10,201 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 14:46:10,202 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.08s -2025-09-23 14:46:10,564 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:10] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 14:46:11,699 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 14:46:11,699 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 14:46:11,700 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 14:46:11,700 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.13s -2025-09-23 14:46:12,063 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:12] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 14:46:13,564 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:13] "GET /api/alerts?page=1&per_page=5 HTTP/1.1" 200 - -2025-09-23 14:46:16,939 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:16] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:46:23,263 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:23] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 14:46:27,072 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 14:46:27] "GET /api/workorders/by-status/open HTTP/1.1" 200 - -2025-09-23 15:09:00,061 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-23 15:09:00,062 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-23 15:09:04,412 - src.core.database - INFO - 数据库初始化成功 -2025-09-23 15:09:07,127 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-23 15:09:07,146 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-23 15:09:07,227 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-23 15:09:07,228 - werkzeug - INFO - Press CTRL+C to quit -2025-09-23 15:09:07,608 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:09:07,963 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-23 15:09:07,971 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-23 15:09:07,972 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-23 15:10:10,725 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:10] "GET / HTTP/1.1" 200 - -2025-09-23 15:10:10,904 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:10] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 15:10:10,911 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:10] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-09-23 15:10:10,926 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:10] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 15:10:10,934 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:10] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-23 15:10:10,992 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:10] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 15:10:11,339 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:10:11,687 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-23 15:10:11,688 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:11] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 15:10:11,691 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:11] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 15:10:12,046 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:10:12,193 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:10:12,218 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:10:12,397 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 15:10:12,398 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-23 15:10:12,400 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-23 15:10:12,401 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-23 15:10:12,402 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-23 15:10:12,403 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-23 15:10:12,404 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-23 15:10:12,404 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-23 15:10:12,405 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-23 15:10:12,406 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-23 15:10:12,406 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-23 15:10:12,407 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-23 15:10:12,408 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-23 15:10:12,409 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-23 15:10:12,410 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-23 15:10:12,411 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-23 15:10:12,411 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-23 15:10:12,412 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-23 15:10:12,413 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-23 15:10:12,413 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-23 15:10:12,414 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-23 15:10:12,415 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-23 15:10:12,416 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-23 15:10:12,684 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:12] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 15:10:12,722 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:12] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:10:12,761 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:12] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 15:10:12,887 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:10:12,919 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:10:13,239 - src.main - INFO - TSP助手初始化完成 -2025-09-23 15:10:13,240 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 15:10:13,279 - src.main - INFO - TSP助手初始化完成 -2025-09-23 15:10:13,279 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 15:10:13,305 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:13] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 15:10:14,682 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:14] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 15:10:15,733 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:10:15,733 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:10:15,734 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:10:15,734 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:10:16,082 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:16] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 15:10:16,096 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:16] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 15:10:17,148 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:10:17,149 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:10:17,149 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:10:17,150 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:10:17,498 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:17] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:10:18,253 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:10:18,253 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:10:18,285 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:10:18,285 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:10:18,523 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:10:18,524 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:10:18,524 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:10:18,525 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.02s -2025-09-23 15:10:18,863 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:18] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:10:20,153 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:20] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 15:10:25,453 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:25] "GET /api/workorders/by-status/in_progress HTTP/1.1" 200 - -2025-09-23 15:10:28,530 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:28] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 15:10:32,961 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:10:32] "GET /api/workorders/by-status/resolved HTTP/1.1" 200 - -2025-09-23 15:11:56,722 - src.web.error_handlers - ERROR - 错误响应: 无效的状态: all - None -2025-09-23 15:11:56,722 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:11:56] "GET /api/workorders/by-status/all HTTP/1.1" 500 - -2025-09-23 15:12:50,266 - src.web.error_handlers - ERROR - 错误响应: 无效的状态: all - None -2025-09-23 15:12:50,267 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:12:50] "GET /api/workorders/by-status/all HTTP/1.1" 500 - -2025-09-23 15:13:47,690 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-23 15:13:47,690 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-23 15:13:51,981 - src.core.database - INFO - 数据库初始化成功 -2025-09-23 15:13:53,905 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-23 15:13:53,922 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-23 15:13:54,050 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-23 15:13:54,051 - werkzeug - INFO - Press CTRL+C to quit -2025-09-23 15:13:54,452 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:13:54,839 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-23 15:13:54,844 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-23 15:13:54,845 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-23 15:14:33,516 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:33] "GET / HTTP/1.1" 200 - -2025-09-23 15:14:33,697 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:33] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 15:14:33,744 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:33] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-09-23 15:14:33,770 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:33] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 15:14:33,778 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:33] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-23 15:14:33,853 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:33] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 15:14:34,201 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:14:34,550 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-23 15:14:34,550 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:34] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 15:14:34,554 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:34] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 15:14:34,909 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:14:35,060 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:14:35,086 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:14:35,261 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 15:14:35,263 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-23 15:14:35,264 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-23 15:14:35,264 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-23 15:14:35,265 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-23 15:14:35,266 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-23 15:14:35,267 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-23 15:14:35,268 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-23 15:14:35,269 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-23 15:14:35,269 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-23 15:14:35,270 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-23 15:14:35,271 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-23 15:14:35,272 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-23 15:14:35,272 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-23 15:14:35,273 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-23 15:14:35,274 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-23 15:14:35,275 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-23 15:14:35,275 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-23 15:14:35,276 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-23 15:14:35,277 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-23 15:14:35,277 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-23 15:14:35,278 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-23 15:14:35,279 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-23 15:14:35,569 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:35] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 15:14:35,579 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:35] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 15:14:35,611 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:35] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:14:35,756 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:14:35,789 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:14:36,106 - src.main - INFO - TSP助手初始化完成 -2025-09-23 15:14:36,106 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 15:14:36,140 - src.main - INFO - TSP助手初始化完成 -2025-09-23 15:14:36,140 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 15:14:36,158 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:36] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 15:14:37,514 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:37] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 15:14:38,571 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:14:38,571 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:14:38,572 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:14:38,572 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:14:38,918 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:38] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 15:14:38,932 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:38] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 15:14:40,012 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:14:40,012 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:14:40,012 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:14:40,013 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-23 15:14:40,366 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:40] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:14:41,115 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:14:41,115 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:14:41,145 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:14:41,145 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:14:41,415 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:14:41,415 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:14:41,416 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:14:41,416 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:14:41,761 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:41] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:14:42,372 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:42] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 15:14:51,158 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:14:51,164 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:14:51,841 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:14:51,864 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:14:52,181 - src.main - INFO - TSP助手初始化完成 -2025-09-23 15:14:52,182 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-23 15:14:52,182 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-23 15:14:52,182 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-23 15:14:52,182 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-23 15:14:52,182 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-23 15:14:52,183 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-23 15:14:52,183 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-23 15:14:52,183 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-23 15:14:52,183 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-23 15:14:52,183 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-23 15:14:52,183 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-23 15:14:52,184 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-23 15:14:52,188 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 15:14:52,189 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-09-23 15:14:52,189 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-09-23 15:14:52,189 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-09-23 15:14:52,190 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:52] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-09-23 15:14:52,210 - src.main - INFO - TSP助手初始化完成 -2025-09-23 15:14:52,210 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-09-23 15:14:52,210 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-09-23 15:14:52,211 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-09-23 15:14:52,211 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-09-23 15:14:52,211 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-09-23 15:14:52,211 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-09-23 15:14:52,211 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-09-23 15:14:52,211 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-09-23 15:14:52,212 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-09-23 15:14:52,212 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-09-23 15:14:52,212 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-09-23 15:14:52,212 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-09-23 15:14:52,214 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 15:14:52,214 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-09-23 15:14:52,214 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-09-23 15:14:52,214 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-09-23 15:14:52,215 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:52] "GET /api/agent/status HTTP/1.1" 200 - -2025-09-23 15:14:53,786 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:53] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 15:14:54,673 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:54] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:14:54,674 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:54] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 15:14:55,171 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:55] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 15:14:56,241 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:14:56,241 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:14:56,242 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:14:56,242 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-23 15:14:56,600 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:56] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 15:14:56,614 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:56] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 15:14:57,027 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:57] "GET /api/alerts?page=1&per_page=5 HTTP/1.1" 200 - -2025-09-23 15:14:57,187 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:14:57,187 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:14:57,217 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:14:57,218 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:14:57,674 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:14:57,674 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:14:57,675 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:14:57,675 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-23 15:14:58,025 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:58] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:14:59,096 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:14:59,096 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:14:59,097 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:14:59,098 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-23 15:14:59,452 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:14:59] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:15:02,752 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:02] "GET /api/alerts/by-level/warning HTTP/1.1" 200 - -2025-09-23 15:15:06,607 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:06] "POST /api/alerts/797/resolve HTTP/1.1" 200 - -2025-09-23 15:15:07,077 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:07] "POST /api/alerts/797/resolve HTTP/1.1" 200 - -2025-09-23 15:15:09,523 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:09] "POST /api/alerts/795/resolve HTTP/1.1" 200 - -2025-09-23 15:15:10,099 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:10] "POST /api/alerts/794/resolve HTTP/1.1" 200 - -2025-09-23 15:15:10,643 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:10] "POST /api/alerts/793/resolve HTTP/1.1" 200 - -2025-09-23 15:15:11,210 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:11] "POST /api/alerts/792/resolve HTTP/1.1" 200 - -2025-09-23 15:15:12,158 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:12] "POST /api/alerts/791/resolve HTTP/1.1" 200 - -2025-09-23 15:15:12,639 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:12] "POST /api/alerts/790/resolve HTTP/1.1" 200 - -2025-09-23 15:15:13,113 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:13] "POST /api/alerts/789/resolve HTTP/1.1" 200 - -2025-09-23 15:15:13,562 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:13] "POST /api/alerts/788/resolve HTTP/1.1" 200 - -2025-09-23 15:15:15,994 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:15] "POST /api/alerts/597/resolve HTTP/1.1" 200 - -2025-09-23 15:15:16,448 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:16] "POST /api/alerts/598/resolve HTTP/1.1" 200 - -2025-09-23 15:15:17,027 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:17] "POST /api/alerts/600/resolve HTTP/1.1" 200 - -2025-09-23 15:15:17,443 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:17] "POST /api/alerts/601/resolve HTTP/1.1" 200 - -2025-09-23 15:15:17,892 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:17] "POST /api/alerts/602/resolve HTTP/1.1" 200 - -2025-09-23 15:15:18,343 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:18] "POST /api/alerts/603/resolve HTTP/1.1" 200 - -2025-09-23 15:15:18,796 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:18] "POST /api/alerts/604/resolve HTTP/1.1" 200 - -2025-09-23 15:15:19,260 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:19] "POST /api/alerts/605/resolve HTTP/1.1" 200 - -2025-09-23 15:15:19,728 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:19] "POST /api/alerts/607/resolve HTTP/1.1" 200 - -2025-09-23 15:15:20,152 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:20] "POST /api/alerts/606/resolve HTTP/1.1" 200 - -2025-09-23 15:15:20,697 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:20] "POST /api/alerts/608/resolve HTTP/1.1" 200 - -2025-09-23 15:15:26,937 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:26] "GET /api/alerts/by-level/critical HTTP/1.1" 200 - -2025-09-23 15:15:30,288 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:30] "POST /api/alerts/703/resolve HTTP/1.1" 200 - -2025-09-23 15:15:30,910 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:30] "POST /api/alerts/686/resolve HTTP/1.1" 200 - -2025-09-23 15:15:31,801 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:31] "POST /api/alerts/727/resolve HTTP/1.1" 200 - -2025-09-23 15:15:32,321 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:32] "POST /api/alerts/680/resolve HTTP/1.1" 200 - -2025-09-23 15:15:32,836 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:32] "POST /api/alerts/716/resolve HTTP/1.1" 200 - -2025-09-23 15:15:33,325 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:33] "POST /api/alerts/719/resolve HTTP/1.1" 200 - -2025-09-23 15:15:33,779 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:33] "POST /api/alerts/709/resolve HTTP/1.1" 200 - -2025-09-23 15:15:34,305 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:34] "POST /api/alerts/688/resolve HTTP/1.1" 200 - -2025-09-23 15:15:34,789 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:34] "POST /api/alerts/723/resolve HTTP/1.1" 200 - -2025-09-23 15:15:35,250 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:35] "POST /api/alerts/724/resolve HTTP/1.1" 200 - -2025-09-23 15:15:36,269 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:36] "POST /api/alerts/695/resolve HTTP/1.1" 200 - -2025-09-23 15:15:39,440 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:39] "POST /api/alerts/797/resolve HTTP/1.1" 200 - -2025-09-23 15:15:49,179 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:49] "GET / HTTP/1.1" 200 - -2025-09-23 15:15:49,192 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:49] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 15:15:49,193 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:49] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 15:15:49,194 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:49] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-09-23 15:15:49,198 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:49] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-23 15:15:49,229 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:49] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 15:15:49,234 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:49] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 15:15:49,237 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:49] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 15:15:50,090 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:50] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 15:15:50,093 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:50] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:15:50,104 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:50] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 15:15:50,113 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:50] "GET /api/alerts?page=1&per_page=5 HTTP/1.1" 200 - -2025-09-23 15:15:50,639 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:50] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 15:15:51,689 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:15:51,689 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:15:51,690 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:15:51,690 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:15:52,039 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:52] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 15:15:52,049 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:52] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 15:15:53,114 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:15:53,115 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:15:53,115 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:15:53,116 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-23 15:15:53,473 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:53] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:15:54,518 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:15:54,518 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:15:54,518 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:15:54,519 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-23 15:15:54,862 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:54] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:15:57,085 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:57] "POST /api/alerts/797/resolve HTTP/1.1" 200 - -2025-09-23 15:15:59,519 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:59] "GET / HTTP/1.1" 200 - -2025-09-23 15:15:59,531 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:59] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 15:15:59,532 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:59] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 15:15:59,534 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:59] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-09-23 15:15:59,542 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:59] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-23 15:15:59,558 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:59] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 15:15:59,564 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:59] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 15:15:59,569 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:15:59] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 15:16:00,426 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:00] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:16:00,427 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:00] "GET /api/alerts?page=1&per_page=5 HTTP/1.1" 200 - -2025-09-23 15:16:00,441 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:00] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 15:16:00,451 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:00] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 15:16:00,974 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:00] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 15:16:02,020 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:16:02,020 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:16:02,020 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:16:02,021 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-23 15:16:02,366 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:02] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 15:16:02,380 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:02] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 15:16:03,451 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:16:03,452 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:16:03,452 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:16:03,453 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-23 15:16:03,806 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:03] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:16:04,867 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:16:04,867 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:16:04,867 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:16:04,868 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-23 15:16:05,218 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:05] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:16:11,336 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:11] "POST /api/batch-delete/alerts HTTP/1.1" 200 - -2025-09-23 15:16:14,033 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:14] "GET /api/alerts?page=1&per_page=50 HTTP/1.1" 200 - -2025-09-23 15:16:20,110 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:20] "POST /api/batch-delete/alerts HTTP/1.1" 200 - -2025-09-23 15:16:23,026 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:23] "GET / HTTP/1.1" 200 - -2025-09-23 15:16:23,040 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:23] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 15:16:23,041 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:23] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 15:16:23,042 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:23] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-09-23 15:16:23,047 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:23] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-23 15:16:23,063 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:23] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 15:16:23,071 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:23] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 15:16:23,076 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:23] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 15:16:23,935 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:23] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 15:16:23,937 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:23] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 15:16:23,937 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:23] "GET /api/alerts?page=1&per_page=50 HTTP/1.1" 200 - -2025-09-23 15:16:23,959 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:23] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:16:24,487 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:24] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 15:16:25,541 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:16:25,542 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:16:25,542 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:16:25,543 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:16:25,890 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:25] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 15:16:25,905 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:25] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 15:16:26,962 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:16:26,962 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:16:26,962 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:16:26,963 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:16:27,316 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:27] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:16:28,399 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:16:28,400 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:16:28,400 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:16:28,401 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.08s -2025-09-23 15:16:28,759 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:16:28] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:21:29,596 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:21:29] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:21:32,509 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:21:32] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:21:35,445 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:21:35] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:23:00,813 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-23 15:23:00,813 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-23 15:23:05,149 - src.core.database - INFO - 数据库初始化成功 -2025-09-23 15:23:06,660 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-23 15:23:06,674 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-23 15:23:06,740 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-23 15:23:06,740 - werkzeug - INFO - Press CTRL+C to quit -2025-09-23 15:23:07,107 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:23:07,449 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-23 15:23:07,456 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-23 15:23:07,456 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-23 15:23:19,275 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:23:19,961 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:23:20,302 - src.main - INFO - TSP助手初始化完成 -2025-09-23 15:23:20,302 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 15:23:25,315 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:23:25,316 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:24:47,672 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:47] "GET / HTTP/1.1" 200 - -2025-09-23 15:24:47,819 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:47] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 15:24:47,827 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:47] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-09-23 15:24:47,829 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:47] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 15:24:47,835 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:47] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-23 15:24:47,887 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:47] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 15:24:47,911 - websockets.server - INFO - connection open -2025-09-23 15:24:47,911 - src.web.websocket_server - INFO - 客户端连接: ('::1', 64648, 0, 0) -2025-09-23 15:24:49,111 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:24:49,462 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-23 15:24:49,463 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:49] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 15:24:49,467 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:49] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 15:24:49,608 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:49] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:24:49,645 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:49] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 15:24:49,705 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:49] "GET /api/alerts?page=1&per_page=50 HTTP/1.1" 200 - -2025-09-23 15:24:49,825 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:24:50,124 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:50] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 15:24:50,176 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 15:24:50,178 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-23 15:24:50,179 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-23 15:24:50,179 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-23 15:24:50,180 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-23 15:24:50,181 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-23 15:24:50,182 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-23 15:24:50,183 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-23 15:24:50,183 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-23 15:24:50,184 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-23 15:24:50,185 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-23 15:24:50,186 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-23 15:24:50,186 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-23 15:24:50,187 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-23 15:24:50,189 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-23 15:24:50,190 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-23 15:24:50,192 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-23 15:24:50,193 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-23 15:24:50,195 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-23 15:24:50,196 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-23 15:24:50,197 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-23 15:24:50,198 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-23 15:24:50,199 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-23 15:24:51,131 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:51] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 15:24:51,184 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:24:51,185 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:24:51,185 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:24:51,186 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-23 15:24:51,531 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:51] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 15:24:51,547 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:51] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 15:24:52,589 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:24:52,590 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:24:52,590 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:24:52,591 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-23 15:24:52,936 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:52] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:24:53,792 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:53] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:24:53,981 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:24:53,981 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:24:53,982 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:24:53,984 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:24:53,984 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:24:53,984 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:24:53,985 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:24:53,986 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:24:54,329 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:54] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:24:54,330 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:54] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:24:55,379 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:24:55,379 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:24:55,379 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:24:55,380 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:24:55,728 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:55] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:24:58,731 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:24:58] "POST /api/alerts/593/resolve HTTP/1.1" 200 - -2025-09-23 15:25:08,444 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:25:08] "POST /api/alerts/592/resolve HTTP/1.1" 200 - -2025-09-23 15:25:11,862 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:25:11] "POST /api/alerts/590/resolve HTTP/1.1" 200 - -2025-09-23 15:26:09,801 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:26:09] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:26:10,020 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:26:10,021 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:26:10,021 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:26:10,022 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.24s -2025-09-23 15:26:10,495 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:26:10] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:26:11,648 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:26:11,648 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:26:11,648 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:26:11,649 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.15s -2025-09-23 15:26:12,024 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:26:12] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:28:11,373 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-23 15:28:11,373 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-23 15:28:15,951 - src.core.database - INFO - 数据库初始化成功 -2025-09-23 15:28:18,521 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-23 15:28:18,560 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-23 15:28:18,662 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-23 15:28:18,662 - werkzeug - INFO - Press CTRL+C to quit -2025-09-23 15:28:19,052 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:28:19,403 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-23 15:28:19,409 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-23 15:28:19,409 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-23 15:28:37,232 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:37] "GET / HTTP/1.1" 200 - -2025-09-23 15:28:37,525 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:37] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 15:28:37,560 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:37] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-09-23 15:28:37,568 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:37] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-09-23 15:28:37,571 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:37] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-09-23 15:28:37,654 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:37] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 15:28:37,690 - websockets.server - INFO - connection open -2025-09-23 15:28:37,691 - src.web.websocket_server - INFO - 客户端连接: ('::1', 65393, 0, 0) -2025-09-23 15:28:38,001 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:28:38,350 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-09-23 15:28:38,351 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:38] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 15:28:38,354 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:38] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 15:28:38,723 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:28:38,863 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:28:38,903 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:28:39,077 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-09-23 15:28:39,079 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-09-23 15:28:39,080 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-09-23 15:28:39,081 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-09-23 15:28:39,082 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-09-23 15:28:39,083 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-09-23 15:28:39,085 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-09-23 15:28:39,085 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-09-23 15:28:39,086 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-09-23 15:28:39,087 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-09-23 15:28:39,087 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-09-23 15:28:39,088 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-09-23 15:28:39,089 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-09-23 15:28:39,090 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-09-23 15:28:39,092 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-09-23 15:28:39,093 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-09-23 15:28:39,094 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-09-23 15:28:39,095 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-09-23 15:28:39,096 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-09-23 15:28:39,098 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-09-23 15:28:39,099 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-09-23 15:28:39,100 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-09-23 15:28:39,101 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-09-23 15:28:39,398 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:39] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 15:28:39,466 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:39] "GET /api/alerts?page=1&per_page=50 HTTP/1.1" 200 - -2025-09-23 15:28:39,469 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:39] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:28:39,592 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:28:39,649 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-23 15:28:39,960 - src.main - INFO - TSP助手初始化完成 -2025-09-23 15:28:39,961 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 15:28:40,003 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:40] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 15:28:40,011 - src.main - INFO - TSP助手初始化完成 -2025-09-23 15:28:40,012 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-09-23 15:28:41,402 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:41] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 15:28:42,466 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:28:42,466 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:28:42,467 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:28:42,468 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-23 15:28:42,808 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:42] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 15:28:42,821 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:42] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 15:28:43,603 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:43] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:28:43,792 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:28:43,792 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:28:43,792 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:28:43,793 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.10s -2025-09-23 15:28:44,147 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:44] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:28:44,973 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:28:44,973 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:28:45,017 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:28:45,018 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-09-23 15:28:45,178 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:28:45,178 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:28:45,179 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:28:45,179 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.03s -2025-09-23 15:28:45,182 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:28:45,182 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:28:45,182 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:28:45,182 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.03s -2025-09-23 15:28:45,517 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:45] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:28:45,520 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:45] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:28:46,586 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:28:46,586 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:28:46,586 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:28:46,587 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-23 15:28:46,940 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:46] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:28:50,915 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:28:50] "GET /api/alerts?page=1&per_page=5 HTTP/1.1" 200 - -2025-09-23 15:29:53,296 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:29:53] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:29:53,489 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:29:53,490 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:29:53,490 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:29:53,492 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.10s -2025-09-23 15:29:53,846 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:29:53] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:29:54,895 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:29:54,896 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:29:54,896 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:29:54,897 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:29:55,242 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:29:55] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:29:57,900 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:29:57] "POST /api/alerts/593/resolve HTTP/1.1" 200 - -2025-09-23 15:31:26,937 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:26] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:31:27,126 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:31:27,127 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:31:27,128 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:31:27,129 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.08s -2025-09-23 15:31:27,482 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:27] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:31:28,506 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:31:28,506 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:31:28,506 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:31:28,507 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.02s -2025-09-23 15:31:28,849 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:28] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:31:32,515 - src.web.websocket_server - INFO - 客户端断开: ('::1', 65393, 0, 0) -2025-09-23 15:31:32,515 - websockets.server - INFO - connection closed -2025-09-23 15:31:32,520 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:32] "GET / HTTP/1.1" 200 - -2025-09-23 15:31:32,538 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:32] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 15:31:32,540 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:32] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 15:31:32,545 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:32] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-09-23 15:31:32,552 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:32] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-23 15:31:32,604 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:32] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 15:31:32,612 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:32] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 15:31:32,620 - websockets.server - INFO - connection open -2025-09-23 15:31:32,620 - src.web.websocket_server - INFO - 客户端连接: ('::1', 49841, 0, 0) -2025-09-23 15:31:32,622 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:32] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 15:31:33,471 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:33] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 15:31:33,475 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:33] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-23 15:31:33,480 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:33] "GET /api/alerts?page=1&per_page=5 HTTP/1.1" 200 - -2025-09-23 15:31:33,493 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:33] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 15:31:33,879 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:33] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-09-23 15:31:33,987 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:33] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 15:31:35,059 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:31:35,059 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:31:35,060 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:31:35,061 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-23 15:31:35,092 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:35] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-09-23 15:31:35,412 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:35] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 15:31:35,427 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:35] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 15:31:36,504 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:31:36,505 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:31:36,505 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:31:36,505 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-23 15:31:36,866 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:36] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:31:37,902 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:31:37,902 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:31:37,903 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:31:37,904 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.03s -2025-09-23 15:31:38,244 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:38] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:31:38,695 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:31:38,695 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:31:38,695 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:31:38,696 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-23 15:31:39,048 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:39] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:31:40,126 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:31:40,126 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:31:40,126 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:31:40,127 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-23 15:31:40,484 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:40] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:31:41,128 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:41] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-09-23 15:31:49,215 - src.web.websocket_server - INFO - 客户端断开: ('::1', 49841, 0, 0) -2025-09-23 15:31:49,216 - websockets.server - INFO - connection closed -2025-09-23 15:31:49,219 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:49] "GET / HTTP/1.1" 200 - -2025-09-23 15:31:49,232 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:49] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 15:31:49,234 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:49] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 15:31:49,235 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:49] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-09-23 15:31:49,243 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:49] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-23 15:31:49,278 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:49] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 15:31:49,281 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:49] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 15:31:49,288 - websockets.server - INFO - connection open -2025-09-23 15:31:49,288 - src.web.websocket_server - INFO - 客户端连接: ('::1', 49911, 0, 0) -2025-09-23 15:31:49,290 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:49] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 15:31:50,137 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:50] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 15:31:50,139 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:50] "GET /api/alerts?page=1&per_page=5 HTTP/1.1" 200 - -2025-09-23 15:31:50,141 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:50] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-23 15:31:50,146 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:50] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 15:31:50,494 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:50] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-09-23 15:31:50,666 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:50] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 15:31:51,708 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:51] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-09-23 15:31:51,722 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:31:51,722 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:31:51,722 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:31:51,723 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:31:52,071 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:52] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 15:31:52,084 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:52] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 15:31:53,126 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:31:53,126 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:31:53,126 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:31:53,127 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-23 15:31:53,471 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:53] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:31:54,534 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:31:54,534 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:31:54,535 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:31:54,536 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-23 15:31:54,886 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:54] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:31:55,347 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:31:55,347 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:31:55,347 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:31:55,348 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-09-23 15:31:55,698 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:55] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:31:56,385 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:56] "GET /api/alerts?page=1&per_page=50 HTTP/1.1" 200 - -2025-09-23 15:31:56,745 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:31:56,745 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:31:56,746 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:31:56,747 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:31:57,090 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:57] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:31:57,635 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:57] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-09-23 15:31:58,804 - src.web.websocket_server - INFO - 客户端断开: ('::1', 49911, 0, 0) -2025-09-23 15:31:58,805 - websockets.server - INFO - connection closed -2025-09-23 15:31:58,810 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:58] "GET / HTTP/1.1" 200 - -2025-09-23 15:31:58,824 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:58] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 15:31:58,825 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:58] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 15:31:58,827 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:58] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-09-23 15:31:58,832 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:58] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-23 15:31:58,863 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:58] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 15:31:58,868 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:58] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 15:31:58,873 - websockets.server - INFO - connection open -2025-09-23 15:31:58,873 - src.web.websocket_server - INFO - 客户端连接: ('::1', 49978, 0, 0) -2025-09-23 15:31:59,597 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:59] "GET /api/alerts?per_page=10 HTTP/1.1" 200 - -2025-09-23 15:31:59,776 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:59] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 15:31:59,780 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:31:59] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 15:32:00,116 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:00] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-09-23 15:32:00,122 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:00] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-23 15:32:00,278 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:00] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 15:32:00,631 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:00] "GET /api/alerts?page=1&per_page=50 HTTP/1.1" 200 - -2025-09-23 15:32:00,648 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:00] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 15:32:01,155 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:32:01,155 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:32:01,156 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:32:01,501 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:01] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 15:32:01,515 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:01] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 15:32:01,668 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-09-23 15:32:02,499 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:02] "GET /api/alerts?per_page=20 HTTP/1.1" 200 - -2025-09-23 15:32:02,562 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:32:02,562 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:32:02,562 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:32:02,563 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-23 15:32:02,905 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:02] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:32:03,931 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:32:03,932 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:32:03,932 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:32:03,933 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.02s -2025-09-23 15:32:04,270 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:04] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:32:04,926 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:32:04,926 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:32:04,927 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:32:04,928 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:32:05,276 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:05] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:32:05,381 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:05] "GET /api/alerts?per_page=50 HTTP/1.1" 200 - -2025-09-23 15:32:06,333 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:32:06,333 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:32:06,333 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:32:06,334 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:32:06,658 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:06] "GET /api/alerts?page=1&per_page=5 HTTP/1.1" 200 - -2025-09-23 15:32:06,701 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:06] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:32:07,862 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:07] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-09-23 15:32:08,298 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:08] "GET /api/alerts?per_page=100 HTTP/1.1" 200 - -2025-09-23 15:32:08,813 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:08] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 15:32:11,171 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:11] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 15:32:11,560 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:11] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-09-23 15:32:12,414 - src.web.websocket_server - INFO - 客户端断开: ('::1', 49978, 0, 0) -2025-09-23 15:32:12,415 - websockets.server - INFO - connection closed -2025-09-23 15:32:12,419 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:12] "GET / HTTP/1.1" 200 - -2025-09-23 15:32:12,435 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:12] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 15:32:12,437 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:12] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-09-23 15:32:12,437 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:12] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-09-23 15:32:12,443 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:12] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-09-23 15:32:12,473 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:12] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-09-23 15:32:12,479 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:12] "GET /api/system/info HTTP/1.1" 200 - -2025-09-23 15:32:12,484 - websockets.server - INFO - connection open -2025-09-23 15:32:12,484 - src.web.websocket_server - INFO - 客户端连接: ('::1', 50050, 0, 0) -2025-09-23 15:32:12,485 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:12] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-09-23 15:32:13,338 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:13] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-09-23 15:32:13,339 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:13] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-23 15:32:13,342 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:13] "GET /favicon.ico HTTP/1.1" 404 - -2025-09-23 15:32:13,346 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:13] "GET /api/workorders HTTP/1.1" 200 - -2025-09-23 15:32:13,677 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:13] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-09-23 15:32:13,858 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:13] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-09-23 15:32:14,461 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:14] "GET /api/alerts HTTP/1.1" 200 - -2025-09-23 15:32:14,906 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:32:14,906 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:32:14,907 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:32:14,907 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-09-23 15:32:15,252 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:15] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-09-23 15:32:15,267 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:15] "GET /api/settings HTTP/1.1" 200 - -2025-09-23 15:32:16,320 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:32:16,321 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:32:16,321 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:32:16,322 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:32:16,676 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:16] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:32:17,703 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:32:17,704 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:32:17,704 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:32:17,705 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.02s -2025-09-23 15:32:18,044 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:18] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:32:18,565 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:32:18,566 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:32:18,566 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:32:18,567 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.07s -2025-09-23 15:32:18,729 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:18] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-09-23 15:32:18,918 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:18] "GET /api/analytics HTTP/1.1" 200 - -2025-09-23 15:32:19,974 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 5, 'in_progress': 2, 'closed': 5, 'resolved': 1} -2025-09-23 15:32:19,974 - src.core.query_optimizer - INFO - 工单总数: 14 -2025-09-23 15:32:19,974 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 5, 'in_progress': 3, 'resolved': 1, 'closed': 5} -2025-09-23 15:32:19,975 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-09-23 15:32:20,324 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:20] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-09-23 15:32:21,933 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:21] "GET /api/workorders/by-status/resolved HTTP/1.1" 200 - -2025-09-23 15:32:28,283 - werkzeug - INFO - 127.0.0.1 - - [23/Sep/2025 15:32:28] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-09-25 15:08:56,160 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-09-25 15:08:56,161 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-09-25 15:09:00,518 - src.core.database - INFO - 数据库初始化成功 -2025-09-25 15:09:01,979 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-09-25 15:09:01,996 - src.integrations.config_manager - INFO - 配置加载成功 -2025-09-25 15:09:02,058 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://192.168.1.96:5000 -2025-09-25 15:09:02,059 - werkzeug - INFO - Press CTRL+C to quit -2025-09-25 15:09:02,430 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-09-25 15:09:02,776 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-09-25 15:09:02,782 - websockets.server - INFO - server listening on [::1]:8765 -2025-09-25 15:09:02,782 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-09-25 15:09:20,766 - werkzeug - INFO - 127.0.0.1 - - [25/Sep/2025 15:09:20] "GET / HTTP/1.1" 200 - -2025-09-25 15:09:43,228 - werkzeug - INFO - 127.0.0.1 - - [25/Sep/2025 15:09:43] "GET / HTTP/1.1" 200 - -2025-09-25 15:10:17,411 - werkzeug - INFO - 127.0.0.1 - - [25/Sep/2025 15:10:17] "GET / HTTP/1.1" 200 - -2025-10-09 12:17:09,350 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-09 12:17:09,351 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-09 12:17:09,361 - __main__ - ERROR - 启动失败: No module named 'flask' -2025-10-09 13:05:19,028 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-09 13:05:19,028 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-09 13:05:19,039 - __main__ - ERROR - 启动失败: No module named 'flask' -2025-10-09 13:27:12,995 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-09 13:27:12,996 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-09 13:27:13,013 - __main__ - ERROR - 启动失败: No module named 'flask' -2025-10-09 13:27:38,983 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-09 13:27:38,983 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-09 13:27:39,997 - __main__ - ERROR - 启动失败: No module named 'flask_cors' -2025-10-09 13:28:43,187 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-09 13:28:43,187 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-09 13:28:50,696 - src.core.database - INFO - 数据库初始化成功 -2025-10-09 13:28:50,723 - __main__ - ERROR - 启动失败: No module named 'pandas' -2025-10-09 13:59:06,194 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-09 13:59:06,194 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-09 13:59:06,209 - __main__ - ERROR - 启动失败: No module named 'flask' -2025-10-09 14:01:19,060 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-09 14:01:19,061 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-09 14:01:26,958 - src.core.database - INFO - 数据库初始化成功 -2025-10-09 14:01:28,635 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-09 14:01:28,737 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-09 14:01:28,814 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://172.20.10.5:5000 -2025-10-09 14:01:28,815 - werkzeug - INFO - Press CTRL+C to quit -2025-10-09 14:01:30,506 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-09 14:01:31,465 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-09 14:01:31,475 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-09 14:01:31,475 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-09 14:01:34,646 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:01:34] "GET / HTTP/1.1" 200 - -2025-10-09 14:01:34,748 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:01:34] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-09 14:01:34,753 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:01:34] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-09 14:01:34,755 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:01:34] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-09 14:01:34,763 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:01:34] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-10-09 14:01:52,706 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:01:52] "GET / HTTP/1.1" 200 - -2025-10-09 14:01:52,752 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:01:52] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-09 14:01:52,754 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:01:52] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-09 14:01:52,756 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:01:52] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-09 14:01:52,776 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:01:52] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-10-09 14:01:55,770 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:01:55] "GET /api/system/info HTTP/1.1" 200 - -2025-10-09 14:01:55,776 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:01:55] "GET /favicon.ico HTTP/1.1" 404 - -2025-10-09 14:01:57,024 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-09 14:01:57,505 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-10-09 14:01:57,506 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:01:57] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:01:57,566 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-09 14:01:58,289 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-09 14:01:58,528 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:01:58] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:01:59,367 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-09 14:01:59,370 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-09 14:01:59,524 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:01:59] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:01:59,846 - src.main - INFO - TSP助手初始化完成 -2025-10-09 14:01:59,847 - src.main - INFO - TSP助手初始化完成 -2025-10-09 14:01:59,847 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-09 14:01:59,847 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-09 14:02:03,337 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:03] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:02:03,351 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:03] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:02:04,851 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-09 14:02:04,852 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-09 14:02:04,852 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-09 14:02:04,852 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-09 14:02:05,709 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:02:05,710 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:02:05,710 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:02:05,710 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.35s -2025-10-09 14:02:06,264 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:06] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:02:08,300 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:02:08,300 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:02:08,300 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:02:08,301 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.03s -2025-10-09 14:02:09,276 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:09] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:02:13,831 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:02:13,833 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:13] "GET /api/system/info HTTP/1.1" 200 - -2025-10-09 14:02:13,845 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:13] "GET /favicon.ico HTTP/1.1" 404 - -2025-10-09 14:02:15,390 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:15] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:02:16,017 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:16] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:02:16,350 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:16] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:02:16,363 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:16] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:02:18,752 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:18] "GET / HTTP/1.1" 200 - -2025-10-09 14:02:18,780 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:18] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-09 14:02:18,786 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:18] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-09 14:02:18,791 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:18] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-09 14:02:18,799 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:18] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-09 14:02:19,317 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:02:19,318 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:02:19,318 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:02:19,319 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.94s -2025-10-09 14:02:19,780 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:19] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:02:22,552 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:22] "GET / HTTP/1.1" 200 - -2025-10-09 14:02:22,625 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:22] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-09 14:02:22,626 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:22] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-09 14:02:22,629 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:22] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-09 14:02:22,638 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:22] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-09 14:02:23,449 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:02:23,450 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:02:23,451 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:02:23,451 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 3.66s -2025-10-09 14:02:24,404 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:24] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:02:39,872 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:39] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:02:39,876 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:39] "GET /api/system/info HTTP/1.1" 200 - -2025-10-09 14:02:41,536 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:41] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:02:41,659 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:41] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:02:41,926 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:41] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:02:41,931 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:41] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:02:41,944 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:41] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:02:43,664 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:43] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:02:43,670 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:43] "GET /api/system/info HTTP/1.1" 200 - -2025-10-09 14:02:44,834 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:02:44,835 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:02:44,835 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:02:44,836 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.89s -2025-10-09 14:02:45,325 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:45] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:02:45,394 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:45] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:02:45,834 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:45] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:02:46,833 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:02:46,834 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:02:46,834 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:02:46,835 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.50s -2025-10-09 14:02:46,885 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:46] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:02:46,896 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:46] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:02:47,770 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:02:47] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:02:49,273 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:02:49,274 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:02:49,274 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:02:49,274 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.37s -2025-10-09 14:02:49,805 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:49] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:02:51,564 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:02:51,565 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:02:51,566 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:02:51,566 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.75s -2025-10-09 14:02:52,050 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:02:52] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:03:14,176 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:03:14] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:03:15,669 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:03:15] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:03:15,874 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:03:15] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:03:16,127 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:03:16] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:03:16,138 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:03:16] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:03:18,335 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:03:18,336 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:03:18,336 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:03:18,337 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.19s -2025-10-09 14:03:19,324 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:03:19] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:03:21,930 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:03:21,930 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:03:21,930 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:03:21,930 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.60s -2025-10-09 14:03:22,427 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:03:22] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:03:44,179 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:03:44] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:03:45,374 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:03:45] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:03:46,137 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:03:46] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:03:46,663 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:03:46] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:03:46,676 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:03:46] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:03:50,122 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:03:50,123 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:03:50,123 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:03:50,123 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 3.44s -2025-10-09 14:03:50,607 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:03:50] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:03:52,370 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:03:52,370 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:03:52,371 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:03:52,372 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.76s -2025-10-09 14:03:52,947 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:03:52] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:04:14,174 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:04:14] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:04:15,519 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:04:15] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:04:16,350 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:04:16] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:04:16,388 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:04:16] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:04:16,404 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:04:16] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:04:18,386 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:04:18,387 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:04:18,387 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:04:18,388 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.97s -2025-10-09 14:04:19,321 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:04:19] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:04:24,248 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:04:24,249 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:04:24,249 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:04:24,250 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 4.92s -2025-10-09 14:04:24,729 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:04:24] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:04:44,169 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:04:44] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:04:45,478 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:04:45] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:04:46,652 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:04:46] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:04:46,904 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:04:46] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:04:46,924 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:04:46] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:04:48,872 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:04:48,872 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:04:48,873 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:04:48,873 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.94s -2025-10-09 14:04:49,350 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:04:49] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:04:51,348 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:04:51,349 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:04:51,349 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:04:51,349 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.99s -2025-10-09 14:04:51,919 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:04:51] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:05:14,175 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:05:14] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:05:15,461 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:05:15] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:05:15,911 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:05:15] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:05:16,712 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:05:16] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:05:16,727 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:05:16] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:05:18,622 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:05:18,622 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:05:18,622 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:05:18,623 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.88s -2025-10-09 14:05:19,188 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:05:19] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:05:21,272 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:05:21,273 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:05:21,273 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:05:21,273 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.07s -2025-10-09 14:05:21,751 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:05:21] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:05:44,178 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:05:44] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:05:45,499 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:05:45] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:05:45,726 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:05:45] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:05:46,650 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:05:46] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:05:46,663 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:05:46] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:05:48,792 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:05:48,792 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:05:48,793 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:05:48,793 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.12s -2025-10-09 14:05:49,277 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:05:49] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:05:52,775 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:05:52,775 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:05:52,776 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:05:52,776 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 3.46s -2025-10-09 14:05:53,271 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:05:53] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:06:14,180 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:06:14] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:06:15,426 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:06:15] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:06:15,674 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:06:15] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:06:16,202 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:06:16] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:06:16,217 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:06:16] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:06:18,226 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:06:18,226 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:06:18,227 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:06:18,227 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.00s -2025-10-09 14:06:18,743 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:06:18] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:06:20,506 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:06:20,506 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:06:20,506 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:06:20,507 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.75s -2025-10-09 14:06:20,991 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:06:20] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:07:15,177 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:07:15] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:07:16,462 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:07:16] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:07:16,954 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:07:16] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:07:18,102 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:07:18] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:07:18,126 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:07:18] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:07:20,740 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:07:20,741 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:07:20,741 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:07:20,741 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.46s -2025-10-09 14:07:21,343 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:07:21] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:07:24,354 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:07:24,355 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:07:24,355 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:07:24,355 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 3.00s -2025-10-09 14:07:24,923 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:07:24] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:08:16,175 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:08:16] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:08:17,683 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:08:17] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:08:17,961 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:08:17] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:08:19,019 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:08:19] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:08:19,029 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:08:19] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:08:21,344 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:08:21,345 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:08:21,345 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:08:21,345 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.31s -2025-10-09 14:08:21,833 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:08:21] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:08:24,492 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:08:24,493 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:08:24,493 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:08:24,493 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.65s -2025-10-09 14:08:25,121 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:08:25] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:09:17,173 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:09:17] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:09:18,500 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:09:18] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:09:19,676 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:09:19] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:09:19,910 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:09:19] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:09:19,923 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:09:19] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:09:22,888 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:09:22,888 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:09:22,889 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:09:22,889 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.96s -2025-10-09 14:09:23,398 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:09:23] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:09:25,337 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:09:25,338 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:09:25,338 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:09:25,338 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.93s -2025-10-09 14:09:25,835 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:09:25] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:09:53,316 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:09:53] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:09:54,627 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:09:54] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:09:55,558 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:09:55] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:09:56,323 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:09:56] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:09:56,341 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:09:56] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:09:59,396 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:09:59,397 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:09:59,397 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:09:59,397 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 3.05s -2025-10-09 14:09:59,887 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:09:59] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:10:02,227 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:10:02,227 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:10:02,228 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:10:02,228 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.33s -2025-10-09 14:10:02,723 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:10:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:10:14,175 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:10:14] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:10:15,861 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:10:15] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:10:16,157 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:10:16] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:10:17,080 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:10:17] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:10:17,093 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:10:17] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:10:20,000 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:10:20,002 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:10:20,002 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:10:20,002 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.90s -2025-10-09 14:10:20,952 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:10:20] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:10:24,251 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:10:24,252 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:10:24,252 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:10:24,252 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 3.29s -2025-10-09 14:10:24,750 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:10:24] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:10:43,522 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:10:43] "GET / HTTP/1.1" 200 - -2025-10-09 14:10:43,552 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:10:43] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-09 14:10:43,553 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:10:43] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-09 14:10:43,554 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:10:43] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-09 14:10:43,561 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:10:43] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-09 14:10:44,184 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:10:44] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:10:45,903 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:10:45] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:10:46,567 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:10:46] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:10:47,029 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:10:47] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:10:47,043 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:10:47] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:10:49,453 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:10:49,453 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:10:49,454 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:10:49,454 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.40s -2025-10-09 14:10:49,951 - werkzeug - INFO - 172.20.10.5 - - [09/Oct/2025 14:10:49] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:10:58,568 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:10:58] "GET / HTTP/1.1" 200 - -2025-10-09 14:10:58,608 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:10:58] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-09 14:10:58,609 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:10:58] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-09 14:10:58,609 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:10:58] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-09 14:10:59,000 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:10:59] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-10-09 14:11:20,039 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:11:20] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:11:20,040 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:11:20] "GET /api/system/info HTTP/1.1" 200 - -2025-10-09 14:11:21,365 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:11:21] "GET /favicon.ico HTTP/1.1" 404 - -2025-10-09 14:11:21,920 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:11:21] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:11:21,923 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:11:21] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:11:22,177 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:11:22] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:11:22,209 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:11:22] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:11:25,545 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:11:25,545 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:11:25,545 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:11:25,545 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 3.33s -2025-10-09 14:11:26,030 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:11:26] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:11:28,348 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:11:28,349 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:11:28,349 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:11:28,349 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.31s -2025-10-09 14:11:28,827 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:11:28] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:11:50,209 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:11:50] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:11:51,606 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:11:51] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:11:52,317 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:11:52] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:11:52,552 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:11:52] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:11:52,561 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:11:52] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:11:55,050 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:11:55,050 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:11:55,051 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:11:55,051 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.49s -2025-10-09 14:11:55,560 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:11:55] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:11:58,393 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:11:58,393 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:11:58,394 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:11:58,394 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.83s -2025-10-09 14:11:58,903 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:11:58] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:12:20,179 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:12:20] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-09 14:12:21,460 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:12:21] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-09 14:12:21,727 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:12:21] "GET /api/workorders HTTP/1.1" 200 - -2025-10-09 14:12:22,661 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:12:22] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-09 14:12:22,668 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:12:22] "GET /api/settings HTTP/1.1" 200 - -2025-10-09 14:12:26,359 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:12:26,360 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:12:26,360 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:12:26,360 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 3.69s -2025-10-09 14:12:26,841 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:12:26] "GET /api/analytics HTTP/1.1" 200 - -2025-10-09 14:12:28,854 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-09 14:12:28,855 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-09 14:12:28,855 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-09 14:12:28,855 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.01s -2025-10-09 14:12:29,403 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:12:29] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-09 14:12:50,324 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-09 14:12:50,359 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-09 14:12:51,563 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-09 14:12:51,761 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-09 14:12:52,079 - src.main - INFO - TSP助手初始化完成 -2025-10-09 14:12:52,079 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-10-09 14:12:52,079 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-10-09 14:12:52,079 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-10-09 14:12:52,080 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-10-09 14:12:52,080 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-10-09 14:12:52,080 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-10-09 14:12:52,080 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-10-09 14:12:52,080 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-10-09 14:12:52,081 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-10-09 14:12:52,081 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-10-09 14:12:52,081 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-10-09 14:12:52,081 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-10-09 14:12:52,084 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-09 14:12:52,084 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-10-09 14:12:52,084 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-10-09 14:12:52,084 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-10-09 14:12:52,084 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:12:52] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-09 14:12:52,088 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:12:52] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-09 14:12:52,233 - src.main - INFO - TSP助手初始化完成 -2025-10-09 14:12:52,233 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-10-09 14:12:52,233 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-10-09 14:12:52,233 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-10-09 14:12:52,234 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-10-09 14:12:52,234 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-10-09 14:12:52,234 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-10-09 14:12:52,234 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-10-09 14:12:52,234 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-10-09 14:12:52,234 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-10-09 14:12:52,234 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-10-09 14:12:52,234 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-10-09 14:12:52,234 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-10-09 14:12:52,235 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-09 14:12:52,235 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-10-09 14:12:52,235 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-10-09 14:12:52,235 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-10-09 14:12:52,236 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:12:52] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-09 14:12:52,239 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:12:52] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-09 14:12:57,081 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-09 14:12:57,082 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-09 14:12:57,234 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-09 14:12:57,234 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-09 14:12:59,679 - src.dialogue.realtime_chat - INFO - 创建新会话: session_user_001_1759990379 -2025-10-09 14:12:59,680 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:12:59] "POST /api/chat/session HTTP/1.1" 200 - -2025-10-09 14:13:01,611 - src.dialogue.realtime_chat - INFO - 结束会话: session_user_001_1759990379 -2025-10-09 14:13:01,613 - werkzeug - INFO - 127.0.0.1 - - [09/Oct/2025 14:13:01] "DELETE /api/chat/session/session_user_001_1759990379 HTTP/1.1" 200 - -2025-10-11 13:23:46,330 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-11 13:23:46,331 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-11 13:23:52,170 - src.core.database - INFO - 数据库初始化成功 -2025-10-11 13:23:54,167 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-11 13:23:54,180 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-11 13:23:54,244 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-11 13:23:54,245 - werkzeug - INFO - Press CTRL+C to quit -2025-10-11 13:23:54,766 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-11 13:23:55,250 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-11 13:23:55,257 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-11 13:23:55,258 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-11 13:24:00,688 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:00] "GET / HTTP/1.1" 200 - -2025-10-11 13:24:00,789 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:00] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-11 13:24:00,790 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:00] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-11 13:24:00,791 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:00] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-11 13:24:00,797 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:00] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-11 13:24:21,768 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:21] "GET /api/system/info HTTP/1.1" 200 - -2025-10-11 13:24:21,772 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:21] "GET /favicon.ico HTTP/1.1" 404 - -2025-10-11 13:24:22,285 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-11 13:24:22,416 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-11 13:24:22,590 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-10-11 13:24:22,591 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-11 13:24:22,839 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:22] "GET /api/workorders HTTP/1.1" 200 - -2025-10-11 13:24:22,928 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-11 13:24:23,098 - src.main - INFO - TSP助手初始化完成 -2025-10-11 13:24:23,099 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-11 13:24:23,264 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-11 13:24:23,911 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-11 13:24:24,117 - src.main - INFO - TSP助手初始化完成 -2025-10-11 13:24:24,117 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-11 13:24:24,188 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-11 13:24:25,806 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:25] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-11 13:24:25,842 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:25] "GET /api/settings HTTP/1.1" 200 - -2025-10-11 13:24:26,365 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:24:26,366 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:24:26,366 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:24:26,570 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:26] "GET /api/analytics HTTP/1.1" 200 - -2025-10-11 13:24:27,786 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:24:27,787 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:24:27,787 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:24:27,788 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.20s -2025-10-11 13:24:28,100 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-11 13:24:28,100 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-11 13:24:28,258 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:28] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-11 13:24:29,124 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-11 13:24:29,124 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-11 13:24:52,218 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:52] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-11 13:24:52,738 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:52] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-11 13:24:53,334 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:53] "GET /api/workorders HTTP/1.1" 200 - -2025-10-11 13:24:54,113 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:54] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-11 13:24:54,140 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:54] "GET /api/settings HTTP/1.1" 200 - -2025-10-11 13:24:54,584 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:24:54,584 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:24:54,585 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:24:54,759 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:54] "GET /api/analytics HTTP/1.1" 200 - -2025-10-11 13:24:55,303 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:24:55,304 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:24:55,304 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:24:55,508 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:24:55] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-11 13:25:22,203 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:25:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-11 13:25:22,632 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:25:22] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-11 13:25:22,722 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:25:22] "GET /api/workorders HTTP/1.1" 200 - -2025-10-11 13:25:24,095 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:25:24] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-11 13:25:24,118 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:25:24] "GET /api/settings HTTP/1.1" 200 - -2025-10-11 13:25:24,574 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:25:24,574 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:25:24,574 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:25:24,755 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:25:24] "GET /api/analytics HTTP/1.1" 200 - -2025-10-11 13:25:25,273 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:25:25,274 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:25:25,274 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:25:25,487 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:25:25] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-11 13:25:52,228 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:25:52] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-11 13:25:52,652 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:25:52] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-11 13:25:53,043 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:25:53] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-11 13:25:53,417 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:25:53] "GET /api/workorders HTTP/1.1" 200 - -2025-10-11 13:25:53,445 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:25:53] "GET /api/settings HTTP/1.1" 200 - -2025-10-11 13:25:53,885 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:25:53,886 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:25:53,887 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:25:54,069 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:25:54] "GET /api/analytics HTTP/1.1" 200 - -2025-10-11 13:25:54,612 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:25:54,612 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:25:54,612 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:25:54,820 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:25:54] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-11 13:26:22,228 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:26:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-11 13:26:22,667 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:26:22] "GET /api/workorders HTTP/1.1" 200 - -2025-10-11 13:26:22,740 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:26:22] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-11 13:26:24,124 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:26:24] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-11 13:26:24,136 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:26:24] "GET /api/settings HTTP/1.1" 200 - -2025-10-11 13:26:24,571 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:26:24,572 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:26:24,572 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:26:24,750 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:26:24] "GET /api/analytics HTTP/1.1" 200 - -2025-10-11 13:26:25,288 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:26:25,288 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:26:25,289 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:26:25,507 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:26:25] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-11 13:26:52,224 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:26:52] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-11 13:26:52,659 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:26:52] "GET /api/workorders HTTP/1.1" 200 - -2025-10-11 13:26:52,762 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:26:52] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-11 13:26:54,141 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:26:54] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-11 13:26:54,153 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:26:54] "GET /api/settings HTTP/1.1" 200 - -2025-10-11 13:26:54,595 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:26:54,596 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:26:54,596 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:26:54,777 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:26:54] "GET /api/analytics HTTP/1.1" 200 - -2025-10-11 13:26:55,300 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:26:55,301 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:26:55,301 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:26:55,500 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:26:55] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-11 13:27:22,155 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:27:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-11 13:27:22,597 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:27:22] "GET /api/workorders HTTP/1.1" 200 - -2025-10-11 13:27:22,975 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:27:22] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-11 13:27:23,210 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:27:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-11 13:27:23,240 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:27:23] "GET /api/settings HTTP/1.1" 200 - -2025-10-11 13:27:23,683 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:27:23,684 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:27:23,684 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:27:23,859 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:27:23] "GET /api/analytics HTTP/1.1" 200 - -2025-10-11 13:27:24,390 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:27:24,390 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:27:24,391 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:27:24,599 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:27:24] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-11 13:27:52,195 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:27:52] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-11 13:27:52,630 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:27:52] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-11 13:27:52,707 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:27:52] "GET /api/workorders HTTP/1.1" 200 - -2025-10-11 13:27:54,178 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:27:54] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-11 13:27:54,186 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:27:54] "GET /api/settings HTTP/1.1" 200 - -2025-10-11 13:27:54,618 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:27:54,619 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:27:54,620 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:27:54,795 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:27:54] "GET /api/analytics HTTP/1.1" 200 - -2025-10-11 13:27:55,342 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:27:55,343 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:27:55,343 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:27:55,546 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:27:55] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-11 13:28:22,169 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:28:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-11 13:28:22,597 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:28:22] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-11 13:28:22,681 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:28:22] "GET /api/workorders HTTP/1.1" 200 - -2025-10-11 13:28:24,052 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:28:24] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-11 13:28:24,061 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:28:24] "GET /api/settings HTTP/1.1" 200 - -2025-10-11 13:28:24,495 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:28:24,495 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:28:24,495 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:28:24,670 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:28:24] "GET /api/analytics HTTP/1.1" 200 - -2025-10-11 13:28:25,182 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-11 13:28:25,184 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-11 13:28:25,184 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-11 13:28:25,387 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:28:25] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-11 13:28:51,748 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:28:51] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-11 13:28:52,208 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:28:52] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-11 13:28:52,290 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:28:52] "GET /api/workorders HTTP/1.1" 200 - -2025-10-11 13:28:53,588 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:28:53] "GET / HTTP/1.1" 200 - -2025-10-11 13:28:53,624 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:28:53] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-11 13:28:53,629 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:28:53] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-11 13:28:53,634 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:28:53] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-11 13:28:53,641 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:28:53] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-11 13:28:53,646 - werkzeug - INFO - 127.0.0.1 - - [11/Oct/2025 13:28:53] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-13 16:45:43,997 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-13 16:45:43,998 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-13 16:45:46,448 - src.core.database - INFO - 数据库初始化成功 -2025-10-13 16:45:48,730 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-13 16:45:48,754 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-13 16:45:48,812 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-13 16:45:48,812 - werkzeug - INFO - Press CTRL+C to quit -2025-10-13 16:45:49,035 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-13 16:45:49,202 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-13 16:45:49,213 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-13 16:45:49,213 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-13 16:45:54,046 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:45:54] "GET / HTTP/1.1" 200 - -2025-10-13 16:45:54,153 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:45:54] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-13 16:45:54,157 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:45:54] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-13 16:45:54,159 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:45:54] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-13 16:45:54,173 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:45:54] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-10-13 16:46:00,793 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:00] "GET /api/system/info HTTP/1.1" 200 - -2025-10-13 16:46:00,890 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-13 16:46:00,891 - websockets.server - ERROR - opening handshake failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-13 16:46:00,892 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:00] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-13 16:46:00,965 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-13 16:46:01,133 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-10-13 16:46:01,134 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:01] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-13 16:46:01,486 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-13 16:46:01,486 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-13 16:46:01,486 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-13 16:46:01,629 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:01] "GET /api/workorders HTTP/1.1" 200 - -2025-10-13 16:46:01,630 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-13 16:46:01,636 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:01] "GET /favicon.ico HTTP/1.1" 404 - -2025-10-13 16:46:01,637 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-13 16:46:01,654 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-13 16:46:01,833 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-13 16:46:01,835 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-13 16:46:01,836 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-13 16:46:01,838 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-13 16:46:01,840 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-13 16:46:01,841 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-13 16:46:01,843 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-13 16:46:01,844 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-13 16:46:01,846 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-13 16:46:01,848 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-13 16:46:01,849 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-13 16:46:01,850 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-13 16:46:01,851 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-13 16:46:01,853 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-13 16:46:01,855 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-13 16:46:01,857 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-13 16:46:01,858 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-13 16:46:01,859 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-13 16:46:01,861 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-13 16:46:01,863 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-13 16:46:01,864 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-13 16:46:01,865 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-13 16:46:01,866 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-13 16:46:02,063 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-13 16:46:02,089 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-13 16:46:02,089 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-13 16:46:02,089 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-13 16:46:02,228 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-13 16:46:02,256 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-13 16:46:02,284 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:02] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-13 16:46:02,490 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-13 16:46:02,843 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-13 16:46:03,062 - src.main - INFO - TSP助手初始化完成 -2025-10-13 16:46:03,062 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-13 16:46:03,151 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-13 16:46:03,316 - src.main - INFO - TSP助手初始化完成 -2025-10-13 16:46:03,316 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-13 16:46:03,870 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:03] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-13 16:46:05,031 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:05] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-13 16:46:05,081 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-13 16:46:05,081 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-13 16:46:05,081 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-13 16:46:05,081 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.21s -2025-10-13 16:46:05,560 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:05] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-13 16:46:05,576 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:05] "GET /api/settings HTTP/1.1" 200 - -2025-10-13 16:46:05,921 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-13 16:46:05,921 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:34:05,572 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:05] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-07 23:34:07,214 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:34:07,446 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 +2025-12-07 23:34:07,446 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:07] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-07 23:34:07,596 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:34:07,867 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' +2025-12-07 23:34:07,867 - src.config.unified_config - INFO - 配置文件加载成功 +2025-12-07 23:34:07,879 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: openai - qwen-turbo +2025-12-07 23:34:07,945 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:07] "GET /api/workorders HTTP/1.1" 200 - +2025-12-07 23:34:07,951 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id +2025-12-07 23:34:07,967 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description +2025-12-07 23:34:07,967 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category +2025-12-07 23:34:07,977 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority +2025-12-07 23:34:07,989 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status +2025-12-07 23:34:07,990 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source +2025-12-07 23:34:07,998 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at +2025-12-07 23:34:08,007 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> resolution +2025-12-07 23:34:08,014 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution +2025-12-07 23:34:08,023 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by +2025-12-07 23:34:08,030 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module +2025-12-07 23:34:08,036 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness +2025-12-07 23:34:08,036 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close +2025-12-07 23:34:08,046 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type +2025-12-07 23:34:08,046 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim +2025-12-07 23:34:08,063 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version +2025-12-07 23:34:08,063 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw +2025-12-07 23:34:08,074 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record +2025-12-07 23:34:08,080 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day +2025-12-07 23:34:08,080 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time +2025-12-07 23:34:08,080 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:08] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-07 23:34:08,080 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion +2025-12-07 23:34:08,096 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at +2025-12-07 23:34:08,713 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:08] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-07 23:34:10,080 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:10] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-07 23:34:10,612 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:34:10,620 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-13 16:46:06,015 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-13 16:46:06,015 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-13 16:46:06,016 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-13 16:46:06,175 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:06] "GET /api/analytics HTTP/1.1" 200 - -2025-10-13 16:46:06,589 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-13 16:46:06,589 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-13 16:46:06,590 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-13 16:46:06,754 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:06] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-13 16:46:06,803 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:06] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-13 16:46:08,057 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:08] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-13 16:46:08,066 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-13 16:46:08,066 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-13 16:46:08,323 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-13 16:46:08,324 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-13 16:46:10,387 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:10] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-13 16:46:10,927 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-13 16:46:10,927 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:34:12,128 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:12] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 23:34:12,128 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:12] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 23:34:12,128 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:12] "GET /static/css/design-system.css HTTP/1.1" 304 - +2025-12-07 23:34:12,595 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:12] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-07 23:34:15,638 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:34:15,645 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-13 16:46:15,933 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-13 16:46:15,934 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:34:20,646 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:34:20,646 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-13 16:46:17,213 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:17] "GET /api/token-monitor/stats HTTP/1.1" 200 - -2025-10-13 16:46:18,422 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:18] "GET /api/token-monitor/records HTTP/1.1" 200 - -2025-10-13 16:46:20,159 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:20] "GET /api/token-monitor/chart HTTP/1.1" 200 - -2025-10-13 16:46:20,940 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-13 16:46:20,941 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:34:22,831 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:22] "GET / HTTP/1.1" 200 - +2025-12-07 23:34:22,949 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:22] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-07 23:34:22,963 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:22] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - +2025-12-07 23:34:22,969 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:22] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - +2025-12-07 23:34:22,999 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:22] "GET /static/css/design-system.css HTTP/1.1" 200 - +2025-12-07 23:34:24,153 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:24] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-07 23:34:24,175 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:24] "GET /api/system/info HTTP/1.1" 200 - +2025-12-07 23:34:24,228 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:34:24,228 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:24] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-07 23:34:24,236 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-13 16:46:25,470 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:25] "GET /api/ai-monitor/stats HTTP/1.1" 200 - -2025-10-13 16:46:25,906 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:25] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - -2025-10-13 16:46:25,957 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-13 16:46:25,957 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:34:25,113 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:25] "GET /api/workorders HTTP/1.1" 200 - +2025-12-07 23:34:25,653 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:34:25,661 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-13 16:46:26,011 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:26] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - -2025-10-13 16:46:26,530 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:26] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - -2025-10-13 16:46:27,584 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:27] "GET /api/ai-monitor/stats HTTP/1.1" 200 - -2025-10-13 16:46:28,003 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:28] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - -2025-10-13 16:46:28,112 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:28] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - -2025-10-13 16:46:28,464 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:28] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-10-13 16:46:28,471 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:28] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-10-13 16:46:28,472 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:28] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-10-13 16:46:28,473 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:28] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-10-13 16:46:28,628 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:28] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - -2025-10-13 16:46:30,976 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-13 16:46:30,977 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:34:26,129 - src.agent_assistant - INFO - TSP Agent助手初始化完成 +2025-12-07 23:34:26,129 - src.agent_assistant - INFO - TSP Agent助手初始化完成 +2025-12-07 23:34:26,129 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 +2025-12-07 23:34:26,129 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 +2025-12-07 23:34:26,129 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:26] "GET /api/agent/tools/stats HTTP/1.1" 200 - +2025-12-07 23:34:26,129 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:26] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-07 23:34:26,362 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:26] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-07 23:34:26,383 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:26] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-07 23:34:27,081 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:27] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-07 23:34:27,882 - src.dialogue.realtime_chat - INFO - 创建新会话: session_user_001_1765121667 +2025-12-07 23:34:27,882 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:27] "POST /api/chat/session HTTP/1.1" 200 - +2025-12-07 23:34:29,334 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:34:29,334 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-13 16:46:31,706 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:31] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-10-13 16:46:31,715 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:31] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-10-13 16:46:31,716 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:31] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-10-13 16:46:31,718 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:31] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-10-13 16:46:35,061 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-13 16:46:35,061 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-13 16:46:35,061 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-13 16:46:35,230 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:35] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-13 16:46:35,579 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-13 16:46:35,579 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-13 16:46:35,579 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-13 16:46:35,580 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.04s -2025-10-13 16:46:35,992 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:35] "GET /api/analytics HTTP/1.1" 200 - -2025-10-13 16:46:35,996 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-13 16:46:35,997 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:34:30,512 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '我的车辆无法远程启动' 返回 0 个结果 +2025-12-07 23:34:30,711 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:34:30,715 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-13 16:46:36,430 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-13 16:46:36,430 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-13 16:46:36,430 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-13 16:46:36,600 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:36] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-13 16:46:38,365 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:38] "GET /api/settings HTTP/1.1" 200 - -2025-10-13 16:46:41,021 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-13 16:46:41,021 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:34:30,851 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:30] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-07 23:34:34,352 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:34:34,367 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-13 16:46:42,273 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-13 16:46:42,584 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-13 16:46:42,872 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-13 16:46:43,273 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-13 16:46:43,286 - src.main - INFO - TSP助手初始化完成 -2025-10-13 16:46:43,287 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-10-13 16:46:43,287 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-10-13 16:46:43,287 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-10-13 16:46:43,287 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-10-13 16:46:43,287 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-10-13 16:46:43,287 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-10-13 16:46:43,287 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-10-13 16:46:43,287 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-10-13 16:46:43,287 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-10-13 16:46:43,287 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-10-13 16:46:43,287 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-10-13 16:46:43,287 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-10-13 16:46:43,290 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-13 16:46:43,291 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-10-13 16:46:43,291 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-10-13 16:46:43,291 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-10-13 16:46:43,291 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:43] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-13 16:46:43,484 - src.main - INFO - TSP助手初始化完成 -2025-10-13 16:46:43,484 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-10-13 16:46:43,484 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-10-13 16:46:43,484 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-10-13 16:46:43,484 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-10-13 16:46:43,484 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-10-13 16:46:43,484 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-10-13 16:46:43,484 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-10-13 16:46:43,484 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-10-13 16:46:43,484 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-10-13 16:46:43,484 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-10-13 16:46:43,484 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-10-13 16:46:43,484 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-10-13 16:46:43,485 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-13 16:46:43,485 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-10-13 16:46:43,486 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-10-13 16:46:43,486 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-10-13 16:46:43,486 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:43] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-13 16:46:46,074 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-13 16:46:46,075 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:34:35,212 - src.core.llm_client - INFO - API请求成功 +2025-12-07 23:34:35,431 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:35] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-07 23:34:35,747 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:34:35,768 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-13 16:46:46,301 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:46] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-13 16:46:46,583 - src.dialogue.realtime_chat - INFO - 创建新会话: session_user_001_1760345206 -2025-10-13 16:46:46,595 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:46] "POST /api/chat/session HTTP/1.1" 200 - -2025-10-13 16:46:48,295 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-13 16:46:48,295 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-13 16:46:48,493 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-13 16:46:48,494 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-13 16:46:48,586 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '我的车辆无法远程启动' 返回 0 个结果 -2025-10-13 16:46:51,104 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-13 16:46:51,105 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:34:35,768 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:35] "POST /api/chat/message HTTP/1.1" 200 - +2025-12-07 23:34:37,047 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:37] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-07 23:34:38,080 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:38] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-07 23:34:38,261 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:38] "GET /api/workorders HTTP/1.1" 200 - +2025-12-07 23:34:38,361 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:38] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-07 23:34:39,378 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:34:39,378 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-13 16:46:53,642 - src.core.llm_client - INFO - API请求成功 -2025-10-13 16:46:54,624 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 16:46:54] "POST /api/chat/message HTTP/1.1" 200 - -2025-10-13 16:46:56,251 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-13 16:46:56,252 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:34:40,800 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:34:40,811 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-13 17:04:02,350 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-13 17:04:02,351 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-13 17:04:07,881 - src.core.database - INFO - 数据库初始化成功 -2025-10-13 17:04:09,036 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-13 17:04:09,045 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-13 17:04:09,098 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-13 17:04:09,099 - werkzeug - INFO - Press CTRL+C to quit -2025-10-13 17:04:09,593 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-13 17:04:10,068 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-13 17:04:10,074 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-13 17:04:10,074 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-13 17:04:11,648 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 17:04:11] "GET / HTTP/1.1" 200 - -2025-10-13 17:04:11,778 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 17:04:11] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-13 17:04:11,779 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 17:04:11] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-13 17:04:11,780 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 17:04:11] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-13 17:04:18,755 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 17:04:18] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-10-13 17:04:32,813 - werkzeug - INFO - 127.0.0.1 - - [13/Oct/2025 17:04:32] "GET /favicon.ico HTTP/1.1" 404 - -2025-10-14 08:55:49,588 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-14 08:55:49,588 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-14 08:55:55,867 - src.core.database - INFO - 数据库初始化成功 -2025-10-14 08:55:58,654 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-14 08:55:58,684 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-14 08:55:58,742 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-14 08:55:58,742 - werkzeug - INFO - Press CTRL+C to quit -2025-10-14 08:55:59,240 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 08:55:59,694 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-14 08:55:59,706 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-14 08:55:59,706 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-14 08:56:10,705 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:10] "GET / HTTP/1.1" 200 - -2025-10-14 08:56:10,801 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:10] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-14 08:56:10,801 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:10] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-14 08:56:10,801 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:10] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-14 08:56:10,935 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:10] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-14 08:56:11,021 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:11] "GET /api/system/info HTTP/1.1" 200 - -2025-10-14 08:56:11,060 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:11] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-14 08:56:11,253 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-14 08:56:11,255 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:34:41,561 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d +2025-12-07 23:34:42,146 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 2122, 'msg': 'ok', 'tenant_access_token': 't-g104c7maYKB23RBJZIFTIRYRRDKDLDVT6HED7RLS'} +2025-12-07 23:34:42,178 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104c7maYKB23RBJZI... +2025-12-07 23:34:42,180 - src.integrations.feishu_client - INFO - 令牌有效期: 2122秒,过期时间: 2025-12-08 00:10:04 +2025-12-07 23:34:42,194 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records +2025-12-07 23:34:42,194 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104c7maYKB23RBJZI... +2025-12-07 23:34:44,461 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:34:44,561 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-14 08:56:11,471 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 08:56:11,589 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 08:56:11,674 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 08:56:11,785 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 08:56:11,834 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:11] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 08:56:11,834 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-14 08:56:11,834 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:11] "GET /favicon.ico HTTP/1.1" 404 - -2025-10-14 08:56:11,850 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-14 08:56:11,854 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-14 08:56:11,855 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-14 08:56:11,857 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-14 08:56:11,858 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-14 08:56:11,859 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-14 08:56:11,861 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-14 08:56:11,862 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-14 08:56:11,863 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-14 08:56:11,865 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-14 08:56:11,866 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-14 08:56:11,867 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-14 08:56:11,869 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-14 08:56:11,871 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-14 08:56:11,871 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-14 08:56:11,873 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-14 08:56:11,874 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-14 08:56:11,876 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-14 08:56:11,877 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-14 08:56:11,878 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-14 08:56:11,879 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-14 08:56:11,882 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-14 08:56:11,892 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:11] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 08:56:11,921 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 08:56:11,922 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-10-14 08:56:11,923 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:11] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 08:56:12,082 - src.main - INFO - TSP助手初始化完成 -2025-10-14 08:56:12,082 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-14 08:56:12,173 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 08:56:12,305 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:12] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-14 08:56:12,350 - src.main - INFO - TSP助手初始化完成 -2025-10-14 08:56:12,350 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-14 08:56:14,152 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:14] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 08:56:14,586 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 08:56:14,586 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 08:56:14,586 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 08:56:14,770 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:14] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 08:56:14,789 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:14] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 08:56:15,238 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 08:56:15,238 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 08:56:15,238 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 08:56:15,420 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:15] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 08:56:15,868 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 08:56:15,868 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 08:56:15,868 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 08:56:16,051 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:16] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 08:56:16,269 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-14 08:56:16,269 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:34:44,944 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 +2025-12-07 23:34:44,961 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': "模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志', '当前问题状态': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。\n0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}, {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Vehicle data is not updated in the app => dated from October,...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'VIN|sim': 'LNNBDDEZ8SD345645 ', 'Vehicle Type01': 'JAECOO J7(T1EJ)', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志', '当前问题状态': '1027:车辆自10月19日进入深度睡眠,TBOX无远程连接,建议客户尽快进站提取TBOX及DMC日志,进行本地诊断分析,排查电源管理或通信模块异常原因,确认硬件状态及软件配置是否正常。\n1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'}, 'id': 'recv0NLSh2a2S7', 'record_id': 'recv0NLSh2a2S7'}, {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:User not able to enter into member center neither mobile phon...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'VIN|sim': 'LNNBDDEZXSD449358', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.', '当前问题状态': '1027:确认手机网络及APP版本正常,尝试清除APP缓存并重新登录,检查QR码扫描权限是否开启,重启手机和车机,若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查系统故障。\n1024: DMC logs attached as well as vieos of the issue.'}, 'id': 'recv0NLZoKLlRJ', 'record_id': 'recv0NLZoKLlRJ'}, {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Abnormal traffic consumption\n\n相关背景信息:\n相关知识库信息:\n- TR866 - Traf...', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'VIN|sim': 'XEYDD14B3SA012164', 'Vehicle Type01': 'TEST', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf', '当前问题状态': '1027:流量异常可能与导航应用后台持续联网有关,建议关闭Navi自动更新地图功能并限制后台数据使用,检查车机系统是否存在异常进程,如问题依旧,建议进站检测DMC模块日志及SIM卡通信状态,必要时升级系统或更换模块。\n1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'}, 'id': 'recv0NLZoKjKvx', 'record_id': 'recv0NLZoKjKvx'}], 'total': 4}, 'msg': 'success'} +2025-12-07 23:34:45,011 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:45] "GET /api/feishu-sync/preview-feishu-data HTTP/1.1" 200 - +2025-12-07 23:34:45,528 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) +2025-12-07 23:34:45,828 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:34:45,828 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-14 08:56:16,485 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 08:56:16,486 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 08:56:16,486 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 08:56:16,586 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:16] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 08:56:16,636 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:16] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 08:56:17,086 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 08:56:17,086 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 08:56:17,086 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 08:56:17,086 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 08:56:17,086 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 08:56:17,274 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:56:17] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 08:56:17,353 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 08:56:17,353 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 08:56:21,284 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-14 08:56:21,284 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:34:47,562 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:47] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-07 23:34:47,594 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:47] "GET /api/settings HTTP/1.1" 200 - +2025-12-07 23:34:50,861 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:34:50,861 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-14 08:56:26,301 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-14 08:56:26,304 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:34:56,067 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:34:56,082 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-14 08:56:31,318 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-14 08:56:31,318 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:34:58,382 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:34:58] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-07 23:35:01,329 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:35:01,860 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-14 08:56:36,351 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-14 08:56:36,351 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:35:05,595 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:35:05] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-07 23:35:06,735 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:35:06,752 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-14 08:58:58,437 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:58:58] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 08:58:59,050 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 08:58:59,050 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 08:58:59,050 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 08:58:59,050 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.13s -2025-10-14 08:58:59,314 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:58:59] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 08:58:59,502 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:58:59] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 08:58:59,952 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 08:58:59,952 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 08:58:59,952 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 08:59:00,135 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 08:59:00] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 09:00:32,039 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-14 09:00:32,039 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-14 09:00:34,167 - src.core.database - INFO - 数据库初始化成功 -2025-10-14 09:00:35,352 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-14 09:00:35,374 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-14 09:00:35,429 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-14 09:00:35,429 - werkzeug - INFO - Press CTRL+C to quit -2025-10-14 09:00:35,634 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 09:00:35,794 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-14 09:00:35,802 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-14 09:00:35,802 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-14 09:01:34,234 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-14 09:01:34,235 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-14 09:01:39,731 - src.core.database - INFO - 数据库初始化成功 -2025-10-14 09:01:40,817 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-14 09:01:40,817 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-14 09:01:40,883 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-14 09:01:40,883 - werkzeug - INFO - Press CTRL+C to quit -2025-10-14 09:01:41,380 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 09:01:41,835 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-14 09:01:41,860 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-14 09:01:41,864 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-14 09:01:46,052 - werkzeug - INFO - 10.210.229.242 - - [14/Oct/2025 09:01:46] "GET / HTTP/1.1" 200 - -2025-10-14 09:01:46,406 - werkzeug - INFO - 10.210.229.242 - - [14/Oct/2025 09:01:46] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-14 09:01:46,407 - werkzeug - INFO - 10.210.229.242 - - [14/Oct/2025 09:01:46] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-14 09:01:46,407 - werkzeug - INFO - 10.210.229.242 - - [14/Oct/2025 09:01:46] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-14 09:01:46,423 - werkzeug - INFO - 10.210.229.242 - - [14/Oct/2025 09:01:46] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-10-14 09:01:56,369 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:01:56] "GET / HTTP/1.1" 200 - -2025-10-14 09:01:56,384 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:01:56] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-14 09:01:56,386 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:01:56] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-14 09:01:56,387 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:01:56] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-14 09:01:56,399 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:01:56] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-14 09:01:56,636 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:01:56] "GET /api/system/info HTTP/1.1" 200 - -2025-10-14 09:01:56,669 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:01:56] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 09:01:56,671 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-14 09:01:56,672 - websockets.server - ERROR - opening handshake failed +2025-12-07 23:35:08,419 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:35:08] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-07 23:35:08,913 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:35:08] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-07 23:35:10,035 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) +2025-12-07 23:35:10,294 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:35:10] "GET /api/workorders HTTP/1.1" 200 - +2025-12-07 23:35:11,728 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:35:11] "GET /api/analytics HTTP/1.1" 200 - +2025-12-07 23:35:11,961 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:35:11,961 - websockets.server - ERROR - opening handshake failed Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake response = process_request(self, self.request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request if request_headers.get("Upgrade", "").lower() == "websocket": ^^^^^^^^^^^^^^^^^^^ AttributeError: 'Request' object has no attribute 'get' -2025-10-14 09:01:56,673 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:01:56] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-14 09:01:57,099 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 09:01:57,233 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 09:01:57,270 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 09:01:57,292 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 09:01:57,400 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-10-14 09:01:57,400 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:01:57] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 09:01:57,466 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-14 09:01:57,468 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-14 09:01:57,469 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-14 09:01:57,471 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-14 09:01:57,472 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-14 09:01:57,473 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-14 09:01:57,473 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-14 09:01:57,474 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-14 09:01:57,476 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-14 09:01:57,477 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-14 09:01:57,478 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-14 09:01:57,479 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-14 09:01:57,480 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-14 09:01:57,481 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-14 09:01:57,481 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-14 09:01:57,484 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-14 09:01:57,485 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-14 09:01:57,487 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-14 09:01:57,488 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-14 09:01:57,489 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-14 09:01:57,490 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-14 09:01:57,492 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-14 09:01:57,493 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-14 09:01:57,533 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:01:57] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 09:01:57,633 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 09:01:57,734 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 09:01:57,814 - src.main - INFO - TSP助手初始化完成 -2025-10-14 09:01:57,815 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-14 09:01:57,907 - src.main - INFO - TSP助手初始化完成 -2025-10-14 09:01:57,908 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-14 09:01:57,955 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:01:57] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-14 09:01:58,561 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:01:58] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 09:01:58,733 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:01:58] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 09:01:59,169 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 09:01:59,169 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 09:01:59,169 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 09:01:59,335 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:01:59] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 09:01:59,359 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:01:59] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 09:01:59,835 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 09:01:59,835 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 09:01:59,835 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 09:02:00,017 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:00] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 09:02:00,477 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 09:02:00,478 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 09:02:00,478 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 09:02:00,653 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:00] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 09:02:01,268 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 09:02:01,268 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 09:02:01,268 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 09:02:01,442 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 09:02:01,901 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 09:02:01,901 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 09:02:01,901 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 09:02:02,019 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 09:02:02,086 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 09:02:02,817 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 09:02:02,817 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 09:02:02,918 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 09:02:02,918 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 09:02:08,233 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 09:02:08,233 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 09:02:08,233 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 09:02:08,400 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:08] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 09:02:08,754 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 09:02:08,755 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 09:02:08,755 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 09:02:08,755 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.06s -2025-10-14 09:02:09,168 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:09] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 09:02:09,590 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:09] "GET /api/ai-monitor/stats HTTP/1.1" 200 - -2025-10-14 09:02:09,639 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 09:02:09,639 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 09:02:09,639 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 09:02:09,817 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:09] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 09:02:10,018 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:10] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - -2025-10-14 09:02:10,018 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:10] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - -2025-10-14 09:02:10,041 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:10] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - -2025-10-14 09:02:13,418 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:13] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-14 09:02:16,316 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:16] "GET /api/workorders/65 HTTP/1.1" 200 - -2025-10-14 09:02:16,772 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:16] "GET /api/workorders/65 HTTP/1.1" 200 - -2025-10-14 09:02:36,906 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:36] "GET / HTTP/1.1" 200 - -2025-10-14 09:02:36,927 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:36] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-14 09:02:36,927 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:36] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-14 09:02:36,935 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:36] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-14 09:02:36,940 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:36] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-14 09:02:37,118 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:37] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 09:02:37,124 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:37] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 09:02:37,133 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:37] "GET /api/system/info HTTP/1.1" 200 - -2025-10-14 09:02:37,136 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-14 09:02:37,142 - websockets.server - ERROR - opening handshake failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler - await connection.handshake( - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake - raise self.protocol.handshake_exc - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake - response = process_request(self, self.request) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request - if request_headers.get("Upgrade", "").lower() == "websocket": - ^^^^^^^^^^^^^^^^^^^ -AttributeError: 'Request' object has no attribute 'get' -2025-10-14 09:02:37,143 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:37] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-14 09:02:37,569 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:37] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 09:02:37,585 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:37] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-14 09:02:37,591 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:37] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-14 09:02:38,168 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:38] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 09:02:39,002 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:39] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 09:02:39,219 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:39] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-14 09:02:39,465 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 09:02:39,465 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 09:02:39,465 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 09:02:39,645 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:39] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 09:02:39,673 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:39] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 09:02:40,720 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 09:02:40,720 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 09:02:40,720 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 09:02:40,720 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.03s -2025-10-14 09:02:41,134 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:41] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 09:02:41,584 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 09:02:41,585 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 09:02:41,585 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 09:02:41,759 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:02:41] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 09:03:53,900 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 09:03:53,900 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 09:03:53,900 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 09:03:54,068 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:03:54] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 09:03:54,634 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:03:54] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 09:03:55,133 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 09:03:55,133 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 09:03:55,134 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 09:03:55,134 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.05s -2025-10-14 09:03:55,553 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:03:55] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 09:11:18,382 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:11:18] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 09:11:19,144 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 09:11:19,144 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 09:11:19,144 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 09:11:19,144 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.21s -2025-10-14 09:11:19,633 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:11:19] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 09:11:20,122 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 09:11:20,123 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 09:11:20,123 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 09:11:20,306 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 09:11:20] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 10:26:00,733 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-14 10:26:00,734 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-14 10:26:03,050 - src.core.database - INFO - 数据库初始化成功 -2025-10-14 10:26:04,792 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-14 10:26:04,812 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-14 10:26:04,868 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. +2025-12-07 23:35:12,011 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:35:12] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-07 23:35:18,906 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:35:18] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-07 23:35:38,744 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) +2025-12-07 23:35:40,993 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) +2025-12-07 23:35:42,127 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:35:42] "GET /api/analytics HTTP/1.1" 200 - +2025-12-07 23:35:43,726 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:35:43] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-07 23:35:43,765 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:35:43] "GET /api/settings HTTP/1.1" 200 - +2025-12-07 23:36:08,143 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) +2025-12-07 23:36:10,448 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:36:10] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-07 23:36:11,715 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-07 23:36:11,715 - src.web.error_handlers - ERROR - 未处理错误 get_health: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-07 23:36:28,892 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) +2025-12-07 23:36:31,477 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:36:31] "GET /api/analytics HTTP/1.1" 200 - +2025-12-07 23:36:39,110 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:36:39] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-07 23:36:45,076 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-07 23:36:45,076 - src.web.error_handlers - ERROR - 未处理错误 get_health: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-07 23:36:52,526 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) +2025-12-07 23:36:54,426 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:36:54] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-07 23:42:25,805 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-07 23:42:25,805 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-07 23:42:32,105 - src.core.database - INFO - 数据库初始化成功 +2025-12-07 23:42:35,944 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-07 23:42:35,970 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-07 23:42:36,098 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-14 10:26:04,868 - werkzeug - INFO - Press CTRL+C to quit -2025-10-14 10:26:05,059 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 10:26:05,241 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-14 10:26:05,264 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-14 10:26:05,264 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-14 10:26:23,408 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 10:26:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 10:26:23,545 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 10:26:23,896 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 10:26:24,074 - src.main - INFO - TSP助手初始化完成 -2025-10-14 10:26:24,074 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-14 10:26:29,083 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 10:26:29,083 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 10:26:55,922 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-14 10:26:55,923 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-14 10:26:58,594 - src.core.database - INFO - 数据库初始化成功 -2025-10-14 10:26:59,763 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-14 10:26:59,773 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-14 10:26:59,823 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. + * Running on http://192.168.31.202:5000 +2025-12-07 23:42:36,098 - werkzeug - INFO - Press CTRL+C to quit +2025-12-07 23:42:37,182 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:42:38,261 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-07 23:42:38,277 - websockets.server - INFO - server listening on [::1]:8765 +2025-12-07 23:42:38,279 - websockets.server - INFO - server listening on 127.0.0.1:8765 +2025-12-07 23:43:16,387 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:43:16] "GET / HTTP/1.1" 200 - +2025-12-07 23:43:18,453 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:43:18] "POST /api/workorders/generate-ai-suggestion HTTP/1.1" 404 - +2025-12-07 23:45:35,339 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-07 23:45:35,339 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-07 23:45:41,453 - src.core.database - INFO - 数据库初始化成功 +2025-12-07 23:45:44,883 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-07 23:45:44,926 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-07 23:45:45,133 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-14 10:26:59,823 - werkzeug - INFO - Press CTRL+C to quit -2025-10-14 10:27:00,058 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 10:27:00,278 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-14 10:27:00,286 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-14 10:27:00,287 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-14 10:27:12,079 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 10:27:12] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 10:27:12,163 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 10:27:12,347 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 10:27:12,348 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 10:27:12,348 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 10:27:12,512 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 10:27:12] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 10:27:12,570 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 10:27:12,794 - src.main - INFO - TSP助手初始化完成 -2025-10-14 10:27:12,795 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-14 10:27:12,916 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 10:27:12,917 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 10:27:12,917 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 10:27:13,100 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 10:27:13] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 10:27:17,802 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 10:27:17,802 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 10:32:38,807 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-14 10:32:38,808 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-14 10:32:40,986 - src.core.database - INFO - 数据库初始化成功 -2025-10-14 10:32:42,232 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-14 10:32:42,246 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-14 10:32:42,302 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-14 10:32:42,302 - werkzeug - INFO - Press CTRL+C to quit -2025-10-14 10:32:42,498 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 10:32:42,673 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-14 10:32:42,680 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-14 10:32:42,681 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-14 10:32:44,807 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 10:32:44] "GET / HTTP/1.1" 200 - -2025-10-14 10:32:44,898 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 10:32:44] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-14 10:32:44,901 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 10:32:44] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-14 10:32:44,902 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 10:32:44] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-14 10:32:44,908 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 10:32:44] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-14 13:15:45,053 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-14 13:15:45,053 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-14 13:15:47,320 - src.core.database - INFO - 数据库初始化成功 -2025-10-14 13:15:48,565 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-14 13:15:48,580 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-14 13:15:48,658 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-14 13:15:48,658 - werkzeug - INFO - Press CTRL+C to quit -2025-10-14 13:15:48,947 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:15:49,119 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-14 13:15:49,128 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-14 13:15:49,128 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-14 13:23:47,401 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-14 13:23:47,402 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-14 13:23:52,513 - src.core.database - INFO - 数据库初始化成功 -2025-10-14 13:23:53,832 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-14 13:23:53,844 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-14 13:23:53,921 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-14 13:23:53,922 - werkzeug - INFO - Press CTRL+C to quit -2025-10-14 13:23:54,358 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:23:54,805 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-14 13:23:54,821 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-14 13:23:54,821 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-14 13:23:57,340 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:23:57] "GET / HTTP/1.1" 200 - -2025-10-14 13:23:57,432 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:23:57] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-14 13:23:57,433 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:23:57] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-14 13:23:57,435 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:23:57] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-14 13:23:57,448 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:23:57] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-14 13:24:18,464 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:18] "GET /api/system/info HTTP/1.1" 200 - -2025-10-14 13:24:18,470 - websockets.server - INFO - connection open -2025-10-14 13:24:18,472 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:18] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-14 13:24:18,472 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:24:18,923 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:24:19,062 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:24:19,112 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:24:19,291 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-14 13:24:19,293 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-14 13:24:19,295 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-14 13:24:19,297 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-14 13:24:19,299 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-14 13:24:19,300 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-14 13:24:19,302 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-14 13:24:19,304 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-14 13:24:19,309 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-14 13:24:19,311 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-14 13:24:19,313 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-14 13:24:19,316 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-14 13:24:19,318 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-14 13:24:19,320 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-14 13:24:19,323 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-14 13:24:19,325 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-14 13:24:19,327 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-14 13:24:19,329 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-14 13:24:19,331 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-14 13:24:19,333 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-14 13:24:19,337 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-14 13:24:19,341 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-14 13:24:19,343 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-14 13:24:19,369 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-10-14 13:24:19,370 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:19] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:24:19,413 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:24:19,483 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:19] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:24:19,576 - src.main - INFO - TSP助手初始化完成 -2025-10-14 13:24:19,577 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-14 13:24:19,801 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:19] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-14 13:24:20,099 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:24:20,742 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:24:20,836 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:20] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:24:20,907 - src.main - INFO - TSP助手初始化完成 -2025-10-14 13:24:20,908 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-14 13:24:21,678 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:21] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:24:22,817 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:24:22,817 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:24:22,818 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:24:22,818 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.14s -2025-10-14 13:24:23,271 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:23] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:24:23,302 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:23] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:24:23,494 - websockets.server - INFO - connection open -2025-10-14 13:24:23,495 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:24:23,904 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:24:24,506 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:24:24,507 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:24:24,508 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:24:24,508 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.20s -2025-10-14 13:24:24,584 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 13:24:24,584 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 13:24:24,980 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:24] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:24:25,911 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 13:24:25,911 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 13:24:26,128 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:24:26,129 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:24:26,129 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:24:26,130 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.13s -2025-10-14 13:24:26,182 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:24:26,183 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:24:26,184 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:24:26,184 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.18s -2025-10-14 13:24:26,576 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:26] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:24:26,657 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:26] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:24:27,110 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:24:27,110 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:24:27,111 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:24:27,285 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:27] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:24:28,500 - websockets.server - INFO - connection open -2025-10-14 13:24:28,500 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:24:33,505 - websockets.server - INFO - connection open -2025-10-14 13:24:33,506 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:24:38,518 - websockets.server - INFO - connection open -2025-10-14 13:24:38,519 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:24:43,524 - websockets.server - INFO - connection open -2025-10-14 13:24:43,524 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:24:48,445 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:48] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:24:48,542 - websockets.server - INFO - connection open -2025-10-14 13:24:48,543 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:24:48,867 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:48] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:24:48,946 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:48] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:24:50,243 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:50] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:24:50,694 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:24:50,695 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:24:50,696 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:24:50,872 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:50] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:24:50,891 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:50] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:24:51,391 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:24:51,392 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:24:51,393 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:24:51,558 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:51] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:24:52,095 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:24:52,096 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:24:52,096 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:24:52,297 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:24:52] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:24:53,553 - websockets.server - INFO - connection open -2025-10-14 13:24:53,554 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:24:58,560 - websockets.server - INFO - connection open -2025-10-14 13:24:58,560 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:25:03,567 - websockets.server - INFO - connection open -2025-10-14 13:25:03,567 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:25:08,574 - websockets.server - INFO - connection open -2025-10-14 13:25:08,574 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:25:08,982 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:08] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:25:13,590 - websockets.server - INFO - connection open -2025-10-14 13:25:13,590 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:25:18,443 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:18] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:25:18,602 - websockets.server - INFO - connection open -2025-10-14 13:25:18,604 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:25:19,154 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:19] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:25:19,560 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:19] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:25:19,623 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:19] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:25:20,139 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:25:20,139 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:25:20,140 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:25:20,343 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:20] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:25:20,375 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:20] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:25:20,831 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:25:20,833 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:25:20,833 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:25:21,006 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:21] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:25:22,140 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:25:22,140 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:25:22,141 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:25:22,141 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.13s -2025-10-14 13:25:22,589 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:22] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:25:23,614 - websockets.server - INFO - connection open -2025-10-14 13:25:23,615 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:25:28,623 - websockets.server - INFO - connection open -2025-10-14 13:25:28,624 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:25:33,629 - websockets.server - INFO - connection open -2025-10-14 13:25:33,630 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:25:33,992 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:25:33,992 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:25:33,993 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:25:34,199 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:34] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:25:34,638 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:25:34,639 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:25:34,639 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:25:34,807 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:34] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:25:38,642 - websockets.server - INFO - connection open -2025-10-14 13:25:38,643 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:25:43,655 - websockets.server - INFO - connection open -2025-10-14 13:25:43,656 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:25:48,454 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:48] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:25:48,664 - websockets.server - INFO - connection open -2025-10-14 13:25:48,665 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:25:48,964 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:48] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:25:49,125 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:49] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:25:49,425 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:49] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:25:49,658 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:49] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:25:50,174 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:25:50,175 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:25:50,175 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:25:50,375 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:50] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:25:50,385 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:50] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:25:50,821 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:25:50,822 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:25:50,822 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:25:50,993 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:50] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:25:52,391 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:25:52,392 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:25:52,393 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:25:52,393 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.39s -2025-10-14 13:25:52,848 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:25:52] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:25:53,672 - websockets.server - INFO - connection open -2025-10-14 13:25:53,673 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:25:58,683 - websockets.server - INFO - connection open -2025-10-14 13:25:58,684 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:26:03,696 - websockets.server - INFO - connection open -2025-10-14 13:26:03,696 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:26:08,703 - websockets.server - INFO - connection open -2025-10-14 13:26:08,703 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:26:13,719 - websockets.server - INFO - connection open -2025-10-14 13:26:13,720 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:26:18,447 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:26:18] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:26:18,729 - websockets.server - INFO - connection open -2025-10-14 13:26:18,730 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:26:18,897 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:26:18] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:26:19,552 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:26:19] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:26:19,965 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:26:19] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:26:20,340 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:26:20] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:26:20,784 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:26:20,785 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:26:20,785 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:26:20,968 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:26:20] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:26:20,978 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:26:20] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:26:22,101 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:26:22,102 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:26:22,102 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:26:22,103 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.12s -2025-10-14 13:26:22,569 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:26:22] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:26:23,001 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:26:23,001 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:26:23,002 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:26:23,168 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:26:23] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:32:14,473 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-14 13:35:43,368 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:35:43,369 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:35:43,369 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:35:43,549 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:35:43] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:35:44,104 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:35:44] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:35:44,686 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:35:44,687 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:35:44,687 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:35:44,688 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.12s -2025-10-14 13:35:45,137 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:35:45] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:35:46,972 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:35:46,973 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:35:46,974 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:35:47,107 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:35:47,107 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:35:47,108 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:35:47,137 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:35:47] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:35:47,286 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:35:47] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:35:47,292 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:35:47] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:35:48,406 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:35:48,406 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:35:48,407 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:35:48,407 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.11s -2025-10-14 13:35:48,850 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:35:48] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:35:48,866 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:35:48] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-10-14 13:35:48,871 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:35:48] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-10-14 13:35:48,872 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:35:48] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-10-14 13:35:48,872 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:35:48] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-10-14 13:35:53,440 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-14 13:36:01,543 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-14 13:36:24,694 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:36:30,601 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:30] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:36:31,031 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:31] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:36:31,730 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:31] "GET / HTTP/1.1" 200 - -2025-10-14 13:36:31,752 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:31] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-14 13:36:31,752 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:31] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-14 13:36:31,753 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:31] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-14 13:36:31,762 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:31] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-14 13:36:31,776 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:31] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:36:32,401 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:32] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:36:52,843 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:52] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:36:52,845 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:52] "GET /api/system/info HTTP/1.1" 200 - -2025-10-14 13:36:52,850 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:52] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:36:52,851 - websockets.server - INFO - connection open -2025-10-14 13:36:52,852 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:36:52,853 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:52] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-14 13:36:53,304 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:53] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:36:53,367 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:53] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:36:53,787 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:53] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:36:53,813 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:53] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:36:54,039 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:54] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-14 13:36:54,788 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:54] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:36:55,209 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:36:55,210 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:36:55,210 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:36:55,371 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:55] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:36:55,385 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:55] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:36:55,496 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:55] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:36:55,902 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:36:55,903 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:36:55,904 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:36:56,108 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:56] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:36:56,687 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:36:56,688 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:36:56,689 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:36:56,689 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.19s -2025-10-14 13:36:57,153 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:57] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:36:57,192 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:57] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:36:57,289 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:36:57,291 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:36:57,292 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:36:57,292 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.18s -2025-10-14 13:36:57,654 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:36:57,655 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:36:57,656 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:36:57,765 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:57] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:36:57,832 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:57] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:36:58,372 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:36:58,373 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:36:58,374 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:36:58,579 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:58] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:36:58,740 - websockets.server - INFO - connection open -2025-10-14 13:36:58,741 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:36:59,886 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:36:59] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:36:59,949 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:36:59,958 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:36:59,958 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:36:59,962 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.19s -2025-10-14 13:37:00,444 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:00] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:37:00,891 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:37:00,892 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:37:00,892 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:37:01,068 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:01] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:37:04,743 - websockets.server - INFO - connection open -2025-10-14 13:37:04,743 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:37:10,744 - websockets.server - INFO - connection open -2025-10-14 13:37:10,744 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:37:16,739 - websockets.server - INFO - connection open -2025-10-14 13:37:16,740 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:37:22,729 - websockets.server - INFO - connection open -2025-10-14 13:37:22,730 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:37:23,798 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:23] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:37:24,505 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:24] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:37:24,903 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:24] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:37:24,961 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:37:25,492 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:37:25,492 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:37:25,493 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:37:25,694 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:25] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:37:25,706 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:25] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:37:26,139 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:37:26,139 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:37:26,140 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:37:26,305 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:26] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:37:26,755 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:37:26,755 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:37:26,755 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:37:26,928 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:26] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:37:28,734 - websockets.server - INFO - connection open -2025-10-14 13:37:28,735 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:37:34,736 - websockets.server - INFO - connection open -2025-10-14 13:37:34,737 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:37:34,914 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:34] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:37:40,735 - websockets.server - INFO - connection open -2025-10-14 13:37:40,736 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - # 添加CORS支持 - ^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:37:46,731 - websockets.server - INFO - connection open -2025-10-14 13:37:46,732 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - # 添加CORS支持 - ^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:37:50,392 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-14 13:37:50,894 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-14 13:37:52,426 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-14 13:37:52,735 - websockets.server - INFO - connection open -2025-10-14 13:37:52,736 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - # 添加CORS支持 - ^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:37:52,928 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-14 13:37:53,753 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:53] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:37:54,261 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:54] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:37:55,036 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:55] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:37:55,728 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:55] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:37:56,177 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:37:56,178 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:37:56,179 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:37:56,358 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:56] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:37:56,395 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:56] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:37:57,769 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:37:57,770 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:37:57,770 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:37:57,771 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.35s -2025-10-14 13:37:58,241 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:58] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:37:58,728 - websockets.server - INFO - connection open -2025-10-14 13:37:58,729 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - # 添加CORS支持 - ^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:37:59,368 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:37:59,369 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:37:59,370 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:37:59,371 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.12s -2025-10-14 13:37:59,830 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:37:59] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:38:04,726 - websockets.server - INFO - connection open -2025-10-14 13:38:04,727 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - # 添加CORS支持 - ^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:38:09,168 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:38:09,169 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:38:09,169 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:38:09,332 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:38:09] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:38:09,778 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:38:09,778 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:38:09,779 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:38:09,955 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:38:09] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:38:10,725 - websockets.server - INFO - connection open -2025-10-14 13:38:10,726 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - # 添加CORS支持 - ^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:38:14,843 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:38:14] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:38:16,736 - websockets.server - INFO - connection open -2025-10-14 13:38:16,737 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - # 添加CORS支持 - ^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:38:22,729 - websockets.server - INFO - connection open -2025-10-14 13:38:22,731 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - # 添加CORS支持 - ^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:38:23,727 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:38:23] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:38:24,167 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:38:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:38:24,544 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:38:24] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:38:24,885 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:38:24] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:38:26,017 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:38:26,018 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:38:26,019 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:38:26,019 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.13s -2025-10-14 13:38:26,469 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:38:26] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:38:26,491 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:38:26] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:38:26,912 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:38:26,913 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:38:26,914 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:38:27,077 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:38:27] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:38:27,525 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:38:27,526 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:38:27,526 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:38:27,706 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:38:27] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:38:28,731 - websockets.server - INFO - connection open -2025-10-14 13:38:28,732 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - """运行服务器""" - ^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:38:34,732 - websockets.server - INFO - connection open -2025-10-14 13:38:34,733 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "C:\Users\00061074\AppData\Local\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 243, in handle_client_with_cors - """运行服务器""" - ^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-14 13:40:27,198 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-14 13:40:27,199 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-14 13:40:29,428 - src.core.database - INFO - 数据库初始化成功 -2025-10-14 13:40:30,676 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-14 13:40:30,688 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-14 13:40:30,754 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-14 13:40:30,755 - werkzeug - INFO - Press CTRL+C to quit -2025-10-14 13:40:30,925 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:40:31,102 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-14 13:40:31,117 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-14 13:40:31,118 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-14 13:40:32,711 - websockets.server - INFO - connection open -2025-10-14 13:40:32,712 - src.web.websocket_server - INFO - 客户端连接: ('::1', 52043, 0, 0) -2025-10-14 13:40:34,187 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:40:34] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:40:38,781 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-14 13:42:20,818 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-14 13:42:20,819 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-14 13:42:25,783 - src.core.database - INFO - 数据库初始化成功 -2025-10-14 13:42:27,058 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-14 13:42:27,071 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-14 13:42:27,130 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-14 13:42:27,130 - werkzeug - INFO - Press CTRL+C to quit -2025-10-14 13:42:27,551 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:42:28,076 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-14 13:42:28,093 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-14 13:42:28,093 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-14 13:42:28,991 - websockets.server - INFO - connection open -2025-10-14 13:42:28,991 - src.web.websocket_server - INFO - 客户端连接: ('::1', 52282, 0, 0) -2025-10-14 13:51:43,666 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-14 13:51:43,667 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-14 13:51:49,409 - src.core.database - INFO - 数据库初始化成功 -2025-10-14 13:51:50,522 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-14 13:51:50,533 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-14 13:51:50,591 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-14 13:51:50,591 - werkzeug - INFO - Press CTRL+C to quit -2025-10-14 13:51:51,073 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:51:51,558 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-14 13:51:51,578 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-14 13:51:51,579 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-14 13:51:53,359 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:53] "GET / HTTP/1.1" 200 - -2025-10-14 13:51:53,452 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:53] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-14 13:51:53,457 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:53] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-14 13:51:53,458 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:53] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-14 13:51:53,464 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:53] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-14 13:51:53,739 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:53] "GET /api/system/info HTTP/1.1" 200 - -2025-10-14 13:51:53,764 - websockets.server - INFO - connection open -2025-10-14 13:51:53,765 - src.web.websocket_server - INFO - 客户端连接: ('::1', 52870, 0, 0) -2025-10-14 13:51:53,768 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:53] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-14 13:51:54,223 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:51:54,344 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:51:54,409 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:51:54,586 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-14 13:51:54,588 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-14 13:51:54,590 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-14 13:51:54,591 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-14 13:51:54,592 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-14 13:51:54,594 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-14 13:51:54,595 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-14 13:51:54,596 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-14 13:51:54,598 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-14 13:51:54,602 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-14 13:51:54,604 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-14 13:51:54,605 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-14 13:51:54,606 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-14 13:51:54,607 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-14 13:51:54,609 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-14 13:51:54,610 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-14 13:51:54,611 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-14 13:51:54,613 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-14 13:51:54,615 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-14 13:51:54,619 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-14 13:51:54,621 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-14 13:51:54,623 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-14 13:51:54,624 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-14 13:51:54,641 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:54] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:51:54,674 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:51:54,705 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-10-14 13:51:54,706 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:54] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:51:54,709 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:54] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:51:54,793 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:54] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:51:54,842 - src.main - INFO - TSP助手初始化完成 -2025-10-14 13:51:54,843 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-14 13:51:55,064 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:55] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-14 13:51:55,097 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:55] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:51:55,374 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:51:55,699 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:55] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:51:55,735 - websockets.server - INFO - connection open -2025-10-14 13:51:55,735 - src.web.websocket_server - INFO - 客户端连接: ('::1', 52884, 0, 0) -2025-10-14 13:51:56,025 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:51:56,026 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:56] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:51:56,203 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:51:56,204 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:51:56,204 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:51:56,206 - src.main - INFO - TSP助手初始化完成 -2025-10-14 13:51:56,206 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-14 13:51:56,371 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:56] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:51:56,380 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:56] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:51:56,420 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:56] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:51:56,612 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:51:56,869 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:51:56,869 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:51:56,870 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:51:56,907 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:51:57,003 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:51:57,036 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:57] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:51:57,215 - src.main - INFO - TSP助手初始化完成 -2025-10-14 13:51:57,216 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-10-14 13:51:57,217 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-10-14 13:51:57,217 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-10-14 13:51:57,218 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-10-14 13:51:57,218 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-10-14 13:51:57,219 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-10-14 13:51:57,220 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-10-14 13:51:57,220 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-10-14 13:51:57,221 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-10-14 13:51:57,221 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-10-14 13:51:57,222 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-10-14 13:51:57,222 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-10-14 13:51:57,225 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-14 13:51:57,225 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-10-14 13:51:57,225 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-10-14 13:51:57,226 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-10-14 13:51:57,226 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:57] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-14 13:51:57,490 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:51:57,490 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:51:57,491 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:51:57,552 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:51:57,552 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:51:57,553 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:51:57,553 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.17s -2025-10-14 13:51:57,562 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 13:51:57,674 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:57] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:51:57,729 - src.main - INFO - TSP助手初始化完成 -2025-10-14 13:51:57,729 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-10-14 13:51:57,730 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-10-14 13:51:57,730 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-10-14 13:51:57,730 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-10-14 13:51:57,731 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-10-14 13:51:57,731 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-10-14 13:51:57,732 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-10-14 13:51:57,732 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-10-14 13:51:57,733 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-10-14 13:51:57,733 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-10-14 13:51:57,734 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-10-14 13:51:57,734 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-10-14 13:51:57,736 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-14 13:51:57,736 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-10-14 13:51:57,736 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-10-14 13:51:57,737 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-10-14 13:51:57,738 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:57] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-14 13:51:58,018 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:58] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:51:58,029 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:58] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:51:58,790 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:58] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-14 13:51:59,186 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:59] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:51:59,244 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:51:59,244 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:51:59,245 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:51:59,245 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.21s -2025-10-14 13:51:59,727 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:59] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:51:59,845 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 13:51:59,846 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 13:51:59,961 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:51:59] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-14 13:52:00,174 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:52:00,175 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:52:00,175 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:52:00,190 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:52:00,190 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:52:00,190 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:52:00,334 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:00] "GET /api/workorders/65 HTTP/1.1" 200 - -2025-10-14 13:52:00,352 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:00] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:52:00,372 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:00] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:52:01,208 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 13:52:01,208 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 13:52:01,589 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:52:01,590 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:52:01,590 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:52:01,590 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.21s -2025-10-14 13:52:02,076 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:52:02,226 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 13:52:02,226 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 13:52:02,736 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 13:52:02,736 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 13:52:22,741 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:52:23,157 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:52:23,193 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:23] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:52:23,578 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:23] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:52:24,322 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:52:24,761 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:52:24,761 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:52:24,762 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:52:24,931 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:24] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:52:24,945 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:24] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:52:25,375 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:52:25,376 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:52:25,376 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:52:25,540 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:25] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:52:26,001 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:52:26,001 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:52:26,001 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:52:26,183 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:26] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:52:27,269 - src.web.websocket_server - INFO - 客户端断开: ('::1', 52870, 0, 0) -2025-10-14 13:52:27,270 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:27] "GET /workorder_detail.html HTTP/1.1" 404 - -2025-10-14 13:52:31,046 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:31] "GET /workorder_detail HTTP/1.1" 404 - -2025-10-14 13:52:35,876 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:35] "GET / HTTP/1.1" 200 - -2025-10-14 13:52:35,899 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:35] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-14 13:52:35,900 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:35] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-14 13:52:35,900 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:35] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-14 13:52:35,908 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:35] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-14 13:52:36,112 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:36] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:52:36,119 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:36] "GET /api/system/info HTTP/1.1" 200 - -2025-10-14 13:52:36,124 - websockets.server - INFO - connection open -2025-10-14 13:52:36,126 - src.web.websocket_server - INFO - 客户端连接: ('::1', 52969, 0, 0) -2025-10-14 13:52:36,127 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:36] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-14 13:52:36,547 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:36] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-14 13:52:36,553 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:36] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-14 13:52:36,645 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:36] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:52:37,321 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:37] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:52:37,987 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:37] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:52:38,436 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:52:38,437 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:52:38,437 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:52:38,608 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:38] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:52:38,622 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:38] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:52:39,150 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:52:39,151 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:52:39,151 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:52:39,360 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:39] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:52:39,833 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:52:39,834 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:52:39,834 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:52:40,020 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:40] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:52:40,318 - src.core.query_optimizer - WARNING - 慢查询检测: get_conversations_paginated 耗时 1.22s -2025-10-14 13:52:41,070 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:41] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-14 13:52:41,571 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:52:41,572 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:52:41,572 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:52:41,746 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:41] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:52:42,207 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:52:42,208 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:52:42,208 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:52:42,300 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:42] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:52:42,388 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:42] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:52:43,684 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:43] "GET /api/conversations/63 HTTP/1.1" 200 - -2025-10-14 13:52:57,138 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:52:57] "GET /api/conversations/62 HTTP/1.1" 200 - -2025-10-14 13:53:00,534 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:00] "POST /api/system-optimizer/optimize-memory HTTP/1.1" 200 - -2025-10-14 13:53:02,835 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:02] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-10-14 13:53:02,841 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:02] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-10-14 13:53:02,841 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:02] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-10-14 13:53:02,842 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:02] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-10-14 13:53:04,975 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:04] "GET /api/token-monitor/stats HTTP/1.1" 200 - -2025-10-14 13:53:06,210 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:06] "GET /api/token-monitor/records HTTP/1.1" 200 - -2025-10-14 13:53:06,348 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:06] "GET /api/ai-monitor/stats HTTP/1.1" 200 - -2025-10-14 13:53:06,782 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:06] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - -2025-10-14 13:53:06,801 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:06] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - -2025-10-14 13:53:06,874 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:06] "GET /api/token-monitor/stats HTTP/1.1" 200 - -2025-10-14 13:53:07,232 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:07] "GET /api/token-monitor/records HTTP/1.1" 200 - -2025-10-14 13:53:07,360 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:07] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - -2025-10-14 13:53:07,699 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:07] "GET /api/ai-monitor/stats HTTP/1.1" 200 - -2025-10-14 13:53:08,053 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:08] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - -2025-10-14 13:53:08,689 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:08] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - -2025-10-14 13:53:08,889 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:08] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - -2025-10-14 13:53:09,017 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:09] "GET /api/token-monitor/chart HTTP/1.1" 200 - -2025-10-14 13:53:11,377 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:11] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-10-14 13:53:11,383 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:11] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-10-14 13:53:11,384 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:11] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-10-14 13:53:11,384 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:11] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-10-14 13:53:13,566 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:13] "GET /api/token-monitor/chart HTTP/1.1" 200 - -2025-10-14 13:53:18,053 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:18] "POST /api/system-optimizer/clear-cache HTTP/1.1" 200 - -2025-10-14 13:53:19,816 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:19] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-10-14 13:53:19,821 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:19] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-10-14 13:53:19,822 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:19] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-10-14 13:53:19,823 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:19] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-10-14 13:53:21,155 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:53:21,155 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:53:21,156 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:53:21,340 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:21] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:53:21,554 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:21] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:53:21,815 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:53:21,816 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:53:21,817 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:53:21,818 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.21s -2025-10-14 13:53:22,302 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:22] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:53:22,729 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:53:23,140 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:23] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:53:23,190 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:53:23,191 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:53:23,191 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:53:23,234 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:53:23,370 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:23] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:53:23,472 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:53:23,473 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:53:23,473 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:53:23,474 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.17s -2025-10-14 13:53:23,654 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:53:23,935 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:23] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:53:24,453 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:53:24,454 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:53:24,454 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:53:24,665 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:24] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:53:24,672 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:24] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:53:25,207 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:53:25,210 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:53:25,210 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:53:25,376 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:25] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:53:25,388 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:25] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:53:25,825 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:53:25,825 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:53:25,826 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:53:25,998 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:25] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:53:27,227 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:53:27,228 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:53:27,228 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:53:27,228 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.23s -2025-10-14 13:53:27,700 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:27] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:53:27,709 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:27] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:53:34,144 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:34] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:53:34,560 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:34] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:53:34,867 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:34] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:53:35,613 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:35] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:53:36,123 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:36] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:53:36,156 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:53:36,157 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:53:36,157 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:53:36,367 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:36] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:53:36,381 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:36] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:53:36,562 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:36] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:53:36,589 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:36] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:53:36,843 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:36] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:53:37,377 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:53:37,378 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:53:37,378 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:53:37,559 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:53:37,560 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:53:37,561 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:53:37,562 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.17s -2025-10-14 13:53:37,587 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:37] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:53:37,612 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:37] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:53:37,930 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:37] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-14 13:53:37,932 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:37] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-14 13:53:38,028 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:38] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:53:38,478 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:53:38,479 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:53:38,479 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:53:38,494 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:53:38,494 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:53:38,494 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:53:38,657 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:38] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:53:38,677 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:38] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:53:39,218 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:53:39,220 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:53:39,220 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:53:39,430 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:39] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:53:41,429 - src.agent.tool_manager - ERROR - 工具 'search_knowledge' 执行失败: ToolManager._search_knowledge_tool() missing 1 required positional argument: 'query' -2025-10-14 13:53:41,431 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:41] "POST /api/agent/tools/execute HTTP/1.1" 200 - -2025-10-14 13:53:42,607 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:53:42,608 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:53:42,608 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:53:42,608 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.16s -2025-10-14 13:53:43,079 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:43] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:53:43,508 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:53:43,509 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:53:43,509 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:53:43,674 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:53:43] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:54:02,349 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:54:06,133 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:06] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-14 13:54:06,135 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:06] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-14 13:54:22,730 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:54:23,148 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:23] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:54:23,439 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:23] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:54:23,891 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:54:23,891 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:54:23,892 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:54:23,892 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.16s -2025-10-14 13:54:23,932 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:54:24,349 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:54:24,366 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:24] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:54:24,816 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:54:24,817 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:54:24,817 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:54:25,001 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:25] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:54:25,034 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:25] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:54:25,567 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:54:25,568 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:54:25,568 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:54:25,583 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:54:25,584 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:54:25,584 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:54:25,585 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.22s -2025-10-14 13:54:25,775 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:25] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:54:26,068 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:26] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:54:26,535 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:54:26,536 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:54:26,536 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:54:26,720 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:26] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:54:31,553 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:31] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:54:36,149 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:36] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-14 13:54:36,150 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:36] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-14 13:54:46,598 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:54:46,599 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:54:46,599 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:54:46,773 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:46] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:54:47,315 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:54:47,316 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:54:47,316 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:54:47,528 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:54:47] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:55:06,143 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:06] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-14 13:55:06,143 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:06] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-14 13:55:11,579 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:11] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:55:22,726 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:55:23,418 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:23] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:55:23,893 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:23] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:55:23,924 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:55:24,349 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:55:24,818 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:55:24,819 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:55:24,819 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:55:25,003 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:25] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:55:25,016 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:25] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:55:26,192 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:55:26,192 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:55:26,193 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:55:26,193 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.17s -2025-10-14 13:55:26,658 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:26] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:55:27,187 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:55:27,188 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:55:27,188 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:55:27,391 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:27] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:55:36,116 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:36] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-14 13:55:36,117 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:36] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-14 13:55:51,879 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:55:51,879 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:55:51,880 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:55:52,059 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:52] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:55:53,278 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:55:53,279 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:55:53,279 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:55:53,280 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.21s -2025-10-14 13:55:53,767 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:53] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:55:57,338 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:55:57] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:56:06,132 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:06] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-14 13:56:06,133 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:06] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-14 13:56:20,894 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:20] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-14 13:56:22,661 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:22] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-14 13:56:22,738 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:56:23,188 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:56:23,403 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:23] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:56:23,623 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:56:23,915 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:23] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:56:23,990 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:56:23,990 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:56:23,992 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:56:23,992 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.26s -2025-10-14 13:56:24,400 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:56:24,401 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:56:24,401 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:56:24,475 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:24] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:56:24,585 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:24] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:56:24,597 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:24] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:56:24,905 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:56:24,906 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:56:24,906 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:56:25,076 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:25] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:56:25,780 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:56:25,780 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:56:25,781 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:56:25,782 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.18s -2025-10-14 13:56:26,251 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:26] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:56:27,022 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:56:27,022 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:56:27,023 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:56:27,206 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:27] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:56:27,949 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:27] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-14 13:56:31,124 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:31] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-14 13:56:36,593 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:36] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:56:38,413 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:38] "GET /api/workorders/48 HTTP/1.1" 200 - -2025-10-14 13:56:41,001 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'TR559 - HU troubles' 返回 0 个结果 -2025-10-14 13:56:43,523 - src.core.llm_client - INFO - API请求成功 -2025-10-14 13:56:44,525 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:44] "POST /api/workorders/48/ai-suggestion HTTP/1.1" 200 - -2025-10-14 13:56:51,588 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:56:51,589 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:56:51,589 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:56:51,765 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:51] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:56:52,236 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:56:52,236 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:56:52,236 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:56:52,419 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:56:52] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:57:04,256 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'TR559 - HU troubles' 返回 0 个结果 -2025-10-14 13:57:06,734 - src.core.llm_client - INFO - API请求成功 -2025-10-14 13:57:07,697 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:57:07] "POST /api/workorders/48/ai-suggestion HTTP/1.1" 200 - -2025-10-14 13:57:11,642 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:57:11] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:57:22,755 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:57:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:57:23,179 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:57:23] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:57:23,222 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:57:23,223 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:57:23,223 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:57:23,405 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:57:23] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:57:23,602 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:57:23] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:57:23,939 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:57:23,940 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:57:23,941 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:57:23,942 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:57:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:57:24,118 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:57:24] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:57:24,370 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:57:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:57:24,849 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:57:24,849 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:57:24,850 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:57:25,028 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:57:25] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:57:25,041 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:57:25] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:57:25,563 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:57:25,564 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:57:25,564 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:57:25,775 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:57:25] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:57:26,988 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:57:26,988 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:57:26,989 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:57:26,989 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.21s -2025-10-14 13:57:27,467 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:57:27] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:57:52,337 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:57:52] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:57:56,653 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:57:56,654 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:57:56,654 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:57:56,830 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:57:56] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:57:57,251 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:57:57,252 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:57:57,252 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:57:57,419 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:57:57] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:58:12,514 - src.utils.semantic_similarity - INFO - 正在加载语义相似度模型: all-MiniLM-L6-v2 -2025-10-14 13:58:12,517 - sentence_transformers.SentenceTransformer - INFO - Use pytorch device_name: cpu -2025-10-14 13:58:12,518 - sentence_transformers.SentenceTransformer - INFO - Load pretrained SentenceTransformer: all-MiniLM-L6-v2 -2025-10-14 13:58:12,608 - src.utils.semantic_similarity - INFO - 正在加载语义相似度模型: all-MiniLM-L6-v2 -2025-10-14 13:58:12,610 - sentence_transformers.SentenceTransformer - INFO - Use pytorch device_name: cpu -2025-10-14 13:58:12,611 - sentence_transformers.SentenceTransformer - INFO - Load pretrained SentenceTransformer: all-MiniLM-L6-v2 -2025-10-14 13:58:22,533 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: e20116b5-a911-475c-88a0-e9f3d683c06a)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 13:58:22,534 - huggingface_hub.utils._http - WARNING - Retrying in 1s [Retry 1/5]. -2025-10-14 13:58:22,624 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: db4bfb4a-40e1-47f5-b66c-efd74aaff43b)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 13:58:22,625 - huggingface_hub.utils._http - WARNING - Retrying in 1s [Retry 1/5]. -2025-10-14 13:58:22,728 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:58:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:58:23,136 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:58:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:58:23,254 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:58:23] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:58:23,559 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:58:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:58:24,599 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:58:24] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:58:25,027 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:58:25,027 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:58:25,028 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:58:25,200 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:58:25] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:58:25,211 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:58:25] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:58:26,389 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:58:26,389 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:58:26,389 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:58:26,389 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.17s -2025-10-14 13:58:26,857 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:58:26] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:58:27,281 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:58:27,282 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:58:27,282 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:58:27,449 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:58:27] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:58:31,651 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:58:31] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:58:33,546 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: fc1b9546-9303-4c15-a43e-158b33219603)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 13:58:33,548 - huggingface_hub.utils._http - WARNING - Retrying in 2s [Retry 2/5]. -2025-10-14 13:58:33,637 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 2a7fdae6-715f-4243-b91d-c24cbc22308a)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 13:58:33,637 - huggingface_hub.utils._http - WARNING - Retrying in 2s [Retry 2/5]. -2025-10-14 13:58:45,560 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: c3ddbabe-6b92-42a1-b0bb-d7fdb75439e5)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 13:58:45,561 - huggingface_hub.utils._http - WARNING - Retrying in 4s [Retry 3/5]. -2025-10-14 13:58:45,651 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: e319c4fd-ed8a-48a9-b43c-1364c46ce457)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 13:58:45,652 - huggingface_hub.utils._http - WARNING - Retrying in 4s [Retry 3/5]. -2025-10-14 13:58:57,320 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:58:57,321 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:58:57,321 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:58:57,322 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.17s -2025-10-14 13:58:57,797 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:58:57] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:58:58,328 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:58:58,329 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:58:58,329 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:58:58,536 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:58:58] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:58:59,573 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: a932aed1-f302-4263-aecf-4cd29d03f78d)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 13:58:59,573 - huggingface_hub.utils._http - WARNING - Retrying in 8s [Retry 4/5]. -2025-10-14 13:58:59,665 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: c3cd5a4e-42a2-4f0c-ae1e-94ee1547014f)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 13:58:59,666 - huggingface_hub.utils._http - WARNING - Retrying in 8s [Retry 4/5]. -2025-10-14 13:59:12,347 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:59:12] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:59:17,589 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 7d45c66d-1ef3-404a-91f4-24831f9b87a4)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 13:59:17,590 - huggingface_hub.utils._http - WARNING - Retrying in 8s [Retry 5/5]. -2025-10-14 13:59:17,680 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: ce415f0b-dcc3-472e-9918-ffce6e5d7df6)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 13:59:17,681 - huggingface_hub.utils._http - WARNING - Retrying in 8s [Retry 5/5]. -2025-10-14 13:59:22,747 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:59:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 13:59:23,170 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:59:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:59:23,279 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:59:23,279 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:59:23,279 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:59:23,499 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:59:23] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:59:23,877 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:59:23] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 13:59:23,968 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:59:23] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 13:59:24,030 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:59:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:59:24,313 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:59:24,314 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:59:24,315 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:59:24,490 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:59:24] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:59:25,238 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:59:25,239 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:59:25,239 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:59:25,240 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.21s -2025-10-14 13:59:25,724 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:59:25] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 13:59:25,736 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:59:25] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 13:59:26,277 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:59:26,278 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:59:26,278 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:59:26,483 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:59:26] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 13:59:26,920 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 13:59:26,920 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 13:59:26,921 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 13:59:27,090 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:59:27] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 13:59:35,607 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: a9cf9b9d-e397-438a-a22f-8c67b44a2652)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 13:59:35,607 - sentence_transformers.SentenceTransformer - WARNING - No sentence-transformers model found with name sentence-transformers/all-MiniLM-L6-v2. Creating a new one with mean pooling. -2025-10-14 13:59:35,697 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: ec8be71f-2064-4128-8ccc-957fe2c036aa)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 13:59:35,698 - sentence_transformers.SentenceTransformer - WARNING - No sentence-transformers model found with name sentence-transformers/all-MiniLM-L6-v2. Creating a new one with mean pooling. -2025-10-14 13:59:45,611 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 3fc92cb7-4536-4198-b0c7-4837f05f5cfc)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json -2025-10-14 13:59:45,612 - huggingface_hub.utils._http - WARNING - Retrying in 1s [Retry 1/5]. -2025-10-14 13:59:45,716 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 3a009851-237d-4046-96ce-18e9cdf14ac2)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json -2025-10-14 13:59:45,717 - huggingface_hub.utils._http - WARNING - Retrying in 1s [Retry 1/5]. -2025-10-14 13:59:47,311 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 13:59:47] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 13:59:56,620 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: d81b4bed-f1f0-40a7-98a2-fd90760068a9)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json -2025-10-14 13:59:56,621 - huggingface_hub.utils._http - WARNING - Retrying in 2s [Retry 2/5]. -2025-10-14 13:59:56,727 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 5d396289-a5fb-48f8-b98c-6ddbc6314d44)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json -2025-10-14 13:59:56,727 - huggingface_hub.utils._http - WARNING - Retrying in 2s [Retry 2/5]. -2025-10-14 14:00:02,336 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:00:02,337 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:00:02,337 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:00:02,337 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.20s -2025-10-14 14:00:02,815 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:00:02] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 14:00:05,306 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:00:05,306 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:00:05,306 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:00:05,307 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.49s -2025-10-14 14:00:05,777 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:00:05] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 14:00:08,624 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 2beb19f4-c27c-4193-84e6-d923b844a5a0)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json -2025-10-14 14:00:08,625 - huggingface_hub.utils._http - WARNING - Retrying in 4s [Retry 3/5]. -2025-10-14 14:00:08,731 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: f42a3667-001e-49ba-9b2d-be9dd21a9e48)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json -2025-10-14 14:00:08,732 - huggingface_hub.utils._http - WARNING - Retrying in 4s [Retry 3/5]. -2025-10-14 14:00:22,636 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: d40f8949-2421-4407-9971-26f728436538)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json -2025-10-14 14:00:22,636 - huggingface_hub.utils._http - WARNING - Retrying in 8s [Retry 4/5]. -2025-10-14 14:00:22,728 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:00:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 14:00:22,742 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: b920c455-f1f9-4981-94cc-97be0a402066)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json -2025-10-14 14:00:22,743 - huggingface_hub.utils._http - WARNING - Retrying in 8s [Retry 4/5]. -2025-10-14 14:00:23,161 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:00:23] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 14:00:23,247 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:00:23,248 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:00:23,249 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:00:23,457 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:00:23] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 14:00:23,887 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:00:23,887 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:00:23,887 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:00:23,889 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:00:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 14:00:23,889 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:00:23] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 14:00:24,101 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:00:24] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 14:00:25,062 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:00:25] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 14:00:25,506 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:00:25,506 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:00:25,507 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:00:25,718 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:00:25] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 14:00:25,737 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:00:25] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 14:00:26,276 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:00:26,276 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:00:26,276 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:00:26,487 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:00:26] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 14:00:27,662 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:00:27,662 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:00:27,663 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:00:27,663 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.17s -2025-10-14 14:00:28,131 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:00:28] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 14:00:31,501 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:00:31] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 14:00:38,880 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:00:38] "GET /api/workorders/50 HTTP/1.1" 200 - -2025-10-14 14:00:40,651 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 92b5547f-c234-465f-b582-74adcb667bfd)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json -2025-10-14 14:00:40,652 - huggingface_hub.utils._http - WARNING - Retrying in 8s [Retry 5/5]. -2025-10-14 14:00:40,757 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 66b9f7f3-9a7b-47f4-b2d9-819d19682b58)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json -2025-10-14 14:00:40,758 - huggingface_hub.utils._http - WARNING - Retrying in 8s [Retry 5/5]. -2025-10-14 14:00:41,602 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '示例工单 2' 返回 0 个结果 -2025-10-14 14:00:44,594 - src.core.llm_client - INFO - API请求成功 -2025-10-14 14:00:45,572 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:00:45] "POST /api/workorders/50/ai-suggestion HTTP/1.1" 200 - -2025-10-14 14:00:52,724 - src.utils.semantic_similarity - INFO - 正在加载语义相似度模型: all-MiniLM-L6-v2 -2025-10-14 14:00:52,728 - sentence_transformers.SentenceTransformer - INFO - Use pytorch device_name: cpu -2025-10-14 14:00:52,728 - sentence_transformers.SentenceTransformer - INFO - Load pretrained SentenceTransformer: all-MiniLM-L6-v2 -2025-10-14 14:00:58,658 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: dab4a970-c4f9-46c8-a1e8-2577446fcba0)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json -2025-10-14 14:00:58,764 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: d26f8a9f-206d-4a5a-ac4d-fd46bb6d4b98)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/adapter_config.json -2025-10-14 14:01:01,672 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:01:01,672 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:01:01,672 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:01:01,875 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:01:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 14:01:02,733 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: f9b0cbb7-496e-4923-b9f6-7644bd216645)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 14:01:02,734 - huggingface_hub.utils._http - WARNING - Retrying in 1s [Retry 1/5]. -2025-10-14 14:01:03,062 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:01:03,062 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:01:03,063 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:01:03,063 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.18s -2025-10-14 14:01:03,531 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:01:03] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 14:01:08,675 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 85b429c0-36a0-4db2-8178-3b0b80ab0079)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json -2025-10-14 14:01:08,675 - huggingface_hub.utils._http - WARNING - Retrying in 1s [Retry 1/5]. -2025-10-14 14:01:08,782 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: c0388cf0-644f-4f28-a987-ad2cbdf4438e)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json -2025-10-14 14:01:08,783 - huggingface_hub.utils._http - WARNING - Retrying in 1s [Retry 1/5]. -2025-10-14 14:01:12,341 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:01:12] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 14:01:13,749 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: c44bbf71-86ea-4e90-b085-d2687dd33ff9)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 14:01:13,750 - huggingface_hub.utils._http - WARNING - Retrying in 2s [Retry 2/5]. -2025-10-14 14:01:19,686 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 0a3e0f8f-dbd3-4d14-bc18-36d8ad2848de)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json -2025-10-14 14:01:19,687 - huggingface_hub.utils._http - WARNING - Retrying in 2s [Retry 2/5]. -2025-10-14 14:01:19,792 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 5da3d57a-4165-42b6-9eb6-79bd338012a6)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json -2025-10-14 14:01:19,793 - huggingface_hub.utils._http - WARNING - Retrying in 2s [Retry 2/5]. -2025-10-14 14:01:23,935 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:01:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 14:01:23,939 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:01:23] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 14:01:24,435 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:01:24,436 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:01:24,436 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:01:24,437 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.71s -2025-10-14 14:01:24,905 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:01:24] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 14:01:25,155 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:01:25] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 14:01:25,765 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 585c6a31-dda5-4a58-bb92-03502d9638d5)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 14:01:25,766 - huggingface_hub.utils._http - WARNING - Retrying in 4s [Retry 3/5]. -2025-10-14 14:01:25,955 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:01:25,955 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:01:25,956 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:01:26,172 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:01:26] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 14:01:26,364 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:01:26] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 14:01:26,818 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:01:26] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 14:01:27,362 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:01:27,362 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:01:27,363 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:01:27,577 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:01:27] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 14:01:27,602 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:01:27] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 14:01:28,801 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:01:28,801 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:01:28,802 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:01:28,802 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.18s -2025-10-14 14:01:29,270 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:01:29] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 14:01:29,810 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:01:29,811 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:01:29,811 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:01:30,019 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:01:30] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 14:01:31,699 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 57b810ac-2396-4c0a-9c64-228e02d344e0)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json -2025-10-14 14:01:31,700 - huggingface_hub.utils._http - WARNING - Retrying in 4s [Retry 3/5]. -2025-10-14 14:01:31,807 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 9e81a193-ac78-4373-9aff-0dfe66e7fa5d)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json -2025-10-14 14:01:31,807 - huggingface_hub.utils._http - WARNING - Retrying in 4s [Retry 3/5]. -2025-10-14 14:01:39,782 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 690b1814-fafb-42db-b7f3-6d5d6df595f0)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 14:01:39,783 - huggingface_hub.utils._http - WARNING - Retrying in 8s [Retry 4/5]. -2025-10-14 14:01:45,712 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 433e2039-4ff4-46e9-851e-806bc80dc2f6)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json -2025-10-14 14:01:45,713 - huggingface_hub.utils._http - WARNING - Retrying in 8s [Retry 4/5]. -2025-10-14 14:01:45,817 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 0c6afc0d-3675-4203-ba6c-342a5909f054)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json -2025-10-14 14:01:45,818 - huggingface_hub.utils._http - WARNING - Retrying in 8s [Retry 4/5]. -2025-10-14 14:01:52,359 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:01:52] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 14:01:57,792 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 11456073-bda5-4b89-9802-2b41d05cc641)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-14 14:01:57,793 - huggingface_hub.utils._http - WARNING - Retrying in 8s [Retry 5/5]. -2025-10-14 14:08:37,522 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-14 14:08:37,522 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-14 14:08:39,728 - src.core.database - INFO - 数据库初始化成功 -2025-10-14 14:08:40,932 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-14 14:08:40,954 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-14 14:08:41,018 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-14 14:08:41,018 - werkzeug - INFO - Press CTRL+C to quit -2025-10-14 14:08:41,187 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 14:08:41,363 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-14 14:08:41,381 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-14 14:08:41,382 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-14 14:08:41,524 - websockets.server - INFO - connection open -2025-10-14 14:08:41,526 - src.web.websocket_server - INFO - 客户端连接: ('127.0.0.1', 54532) -2025-10-14 14:08:50,909 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:08:50] "GET /api/workorders/65 HTTP/1.1" 200 - -2025-10-14 14:08:51,588 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:08:51] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 14:08:59,267 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:08:59] "GET /api/workorders/48 HTTP/1.1" 200 - -2025-10-14 14:09:01,606 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 14:09:01,947 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 14:09:02,109 - src.main - INFO - TSP助手初始化完成 -2025-10-14 14:09:02,109 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-14 14:09:02,283 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'TR559 - HU troubles' 返回 0 个结果 -2025-10-14 14:09:03,981 - src.core.llm_client - INFO - API请求成功 -2025-10-14 14:09:04,357 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:09:04] "POST /api/workorders/48/ai-suggestion HTTP/1.1" 200 - -2025-10-14 14:09:06,614 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:09:06,614 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:09:06,615 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:09:06,791 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:09:06] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 14:09:07,121 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 14:09:07,122 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-14 14:09:07,158 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:09:07,159 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:09:07,159 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:09:07,355 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:09:07] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 14:09:22,240 - src.utils.semantic_similarity - INFO - 正在加载语义相似度模型: paraphrase-multilingual-MiniLM-L12-v2 -2025-10-14 14:09:22,242 - sentence_transformers.SentenceTransformer - INFO - Use pytorch device_name: cpu -2025-10-14 14:09:22,243 - sentence_transformers.SentenceTransformer - INFO - Load pretrained SentenceTransformer: paraphrase-multilingual-MiniLM-L12-v2 -2025-10-14 14:09:23,148 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:09:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 14:09:23,657 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-14 14:09:23,823 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-10-14 14:09:23,824 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:09:23] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-14 14:09:23,842 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:09:23] "GET /api/workorders HTTP/1.1" 200 - -2025-10-14 14:09:23,996 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:09:23] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-14 14:09:24,263 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:09:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 14:09:24,701 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:09:24,702 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:09:24,702 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:09:24,863 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:09:24] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-14 14:09:24,901 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:09:24] "GET /api/settings HTTP/1.1" 200 - -2025-10-14 14:09:25,152 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:09:25,153 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:09:25,153 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:09:25,154 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 2.42s -2025-10-14 14:09:25,628 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:09:25] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 14:09:26,053 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:09:26,054 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:09:26,054 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:09:26,068 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:09:26,069 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:09:26,069 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:09:26,220 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:09:26] "GET /api/analytics HTTP/1.1" 200 - -2025-10-14 14:09:26,234 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:09:26] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 14:09:27,419 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-14 14:09:27,420 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-14 14:09:27,421 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-14 14:09:27,422 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.18s -2025-10-14 14:09:27,895 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:09:27] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-14 14:09:32,254 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: cbda6c19-4ee1-475d-bd96-26e2ba1cec18)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2/resolve/main/./modules.json -2025-10-14 14:09:32,257 - huggingface_hub.utils._http - WARNING - Retrying in 1s [Retry 1/5]. -2025-10-14 14:09:32,320 - werkzeug - INFO - 127.0.0.1 - - [14/Oct/2025 14:09:32] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-14 14:09:40,643 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-16 13:15:06,327 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-16 13:15:06,327 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-16 13:15:09,240 - src.core.database - INFO - 数据库初始化成功 -2025-10-16 13:15:09,255 - __main__ - ERROR - 启动失败: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject -2025-10-16 13:25:15,125 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-16 13:25:15,125 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-16 13:25:21,811 - src.core.database - INFO - 数据库初始化成功 -2025-10-16 13:25:24,904 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-16 13:25:24,946 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-16 13:25:25,063 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-16 13:25:25,064 - werkzeug - INFO - Press CTRL+C to quit -2025-10-16 13:25:25,531 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-16 13:25:26,022 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-16 13:25:26,063 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-16 13:25:26,064 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-16 13:25:43,645 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:25:43] "GET / HTTP/1.1" 200 - -2025-10-16 13:25:43,649 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:25:43] "GET / HTTP/1.1" 200 - -2025-10-16 13:25:43,800 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:25:43] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-16 13:25:43,802 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:25:43] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-16 13:25:43,806 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:25:43] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-16 13:25:43,809 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:25:43] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-16 13:25:43,811 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:25:43] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-16 13:25:43,812 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:25:43] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-10-16 13:25:43,826 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:25:43] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-16 13:25:43,836 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:25:43] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-16 13:26:04,802 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:04] "GET /api/system/info HTTP/1.1" 200 - -2025-10-16 13:26:04,855 - websockets.server - INFO - connection open -2025-10-16 13:26:04,856 - src.web.websocket_server - INFO - 客户端连接: ('::1', 55819, 0, 0) -2025-10-16 13:26:04,872 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:04] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-16 13:26:06,034 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:06] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:26:06,274 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-16 13:26:06,282 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-16 13:26:06,405 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-16 13:26:06,419 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:06] "GET /favicon.ico HTTP/1.1" 404 - -2025-10-16 13:26:06,595 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-10-16 13:26:06,596 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:06] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-16 13:26:06,729 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-16 13:26:06,817 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:06] "GET /api/workorders HTTP/1.1" 200 - -2025-10-16 13:26:06,934 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-16 13:26:06,956 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-16 13:26:06,985 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-16 13:26:07,000 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-16 13:26:07,019 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-16 13:26:07,022 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-16 13:26:07,028 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-16 13:26:07,031 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-16 13:26:07,046 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-16 13:26:07,066 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-16 13:26:07,075 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-16 13:26:07,163 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-16 13:26:07,251 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-16 13:26:07,254 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-16 13:26:07,266 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-16 13:26:07,331 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-16 13:26:07,370 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-16 13:26:07,389 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-16 13:26:07,393 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-16 13:26:07,403 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-16 13:26:07,411 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-16 13:26:07,416 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-16 13:26:07,418 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-16 13:26:07,432 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-16 13:26:07,438 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-16 13:26:08,306 - src.main - INFO - TSP助手初始化完成 -2025-10-16 13:26:08,306 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-16 13:26:08,499 - src.main - INFO - TSP助手初始化完成 -2025-10-16 13:26:08,500 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-16 13:26:09,208 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:09] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 13:26:09,790 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:09] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-16 13:26:10,621 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-16 13:26:10,623 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-16 13:26:10,624 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:26:10,757 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:10] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:26:10,903 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:10] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:26:10,949 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-16 13:26:10,950 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-16 13:26:11,109 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-16 13:26:11,111 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-16 13:26:11,112 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:26:11,113 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.21s -2025-10-16 13:26:11,501 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-16 13:26:11,591 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:11] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-16 13:26:11,619 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-16 13:26:11,757 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:11] "GET /api/settings HTTP/1.1" 200 - -2025-10-16 13:26:11,788 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-16 13:26:11,789 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-16 13:26:11,790 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:26:11,895 - src.main - INFO - TSP助手初始化完成 -2025-10-16 13:26:11,896 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-10-16 13:26:11,896 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-10-16 13:26:11,897 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-10-16 13:26:11,898 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-10-16 13:26:11,898 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-10-16 13:26:11,899 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-10-16 13:26:11,900 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-10-16 13:26:11,900 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-10-16 13:26:11,901 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-10-16 13:26:11,901 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-10-16 13:26:11,902 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-10-16 13:26:11,904 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-10-16 13:26:11,918 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-16 13:26:11,919 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-10-16 13:26:11,920 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-10-16 13:26:11,920 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-10-16 13:26:11,921 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:11] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-16 13:26:11,939 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:11] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-16 13:26:12,072 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:12] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:26:12,107 - src.main - INFO - TSP助手初始化完成 -2025-10-16 13:26:12,107 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-10-16 13:26:12,108 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-10-16 13:26:12,109 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-10-16 13:26:12,109 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-10-16 13:26:12,110 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-10-16 13:26:12,111 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-10-16 13:26:12,112 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-10-16 13:26:12,112 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-10-16 13:26:12,113 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-10-16 13:26:12,114 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-10-16 13:26:12,114 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-10-16 13:26:12,115 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-10-16 13:26:12,119 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-16 13:26:12,119 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-10-16 13:26:12,120 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-10-16 13:26:12,120 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-10-16 13:26:12,121 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:12] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-16 13:26:12,922 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:12] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-16 13:26:13,157 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 13:26:13,158 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-16 13:26:13,160 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-16 13:26:13,161 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:26:13,162 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.22s -2025-10-16 13:26:13,636 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:13] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:26:13,790 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 13:26:14,558 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 13:26:14,696 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 13:26:16,309 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-16 13:26:16,310 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-16 13:26:16,311 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:26:16,312 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.63s -2025-10-16 13:26:16,648 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:16] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:26:17,001 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 13:26:17,013 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 13:26:17,040 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 13:26:17,116 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 13:26:50,780 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:26:50] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:27:15,296 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-16 13:27:15,297 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-16 13:27:15,297 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:27:15,472 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:27:15] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:27:15,898 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-16 13:27:15,899 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-16 13:27:15,899 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:27:16,073 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:27:16] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:27:30,411 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:27:30] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:28:00,343 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:28:00] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:28:21,151 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-16 13:28:21,152 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-16 13:28:21,152 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:28:21,153 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.23s -2025-10-16 13:28:21,632 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:28:21] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:28:22,413 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-16 13:28:22,414 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-16 13:28:22,414 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:28:22,628 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:28:22] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:28:36,040 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:28:36] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:28:46,054 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-16 13:28:51,822 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-16 13:28:51,822 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-16 13:28:57,275 - src.core.database - INFO - 数据库初始化成功 -2025-10-16 13:28:58,825 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-16 13:28:58,846 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-16 13:28:58,939 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-16 13:28:58,940 - werkzeug - INFO - Press CTRL+C to quit -2025-10-16 13:28:59,438 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-16 13:28:59,886 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-16 13:28:59,918 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-16 13:28:59,918 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-16 13:29:00,090 - websockets.server - INFO - connection open -2025-10-16 13:29:00,091 - src.web.websocket_server - INFO - 客户端连接: ('::1', 55987, 0, 0) -2025-10-16 13:29:00,487 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-16 13:29:01,169 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-16 13:29:01,612 - src.main - INFO - TSP助手初始化完成 -2025-10-16 13:29:01,612 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-16 13:29:06,618 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 13:29:06,618 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 13:29:15,301 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:29:15] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:29:26,034 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:29:26,035 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.17s -2025-10-16 13:29:26,506 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:29:26] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:29:26,960 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:29:27,138 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:29:27] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:29:45,992 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:29:45] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:30:25,296 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:30:25] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:30:31,019 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:30:31,019 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.15s -2025-10-16 13:30:31,469 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:30:31] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:30:31,932 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:30:32,112 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:30:32] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:31:05,307 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:31:05] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:31:35,405 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:31:35,587 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:31:35] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:31:35,975 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:31:36,152 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:31:36] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:31:40,996 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:31:40] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:32:15,300 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:32:15] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:32:45,311 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:32:45,489 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:32:45] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:32:45,849 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:32:45,986 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:32:45] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:32:46,029 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:32:46] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:33:12,064 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.5% -2025-10-16 13:33:12,596 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.5% -2025-10-16 13:33:25,300 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:33:25] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:33:26,474 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:33:26] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:33:40,345 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:33:40] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:33:51,043 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:33:51,044 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.19s -2025-10-16 13:33:51,489 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:33:51] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:33:51,945 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:33:52,125 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:33:52] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:33:55,972 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:33:55] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:34:10,980 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:34:10] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:34:13,486 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.5% -2025-10-16 13:34:14,492 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.5% -2025-10-16 13:34:25,622 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:34:25] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:34:40,302 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:34:40] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:34:55,295 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:34:55] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:34:56,424 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:34:56,425 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.57s -2025-10-16 13:34:56,868 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:34:56] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:34:57,326 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-16 13:34:57,501 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:34:57] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:35:05,359 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:05] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:35:15,310 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:15] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:35:15,392 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.8% -2025-10-16 13:35:15,887 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.8% -2025-10-16 13:35:30,977 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:30] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:35:45,975 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:45] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:35:48,938 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-16 13:35:52,269 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-16 13:35:52,269 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-16 13:35:54,661 - src.core.database - INFO - 数据库初始化成功 -2025-10-16 13:35:55,666 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-16 13:35:55,678 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-16 13:35:55,734 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-16 13:35:55,734 - werkzeug - INFO - Press CTRL+C to quit -2025-10-16 13:35:56,068 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-16 13:35:56,086 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-16 13:35:56,087 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-16 13:35:56,212 - websockets.server - INFO - connection open -2025-10-16 13:35:56,213 - src.web.websocket_server - INFO - 客户端连接: ('::1', 56447, 0, 0) -2025-10-16 13:35:56,791 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:56] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:35:56,898 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:56] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:35:57,631 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:57] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:35:59,781 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:59] "GET / HTTP/1.1" 200 - -2025-10-16 13:35:59,783 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:59] "GET / HTTP/1.1" 200 - -2025-10-16 13:35:59,885 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:59] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-16 13:35:59,886 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:59] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-16 13:35:59,888 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:59] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-16 13:35:59,895 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:59] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-16 13:35:59,896 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:59] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-16 13:35:59,897 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:59] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-16 13:35:59,905 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:59] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-16 13:35:59,910 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:35:59] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-16 13:36:20,884 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:20] "GET /api/system/info HTTP/1.1" 200 - -2025-10-16 13:36:20,885 - websockets.server - INFO - connection open -2025-10-16 13:36:20,889 - src.web.websocket_server - INFO - 客户端连接: ('::1', 56490, 0, 0) -2025-10-16 13:36:21,189 - websockets.server - INFO - connection open -2025-10-16 13:36:21,190 - src.web.websocket_server - INFO - 客户端连接: ('::1', 56508, 0, 0) -2025-10-16 13:36:21,224 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-10-16 13:36:21,224 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:21] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-16 13:36:21,301 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:21] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:36:21,361 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:21] "GET /api/workorders HTTP/1.1" 200 - -2025-10-16 13:36:21,439 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:21] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-16 13:36:21,441 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:21] "GET /api/system/info HTTP/1.1" 200 - -2025-10-16 13:36:21,443 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:21] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-16 13:36:21,794 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-16 13:36:21,795 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-16 13:36:21,797 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-16 13:36:21,797 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-16 13:36:21,798 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-16 13:36:21,799 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-16 13:36:21,800 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-16 13:36:21,801 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-16 13:36:21,803 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-16 13:36:21,804 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-16 13:36:21,805 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-16 13:36:21,806 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-16 13:36:21,807 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-16 13:36:21,808 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-16 13:36:21,808 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-16 13:36:21,809 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-16 13:36:21,810 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-16 13:36:21,811 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-16 13:36:21,811 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-16 13:36:21,812 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-16 13:36:21,813 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-16 13:36:21,814 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-16 13:36:21,815 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-16 13:36:21,830 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:21] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-16 13:36:21,833 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:21] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-16 13:36:21,886 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:21] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:36:21,888 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:21] "GET /api/workorders HTTP/1.1" 200 - -2025-10-16 13:36:22,113 - src.main - INFO - TSP助手初始化完成 -2025-10-16 13:36:22,113 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-16 13:36:22,265 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:22] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 13:36:22,282 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:22] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-16 13:36:22,689 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:22] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 13:36:22,794 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:22] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-16 13:36:23,226 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:36:23,280 - src.main - INFO - TSP助手初始化完成 -2025-10-16 13:36:23,280 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-16 13:36:23,440 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:23] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-16 13:36:23,456 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:23] "GET /api/settings HTTP/1.1" 200 - -2025-10-16 13:36:23,563 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:23] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-16 13:36:24,019 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:36:24,181 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:24] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-16 13:36:24,219 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:24] "GET /api/settings HTTP/1.1" 200 - -2025-10-16 13:36:25,045 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:25] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:36:25,644 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:25] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:36:25,660 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:25] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:36:26,315 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:26] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:36:26,743 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:26] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:36:26,854 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:26] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:36:27,121 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 13:36:27,121 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 13:36:27,177 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:27] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:36:27,448 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:27] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:36:27,525 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:27] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:36:28,186 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:28] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:36:28,295 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 13:36:28,295 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 13:36:36,691 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:36] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:36:41,668 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:41] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:36:51,756 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:51] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:36:52,217 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:36:52] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:37:06,811 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:06] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:37:07,238 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:07] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:37:16,398 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:16] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-16 13:37:16,704 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:16] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:37:18,611 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:18] "GET /api/token-monitor/stats HTTP/1.1" 200 - -2025-10-16 13:37:19,045 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:19] "GET /api/token-monitor/records HTTP/1.1" 200 - -2025-10-16 13:37:19,111 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:19] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-16 13:37:21,289 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:21] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:37:22,232 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:22] "GET /api/token-monitor/chart HTTP/1.1" 200 - -2025-10-16 13:37:22,533 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:22] "POST /api/system-optimizer/optimize-memory HTTP/1.1" 200 - -2025-10-16 13:37:24,776 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:24] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-10-16 13:37:24,792 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:24] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-10-16 13:37:24,793 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:24] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-10-16 13:37:24,793 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:24] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-10-16 13:37:26,709 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:26] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:37:26,884 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:26] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:37:28,522 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:28] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:37:31,315 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:31] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:37:31,489 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:31] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:37:32,086 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:32] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:37:41,682 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:41] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:37:51,743 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:37:51] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:38:07,390 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:38:07] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:38:21,697 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:38:21] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:38:31,714 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:38:31] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:38:31,893 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:38:31] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:38:32,561 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:38:32] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:38:46,683 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:38:46] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:38:56,752 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:38:56] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:39:12,395 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:39:12] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:39:21,705 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:39:21] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:39:36,725 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:39:36] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:39:36,894 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:39:36] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:39:37,550 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:39:37] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:39:53,176 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:39:53] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:40:01,799 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:40:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:40:16,661 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:40:16] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:40:26,978 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:40:26] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:40:37,388 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:40:37] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:40:41,903 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:40:41] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:40:42,509 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:40:42] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:40:52,395 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:40:52] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:41:33,972 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.3% -2025-10-16 13:41:33,986 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.3% -2025-10-16 13:41:34,962 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.4% -2025-10-16 13:41:35,551 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.4% -2025-10-16 13:42:01,893 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:42:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:42:02,043 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:42:02] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:42:02,406 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:42:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:42:04,029 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:42:04] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:42:35,330 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.6% -2025-10-16 13:42:35,349 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.6% -2025-10-16 13:42:36,900 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.7% -2025-10-16 13:42:36,916 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.7% -2025-10-16 13:43:01,707 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:43:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:43:01,869 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:43:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:43:02,713 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:43:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:43:36,724 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.3% -2025-10-16 13:43:36,741 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.3% -2025-10-16 13:43:38,280 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.3% -2025-10-16 13:43:38,825 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.3% -2025-10-16 13:44:01,708 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:44:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:44:38,141 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.6% -2025-10-16 13:44:38,148 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.6% -2025-10-16 13:44:39,651 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.6% -2025-10-16 13:44:40,220 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.6% -2025-10-16 13:45:01,951 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:45:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:45:02,461 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:45:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:45:02,696 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:45:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:45:39,510 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.0% -2025-10-16 13:45:39,524 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.0% -2025-10-16 13:45:41,025 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.0% -2025-10-16 13:45:41,577 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.0% -2025-10-16 13:46:01,688 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:46:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:46:40,887 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.0% -2025-10-16 13:46:41,442 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.0% -2025-10-16 13:46:42,411 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.0% -2025-10-16 13:46:42,966 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.0% -2025-10-16 13:47:01,707 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:47:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:47:01,999 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:47:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:47:02,855 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:47:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:47:42,275 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.0% -2025-10-16 13:47:43,362 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.9% -2025-10-16 13:47:43,790 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.9% -2025-10-16 13:47:44,342 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.9% -2025-10-16 13:48:01,704 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:48:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:48:01,889 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:48:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:48:02,509 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:48:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:48:43,632 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.7% -2025-10-16 13:48:45,151 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.7% -2025-10-16 13:48:45,350 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.6% -2025-10-16 13:48:45,804 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.7% -2025-10-16 13:49:02,008 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:49:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:49:45,052 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.3% -2025-10-16 13:49:46,521 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.4% -2025-10-16 13:49:46,705 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.4% -2025-10-16 13:49:48,062 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.5% -2025-10-16 13:50:01,698 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:50:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:50:01,977 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:50:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:50:02,876 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:50:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:50:46,420 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% -2025-10-16 13:50:47,944 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% -2025-10-16 13:50:48,664 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% -2025-10-16 13:50:49,454 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.1% -2025-10-16 13:51:01,693 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:51:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:51:47,829 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.8% -2025-10-16 13:51:49,301 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.7% -2025-10-16 13:51:50,021 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.7% -2025-10-16 13:51:51,402 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.7% -2025-10-16 13:52:01,785 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:52:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:52:01,921 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:52:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:52:02,576 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:52:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:52:49,315 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.6% -2025-10-16 13:52:50,657 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.4% -2025-10-16 13:52:51,945 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.0% -2025-10-16 13:52:52,767 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.8% -2025-10-16 13:53:01,717 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:53:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:53:01,910 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:53:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:53:03,633 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:53:03] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:53:50,722 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.7% -2025-10-16 13:53:52,042 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.5% -2025-10-16 13:53:53,874 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.9% -2025-10-16 13:53:54,114 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.7% -2025-10-16 13:54:01,715 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:54:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:54:52,106 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.1% -2025-10-16 13:54:53,404 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.7% -2025-10-16 13:54:55,243 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.1% -2025-10-16 13:54:56,056 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.8% -2025-10-16 13:55:01,676 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:55:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:55:01,908 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:55:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:55:02,722 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:55:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:55:53,541 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.0% -2025-10-16 13:55:54,766 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.7% -2025-10-16 13:55:57,188 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.1% -2025-10-16 13:55:57,427 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.9% -2025-10-16 13:56:01,685 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:56:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:56:01,879 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:56:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:56:03,505 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:56:03] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:56:54,925 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.9% -2025-10-16 13:56:56,706 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.6% -2025-10-16 13:56:58,600 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.0% -2025-10-16 13:56:58,801 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.8% -2025-10-16 13:57:01,699 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:57:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:57:01,875 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:57:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:57:02,881 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:57:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:57:56,284 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.6% -2025-10-16 13:57:58,628 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.6% -2025-10-16 13:57:59,988 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.5% -2025-10-16 13:58:00,173 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.4% -2025-10-16 13:58:01,681 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:58:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:58:01,898 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:58:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 13:58:02,538 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:58:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 13:58:57,736 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.5% -2025-10-16 13:59:00,558 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.5% -2025-10-16 13:59:01,362 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.3% -2025-10-16 13:59:01,527 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.2% -2025-10-16 13:59:01,697 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 13:59:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 13:59:59,114 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.5% -2025-10-16 14:00:01,754 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:00:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:00:01,902 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.5% -2025-10-16 14:00:01,925 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:00:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:00:02,577 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:00:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:00:02,971 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.5% -2025-10-16 14:00:03,080 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.4% -2025-10-16 14:01:00,496 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.2% -2025-10-16 14:01:01,670 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:01:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:01:03,366 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.0% -2025-10-16 14:01:04,346 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.9% -2025-10-16 14:01:04,439 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.8% -2025-10-16 14:02:01,700 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:02:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:02:01,855 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.9% -2025-10-16 14:02:01,906 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:02:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:02:03,035 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:02:03] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:02:04,729 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.8% -2025-10-16 14:02:05,691 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.7% -2025-10-16 14:02:05,844 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.6% -2025-10-16 14:03:01,702 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:03:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:03:03,785 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.4% -2025-10-16 14:03:06,234 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.3% -2025-10-16 14:03:07,064 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.1% -2025-10-16 14:03:07,830 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.0% -2025-10-16 14:04:01,692 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:04:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:04:01,809 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:04:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:04:02,543 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:04:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:04:05,150 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.8% -2025-10-16 14:04:07,624 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.7% -2025-10-16 14:04:08,983 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.7% -2025-10-16 14:04:09,196 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.6% -2025-10-16 14:05:01,702 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:05:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:05:01,914 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:05:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:05:03,578 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:05:03] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:05:06,504 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.9% -2025-10-16 14:05:09,573 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.7% -2025-10-16 14:05:10,358 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.6% -2025-10-16 14:05:10,549 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.6% -2025-10-16 14:06:02,191 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:06:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:06:04,122 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:06:04] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:06:04,758 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:06:04] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:06:08,485 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.5% -2025-10-16 14:06:11,531 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.5% -2025-10-16 14:06:11,696 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.5% -2025-10-16 14:06:11,938 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.5% -2025-10-16 14:07:01,699 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:07:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:07:09,843 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.6% -2025-10-16 14:07:13,127 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.6% -2025-10-16 14:07:13,312 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.6% -2025-10-16 14:07:13,389 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.6% -2025-10-16 14:08:01,736 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:08:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:08:02,673 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:08:02] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:08:03,201 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:08:03] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:08:11,192 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.9% -2025-10-16 14:08:14,577 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.9% -2025-10-16 14:08:14,831 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.8% -2025-10-16 14:08:15,180 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.9% -2025-10-16 14:09:01,692 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:09:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:09:13,139 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.9% -2025-10-16 14:09:15,934 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.9% -2025-10-16 14:09:16,278 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.8% -2025-10-16 14:09:16,654 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.9% -2025-10-16 14:10:02,399 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:10:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:10:02,711 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:10:02] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:10:03,354 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:10:03] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:10:14,482 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.7% -2025-10-16 14:10:17,365 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.8% -2025-10-16 14:10:17,724 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.7% -2025-10-16 14:10:18,008 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.8% -2025-10-16 14:11:02,527 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:11:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:11:16,338 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.1% -2025-10-16 14:11:18,911 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% -2025-10-16 14:11:19,259 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.1% -2025-10-16 14:11:19,464 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% -2025-10-16 14:12:01,808 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:12:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:12:03,225 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:12:03] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:12:03,975 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:12:03] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:12:17,695 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.0% -2025-10-16 14:12:20,353 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.0% -2025-10-16 14:12:20,715 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.9% -2025-10-16 14:12:20,828 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.0% -2025-10-16 14:13:01,864 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:13:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:13:02,640 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:13:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:13:02,656 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:13:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:13:19,721 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.9% -2025-10-16 14:13:21,815 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.9% -2025-10-16 14:13:22,083 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.8% -2025-10-16 14:13:22,177 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.9% -2025-10-16 14:14:02,618 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:14:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:14:21,589 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.1% -2025-10-16 14:14:23,526 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.0% -2025-10-16 14:14:23,666 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.1% -2025-10-16 14:14:23,752 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.1% -2025-10-16 14:15:01,766 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:15:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:15:03,028 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:15:03] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:15:04,109 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:15:04] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:15:23,058 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.4% -2025-10-16 14:15:24,897 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.4% -2025-10-16 14:15:25,110 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.4% -2025-10-16 14:15:25,619 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.4% -2025-10-16 14:16:02,025 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:16:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:16:24,956 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.9% -2025-10-16 14:16:26,403 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.8% -2025-10-16 14:16:26,473 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.8% -2025-10-16 14:16:26,962 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.8% -2025-10-16 14:17:02,341 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:17:02] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:17:02,924 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:17:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:17:03,247 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:17:03] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:17:26,426 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.3% -2025-10-16 14:17:27,765 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.2% -2025-10-16 14:17:27,818 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.2% -2025-10-16 14:17:28,493 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.2% -2025-10-16 14:18:02,511 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:18:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:18:28,286 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.7% -2025-10-16 14:18:29,206 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.6% -2025-10-16 14:18:29,210 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.6% -2025-10-16 14:18:29,838 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.6% -2025-10-16 14:19:02,123 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:19:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:19:03,172 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:19:03] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:19:04,147 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:19:04] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:19:29,644 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.2% -2025-10-16 14:19:30,566 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.2% -2025-10-16 14:19:30,661 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.2% -2025-10-16 14:19:31,295 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.1% -2025-10-16 14:20:01,958 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:20:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:20:02,617 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:20:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:20:02,663 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:20:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:20:31,590 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.4% -2025-10-16 14:20:32,041 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.3% -2025-10-16 14:20:32,117 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.3% -2025-10-16 14:20:32,679 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.2% -2025-10-16 14:21:02,536 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:21:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:21:33,457 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.2% -2025-10-16 14:21:33,589 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.2% -2025-10-16 14:21:34,007 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.1% -2025-10-16 14:21:34,236 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.1% -2025-10-16 14:22:01,823 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:22:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:22:03,005 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:22:03] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:22:04,918 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:22:04] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:22:34,908 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.0% -2025-10-16 14:22:35,047 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.0% -2025-10-16 14:23:01,755 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:23:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:24:02,674 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:24:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:24:02,750 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:24:02] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:24:03,598 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:24:03] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:41:55,006 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.7% -2025-10-16 14:41:55,016 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.7% -2025-10-16 14:41:55,155 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.7% -2025-10-16 14:41:56,507 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 85.7% -2025-10-16 14:42:56,572 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.1% -2025-10-16 14:42:56,784 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.1% -2025-10-16 14:42:56,978 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.1% -2025-10-16 14:42:57,882 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.1% -2025-10-16 14:43:58,013 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.6% -2025-10-16 14:43:58,407 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.6% -2025-10-16 14:43:58,735 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.6% -2025-10-16 14:43:59,390 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.6% -2025-10-16 14:44:59,502 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.7% -2025-10-16 14:44:59,779 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.7% -2025-10-16 14:45:00,194 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.7% -2025-10-16 14:45:00,858 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.7% -2025-10-16 14:46:01,123 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.8% -2025-10-16 14:46:01,451 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.9% -2025-10-16 14:46:01,631 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.8% -2025-10-16 14:46:02,271 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.9% -2025-10-16 14:47:02,588 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.8% -2025-10-16 14:47:02,865 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.8% -2025-10-16 14:47:02,993 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.8% -2025-10-16 14:47:04,219 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.8% -2025-10-16 14:48:04,024 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.5% -2025-10-16 14:48:04,238 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.5% -2025-10-16 14:48:04,433 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.5% -2025-10-16 14:48:05,638 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.4% -2025-10-16 14:48:47,135 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:48:47] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:48:47,402 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:48:47] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:48:48,047 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:48:48] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:48:49,117 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:48:49] "GET /api/ai-monitor/stats HTTP/1.1" 200 - -2025-10-16 14:48:49,587 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:48:49] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - -2025-10-16 14:48:49,671 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:48:49] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - -2025-10-16 14:48:50,305 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:48:50] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - -2025-10-16 14:48:51,246 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 14:48:51,247 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-16 14:48:51,765 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 5678, 'msg': 'ok', 'tenant_access_token': 't-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA'} -2025-10-16 14:48:51,766 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104agenT3XLFBT3KZ... -2025-10-16 14:48:51,766 - src.integrations.feishu_client - INFO - 令牌有效期: 5678秒,过期时间: 2025-10-16 16:23:29 -2025-10-16 14:48:51,768 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 14:48:51,769 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agenT3XLFBT3KZ... -2025-10-16 14:48:52,863 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 14:48:52,875 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 14:48:52,876 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 14:48:53,055 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 14:48:53,055 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 14:48:53,056 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 14:48:53,056 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 14:48:53,056 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 14:48:53,056 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 14:48:53,057 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 14:48:53,057 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 14:48:53,057 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 14:48:53,057 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 14:48:53,057 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 14:48:53,058 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 14:48:53,058 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 14:48:53,058 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 14:48:53,058 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 14:48:53,058 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 14:48:53,059 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-16 14:48:53,059 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-16 14:48:53,347 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': False, 'errors': []} -2025-10-16 14:48:53,347 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:48:53] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 14:48:53,859 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:48:53] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 14:49:05,363 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.6% -2025-10-16 14:49:05,669 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.5% -2025-10-16 14:49:05,809 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.5% -2025-10-16 14:49:07,045 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.5% -2025-10-16 14:49:13,085 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:49:13] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:49:13,715 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:49:13] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:49:13,935 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:49:13] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:49:17,922 - src.integrations.config_manager - INFO - 配置保存成功 -2025-10-16 14:49:17,922 - src.integrations.config_manager - INFO - 飞书配置更新成功 -2025-10-16 14:49:17,923 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:49:17] "POST /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-16 14:49:19,182 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-16 14:49:19,568 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 5650, 'msg': 'ok', 'tenant_access_token': 't-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA'} -2025-10-16 14:49:19,569 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104agenT3XLFBT3KZ... -2025-10-16 14:49:19,569 - src.integrations.feishu_client - INFO - 令牌有效期: 5650秒,过期时间: 2025-10-16 16:23:29 -2025-10-16 14:49:20,014 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-16 14:49:20,026 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-16 14:49:20,028 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-16 14:49:20,028 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-16 14:49:20,029 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-16 14:49:20,030 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-16 14:49:20,031 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-16 14:49:20,032 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-16 14:49:20,033 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-16 14:49:20,034 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-16 14:49:20,035 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-16 14:49:20,035 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-16 14:49:20,036 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-16 14:49:20,037 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-16 14:49:20,038 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-16 14:49:20,039 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-16 14:49:20,039 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-16 14:49:20,040 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-16 14:49:20,041 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-16 14:49:20,042 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-16 14:49:20,043 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-16 14:49:20,044 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-16 14:49:20,045 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-16 14:49:20,045 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-16 14:49:20,394 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 5649, 'msg': 'ok', 'tenant_access_token': 't-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA'} -2025-10-16 14:49:20,395 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104agenT3XLFBT3KZ... -2025-10-16 14:49:20,395 - src.integrations.feishu_client - INFO - 令牌有效期: 5649秒,过期时间: 2025-10-16 16:23:29 -2025-10-16 14:49:20,396 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/fields -2025-10-16 14:49:20,396 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agenT3XLFBT3KZ... -2025-10-16 14:49:21,087 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 14:49:21,088 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'field_id': 'fld7I3NbPC', 'field_name': 'TR Number', 'is_primary': True, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'flddTS2aZf', 'field_name': 'Source', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optJrccTdA', 'name': 'Telegram channel'}, {'color': 1, 'id': 'opt9cbN7z0', 'name': 'Mail'}, {'color': 2, 'id': 'optKkubttZ', 'name': 'Omoda team'}, {'color': 3, 'id': 'optTut6lHO', 'name': 'Autosales team (dealer)'}, {'color': 4, 'id': 'opt1AswjVU', 'name': 'Telegram bot'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fldtIanFAn', 'field_name': 'Date creation', 'is_primary': False, 'property': {'auto_fill': False, 'date_formatter': 'yyyy/MM/dd'}, 'type': 5, 'ui_type': 'DateTime'}, {'field_id': 'fld5UkEqYc', 'field_name': 'Type of problem', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld2bTSauo', 'field_name': 'TR Description', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fldeybeSlU', 'field_name': '处理过程', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fldIfA4beS', 'field_name': 'AI建议', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld4nkalKl', 'field_name': 'TR tracking', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld4BFLp57', 'field_name': 'TR Level', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'opt6tAqVaF', 'name': 'Medium'}, {'color': 1, 'id': 'optBTNHThl', 'name': 'Low'}, {'color': 2, 'id': 'optSVSvjch', 'name': 'High '}, {'color': 3, 'id': 'optPBvZVsh', 'name': 'Critical'}, {'color': 4, 'id': 'opt03x9uLn', 'name': 'High'}, {'color': 5, 'id': 'optxdSWBlo', 'name': 'unconfirmed'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fld3vJzZla', 'field_name': 'TR Status', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optFrBl64E', 'name': 'close'}, {'color': 1, 'id': 'optYPTYuPn', 'name': 'temporary close'}, {'color': 2, 'id': 'optI2EV9oq', 'name': 'OTA'}, {'color': 3, 'id': 'optBEWf6Ur', 'name': 'Processing'}, {'color': 4, 'id': 'optGpjwtDr', 'name': 'open'}, {'color': 5, 'id': 'optPVmHaVn', 'name': 'Analysising'}, {'color': 6, 'id': 'optFNvUYLk', 'name': 'Collecting problem-infor'}, {'color': 7, 'id': 'optFiDSv0G', 'name': 'on-site handling'}, {'color': 8, 'id': 'optTmlcVd9', 'name': 'unconfirming'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fld5DXGwzQ', 'field_name': 'Module(模块)', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optLT3jlDD', 'name': '用户EXEED-APP(User)'}, {'color': 1, 'id': 'optHEqkqET', 'name': 'DMC'}, {'color': 2, 'id': 'optHsOvMbr', 'name': '车控APP(Car control)'}, {'color': 3, 'id': 'optoq8zgX2', 'name': 'TBOX'}, {'color': 4, 'id': 'optf1vKpt7', 'name': 'local O&M'}, {'color': 5, 'id': 'opthvxZ8zn', 'name': 'MNO'}, {'color': 6, 'id': 'optE9Yyd96', 'name': 'O&J-APP'}, {'color': 7, 'id': 'optu7g5hXu', 'name': 'TSP'}, {'color': 8, 'id': 'optsglYLPs', 'name': '生态/ecologically'}, {'color': 9, 'id': 'optYqCpH3I', 'name': 'OTA'}, {'color': 10, 'id': 'optHaAymcs', 'name': 'PKI'}, {'color': 0, 'id': 'optp8Mar7t', 'name': 'MES'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fldHl8gKFH', 'field_name': 'Wilfulness(责任人)', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fldJcGUgmD', 'field_name': 'Date of close TR', 'is_primary': False, 'property': {'auto_fill': False, 'date_formatter': 'yyyy/MM/dd'}, 'type': 5, 'ui_type': 'DateTime'}, {'field_id': 'fldZXHpclE', 'field_name': 'Vehicle Type01', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optu1LH6rf', 'name': 'TEST'}, {'color': 1, 'id': 'optPGJwkW2', 'name': 'EXEED VX FL(M36T)'}, {'color': 2, 'id': 'optkCi7LYA', 'name': 'EXEED RX(T22)'}, {'color': 3, 'id': 'optRHhMbEO', 'name': 'JAECOO J7(T1EJ)'}, {'color': 4, 'id': 'optUA5Bg4X', 'name': 'Not related to Cars'}, {'color': 5, 'id': 'optPH7cw7Q', 'name': 'All projects'}, {'color': 6, 'id': 'optvNNzxT2', 'name': 'Tiggo9 (T28)'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fld5TAAbXr', 'field_name': 'VIN|sim', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld75ZCRsJ', 'field_name': 'SIM', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fldwP50ZGo', 'field_name': 'Created by', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optqKr5fiu', 'name': 'Andrey Grishin'}, {'color': 1, 'id': 'optnI62Ird', 'name': 'Evgeniy'}, {'color': 2, 'id': 'optl3XuXpN', 'name': 'Max Pavlov'}, {'color': 3, 'id': 'optLys0j10', 'name': 'Kostya'}, {'color': 4, 'id': 'opt9gwWHlF', 'name': 'Vsevolod'}, {'color': 5, 'id': 'optm3pqIv1', 'name': 'Vsevolod Tsoi'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fld5gTFrSm', 'field_name': 'App remote control version', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld3VCUU4U', 'field_name': 'HMI SW', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optKaRaeku', 'name': '0.3.0'}, {'color': 1, 'id': 'optR4rREAC', 'name': '00.01.00'}, {'color': 2, 'id': 'optdchXwsg', 'name': 'n/a'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fld7ieMCdz', 'field_name': '父记录', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld2X8Bf6R', 'field_name': 'Has it been updated on the same day', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'opthTH6hs7', 'name': 'Not'}, {'color': 1, 'id': 'optTT8rQtA', 'name': 'Done'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fldPKr4W2i', 'field_name': 'Operating time', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}], 'page_token': 'fldPKr4W2i', 'total': 22}, 'msg': 'success'} -2025-10-16 14:49:21,090 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:49:21] "GET /api/feishu-sync/test-connection HTTP/1.1" 200 - -2025-10-16 14:49:54,363 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:49:54] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:49:55,523 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:49:55] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:49:56,216 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:49:56] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:49:58,086 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:49:58] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:49:59,114 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:49:59] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:49:59,172 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:49:59] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:49:59,921 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:49:59] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:50:06,733 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.5% -2025-10-16 14:50:07,112 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.5% -2025-10-16 14:50:07,754 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.5% -2025-10-16 14:50:08,482 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.5% -2025-10-16 14:50:18,857 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 14:50:18,857 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 14:50:18,857 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agenT3XLFBT3KZ... -2025-10-16 14:50:19,878 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 14:50:19,878 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 14:50:19,879 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 14:50:19,880 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-16 14:50:20,100 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-16 14:50:20,313 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-16 14:50:20,314 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 14:50:20,315 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agenT3XLFBT3KZ... -2025-10-16 14:50:20,776 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 403 -2025-10-16 14:50:20,777 - src.integrations.feishu_client - ERROR - 飞书API权限错误: {'code': 91403, 'msg': 'Forbidden', 'data': {}} -2025-10-16 14:50:20,777 - src.integrations.feishu_client - ERROR - 飞书API权限错误,无法解析响应内容 -2025-10-16 14:50:20,778 - src.integrations.feishu_client - ERROR - 飞书API请求失败: 飞书API权限不足,状态码: 403 -2025-10-16 14:50:20,778 - src.integrations.feishu_client - ERROR - 请求URL: https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 14:50:20,778 - src.integrations.feishu_client - ERROR - 请求方法: PUT -2025-10-16 14:50:20,779 - src.integrations.feishu_client - ERROR - 请求头: {'Authorization': 'Bearer t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA', 'Content-Type': 'application/json; charset=utf-8'} -2025-10-16 14:50:20,779 - src.integrations.workorder_sync - ERROR - 更新飞书AI建议失败: 飞书API权限不足,状态码: 403 -2025-10-16 14:50:20,945 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 14:50:20,947 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 14:50:20,947 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 14:50:20,948 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 14:50:20,948 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 14:50:20,949 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 14:50:20,949 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 14:50:20,949 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 14:50:20,950 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 14:50:20,950 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 14:50:20,950 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 14:50:20,950 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 14:50:20,950 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 14:50:20,951 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 14:50:20,951 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 14:50:20,951 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 14:50:20,951 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-16 14:50:20,951 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-16 14:50:21,203 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-16 14:50:21,205 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:50:21] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 14:50:21,715 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:50:21] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 14:50:26,840 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:50:26] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:51:08,565 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.3% -2025-10-16 14:51:08,675 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.3% -2025-10-16 14:51:09,089 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.4% -2025-10-16 14:51:09,929 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.3% -2025-10-16 14:52:10,081 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.1% -2025-10-16 14:52:10,532 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.1% -2025-10-16 14:52:10,536 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.1% -2025-10-16 14:52:11,875 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.0% -2025-10-16 14:53:11,430 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.4% -2025-10-16 14:53:11,950 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.4% -2025-10-16 14:53:11,989 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.4% -2025-10-16 14:53:13,315 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.3% -2025-10-16 14:54:12,281 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:54:12] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:54:12,317 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:54:12] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:54:12,872 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.5% -2025-10-16 14:54:13,016 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:54:13] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:54:13,327 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.3% -2025-10-16 14:54:13,339 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.3% -2025-10-16 14:54:14,760 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.0% -2025-10-16 14:54:46,848 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:54:46] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:55:14,325 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.2% -2025-10-16 14:55:14,809 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.0% -2025-10-16 14:55:15,344 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.0% -2025-10-16 14:55:16,726 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.7% -2025-10-16 14:56:15,667 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.7% -2025-10-16 14:56:16,251 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.6% -2025-10-16 14:56:16,781 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.5% -2025-10-16 14:56:18,136 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.3% -2025-10-16 14:57:17,612 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.1% -2025-10-16 14:57:17,618 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.9% -2025-10-16 14:57:18,126 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.0% -2025-10-16 14:57:19,583 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.9% -2025-10-16 14:57:48,518 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:57:48] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:57:49,520 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:57:49] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:57:50,261 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:57:50] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:57:52,508 - src.integrations.config_manager - INFO - 配置保存成功 -2025-10-16 14:57:52,508 - src.integrations.config_manager - INFO - 飞书配置更新成功 -2025-10-16 14:57:52,509 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:57:52] "POST /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-16 14:57:53,636 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-16 14:57:54,039 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 5135, 'msg': 'ok', 'tenant_access_token': 't-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA'} -2025-10-16 14:57:54,039 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104agenT3XLFBT3KZ... -2025-10-16 14:57:54,040 - src.integrations.feishu_client - INFO - 令牌有效期: 5135秒,过期时间: 2025-10-16 16:23:29 -2025-10-16 14:57:54,408 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-16 14:57:54,409 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-16 14:57:54,410 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-16 14:57:54,411 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-16 14:57:54,412 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-16 14:57:54,413 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-16 14:57:54,413 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-16 14:57:54,414 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-16 14:57:54,415 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-16 14:57:54,416 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-16 14:57:54,416 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-16 14:57:54,417 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-16 14:57:54,418 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-16 14:57:54,419 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-16 14:57:54,419 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-16 14:57:54,420 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-16 14:57:54,421 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-16 14:57:54,422 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-16 14:57:54,423 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-16 14:57:54,424 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-16 14:57:54,424 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-16 14:57:54,425 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-16 14:57:54,426 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-16 14:57:54,426 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-16 14:57:54,804 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 5135, 'msg': 'ok', 'tenant_access_token': 't-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA'} -2025-10-16 14:57:54,805 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104agenT3XLFBT3KZ... -2025-10-16 14:57:54,805 - src.integrations.feishu_client - INFO - 令牌有效期: 5135秒,过期时间: 2025-10-16 16:23:29 -2025-10-16 14:57:54,806 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/u-fjl.piJTx4ToHIQBf5sImPhkj.Mg1lGVVgG00lI80a0x/tables/tblnl3vJPpgMTSiP/fields -2025-10-16 14:57:54,807 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agenT3XLFBT3KZ... -2025-10-16 14:57:55,217 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 400 -2025-10-16 14:57:55,219 - src.integrations.feishu_client - ERROR - 飞书API请求失败: 400 Client Error: Bad Request for url: https://open.feishu.cn/open-apis/bitable/v1/apps/u-fjl.piJTx4ToHIQBf5sImPhkj.Mg1lGVVgG00lI80a0x/tables/tblnl3vJPpgMTSiP/fields -2025-10-16 14:57:55,219 - src.integrations.feishu_client - ERROR - 请求URL: https://open.feishu.cn/open-apis/bitable/v1/apps/u-fjl.piJTx4ToHIQBf5sImPhkj.Mg1lGVVgG00lI80a0x/tables/tblnl3vJPpgMTSiP/fields -2025-10-16 14:57:55,220 - src.integrations.feishu_client - ERROR - 请求方法: GET -2025-10-16 14:57:55,220 - src.integrations.feishu_client - ERROR - 请求头: {'Authorization': 'Bearer t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA', 'Content-Type': 'application/json; charset=utf-8'} -2025-10-16 14:57:55,220 - src.web.blueprints.feishu_sync - WARNING - 获取表格字段信息失败: 400 Client Error: Bad Request for url: https://open.feishu.cn/open-apis/bitable/v1/apps/u-fjl.piJTx4ToHIQBf5sImPhkj.Mg1lGVVgG00lI80a0x/tables/tblnl3vJPpgMTSiP/fields -2025-10-16 14:57:55,222 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:57:55] "GET /api/feishu-sync/test-connection HTTP/1.1" 200 - -2025-10-16 14:57:57,027 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 14:57:57,027 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/u-fjl.piJTx4ToHIQBf5sImPhkj.Mg1lGVVgG00lI80a0x/tables/tblnl3vJPpgMTSiP/records -2025-10-16 14:57:57,027 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agenT3XLFBT3KZ... -2025-10-16 14:57:57,406 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 400 -2025-10-16 14:57:57,406 - src.integrations.feishu_client - ERROR - 飞书API请求失败: 400 Client Error: Bad Request for url: https://open.feishu.cn/open-apis/bitable/v1/apps/u-fjl.piJTx4ToHIQBf5sImPhkj.Mg1lGVVgG00lI80a0x/tables/tblnl3vJPpgMTSiP/records?page_size=10 -2025-10-16 14:57:57,407 - src.integrations.feishu_client - ERROR - 请求URL: https://open.feishu.cn/open-apis/bitable/v1/apps/u-fjl.piJTx4ToHIQBf5sImPhkj.Mg1lGVVgG00lI80a0x/tables/tblnl3vJPpgMTSiP/records -2025-10-16 14:57:57,407 - src.integrations.feishu_client - ERROR - 请求方法: GET -2025-10-16 14:57:57,407 - src.integrations.feishu_client - ERROR - 请求头: {'Authorization': 'Bearer t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA', 'Content-Type': 'application/json; charset=utf-8'} -2025-10-16 14:57:57,407 - src.integrations.workorder_sync - ERROR - 飞书同步失败: 400 Client Error: Bad Request for url: https://open.feishu.cn/open-apis/bitable/v1/apps/u-fjl.piJTx4ToHIQBf5sImPhkj.Mg1lGVVgG00lI80a0x/tables/tblnl3vJPpgMTSiP/records?page_size=10 -2025-10-16 14:57:57,420 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:57:57] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 500 - -2025-10-16 14:58:19,065 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.7% -2025-10-16 14:58:19,567 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.5% -2025-10-16 14:58:19,576 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.5% -2025-10-16 14:58:20,935 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.6% -2025-10-16 14:59:20,535 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.4% -2025-10-16 14:59:20,979 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.4% -2025-10-16 14:59:21,012 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.4% -2025-10-16 14:59:22,306 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.5% -2025-10-16 14:59:53,599 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:59:53] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 14:59:54,210 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:59:54] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 14:59:54,351 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:59:54] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 14:59:55,272 - src.integrations.config_manager - INFO - 配置保存成功 -2025-10-16 14:59:55,273 - src.integrations.config_manager - INFO - 飞书配置更新成功 -2025-10-16 14:59:55,273 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:59:55] "POST /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-16 14:59:55,827 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-16 14:59:56,232 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 5013, 'msg': 'ok', 'tenant_access_token': 't-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA'} -2025-10-16 14:59:56,233 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104agenT3XLFBT3KZ... -2025-10-16 14:59:56,233 - src.integrations.feishu_client - INFO - 令牌有效期: 5013秒,过期时间: 2025-10-16 16:23:29 -2025-10-16 14:59:57,170 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-16 14:59:57,171 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-16 14:59:57,172 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-16 14:59:57,173 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-16 14:59:57,174 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-16 14:59:57,175 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-16 14:59:57,176 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-16 14:59:57,176 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-16 14:59:57,177 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-16 14:59:57,178 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-16 14:59:57,179 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-16 14:59:57,180 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-16 14:59:57,180 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-16 14:59:57,181 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-16 14:59:57,182 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-16 14:59:57,183 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-16 14:59:57,184 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-16 14:59:57,184 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-16 14:59:57,185 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-16 14:59:57,186 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-16 14:59:57,186 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-16 14:59:57,187 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-16 14:59:57,188 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-16 14:59:57,188 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-16 14:59:57,549 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 5012, 'msg': 'ok', 'tenant_access_token': 't-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA'} -2025-10-16 14:59:57,549 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104agenT3XLFBT3KZ... -2025-10-16 14:59:57,550 - src.integrations.feishu_client - INFO - 令牌有效期: 5012秒,过期时间: 2025-10-16 16:23:29 -2025-10-16 14:59:57,552 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA/tables/tblnl3vJPpgMTSiP/fields -2025-10-16 14:59:57,552 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agenT3XLFBT3KZ... -2025-10-16 14:59:57,963 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 400 -2025-10-16 14:59:57,964 - src.integrations.feishu_client - ERROR - 飞书API请求失败: 400 Client Error: Bad Request for url: https://open.feishu.cn/open-apis/bitable/v1/apps/t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA/tables/tblnl3vJPpgMTSiP/fields -2025-10-16 14:59:57,964 - src.integrations.feishu_client - ERROR - 请求URL: https://open.feishu.cn/open-apis/bitable/v1/apps/t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA/tables/tblnl3vJPpgMTSiP/fields -2025-10-16 14:59:57,964 - src.integrations.feishu_client - ERROR - 请求方法: GET -2025-10-16 14:59:57,964 - src.integrations.feishu_client - ERROR - 请求头: {'Authorization': 'Bearer t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA', 'Content-Type': 'application/json; charset=utf-8'} -2025-10-16 14:59:57,965 - src.web.blueprints.feishu_sync - WARNING - 获取表格字段信息失败: 400 Client Error: Bad Request for url: https://open.feishu.cn/open-apis/bitable/v1/apps/t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA/tables/tblnl3vJPpgMTSiP/fields -2025-10-16 14:59:57,978 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:59:57] "GET /api/feishu-sync/test-connection HTTP/1.1" 200 - -2025-10-16 14:59:59,434 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 14:59:59,434 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA/tables/tblnl3vJPpgMTSiP/records -2025-10-16 14:59:59,435 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agenT3XLFBT3KZ... -2025-10-16 14:59:59,853 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 400 -2025-10-16 14:59:59,854 - src.integrations.feishu_client - ERROR - 飞书API请求失败: 400 Client Error: Bad Request for url: https://open.feishu.cn/open-apis/bitable/v1/apps/t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA/tables/tblnl3vJPpgMTSiP/records?page_size=10 -2025-10-16 14:59:59,854 - src.integrations.feishu_client - ERROR - 请求URL: https://open.feishu.cn/open-apis/bitable/v1/apps/t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA/tables/tblnl3vJPpgMTSiP/records -2025-10-16 14:59:59,854 - src.integrations.feishu_client - ERROR - 请求方法: GET -2025-10-16 14:59:59,854 - src.integrations.feishu_client - ERROR - 请求头: {'Authorization': 'Bearer t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA', 'Content-Type': 'application/json; charset=utf-8'} -2025-10-16 14:59:59,854 - src.integrations.workorder_sync - ERROR - 飞书同步失败: 400 Client Error: Bad Request for url: https://open.feishu.cn/open-apis/bitable/v1/apps/t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA/tables/tblnl3vJPpgMTSiP/records?page_size=10 -2025-10-16 14:59:59,855 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 14:59:59] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 500 - -2025-10-16 15:00:21,947 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.3% -2025-10-16 15:00:22,360 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.3% -2025-10-16 15:00:22,362 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.3% -2025-10-16 15:00:24,248 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.5% -2025-10-16 15:01:10,546 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:01:10] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 15:01:10,760 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:01:10] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 15:01:11,516 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:01:11] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 15:01:23,520 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.8% -2025-10-16 15:01:23,788 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.8% -2025-10-16 15:01:23,878 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.8% -2025-10-16 15:01:25,698 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.0% -2025-10-16 15:02:01,550 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 15:02:01,550 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA/tables/tblnl3vJPpgMTSiP/records -2025-10-16 15:02:01,551 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agenT3XLFBT3KZ... -2025-10-16 15:02:02,055 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 400 -2025-10-16 15:02:02,055 - src.integrations.feishu_client - ERROR - 飞书API请求失败: 400 Client Error: Bad Request for url: https://open.feishu.cn/open-apis/bitable/v1/apps/t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA/tables/tblnl3vJPpgMTSiP/records?page_size=10 -2025-10-16 15:02:02,056 - src.integrations.feishu_client - ERROR - 请求URL: https://open.feishu.cn/open-apis/bitable/v1/apps/t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA/tables/tblnl3vJPpgMTSiP/records -2025-10-16 15:02:02,056 - src.integrations.feishu_client - ERROR - 请求方法: GET -2025-10-16 15:02:02,056 - src.integrations.feishu_client - ERROR - 请求头: {'Authorization': 'Bearer t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA', 'Content-Type': 'application/json; charset=utf-8'} -2025-10-16 15:02:02,058 - src.integrations.workorder_sync - ERROR - 飞书同步失败: 400 Client Error: Bad Request for url: https://open.feishu.cn/open-apis/bitable/v1/apps/t-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA/tables/tblnl3vJPpgMTSiP/records?page_size=10 -2025-10-16 15:02:02,060 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:02:02] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 500 - -2025-10-16 15:02:02,083 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:02:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 15:02:18,647 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:02:18] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 15:02:19,395 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:02:19] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 15:02:21,769 - src.integrations.config_manager - INFO - 配置保存成功 -2025-10-16 15:02:21,770 - src.integrations.config_manager - INFO - 飞书配置更新成功 -2025-10-16 15:02:21,770 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:02:21] "POST /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-16 15:02:23,265 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-16 15:02:23,278 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-16 15:02:23,279 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-16 15:02:23,280 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-16 15:02:23,280 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-16 15:02:23,281 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-16 15:02:23,282 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-16 15:02:23,283 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-16 15:02:23,284 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-16 15:02:23,284 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-16 15:02:23,285 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-16 15:02:23,286 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-16 15:02:23,287 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-16 15:02:23,288 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-16 15:02:23,288 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-16 15:02:23,289 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-16 15:02:23,290 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-16 15:02:23,291 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-16 15:02:23,292 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-16 15:02:23,293 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-16 15:02:23,293 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-16 15:02:23,294 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-16 15:02:23,295 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-16 15:02:23,295 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 15:02:23,295 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-16 15:02:23,672 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 4866, 'msg': 'ok', 'tenant_access_token': 't-g104agenT3XLFBT3KZXA3O2FN3FN5OHL2HV2LHKA'} -2025-10-16 15:02:23,674 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104agenT3XLFBT3KZ... -2025-10-16 15:02:23,674 - src.integrations.feishu_client - INFO - 令牌有效期: 4866秒,过期时间: 2025-10-16 16:23:29 -2025-10-16 15:02:23,674 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 15:02:23,674 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agenT3XLFBT3KZ... -2025-10-16 15:02:24,889 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.4% -2025-10-16 15:02:24,896 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 15:02:24,896 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 15:02:24,898 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 15:02:25,074 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 15:02:25,075 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 15:02:25,075 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 15:02:25,075 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 15:02:25,075 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 15:02:25,075 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 15:02:25,076 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 15:02:25,076 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 15:02:25,076 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 15:02:25,076 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 15:02:25,076 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 15:02:25,076 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 15:02:25,077 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 15:02:25,077 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 15:02:25,077 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 15:02:25,077 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 15:02:25,077 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-16 15:02:25,078 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-16 15:02:25,231 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.3% -2025-10-16 15:02:25,291 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.3% -2025-10-16 15:02:25,355 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': False, 'errors': []} -2025-10-16 15:02:25,356 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:02:25] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 15:02:26,537 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:02:26] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 15:02:27,061 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:02:31,841 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:02:31] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 15:03:26,589 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.0% -2025-10-16 15:03:26,705 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.0% -2025-10-16 15:03:26,821 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.0% -2025-10-16 15:03:28,532 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.9% -2025-10-16 15:04:27,949 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.4% -2025-10-16 15:04:28,148 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.4% -2025-10-16 15:04:28,188 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.4% -2025-10-16 15:04:29,943 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.3% -2025-10-16 15:05:29,547 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.9% -2025-10-16 15:05:29,595 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.9% -2025-10-16 15:05:29,900 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.9% -2025-10-16 15:05:31,388 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.8% -2025-10-16 15:06:30,932 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.3% -2025-10-16 15:06:31,012 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.3% -2025-10-16 15:06:31,256 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.3% -2025-10-16 15:06:32,837 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.2% -2025-10-16 15:07:32,457 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.8% -2025-10-16 15:07:32,626 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.8% -2025-10-16 15:07:32,884 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.8% -2025-10-16 15:07:34,284 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.8% -2025-10-16 15:08:33,807 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.9% -2025-10-16 15:08:34,085 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.9% -2025-10-16 15:08:34,324 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.0% -2025-10-16 15:08:35,654 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.9% -2025-10-16 15:09:35,503 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.0% -2025-10-16 15:09:35,677 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.0% -2025-10-16 15:09:35,750 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.1% -2025-10-16 15:09:37,113 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.0% -2025-10-16 15:10:36,931 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:10:37,040 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:10:37,159 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:10:38,570 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:11:38,563 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:11:38,602 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.3% -2025-10-16 15:11:38,903 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:11:39,968 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:12:39,982 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:12:40,427 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:12:41,412 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:12:41,835 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:13:41,923 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:13:42,254 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:13:43,189 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:13:43,216 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:14:43,700 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:14:44,127 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:14:44,583 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.1% -2025-10-16 15:14:44,608 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 15:15:45,054 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.1% -2025-10-16 15:15:45,505 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.1% -2025-10-16 15:15:45,917 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.1% -2025-10-16 15:15:46,465 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.1% -2025-10-16 15:16:11,505 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:16:11] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 15:16:11,595 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:16:11] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 15:16:12,279 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:16:12] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 15:16:46,504 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.9% -2025-10-16 15:16:46,723 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:16:46] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 15:16:46,850 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.9% -2025-10-16 15:16:47,265 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.9% -2025-10-16 15:16:47,848 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.9% -2025-10-16 15:17:11,773 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:17:11] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 15:17:13,266 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:17:13] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 15:17:26,737 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:17:26] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 15:17:48,331 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.4% -2025-10-16 15:17:48,363 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.4% -2025-10-16 15:17:48,627 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.5% -2025-10-16 15:17:49,203 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.5% -2025-10-16 15:18:49,677 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.2% -2025-10-16 15:18:49,751 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.2% -2025-10-16 15:18:50,047 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.4% -2025-10-16 15:18:51,122 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.4% -2025-10-16 15:19:51,076 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.9% -2025-10-16 15:19:51,106 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.9% -2025-10-16 15:19:51,389 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.0% -2025-10-16 15:19:52,542 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.9% -2025-10-16 15:20:52,520 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.7% -2025-10-16 15:20:52,763 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.8% -2025-10-16 15:20:52,966 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.8% -2025-10-16 15:20:53,906 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.7% -2025-10-16 15:21:54,209 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.9% -2025-10-16 15:21:54,342 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.0% -2025-10-16 15:21:54,734 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.9% -2025-10-16 15:21:55,656 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.9% -2025-10-16 15:22:55,712 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.7% -2025-10-16 15:22:56,076 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.7% -2025-10-16 15:22:56,097 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.7% -2025-10-16 15:22:57,037 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.7% -2025-10-16 15:23:57,196 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.2% -2025-10-16 15:23:57,450 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.3% -2025-10-16 15:23:57,458 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.3% -2025-10-16 15:23:58,905 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.1% -2025-10-16 15:24:58,570 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.7% -2025-10-16 15:24:58,845 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.7% -2025-10-16 15:24:58,922 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.7% -2025-10-16 15:25:00,270 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 87.6% -2025-10-16 15:25:59,937 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.0% -2025-10-16 15:26:00,306 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.0% -2025-10-16 15:26:00,786 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.0% -2025-10-16 15:26:01,654 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 86.0% -2025-10-16 15:36:52,121 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:36:52] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 15:36:52,149 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:36:52] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 15:36:53,041 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:36:53] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 15:36:53,108 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:36:53] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 15:36:53,630 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:36:53] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 15:36:54,356 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:36:54] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 15:37:31,505 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:37:31] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 15:37:56,518 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:37:56] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 15:37:57,129 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:37:57] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 15:38:12,156 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 15:38:12] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 15:38:13,907 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-16 16:12:58,729 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-16 16:12:58,730 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-16 16:13:06,264 - src.core.database - INFO - 数据库初始化成功 -2025-10-16 16:13:07,749 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-16 16:13:07,769 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-16 16:13:07,823 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-16 16:13:07,823 - werkzeug - INFO - Press CTRL+C to quit -2025-10-16 16:13:09,511 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-16 16:13:09,538 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-16 16:13:09,538 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-16 16:13:15,569 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-16 16:13:15,571 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-16 16:13:15,573 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-16 16:13:15,574 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-16 16:13:15,576 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-16 16:13:15,577 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-16 16:13:15,578 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-16 16:13:15,579 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-16 16:13:15,580 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-16 16:13:15,581 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-16 16:13:15,583 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-16 16:13:15,584 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-16 16:13:15,586 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-16 16:13:15,588 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-16 16:13:15,589 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-16 16:13:15,590 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-16 16:13:15,591 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-16 16:13:15,592 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-16 16:13:15,593 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-16 16:13:15,595 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-16 16:13:15,597 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-16 16:13:15,598 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-16 16:13:15,599 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-16 16:13:15,599 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 16:13:15,600 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-16 16:13:15,907 - src.integrations.feishu_client - ERROR - 获取飞书访问令牌失败: 502 Server Error: Bad Gateway for url: https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/ -2025-10-16 16:13:15,907 - src.integrations.workorder_sync - ERROR - 飞书同步失败: 502 Server Error: Bad Gateway for url: https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/ -2025-10-16 16:13:15,909 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:13:15] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 500 - -2025-10-16 16:13:16,549 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:13:16] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 16:13:22,769 - src.main - INFO - TSP助手初始化完成 -2025-10-16 16:13:22,769 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-16 16:13:24,849 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 16:13:24,849 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-16 16:13:25,500 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 6397, 'msg': 'ok', 'tenant_access_token': 't-g104agg0Z55TJO4WS3WZKHVYIEKOGFZ3YVYHMOB3'} -2025-10-16 16:13:25,500 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104agg0Z55TJO4WS3... -2025-10-16 16:13:25,501 - src.integrations.feishu_client - INFO - 令牌有效期: 6397秒,过期时间: 2025-10-16 18:00:02 -2025-10-16 16:13:25,502 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 16:13:25,503 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 16:13:27,060 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 16:13:27,061 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 16:13:27,062 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 16:13:27,537 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 16:13:27,538 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 16:13:27,538 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 16:13:27,538 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 16:13:27,538 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 16:13:27,538 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 16:13:27,539 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 16:13:27,539 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 16:13:27,539 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 16:13:27,539 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 16:13:27,539 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 16:13:27,540 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 16:13:27,540 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 16:13:27,540 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 16:13:27,540 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 16:13:27,540 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 16:13:27,540 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-16 16:13:27,541 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-16 16:13:27,770 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 16:13:27,785 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 16:13:28,250 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': False, 'errors': []} -2025-10-16 16:13:28,251 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:13:28] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 16:13:29,427 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:13:29] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 16:13:30,681 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 16:13:30,681 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 16:13:32,202 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 16:13:32,203 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 16:13:32,205 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:13:32] "GET /api/feishu-sync/preview-feishu-data HTTP/1.1" 200 - -2025-10-16 16:13:52,197 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:13:52] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 16:13:53,179 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:13:53] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 16:13:53,662 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:13:53] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 16:13:59,158 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 16:13:59,158 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 16:13:59,158 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 16:14:00,872 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 16:14:00,873 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 16:14:00,874 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 16:14:00,874 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-16 16:14:01,151 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-16 16:14:01,377 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-16 16:14:01,377 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 16:14:01,378 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 16:14:03,556 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 16:14:03,557 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': "模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题..."}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 16:14:03,559 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-16 16:14:04,026 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 16:14:04,026 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 16:14:04,026 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 16:14:04,027 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 16:14:04,027 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 16:14:04,027 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 16:14:04,027 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 16:14:04,027 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 16:14:04,028 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 16:14:04,028 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 16:14:04,028 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 16:14:04,028 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 16:14:04,029 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 16:14:04,029 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 16:14:04,029 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 16:14:04,029 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 16:14:04,029 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-16 16:14:04,030 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-16 16:14:04,749 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-16 16:14:04,750 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:14:04] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 16:14:05,549 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:14:05] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 16:14:24,227 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:14:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 16:17:33,228 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% -2025-10-16 16:17:33,266 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.2% -2025-10-16 16:18:34,666 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.4% -2025-10-16 16:18:35,181 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.4% -2025-10-16 16:19:36,036 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.5% -2025-10-16 16:19:36,537 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.5% -2025-10-16 16:20:35,968 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:20:35] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 16:20:36,606 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:20:36] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 16:20:37,385 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:20:37] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 16:20:37,428 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.9% -2025-10-16 16:20:38,485 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.0% -2025-10-16 16:20:46,218 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 16:20:46,218 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 16:20:46,218 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 16:20:47,737 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 16:20:47,738 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 16:20:47,741 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 16:20:47,741 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-16 16:20:47,921 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-16 16:20:48,101 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-16 16:20:48,102 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 16:20:48,102 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 16:20:50,439 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 16:20:50,439 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': "模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题..."}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 16:20:50,440 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-16 16:20:50,907 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 16:20:50,908 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 16:20:50,908 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 16:20:50,908 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 16:20:50,908 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 16:20:50,908 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 16:20:50,908 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 16:20:50,909 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 16:20:50,909 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 16:20:50,909 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 16:20:50,909 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 16:20:50,909 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 16:20:50,909 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 16:20:50,910 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 16:20:50,910 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 16:20:50,910 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 16:20:50,910 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-16 16:20:50,910 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-16 16:20:51,619 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-16 16:20:51,619 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:20:51] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 16:20:52,084 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:20:52] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 16:21:06,974 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:21:06] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 16:21:39,687 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.3% -2025-10-16 16:21:39,847 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.3% -2025-10-16 16:22:41,122 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.8% -2025-10-16 16:22:41,829 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.8% -2025-10-16 16:23:42,485 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.7% -2025-10-16 16:23:43,199 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.7% -2025-10-16 16:24:44,443 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.4% -2025-10-16 16:24:44,565 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.4% -2025-10-16 16:25:45,833 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.3% -2025-10-16 16:25:46,556 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.3% -2025-10-16 16:26:30,732 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:26:30] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 16:26:32,331 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:26:32] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 16:26:33,134 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:26:33] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 16:26:35,276 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 16:26:35,276 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 16:26:35,276 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 16:26:36,804 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 16:26:36,805 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 16:26:36,806 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 16:26:36,807 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-16 16:26:37,276 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-16 16:26:37,745 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-16 16:26:37,746 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 16:26:37,746 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 16:26:41,133 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 16:26:41,134 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': "模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题..."}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 16:26:41,135 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-16 16:26:41,328 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 16:26:41,329 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 16:26:41,329 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 16:26:41,329 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 16:26:41,330 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 16:26:41,330 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 16:26:41,330 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 16:26:41,330 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 16:26:41,331 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 16:26:41,331 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 16:26:41,331 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 16:26:41,331 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 16:26:41,332 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 16:26:41,332 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 16:26:41,332 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 16:26:41,333 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 16:26:41,333 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-16 16:26:41,333 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-16 16:26:41,616 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-16 16:26:41,616 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:26:41] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 16:26:42,090 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:26:42] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 16:26:47,885 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.9% -2025-10-16 16:26:48,037 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.9% -2025-10-16 16:27:49,277 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.7% -2025-10-16 16:27:49,991 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.7% -2025-10-16 16:28:50,664 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.0% -2025-10-16 16:28:51,386 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.0% -2025-10-16 16:29:52,606 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 16:29:52,755 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.2% -2025-10-16 16:30:54,368 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.0% -2025-10-16 16:30:54,743 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 94.0% -2025-10-16 16:31:39,319 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:31:39] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 16:31:39,617 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:31:39] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 16:31:41,995 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:31:41] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 16:31:55,742 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.5% -2025-10-16 16:31:56,108 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.5% -2025-10-16 16:32:57,482 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.0% -2025-10-16 16:32:57,760 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.0% -2025-10-16 16:33:44,049 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:33:44] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 16:33:44,198 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 16:33:44,198 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 16:33:44,198 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 16:33:46,782 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 16:33:46,782 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 16:33:46,784 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 16:33:46,784 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-16 16:33:46,954 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-16 16:33:47,166 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-16 16:33:47,169 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 16:33:47,169 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 16:33:47,406 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:33:47] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 16:33:48,412 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:33:48] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 16:33:49,214 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 16:33:49,214 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': "模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题..."}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 16:33:49,215 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-16 16:33:49,396 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 16:33:49,396 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 16:33:49,397 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 16:33:49,397 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 16:33:49,397 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 16:33:49,398 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 16:33:49,398 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 16:33:49,398 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 16:33:49,398 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 16:33:49,398 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 16:33:49,399 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 16:33:49,399 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 16:33:49,399 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 16:33:49,399 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 16:33:49,400 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 16:33:49,400 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 16:33:49,400 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-16 16:33:49,400 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-16 16:33:49,682 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-16 16:33:49,684 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:33:49] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 16:33:50,171 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:33:50] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 16:33:58,855 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.4% -2025-10-16 16:33:59,743 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.4% -2025-10-16 16:34:14,657 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-16 16:52:46,924 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-16 16:52:46,925 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-16 16:52:49,226 - src.core.database - INFO - 数据库初始化成功 -2025-10-16 16:52:49,493 - __main__ - ERROR - 启动失败: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject -2025-10-16 16:53:58,597 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-16 16:53:58,598 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-16 16:54:03,981 - src.core.database - INFO - 数据库初始化成功 -2025-10-16 16:54:04,090 - __main__ - ERROR - 启动失败: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject -2025-10-16 16:54:47,386 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-16 16:54:47,387 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-16 16:54:50,127 - src.core.database - INFO - 数据库初始化成功 -2025-10-16 16:54:52,691 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-16 16:54:52,722 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-16 16:54:52,849 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-16 16:54:52,849 - werkzeug - INFO - Press CTRL+C to quit -2025-10-16 16:54:53,204 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-16 16:54:53,234 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-16 16:54:53,235 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-16 16:54:56,732 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:54:56] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 16:54:57,445 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:54:57] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 16:54:58,001 - src.main - INFO - TSP助手初始化完成 -2025-10-16 16:54:58,001 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-16 16:54:59,389 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:54:59] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 16:55:02,924 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 16:55:03,010 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 16:55:03,630 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-16 16:55:03,632 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-16 16:55:03,634 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-16 16:55:03,636 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-16 16:55:03,638 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-16 16:55:03,640 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-16 16:55:03,641 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-16 16:55:03,643 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-16 16:55:03,645 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-16 16:55:03,647 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-16 16:55:03,649 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-16 16:55:03,650 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-16 16:55:03,653 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-16 16:55:03,654 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-16 16:55:03,656 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-16 16:55:03,657 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-16 16:55:03,659 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-16 16:55:03,660 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-16 16:55:03,662 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-16 16:55:03,663 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-16 16:55:03,664 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-16 16:55:03,666 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-16 16:55:03,666 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 16:55:03,667 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-16 16:55:04,468 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 3898, 'msg': 'ok', 'tenant_access_token': 't-g104agg0Z55TJO4WS3WZKHVYIEKOGFZ3YVYHMOB3'} -2025-10-16 16:55:04,469 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104agg0Z55TJO4WS3... -2025-10-16 16:55:04,469 - src.integrations.feishu_client - INFO - 令牌有效期: 3898秒,过期时间: 2025-10-16 18:00:02 -2025-10-16 16:55:04,471 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 16:55:04,472 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 16:55:06,252 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 16:55:06,252 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 16:55:06,254 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 16:55:06,254 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-16 16:55:06,611 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-16 16:55:06,878 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760604906 -2025-10-16 16:55:07,147 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: - -问题描述:The widget weather doesn't work - -相关背景信息: -无相关背景信息 - -请提供: -1. 问题分析(分析问题的根本原因和影响范围) -2. 解决步骤(分步骤说明具体的解决方案) -3. 注意事项(需要特别注意的安全或技术要点) -4. 后续行动建议(预防措施或进一步检查建议) -5. 最终结论(简洁的总结) - -请用中文回答,保持专业性和实用性。' 返回 3 个结果 -2025-10-16 16:55:26,779 - src.core.llm_client - INFO - API请求成功 -2025-10-16 16:55:27,208 - src.integrations.ai_suggestion_service - INFO - AI建议生成成功,置信度: 0.216 -2025-10-16 16:55:27,209 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-16 16:55:27,209 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 16:55:27,210 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 16:55:28,677 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 16:55:28,678 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 1254060, 'msg': 'TextFieldConvFail', 'error': {'message': "Invalid request parameter: 'fields.AI建议.fieldValue.map[text:您好\n\n1. 问题分析: \n“天气小部件无法工作”可能是由于车机系统网络连接异常、应用服务暂时中断或软件版本存在兼容性问题导致。该问题通常不影响车辆核心功能,但会影响用户获取实时天气信息的体验。\n\n2. 解决步骤: \n① 确认车辆网络信号是否正常,避免处于无信号区域; \n② 重启车机系统,观察天气小部件是否恢复正常; \n③ 检查车机系统及天气应用是否有可用更新,建议升级至最新版本; \n④ 尝试清除天气应用缓存(设置 → 应用管理 → 天气 → 存储 → 清除缓存); \n⑤ 若仍无效,可尝试恢复车机网络设置或出厂设置(注意备份个人数据)。\n\n3. 注意事项: \n- 操作前请确保车辆处于熄火驻车状态; \n- 执行恢复出厂设置将清除个人数据,请提前备份重要信息; \n- 避免在系统升级过程中断电或重启设备。\n\n4. 后续行动建议: \n- 定期检查系统更新,保持车机系统为最新版本; \n- 若问题频繁出现,建议记录故障时间与现象,便于售后排查; \n- 可通过奇瑞车主APP反馈问题,帮助技术团队优化服务。\n\n5. 最终结论: \n天气小部件无法使用多为网络或软件临时异常,可通过重启系统、检查网络和更新软件解决。若问题持续存在,建议联系售后技术支持或进站检测。\n\n如有其他问题,请随时联系].fieldName.AI建议'. Correct format : the value of 'Multiline' must be a string. Please check and modify accordingly.", 'log_id': '2025101616552737F9B0C309E863C05426', 'troubleshooter': '排查建议查看(Troubleshooting suggestions): https://open.feishu.cn/search?from=openapi&log_id=2025101616552737F9B0C309E863C05426&code=1254060&method_id=6965347212289556482'}} -2025-10-16 16:55:28,680 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-16 16:55:28,849 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 16:55:28,850 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 16:55:28,851 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 16:55:28,851 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 16:55:28,851 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 16:55:28,852 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 16:55:28,852 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 16:55:28,852 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 16:55:28,853 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 16:55:28,853 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 16:55:28,853 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 16:55:28,854 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 16:55:28,854 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 16:55:28,854 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 16:55:28,855 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 16:55:28,855 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 16:55:28,855 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-16 16:55:28,855 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-16 16:55:29,197 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-16 16:55:29,199 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:55:29] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 16:55:29,692 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 16:55:29] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 16:56:27,866 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-16 17:04:36,490 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-16 17:04:36,491 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-16 17:04:40,369 - src.core.database - INFO - 数据库初始化成功 -2025-10-16 17:04:41,831 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-16 17:04:41,851 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-16 17:04:41,905 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-16 17:04:41,906 - werkzeug - INFO - Press CTRL+C to quit -2025-10-16 17:04:42,318 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-16 17:04:42,342 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-16 17:04:42,342 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-16 17:04:45,847 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:04:45] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 17:04:47,340 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-16 17:04:47,342 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-16 17:04:47,344 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-16 17:04:47,346 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-16 17:04:47,348 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-16 17:04:47,350 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-16 17:04:47,352 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-16 17:04:47,354 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-16 17:04:47,356 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-16 17:04:47,358 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-16 17:04:47,359 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-16 17:04:47,361 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-16 17:04:47,363 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-16 17:04:47,364 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-16 17:04:47,367 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-16 17:04:47,369 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-16 17:04:47,371 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-16 17:04:47,373 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-16 17:04:47,374 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-16 17:04:47,376 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-16 17:04:47,378 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-16 17:04:47,380 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-16 17:04:47,380 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 17:04:47,381 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-16 17:04:47,994 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:04:47] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 17:04:48,151 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 3314, 'msg': 'ok', 'tenant_access_token': 't-g104agg0Z55TJO4WS3WZKHVYIEKOGFZ3YVYHMOB3'} -2025-10-16 17:04:48,152 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104agg0Z55TJO4WS3... -2025-10-16 17:04:48,153 - src.main - INFO - TSP助手初始化完成 -2025-10-16 17:04:48,153 - src.integrations.feishu_client - INFO - 令牌有效期: 3314秒,过期时间: 2025-10-16 18:00:02 -2025-10-16 17:04:48,154 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-16 17:04:48,156 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 17:04:48,158 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:04:48,922 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:04:48] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 17:04:50,146 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:04:50,147 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 17:04:50,149 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 17:04:50,149 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-16 17:04:50,356 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-16 17:04:50,560 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760605490 -2025-10-16 17:04:51,001 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请基于以下问题描述提供处理建议: - -问题描述:The widget weather doesn't work - -相关背景信息: -无相关背景信息 - -请按照以下格式回复: -时间:问题进展,需要前方做什么 - -例如:0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 - -请用中文回答,保持简洁实用。' 返回 0 个结果 -2025-10-16 17:04:53,156 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 17:04:53,156 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 17:04:55,358 - src.core.llm_client - INFO - API请求成功 -2025-10-16 17:04:55,795 - src.integrations.ai_suggestion_service - INFO - AI建议生成成功,置信度: 0.3 -2025-10-16 17:04:55,796 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-16 17:04:55,797 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:04:55,797 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:04:57,679 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:04:57,680 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:04:57,682 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:04:57,683 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:04:59,994 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:04:59,994 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '您好:0428:用户反馈天气小部件无法使用,当前无相关背景信息。建议先确认车机网络连接状态是否正常,尝试切换手机热点连接车机网络,观察功能是否恢复。若问题依旧,请重启车机系统后再次测试。如仍未解决,建议进站检查IHU运行状态及系统日志,排查是否存在软件异常或配置问题。如有其他问题,请随时联系'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:04:59,996 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-16 17:05:00,272 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 17:05:00,272 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 17:05:00,273 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 17:05:00,273 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 17:05:00,273 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 17:05:00,274 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 17:05:00,274 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 17:05:00,274 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 17:05:00,274 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 17:05:00,275 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 17:05:00,275 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 17:05:00,275 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 17:05:00,275 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 17:05:00,276 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 17:05:00,276 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 17:05:00,276 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 17:05:00,276 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-16 17:05:00,277 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-16 17:05:00,594 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-16 17:05:00,595 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:05:00] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 17:05:01,780 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:05:01] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 17:08:50,980 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 17:08:50,980 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 17:08:50,980 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:08:51,764 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:08:51] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 17:08:52,099 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:08:52] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 17:08:52,605 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:08:52,606 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '您好:0428:用户反馈天气小部件无法使用,当前无相关背景信息。建议先确认车机网络连接状态是否正常,尝试切换手机热点连接车机网络,观察功能是否恢复。若问题依旧,请重启车机系统后再次测试。如仍未解决,建议进站检查IHU运行状态及系统日志,排查是否存在软件异常或配置问题。如有其他问题,请随时联系', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 17:08:52,607 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 17:08:52,608 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-16 17:08:52,811 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-16 17:08:53,012 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760605733 -2025-10-16 17:08:53,214 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请基于以下问题描述提供处理建议: - -问题描述:The widget weather doesn't work - -相关背景信息: -当前问题进展(历史AI建议): -您好:0428:用户反馈天气小部件无法使用,当前无相关背景信息。建议先确认车机网络连接状态是否正常,尝试切换手机热点连接车机网络,观察功能是否恢复。若问题依旧,请重启车机系统后再次测试。如仍未解决,建议进站检查IHU运行状态及系统日志,排查是否存在软件异常或配置问题。如有其他问题,请随时联系 - -请按照以下格式回复: -时间:问题进展,需要前方做什么 - -例如:0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 - -请用中文回答,保持简洁实用。' 返回 0 个结果 -2025-10-16 17:08:53,732 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:08:53] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 17:08:56,450 - src.core.llm_client - INFO - API请求成功 -2025-10-16 17:08:57,967 - src.integrations.ai_suggestion_service - INFO - AI建议生成成功,置信度: 0.3 -2025-10-16 17:08:57,967 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-16 17:08:57,968 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:08:57,968 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:08:59,693 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:08:59,694 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '您好:0428:用户反馈天气小部件无法使用,当前无相关背景信息。建议先确认车机网络连接状态是否正常,尝试切换手机热点连接车机网络,观察功能是否恢复。若问题依旧,请重启车机系统后再次测试。如仍未解决,建议进站检查IHU运行状态及系统日志,排查是否存在软件异常或配置问题。如有其他问题,请随时联系', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:08:59,695 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:08:59,695 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:08:59,865 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.9% -2025-10-16 17:09:00,359 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.9% -2025-10-16 17:09:01,858 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:09:01,858 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '您好:0428:用户反馈天气小部件无法使用,建议先确认车机网络连接状态是否正常,可尝试切换手机热点连接车机网络,观察功能是否恢复。若问题依旧,请重启车机系统后再次测试。如仍未解决,建议进站检查IHU运行状态并抓取系统日志,排查软件异常或配置问题。如有其他问题,请随时联系\n\n您好:0428:用户反馈天气小部件无法使用,当前无相关背景信息。建议先确认车机网络连接状态是否正常,尝试切换手机热点连接车机网络,观察功能是否恢复。若问题依旧,请重启车机系统后再次测试。如仍未解决,建议进站检查IHU运行状态及系统日志,排查是否存在软件异常或配置问题。如有其他问题,请随时联系'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:09:01,859 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-16 17:09:02,068 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '您好:0428:用户反馈天气小部件无法使用,当前无相关背景信息。建议先确认车机网络连接状态是否正常,尝试切换手机热点连接车机网络,观察功能是否恢复。若问题依旧,请重启车机系统后再次测试。如仍未解决,建议进站检查IHU运行状态及系统日志,排查是否存在软件异常或配置问题。如有其他问题,请随时联系', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 17:09:02,069 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 17:09:02,069 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 您好:0428:用户反馈天气小部件无法使用,当前无相关背景信息。建议先确认车机网络连接状态是否正常,尝试切换手机热点连接车机网络,观察功能是否恢复。若问题依旧,请重启车机系统后再次测试。如仍未解决,建议进站检查IHU运行状态及系统日志,排查是否存在软件异常或配置问题。如有其他问题,请随时联系 -2025-10-16 17:09:02,069 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 17:09:02,069 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 17:09:02,070 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 17:09:02,070 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 17:09:02,070 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 17:09:02,070 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 17:09:02,071 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 17:09:02,071 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 17:09:02,071 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 17:09:02,072 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 17:09:02,072 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 17:09:02,072 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 17:09:02,072 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 17:09:02,073 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 17:09:02,073 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-16 17:09:02,074 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-16 17:09:02,418 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-16 17:09:02,419 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:09:02] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 17:09:03,591 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:09:03] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 17:10:01,772 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.6% -2025-10-16 17:10:01,812 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.6% -2025-10-16 17:10:57,354 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:10:57] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 17:10:57,783 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 17:10:57,784 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 17:10:57,785 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:10:58,007 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:10:58] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 17:10:58,870 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:10:58] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 17:10:59,187 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:10:59,187 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 17:10:59,189 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 17:10:59,189 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-16 17:10:59,847 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-16 17:11:00,287 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760605860 -2025-10-16 17:11:00,492 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请基于以下问题描述提供处理建议: - -问题描述:The widget weather doesn't work - -相关背景信息: -无相关背景信息 - -请按照以下格式回复: -时间:问题进展,需要前方做什么 - -例如:0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 - -请用中文回答,保持简洁实用。' 返回 0 个结果 -2025-10-16 17:11:03,211 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.7% -2025-10-16 17:11:03,757 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.7% -2025-10-16 17:11:04,997 - src.core.llm_client - INFO - API请求成功 -2025-10-16 17:11:05,420 - src.integrations.ai_suggestion_service - INFO - AI建议生成成功,置信度: 0.3 -2025-10-16 17:11:05,420 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-16 17:11:05,421 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:11:05,421 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:11:06,413 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:11:06,413 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:11:06,414 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:11:06,415 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:11:09,137 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:11:09,137 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '您好:0428:用户反馈天气小部件无法正常使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若仍不生效,请在车辆停驶状态下长按车机重启键重启系统。如问题持续,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:11:09,138 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-16 17:11:09,344 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 17:11:09,345 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 17:11:09,345 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 17:11:09,345 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 17:11:09,346 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 17:11:09,346 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 17:11:09,346 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 17:11:09,346 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 17:11:09,347 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 17:11:09,347 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 17:11:09,347 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 17:11:09,347 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 17:11:09,348 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 17:11:09,348 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 17:11:09,348 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 17:11:09,348 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 17:11:09,349 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-16 17:11:09,349 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-16 17:11:09,668 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-16 17:11:09,669 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:11:09] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 17:11:10,773 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:11:10] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 17:12:05,159 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.6% -2025-10-16 17:12:05,187 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.6% -2025-10-16 17:12:09,698 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:12:09] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 17:12:10,004 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 17:12:10,004 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 17:12:10,004 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:12:10,346 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:12:10] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 17:12:10,425 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:12:10] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 17:12:11,581 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:12:11,581 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '您好:0428:用户反馈天气小部件无法正常使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若仍不生效,请在车辆停驶状态下长按车机重启键重启系统。如问题持续,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 17:12:11,582 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 17:12:11,583 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-16 17:12:12,026 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-16 17:12:12,589 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760605932 -2025-10-16 17:12:12,801 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请基于以下问题描述提供处理建议: - -问题描述:The widget weather doesn't work - -相关背景信息: -当前问题进展(历史AI建议): -您好:0428:用户反馈天气小部件无法正常使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若仍不生效,请在车辆停驶状态下长按车机重启键重启系统。如问题持续,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系 - -请按照以下格式回复: -时间:问题进展,需要前方做什么 - -例如:0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 - -请用中文回答,保持简洁实用。' 返回 0 个结果 -2025-10-16 17:12:20,904 - src.core.llm_client - INFO - API请求成功 -2025-10-16 17:12:21,794 - src.integrations.ai_suggestion_service - INFO - AI建议生成成功,置信度: 0.3 -2025-10-16 17:12:21,794 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-16 17:12:21,795 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:12:21,795 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:12:23,368 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:12:23,369 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '您好:0428:用户反馈天气小部件无法正常使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若仍不生效,请在车辆停驶状态下长按车机重启键重启系统。如问题持续,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:12:23,371 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:12:23,372 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:12:25,883 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:12:25,883 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '您好:0428:用户反馈天气小部件无法使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若无效,请在车辆停驶状态下长按车机重启键重启系统。如问题仍存在,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系\n\n您好:0428:用户反馈天气小部件无法正常使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若仍不生效,请在车辆停驶状态下长按车机重启键重启系统。如问题持续,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:12:25,884 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-16 17:12:26,095 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '您好:0428:用户反馈天气小部件无法正常使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若仍不生效,请在车辆停驶状态下长按车机重启键重启系统。如问题持续,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 17:12:26,095 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 17:12:26,096 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 您好:0428:用户反馈天气小部件无法正常使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若仍不生效,请在车辆停驶状态下长按车机重启键重启系统。如问题持续,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系 -2025-10-16 17:12:26,096 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 17:12:26,096 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 17:12:26,097 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 17:12:26,097 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 17:12:26,097 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 17:12:26,098 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 17:12:26,098 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 17:12:26,098 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 17:12:26,099 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 17:12:26,099 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 17:12:26,100 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 17:12:26,101 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 17:12:26,101 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 17:12:26,101 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 17:12:26,102 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-16 17:12:26,102 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-16 17:12:26,416 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-16 17:12:26,417 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:12:26] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 17:12:27,590 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:12:27] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 17:13:06,607 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.6% -2025-10-16 17:13:07,055 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.6% -2025-10-16 17:14:08,475 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.0% -2025-10-16 17:14:08,552 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 93.0% -2025-10-16 17:14:44,338 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-16 17:15:34,344 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-16 17:15:34,344 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-16 17:15:39,691 - src.core.database - INFO - 数据库初始化成功 -2025-10-16 17:15:40,838 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-16 17:15:40,854 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-16 17:15:40,906 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-16 17:15:40,906 - werkzeug - INFO - Press CTRL+C to quit -2025-10-16 17:15:41,823 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-16 17:15:41,848 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-16 17:15:41,849 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-16 17:15:47,432 - src.main - INFO - TSP助手初始化完成 -2025-10-16 17:15:47,432 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-16 17:15:47,664 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:15:47] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 17:15:47,872 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:15:47] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 17:15:48,341 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:15:48] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 17:15:48,820 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-16 17:15:48,821 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-16 17:15:48,822 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-16 17:15:48,823 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-16 17:15:48,824 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-16 17:15:48,825 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-16 17:15:48,826 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-16 17:15:48,827 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-16 17:15:48,828 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-16 17:15:48,829 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-16 17:15:48,830 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-16 17:15:48,830 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-16 17:15:48,831 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-16 17:15:48,832 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-16 17:15:48,833 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-16 17:15:48,834 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-16 17:15:48,835 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-16 17:15:48,836 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-16 17:15:48,837 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-16 17:15:48,838 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-16 17:15:48,839 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-16 17:15:48,840 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-16 17:15:48,841 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 17:15:48,841 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-16 17:15:49,220 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 2653, 'msg': 'ok', 'tenant_access_token': 't-g104agg0Z55TJO4WS3WZKHVYIEKOGFZ3YVYHMOB3'} -2025-10-16 17:15:49,220 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104agg0Z55TJO4WS3... -2025-10-16 17:15:49,220 - src.integrations.feishu_client - INFO - 令牌有效期: 2653秒,过期时间: 2025-10-16 18:00:02 -2025-10-16 17:15:49,221 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 17:15:49,222 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:15:50,673 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:15:50,673 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '您好:0428:用户反馈天气小部件无法使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若无效,请在车辆停驶状态下长按车机重启键重启系统。如问题仍存在,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系\n\n您好:0428:用户反馈天气小部件无法正常使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若仍不生效,请在车辆停驶状态下长按车机重启键重启系统。如问题持续,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 17:15:50,675 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 17:15:50,675 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-16 17:15:50,851 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-16 17:15:51,024 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760606151 -2025-10-16 17:15:51,208 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请基于以下问题描述提供处理建议: - -问题描述:The widget weather doesn't work - -相关背景信息: -当前问题进展(历史AI建议): -您好:0428:用户反馈天气小部件无法使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若无效,请在车辆停驶状态下长按车机重启键重启系统。如问题仍存在,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系 - -您好:0428:用户反馈天气小部件无法正常使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若仍不生效,请在车辆停驶状态下长按车机重启键重启系统。如问题持续,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系 - -重要:请严格按照以下格式回复,不要添加任何问候语或结尾语: -时间:问题进展,需要前方做什么 - -示例格式:0428:查询TBOX及IHU登录记录XXXXXX,流量XXX,建议用户XXXXXX,XXXXX是否恢复,如不恢复,尝试XXXXXX - -要求: -1. 直接以时间开头,不要"您好:"等问候语 -2. 不要"如有其他问题,请随时联系"等结尾语 -3. 只输出时间:具体建议内容 -4. 用中文回答,保持简洁实用' 返回 3 个结果 -2025-10-16 17:15:52,437 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 17:15:52,437 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-16 17:15:53,737 - src.core.llm_client - INFO - API请求成功 -2025-10-16 17:15:54,114 - src.integrations.ai_suggestion_service - INFO - AI建议生成成功,置信度: 0.17454545454545456 -2025-10-16 17:15:54,114 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-16 17:15:54,114 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:15:54,115 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:15:55,187 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:15:55,187 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '您好:0428:用户反馈天气小部件无法使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若无效,请在车辆停驶状态下长按车机重启键重启系统。如问题仍存在,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系\n\n您好:0428:用户反馈天气小部件无法正常使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若仍不生效,请在车辆停驶状态下长按车机重启键重启系统。如问题持续,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:15:55,188 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:15:55,189 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:15:57,295 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:15:57,295 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '0428:确认TBOX及IHU登录正常,流量绑定无异常,建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若未恢复,在车辆停驶状态下长按车机重启键重启系统;如问题仍存在,建议进站检查IHU日志及应用服务状态\n\n您好:0428:用户反馈天气小部件无法使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若无效,请在车辆停驶状态下长按车机重启键重启系统。如问题仍存在,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系\n\n您好:0428:用户反馈天气小部件无法正常使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若仍不生效,请在车辆停驶状态下长按车机重启键重启系统。如问题持续,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:15:57,297 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-16 17:15:57,473 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '您好:0428:用户反馈天气小部件无法使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若无效,请在车辆停驶状态下长按车机重启键重启系统。如问题仍存在,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系\n\n您好:0428:用户反馈天气小部件无法正常使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若仍不生效,请在车辆停驶状态下长按车机重启键重启系统。如问题持续,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 17:15:57,474 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 17:15:57,474 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 您好:0428:用户反馈天气小部件无法使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若无效,请在车辆停驶状态下长按车机重启键重启系统。如问题仍存在,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系 - -您好:0428:用户反馈天气小部件无法正常使用,已确认TBOX及IHU登录正常,流量绑定无异常。建议用户尝试通过手机热点连接车机网络,观察天气小部件是否恢复;若仍不生效,请在车辆停驶状态下长按车机重启键重启系统。如问题持续,建议进站检查IHU日志及应用服务状态。如有其他问题,请随时联系 -2025-10-16 17:15:57,474 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 17:15:57,475 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 17:15:57,475 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 17:15:57,475 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 17:15:57,475 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 17:15:57,476 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 17:15:57,476 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 17:15:57,476 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 17:15:57,477 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 17:15:57,477 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 17:15:57,477 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 17:15:57,478 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 17:15:57,478 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 17:15:57,478 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 17:15:57,478 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-16 17:15:57,479 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-16 17:15:57,746 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-16 17:15:57,747 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:15:57] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 17:15:58,314 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:15:58] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 17:18:51,007 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:18:51] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 17:18:51,076 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 17:18:51,076 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 17:18:51,077 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:18:51,175 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:18:51] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 17:18:51,909 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:18:51] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 17:18:52,655 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:18:52,656 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 17:18:52,657 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 17:18:52,657 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-16 17:18:52,880 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-16 17:18:53,093 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760606333 -2025-10-16 17:18:53,275 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请基于以下问题描述提供处理建议: - -问题描述:The widget weather doesn't work - -相关背景信息: -无相关背景信息 - -重要:请严格按照以下格式回复,不要添加任何问候语或结尾语: -时间:问题进展,需要前方做什么 - -示例格式:0428:查询TBOX及IHU登录记录XXXXXX,流量XXX,建议用户XXXXXX,XXXXX是否恢复,如不恢复,尝试XXXXXX - -要求: -1. 直接以时间开头,不要"您好:"等问候语 -2. 不要"如有其他问题,请随时联系"等结尾语 -3. 只输出时间:具体建议内容 -4. 用中文回答,保持简洁实用' 返回 3 个结果 -2025-10-16 17:18:56,591 - src.core.llm_client - INFO - API请求成功 -2025-10-16 17:18:57,514 - src.integrations.ai_suggestion_service - INFO - AI建议生成成功,置信度: 0.19200000000000003 -2025-10-16 17:18:57,515 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-16 17:18:57,516 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:18:57,516 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:18:58,620 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:18:58,620 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:18:58,621 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:18:58,622 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:19:00,716 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:19:00,716 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:19:00,718 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-16 17:19:00,891 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 17:19:00,892 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 17:19:00,892 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 17:19:00,893 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 17:19:00,893 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 17:19:00,894 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 17:19:00,894 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 17:19:00,894 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 17:19:00,894 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 17:19:00,895 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 17:19:00,895 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 17:19:00,896 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 17:19:00,896 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 17:19:00,896 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 17:19:00,897 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 17:19:00,897 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 17:19:00,897 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-16 17:19:00,897 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-16 17:19:01,167 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-16 17:19:01,168 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:19:01] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 17:19:01,701 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:19:01] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 17:19:22,751 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:19:22] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 17:19:57,858 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.7% -2025-10-16 17:19:57,920 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.7% -2025-10-16 17:20:03,314 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:20:03] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 17:20:04,028 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:20:04] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 17:20:04,178 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:20:04] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 17:20:04,279 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 17:20:04,280 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 17:20:04,280 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:20:05,608 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:20:05,609 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 17:20:05,610 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 17:20:05,610 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-16 17:20:05,785 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-16 17:20:05,956 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760606405 -2025-10-16 17:20:06,417 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请基于以下问题描述提供处理建议: - -问题描述:The widget weather doesn't work - -相关背景信息: -当前问题进展(历史AI建议): -0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查 - -重要:请严格按照以下格式回复,不要添加任何问候语或结尾语: -时间:问题进展,需要前方做什么 - -示例格式:0428:查询TBOX及IHU登录记录XXXXXX,流量XXX,建议用户XXXXXX,XXXXX是否恢复,如不恢复,尝试XXXXXX - -要求: -1. 直接以时间开头,不要"您好:"等问候语 -2. 不要"如有其他问题,请随时联系"等结尾语 -3. 只输出时间:具体建议内容 -4. 用中文回答,保持简洁实用' 返回 3 个结果 -2025-10-16 17:20:10,357 - src.core.llm_client - INFO - API请求成功 -2025-10-16 17:20:11,005 - src.integrations.ai_suggestion_service - INFO - AI建议生成成功,置信度: 0.18285714285714286 -2025-10-16 17:20:11,006 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-16 17:20:11,007 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:20:11,007 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:20:12,080 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:20:12,081 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:20:12,082 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:20:12,083 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:20:14,682 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:20:14,682 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如不恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查\n\n0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:20:14,684 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-16 17:20:14,890 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 17:20:14,891 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 17:20:14,891 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查 -2025-10-16 17:20:14,891 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 17:20:14,892 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 17:20:14,892 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 17:20:14,893 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 17:20:14,893 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 17:20:14,894 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 17:20:14,894 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 17:20:14,895 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 17:20:14,895 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 17:20:14,895 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 17:20:14,896 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 17:20:14,896 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 17:20:14,897 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 17:20:14,897 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 17:20:14,897 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-16 17:20:14,898 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-16 17:20:15,191 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-16 17:20:15,192 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:20:15] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 17:20:15,623 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:20:15] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 17:20:59,379 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.5% -2025-10-16 17:20:59,825 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.5% -2025-10-16 17:21:46,029 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:21:46] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 17:21:46,273 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:21:46] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 17:21:46,318 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 17:21:46,319 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 17:21:46,320 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:21:46,925 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:21:46] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 17:21:47,785 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:21:47,785 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如不恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查\n\n0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 17:21:47,788 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 17:21:47,788 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-16 17:21:47,970 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-16 17:21:48,148 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760606508 -2025-10-16 17:21:48,369 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请基于以下问题描述提供处理建议: - -问题描述:The widget weather doesn't work - -相关背景信息: -当前问题进展(历史AI建议): -0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如不恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查 - -0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查 - -重要:请严格按照以下格式回复,不要添加任何问候语或结尾语: -时间:问题进展,需要前方做什么 - -示例格式:0428:查询TBOX及IHU登录记录XXXXXX,流量XXX,建议用户XXXXXX,XXXXX是否恢复,如不恢复,尝试XXXXXX - -要求: -1. 直接以时间开头,不要"您好:"等问候语 -2. 不要"如有其他问题,请随时联系"等结尾语 -3. 只输出时间:具体建议内容 -4. 用中文回答,保持简洁实用' 返回 3 个结果 -2025-10-16 17:21:50,759 - src.core.llm_client - INFO - API请求成功 -2025-10-16 17:21:51,713 - src.integrations.ai_suggestion_service - INFO - AI建议生成成功,置信度: 0.17454545454545456 -2025-10-16 17:21:51,713 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-16 17:21:51,714 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:21:51,714 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:21:52,881 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:21:52,882 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如不恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查\n\n0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:21:52,884 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:21:52,885 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:21:55,228 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:21:55,229 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如不恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查\n\n0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如不恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查\n\n0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:21:55,231 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-16 17:21:55,413 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如不恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查\n\n0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 17:21:55,413 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 17:21:55,414 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如不恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查 - -0428:检查车机网络信号是否正常,确认车辆所在区域有无信号遮挡,建议重启车机系统观察天气widget是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查 -2025-10-16 17:21:55,414 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 17:21:55,414 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 17:21:55,415 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 17:21:55,415 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 17:21:55,415 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 17:21:55,416 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 17:21:55,416 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 17:21:55,417 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 17:21:55,417 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 17:21:55,417 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 17:21:55,418 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 17:21:55,418 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 17:21:55,418 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 17:21:55,419 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 17:21:55,419 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-16 17:21:55,419 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-16 17:21:55,718 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-16 17:21:55,718 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:21:55] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 17:21:56,886 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:21:56] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 17:22:00,820 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.5% -2025-10-16 17:22:01,190 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.5% -2025-10-16 17:23:02,215 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.7% -2025-10-16 17:23:03,445 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.7% -2025-10-16 17:24:03,756 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.9% -2025-10-16 17:24:04,825 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.0% -2025-10-16 17:25:05,128 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.6% -2025-10-16 17:25:06,773 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.7% -2025-10-16 17:25:26,946 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:25:26] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 17:25:27,032 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-16 17:25:27,033 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-16 17:25:27,034 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:25:27,435 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:25:27] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 17:25:28,640 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:25:28,640 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-16 17:25:28,641 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-16 17:25:28,642 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-16 17:25:28,815 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-16 17:25:28,991 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760606728 -2025-10-16 17:25:29,164 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请基于以下问题描述提供处理建议: - -问题描述:The widget weather doesn't work - -相关背景信息: -无相关背景信息 - -重要:请严格按照以下格式回复,不要添加任何问候语或结尾语: -时间:问题进展,需要前方做什么 - -示例格式:0428:查询TBOX及IHU登录记录XXXXXX,流量XXX,建议用户XXXXXX,XXXXX是否恢复,如不恢复,尝试XXXXXX - -要求: -1. 直接以时间开头,不要"您好:"等问候语 -2. 不要"如有其他问题,请随时联系"等结尾语 -3. 只输出时间:具体建议内容 -4. 用中文回答,保持简洁实用' 返回 3 个结果 -2025-10-16 17:25:29,560 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:25:29] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 17:25:32,334 - src.core.llm_client - INFO - API请求成功 -2025-10-16 17:25:32,715 - src.integrations.ai_suggestion_service - INFO - AI建议生成成功,置信度: 0.19200000000000003 -2025-10-16 17:25:32,715 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-16 17:25:32,716 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:25:32,717 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:25:33,747 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:25:33,748 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:25:33,750 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-16 17:25:33,750 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104agg0Z55TJO4WS3... -2025-10-16 17:25:35,896 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-16 17:25:35,897 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-16 17:25:35,899 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-16 17:25:36,110 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-16 17:25:36,111 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-16 17:25:36,111 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-16 17:25:36,111 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-16 17:25:36,112 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-16 17:25:36,112 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-16 17:25:36,112 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-16 17:25:36,112 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-16 17:25:36,113 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-16 17:25:36,113 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-16 17:25:36,113 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-16 17:25:36,114 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-16 17:25:36,114 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-16 17:25:36,114 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-16 17:25:36,114 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-16 17:25:36,115 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-16 17:25:36,115 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-16 17:25:36,116 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-16 17:25:36,472 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-16 17:25:36,473 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:25:36] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-16 17:25:37,075 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:25:37] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-16 17:26:06,504 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.7% -2025-10-16 17:26:08,765 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.8% -2025-10-16 17:27:08,038 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.0% -2025-10-16 17:27:10,120 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.2% -2025-10-16 17:28:09,408 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.8% -2025-10-16 17:28:12,067 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 92.0% -2025-10-16 17:29:10,852 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.2% -2025-10-16 17:29:13,419 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.3% -2025-10-16 17:30:12,232 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.9% -2025-10-16 17:30:15,362 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 91.0% -2025-10-16 17:31:09,645 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:31:09] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-16 17:31:09,662 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:31:09] "GET /api/analytics HTTP/1.1" 200 - -2025-10-16 17:31:10,275 - werkzeug - INFO - 127.0.0.1 - - [16/Oct/2025 17:31:10] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-16 17:31:13,609 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 90.9% -2025-10-16 17:31:16,737 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.1% -2025-10-17 08:37:29,527 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 08:37:29,528 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 08:37:32,181 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 08:37:34,400 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 08:37:34,414 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 08:37:34,486 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 08:37:34,488 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 08:37:34,822 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 08:37:34,858 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-17 08:37:34,858 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-17 08:37:41,563 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:41] "GET / HTTP/1.1" 200 - -2025-10-17 08:37:41,766 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:41] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-17 08:37:41,767 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:41] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-17 08:37:41,768 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:41] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-17 08:37:41,777 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:41] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-10-17 08:37:42,025 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:42] "GET /api/system/info HTTP/1.1" 200 - -2025-10-17 08:37:42,087 - websockets.server - INFO - connection open -2025-10-17 08:37:42,088 - src.web.websocket_server - INFO - 客户端连接: ('::1', 51044, 0, 0) -2025-10-17 08:37:42,089 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:42] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-17 08:37:42,475 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:42] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 08:37:42,493 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:42] "GET /favicon.ico HTTP/1.1" 404 - -2025-10-17 08:37:42,977 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-10-17 08:37:42,977 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:42] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 08:37:43,110 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:43] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:37:43,163 - src.main - INFO - TSP助手初始化完成 -2025-10-17 08:37:43,164 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-17 08:37:43,253 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-17 08:37:43,255 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-17 08:37:43,256 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-17 08:37:43,258 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-17 08:37:43,260 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-17 08:37:43,261 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-17 08:37:43,263 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-17 08:37:43,264 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-17 08:37:43,265 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-17 08:37:43,267 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-17 08:37:43,269 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-17 08:37:43,270 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-17 08:37:43,271 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-17 08:37:43,272 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-17 08:37:43,274 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-17 08:37:43,275 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-17 08:37:43,277 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-17 08:37:43,278 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-17 08:37:43,280 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-17 08:37:43,282 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-17 08:37:43,284 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-17 08:37:43,286 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-17 08:37:43,808 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:43] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 08:37:44,549 - src.main - INFO - TSP助手初始化完成 -2025-10-17 08:37:44,549 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-17 08:37:45,276 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:45] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 08:37:46,159 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:46] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 08:37:46,182 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:46] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 08:37:47,843 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:47] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:37:48,156 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:48] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 08:37:48,176 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 08:37:48,176 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 08:37:48,892 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:48] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 08:37:49,076 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:49] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:37:49,560 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 08:37:49,560 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 08:37:49,794 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:49] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:37:53,495 - src.main - INFO - TSP助手初始化完成 -2025-10-17 08:37:53,495 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-10-17 08:37:53,495 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-10-17 08:37:53,495 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-10-17 08:37:53,495 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-10-17 08:37:53,495 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-10-17 08:37:53,495 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-10-17 08:37:53,495 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-10-17 08:37:53,495 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-10-17 08:37:53,505 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-10-17 08:37:53,506 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-10-17 08:37:53,506 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-10-17 08:37:53,506 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-10-17 08:37:53,510 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-17 08:37:53,510 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-10-17 08:37:53,510 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-10-17 08:37:53,510 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-10-17 08:37:53,510 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:53] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-17 08:37:53,792 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:53] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-17 08:37:54,115 - src.main - INFO - TSP助手初始化完成 -2025-10-17 08:37:54,115 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-10-17 08:37:54,116 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-10-17 08:37:54,116 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-10-17 08:37:54,116 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-10-17 08:37:54,117 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-10-17 08:37:54,117 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-10-17 08:37:54,117 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-10-17 08:37:54,118 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-10-17 08:37:54,118 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-10-17 08:37:54,118 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-10-17 08:37:54,119 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-10-17 08:37:54,119 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-10-17 08:37:54,120 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-17 08:37:54,120 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-10-17 08:37:54,121 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-10-17 08:37:54,121 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-10-17 08:37:54,122 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:54] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-17 08:37:54,409 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:37:54] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:37:58,508 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 08:37:58,508 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 08:37:59,125 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 08:37:59,125 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 08:38:02,041 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:02] "GET /api/alerts?page=1&per_page=50 HTTP/1.1" 200 - -2025-10-17 08:38:02,664 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:38:05,941 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:05] "POST /api/batch-delete/alerts HTTP/1.1" 404 - -2025-10-17 08:38:11,125 - src.web.websocket_server - INFO - 客户端断开: ('::1', 51044, 0, 0) -2025-10-17 08:38:11,125 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:11] "GET / HTTP/1.1" 200 - -2025-10-17 08:38:11,261 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:11] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-17 08:38:11,262 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:11] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-17 08:38:11,263 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:11] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-17 08:38:11,270 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:11] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-17 08:38:11,461 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:11] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 08:38:11,465 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:11] "GET /api/system/info HTTP/1.1" 200 - -2025-10-17 08:38:11,478 - websockets.server - INFO - connection open -2025-10-17 08:38:11,479 - src.web.websocket_server - INFO - 客户端连接: ('::1', 51111, 0, 0) -2025-10-17 08:38:11,480 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:11] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-17 08:38:11,907 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:11] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 08:38:11,965 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:11] "GET /api/alerts?page=1&per_page=50 HTTP/1.1" 200 - -2025-10-17 08:38:11,966 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:11] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 08:38:12,124 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:12] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 08:38:12,208 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:12] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:38:12,854 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:12] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:38:12,914 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:12] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 08:38:12,949 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:12] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 08:38:13,644 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:13] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 08:38:14,498 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:14] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:38:15,139 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:15] "POST /api/batch-delete/alerts HTTP/1.1" 404 - -2025-10-17 08:38:18,479 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:18] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 08:38:19,327 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:19] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:38:20,875 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:20] "GET /api/alerts?page=1&per_page=5 HTTP/1.1" 200 - -2025-10-17 08:38:21,481 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:21] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:38:24,240 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:24] "POST /api/batch-delete/alerts HTTP/1.1" 404 - -2025-10-17 08:38:36,425 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:36] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-17 08:38:39,724 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:39] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-17 08:38:41,525 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:41] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-17 08:38:58,828 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:38:58] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:39:02,460 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-17 08:39:02,460 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-17 08:39:02,877 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 3064, 'msg': 'ok', 'tenant_access_token': 't-g104ah7uEYKOZIH5I63JREIAZ3VAYB6N7AGK7TW5'} -2025-10-17 08:39:02,877 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104ah7uEYKOZIH5I6... -2025-10-17 08:39:02,877 - src.integrations.feishu_client - INFO - 令牌有效期: 3064秒,过期时间: 2025-10-17 09:30:06 -2025-10-17 08:39:02,877 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 08:39:02,877 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ah7uEYKOZIH5I6... -2025-10-17 08:39:04,109 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 08:39:04,109 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 08:39:04,109 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-17 08:39:04,109 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-17 08:39:04,291 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-17 08:39:04,476 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760661544 -2025-10-17 08:39:04,711 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请基于以下问题描述提供处理建议: - -问题描述:The widget weather doesn't work - -相关背景信息: -当前问题进展(历史AI建议): -0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查 - -重要:请严格按照以下格式回复,不要添加任何问候语或结尾语: -时间:问题进展,需要前方做什么 - -示例格式:0428:查询TBOX及IHU登录记录XXXXXX,流量XXX,建议用户XXXXXX,XXXXX是否恢复,如不恢复,尝试XXXXXX - -要求: -1. 直接以时间开头,不要"您好:"等问候语 -2. 不要"如有其他问题,请随时联系"等结尾语 -3. 只输出时间:具体建议内容 -4. 用中文回答,保持简洁实用' 返回 3 个结果 -2025-10-17 08:39:07,568 - src.core.llm_client - INFO - API请求成功 -2025-10-17 08:39:07,924 - src.integrations.ai_suggestion_service - INFO - 实时对话管理器返回结果: {'success': True, 'response': '0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'message_id': 'msg_1760661547_2', 'content': '0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'knowledge_used': [{'id': 11, 'question': '主机提示无网,导航无法使用', 'answer': '1. 检查车辆网络信号,确认是否处于无信号区域。 \n2. 重启车机系统,观察网络是否恢复。 \n3. 确认SIM卡状态是否正常,必要时联系运营商检查。 \n4. 若问题持续,尝试恢复车机网络设置或升级系统版本。 \n5. 如仍无法解决,建议联系售后技术支持进一步排查。', 'category': '技术问题', 'confidence_score': 0.95, 'similarity_score': 0.1523809523809524, 'usage_count': 0, 'is_verified': True}, {'id': 1, 'question': '如何重置密码?', 'answer': "您可以通过以下步骤重置密码:1. 点击登录页面的'忘记密码'链接 2. 输入您的邮箱地址 3. 检查邮箱并点击重置链接 4. 设置新密码", 'category': '账户问题', 'confidence_score': 0.9, 'similarity_score': 0.11428571428571428, 'usage_count': 0, 'is_verified': True}, {'id': 4, 'question': '支付失败怎么办?', 'answer': '如果支付失败,请检查:1. 银行卡余额是否充足 2. 银行卡是否支持在线支付 3. 网络连接是否正常 4. 如果问题持续,请联系支付客服', 'category': '支付问题', 'confidence_score': 0.8, 'similarity_score': 0.11428571428571428, 'usage_count': 0, 'is_verified': True}], 'confidence_score': 0.18285714285714286, 'work_order_id': None, 'timestamp': '2025-10-17T08:39:07.568234'} -2025-10-17 08:39:07,924 - src.integrations.ai_suggestion_service - INFO - 原始AI响应: 0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查... -2025-10-17 08:39:07,924 - src.integrations.ai_suggestion_service - INFO - 第一层过滤开始,输入: 0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如... -2025-10-17 08:39:07,924 - src.integrations.ai_suggestion_service - INFO - 替换时间格式为: 1017 -2025-10-17 08:39:07,924 - src.integrations.ai_suggestion_service - INFO - 第一层过滤完成,输出: 1017:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如... -2025-10-17 08:39:07,940 - src.integrations.ai_suggestion_service - INFO - 第一层过滤后: 1017:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查... -2025-10-17 08:39:07,941 - src.integrations.ai_suggestion_service - INFO - 第二层过滤替换时间格式为: 1017 -2025-10-17 08:39:07,941 - src.integrations.ai_suggestion_service - INFO - 第二层过滤后: 1017:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查... -2025-10-17 08:39:07,941 - src.integrations.ai_suggestion_service - INFO - AI建议生成成功,置信度: 0.18285714285714286 -2025-10-17 08:39:07,941 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-17 08:39:07,941 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 08:39:07,941 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ah7uEYKOZIH5I6... -2025-10-17 08:39:09,010 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 08:39:09,026 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-17 08:39:09,026 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 08:39:09,026 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ah7uEYKOZIH5I6... -2025-10-17 08:39:10,621 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 08:39:10,623 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1017:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查\n\n0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-17 08:39:10,631 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-17 08:39:11,118 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-17 08:39:11,119 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 08:39:11,120 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查 -2025-10-17 08:39:11,121 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-17 08:39:11,122 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-17 08:39:11,122 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 08:39:11,123 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 08:39:11,125 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-17 08:39:11,126 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 08:39:11,127 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-17 08:39:11,127 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 08:39:11,128 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-17 08:39:11,129 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-17 08:39:11,130 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-17 08:39:11,131 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 08:39:11,132 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-17 08:39:11,132 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-17 08:39:11,133 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-17 08:39:11,133 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-17 08:39:11,859 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-17 08:39:11,860 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:39:11] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-17 08:39:12,457 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:39:12] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 08:39:46,286 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:39:46] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:39:46,293 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:39:46] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 08:39:48,227 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:39:48] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:39:49,477 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-17 08:39:49,801 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 3017, 'msg': 'ok', 'tenant_access_token': 't-g104ah7uEYKOZIH5I63JREIAZ3VAYB6N7AGK7TW5'} -2025-10-17 08:39:49,801 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104ah7uEYKOZIH5I6... -2025-10-17 08:39:49,801 - src.integrations.feishu_client - INFO - 令牌有效期: 3017秒,过期时间: 2025-10-17 09:30:06 -2025-10-17 08:39:49,801 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP -2025-10-17 08:39:49,801 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ah7uEYKOZIH5I6... -2025-10-17 08:39:50,117 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 404 -2025-10-17 08:39:50,117 - src.integrations.feishu_client - ERROR - 飞书API请求失败: 404 Client Error: Not Found for url: https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP -2025-10-17 08:39:50,117 - src.integrations.feishu_client - ERROR - 请求URL: https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP -2025-10-17 08:39:50,117 - src.integrations.feishu_client - ERROR - 请求方法: GET -2025-10-17 08:39:50,117 - src.integrations.feishu_client - ERROR - 请求头: {'Authorization': 'Bearer t-g104ah7uEYKOZIH5I63JREIAZ3VAYB6N7AGK7TW5', 'Content-Type': 'application/json; charset=utf-8'} -2025-10-17 08:39:50,117 - src.integrations.feishu_permission_checker - ERROR - 获取表格信息失败: 404 Client Error: Not Found for url: https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP -2025-10-17 08:39:50,117 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 08:39:50,117 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ah7uEYKOZIH5I6... -2025-10-17 08:39:51,224 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 08:39:51,224 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1017:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查\n\n0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 08:39:51,224 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 08:39:51,224 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ah7uEYKOZIH5I6... -2025-10-17 08:39:52,259 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 08:39:52,259 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1017:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查\n\n0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 08:39:52,276 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 08:39:52,276 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ah7uEYKOZIH5I6... -2025-10-17 08:39:53,008 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 08:39:53,008 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 1254045, 'msg': 'FieldNameNotFound', 'error': {'message': "Invalid request parameter: 'fields.测试字段'. Correct format : field_name not found. Please check and modify accordingly.", 'log_id': '202510170839522C7728A2353351D86B51', 'troubleshooter': '排查建议查看(Troubleshooting suggestions): https://open.feishu.cn/search?from=openapi&log_id=202510170839522C7728A2353351D86B51&code=1254045&method_id=6965347212289556482'}} -2025-10-17 08:39:53,008 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/fields -2025-10-17 08:39:53,008 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ah7uEYKOZIH5I6... -2025-10-17 08:39:53,559 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 08:39:53,559 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'field_id': 'fld7I3NbPC', 'field_name': 'TR Number', 'is_primary': True, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'flddTS2aZf', 'field_name': 'Source', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optJrccTdA', 'name': 'Telegram channel'}, {'color': 1, 'id': 'opt9cbN7z0', 'name': 'Mail'}, {'color': 2, 'id': 'optKkubttZ', 'name': 'Omoda team'}, {'color': 3, 'id': 'optTut6lHO', 'name': 'Autosales team (dealer)'}, {'color': 4, 'id': 'opt1AswjVU', 'name': 'Telegram bot'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fldtIanFAn', 'field_name': 'Date creation', 'is_primary': False, 'property': {'auto_fill': False, 'date_formatter': 'yyyy/MM/dd'}, 'type': 5, 'ui_type': 'DateTime'}, {'field_id': 'fld5UkEqYc', 'field_name': 'Type of problem', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld2bTSauo', 'field_name': 'TR Description', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fldeybeSlU', 'field_name': '处理过程', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fldIfA4beS', 'field_name': 'AI建议', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld4nkalKl', 'field_name': 'TR tracking', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld4BFLp57', 'field_name': 'TR Level', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'opt6tAqVaF', 'name': 'Medium'}, {'color': 1, 'id': 'optBTNHThl', 'name': 'Low'}, {'color': 2, 'id': 'optSVSvjch', 'name': 'High '}, {'color': 3, 'id': 'optPBvZVsh', 'name': 'Critical'}, {'color': 4, 'id': 'opt03x9uLn', 'name': 'High'}, {'color': 5, 'id': 'optxdSWBlo', 'name': 'unconfirmed'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fld3vJzZla', 'field_name': 'TR Status', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optFrBl64E', 'name': 'close'}, {'color': 1, 'id': 'optYPTYuPn', 'name': 'temporary close'}, {'color': 2, 'id': 'optI2EV9oq', 'name': 'OTA'}, {'color': 3, 'id': 'optBEWf6Ur', 'name': 'Processing'}, {'color': 4, 'id': 'optGpjwtDr', 'name': 'open'}, {'color': 5, 'id': 'optPVmHaVn', 'name': 'Analysising'}, {'color': 6, 'id': 'optFNvUYLk', 'name': 'Collecting problem-infor'}, {'color': 7, 'id': 'optFiDSv0G', 'name': 'on-site handling'}, {'color': 8, 'id': 'optTmlcVd9', 'name': 'unconfirming'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fld5DXGwzQ', 'field_name': 'Module(模块)', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optLT3jlDD', 'name': '用户EXEED-APP(User)'}, {'color': 1, 'id': 'optHEqkqET', 'name': 'DMC'}, {'color': 2, 'id': 'optHsOvMbr', 'name': '车控APP(Car control)'}, {'color': 3, 'id': 'optoq8zgX2', 'name': 'TBOX'}, {'color': 4, 'id': 'optf1vKpt7', 'name': 'local O&M'}, {'color': 5, 'id': 'opthvxZ8zn', 'name': 'MNO'}, {'color': 6, 'id': 'optE9Yyd96', 'name': 'O&J-APP'}, {'color': 7, 'id': 'optu7g5hXu', 'name': 'TSP'}, {'color': 8, 'id': 'optsglYLPs', 'name': '生态/ecologically'}, {'color': 9, 'id': 'optYqCpH3I', 'name': 'OTA'}, {'color': 10, 'id': 'optHaAymcs', 'name': 'PKI'}, {'color': 0, 'id': 'optp8Mar7t', 'name': 'MES'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fldHl8gKFH', 'field_name': 'Wilfulness(责任人)', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fldJcGUgmD', 'field_name': 'Date of close TR', 'is_primary': False, 'property': {'auto_fill': False, 'date_formatter': 'yyyy/MM/dd'}, 'type': 5, 'ui_type': 'DateTime'}, {'field_id': 'fldZXHpclE', 'field_name': 'Vehicle Type01', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optu1LH6rf', 'name': 'TEST'}, {'color': 1, 'id': 'optPGJwkW2', 'name': 'EXEED VX FL(M36T)'}, {'color': 2, 'id': 'optkCi7LYA', 'name': 'EXEED RX(T22)'}, {'color': 3, 'id': 'optRHhMbEO', 'name': 'JAECOO J7(T1EJ)'}, {'color': 4, 'id': 'optUA5Bg4X', 'name': 'Not related to Cars'}, {'color': 5, 'id': 'optPH7cw7Q', 'name': 'All projects'}, {'color': 6, 'id': 'optvNNzxT2', 'name': 'Tiggo9 (T28)'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fld5TAAbXr', 'field_name': 'VIN|sim', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld75ZCRsJ', 'field_name': 'SIM', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fldwP50ZGo', 'field_name': 'Created by', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optqKr5fiu', 'name': 'Andrey Grishin'}, {'color': 1, 'id': 'optnI62Ird', 'name': 'Evgeniy'}, {'color': 2, 'id': 'optl3XuXpN', 'name': 'Max Pavlov'}, {'color': 3, 'id': 'optLys0j10', 'name': 'Kostya'}, {'color': 4, 'id': 'opt9gwWHlF', 'name': 'Vsevolod'}, {'color': 5, 'id': 'optm3pqIv1', 'name': 'Vsevolod Tsoi'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fld5gTFrSm', 'field_name': 'App remote control version', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld3VCUU4U', 'field_name': 'HMI SW', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optKaRaeku', 'name': '0.3.0'}, {'color': 1, 'id': 'optR4rREAC', 'name': '00.01.00'}, {'color': 2, 'id': 'optdchXwsg', 'name': 'n/a'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fld7ieMCdz', 'field_name': '父记录', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld2X8Bf6R', 'field_name': 'Has it been updated on the same day', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'opthTH6hs7', 'name': 'Not'}, {'color': 1, 'id': 'optTT8rQtA', 'name': 'Done'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fldPKr4W2i', 'field_name': 'Operating time', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}], 'page_token': 'fldPKr4W2i', 'total': 22}, 'msg': 'success'} -2025-10-17 08:39:53,559 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP -2025-10-17 08:39:53,559 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ah7uEYKOZIH5I6... -2025-10-17 08:39:53,856 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 404 -2025-10-17 08:39:53,856 - src.integrations.feishu_client - ERROR - 飞书API请求失败: 404 Client Error: Not Found for url: https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP -2025-10-17 08:39:53,856 - src.integrations.feishu_client - ERROR - 请求URL: https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP -2025-10-17 08:39:53,856 - src.integrations.feishu_client - ERROR - 请求方法: GET -2025-10-17 08:39:53,856 - src.integrations.feishu_client - ERROR - 请求头: {'Authorization': 'Bearer t-g104ah7uEYKOZIH5I63JREIAZ3VAYB6N7AGK7TW5', 'Content-Type': 'application/json; charset=utf-8'} -2025-10-17 08:39:53,856 - src.integrations.feishu_permission_checker - ERROR - 获取表格信息失败: 404 Client Error: Not Found for url: https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP -2025-10-17 08:39:53,856 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 08:39:53,856 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ah7uEYKOZIH5I6... -2025-10-17 08:39:54,977 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 08:39:54,977 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1017:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查\n\n0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 08:39:54,977 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 08:39:54,977 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ah7uEYKOZIH5I6... -2025-10-17 08:39:55,996 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 08:39:55,997 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1017:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查\n\n0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 08:39:55,999 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 08:39:55,999 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ah7uEYKOZIH5I6... -2025-10-17 08:39:56,740 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 08:39:56,740 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 1254045, 'msg': 'FieldNameNotFound', 'error': {'message': "Invalid request parameter: 'fields.测试字段'. Correct format : field_name not found. Please check and modify accordingly.", 'log_id': '202510170839560EF3F2A35C33012434D5', 'troubleshooter': '排查建议查看(Troubleshooting suggestions): https://open.feishu.cn/search?from=openapi&log_id=202510170839560EF3F2A35C33012434D5&code=1254045&method_id=6965347212289556482'}} -2025-10-17 08:39:56,740 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/fields -2025-10-17 08:39:56,740 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ah7uEYKOZIH5I6... -2025-10-17 08:39:57,361 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 08:39:57,362 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'field_id': 'fld7I3NbPC', 'field_name': 'TR Number', 'is_primary': True, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'flddTS2aZf', 'field_name': 'Source', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optJrccTdA', 'name': 'Telegram channel'}, {'color': 1, 'id': 'opt9cbN7z0', 'name': 'Mail'}, {'color': 2, 'id': 'optKkubttZ', 'name': 'Omoda team'}, {'color': 3, 'id': 'optTut6lHO', 'name': 'Autosales team (dealer)'}, {'color': 4, 'id': 'opt1AswjVU', 'name': 'Telegram bot'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fldtIanFAn', 'field_name': 'Date creation', 'is_primary': False, 'property': {'auto_fill': False, 'date_formatter': 'yyyy/MM/dd'}, 'type': 5, 'ui_type': 'DateTime'}, {'field_id': 'fld5UkEqYc', 'field_name': 'Type of problem', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld2bTSauo', 'field_name': 'TR Description', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fldeybeSlU', 'field_name': '处理过程', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fldIfA4beS', 'field_name': 'AI建议', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld4nkalKl', 'field_name': 'TR tracking', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld4BFLp57', 'field_name': 'TR Level', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'opt6tAqVaF', 'name': 'Medium'}, {'color': 1, 'id': 'optBTNHThl', 'name': 'Low'}, {'color': 2, 'id': 'optSVSvjch', 'name': 'High '}, {'color': 3, 'id': 'optPBvZVsh', 'name': 'Critical'}, {'color': 4, 'id': 'opt03x9uLn', 'name': 'High'}, {'color': 5, 'id': 'optxdSWBlo', 'name': 'unconfirmed'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fld3vJzZla', 'field_name': 'TR Status', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optFrBl64E', 'name': 'close'}, {'color': 1, 'id': 'optYPTYuPn', 'name': 'temporary close'}, {'color': 2, 'id': 'optI2EV9oq', 'name': 'OTA'}, {'color': 3, 'id': 'optBEWf6Ur', 'name': 'Processing'}, {'color': 4, 'id': 'optGpjwtDr', 'name': 'open'}, {'color': 5, 'id': 'optPVmHaVn', 'name': 'Analysising'}, {'color': 6, 'id': 'optFNvUYLk', 'name': 'Collecting problem-infor'}, {'color': 7, 'id': 'optFiDSv0G', 'name': 'on-site handling'}, {'color': 8, 'id': 'optTmlcVd9', 'name': 'unconfirming'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fld5DXGwzQ', 'field_name': 'Module(模块)', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optLT3jlDD', 'name': '用户EXEED-APP(User)'}, {'color': 1, 'id': 'optHEqkqET', 'name': 'DMC'}, {'color': 2, 'id': 'optHsOvMbr', 'name': '车控APP(Car control)'}, {'color': 3, 'id': 'optoq8zgX2', 'name': 'TBOX'}, {'color': 4, 'id': 'optf1vKpt7', 'name': 'local O&M'}, {'color': 5, 'id': 'opthvxZ8zn', 'name': 'MNO'}, {'color': 6, 'id': 'optE9Yyd96', 'name': 'O&J-APP'}, {'color': 7, 'id': 'optu7g5hXu', 'name': 'TSP'}, {'color': 8, 'id': 'optsglYLPs', 'name': '生态/ecologically'}, {'color': 9, 'id': 'optYqCpH3I', 'name': 'OTA'}, {'color': 10, 'id': 'optHaAymcs', 'name': 'PKI'}, {'color': 0, 'id': 'optp8Mar7t', 'name': 'MES'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fldHl8gKFH', 'field_name': 'Wilfulness(责任人)', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fldJcGUgmD', 'field_name': 'Date of close TR', 'is_primary': False, 'property': {'auto_fill': False, 'date_formatter': 'yyyy/MM/dd'}, 'type': 5, 'ui_type': 'DateTime'}, {'field_id': 'fldZXHpclE', 'field_name': 'Vehicle Type01', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optu1LH6rf', 'name': 'TEST'}, {'color': 1, 'id': 'optPGJwkW2', 'name': 'EXEED VX FL(M36T)'}, {'color': 2, 'id': 'optkCi7LYA', 'name': 'EXEED RX(T22)'}, {'color': 3, 'id': 'optRHhMbEO', 'name': 'JAECOO J7(T1EJ)'}, {'color': 4, 'id': 'optUA5Bg4X', 'name': 'Not related to Cars'}, {'color': 5, 'id': 'optPH7cw7Q', 'name': 'All projects'}, {'color': 6, 'id': 'optvNNzxT2', 'name': 'Tiggo9 (T28)'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fld5TAAbXr', 'field_name': 'VIN|sim', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld75ZCRsJ', 'field_name': 'SIM', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fldwP50ZGo', 'field_name': 'Created by', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optqKr5fiu', 'name': 'Andrey Grishin'}, {'color': 1, 'id': 'optnI62Ird', 'name': 'Evgeniy'}, {'color': 2, 'id': 'optl3XuXpN', 'name': 'Max Pavlov'}, {'color': 3, 'id': 'optLys0j10', 'name': 'Kostya'}, {'color': 4, 'id': 'opt9gwWHlF', 'name': 'Vsevolod'}, {'color': 5, 'id': 'optm3pqIv1', 'name': 'Vsevolod Tsoi'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fld5gTFrSm', 'field_name': 'App remote control version', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld3VCUU4U', 'field_name': 'HMI SW', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'optKaRaeku', 'name': '0.3.0'}, {'color': 1, 'id': 'optR4rREAC', 'name': '00.01.00'}, {'color': 2, 'id': 'optdchXwsg', 'name': 'n/a'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fld7ieMCdz', 'field_name': '父记录', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}, {'field_id': 'fld2X8Bf6R', 'field_name': 'Has it been updated on the same day', 'is_primary': False, 'property': {'options': [{'color': 0, 'id': 'opthTH6hs7', 'name': 'Not'}, {'color': 1, 'id': 'optTT8rQtA', 'name': 'Done'}]}, 'type': 3, 'ui_type': 'SingleSelect'}, {'field_id': 'fldPKr4W2i', 'field_name': 'Operating time', 'is_primary': False, 'property': None, 'type': 1, 'ui_type': 'Text'}], 'page_token': 'fldPKr4W2i', 'total': 22}, 'msg': 'success'} -2025-10-17 08:39:57,363 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:39:57] "GET /api/feishu-sync/check-permissions HTTP/1.1" 200 - -2025-10-17 08:39:58,113 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:39:58] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-10-17 08:39:58,124 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:39:58] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-10-17 08:39:58,124 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:39:58] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-10-17 08:39:58,124 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:39:58] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-10-17 08:40:26,374 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:40:26] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:40:29,338 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:40:29] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 08:40:29,669 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:40:29] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:40:30,342 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:40:30] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:40:31,275 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:40:31] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 08:40:36,659 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:40:36] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:40:36,659 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:40:36] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-17 08:40:36,659 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:40:36] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-17 08:40:41,476 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:40:41] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-17 08:40:41,477 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:40:41] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-17 08:40:58,922 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:40:58] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 08:40:59,646 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:40:59] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:42:11,306 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:42:11] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:42:11,405 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:42:11] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 08:42:11,471 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:42:11] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-17 08:42:11,471 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:42:11] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-17 08:42:12,122 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:42:12] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:43:08,885 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:08] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:43:11,469 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:11] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-17 08:43:11,471 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:11] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-17 08:43:17,202 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:17] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 08:43:18,605 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:18] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:43:19,159 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:19] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:43:19,480 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:19] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-17 08:43:24,054 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:24] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-17 08:43:25,088 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:25] "GET /api/token-monitor/stats HTTP/1.1" 200 - -2025-10-17 08:43:25,629 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:25] "GET /api/token-monitor/records HTTP/1.1" 200 - -2025-10-17 08:43:27,038 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:27] "GET /api/ai-monitor/stats HTTP/1.1" 200 - -2025-10-17 08:43:27,585 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:27] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - -2025-10-17 08:43:27,607 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:27] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - -2025-10-17 08:43:28,372 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:28] "GET /api/token-monitor/chart HTTP/1.1" 200 - -2025-10-17 08:43:28,489 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:28] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - -2025-10-17 08:43:48,786 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:48] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-10-17 08:43:48,805 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:48] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-10-17 08:43:48,805 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:48] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-10-17 08:43:48,805 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:48] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-10-17 08:43:52,215 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:52] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:43:59,684 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:59] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 08:43:59,809 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:43:59] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:44:01,139 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:01] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 08:44:01,765 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:01] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:44:10,155 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:10] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 08:44:10,602 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:10] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 08:44:10,799 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:10] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:44:10,988 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:10] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 08:44:11,471 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:11] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 08:44:11,705 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:11] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 08:44:11,725 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:11] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 08:44:12,135 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:12] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:44:12,218 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:12] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 08:44:12,604 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:12] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 08:44:12,675 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:12] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 08:44:13,316 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:13] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:44:13,400 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:13] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 08:44:13,420 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:13] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 08:44:14,195 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:14] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 08:44:16,118 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:44:16] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:46:39,517 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:39] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:46:39,652 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:39] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 08:46:40,518 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:40] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:46:40,702 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:40] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-17 08:46:40,703 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:40] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-17 08:46:41,836 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:41] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:46:42,439 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:42] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:46:43,950 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:43] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-17 08:46:44,951 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:44] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:46:45,451 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:45] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-17 08:46:50,650 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:50] "GET /api/knowledge?page=1&per_page=5 HTTP/1.1" 200 - -2025-10-17 08:46:52,404 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:52] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 08:46:54,539 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:54] "GET /api/ai-monitor/stats HTTP/1.1" 200 - -2025-10-17 08:46:55,033 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:55] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - -2025-10-17 08:46:55,066 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:55] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - -2025-10-17 08:46:55,166 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:55] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - -2025-10-17 08:46:55,625 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:55] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:46:56,694 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:56] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 08:46:57,412 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:57] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:46:58,516 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:58] "GET /api/ai-monitor/stats HTTP/1.1" 200 - -2025-10-17 08:46:59,033 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:59] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - -2025-10-17 08:46:59,083 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:59] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - -2025-10-17 08:46:59,149 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:46:59] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - -2025-10-17 08:47:02,584 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:02] "GET /api/token-monitor/stats HTTP/1.1" 200 - -2025-10-17 08:47:02,633 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:02] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-10-17 08:47:02,653 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:02] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-10-17 08:47:02,653 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:02] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-10-17 08:47:02,655 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:02] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-10-17 08:47:03,050 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:03] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-17 08:47:03,234 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:03] "GET /api/token-monitor/records HTTP/1.1" 200 - -2025-10-17 08:47:05,839 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:05] "GET /api/token-monitor/chart HTTP/1.1" 200 - -2025-10-17 08:47:14,141 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:14] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 08:47:14,568 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:14] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 08:47:14,784 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:14] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:47:14,866 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:14] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 08:47:15,734 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:15] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 08:47:15,735 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:15] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 08:47:16,459 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:16] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 08:47:17,252 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:17] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 08:47:17,271 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:17] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-17 08:47:17,282 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:17] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-17 08:47:22,123 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:47:22] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:51:36,401 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:51:36] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 08:51:36,453 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:51:36] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 08:51:37,335 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 08:51:37] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 09:45:20,153 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 09:45:20] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 09:45:21,956 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 09:45:21] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 09:45:23,404 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 09:45:23] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 10:24:16,706 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:16] "GET /dashboard HTTP/1.1" 200 - -2025-10-17 10:24:16,745 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:16] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-17 10:24:16,895 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:16] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-17 10:24:17,046 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:17] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-10-17 10:24:17,203 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:17] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-17 10:24:17,306 - websockets.server - INFO - connection open -2025-10-17 10:24:17,307 - src.web.websocket_server - INFO - 客户端连接: ('::1', 59056, 0, 0) -2025-10-17 10:24:17,627 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:17] "GET /api/system/info HTTP/1.1" 200 - -2025-10-17 10:24:17,629 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:17] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 10:24:17,944 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:17] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-17 10:24:18,265 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:18] "GET /favicon.ico HTTP/1.1" 404 - -2025-10-17 10:24:18,644 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:18] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 10:24:18,710 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:18] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 10:24:18,823 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:18] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 10:24:18,870 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:18] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 10:24:19,905 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:19] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 10:24:20,147 - src.web.websocket_server - INFO - 客户端断开: ('::1', 59056, 0, 0) -2025-10-17 10:24:20,216 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:20] "GET /dashboard HTTP/1.1" 200 - -2025-10-17 10:24:20,474 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:20] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-17 10:24:20,553 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:20] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-17 10:24:20,554 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:20] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-17 10:24:20,559 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:20] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-17 10:24:20,596 - websockets.server - INFO - connection open -2025-10-17 10:24:20,597 - src.web.websocket_server - INFO - 客户端连接: ('::1', 59099, 0, 0) -2025-10-17 10:24:20,905 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:20] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 10:24:20,909 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:20] "GET /api/system/info HTTP/1.1" 200 - -2025-10-17 10:24:21,220 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:21] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-17 10:24:21,351 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:21] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 10:24:21,506 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:21] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 10:24:21,615 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:21] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 10:24:21,625 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:21] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 10:24:22,666 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:22] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 10:24:23,002 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:23] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 10:24:24,005 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:24] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 10:24:24,338 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:24] "GET /api/ml-analysis/model/info HTTP/1.1" 404 - -2025-10-17 10:24:25,066 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:24:25] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 10:26:01,300 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-17 10:27:28,788 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 10:27:28,788 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 10:27:31,395 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 10:27:33,339 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 10:27:33,353 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 10:27:38,680 - src.analytics.ml_analysis - INFO - 机器学习分析管理器初始化完成 -2025-10-17 10:27:38,766 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 10:27:38,769 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 10:27:39,140 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 10:27:39,197 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-17 10:27:39,200 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-17 10:27:42,224 - src.analytics.ml_analysis - INFO - 未找到预训练模型,需要重新训练 -2025-10-17 10:27:42,230 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:27:42] "GET /api/ml-analysis/model/info HTTP/1.1" 200 - -2025-10-17 10:28:02,590 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 10:28:02,592 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 10:28:04,899 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 10:28:06,179 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 10:28:06,186 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 10:28:06,357 - __main__ - ERROR - 启动失败: No module named 'lightgbm' -2025-10-17 10:29:52,880 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:52] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 10:29:53,022 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-10-17 10:29:53,024 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:53] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 10:29:53,242 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:53] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 10:29:53,284 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:53] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 10:29:53,301 - src.tool_management.system_optimizer - INFO - 已初始化 4 个优化规则 -2025-10-17 10:29:53,304 - src.tool_management.system_optimizer - INFO - 已初始化 4 个优化规则 -2025-10-17 10:29:53,305 - src.main - INFO - TSP助手初始化完成 -2025-10-17 10:29:53,307 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-17 10:29:53,337 - src.analytics.ml_analysis - INFO - 未找到预训练模型,需要重新训练 -2025-10-17 10:29:53,339 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:53] "GET /api/ml-analysis/model/info HTTP/1.1" 200 - -2025-10-17 10:29:53,551 - src.tool_management.system_optimizer - INFO - 已初始化 4 个优化规则 -2025-10-17 10:29:53,560 - src.tool_management.system_optimizer - INFO - 已初始化 4 个优化规则 -2025-10-17 10:29:53,563 - src.main - INFO - TSP助手初始化完成 -2025-10-17 10:29:53,565 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-17 10:29:53,673 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:53] "GET /api/ml-analysis/data-files HTTP/1.1" 200 - -2025-10-17 10:29:53,866 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:53] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 10:29:54,005 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:54] "GET /api/ml-analysis/categories HTTP/1.1" 200 - -2025-10-17 10:29:54,377 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:54] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 10:29:54,404 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:54] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 10:29:55,502 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:55] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 10:29:55,854 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:55] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 10:29:57,101 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:57] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 10:29:57,423 - src.analytics.ml_analysis - INFO - 未找到预训练模型,需要重新训练 -2025-10-17 10:29:57,426 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:57] "GET /api/ml-analysis/model/info HTTP/1.1" 200 - -2025-10-17 10:29:57,747 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:57] "GET /api/ml-analysis/data-files HTTP/1.1" 200 - -2025-10-17 10:29:58,064 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:58] "GET /api/ml-analysis/categories HTTP/1.1" 200 - -2025-10-17 10:29:58,174 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:29:58] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 10:30:58,086 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 10:30:58,086 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 10:31:00,529 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 10:31:02,405 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 10:31:02,421 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 10:31:03,820 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:03] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 10:31:04,113 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:04] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 10:31:04,440 - src.analytics.ml_analysis - INFO - 未找到预训练模型,需要重新训练 -2025-10-17 10:31:04,444 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:04] "GET /api/ml-analysis/model/info HTTP/1.1" 200 - -2025-10-17 10:31:04,771 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:04] "GET /api/ml-analysis/data-files HTTP/1.1" 200 - -2025-10-17 10:31:04,941 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:04] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 10:31:05,095 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:05] "GET /api/ml-analysis/categories HTTP/1.1" 200 - -2025-10-17 10:31:05,467 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:05] "GET /dashboard HTTP/1.1" 200 - -2025-10-17 10:31:05,944 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:05] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-17 10:31:05,945 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:05] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-17 10:31:05,948 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:05] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-17 10:31:06,069 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:06] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-10-17 10:31:06,119 - websockets.server - INFO - connection open -2025-10-17 10:31:06,127 - src.web.websocket_server - INFO - 客户端连接: ('::1', 59728, 0, 0) -2025-10-17 10:31:06,421 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:06] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 10:31:06,431 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:06] "GET /api/system/info HTTP/1.1" 200 - -2025-10-17 10:31:06,749 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:06] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-17 10:31:06,974 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:06] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 10:31:07,204 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:07] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 10:31:07,205 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:07] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 10:31:07,476 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-17 10:31:07,482 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-17 10:31:07,485 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-17 10:31:07,489 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-17 10:31:07,494 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-17 10:31:07,501 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-17 10:31:07,505 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-17 10:31:07,509 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-17 10:31:07,513 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-17 10:31:07,516 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-17 10:31:07,519 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-17 10:31:07,524 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-17 10:31:07,527 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-17 10:31:07,531 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-17 10:31:07,534 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-17 10:31:07,539 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-17 10:31:07,543 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-17 10:31:07,549 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-17 10:31:07,553 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-17 10:31:07,566 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-17 10:31:07,569 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-17 10:31:07,573 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-17 10:31:08,066 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:08] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 10:31:08,396 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:08] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 10:31:08,639 - src.analytics.ml_analysis - INFO - 机器学习分析管理器初始化完成 -2025-10-17 10:31:08,722 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:08] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 10:31:09,096 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 10:31:09,123 - root - ERROR - WebSocket服务器启动失败: [Errno 10048] error while attempting to bind on address ('127.0.0.1', 8765): 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 -2025-10-17 10:31:09,891 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:09] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 10:31:10,201 - src.analytics.ml_analysis - INFO - 未找到预训练模型,需要重新训练 -2025-10-17 10:31:10,203 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:10] "GET /api/ml-analysis/model/info HTTP/1.1" 200 - -2025-10-17 10:31:10,518 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:10] "GET /api/ml-analysis/data-files HTTP/1.1" 200 - -2025-10-17 10:31:10,585 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:10] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 10:31:10,835 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:10] "GET /api/ml-analysis/categories HTTP/1.1" 200 - -2025-10-17 10:31:26,997 - src.analytics.ml_analysis - INFO - 未找到预训练模型,需要重新训练 -2025-10-17 10:31:26,999 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:26] "GET /api/ml-analysis/model/info HTTP/1.1" 200 - -2025-10-17 10:31:27,843 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:27] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 10:31:27,986 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:27] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 10:31:28,295 - src.analytics.ml_analysis - INFO - 未找到预训练模型,需要重新训练 -2025-10-17 10:31:28,298 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:28] "GET /api/ml-analysis/model/info HTTP/1.1" 200 - -2025-10-17 10:31:28,611 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:28] "GET /api/ml-analysis/data-files HTTP/1.1" 200 - -2025-10-17 10:31:28,850 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:28] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 10:31:28,928 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:28] "GET /api/ml-analysis/categories HTTP/1.1" 200 - -2025-10-17 10:31:29,680 - src.tool_management.tool_manager - INFO - 注册工具: search_knowledge (自动分析参数: 2 个) -2025-10-17 10:31:29,680 - src.tool_management.tool_manager - INFO - 注册工具: search_knowledge (自动分析参数: 2 个) -2025-10-17 10:31:29,683 - src.tool_management.tool_manager - INFO - 注册工具: create_work_order (自动分析参数: 4 个) -2025-10-17 10:31:29,685 - src.tool_management.tool_manager - INFO - 注册工具: create_work_order (自动分析参数: 4 个) -2025-10-17 10:31:29,686 - src.tool_management.tool_manager - INFO - 注册工具: analyze_system_performance (自动分析参数: 2 个) -2025-10-17 10:31:29,688 - src.tool_management.tool_manager - INFO - 注册工具: analyze_system_performance (自动分析参数: 2 个) -2025-10-17 10:31:29,689 - src.tool_management.tool_manager - INFO - 注册工具: optimize_system_config (自动分析参数: 2 个) -2025-10-17 10:31:29,691 - src.tool_management.tool_manager - INFO - 注册工具: optimize_system_config (自动分析参数: 2 个) -2025-10-17 10:31:29,694 - src.tool_management.tool_manager - INFO - 已注册 4 个默认工具 -2025-10-17 10:31:29,695 - src.tool_management.tool_manager - INFO - 已注册 4 个默认工具 -2025-10-17 10:31:29,697 - src.tool_management.tool_manager - INFO - 自动化参数配置已加载 -2025-10-17 10:31:29,698 - src.tool_management.tool_manager - INFO - 自动化参数配置已加载 -2025-10-17 10:31:29,699 - src.tool_management.auto_param_config - INFO - 已初始化 5 个参数策略 -2025-10-17 10:31:29,700 - src.tool_management.auto_param_config - INFO - 已初始化 5 个参数策略 -2025-10-17 10:31:29,703 - src.tool_management.auto_param_config - INFO - 参数学习线程已启动 -2025-10-17 10:31:29,704 - src.tool_management.auto_param_config - INFO - 参数学习线程已启动 -2025-10-17 10:31:31,719 - src.tool_management.system_optimizer - INFO - 已初始化 4 个优化规则 -2025-10-17 10:31:31,719 - src.tool_management.system_optimizer - INFO - 已初始化 4 个优化规则 -2025-10-17 10:31:31,721 - src.tool_management.intelligent_monitor - INFO - 智能监控循环已启动 -2025-10-17 10:31:31,721 - src.tool_management.intelligent_monitor - INFO - 智能监控服务已启动 -2025-10-17 10:31:31,723 - src.tool_management.intelligent_monitor - INFO - 智能监控循环已启动 -2025-10-17 10:31:31,723 - src.tool_management.intelligent_monitor - INFO - 智能监控服务已启动 -2025-10-17 10:31:31,724 - src.tool_management.intelligent_monitor - INFO - 执行第 1 次智能监控检查 -2025-10-17 10:31:31,725 - src.tool_management.tool_management_core - INFO - TSP工具管理助手核心初始化完成 -2025-10-17 10:31:31,726 - src.tool_management.intelligent_monitor - INFO - 执行第 1 次智能监控检查 -2025-10-17 10:31:31,727 - src.tool_management.tool_management_core - INFO - TSP工具管理助手核心初始化完成 -2025-10-17 10:31:31,728 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: name 'AgentMessageHandler' is not defined -2025-10-17 10:31:31,729 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: name 'AgentMessageHandler' is not defined -2025-10-17 10:31:34,435 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:34] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-17 10:31:35,416 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:35] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-17 10:31:35,449 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:35] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 10:31:36,586 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:36] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-17 10:31:36,731 - src.tool_management.intelligent_monitor - INFO - 智能监控服务已停止 -2025-10-17 10:31:36,731 - src.tool_management.intelligent_monitor - INFO - 智能监控服务已停止 -2025-10-17 10:31:36,733 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:36] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-17 10:31:36,734 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:36] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-17 10:31:37,335 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:37] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-17 10:31:38,295 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:38] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-17 10:31:38,555 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:38] "GET /api/token-monitor/stats HTTP/1.1" 200 - -2025-10-17 10:31:39,411 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:39] "GET /api/token-monitor/records HTTP/1.1" 200 - -2025-10-17 10:31:39,777 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:39] "GET /api/ai-monitor/stats HTTP/1.1" 200 - -2025-10-17 10:31:40,611 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:40] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - -2025-10-17 10:31:40,679 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:40] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - -2025-10-17 10:31:40,727 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:40] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - -2025-10-17 10:31:41,170 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:41] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 10:31:41,485 - src.analytics.ml_analysis - INFO - 未找到预训练模型,需要重新训练 -2025-10-17 10:31:41,487 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:41] "GET /api/ml-analysis/model/info HTTP/1.1" 200 - -2025-10-17 10:31:41,541 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:41] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-10-17 10:31:41,589 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:41] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 10:31:41,604 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:41] "GET /api/token-monitor/chart HTTP/1.1" 200 - -2025-10-17 10:31:41,795 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:41] "GET /api/ml-analysis/data-files HTTP/1.1" 200 - -2025-10-17 10:31:41,852 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:41] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-10-17 10:31:41,853 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:41] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-10-17 10:31:41,854 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:41] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-10-17 10:31:42,127 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:42] "GET /api/ml-analysis/categories HTTP/1.1" 200 - -2025-10-17 10:31:42,222 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:42] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 10:31:42,654 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:42] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 10:31:44,227 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:44] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 10:31:44,660 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:44] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 10:31:44,927 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:44] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 10:31:44,971 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:44] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 10:31:45,754 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:45] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 10:31:46,081 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:46] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 10:31:47,201 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:47] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 10:31:47,510 - src.analytics.ml_analysis - INFO - 未找到预训练模型,需要重新训练 -2025-10-17 10:31:47,512 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:47] "GET /api/ml-analysis/model/info HTTP/1.1" 200 - -2025-10-17 10:31:47,832 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:47] "GET /api/ml-analysis/data-files HTTP/1.1" 200 - -2025-10-17 10:31:47,922 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:47] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 10:31:48,149 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:31:48] "GET /api/ml-analysis/categories HTTP/1.1" 200 - -2025-10-17 10:32:32,732 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:32:32] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 10:32:32,977 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:32:32] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 10:32:33,297 - src.analytics.ml_analysis - INFO - 未找到预训练模型,需要重新训练 -2025-10-17 10:32:33,300 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:32:33] "GET /api/ml-analysis/model/info HTTP/1.1" 200 - -2025-10-17 10:32:33,609 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:32:33] "GET /api/ml-analysis/data-files HTTP/1.1" 200 - -2025-10-17 10:32:33,830 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:32:33] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 10:32:33,925 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:32:33] "GET /api/ml-analysis/categories HTTP/1.1" 200 - -2025-10-17 10:32:34,131 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:32:34] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 10:32:34,453 - src.analytics.ml_analysis - INFO - 未找到预训练模型,需要重新训练 -2025-10-17 10:32:34,455 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:32:34] "GET /api/ml-analysis/model/info HTTP/1.1" 200 - -2025-10-17 10:32:34,775 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:32:34] "GET /api/ml-analysis/data-files HTTP/1.1" 200 - -2025-10-17 10:32:34,849 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:32:34] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 10:32:35,083 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:32:35] "GET /api/ml-analysis/categories HTTP/1.1" 200 - -2025-10-17 10:32:36,022 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 10:32:36] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 10:33:15,407 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 10:33:15,407 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 10:33:17,777 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 10:33:19,600 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 10:33:19,612 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 10:33:25,557 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 10:33:29,251 - src.analytics.ml_analysis - INFO - 未找到预训练模型,需要重新训练 -2025-10-17 10:34:25,201 - src.tool_management.system_optimizer - INFO - 已初始化 4 个优化规则 -2025-10-17 10:34:25,206 - src.tool_management.system_optimizer - INFO - 已初始化 4 个优化规则 -2025-10-17 10:34:25,208 - src.main - INFO - TSP助手初始化完成 -2025-10-17 10:34:25,209 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-17 10:34:25,353 - src.analytics.ml_analysis - INFO - 未找到预训练模型,需要重新训练 -2025-10-17 10:43:46,203 - ERROR - 错误响应: 未找到要删除的预警 - None -2025-10-17 10:46:33,684 - ERROR - 文件上传失败: [Errno 2] No such file or directory: 'D:\\code\\tsp-assistant\\src\\data\\ml_analysis\\data_simple_200.csv' -2025-10-17 10:46:33,688 - ERROR - 错误响应: 文件上传失败: [Errno 2] No such file or directory: 'D:\\code\\tsp-assistant\\src\\data\\ml_analysis\\data_simple_200.csv' - None -2025-10-17 10:46:38,219 - ERROR - 文件上传失败: [Errno 2] No such file or directory: 'D:\\code\\tsp-assistant\\src\\data\\ml_analysis\\data_simple_200.csv' -2025-10-17 10:46:38,222 - ERROR - 错误响应: 文件上传失败: [Errno 2] No such file or directory: 'D:\\code\\tsp-assistant\\src\\data\\ml_analysis\\data_simple_200.csv' - None -2025-10-17 13:05:03,596 - ERROR - 初始化服务 agent_assistant 失败: name 'AgentMessageHandler' is not defined -2025-10-17 13:05:03,596 - ERROR - 初始化服务 agent_assistant 失败: name 'AgentMessageHandler' is not defined -2025-10-17 13:29:43,455 - ERROR - 错误响应: 预测失败: 模型未训练且无预训练模型 - None -2025-10-17 13:38:08,138 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 13:38:08,140 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 13:38:10,793 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 13:38:10,810 - __main__ - ERROR - 启动失败: expected 'except' or 'finally' block (alerts.py, line 166) -2025-10-17 13:44:45,902 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 13:44:45,903 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 13:44:51,489 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 13:44:53,699 - __main__ - ERROR - 启动失败: No module named 'src.core.system_optimizer' -2025-10-17 13:45:26,207 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 13:45:26,207 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 13:45:28,978 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 13:45:28,987 - __main__ - ERROR - 启动失败: expected 'except' or 'finally' block (alerts.py, line 170) -2025-10-17 13:47:57,127 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 13:47:57,128 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 13:47:59,605 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 13:48:01,582 - __main__ - ERROR - 启动失败: No module named 'src.core.system_optimizer' -2025-10-17 13:49:12,095 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 13:49:12,095 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 13:49:17,536 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 13:49:19,491 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 13:49:19,504 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 13:49:19,618 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 13:49:19,619 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 13:49:20,530 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 13:49:20,560 - root - ERROR - WebSocket服务器启动失败: [Errno 10048] error while attempting to bind on address ('::1', 8765, 0, 0): 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 -2025-10-17 13:51:08,506 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-17 13:53:27,452 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 13:53:27,453 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 13:53:30,009 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 13:53:31,897 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 13:53:31,908 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 13:53:32,021 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 13:53:32,022 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 13:53:32,367 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 13:53:32,395 - root - ERROR - WebSocket服务器启动失败: [Errno 10048] error while attempting to bind on address ('127.0.0.1', 8765): 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 -2025-10-17 13:55:11,997 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 13:55:11,997 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 13:55:14,535 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 13:55:15,897 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 13:55:15,908 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 13:55:16,007 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 13:55:16,007 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 13:55:16,375 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 13:55:16,402 - root - ERROR - WebSocket服务器启动失败: [Errno 10048] error while attempting to bind on address ('127.0.0.1', 8765): 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 -2025-10-17 13:59:09,039 - root - INFO - 收到关闭信号,正在停止服务... -2025-10-17 13:59:11,101 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 13:59:11,101 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 13:59:13,342 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 13:59:14,253 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 13:59:14,259 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 13:59:14,312 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 13:59:14,312 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 13:59:14,649 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 13:59:14,666 - src.web.websocket_server - ERROR - WebSocket服务器运行出错: [Errno 10048] error while attempting to bind on address ('::1', 8765, 0, 0): 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 -2025-10-17 13:59:14,666 - src.web.websocket_server - INFO - 正在停止WebSocket服务器 -2025-10-17 14:13:09,358 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 14:13:09,358 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 14:13:12,287 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 14:13:14,454 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 14:13:14,522 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 14:13:14,522 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 14:13:14,942 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 14:13:14,971 - src.web.websocket_server - ERROR - WebSocket服务器运行出错: [Errno 10048] error while attempting to bind on address ('::1', 8765, 0, 0): 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 -2025-10-17 14:13:14,971 - src.web.websocket_server - INFO - 正在停止WebSocket服务器 -2025-10-17 14:15:59,666 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 14:15:59,666 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 14:16:01,822 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 14:16:03,241 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 14:16:03,310 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 14:16:03,372 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 14:16:03,373 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 14:16:03,590 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 14:16:03,775 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 14:19:02,804 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 14:19:02,804 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 14:19:08,950 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 14:19:10,009 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 14:19:10,024 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 14:19:10,091 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 14:19:10,091 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 14:19:10,609 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 14:19:11,091 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 14:22:43,973 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 14:22:43,973 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 14:22:46,785 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 14:22:48,297 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 14:22:48,404 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 14:22:48,512 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 14:22:48,515 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 14:22:48,779 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 14:22:49,005 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 15:11:33,550 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 15:11:33,550 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 15:11:33,554 - __main__ - ERROR - 启动失败: No module named 'src.web.app' -2025-10-17 15:12:33,210 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 15:12:33,210 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 15:12:35,552 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 15:12:37,257 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 15:12:37,311 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 15:12:37,369 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 15:12:37,369 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 15:12:37,566 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:12:37,730 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 15:12:37,737 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-17 15:12:37,738 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-17 15:12:46,098 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:46] "GET / HTTP/1.1" 200 - -2025-10-17 15:12:46,191 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:46] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-17 15:12:46,201 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:46] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-17 15:12:46,201 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:46] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-17 15:12:46,208 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:46] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-10-17 15:12:46,576 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:46] "GET /api/system/info HTTP/1.1" 200 - -2025-10-17 15:12:46,599 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-17 15:12:46,600 - websockets.server - ERROR - opening handshake failed -Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler - await connection.handshake( - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake - raise self.protocol.handshake_exc - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake - response = process_request(self, self.request) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request - if request_headers.get("Upgrade", "").lower() == "websocket": - ^^^^^^^^^^^^^^^^^^^ -AttributeError: 'Request' object has no attribute 'get' -2025-10-17 15:12:47,082 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:47] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:12:47,085 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:47] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-17 15:12:47,161 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:12:47,173 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:12:47,256 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:12:47,329 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-10-17 15:12:47,330 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:47] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 15:12:47,417 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-17 15:12:47,419 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-17 15:12:47,422 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-17 15:12:47,424 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-17 15:12:47,429 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-17 15:12:47,435 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-17 15:12:47,438 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-17 15:12:47,441 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-17 15:12:47,446 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-17 15:12:47,448 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-17 15:12:47,450 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-17 15:12:47,452 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-17 15:12:47,454 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-17 15:12:47,458 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-17 15:12:47,465 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-17 15:12:47,467 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-17 15:12:47,469 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-17 15:12:47,470 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-17 15:12:47,474 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-17 15:12:47,482 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-17 15:12:47,484 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-17 15:12:47,485 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-17 15:12:47,487 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-17 15:12:47,514 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:12:47,538 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:12:47,538 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:12:47,538 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:12:47,694 - src.main - INFO - TSP助手初始化完成 -2025-10-17 15:12:47,695 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-17 15:12:47,772 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:47] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:12:47,774 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:12:47,775 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:12:47,775 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:12:47,907 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:47] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 15:12:47,943 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:47] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:12:48,152 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:12:48,339 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:12:48,339 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:12:48,339 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:12:48,503 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:48] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 15:12:48,524 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:48] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:12:48,777 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:12:48,948 - src.main - INFO - TSP助手初始化完成 -2025-10-17 15:12:48,949 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-17 15:12:48,951 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:48] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 15:12:49,634 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:49] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 15:12:50,701 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:12:50,833 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:12:50,833 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:12:50,833 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:12:50,834 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.20s -2025-10-17 15:12:51,053 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:12:51,061 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:12:51,233 - src.main - INFO - TSP助手初始化完成 -2025-10-17 15:12:51,233 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-10-17 15:12:51,233 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-10-17 15:12:51,233 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-10-17 15:12:51,233 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-10-17 15:12:51,234 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-10-17 15:12:51,234 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-10-17 15:12:51,234 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-10-17 15:12:51,234 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-10-17 15:12:51,234 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-10-17 15:12:51,234 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-10-17 15:12:51,234 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-10-17 15:12:51,235 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-10-17 15:12:51,238 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-17 15:12:51,238 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-10-17 15:12:51,238 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-10-17 15:12:51,238 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-10-17 15:12:51,239 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:51] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-17 15:12:51,283 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:51] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 15:12:51,304 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:51] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 15:12:51,629 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-17 15:12:51,629 - websockets.server - ERROR - opening handshake failed -Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler - await connection.handshake( - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake - raise self.protocol.handshake_exc - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake - response = process_request(self, self.request) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request - if request_headers.get("Upgrade", "").lower() == "websocket": - ^^^^^^^^^^^^^^^^^^^ -AttributeError: 'Request' object has no attribute 'get' -2025-10-17 15:12:51,766 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:12:51,867 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:12:51,867 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:12:51,867 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:12:52,037 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:52] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:12:52,123 - src.main - INFO - TSP助手初始化完成 -2025-10-17 15:12:52,123 - src.agent.tool_manager - INFO - 注册工具: search_knowledge -2025-10-17 15:12:52,123 - src.agent.tool_manager - INFO - 注册工具: create_work_order -2025-10-17 15:12:52,123 - src.agent.tool_manager - INFO - 注册工具: update_work_order -2025-10-17 15:12:52,124 - src.agent.tool_manager - INFO - 注册工具: generate_response -2025-10-17 15:12:52,124 - src.agent.tool_manager - INFO - 注册工具: analyze_data -2025-10-17 15:12:52,124 - src.agent.tool_manager - INFO - 注册工具: send_notification -2025-10-17 15:12:52,124 - src.agent.tool_manager - INFO - 注册工具: schedule_task -2025-10-17 15:12:52,125 - src.agent.tool_manager - INFO - 注册工具: web_search -2025-10-17 15:12:52,125 - src.agent.tool_manager - INFO - 注册工具: file_operation -2025-10-17 15:12:52,125 - src.agent.tool_manager - INFO - 注册工具: database_query -2025-10-17 15:12:52,125 - src.agent.tool_manager - INFO - 已注册 10 个默认工具 -2025-10-17 15:12:52,125 - src.agent.agent_core - INFO - Agent核心初始化完成 -2025-10-17 15:12:52,127 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-17 15:12:52,128 - src.agent.agent_assistant_core - INFO - TSP Agent助手核心初始化完成 -2025-10-17 15:12:52,128 - src.agent_assistant - INFO - TSP Agent助手初始化完成(重构版本) -2025-10-17 15:12:52,128 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 -2025-10-17 15:12:52,129 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:52] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-17 15:12:52,140 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:52] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:12:52,455 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:12:52,455 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:12:52,456 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:12:52,624 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:52] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:12:52,698 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 15:12:52,699 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 15:12:53,259 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:12:53,260 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:12:53,260 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:12:53,260 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.19s -2025-10-17 15:12:53,730 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:53] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:12:53,956 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 15:12:53,957 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 15:12:54,167 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:12:54,167 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:12:54,167 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:12:54,205 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:54] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 15:12:54,336 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:54] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:12:54,628 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:54] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 15:12:54,752 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:54] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:12:54,877 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:54] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 15:12:56,084 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:12:56,085 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:12:56,085 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:12:56,086 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.20s -2025-10-17 15:12:56,238 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 15:12:56,238 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 15:12:56,566 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:56] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 15:12:56,594 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:56] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 15:12:57,035 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:12:57,035 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:12:57,036 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:12:57,125 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 15:12:57,125 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 15:12:57,209 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:57] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:12:57,736 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:12:57,736 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:12:57,736 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:12:57,912 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:12:57] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:19:05,559 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 15:19:05,560 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 15:19:08,023 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 15:19:09,295 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 15:19:09,306 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 15:19:09,373 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 15:19:09,374 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 15:19:09,585 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:19:09,760 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 15:19:09,767 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-17 15:19:09,767 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-17 15:19:46,607 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:46] "GET / HTTP/1.1" 200 - -2025-10-17 15:19:46,713 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:46] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-17 15:19:46,725 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:46] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-17 15:19:46,728 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:46] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-17 15:19:46,736 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:46] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-17 15:19:47,079 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:47] "GET /api/system/info HTTP/1.1" 200 - -2025-10-17 15:19:47,081 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-17 15:19:47,085 - websockets.server - ERROR - opening handshake failed -Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler - await connection.handshake( - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake - raise self.protocol.handshake_exc - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake - response = process_request(self, self.request) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request - if request_headers.get("Upgrade", "").lower() == "websocket": - ^^^^^^^^^^^^^^^^^^^ -AttributeError: 'Request' object has no attribute 'get' -2025-10-17 15:19:47,086 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:47] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-17 15:19:47,229 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:19:47,574 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:19:47,677 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:19:47,750 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-17 15:19:47,782 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:19:47,841 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-17 15:19:47,844 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-17 15:19:47,846 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-17 15:19:47,847 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-17 15:19:47,848 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-17 15:19:47,852 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:19:47,852 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-17 15:19:47,854 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-17 15:19:47,855 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-17 15:19:47,856 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-17 15:19:47,857 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-17 15:19:47,859 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-17 15:19:47,861 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-17 15:19:47,863 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-17 15:19:47,866 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-17 15:19:47,870 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-17 15:19:47,872 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-17 15:19:47,874 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-17 15:19:47,875 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-17 15:19:47,879 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-17 15:19:47,882 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-17 15:19:47,888 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-17 15:19:47,890 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-17 15:19:47,892 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-17 15:19:47,989 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 -2025-10-17 15:19:47,989 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:47] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 15:19:47,996 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:47] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 15:19:48,273 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:19:48,317 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:48] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 15:19:48,525 - src.web.service_manager - INFO - 服务 assistant 已初始化 -2025-10-17 15:19:49,215 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:49] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 15:19:49,492 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:49] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 15:19:49,720 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:49] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:19:49,904 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:49] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 15:19:50,003 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:50] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 15:19:50,260 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:50] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:19:50,938 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:19:50,938 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:19:50,938 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:19:50,939 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.21s -2025-10-17 15:19:51,415 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:51] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 15:19:51,452 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:51] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 15:19:51,515 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:19:51,516 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:19:51,516 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:19:51,685 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:51] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:19:51,749 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:51] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:19:51,902 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:19:51,903 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:19:51,903 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:19:52,074 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:52] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 15:19:52,087 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:52] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 15:19:52,090 - websockets.server - INFO - connection rejected (500 Internal Server Error) -2025-10-17 15:19:52,090 - websockets.server - ERROR - opening handshake failed -Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler - await connection.handshake( - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake - raise self.protocol.handshake_exc - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake - response = process_request(self, self.request) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 265, in _process_request - if request_headers.get("Upgrade", "").lower() == "websocket": - ^^^^^^^^^^^^^^^^^^^ -AttributeError: 'Request' object has no attribute 'get' -2025-10-17 15:19:52,716 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:19:52,716 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:19:52,716 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:19:52,765 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 15:19:52,765 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 15:19:52,923 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:19:52,923 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:19:52,923 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:19:52,924 - src.core.query_optimizer - WARNING - 慢查询检测: get_analytics_optimized 耗时 1.18s -2025-10-17 15:19:53,191 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:53] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:19:53,391 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:53] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:19:53,533 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 15:19:53,533 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 15:19:53,848 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:19:53,848 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:19:53,849 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:19:53,915 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:19:53,916 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:19:53,916 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:19:54,020 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:54] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:19:54,120 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:54] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:19:54,571 - src.core.query_optimizer - INFO - 工单状态统计: {'Processing': 1, 'open': 3, 'in_progress': 1, 'closed': 2} -2025-10-17 15:19:54,571 - src.core.query_optimizer - INFO - 工单总数: 7 -2025-10-17 15:19:54,572 - src.core.query_optimizer - INFO - 映射后的状态统计: {'open': 3, 'in_progress': 2, 'resolved': 0, 'closed': 2} -2025-10-17 15:19:54,741 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:19:54] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:36:24,828 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 15:36:24,828 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 15:36:30,333 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 15:36:31,554 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 15:36:31,566 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 15:36:31,637 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 15:36:31,637 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 15:36:32,143 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:36:32,625 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 15:36:32,632 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-17 15:36:32,632 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-17 15:36:42,172 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:36:42,345 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:36:42,346 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:42] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 15:36:42,431 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:42] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 15:36:42,721 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:36:43,049 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:43] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:36:43,256 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:36:43,270 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:43] "GET / HTTP/1.1" 200 - -2025-10-17 15:36:43,396 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:43] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-17 15:36:43,396 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:43] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-17 15:36:43,398 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:43] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-17 15:36:43,403 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:43] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-17 15:36:43,573 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:43] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 15:36:43,688 - websockets.server - INFO - connection open -2025-10-17 15:36:43,689 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:43] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 15:36:43,690 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:43] "GET /api/system/info HTTP/1.1" 200 - -2025-10-17 15:36:43,692 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - ^^^^^^^^^^^^^^^^^^^^^^^^ -TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-17 15:36:43,697 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:43] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-17 15:36:43,702 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:43] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 15:36:43,894 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:43] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:36:44,210 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:36:44,382 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:44] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:36:44,404 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:44] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 15:36:44,579 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:44] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 15:36:45,104 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:45] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 15:36:45,149 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:45] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:36:45,282 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:36:45,660 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:45] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 15:36:45,733 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-17 15:36:45,735 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-17 15:36:45,736 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-17 15:36:45,737 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-17 15:36:45,739 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-17 15:36:45,740 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-17 15:36:45,741 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-17 15:36:45,742 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-17 15:36:45,743 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-17 15:36:45,745 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-17 15:36:45,747 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-17 15:36:45,749 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-17 15:36:45,753 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-17 15:36:45,755 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-17 15:36:45,756 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-17 15:36:45,758 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-17 15:36:45,759 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-17 15:36:45,761 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-17 15:36:45,763 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-17 15:36:45,764 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-17 15:36:45,768 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-17 15:36:45,769 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-17 15:36:45,771 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-17 15:36:45,780 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:45] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 15:36:45,797 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:45] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 15:36:46,604 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:46] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:36:46,607 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:46] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:36:47,020 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:47] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 15:36:47,287 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:47] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:36:47,890 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 15:36:47,890 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 15:36:48,204 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:48] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 15:36:48,246 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:48] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 15:36:48,857 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:48] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:36:49,462 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:36:49] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:36:49,678 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 15:36:49,678 - src.core.system_optimizer - INFO - 系统监控线程已启动 -2025-10-17 15:38:13,463 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:38:13] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 15:38:13,914 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:38:13] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 15:38:14,501 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:38:14] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:38:14,804 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:38:14] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:38:15,030 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:38:15] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:38:15,159 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:38:15] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 15:38:15,451 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:38:15] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:38:16,201 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:38:16] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 15:38:16,214 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:38:16] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 15:38:17,004 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:38:17] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:38:18,723 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:38:18] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:40:41,421 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:40:41] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 15:40:41,981 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:40:41] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:40:42,017 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:40:42] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:40:42,588 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:40:42] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 15:40:42,631 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:40:42] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:40:43,318 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:40:43] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:40:43,346 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:40:43] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 15:40:43,669 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:40:43] "GET /api/token-monitor/stats HTTP/1.1" 200 - -2025-10-17 15:40:44,215 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:40:44] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 15:40:44,240 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:40:44] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 15:40:45,088 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:40:45] "GET /api/token-monitor/records HTTP/1.1" 200 - -2025-10-17 15:40:45,715 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-17 15:40:45,716 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-17 15:40:45,949 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:40:45] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:40:46,153 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 7200, 'msg': 'ok', 'tenant_access_token': 't-g104ahfE4MP6O3EVDXWZS7JFCJMQH2UFJKWK4RRM'} -2025-10-17 15:40:46,154 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104ahfE4MP6O3EVDX... -2025-10-17 15:40:46,154 - src.integrations.feishu_client - INFO - 令牌有效期: 7200秒,过期时间: 2025-10-17 17:40:46 -2025-10-17 15:40:46,155 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 15:40:46,155 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:40:47,527 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:40:47,527 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': True, 'items': [{'fields': {'Created by': 'Vsevolod Tsoi', 'Date creation': 1744214400000, 'Date of close TR': 1745894110000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': 'Incorrect operation of remote control - commands are not executed. Last TBOX log in 2025-04-10 13:52:33. \nHigh frequency data 2025-04-10 13:52:31. apn1&2 are available and active in MNO.', 'TR Level': 'Low', 'TR Number': 'TR539', 'TR Status': 'temporary close', 'TR tracking': '27/04:The platform checked the remote control records for this month and found that the remote control was successful on the 19th, but there were no subsequent records of remote control usage. It is recommended that users try the remote control function again.@Vsevolod Tsoi\n24/04:After the meeting, the platform checks whether the logs have been obtained and the remote control time.\n21/04:waiting fo人feedback\n17/04: no feedback so far.\n10/04: customer is asked to provide the input data for investigation such as an operation time/date, TBOX log.', 'Type of problem': 'Remote control ', 'VIN|sim': 'LVTDD24B9RD067522', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '0427:平台查询本月远控记录,发现19日远控成功,后续无远控使用记录,建议用户再试试远控功能\n0424:会后平台检查日志是否已获取,及远控时间\n0421:等待用户反馈\n0417:无客户反馈信息,等待客户反馈\n0410:已要求客户提供操作时间,操作指令,等待对应日志'}, 'id': 'rec253kqBfX8nA', 'record_id': 'rec253kqBfX8nA'}, {'fields': {'Created by': 'Vsevolod Tsoi', 'Date creation': 1744300800000, 'Date of close TR': 1745893265000, 'Module(模块)': '用户EXEED-APP(User)', 'Source': 'Mail', 'TR Description': 'Remote control operates correctly. However an error message comes up when click on account in the mobile app - see photo attached.', 'TR Level': 'Low', 'TR Number': 'TR541', 'TR Status': 'close', 'TR tracking': "27/04: Waiting for local feedback on progress\n24/04: The user reported that the car control is available, but still prompted that the account does not exist. The APP backend checked that the account has been cancelled. The discussion result was to synchronize the unbinding information of the APP to TSP, and the user can re register and bind the car.\n22/04: APP background feedback account status is cancellation, asked whether the car control can be used normally.@Vsevolod Tsoi\n21/04: Waiting for feedback on results.\n17/04:This phenomenon has always existed, after the meeting with the APP to verify the situation, to the user APP analysis.\n17/04: it's confirmed that message comes up every time he clicks on account icon shown on the picture attached.\nApril 16:Please confirm if the user has been experiencing this phenomenon all along, or if it was issued just this one time, and then it was fine.@Vsevolod Tsoi\nApril 16: TSP saw normal traffic and TBOX login records, transferred to EXEED user app for troubleshooting.", 'Type of problem': 'Application', 'VIN|sim': 'LVTDD24B5RG032670', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': '张明亮', '处理过程': '0427:等待属地反馈进度\n0424:用户反馈车控可用,但仍提示账户不存在,APP后台查询账户已被注销,会上商讨结果是将APP解绑信息同步至TSP,用户可重新注册绑车。\n0422:APP后台反馈账号状态是注销,询问车控是否可以正常使用,\n0421:等待结果反馈\n0417:一直存在这个现象,会后与APP核实情况,转用户APP分析.@张明亮\n0416:请属地确认用户是一直存在这个现象,还是就发了生这一次,后面就好了。\n0416:TSP见流量与TBOX登录记录正常,转EXEED用户APP排查'}, 'id': 'rec253kqBfX8uC', 'record_id': 'rec253kqBfX8uC'}, {'fields': {'Created by': 'Kostya', 'Date creation': 1744560000000, 'Module(模块)': 'OTA', 'Source': 'Telegram bot', 'TR Description': 'Update failure. Check attachments', 'TR Level': 'Low', 'TR Number': 'TR542', 'TR Status': 'Processing', 'TR tracking': '06/05:Suggest the user to retry, if it fails, capture the DMC logs.\n27/04:Awaiting feedback on clearance results.\n24/04:Awaiting feedback on clearance results.\n21/04:Awaiting feedback on clearance results.\n17/04: Private letter has been urged sub-OTA Liu Jinlong, is in the process of investigation.\n14/04: TSP saw that the login and logout status of the vehicle was normal, and provided a screenshot indicating that the connected network was normal. The screenshot error message: upgrade failed. Please contact after-sales and transfer to OTA for troubleshooting.@刘金龙', 'Type of problem': 'OTA', 'VIN|sim': 'LVTDD24B8RD064739', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '刘金龙', '处理过程': '0506:建议用户重新尝试,如失败,抓取DMC日志\n0427:等待排查结果反馈\n0424:等待排查结果反馈\n0421:等待排查结果反馈\n0417:已私信催次OTA刘金龙,正在排查中\n0414:TSP见该车登录注销状态正常,提供截图中提示连接的网络正常,截图错误提示:升级失败,请与售后联系,转OTA排查'}, 'id': 'rec253kqBfX8BH', 'record_id': 'rec253kqBfX8BH'}, {'fields': {'Created by': 'Vsevolod Tsoi', 'Date creation': 1744560000000, 'Module(模块)': 'local O&M', 'Source': 'Telegram bot', 'TR Description': 'Commands are not executed. Vehicle data is not updated in the app - shown as started and unlocked but in fact the car locked and the engine stopped. MNO: there is no apn1 available since April, 1st (see photo attached). Last tbox log in on \n2025-04-16 08:15:54, last high frequency data 2025-03-06 08:39:11.', 'TR Level': 'Low', 'TR Number': 'TR543', 'TR Status': 'Processing', 'TR tracking': '29/04:waiting customer go to dealer\n27/04:MNO feedback: The network connection is normal, but TBOX did not actively use APN1, resulting in the inability to upload logs. It is recommended that users log in to retrieve logs.@Vsevolod Tsoi\n27/04:TSP attempted to remotely obtain TBOX logs, but no logs were uploaded. However, the platform showed that the vehicle was online, so it was transferred to MNO for investigation.\n24/04:Waiting for MNO analysis results and TBOX log \n21/04: Waiting for analysis results and TBOX log feedback\n17/04:Turn MNO analysis.Also recommend to grab the TBOX logs.@Vsevolod Tsoi\n17/04: coordinates are 60.068188 & 30.372103 where the operation was executed.\n16/04:The platform query remote control prompts 35 seconds timeout, it is recommended that the user feedback the location information (latitude and longitude) of the remote control place where the signal is better, restart the vehicle and the mobile phone APP and then try remote control. Also recommend to grab the TBOX logs and analyse them for no APN1 walks.\n16/04: command - stop the engine on April, 16th at 10:00. However, in fact the car was locked and the engine stopped.', 'Type of problem': 'Remote control ', 'VIN|sim': 'LVTDD24B5RG089645', 'Vehicle Type01': 'Tiggo9 (T28)', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '0429:等待用户进站\n0427:MNO反馈网络连接正常,TBOX没有主动使用APN1导致日志无法上传,建议用户进站取日志\n0427:TSP尝试远程获取TBOX日志,未见日志上传,但平台显示车辆在线,转MNO排查@林兆国\n0424:等待Tbox日志及MNO分析结果\n0421:等待分析结果与TBOX日志反馈\n0417: 执行操作的坐标为60.068188和30.372103。\n0417: 转MNO排查网络,同时抓取TBOX日志分析。\n0416:平台查询远控提示35秒超时,建议用户反馈远控地的位置信息(经纬度)在信号较好的地方,重启车辆及手机APP后尝试远控。同时针对无APN1走动,建议抓取TBOX日志分析.\n0416;反馈远控无法生效,车辆数据在APP中不显示,APN1自四月起不可用,但有TBOX登录记录,最后高频数据上传时间为2025-03-06 08:39:11.'}, 'id': 'rec253kqBfX8IL', 'record_id': 'rec253kqBfX8IL'}, {'fields': {'Created by': 'Vsevolod Tsoi', 'Date creation': 1744732800000, 'Date of close TR': 1744964488000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "After starting the engine remotely via mobile app, cutomer calls another command - driver seat heating. It's executed successfully exept that with driver seat heating command, air conditioning is also exectued but it's not needed. Also the engine is stopping when switching off the air conditionning or switching all the heating systems off. Please confirm if it's setup in this way or it's an issue.", 'TR Level': 'Low', 'TR Number': 'TR544', 'TR Status': 'close', 'TR tracking': "18/04: feedback is provided to customer's that this is operation algoritm of the app. Customer's feedback: if it worked seperately it would be better => client's wish.\n17/04:The tanker is designed so that the air conditioning and seat heating are linked, this is a preset operation and there is no way to change it.\n16/04: Asked app , learnt that need to ask about cockpit, suggested to discuss at tomorrow's day meeting", 'Type of problem': 'Remote control ', 'VIN|sim': 'LVTDD24B7RG118806', 'Vehicle Type01': 'Tiggo9 (T28)', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '17/04:油车设计上空调和座椅加热是关联的,设计如此,无需更改\n0416:询问app张明亮,得知需询问座舱,建议明日日会讨论'}, 'id': 'rec253kqBfX8PQ', 'record_id': 'rec253kqBfX8PQ'}, {'fields': {'Created by': 'Kostya', 'Date creation': 1744732800000, 'Module(模块)': 'OTA', 'Source': 'Telegram bot', 'TR Description': 'Tbox update for T22 cant start engine after turning off by customer.\nNo any other remote control systems on the car according to the customer.', 'TR Level': 'Low', 'TR Number': 'TR545', 'TR Status': 'Processing', 'TR tracking': "29/04:User feedback will try to re-open when he have time over the weekend, awaiting feedback.\n27/04: Asked customer. Waiting for feedback \n24/04: Asked customer. Waiting for feedback \n21/04:Waiting for feedback and trying again for results.\n17/04:OTA feedback reported error as remote power-up failure, not entered the upgrade process, no package uploaded in the background. You can let the customer try a few more times, if it still does not work, use a USB stick to get the OTA logs.@Kostya\n17/04: TSP saw TBOX reboot records and SMS notification on the 16th, but as of 9:00 BST on the 17th, no logs have been uploaded.Turn OTA analysis.\n16/04: Can't get TBox log remotly. Request is success but there is no result", 'Type of problem': 'OTA', 'VIN|sim': 'XEYDD14B3SA012122', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Kostya', '处理过程': '0429:用户反馈周末有空会尝试重新操作,等待反馈\n0427:等待反馈重新尝试结果\n0424:等待反馈重新尝试结果\n0423:等待反馈重新尝试结果\n0421:等待反馈重新尝试结果\n0417:OTA反馈上报错误为远程上电失败,未进入升级流程,后台没有包传上来。可以让客户多试几次,如果仍然不行,使用u盘获取OTA日志\n0417:TSP见16日TBOX有重启记录且有短信下发通知,但截止北京时间17日9:00仍未见日志上传,转OTA排查\n0416:无法远程获取 TBox 日志。请求成功,但没有结果'}, 'id': 'rec253kqBfX8WT', 'record_id': 'rec253kqBfX8WT'}, {'fields': {'Created by': 'Vsevolod Tsoi', 'Date creation': 1744819200000, 'Module(模块)': 'OTA', 'Source': 'Mail', 'TR Description': 'OTA update failed. It doesn\'t start. An error message comes up "Power on failure"', 'TR Level': 'Low', 'TR Number': 'TR547', 'TR Status': 'Processing', 'TR tracking': '30/04:OTA analysed that because there was no SK learning, the remote power-up theft could not be passed, so the power-up failed, and suggested that the user should come into the station and re-learn the SK\n27/04: waiting OTA team analysis. \n24/04: OTA log attached.\n21/04: Waiting for OTA logs\n17/04:ota logs not Tbox logs."You need to go into ota project mode, click collect log and then insert the USB stick."@Vsevolod Tsoi\n17/04: tbox log attached as well as video.', 'Type of problem': 'OTA', 'VIN|sim': 'XEYDD14B3RA002731', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': '韦正辉', '处理过程': '0430:OTA分析因为没有进行SK学习,远程上电防盗过不了,所以上电失败,建议用户进站,重新学习SK\n0427:等待OTA分析\n0424:转OTA分析\n0421:等待OTA日志\n0417:需要OTA日志,请邀请客户进站处理,“需要进ota工程模式里 先点击收集log 然后插入u盘”\n0417:TBox日志已附,操作视频已附,同TR545'}, 'id': 'rec253kqBfX94q', 'record_id': 'rec253kqBfX94q'}, {'fields': {'Created by': 'Vsevolod Tsoi', 'Date creation': 1744819200000, 'Module(模块)': '生态/ecologically', 'Source': 'Mail', 'TR Description': 'VK apps and Navi do not operate after payment for superpackage on April, 14', 'TR Level': 'Low', 'TR Number': 'TR548', 'TR Status': 'Processing', 'TR tracking': "29/04: provide IHU logs.\n25/04: VK apps and Navi still do not work - see Picture_2 attached as well as VIDEO_1, VIDEO_2.\n24/04:Renewal issues are recommended to confirm the final solution in the Troubleshooting Group.\n23/04: customer is asked again to provide a feedback if VK video and Navi still do not work.\n21/04: Awaiting local OM feedback on the progress of the problem.\n18/04:The latest test method, let the user lock the car, vehicle hibernation and then power on, there is network. For reference, if the user is in an emergency, this method can be used to solve the problem temporarily, the final solution is waiting for discussion!\n18/04: TSP has seen the car's TBOX login logged off as normal, MNO renewal initiated at 04-14 17:28:59 but no traffic changes seen on the 15th.\n17/04: please provide a procedure to be applied so that the customer can immediately have the access to the network.", 'Type of problem': 'Trafick Payment', 'VIN|sim': 'LVTDD24B4PD575331', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '袁清', '处理过程': '0429:请属地提供IHU日志供排查\n0425: VK 应用程序和导航仪仍然无法工作 - 请参见附图_2 以及视频_1、视频_2。@袁清\n0424:续费问题建议在问题排查群确认最终解决方案\n0421:等待属地反馈问题进度\n0418:最新的测试方法,让用户锁车、车辆休眠后再上电,就有网了。可供参考,如用户紧急,可用此方法暂时解决,最终解决方案等待商讨\n0418:TSP已见该车TBOX登录注销正常,MNO续费04-14 17:28:59发起,但15日未见流量变动'}, 'id': 'rec253kqBfX9bz', 'record_id': 'rec253kqBfX9bz'}, {'fields': {'Created by': 'Kostya', 'Date creation': 1744905600000, 'Date of close TR': 1745300076000, 'Module(模块)': 'local O&M', 'Source': 'Telegram bot', 'TR Description': 'Vk apps doesnt work, NAVI is ok. \nSim Activate\nNo abnormal data in PKI\nCheck Attachments', 'TR Level': 'Low', 'TR Number': 'TR549', 'TR Status': 'close', 'TR tracking': '22/04:Solved - possitive feedback\n22/04:Eco is the reason for the background configuration has been modified, we recommend that the user restart the car machine and try again can be.@Kostya\n18/04:The local feedback shows that VK is unavailable, but the navigation is normal and there are no abnormalities in PKI. By the time the problem was raised, TSP could see that the vehicle status was online, and there were changes in APN1 and APN2 traffic on the 18th. Ecological investigation.@颜廷晓', 'Type of problem': 'VK ', 'VIN|sim': 'LVTDD24B3RG092186', 'Vehicle Type01': 'Tiggo9 (T28)', 'Wilfulness(责任人)': 'Kostya', '处理过程': '0422:生态是后台配置原因 已修改,建议用户重启车机后重新尝试即可@Kostya\n0418:属地反馈VK不可用,但是导航正常,PKI未出现异常,至问题提出时,TSP可见车辆状态在线,查询有18日APN1,APN2流量变动。转生态排查。@颜廷晓'}, 'id': 'rec253kqBfX9iK', 'record_id': 'rec253kqBfX9iK'}, {'fields': {'Created by': 'Kostya', 'Date creation': 1745164800000, 'Module(模块)': 'local O&M', 'Source': 'Telegram bot', 'TR Description': 'APN1 Issue on T28', 'TR Level': 'Low', 'TR Number': 'TR550', 'TR Status': 'Processing', 'TR tracking': '27/04:waiting customer go to dealer\n25/04:waiting customer go to dealer\n24/04:The platform experienced remote control failures from the 19th to the 23rd. On the 19th, Tbox confirmed the command but did not report the execution result. After 35 seconds, it timed out. On the 23rd, Tbox was offline and there was no response after waking up. TSP has attempted to capture logs multiple times but has not been successful. It is recommended that users log in to retrieve logs.\n24/04: Asked customer. Waiting for feedback \n21/04: When submitting the issue, it was observed that MNO21 was experiencing daily traffic flow and TSP vehicles were online. Please provide the remote control operation time.@Kostya', 'Type of problem': 'Remote control ', 'VIN|sim': 'LVTDD24B9RG128401', 'Vehicle Type01': 'Tiggo9 (T28)', 'Wilfulness(责任人)': 'Kostya', '处理过程': '0427:等待用户进站\n0425:等待用户进站\n0424:平台见19日至23日远控失败,19日Tbox确认指令但未上报执行结果,35秒后超时。23日Tbox不在线,唤醒后无响应。TSP多次尝试抓取日志未果,建议用户进站取日志。\n0421:问题提交时,已见MNO21日流量走动,且TSP车辆在线,请提供远控操作时间'}, 'id': 'rec253kqBfX9pR', 'record_id': 'rec253kqBfX9pR'}], 'page_token': 'rec253kqBfX9pR', 'total': 17}, 'msg': 'success'} -2025-10-17 15:40:47,532 - src.integrations.workorder_sync - INFO - 从飞书获取到 10 条记录 -2025-10-17 15:40:47,533 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-17 15:40:47,616 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:40:47] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:40:47,960 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'Incorrect operation of remote control - commands are not executed. Last TBOX log in 2025-04-10 13:52:33. -High frequency data 2025-04-10 13:52:31. apn1&2 are available and active in MNO.' 返回 0 个结果 -2025-10-17 15:40:48,093 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:40:48] "GET /api/token-monitor/chart HTTP/1.1" 200 - -2025-10-17 15:40:48,385 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfX8nA 生成AI建议 -2025-10-17 15:40:48,839 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'Remote control operates correctly. However an error message comes up when click on account in the mobile app - see photo attached.' 返回 0 个结果 -2025-10-17 15:40:49,292 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfX8uC 生成AI建议 -2025-10-17 15:40:49,507 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'Update failure. Check attachments' 返回 0 个结果 -2025-10-17 15:40:49,677 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfX8BH 生成AI建议 -2025-10-17 15:40:50,145 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'Commands are not executed. Vehicle data is not updated in the app - shown as started and unlocked but in fact the car locked and the engine stopped. MNO: there is no apn1 available since April, 1st (see photo attached). Last tbox log in on -2025-04-16 08:15:54, last high frequency data 2025-03-06 08:39:11.' 返回 0 个结果 -2025-10-17 15:40:50,614 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfX8IL 生成AI建议 -2025-10-17 15:40:50,828 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'After starting the engine remotely via mobile app, cutomer calls another command - driver seat heating. It's executed successfully exept that with driver seat heating command, air conditioning is also exectued but it's not needed. Also the engine is stopping when switching off the air conditionning or switching all the heating systems off. Please confirm if it's setup in this way or it's an issue.' 返回 0 个结果 -2025-10-17 15:40:51,038 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfX8PQ 生成AI建议 -2025-10-17 15:40:51,522 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'Tbox update for T22 cant start engine after turning off by customer. -No any other remote control systems on the car according to the customer.' 返回 0 个结果 -2025-10-17 15:40:52,005 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfX8WT 生成AI建议 -2025-10-17 15:40:52,448 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'OTA update failed. It doesn't start. An error message comes up "Power on failure"' 返回 0 个结果 -2025-10-17 15:40:52,876 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfX94q 生成AI建议 -2025-10-17 15:40:53,054 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'VK apps and Navi do not operate after payment for superpackage on April, 14' 返回 0 个结果 -2025-10-17 15:40:53,229 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfX9bz 生成AI建议 -2025-10-17 15:40:53,684 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'Vk apps doesnt work, NAVI is ok. -Sim Activate -No abnormal data in PKI -Check Attachments' 返回 0 个结果 -2025-10-17 15:40:54,139 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfX9iK 生成AI建议 -2025-10-17 15:40:54,305 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'APN1 Issue on T28' 返回 0 个结果 -2025-10-17 15:40:54,528 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfX9pR 生成AI建议 -2025-10-17 15:40:54,528 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfX8nA -2025-10-17 15:40:54,529 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:40:56,701 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:40:56,702 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Incorrect operation of remote control - commands are not exec...'}, 'id': 'rec253kqBfX8nA', 'record_id': 'rec253kqBfX8nA'}}, 'msg': 'success'} -2025-10-17 15:40:56,703 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfX8nA 的AI建议 -2025-10-17 15:40:56,703 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfX8uC -2025-10-17 15:40:56,704 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:40:58,855 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:40:58,855 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Remote control operates correctly. However an error message c...'}, 'id': 'rec253kqBfX8uC', 'record_id': 'rec253kqBfX8uC'}}, 'msg': 'success'} -2025-10-17 15:40:58,856 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfX8uC 的AI建议 -2025-10-17 15:40:58,857 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfX8BH -2025-10-17 15:40:58,857 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:41:01,037 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:41:01,037 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Update failure. Check attachments\n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问...'}, 'id': 'rec253kqBfX8BH', 'record_id': 'rec253kqBfX8BH'}}, 'msg': 'success'} -2025-10-17 15:41:01,038 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfX8BH 的AI建议 -2025-10-17 15:41:01,039 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfX8IL -2025-10-17 15:41:01,039 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:41:02,942 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:41:02,943 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Commands are not executed. Vehicle data is not updated in the...'}, 'id': 'rec253kqBfX8IL', 'record_id': 'rec253kqBfX8IL'}}, 'msg': 'success'} -2025-10-17 15:41:02,944 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfX8IL 的AI建议 -2025-10-17 15:41:02,944 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfX8PQ -2025-10-17 15:41:02,944 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:41:04,935 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:41:04,935 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:After starting the engine remotely via mobile app, cutomer ca...'}, 'id': 'rec253kqBfX8PQ', 'record_id': 'rec253kqBfX8PQ'}}, 'msg': 'success'} -2025-10-17 15:41:04,937 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfX8PQ 的AI建议 -2025-10-17 15:41:04,937 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfX8WT -2025-10-17 15:41:04,937 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:41:07,101 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:41:07,102 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Tbox update for T22 cant start engine after turning off by cu...'}, 'id': 'rec253kqBfX8WT', 'record_id': 'rec253kqBfX8WT'}}, 'msg': 'success'} -2025-10-17 15:41:07,103 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfX8WT 的AI建议 -2025-10-17 15:41:07,104 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfX94q -2025-10-17 15:41:07,104 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:41:09,298 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:41:09,298 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': "模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:OTA update failed. It doesn't start. An error message comes u..."}, 'id': 'rec253kqBfX94q', 'record_id': 'rec253kqBfX94q'}}, 'msg': 'success'} -2025-10-17 15:41:09,300 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfX94q 的AI建议 -2025-10-17 15:41:09,300 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfX9bz -2025-10-17 15:41:09,300 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:41:11,413 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:41:11,414 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:VK apps and Navi do not operate after payment for superpackag...'}, 'id': 'rec253kqBfX9bz', 'record_id': 'rec253kqBfX9bz'}}, 'msg': 'success'} -2025-10-17 15:41:11,415 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfX9bz 的AI建议 -2025-10-17 15:41:11,415 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfX9iK -2025-10-17 15:41:11,415 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:41:14,831 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:41:14,831 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:Vk apps doesnt work, NAVI is ok. \nSim Activate\nNo abnormal d...'}, 'id': 'rec253kqBfX9iK', 'record_id': 'rec253kqBfX9iK'}}, 'msg': 'success'} -2025-10-17 15:41:14,832 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfX9iK 的AI建议 -2025-10-17 15:41:14,832 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfX9pR -2025-10-17 15:41:14,833 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:41:16,884 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:41:16,884 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:APN1 Issue on T28\n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题分析\n2. 建议的解决步骤\n3...'}, 'id': 'rec253kqBfX9pR', 'record_id': 'rec253kqBfX9pR'}}, 'msg': 'success'} -2025-10-17 15:41:16,886 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfX9pR 的AI建议 -2025-10-17 15:41:17,056 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Vsevolod Tsoi', 'Date creation': 1744214400000, 'Date of close TR': 1745894110000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': 'Incorrect operation of remote control - commands are not executed. Last TBOX log in 2025-04-10 13:52:33. \nHigh frequency data 2025-04-10 13:52:31. apn1&2 are available and active in MNO.', 'TR Level': 'Low', 'TR Number': 'TR539', 'TR Status': 'temporary close', 'TR tracking': '27/04:The platform checked the remote control records for this month and found that the remote control was successful on the 19th, but there were no subsequent records of remote control usage. It is recommended that users try the remote control function again.@Vsevolod Tsoi\n24/04:After the meeting, the platform checks whether the logs have been obtained and the remote control time.\n21/04:waiting fo人feedback\n17/04: no feedback so far.\n10/04: customer is asked to provide the input data for investigation such as an operation time/date, TBOX log.', 'Type of problem': 'Remote control ', 'VIN|sim': 'LVTDD24B9RD067522', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '0427:平台查询本月远控记录,发现19日远控成功,后续无远控使用记录,建议用户再试试远控功能\n0424:会后平台检查日志是否已获取,及远控时间\n0421:等待用户反馈\n0417:无客户反馈信息,等待客户反馈\n0410:已要求客户提供操作时间,操作指令,等待对应日志'} -2025-10-17 15:41:17,057 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Date of close TR', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 15:41:17,057 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi -2025-10-17 15:41:17,058 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1744214400000 -2025-10-17 15:41:17,058 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date of close TR -> date_of_close: 1745894110000 -2025-10-17 15:41:17,058 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 15:41:17,058 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 15:41:17,058 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Incorrect operation of remote control - commands are not executed. Last TBOX log in 2025-04-10 13:52:33. -High frequency data 2025-04-10 13:52:31. apn1&2 are available and active in MNO. -2025-10-17 15:41:17,058 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 15:41:17,059 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR539 -2025-10-17 15:41:17,059 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: temporary close -2025-10-17 15:41:17,059 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 27/04:The platform checked the remote control records for this month and found that the remote control was successful on the 19th, but there were no subsequent records of remote control usage. It is recommended that users try the remote control function again.@Vsevolod Tsoi -24/04:After the meeting, the platform checks whether the logs have been obtained and the remote control time. -21/04:waiting fo人feedback -17/04: no feedback so far. -10/04: customer is asked to provide the input data for investigation such as an operation time/date, TBOX log. -2025-10-17 15:41:17,060 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Remote control -2025-10-17 15:41:17,060 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B9RD067522 -2025-10-17 15:41:17,060 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED VX FL(M36T) -2025-10-17 15:41:17,060 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Vsevolod Tsoi -2025-10-17 15:41:17,060 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0427:平台查询本月远控记录,发现19日远控成功,后续无远控使用记录,建议用户再试试远控功能 -0424:会后平台检查日志是否已获取,及远控时间 -0421:等待用户反馈 -0417:无客户反馈信息,等待客户反馈 -0410:已要求客户提供操作时间,操作指令,等待对应日志 -2025-10-17 15:41:17,061 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-17 15:41:17,061 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-17 15:41:17,146 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Vsevolod Tsoi', 'Date creation': 1744300800000, 'Date of close TR': 1745893265000, 'Module(模块)': '用户EXEED-APP(User)', 'Source': 'Mail', 'TR Description': 'Remote control operates correctly. However an error message comes up when click on account in the mobile app - see photo attached.', 'TR Level': 'Low', 'TR Number': 'TR541', 'TR Status': 'close', 'TR tracking': "27/04: Waiting for local feedback on progress\n24/04: The user reported that the car control is available, but still prompted that the account does not exist. The APP backend checked that the account has been cancelled. The discussion result was to synchronize the unbinding information of the APP to TSP, and the user can re register and bind the car.\n22/04: APP background feedback account status is cancellation, asked whether the car control can be used normally.@Vsevolod Tsoi\n21/04: Waiting for feedback on results.\n17/04:This phenomenon has always existed, after the meeting with the APP to verify the situation, to the user APP analysis.\n17/04: it's confirmed that message comes up every time he clicks on account icon shown on the picture attached.\nApril 16:Please confirm if the user has been experiencing this phenomenon all along, or if it was issued just this one time, and then it was fine.@Vsevolod Tsoi\nApril 16: TSP saw normal traffic and TBOX login records, transferred to EXEED user app for troubleshooting.", 'Type of problem': 'Application', 'VIN|sim': 'LVTDD24B5RG032670', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': '张明亮', '处理过程': '0427:等待属地反馈进度\n0424:用户反馈车控可用,但仍提示账户不存在,APP后台查询账户已被注销,会上商讨结果是将APP解绑信息同步至TSP,用户可重新注册绑车。\n0422:APP后台反馈账号状态是注销,询问车控是否可以正常使用,\n0421:等待结果反馈\n0417:一直存在这个现象,会后与APP核实情况,转用户APP分析.@张明亮\n0416:请属地确认用户是一直存在这个现象,还是就发了生这一次,后面就好了。\n0416:TSP见流量与TBOX登录记录正常,转EXEED用户APP排查'} -2025-10-17 15:41:17,147 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Date of close TR', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 15:41:17,147 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi -2025-10-17 15:41:17,148 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1744300800000 -2025-10-17 15:41:17,148 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date of close TR -> date_of_close: 1745893265000 -2025-10-17 15:41:17,148 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: 用户EXEED-APP(User) -2025-10-17 15:41:17,148 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 15:41:17,148 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Remote control operates correctly. However an error message comes up when click on account in the mobile app - see photo attached. -2025-10-17 15:41:17,148 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 15:41:17,149 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR541 -2025-10-17 15:41:17,149 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: close -2025-10-17 15:41:17,149 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 27/04: Waiting for local feedback on progress -24/04: The user reported that the car control is available, but still prompted that the account does not exist. The APP backend checked that the account has been cancelled. The discussion result was to synchronize the unbinding information of the APP to TSP, and the user can re register and bind the car. -22/04: APP background feedback account status is cancellation, asked whether the car control can be used normally.@Vsevolod Tsoi -21/04: Waiting for feedback on results. -17/04:This phenomenon has always existed, after the meeting with the APP to verify the situation, to the user APP analysis. -17/04: it's confirmed that message comes up every time he clicks on account icon shown on the picture attached. -April 16:Please confirm if the user has been experiencing this phenomenon all along, or if it was issued just this one time, and then it was fine.@Vsevolod Tsoi -April 16: TSP saw normal traffic and TBOX login records, transferred to EXEED user app for troubleshooting. -2025-10-17 15:41:17,150 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Application -2025-10-17 15:41:17,150 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B5RG032670 -2025-10-17 15:41:17,150 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 15:41:17,150 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: 张明亮 -2025-10-17 15:41:17,150 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0427:等待属地反馈进度 -0424:用户反馈车控可用,但仍提示账户不存在,APP后台查询账户已被注销,会上商讨结果是将APP解绑信息同步至TSP,用户可重新注册绑车。 -0422:APP后台反馈账号状态是注销,询问车控是否可以正常使用, -0421:等待结果反馈 -0417:一直存在这个现象,会后与APP核实情况,转用户APP分析.@张明亮 -0416:请属地确认用户是一直存在这个现象,还是就发了生这一次,后面就好了。 -0416:TSP见流量与TBOX登录记录正常,转EXEED用户APP排查 -2025-10-17 15:41:17,151 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-17 15:41:17,151 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-17 15:41:17,239 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Kostya', 'Date creation': 1744560000000, 'Module(模块)': 'OTA', 'Source': 'Telegram bot', 'TR Description': 'Update failure. Check attachments', 'TR Level': 'Low', 'TR Number': 'TR542', 'TR Status': 'Processing', 'TR tracking': '06/05:Suggest the user to retry, if it fails, capture the DMC logs.\n27/04:Awaiting feedback on clearance results.\n24/04:Awaiting feedback on clearance results.\n21/04:Awaiting feedback on clearance results.\n17/04: Private letter has been urged sub-OTA Liu Jinlong, is in the process of investigation.\n14/04: TSP saw that the login and logout status of the vehicle was normal, and provided a screenshot indicating that the connected network was normal. The screenshot error message: upgrade failed. Please contact after-sales and transfer to OTA for troubleshooting.@刘金龙', 'Type of problem': 'OTA', 'VIN|sim': 'LVTDD24B8RD064739', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '刘金龙', '处理过程': '0506:建议用户重新尝试,如失败,抓取DMC日志\n0427:等待排查结果反馈\n0424:等待排查结果反馈\n0421:等待排查结果反馈\n0417:已私信催次OTA刘金龙,正在排查中\n0414:TSP见该车登录注销状态正常,提供截图中提示连接的网络正常,截图错误提示:升级失败,请与售后联系,转OTA排查'} -2025-10-17 15:41:17,240 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 15:41:17,240 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Kostya -2025-10-17 15:41:17,240 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1744560000000 -2025-10-17 15:41:17,241 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: OTA -2025-10-17 15:41:17,241 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Telegram bot -2025-10-17 15:41:17,241 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Update failure. Check attachments -2025-10-17 15:41:17,241 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 15:41:17,241 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR542 -2025-10-17 15:41:17,241 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 15:41:17,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 06/05:Suggest the user to retry, if it fails, capture the DMC logs. -27/04:Awaiting feedback on clearance results. -24/04:Awaiting feedback on clearance results. -21/04:Awaiting feedback on clearance results. -17/04: Private letter has been urged sub-OTA Liu Jinlong, is in the process of investigation. -14/04: TSP saw that the login and logout status of the vehicle was normal, and provided a screenshot indicating that the connected network was normal. The screenshot error message: upgrade failed. Please contact after-sales and transfer to OTA for troubleshooting.@刘金龙 -2025-10-17 15:41:17,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: OTA -2025-10-17 15:41:17,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RD064739 -2025-10-17 15:41:17,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED VX FL(M36T) -2025-10-17 15:41:17,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: 刘金龙 -2025-10-17 15:41:17,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0506:建议用户重新尝试,如失败,抓取DMC日志 -0427:等待排查结果反馈 -0424:等待排查结果反馈 -0421:等待排查结果反馈 -0417:已私信催次OTA刘金龙,正在排查中 -0414:TSP见该车登录注销状态正常,提供截图中提示连接的网络正常,截图错误提示:升级失败,请与售后联系,转OTA排查 -2025-10-17 15:41:17,243 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-17 15:41:17,243 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-17 15:41:17,330 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Vsevolod Tsoi', 'Date creation': 1744560000000, 'Module(模块)': 'local O&M', 'Source': 'Telegram bot', 'TR Description': 'Commands are not executed. Vehicle data is not updated in the app - shown as started and unlocked but in fact the car locked and the engine stopped. MNO: there is no apn1 available since April, 1st (see photo attached). Last tbox log in on \n2025-04-16 08:15:54, last high frequency data 2025-03-06 08:39:11.', 'TR Level': 'Low', 'TR Number': 'TR543', 'TR Status': 'Processing', 'TR tracking': '29/04:waiting customer go to dealer\n27/04:MNO feedback: The network connection is normal, but TBOX did not actively use APN1, resulting in the inability to upload logs. It is recommended that users log in to retrieve logs.@Vsevolod Tsoi\n27/04:TSP attempted to remotely obtain TBOX logs, but no logs were uploaded. However, the platform showed that the vehicle was online, so it was transferred to MNO for investigation.\n24/04:Waiting for MNO analysis results and TBOX log \n21/04: Waiting for analysis results and TBOX log feedback\n17/04:Turn MNO analysis.Also recommend to grab the TBOX logs.@Vsevolod Tsoi\n17/04: coordinates are 60.068188 & 30.372103 where the operation was executed.\n16/04:The platform query remote control prompts 35 seconds timeout, it is recommended that the user feedback the location information (latitude and longitude) of the remote control place where the signal is better, restart the vehicle and the mobile phone APP and then try remote control. Also recommend to grab the TBOX logs and analyse them for no APN1 walks.\n16/04: command - stop the engine on April, 16th at 10:00. However, in fact the car was locked and the engine stopped.', 'Type of problem': 'Remote control ', 'VIN|sim': 'LVTDD24B5RG089645', 'Vehicle Type01': 'Tiggo9 (T28)', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '0429:等待用户进站\n0427:MNO反馈网络连接正常,TBOX没有主动使用APN1导致日志无法上传,建议用户进站取日志\n0427:TSP尝试远程获取TBOX日志,未见日志上传,但平台显示车辆在线,转MNO排查@林兆国\n0424:等待Tbox日志及MNO分析结果\n0421:等待分析结果与TBOX日志反馈\n0417: 执行操作的坐标为60.068188和30.372103。\n0417: 转MNO排查网络,同时抓取TBOX日志分析。\n0416:平台查询远控提示35秒超时,建议用户反馈远控地的位置信息(经纬度)在信号较好的地方,重启车辆及手机APP后尝试远控。同时针对无APN1走动,建议抓取TBOX日志分析.\n0416;反馈远控无法生效,车辆数据在APP中不显示,APN1自四月起不可用,但有TBOX登录记录,最后高频数据上传时间为2025-03-06 08:39:11.'} -2025-10-17 15:41:17,331 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 15:41:17,331 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi -2025-10-17 15:41:17,331 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1744560000000 -2025-10-17 15:41:17,331 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 15:41:17,332 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Telegram bot -2025-10-17 15:41:17,332 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Commands are not executed. Vehicle data is not updated in the app - shown as started and unlocked but in fact the car locked and the engine stopped. MNO: there is no apn1 available since April, 1st (see photo attached). Last tbox log in on -2025-04-16 08:15:54, last high frequency data 2025-03-06 08:39:11. -2025-10-17 15:41:17,332 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 15:41:17,332 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR543 -2025-10-17 15:41:17,332 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 15:41:17,333 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 29/04:waiting customer go to dealer -27/04:MNO feedback: The network connection is normal, but TBOX did not actively use APN1, resulting in the inability to upload logs. It is recommended that users log in to retrieve logs.@Vsevolod Tsoi -27/04:TSP attempted to remotely obtain TBOX logs, but no logs were uploaded. However, the platform showed that the vehicle was online, so it was transferred to MNO for investigation. -24/04:Waiting for MNO analysis results and TBOX log -21/04: Waiting for analysis results and TBOX log feedback -17/04:Turn MNO analysis.Also recommend to grab the TBOX logs.@Vsevolod Tsoi -17/04: coordinates are 60.068188 & 30.372103 where the operation was executed. -16/04:The platform query remote control prompts 35 seconds timeout, it is recommended that the user feedback the location information (latitude and longitude) of the remote control place where the signal is better, restart the vehicle and the mobile phone APP and then try remote control. Also recommend to grab the TBOX logs and analyse them for no APN1 walks. -16/04: command - stop the engine on April, 16th at 10:00. However, in fact the car was locked and the engine stopped. -2025-10-17 15:41:17,333 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Remote control -2025-10-17 15:41:17,333 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B5RG089645 -2025-10-17 15:41:17,334 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: Tiggo9 (T28) -2025-10-17 15:41:17,334 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Vsevolod Tsoi -2025-10-17 15:41:17,334 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0429:等待用户进站 -0427:MNO反馈网络连接正常,TBOX没有主动使用APN1导致日志无法上传,建议用户进站取日志 -0427:TSP尝试远程获取TBOX日志,未见日志上传,但平台显示车辆在线,转MNO排查@林兆国 -0424:等待Tbox日志及MNO分析结果 -0421:等待分析结果与TBOX日志反馈 -0417: 执行操作的坐标为60.068188和30.372103。 -0417: 转MNO排查网络,同时抓取TBOX日志分析。 -0416:平台查询远控提示35秒超时,建议用户反馈远控地的位置信息(经纬度)在信号较好的地方,重启车辆及手机APP后尝试远控。同时针对无APN1走动,建议抓取TBOX日志分析. -0416;反馈远控无法生效,车辆数据在APP中不显示,APN1自四月起不可用,但有TBOX登录记录,最后高频数据上传时间为2025-03-06 08:39:11. -2025-10-17 15:41:17,334 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-17 15:41:17,334 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-17 15:41:17,423 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Vsevolod Tsoi', 'Date creation': 1744732800000, 'Date of close TR': 1744964488000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "After starting the engine remotely via mobile app, cutomer calls another command - driver seat heating. It's executed successfully exept that with driver seat heating command, air conditioning is also exectued but it's not needed. Also the engine is stopping when switching off the air conditionning or switching all the heating systems off. Please confirm if it's setup in this way or it's an issue.", 'TR Level': 'Low', 'TR Number': 'TR544', 'TR Status': 'close', 'TR tracking': "18/04: feedback is provided to customer's that this is operation algoritm of the app. Customer's feedback: if it worked seperately it would be better => client's wish.\n17/04:The tanker is designed so that the air conditioning and seat heating are linked, this is a preset operation and there is no way to change it.\n16/04: Asked app , learnt that need to ask about cockpit, suggested to discuss at tomorrow's day meeting", 'Type of problem': 'Remote control ', 'VIN|sim': 'LVTDD24B7RG118806', 'Vehicle Type01': 'Tiggo9 (T28)', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '17/04:油车设计上空调和座椅加热是关联的,设计如此,无需更改\n0416:询问app张明亮,得知需询问座舱,建议明日日会讨论'} -2025-10-17 15:41:17,424 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Date of close TR', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 15:41:17,426 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi -2025-10-17 15:41:17,426 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1744732800000 -2025-10-17 15:41:17,426 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date of close TR -> date_of_close: 1744964488000 -2025-10-17 15:41:17,426 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 15:41:17,427 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 15:41:17,427 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: After starting the engine remotely via mobile app, cutomer calls another command - driver seat heating. It's executed successfully exept that with driver seat heating command, air conditioning is also exectued but it's not needed. Also the engine is stopping when switching off the air conditionning or switching all the heating systems off. Please confirm if it's setup in this way or it's an issue. -2025-10-17 15:41:17,427 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 15:41:17,427 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR544 -2025-10-17 15:41:17,427 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: close -2025-10-17 15:41:17,427 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 18/04: feedback is provided to customer's that this is operation algoritm of the app. Customer's feedback: if it worked seperately it would be better => client's wish. -17/04:The tanker is designed so that the air conditioning and seat heating are linked, this is a preset operation and there is no way to change it. -16/04: Asked app , learnt that need to ask about cockpit, suggested to discuss at tomorrow's day meeting -2025-10-17 15:41:17,428 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Remote control -2025-10-17 15:41:17,428 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B7RG118806 -2025-10-17 15:41:17,428 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: Tiggo9 (T28) -2025-10-17 15:41:17,428 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Vsevolod Tsoi -2025-10-17 15:41:17,428 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 17/04:油车设计上空调和座椅加热是关联的,设计如此,无需更改 -0416:询问app张明亮,得知需询问座舱,建议明日日会讨论 -2025-10-17 15:41:17,429 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-17 15:41:17,429 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-17 15:41:17,519 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Kostya', 'Date creation': 1744732800000, 'Module(模块)': 'OTA', 'Source': 'Telegram bot', 'TR Description': 'Tbox update for T22 cant start engine after turning off by customer.\nNo any other remote control systems on the car according to the customer.', 'TR Level': 'Low', 'TR Number': 'TR545', 'TR Status': 'Processing', 'TR tracking': "29/04:User feedback will try to re-open when he have time over the weekend, awaiting feedback.\n27/04: Asked customer. Waiting for feedback \n24/04: Asked customer. Waiting for feedback \n21/04:Waiting for feedback and trying again for results.\n17/04:OTA feedback reported error as remote power-up failure, not entered the upgrade process, no package uploaded in the background. You can let the customer try a few more times, if it still does not work, use a USB stick to get the OTA logs.@Kostya\n17/04: TSP saw TBOX reboot records and SMS notification on the 16th, but as of 9:00 BST on the 17th, no logs have been uploaded.Turn OTA analysis.\n16/04: Can't get TBox log remotly. Request is success but there is no result", 'Type of problem': 'OTA', 'VIN|sim': 'XEYDD14B3SA012122', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Kostya', '处理过程': '0429:用户反馈周末有空会尝试重新操作,等待反馈\n0427:等待反馈重新尝试结果\n0424:等待反馈重新尝试结果\n0423:等待反馈重新尝试结果\n0421:等待反馈重新尝试结果\n0417:OTA反馈上报错误为远程上电失败,未进入升级流程,后台没有包传上来。可以让客户多试几次,如果仍然不行,使用u盘获取OTA日志\n0417:TSP见16日TBOX有重启记录且有短信下发通知,但截止北京时间17日9:00仍未见日志上传,转OTA排查\n0416:无法远程获取 TBox 日志。请求成功,但没有结果'} -2025-10-17 15:41:17,520 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 15:41:17,520 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Kostya -2025-10-17 15:41:17,520 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1744732800000 -2025-10-17 15:41:17,520 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: OTA -2025-10-17 15:41:17,520 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Telegram bot -2025-10-17 15:41:17,520 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Tbox update for T22 cant start engine after turning off by customer. -No any other remote control systems on the car according to the customer. -2025-10-17 15:41:17,521 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 15:41:17,521 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR545 -2025-10-17 15:41:17,521 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 15:41:17,521 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 29/04:User feedback will try to re-open when he have time over the weekend, awaiting feedback. -27/04: Asked customer. Waiting for feedback -24/04: Asked customer. Waiting for feedback -21/04:Waiting for feedback and trying again for results. -17/04:OTA feedback reported error as remote power-up failure, not entered the upgrade process, no package uploaded in the background. You can let the customer try a few more times, if it still does not work, use a USB stick to get the OTA logs.@Kostya -17/04: TSP saw TBOX reboot records and SMS notification on the 16th, but as of 9:00 BST on the 17th, no logs have been uploaded.Turn OTA analysis. -16/04: Can't get TBox log remotly. Request is success but there is no result -2025-10-17 15:41:17,521 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: OTA -2025-10-17 15:41:17,521 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: XEYDD14B3SA012122 -2025-10-17 15:41:17,521 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 15:41:17,522 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Kostya -2025-10-17 15:41:17,522 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0429:用户反馈周末有空会尝试重新操作,等待反馈 -0427:等待反馈重新尝试结果 -0424:等待反馈重新尝试结果 -0423:等待反馈重新尝试结果 -0421:等待反馈重新尝试结果 -0417:OTA反馈上报错误为远程上电失败,未进入升级流程,后台没有包传上来。可以让客户多试几次,如果仍然不行,使用u盘获取OTA日志 -0417:TSP见16日TBOX有重启记录且有短信下发通知,但截止北京时间17日9:00仍未见日志上传,转OTA排查 -0416:无法远程获取 TBox 日志。请求成功,但没有结果 -2025-10-17 15:41:17,522 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-17 15:41:17,522 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-17 15:41:17,607 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Vsevolod Tsoi', 'Date creation': 1744819200000, 'Module(模块)': 'OTA', 'Source': 'Mail', 'TR Description': 'OTA update failed. It doesn\'t start. An error message comes up "Power on failure"', 'TR Level': 'Low', 'TR Number': 'TR547', 'TR Status': 'Processing', 'TR tracking': '30/04:OTA analysed that because there was no SK learning, the remote power-up theft could not be passed, so the power-up failed, and suggested that the user should come into the station and re-learn the SK\n27/04: waiting OTA team analysis. \n24/04: OTA log attached.\n21/04: Waiting for OTA logs\n17/04:ota logs not Tbox logs."You need to go into ota project mode, click collect log and then insert the USB stick."@Vsevolod Tsoi\n17/04: tbox log attached as well as video.', 'Type of problem': 'OTA', 'VIN|sim': 'XEYDD14B3RA002731', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': '韦正辉', '处理过程': '0430:OTA分析因为没有进行SK学习,远程上电防盗过不了,所以上电失败,建议用户进站,重新学习SK\n0427:等待OTA分析\n0424:转OTA分析\n0421:等待OTA日志\n0417:需要OTA日志,请邀请客户进站处理,“需要进ota工程模式里 先点击收集log 然后插入u盘”\n0417:TBox日志已附,操作视频已附,同TR545'} -2025-10-17 15:41:17,607 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 15:41:17,608 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi -2025-10-17 15:41:17,608 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1744819200000 -2025-10-17 15:41:17,608 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: OTA -2025-10-17 15:41:17,608 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 15:41:17,608 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: OTA update failed. It doesn't start. An error message comes up "Power on failure" -2025-10-17 15:41:17,608 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 15:41:17,609 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR547 -2025-10-17 15:41:17,609 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 15:41:17,609 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 30/04:OTA analysed that because there was no SK learning, the remote power-up theft could not be passed, so the power-up failed, and suggested that the user should come into the station and re-learn the SK -27/04: waiting OTA team analysis. -24/04: OTA log attached. -21/04: Waiting for OTA logs -17/04:ota logs not Tbox logs."You need to go into ota project mode, click collect log and then insert the USB stick."@Vsevolod Tsoi -17/04: tbox log attached as well as video. -2025-10-17 15:41:17,609 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: OTA -2025-10-17 15:41:17,609 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: XEYDD14B3RA002731 -2025-10-17 15:41:17,609 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 15:41:17,609 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: 韦正辉 -2025-10-17 15:41:17,609 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0430:OTA分析因为没有进行SK学习,远程上电防盗过不了,所以上电失败,建议用户进站,重新学习SK -0427:等待OTA分析 -0424:转OTA分析 -0421:等待OTA日志 -0417:需要OTA日志,请邀请客户进站处理,“需要进ota工程模式里 先点击收集log 然后插入u盘” -0417:TBox日志已附,操作视频已附,同TR545 -2025-10-17 15:41:17,610 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-17 15:41:17,610 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-17 15:41:17,694 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Vsevolod Tsoi', 'Date creation': 1744819200000, 'Module(模块)': '生态/ecologically', 'Source': 'Mail', 'TR Description': 'VK apps and Navi do not operate after payment for superpackage on April, 14', 'TR Level': 'Low', 'TR Number': 'TR548', 'TR Status': 'Processing', 'TR tracking': "29/04: provide IHU logs.\n25/04: VK apps and Navi still do not work - see Picture_2 attached as well as VIDEO_1, VIDEO_2.\n24/04:Renewal issues are recommended to confirm the final solution in the Troubleshooting Group.\n23/04: customer is asked again to provide a feedback if VK video and Navi still do not work.\n21/04: Awaiting local OM feedback on the progress of the problem.\n18/04:The latest test method, let the user lock the car, vehicle hibernation and then power on, there is network. For reference, if the user is in an emergency, this method can be used to solve the problem temporarily, the final solution is waiting for discussion!\n18/04: TSP has seen the car's TBOX login logged off as normal, MNO renewal initiated at 04-14 17:28:59 but no traffic changes seen on the 15th.\n17/04: please provide a procedure to be applied so that the customer can immediately have the access to the network.", 'Type of problem': 'Trafick Payment', 'VIN|sim': 'LVTDD24B4PD575331', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '袁清', '处理过程': '0429:请属地提供IHU日志供排查\n0425: VK 应用程序和导航仪仍然无法工作 - 请参见附图_2 以及视频_1、视频_2。@袁清\n0424:续费问题建议在问题排查群确认最终解决方案\n0421:等待属地反馈问题进度\n0418:最新的测试方法,让用户锁车、车辆休眠后再上电,就有网了。可供参考,如用户紧急,可用此方法暂时解决,最终解决方案等待商讨\n0418:TSP已见该车TBOX登录注销正常,MNO续费04-14 17:28:59发起,但15日未见流量变动'} -2025-10-17 15:41:17,695 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 15:41:17,695 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi -2025-10-17 15:41:17,695 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1744819200000 -2025-10-17 15:41:17,695 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: 生态/ecologically -2025-10-17 15:41:17,695 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 15:41:17,696 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: VK apps and Navi do not operate after payment for superpackage on April, 14 -2025-10-17 15:41:17,696 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 15:41:17,696 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR548 -2025-10-17 15:41:17,696 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 15:41:17,696 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 29/04: provide IHU logs. -25/04: VK apps and Navi still do not work - see Picture_2 attached as well as VIDEO_1, VIDEO_2. -24/04:Renewal issues are recommended to confirm the final solution in the Troubleshooting Group. -23/04: customer is asked again to provide a feedback if VK video and Navi still do not work. -21/04: Awaiting local OM feedback on the progress of the problem. -18/04:The latest test method, let the user lock the car, vehicle hibernation and then power on, there is network. For reference, if the user is in an emergency, this method can be used to solve the problem temporarily, the final solution is waiting for discussion! -18/04: TSP has seen the car's TBOX login logged off as normal, MNO renewal initiated at 04-14 17:28:59 but no traffic changes seen on the 15th. -17/04: please provide a procedure to be applied so that the customer can immediately have the access to the network. -2025-10-17 15:41:17,696 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Trafick Payment -2025-10-17 15:41:17,697 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B4PD575331 -2025-10-17 15:41:17,697 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED VX FL(M36T) -2025-10-17 15:41:17,697 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: 袁清 -2025-10-17 15:41:17,697 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0429:请属地提供IHU日志供排查 -0425: VK 应用程序和导航仪仍然无法工作 - 请参见附图_2 以及视频_1、视频_2。@袁清 -0424:续费问题建议在问题排查群确认最终解决方案 -0421:等待属地反馈问题进度 -0418:最新的测试方法,让用户锁车、车辆休眠后再上电,就有网了。可供参考,如用户紧急,可用此方法暂时解决,最终解决方案等待商讨 -0418:TSP已见该车TBOX登录注销正常,MNO续费04-14 17:28:59发起,但15日未见流量变动 -2025-10-17 15:41:17,697 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-17 15:41:17,697 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-17 15:41:17,784 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Kostya', 'Date creation': 1744905600000, 'Date of close TR': 1745300076000, 'Module(模块)': 'local O&M', 'Source': 'Telegram bot', 'TR Description': 'Vk apps doesnt work, NAVI is ok. \nSim Activate\nNo abnormal data in PKI\nCheck Attachments', 'TR Level': 'Low', 'TR Number': 'TR549', 'TR Status': 'close', 'TR tracking': '22/04:Solved - possitive feedback\n22/04:Eco is the reason for the background configuration has been modified, we recommend that the user restart the car machine and try again can be.@Kostya\n18/04:The local feedback shows that VK is unavailable, but the navigation is normal and there are no abnormalities in PKI. By the time the problem was raised, TSP could see that the vehicle status was online, and there were changes in APN1 and APN2 traffic on the 18th. Ecological investigation.@颜廷晓', 'Type of problem': 'VK ', 'VIN|sim': 'LVTDD24B3RG092186', 'Vehicle Type01': 'Tiggo9 (T28)', 'Wilfulness(责任人)': 'Kostya', '处理过程': '0422:生态是后台配置原因 已修改,建议用户重启车机后重新尝试即可@Kostya\n0418:属地反馈VK不可用,但是导航正常,PKI未出现异常,至问题提出时,TSP可见车辆状态在线,查询有18日APN1,APN2流量变动。转生态排查。@颜廷晓'} -2025-10-17 15:41:17,785 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Date of close TR', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 15:41:17,785 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Kostya -2025-10-17 15:41:17,785 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1744905600000 -2025-10-17 15:41:17,785 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date of close TR -> date_of_close: 1745300076000 -2025-10-17 15:41:17,785 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 15:41:17,785 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Telegram bot -2025-10-17 15:41:17,786 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Vk apps doesnt work, NAVI is ok. -Sim Activate -No abnormal data in PKI -Check Attachments -2025-10-17 15:41:17,786 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 15:41:17,786 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR549 -2025-10-17 15:41:17,786 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: close -2025-10-17 15:41:17,786 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 22/04:Solved - possitive feedback -22/04:Eco is the reason for the background configuration has been modified, we recommend that the user restart the car machine and try again can be.@Kostya -18/04:The local feedback shows that VK is unavailable, but the navigation is normal and there are no abnormalities in PKI. By the time the problem was raised, TSP could see that the vehicle status was online, and there were changes in APN1 and APN2 traffic on the 18th. Ecological investigation.@颜廷晓 -2025-10-17 15:41:17,786 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: VK -2025-10-17 15:41:17,787 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B3RG092186 -2025-10-17 15:41:17,787 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: Tiggo9 (T28) -2025-10-17 15:41:17,787 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Kostya -2025-10-17 15:41:17,787 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0422:生态是后台配置原因 已修改,建议用户重启车机后重新尝试即可@Kostya -0418:属地反馈VK不可用,但是导航正常,PKI未出现异常,至问题提出时,TSP可见车辆状态在线,查询有18日APN1,APN2流量变动。转生态排查。@颜廷晓 -2025-10-17 15:41:17,787 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-17 15:41:17,787 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-17 15:41:17,873 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Kostya', 'Date creation': 1745164800000, 'Module(模块)': 'local O&M', 'Source': 'Telegram bot', 'TR Description': 'APN1 Issue on T28', 'TR Level': 'Low', 'TR Number': 'TR550', 'TR Status': 'Processing', 'TR tracking': '27/04:waiting customer go to dealer\n25/04:waiting customer go to dealer\n24/04:The platform experienced remote control failures from the 19th to the 23rd. On the 19th, Tbox confirmed the command but did not report the execution result. After 35 seconds, it timed out. On the 23rd, Tbox was offline and there was no response after waking up. TSP has attempted to capture logs multiple times but has not been successful. It is recommended that users log in to retrieve logs.\n24/04: Asked customer. Waiting for feedback \n21/04: When submitting the issue, it was observed that MNO21 was experiencing daily traffic flow and TSP vehicles were online. Please provide the remote control operation time.@Kostya', 'Type of problem': 'Remote control ', 'VIN|sim': 'LVTDD24B9RG128401', 'Vehicle Type01': 'Tiggo9 (T28)', 'Wilfulness(责任人)': 'Kostya', '处理过程': '0427:等待用户进站\n0425:等待用户进站\n0424:平台见19日至23日远控失败,19日Tbox确认指令但未上报执行结果,35秒后超时。23日Tbox不在线,唤醒后无响应。TSP多次尝试抓取日志未果,建议用户进站取日志。\n0421:问题提交时,已见MNO21日流量走动,且TSP车辆在线,请提供远控操作时间'} -2025-10-17 15:41:17,874 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 15:41:17,875 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Kostya -2025-10-17 15:41:17,875 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745164800000 -2025-10-17 15:41:17,875 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 15:41:17,876 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Telegram bot -2025-10-17 15:41:17,876 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: APN1 Issue on T28 -2025-10-17 15:41:17,876 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 15:41:17,877 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR550 -2025-10-17 15:41:17,877 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 15:41:17,877 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 27/04:waiting customer go to dealer -25/04:waiting customer go to dealer -24/04:The platform experienced remote control failures from the 19th to the 23rd. On the 19th, Tbox confirmed the command but did not report the execution result. After 35 seconds, it timed out. On the 23rd, Tbox was offline and there was no response after waking up. TSP has attempted to capture logs multiple times but has not been successful. It is recommended that users log in to retrieve logs. -24/04: Asked customer. Waiting for feedback -21/04: When submitting the issue, it was observed that MNO21 was experiencing daily traffic flow and TSP vehicles were online. Please provide the remote control operation time.@Kostya -2025-10-17 15:41:17,878 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Remote control -2025-10-17 15:41:17,878 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B9RG128401 -2025-10-17 15:41:17,878 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: Tiggo9 (T28) -2025-10-17 15:41:17,878 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Kostya -2025-10-17 15:41:17,878 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0427:等待用户进站 -0425:等待用户进站 -0424:平台见19日至23日远控失败,19日Tbox确认指令但未上报执行结果,35秒后超时。23日Tbox不在线,唤醒后无响应。TSP多次尝试抓取日志未果,建议用户进站取日志。 -0421:问题提交时,已见MNO21日流量走动,且TSP车辆在线,请提供远控操作时间 -2025-10-17 15:41:17,879 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-17 15:41:17,879 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-17 15:41:18,991 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 10, 'synced_count': 10, 'created_count': 10, 'updated_count': 0, 'ai_suggestions_generated': True, 'errors': []} -2025-10-17 15:41:18,992 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:41:18] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-17 15:41:20,205 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:41:20] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 15:43:02,650 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:43:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:43:03,148 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-17 15:43:03,149 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 15:43:03,149 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:43:03,655 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:43:03] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:43:04,539 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:43:04,540 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1017:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查\n0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 15:43:04,541 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-17 15:43:04,541 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-17 15:43:04,715 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-17 15:43:04,887 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-17 15:43:04,887 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 15:43:04,887 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:43:05,481 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:43:05] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:43:07,516 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:43:07,517 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': "模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题..."}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-17 15:43:07,518 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-17 15:43:08,006 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1017:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查\n0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-17 15:43:08,007 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 15:43:08,007 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1017:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查 -0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查 -2025-10-17 15:43:08,007 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-17 15:43:08,007 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-17 15:43:08,007 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 15:43:08,007 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 15:43:08,008 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-17 15:43:08,008 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 15:43:08,008 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-17 15:43:08,008 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 15:43:08,008 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-17 15:43:08,009 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-17 15:43:08,009 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-17 15:43:08,009 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 15:43:08,009 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-17 15:43:08,009 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-17 15:43:08,009 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-17 15:43:08,009 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-17 15:43:08,745 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-17 15:43:08,745 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:43:08] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-17 15:43:09,201 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:43:09] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 15:54:21,296 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 15:54:21,297 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 15:54:23,506 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 15:54:25,015 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 15:54:25,129 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 15:54:25,220 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 15:54:25,220 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 15:54:25,422 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:54:25,585 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 15:54:25,598 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-17 15:54:25,598 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-17 15:54:25,764 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:54:25,931 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-17 15:54:25,933 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-17 15:54:25,934 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-17 15:54:25,935 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-17 15:54:25,936 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-17 15:54:25,937 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-17 15:54:25,939 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-17 15:54:25,940 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-17 15:54:25,942 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-17 15:54:25,944 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-17 15:54:25,948 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-17 15:54:25,950 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-17 15:54:25,953 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-17 15:54:25,954 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-17 15:54:25,956 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-17 15:54:25,957 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-17 15:54:25,958 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-17 15:54:25,961 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-17 15:54:25,963 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-17 15:54:25,967 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-17 15:54:25,969 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-17 15:54:25,971 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-17 15:54:25,973 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-17 15:54:25,974 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-17 15:54:25,974 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-17 15:54:26,325 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 6380, 'msg': 'ok', 'tenant_access_token': 't-g104ahfE4MP6O3EVDXWZS7JFCJMQH2UFJKWK4RRM'} -2025-10-17 15:54:26,325 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104ahfE4MP6O3EVDX... -2025-10-17 15:54:26,326 - src.integrations.feishu_client - INFO - 令牌有效期: 6380秒,过期时间: 2025-10-17 17:40:46 -2025-10-17 15:54:26,327 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 15:54:26,327 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:54:27,742 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:54:27] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:54:27,933 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:54:27,933 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': "模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 15:54:27,935 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-17 15:54:27,935 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-17 15:54:28,100 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-17 15:54:28,270 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-17 15:54:29,321 - src.integrations.workorder_sync - INFO - 格式化AI建议: rec253kqBfXae4 -2025-10-17 15:54:29,321 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 15:54:29,321 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:54:31,301 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:54:31,302 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:,作为技术支持专家,请基于以下问题描述为工单提供专业的处理'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-17 15:54:31,303 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-17 15:54:31,529 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': "模拟LLM响应: \n作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-17 15:54:31,530 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 15:54:31,530 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 模拟LLM响应: -作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议: - -问题描述:The widget weather doesn't work - -相关背景信息: -无相关背景信息 - -请提供: -1. 问题... -2025-10-17 15:54:31,530 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-17 15:54:31,531 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-17 15:54:31,531 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 15:54:31,531 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 15:54:31,531 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-17 15:54:31,532 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 15:54:31,532 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-17 15:54:31,532 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 15:54:31,532 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-17 15:54:31,532 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-17 15:54:31,533 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-17 15:54:31,533 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 15:54:31,533 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-17 15:54:31,533 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-17 15:54:31,533 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-17 15:54:31,533 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-17 15:54:31,784 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-17 15:54:31,785 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:54:31] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-17 15:54:32,851 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:54:32] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 15:54:48,336 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:54:48,917 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 15:57:22,768 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-17 15:57:22,768 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 15:57:22,769 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:57:22,787 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:57:22] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:57:22,874 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:57:22] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:57:23,376 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:57:23] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:57:24,413 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:57:24,414 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 15:57:24,415 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-17 15:57:24,415 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-17 15:57:24,583 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-17 15:57:24,762 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-17 15:57:25,816 - src.integrations.workorder_sync - INFO - 格式化AI建议: rec253kqBfXae4 -2025-10-17 15:57:25,816 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 15:57:25,817 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:57:28,006 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:57:28,007 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:,作为技术支持专家,请基于以下问题描述为工单提供专业的处理'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-17 15:57:28,014 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-17 15:57:28,439 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-17 15:57:28,441 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 15:57:28,442 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-17 15:57:28,442 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-17 15:57:28,443 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 15:57:28,446 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 15:57:28,446 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-17 15:57:28,446 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 15:57:28,447 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-17 15:57:28,447 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 15:57:28,448 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-17 15:57:28,448 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-17 15:57:28,448 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-17 15:57:28,449 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 15:57:28,449 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-17 15:57:28,450 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-17 15:57:28,450 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-17 15:57:28,450 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-17 15:57:29,077 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-17 15:57:29,079 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:57:29] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-17 15:57:29,516 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:57:29] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 15:59:55,084 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:59:55] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 15:59:55,179 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:59:55] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 15:59:55,449 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-17 15:59:55,450 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 15:59:55,450 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:59:55,761 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 15:59:55] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 15:59:57,185 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:59:57,185 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:,作为技术支持专家,请基于以下问题描述为工单提供专业的处理', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 15:59:57,188 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-17 15:59:57,188 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-17 15:59:57,359 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-17 15:59:57,532 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-17 15:59:57,960 - src.integrations.workorder_sync - INFO - 格式化AI建议: rec253kqBfXae4 -2025-10-17 15:59:57,961 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 15:59:57,961 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 15:59:59,463 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 15:59:59,464 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:,作为技术支持专家,请基于以下问题描述为工单提供专业的处理'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-17 15:59:59,465 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-17 15:59:59,885 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:,作为技术支持专家,请基于以下问题描述为工单提供专业的处理', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-17 15:59:59,886 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 15:59:59,886 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。 -1017:作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:,作为技术支持专家,请基于以下问题描述为工单提供专业的处理 -2025-10-17 15:59:59,887 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-17 15:59:59,887 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-17 15:59:59,887 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 15:59:59,887 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 15:59:59,887 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-17 15:59:59,887 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 15:59:59,887 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-17 15:59:59,888 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 15:59:59,888 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-17 15:59:59,888 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-17 15:59:59,888 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-17 15:59:59,889 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 15:59:59,889 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-17 15:59:59,889 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-17 15:59:59,889 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-17 15:59:59,889 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-17 16:00:00,578 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-17 16:00:00,579 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:00:00] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-17 16:00:00,991 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:00:00] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 16:00:36,936 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:00:36] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:00:37,318 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-17 16:00:37,318 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 16:00:37,319 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:00:39,224 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:00:39,225 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:,作为技术支持专家,请基于以下问题描述为工单提供专业的处理', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 16:00:39,230 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-17 16:00:39,231 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-17 16:00:39,653 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-17 16:00:40,079 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-17 16:00:40,517 - src.integrations.workorder_sync - INFO - 格式化AI建议: rec253kqBfXae4 -2025-10-17 16:00:40,517 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 16:00:40,518 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:00:42,558 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:00:42,559 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:,作为技术支持专家,请基于以下问题描述为工单提供专业的处理'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-17 16:00:42,561 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-17 16:00:42,752 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:,作为技术支持专家,请基于以下问题描述为工单提供专业的处理', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-17 16:00:42,753 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 16:00:42,754 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。 -1017:作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:,作为技术支持专家,请基于以下问题描述为工单提供专业的处理 -2025-10-17 16:00:42,754 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-17 16:00:42,755 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-17 16:00:42,755 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 16:00:42,755 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 16:00:42,755 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-17 16:00:42,755 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 16:00:42,755 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-17 16:00:42,755 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 16:00:42,756 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-17 16:00:42,756 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-17 16:00:42,756 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-17 16:00:42,756 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 16:00:42,756 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-17 16:00:42,756 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-17 16:00:42,757 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-17 16:00:42,757 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-17 16:00:43,022 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-17 16:00:43,023 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:00:43] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-17 16:00:44,067 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:00:44] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 16:01:06,656 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 16:01:06,656 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 16:01:08,810 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 16:01:10,405 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 16:01:10,425 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 16:01:10,490 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 16:01:10,491 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 16:01:10,679 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:01:10,850 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 16:01:10,858 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-17 16:01:10,858 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-17 16:01:48,457 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:01:48] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:01:49,315 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:01:49] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:01:49,588 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:01:49,598 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:01:49,794 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-17 16:01:49,795 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-17 16:01:49,797 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-17 16:01:49,798 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-17 16:01:49,799 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-17 16:01:49,800 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-17 16:01:49,801 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-17 16:01:49,803 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-17 16:01:49,804 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-17 16:01:49,805 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-17 16:01:49,806 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-17 16:01:49,808 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-17 16:01:49,809 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-17 16:01:49,811 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-17 16:01:49,814 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-17 16:01:49,816 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-17 16:01:49,819 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-17 16:01:49,821 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-17 16:01:49,822 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-17 16:01:49,824 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-17 16:01:49,826 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-17 16:01:49,827 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-17 16:01:49,830 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-17 16:01:49,832 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-17 16:01:49,834 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-17 16:01:50,009 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:01:50] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 16:01:50,225 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 5936, 'msg': 'ok', 'tenant_access_token': 't-g104ahfE4MP6O3EVDXWZS7JFCJMQH2UFJKWK4RRM'} -2025-10-17 16:01:50,225 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104ahfE4MP6O3EVDX... -2025-10-17 16:01:50,226 - src.integrations.feishu_client - INFO - 令牌有效期: 5936秒,过期时间: 2025-10-17 17:40:46 -2025-10-17 16:01:50,227 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 16:01:50,228 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:01:50,271 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:01:51,959 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:01:51,959 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:,作为技术支持专家,请基于以下问题描述为工单提供专业的处理', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 16:01:51,960 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-17 16:01:51,960 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-17 16:01:52,166 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-17 16:01:52,371 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-17 16:01:52,789 - src.integrations.workorder_sync - INFO - 格式化AI建议: rec253kqBfXae4 -2025-10-17 16:01:52,789 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 16:01:52,789 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:01:55,236 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:01:55,236 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': "检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:模拟LLM响应: \n\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题..."}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-17 16:01:55,237 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-17 16:01:55,711 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:,作为技术支持专家,请基于以下问题描述为工单提供专业的处理', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-17 16:01:55,711 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 16:01:55,711 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。 -1017:作为技术支持专家,请基于以下问题描述为工单提供专业的处理建议:,作为技术支持专家,请基于以下问题描述为工单提供专业的处理 -2025-10-17 16:01:55,712 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-17 16:01:55,712 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-17 16:01:55,712 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 16:01:55,712 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 16:01:55,712 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-17 16:01:55,712 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 16:01:55,712 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-17 16:01:55,713 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 16:01:55,713 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-17 16:01:55,713 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-17 16:01:55,713 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-17 16:01:55,713 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 16:01:55,713 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-17 16:01:55,713 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-17 16:01:55,714 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-17 16:01:55,714 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-17 16:01:56,427 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-17 16:01:56,428 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:01:56] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-17 16:01:56,843 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:01:56] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 16:04:35,019 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:04:35] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:04:36,132 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-17 16:04:36,132 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 16:04:36,132 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:04:36,364 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:04:36] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:04:36,869 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:04:36] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 16:04:37,625 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:04:37,626 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': "检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:模拟LLM响应: \n\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 16:04:37,627 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-17 16:04:37,628 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-17 16:04:37,790 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'The widget weather doesn't work ' 返回 0 个结果 -2025-10-17 16:04:37,946 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-17 16:04:39,143 - src.integrations.workorder_sync - INFO - 格式化AI建议: rec253kqBfXae4 -2025-10-17 16:04:39,143 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 16:04:39,143 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:04:40,610 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:04:40,610 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': "检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:模拟LLM响应: \n\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题..."}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-17 16:04:40,612 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-17 16:04:41,081 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': "检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:模拟LLM响应: \n\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-17 16:04:41,082 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 16:04:41,082 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。 -1017:模拟LLM响应: - - -问题描述:The widget weather doesn't work - -相关背景信息: -无相关背景信息 - -请提供: -1. 问题... -2025-10-17 16:04:41,083 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-17 16:04:41,083 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-17 16:04:41,083 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 16:04:41,083 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 16:04:41,083 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-17 16:04:41,084 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 16:04:41,084 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-17 16:04:41,084 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 16:04:41,084 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-17 16:04:41,084 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-17 16:04:41,084 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-17 16:04:41,084 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 16:04:41,084 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-17 16:04:41,084 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-17 16:04:41,085 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-17 16:04:41,085 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-17 16:04:41,797 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-17 16:04:41,797 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:04:41] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-17 16:04:42,317 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:04:42] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 16:18:54,540 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 16:18:54,540 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 16:18:59,894 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 16:19:01,142 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 16:19:01,169 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 16:19:01,225 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 16:19:01,227 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 16:19:01,709 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:19:02,177 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 16:19:02,183 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-17 16:19:02,184 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-17 16:19:10,003 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:10] "GET / HTTP/1.1" 200 - -2025-10-17 16:19:10,091 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:10] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-17 16:19:10,092 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:10] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-17 16:19:10,094 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:10] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-17 16:19:10,097 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:10] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-17 16:19:10,342 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:10] "GET /api/system/info HTTP/1.1" 200 - -2025-10-17 16:19:10,363 - websockets.server - INFO - connection open -2025-10-17 16:19:10,364 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - ^^^^^^^^^^^^^^^^^^^^^^^^ -TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-17 16:19:10,365 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:10] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-17 16:19:10,807 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:19:10,983 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:19:11,182 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-17 16:19:11,183 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-17 16:19:11,185 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-17 16:19:11,188 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-17 16:19:11,191 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-17 16:19:11,191 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-17 16:19:11,192 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-17 16:19:11,194 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-17 16:19:11,195 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-17 16:19:11,196 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-17 16:19:11,197 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-17 16:19:11,198 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-17 16:19:11,199 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-17 16:19:11,201 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-17 16:19:11,204 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-17 16:19:11,206 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-17 16:19:11,208 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-17 16:19:11,212 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-17 16:19:11,214 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-17 16:19:11,215 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-17 16:19:11,217 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-17 16:19:11,220 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-17 16:19:11,222 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-17 16:19:11,273 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:11] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 16:19:11,336 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:11] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:19:11,658 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:11] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 16:19:11,827 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:19:11,953 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:11] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 16:19:11,988 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:19:12,470 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:19:12,640 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:19:12,902 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:12] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 16:19:13,379 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:13] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:19:13,505 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:13] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 16:19:14,446 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:14] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 16:19:15,395 - websockets.server - INFO - connection open -2025-10-17 16:19:15,395 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - ^^^^^^^^^^^^^^^^^^^^^^^^ -TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-17 16:19:16,313 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:16] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 16:19:16,346 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:16] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 16:19:16,422 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:16] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 16:19:16,695 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-17 16:19:16,695 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-17 16:19:16,890 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:16] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:19:17,088 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 4889, 'msg': 'ok', 'tenant_access_token': 't-g104ahfE4MP6O3EVDXWZS7JFCJMQH2UFJKWK4RRM'} -2025-10-17 16:19:17,089 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:17] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 16:19:17,089 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104ahfE4MP6O3EVDX... -2025-10-17 16:19:17,090 - src.integrations.feishu_client - INFO - 令牌有效期: 4889秒,过期时间: 2025-10-17 17:40:46 -2025-10-17 16:19:17,091 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 16:19:17,091 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:19:17,099 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:17] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 16:19:17,120 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:17] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:19:17,869 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:17] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 16:19:18,564 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:18] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:19:18,748 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:19:18,748 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': "检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:模拟LLM响应: \n\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 16:19:18,749 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-17 16:19:18,749 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-17 16:19:19,184 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:19:19,309 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:19] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 16:19:19,638 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760689159 -2025-10-17 16:19:19,817 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供技术支持建议:The widget weather doesn't work ' 返回 0 个结果 -2025-10-17 16:19:20,505 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:20] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:19:21,279 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:21] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 16:19:27,758 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:27] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:19:28,299 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:28] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:19:28,338 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:28] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:19:29,059 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:29] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 16:19:29,392 - src.core.llm_client - INFO - API请求成功 -2025-10-17 16:19:30,106 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-17 16:19:30,107 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 16:19:30,107 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:19:30,251 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:30] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:19:30,286 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-17 16:19:30,719 - src.integrations.workorder_sync - INFO - 格式化AI建议: rec253kqBfXae4 -2025-10-17 16:19:30,719 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 16:19:30,719 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:19:31,577 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:19:31,577 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 16:19:31,578 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-17 16:19:31,578 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-17 16:19:32,053 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:19:32,149 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:32] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 16:19:32,524 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760689172 -2025-10-17 16:19:32,704 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供技术支持建议:The widget weather doesn't work ' 返回 0 个结果 -2025-10-17 16:19:33,028 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:19:33,029 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:您好,感谢您反馈问题。关于天气小工具无法正常使用的情况,建议您先尝试以下操作:\n\n1. 检查车机系统时间与网络连接是否正常,,确保车辆已连接到稳定的网络'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-17 16:19:33,030 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-17 16:19:33,205 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': "检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:模拟LLM响应: \n\n\n问题描述:The widget weather doesn't work \n\n相关背景信息:\n无相关背景信息\n\n请提供:\n1. 问题...", 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-17 16:19:33,205 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 16:19:33,206 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。 -1017:模拟LLM响应: - - -问题描述:The widget weather doesn't work - -相关背景信息: -无相关背景信息 - -请提供: -1. 问题... -2025-10-17 16:19:33,206 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-17 16:19:33,206 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-17 16:19:33,206 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 16:19:33,206 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 16:19:33,207 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-17 16:19:33,207 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 16:19:33,207 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-17 16:19:33,207 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 16:19:33,207 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-17 16:19:33,208 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-17 16:19:33,208 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-17 16:19:33,208 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 16:19:33,208 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-17 16:19:33,209 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-17 16:19:33,209 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-17 16:19:33,209 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-17 16:19:33,483 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-17 16:19:33,484 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:33] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-17 16:19:34,682 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:34] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 16:19:38,687 - src.core.llm_client - INFO - API请求成功 -2025-10-17 16:19:39,047 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-17 16:19:40,228 - src.integrations.workorder_sync - INFO - 格式化AI建议: rec253kqBfXae4 -2025-10-17 16:19:40,228 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 16:19:40,228 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:19:42,401 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:19:42,401 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:您好,关于您反馈的天气小工具无法正常使用的问题,建议您先尝试以下操作:\n\n1. 检查车机系统时间与网络连接是否正常,,确保车辆已连接到稳定的网络'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-17 16:19:42,403 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-17 16:19:42,865 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-17 16:19:42,866 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 16:19:42,866 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-17 16:19:42,866 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-17 16:19:42,866 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 16:19:42,867 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 16:19:42,867 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-17 16:19:42,867 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 16:19:42,867 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-17 16:19:42,867 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 16:19:42,867 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-17 16:19:42,868 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-17 16:19:42,868 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-17 16:19:42,868 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 16:19:42,868 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-17 16:19:42,868 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-17 16:19:42,868 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-17 16:19:42,868 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-17 16:19:43,570 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-17 16:19:43,571 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:43] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-17 16:19:44,749 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:19:44] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 16:27:58,892 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:27:58] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 16:27:59,471 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:27:59] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 16:27:59,627 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:27:59] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 16:28:00,169 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:00] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:28:00,726 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:00] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:28:00,807 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:00] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:28:01,537 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:01] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 16:28:02,472 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:02] "GET /api/token-monitor/stats HTTP/1.1" 200 - -2025-10-17 16:28:02,725 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:02] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 16:28:02,744 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:02] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 16:28:03,502 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:03] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:28:03,876 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:03] "GET /api/token-monitor/records HTTP/1.1" 200 - -2025-10-17 16:28:03,979 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-17 16:28:03,979 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 16:28:03,979 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:28:05,623 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:28:05,623 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1017:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查\n0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 16:28:05,625 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-17 16:28:05,625 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-17 16:28:05,764 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:05] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 16:28:05,801 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:28:05,971 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760689685 -2025-10-17 16:28:06,400 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供技术支持建议:The widget weather doesn't work ' 返回 0 个结果 -2025-10-17 16:28:06,685 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:06] "GET /api/token-monitor/chart HTTP/1.1" 200 - -2025-10-17 16:28:15,516 - src.core.llm_client - INFO - API请求成功 -2025-10-17 16:28:15,869 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-17 16:28:16,953 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:16] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:28:17,043 - src.integrations.workorder_sync - INFO - 格式化AI建议: rec253kqBfXae4 -2025-10-17 16:28:17,043 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 16:28:17,044 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:28:17,612 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:17] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:28:17,736 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:17] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 16:28:18,875 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:18] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:28:19,059 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:28:19,060 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:您好,感谢您反馈问题。关于天气小部件无法正常使用的情况,建议您先尝试以下操作:\n\n1. 检查车机系统时间与网络连接是否正常,,确保已开启Wi-Fi或4G网络'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-17 16:28:19,061 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-17 16:28:19,092 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:19] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:28:19,238 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1017:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查\n0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-17 16:28:19,239 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 16:28:19,239 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1017:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查 -0428:检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议联系售后技术支持进一步排查 -2025-10-17 16:28:19,240 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-17 16:28:19,240 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-17 16:28:19,240 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 16:28:19,240 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 16:28:19,240 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-17 16:28:19,240 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 16:28:19,240 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-17 16:28:19,241 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 16:28:19,241 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-17 16:28:19,241 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-17 16:28:19,241 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-17 16:28:19,241 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 16:28:19,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-17 16:28:19,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-17 16:28:19,242 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-17 16:28:19,242 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-17 16:28:19,514 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-17 16:28:19,516 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:19] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-17 16:28:19,968 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:19] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 16:28:20,777 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:28:20] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 16:32:35,052 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 16:32:35,053 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 16:32:37,321 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 16:32:38,610 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 16:32:38,631 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 16:32:38,687 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 16:32:38,687 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 16:32:38,867 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:32:39,027 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 16:32:39,033 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-17 16:32:39,034 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-17 16:33:00,608 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:33:00] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:33:00,737 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:33:01,071 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:33:01,475 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:33:01] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:33:01,504 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:33:01,674 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-17 16:33:01,676 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-17 16:33:01,677 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-17 16:33:01,678 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-17 16:33:01,681 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-17 16:33:01,684 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-17 16:33:01,685 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-17 16:33:01,687 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-17 16:33:01,688 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-17 16:33:01,689 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-17 16:33:01,690 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-17 16:33:01,693 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-17 16:33:01,694 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-17 16:33:01,695 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-17 16:33:01,698 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-17 16:33:01,701 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-17 16:33:01,704 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-17 16:33:01,706 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-17 16:33:01,710 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-17 16:33:01,711 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-17 16:33:01,714 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-17 16:33:01,717 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-17 16:33:01,719 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-17 16:33:01,719 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-17 16:33:01,719 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-17 16:33:02,134 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 4064, 'msg': 'ok', 'tenant_access_token': 't-g104ahfE4MP6O3EVDXWZS7JFCJMQH2UFJKWK4RRM'} -2025-10-17 16:33:02,135 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104ahfE4MP6O3EVDX... -2025-10-17 16:33:02,135 - src.integrations.feishu_client - INFO - 令牌有效期: 4064秒,过期时间: 2025-10-17 17:40:46 -2025-10-17 16:33:02,136 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 16:33:02,137 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:33:02,154 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:33:02] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 16:33:03,754 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:33:03,754 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:您好,感谢您反馈问题。关于天气小部件无法正常使用的情况,建议您先尝试以下操作:\n\n1. 检查车机系统时间与网络连接是否正常,,确保已开启Wi-Fi或4G网络', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 16:33:03,756 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-17 16:33:03,756 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-17 16:33:03,928 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:33:04,092 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760689984 -2025-10-17 16:33:04,302 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供技术支持建议,要求输出格式为"现状+措施/代办项": - -问题:The widget weather doesn't work - -请直接输出建议内容,格式为:现状描述,措施/代办项描述。不要包含"您好"、"建议您"等客套话,直接给出技术建议。' 返回 0 个结果 -2025-10-17 16:33:12,806 - src.core.llm_client - INFO - API请求成功 -2025-10-17 16:33:13,231 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-17 16:33:13,652 - src.integrations.workorder_sync - INFO - 格式化AI建议: rec253kqBfXae4 - 支持刷新和换行录入 -2025-10-17 16:33:13,652 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 16:33:13,652 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:33:16,246 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:33:16,246 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:检查设备状态和配置,尝试恢复'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-17 16:33:16,249 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-17 16:33:16,416 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:您好,感谢您反馈问题。关于天气小部件无法正常使用的情况,建议您先尝试以下操作:\n\n1. 检查车机系统时间与网络连接是否正常,,确保已开启Wi-Fi或4G网络', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-17 16:33:16,417 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 16:33:16,417 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。 -1017:您好,感谢您反馈问题。关于天气小部件无法正常使用的情况,建议您先尝试以下操作: - -1. 检查车机系统时间与网络连接是否正常,,确保已开启Wi-Fi或4G网络 -2025-10-17 16:33:16,418 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-17 16:33:16,418 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-17 16:33:16,418 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 16:33:16,418 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 16:33:16,418 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-17 16:33:16,419 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 16:33:16,419 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-17 16:33:16,419 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 16:33:16,419 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-17 16:33:16,420 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-17 16:33:16,420 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-17 16:33:16,420 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 16:33:16,420 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-17 16:33:16,420 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-17 16:33:16,420 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-17 16:33:16,420 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-17 16:33:16,670 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-17 16:33:16,671 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:33:16] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-17 16:33:17,203 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:33:17] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 16:40:50,298 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:50] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:40:50,584 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:50] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:40:51,090 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:51] "GET / HTTP/1.1" 200 - -2025-10-17 16:40:51,105 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:51] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 16:40:51,177 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:51] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-17 16:40:51,181 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:51] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-17 16:40:51,183 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:51] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-17 16:40:51,188 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:51] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-17 16:40:51,393 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:51] "GET /api/system/info HTTP/1.1" 200 - -2025-10-17 16:40:51,395 - websockets.server - INFO - connection open -2025-10-17 16:40:51,398 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - ^^^^^^^^^^^^^^^^^^^^^^^^ -TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-17 16:40:51,509 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:51] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-17 16:40:51,560 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:40:51,721 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:51] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-17 16:40:52,315 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:52] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 16:40:52,366 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:52] "GET /api/workorders HTTP/1.1" 200 - -2025-10-17 16:40:52,555 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:52] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-17 16:40:52,727 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-17 16:40:52,727 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 16:40:52,727 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:40:53,843 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:53] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:40:54,256 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:40:54,256 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:检查设备状态和配置,尝试恢复', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 16:40:54,258 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-17 16:40:54,258 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-17 16:40:54,420 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:40:54,586 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760690454 -2025-10-17 16:40:54,756 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供技术支持建议,要求输出格式为"现状+措施/代办项": - -问题:The widget weather doesn't work - -请直接输出建议内容,格式为:现状描述,措施/代办项描述。不要包含"您好"、"建议您"等客套话,直接给出技术建议。' 返回 0 个结果 -2025-10-17 16:40:54,854 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:54] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-17 16:40:54,868 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:54] "GET /api/settings HTTP/1.1" 200 - -2025-10-17 16:40:55,615 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:55] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:40:56,303 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:40:56] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 16:40:59,333 - src.core.llm_client - INFO - API请求成功 -2025-10-17 16:40:59,698 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-17 16:41:00,809 - src.integrations.workorder_sync - INFO - 格式化AI建议: rec253kqBfXae4 - 支持刷新和换行录入 -2025-10-17 16:41:00,810 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 16:41:00,810 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:41:03,080 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:41:03,081 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:检查设备状态和配置,尝试重启车机系统'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-17 16:41:03,082 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-17 16:41:03,241 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:检查设备状态和配置,尝试恢复', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-17 16:41:03,242 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 16:41:03,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。 -1017:检查设备状态和配置,尝试恢复 -2025-10-17 16:41:03,243 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-17 16:41:03,243 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-17 16:41:03,243 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 16:41:03,244 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 16:41:03,245 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-17 16:41:03,245 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 16:41:03,245 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-17 16:41:03,245 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 16:41:03,245 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-17 16:41:03,246 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-17 16:41:03,246 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-17 16:41:03,246 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 16:41:03,246 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-17 16:41:03,247 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-17 16:41:03,247 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-17 16:41:03,247 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-17 16:41:03,493 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-17 16:41:03,493 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:41:03] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-17 16:41:03,825 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:41:03] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:41:03,899 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:41:03] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:41:03,921 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:41:03] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-17 16:41:05,691 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:41:05] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 16:56:09,598 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-17 16:56:09,599 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-17 16:56:12,848 - src.core.database - INFO - 数据库初始化成功 -2025-10-17 16:56:15,124 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-17 16:56:15,149 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-17 16:56:15,239 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-17 16:56:15,240 - werkzeug - INFO - Press CTRL+C to quit -2025-10-17 16:56:15,492 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:56:15,709 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-17 16:56:15,717 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-17 16:56:15,718 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-17 16:56:19,116 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:56:19,174 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:56:19] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:56:19,526 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:56:19,957 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:56:19] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:56:20,222 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:56:20] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:56:20,911 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:56:20] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:56:21,401 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:56:21,414 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:56:21] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-17 16:56:21,852 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:56:21] "GET /api/analytics HTTP/1.1" 200 - -2025-10-17 16:56:21,881 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:56:22,077 - src.agent.llm_client - WARNING - OpenAI库未安装,将使用模拟客户端 -2025-10-17 16:56:22,082 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-17 16:56:22,087 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-17 16:56:22,090 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-17 16:56:22,093 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-17 16:56:22,097 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-17 16:56:22,102 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-17 16:56:22,107 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-17 16:56:22,111 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-17 16:56:22,115 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-17 16:56:22,121 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-17 16:56:22,124 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-17 16:56:22,129 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-17 16:56:22,136 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-17 16:56:22,139 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-17 16:56:22,142 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-17 16:56:22,146 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-17 16:56:22,152 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-17 16:56:22,167 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-17 16:56:22,171 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-17 16:56:22,173 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-17 16:56:22,176 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-17 16:56:22,183 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-17 16:56:22,184 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-17 16:56:22,184 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-17 16:56:22,387 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:56:22,660 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:56:22] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-17 16:56:22,951 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 2664, 'msg': 'ok', 'tenant_access_token': 't-g104ahfE4MP6O3EVDXWZS7JFCJMQH2UFJKWK4RRM'} -2025-10-17 16:56:22,952 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104ahfE4MP6O3EVDX... -2025-10-17 16:56:22,952 - src.integrations.feishu_client - INFO - 令牌有效期: 2664秒,过期时间: 2025-10-17 17:40:46 -2025-10-17 16:56:22,955 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-17 16:56:22,956 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:56:24,791 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:56:24,791 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:检查设备状态和配置,尝试重启车机系统', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-17 16:56:24,794 - src.integrations.workorder_sync - INFO - 从飞书获取到 1 条记录 -2025-10-17 16:56:24,794 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-17 16:56:25,017 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-17 16:56:25,274 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1760691385 -2025-10-17 16:56:25,508 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供技术支持建议:The widget weather doesn't work ' 返回 0 个结果 -2025-10-17 16:56:31,536 - src.core.llm_client - INFO - API请求成功 -2025-10-17 16:56:31,976 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-17 16:56:32,430 - src.integrations.workorder_sync - INFO - 格式化AI建议: rec253kqBfXae4 - 时间+现状+措施格式 -2025-10-17 16:56:32,430 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-17 16:56:32,431 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ahfE4MP6O3EVDX... -2025-10-17 16:56:34,964 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-17 16:56:34,964 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:检查车机系统时间与网络连接是否正常确保已开启Wi-Fi或4G网络;,重启车机系统长按电源键10秒后重新启动;,进入“设置”-“应用管理”-“天气”清除缓存并重新登录;,检查系统版本是否为最新如有更新请升级至最新版本。'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-17 16:56:34,967 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-17 16:56:35,138 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1017:检查设备状态和配置,尝试重启车机系统', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-17 16:56:35,139 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-17 16:56:35,139 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。 -1017:检查设备状态和配置,尝试重启车机系统 -2025-10-17 16:56:35,140 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-17 16:56:35,140 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-17 16:56:35,141 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-17 16:56:35,141 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-17 16:56:35,141 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-17 16:56:35,141 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-17 16:56:35,141 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-17 16:56:35,142 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-17 16:56:35,142 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-17 16:56:35,142 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-17 16:56:35,142 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-17 16:56:35,143 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-17 16:56:35,143 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-17 16:56:35,143 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-17 16:56:35,143 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-17 16:56:35,143 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-17 16:56:35,402 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-17 16:56:35,403 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:56:35] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-17 16:56:36,621 - werkzeug - INFO - 127.0.0.1 - - [17/Oct/2025 16:56:36] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 09:13:33,782 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-27 09:13:33,782 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-27 09:13:42,012 - src.core.database - INFO - 数据库初始化成功 -2025-10-27 09:13:44,631 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-27 09:13:44,635 - __main__ - ERROR - 启动失败: (unicode error) 'utf-8' codec can't decode byte 0xe6 in position 10: invalid continuation byte (workorder_sync.py, line 5) -2025-10-27 09:14:32,033 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-27 09:14:32,033 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-27 09:14:34,460 - src.core.database - INFO - 数据库初始化成功 -2025-10-27 09:14:36,613 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-27 09:14:36,670 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-27 09:14:36,750 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-27 09:14:36,752 - werkzeug - INFO - Press CTRL+C to quit -2025-10-27 09:14:37,432 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:14:37,611 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-27 09:14:37,627 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-27 09:14:37,628 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-27 09:14:43,828 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:43] "GET / HTTP/1.1" 200 - -2025-10-27 09:14:43,948 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:43] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-27 09:14:43,958 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:43] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-27 09:14:43,961 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:43] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 200 - -2025-10-27 09:14:43,978 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:43] "GET /static/css/design-system.css HTTP/1.1" 200 - -2025-10-27 09:14:44,680 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:44] "GET /api/system/info HTTP/1.1" 200 - -2025-10-27 09:14:44,712 - websockets.server - INFO - connection open -2025-10-27 09:14:44,713 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - ^^^^^^^^^^^^^^^^^^^^^^^^ -TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-27 09:14:44,714 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:44] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-27 09:14:44,856 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:14:45,037 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:45] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-27 09:14:45,411 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:45] "GET /favicon.ico HTTP/1.1" 404 - -2025-10-27 09:14:45,434 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:14:45,616 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' -2025-10-27 09:14:45,617 - src.config.unified_config - INFO - 配置文件不存在,使用默认配置 -2025-10-27 09:14:45,618 - src.config.unified_config - INFO - 配置文件保存成功 -2025-10-27 09:14:45,618 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: openai - qwen-turbo -2025-10-27 09:14:45,621 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-27 09:14:45,623 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-27 09:14:45,625 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-27 09:14:45,626 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-27 09:14:45,627 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-27 09:14:45,629 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-27 09:14:45,630 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-27 09:14:45,631 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-27 09:14:45,632 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-27 09:14:45,633 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-27 09:14:45,634 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-27 09:14:45,637 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人�? -> wilfulness -2025-10-27 09:14:45,639 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-27 09:14:45,641 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-27 09:14:45,642 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-27 09:14:45,644 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-27 09:14:45,645 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-27 09:14:45,647 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父�?�录 -> parent_record -2025-10-27 09:14:45,650 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-27 09:14:45,652 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-27 09:14:45,655 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建�?? -> ai_suggestion -2025-10-27 09:14:45,664 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-27 09:14:45,931 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:45] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 09:14:46,350 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:46] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 09:14:46,383 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:14:46,427 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:14:47,043 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:14:47,096 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:14:47,331 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:47] "GET /api/workorders HTTP/1.1" 200 - -2025-10-27 09:14:47,957 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:47] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-27 09:14:49,857 - websockets.server - INFO - connection open -2025-10-27 09:14:49,857 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - ^^^^^^^^^^^^^^^^^^^^^^^^ -TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-27 09:14:50,155 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:50] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-27 09:14:50,167 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:50] "GET /api/settings HTTP/1.1" 200 - -2025-10-27 09:14:50,474 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:50] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 09:14:51,209 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:51] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 09:14:51,321 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:51] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 09:14:52,015 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:52] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 09:14:52,774 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:14:52] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 09:22:42,981 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-27 09:22:42,982 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-27 09:22:45,661 - src.core.database - INFO - 数据库初始化成功 -2025-10-27 09:22:47,471 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-27 09:22:47,485 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-27 09:22:47,552 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-27 09:22:47,553 - werkzeug - INFO - Press CTRL+C to quit -2025-10-27 09:22:47,769 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:22:47,948 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-27 09:22:47,955 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-27 09:22:47,955 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-27 09:22:53,696 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:22:53] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 09:22:53,860 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:22:54,213 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:22:54,632 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:22:54] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 09:22:54,708 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:22:54,885 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' -2025-10-27 09:22:54,886 - src.config.unified_config - INFO - 配置文件加载成功 -2025-10-27 09:22:54,886 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: openai - qwen-turbo -2025-10-27 09:22:54,888 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-27 09:22:54,889 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-27 09:22:54,890 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-27 09:22:54,892 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-27 09:22:54,893 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-27 09:22:54,894 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-27 09:22:54,895 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-27 09:22:54,896 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-27 09:22:54,898 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-27 09:22:54,899 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-27 09:22:54,901 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-27 09:22:54,903 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人�? -> wilfulness -2025-10-27 09:22:54,904 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-27 09:22:54,909 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-27 09:22:54,912 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-27 09:22:54,913 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-27 09:22:54,914 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-27 09:22:54,916 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父�?�录 -> parent_record -2025-10-27 09:22:54,918 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-27 09:22:54,920 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-27 09:22:54,923 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建�?? -> ai_suggestion -2025-10-27 09:22:54,926 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-27 09:22:54,927 - src.integrations.workorder_sync - INFO - 开始从飞书同�?�工单数�?... -2025-10-27 09:22:54,928 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-27 09:22:55,339 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:22:55] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 09:22:55,375 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 5853, 'msg': 'ok', 'tenant_access_token': 't-g104ar90XDEZUY6E54KBLQ3TTUQZ5PZWN7CVQM4U'} -2025-10-27 09:22:55,375 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104ar90XDEZUY6E54... -2025-10-27 09:22:55,376 - src.integrations.feishu_client - INFO - 令牌有效期: 5853秒,过期时间: 2025-10-27 11:00:28 -2025-10-27 09:22:55,377 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 09:22:55,377 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 09:22:56,684 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 09:22:56,696 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-27 09:22:56,699 - src.integrations.workorder_sync - INFO - 从�?�书获取�? 1 条�?�录 -2025-10-27 09:22:56,699 - src.integrations.workorder_sync - INFO - 开始生成AI建�??... -2025-10-27 09:22:56,928 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:22:57,145 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761528177 -2025-10-27 09:22:57,319 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供简洁的技术支持建议,要求: -1. 建议内容必须简短,不要超过200字 -2. 只提供核心解决思路,不要详细的步骤说明 -3. 用一句话或几个短语概括处理方向 -4. 不要包含序号列表或长篇解释 - -问题描述:The widget weather doesn't work ' 返回 3 个结果 -2025-10-27 09:22:59,392 - src.core.llm_client - INFO - API请求成功 -2025-10-27 09:23:00,011 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-27 09:23:00,635 - src.integrations.workorder_sync - INFO - 格式化AI建�??: rec253kqBfXae4 - 时间+现状+�?施格�? -2025-10-27 09:23:00,635 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 09:23:00,635 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 09:23:01,538 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 09:23:01,539 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 1254045, 'msg': 'FieldNameNotFound', 'error': {'message': "Invalid request parameter: 'fields.AI建�??'. Correct format : field_name not found. Please check and modify accordingly.", 'log_id': '20251027092300D59829DCFEA7CF1057F5', 'troubleshooter': '排查建议查看(Troubleshooting suggestions): https://open.feishu.cn/search?from=openapi&log_id=20251027092300D59829DCFEA7CF1057F5&code=1254045&method_id=6965347212289556482'}} -2025-10-27 09:23:01,541 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建�?? -2025-10-27 09:23:01,729 - src.integrations.workorder_sync - INFO - 开始转换�?�书字�??: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 09:23:01,731 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 09:23:01,731 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 09:23:01,731 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 09:23:01,732 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 09:23:01,732 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 09:23:01,732 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 09:23:01,732 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 09:23:01,733 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 09:23:01,733 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 09:23:01,733 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 09:23:01,734 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 09:23:01,734 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 09:23:01,734 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 09:23:01,734 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 09:23:01,734 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 09:23:01,735 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-27 09:23:01,735 - src.integrations.workorder_sync - INFO - 字�?�转换统�?: 总字�? 14, 已映�? 14, �?映射 0 -2025-10-27 09:23:02,075 - src.integrations.workorder_sync - INFO - 飞书同�?�完�?: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-27 09:23:02,077 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:23:02] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-27 09:23:02,519 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:23:02] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 09:23:38,127 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:23:38] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 09:30:25,368 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:30:25] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 09:30:25,503 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:30:25] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 09:30:26,210 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:30:26] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 09:30:26,281 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:30:26] "GET / HTTP/1.1" 200 - -2025-10-27 09:30:26,426 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:30:26] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-27 09:30:26,430 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:30:26] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-27 09:30:26,430 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:30:26] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-27 09:30:26,439 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:30:26] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-27 09:31:36,552 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-27 09:31:36,552 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-27 09:31:39,290 - src.core.database - INFO - 数据库初始化成功 -2025-10-27 09:31:40,837 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-27 09:31:40,868 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-27 09:31:41,099 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-27 09:31:41,099 - werkzeug - INFO - Press CTRL+C to quit -2025-10-27 09:31:41,317 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:31:41,534 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-27 09:31:41,540 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-27 09:31:41,541 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-27 09:31:56,256 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:31:56] "GET / HTTP/1.1" 200 - -2025-10-27 09:31:56,370 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:31:56] "GET /static/css/design-system.css?v=1.0.1 HTTP/1.1" 200 - -2025-10-27 09:31:56,392 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:31:56] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-27 09:31:56,393 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:31:56] "GET /static/css/style.css?v=1.0.1 HTTP/1.1" 200 - -2025-10-27 09:31:56,403 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:31:56] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-27 09:31:59,533 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:31:59] "GET / HTTP/1.1" 200 - -2025-10-27 09:31:59,548 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:31:59] "GET /static/css/design-system.css?v=1.0.1 HTTP/1.1" 304 - -2025-10-27 09:31:59,550 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:31:59] "GET /static/css/style.css?v=1.0.1 HTTP/1.1" 304 - -2025-10-27 09:31:59,550 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:31:59] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-27 09:31:59,556 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:31:59] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-27 09:32:38,906 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:38] "GET / HTTP/1.1" 200 - -2025-10-27 09:32:38,923 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:38] "GET /static/css/design-system.css?v=1.0.1 HTTP/1.1" 304 - -2025-10-27 09:32:38,927 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:38] "GET /static/css/style.css?v=1.0.1 HTTP/1.1" 304 - -2025-10-27 09:32:38,929 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:38] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-27 09:32:38,940 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:38] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-27 09:32:39,043 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:39] "GET /api/system/info HTTP/1.1" 200 - -2025-10-27 09:32:39,057 - websockets.server - INFO - connection open -2025-10-27 09:32:39,057 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - ^^^^^^^^^^^^^^^^^^^^^^^^ -TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-27 09:32:39,058 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:39] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-27 09:32:39,247 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:32:39,679 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:32:39,683 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:32:39,691 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:32:39,813 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:32:39,856 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:39] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-27 09:32:40,024 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' -2025-10-27 09:32:40,025 - src.config.unified_config - INFO - 配置文件加载成功 -2025-10-27 09:32:40,025 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: openai - qwen-turbo -2025-10-27 09:32:40,028 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-27 09:32:40,031 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-27 09:32:40,033 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-27 09:32:40,034 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-27 09:32:40,035 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-27 09:32:40,036 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-27 09:32:40,038 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-27 09:32:40,039 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-27 09:32:40,040 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-27 09:32:40,042 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-27 09:32:40,043 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-27 09:32:40,046 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人�? -> wilfulness -2025-10-27 09:32:40,050 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:32:40,051 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-27 09:32:40,053 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-27 09:32:40,057 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-27 09:32:40,060 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-27 09:32:40,062 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-27 09:32:40,065 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-27 09:32:40,068 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-27 09:32:40,070 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-27 09:32:40,073 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-27 09:32:40,076 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-27 09:32:40,235 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:40] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 09:32:40,623 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:40] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 09:32:41,076 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:41] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-27 09:32:41,665 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:41] "GET /api/workorders HTTP/1.1" 200 - -2025-10-27 09:32:42,466 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:42] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-27 09:32:42,501 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:42] "GET /api/settings HTTP/1.1" 200 - -2025-10-27 09:32:43,403 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:43] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 09:32:44,082 - websockets.server - INFO - connection open -2025-10-27 09:32:44,082 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - ^^^^^^^^^^^^^^^^^^^^^^^^ -TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-27 09:32:44,380 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:44] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 09:32:44,640 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:44] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 09:32:45,031 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:45] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 09:32:45,786 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:45] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 09:32:46,652 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 09:32:46,652 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-27 09:32:47,077 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 5261, 'msg': 'ok', 'tenant_access_token': 't-g104ar90XDEZUY6E54KBLQ3TTUQZ5PZWN7CVQM4U'} -2025-10-27 09:32:47,077 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104ar90XDEZUY6E54... -2025-10-27 09:32:47,078 - src.integrations.feishu_client - INFO - 令牌有效期: 5261秒,过期时间: 2025-10-27 11:00:28 -2025-10-27 09:32:47,080 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 09:32:47,081 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 09:32:48,441 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 09:32:48,442 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-27 09:32:48,443 - src.integrations.workorder_sync - INFO - 从飞书获取 1 条记录 -2025-10-27 09:32:48,443 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 09:32:48,635 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:32:48,831 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761528768 -2025-10-27 09:32:49,042 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供简洁的技术支持建议,要求: -1. 建议内容必须简短,不要超过200字 -2. 只提供核心解决思路,不要详细的步骤说明 -3. 用一句话或几个短语概括处理方向 -4. 不要包含序号列表或长篇解释 - -问题描述:The widget weather doesn't work ' 返回 3 个结果 -2025-10-27 09:32:50,991 - src.core.llm_client - INFO - API请求成功 -2025-10-27 09:32:51,990 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 检查车机网络连接是否正常,确认信号强度及SIM卡状态;重启车机系统尝试恢复;如问题持续,请升级系统版本或联系售后技术支持。... -2025-10-27 09:32:51,991 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 检查车机网络连接是否正常,确认信号强度及SIM卡状态;重启车机系统尝试恢复;如问题持续,请升级系统版本或联系售后技术支持。... -2025-10-27 09:32:51,991 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-27 09:32:52,450 - src.integrations.workorder_sync - INFO - 格式化AI建�??: rec253kqBfXae4 - 时间+现状+�?施格�? -2025-10-27 09:32:52,451 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 09:32:52,451 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 09:32:54,772 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 09:32:54,772 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1027:检查�?��?�状态和配置,尝试恢复;如问题持续,请升级系统版本或联系售后技术支持。'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 09:32:54,773 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建�?? -2025-10-27 09:32:54,983 - src.integrations.workorder_sync - INFO - 开始转换�?�书字�??: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 09:32:54,983 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 09:32:54,984 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 09:32:54,984 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 09:32:54,984 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 09:32:54,984 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 09:32:54,984 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 09:32:54,985 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 09:32:54,985 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 09:32:54,985 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 09:32:54,985 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 09:32:54,986 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 09:32:54,986 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 09:32:54,986 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 09:32:54,986 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 09:32:54,986 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 09:32:54,987 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-27 09:32:54,987 - src.integrations.workorder_sync - INFO - 字�?�转换统�?: 总字�? 14, 已映�? 14, �?映射 0 -2025-10-27 09:32:55,336 - src.integrations.workorder_sync - INFO - 飞书同�?�完�?: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-27 09:32:55,337 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:55] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-27 09:32:55,888 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:32:55] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 09:43:07,315 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-27 09:43:07,315 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-27 09:43:09,605 - src.core.database - INFO - 数据库初始化成功 -2025-10-27 09:43:11,015 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-27 09:43:11,047 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-27 09:43:11,110 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-27 09:43:11,111 - werkzeug - INFO - Press CTRL+C to quit -2025-10-27 09:43:11,324 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:43:11,501 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-27 09:43:11,507 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-27 09:43:11,508 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-27 09:43:17,881 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:17] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 09:43:17,957 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:43:18,318 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:43:18,627 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:18] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 09:43:19,210 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:19] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 09:43:19,392 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:19] "GET / HTTP/1.1" 200 - -2025-10-27 09:43:19,516 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:19] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-27 09:43:19,519 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:19] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-27 09:43:19,522 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:19] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-27 09:43:19,533 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:19] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-27 09:43:19,618 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:19] "GET /api/system/info HTTP/1.1" 200 - -2025-10-27 09:43:19,628 - websockets.server - INFO - connection open -2025-10-27 09:43:19,628 - websockets.server - ERROR - connection handler failed -Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler - await self.handler(connection) - ^^^^^^^^^^^^^^^^^^^^^^^^ -TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-27 09:43:19,634 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:19] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-27 09:43:19,793 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:43:19,968 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:19] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-27 09:43:20,601 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:20] "GET /api/workorders HTTP/1.1" 200 - -2025-10-27 09:43:20,673 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:20] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 09:43:20,906 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:20] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-27 09:43:21,340 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:43:21,670 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:21] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-27 09:43:21,685 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:21] "GET /api/settings HTTP/1.1" 200 - -2025-10-27 09:43:21,806 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' -2025-10-27 09:43:21,807 - src.config.unified_config - INFO - 配置文件加载成功 -2025-10-27 09:43:21,807 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: openai - qwen-turbo -2025-10-27 09:43:21,808 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-27 09:43:21,810 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-27 09:43:21,821 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-27 09:43:21,823 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-27 09:43:21,824 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-27 09:43:21,825 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-27 09:43:21,827 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-27 09:43:21,828 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-27 09:43:21,830 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-27 09:43:21,832 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-27 09:43:21,833 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-27 09:43:21,834 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-27 09:43:21,836 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-27 09:43:21,838 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-27 09:43:21,842 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-27 09:43:21,845 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-27 09:43:21,847 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-27 09:43:21,849 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-27 09:43:21,850 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-27 09:43:21,852 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-27 09:43:21,854 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-27 09:43:21,860 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-27 09:43:22,382 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:22] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 09:43:22,549 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:22] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 09:43:23,316 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 09:43:23,316 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-27 09:43:23,351 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:23] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 09:43:23,900 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 4625, 'msg': 'ok', 'tenant_access_token': 't-g104ar90XDEZUY6E54KBLQ3TTUQZ5PZWN7CVQM4U'} -2025-10-27 09:43:23,900 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104ar90XDEZUY6E54... -2025-10-27 09:43:23,900 - src.integrations.feishu_client - INFO - 令牌有效期: 4625秒,过期时间: 2025-10-27 11:00:28 -2025-10-27 09:43:23,902 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 09:43:23,903 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 09:43:25,282 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 09:43:25,282 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1027:检查�?��?�状态和配置,尝试恢复;如问题持续,请升级系统版本或联系售后技术支持。', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-27 09:43:25,285 - src.integrations.workorder_sync - INFO - 从飞书获取 1 条记录 -2025-10-27 09:43:25,285 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 09:43:25,458 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:43:25,631 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761529405 -2025-10-27 09:43:25,826 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供简洁的技术支持建议,要求: -1. 建议内容必须简短,不要超过200字 -2. 只提供核心解决思路,不要详细的步骤说明 -3. 用一句话或几个短语概括处理方向 -4. 不要包含序号列表或长篇解释 - -问题描述:The widget weather doesn't work ' 返回 3 个结果 -2025-10-27 09:43:27,520 - src.core.llm_client - INFO - API请求成功 -2025-10-27 09:43:28,523 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 检查车机网络连接是否正常,确认车辆所在区域有良好信号;尝试重启车机系统;确保SIM卡状态正常;如问题仍未解决,建议联系售后技术支持进行进一步排查。... -2025-10-27 09:43:28,524 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 检查车机网络连接是否正常,确认车辆所在区域有良好信号;尝试重启车机系统;确保SIM卡状态正常;如问题仍未解决,建议联系售后技术支持进行进一步排查。... -2025-10-27 09:43:28,525 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-27 09:43:28,527 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 09:43:28,527 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 09:43:30,639 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 09:43:30,639 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:检查车机网络连接是否正常,确认车辆所在区域有良好信号;尝试重启车机系统;确保SIM卡状态正常;如问题仍未解决,建议联系售后技术支持进行进一步排查。'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 09:43:30,640 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-27 09:43:30,822 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。\n1027:检查�?��?�状态和配置,尝试恢复;如问题持续,请升级系统版本或联系售后技术支持。', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 09:43:30,824 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 09:43:30,824 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。 -1027:检查�?��?�状态和配置,尝试恢复;如问题持续,请升级系统版本或联系售后技术支持。 -2025-10-27 09:43:30,824 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 09:43:30,825 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 09:43:30,825 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 09:43:30,825 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 09:43:30,826 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 09:43:30,826 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 09:43:30,826 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 09:43:30,826 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 09:43:30,827 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 09:43:30,827 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 09:43:30,827 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 09:43:30,827 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 09:43:30,828 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 09:43:30,828 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 09:43:30,829 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 09:43:30,829 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 09:43:31,139 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-27 09:43:31,139 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:31] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-27 09:43:31,402 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:31] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 09:43:31,527 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:31] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 09:43:31,574 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:31] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 09:43:33,466 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:43:33] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 09:46:02,858 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:46:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 09:46:03,142 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:46:03] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 09:46:03,684 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 09:46:03,685 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 09:46:03,686 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 09:46:03,910 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:46:03] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 09:46:05,061 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 09:46:05,062 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1027:检查车机网络连接是否正常,确认车辆所在区域有良好信号;尝试重启车机系统;确保SIM卡状态正常;如问题仍未解决,建议联系售后技术支持进行进一步排查。', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-27 09:46:05,063 - src.integrations.workorder_sync - INFO - 从飞书获取 1 条记录 -2025-10-27 09:46:05,064 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 09:46:05,538 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:46:06,011 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761529566 -2025-10-27 09:46:06,229 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供简洁的技术支持建议,要求: -1. 建议内容必须简短,不要超过200字 -2. 只提供核心解决思路,不要详细的步骤说明 -3. 用一句话或几个短语概括处理方向 -4. 不要包含序号列表或长篇解释 - -问题描述:The widget weather doesn't work ' 返回 3 个结果 -2025-10-27 09:46:08,104 - src.core.llm_client - INFO - API请求成功 -2025-10-27 09:46:08,474 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 检查车机网络连接是否正常,确认信号强度及SIM卡状态;尝试重启车机系统或恢复网络设置;如问题仍未解决,建议联系售后技术支持进一步排查。... -2025-10-27 09:46:08,475 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 检查车机网络连接是否正常,确认信号强度及SIM卡状态;尝试重启车机系统或恢复网络设置;如问题仍未解决,建议联系售后技术支持进一步排查。... -2025-10-27 09:46:08,475 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-27 09:46:08,475 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 09:46:08,475 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 09:46:10,692 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 09:46:10,693 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:检查车机网络连接是否正常,确认信号强度及SIM卡状态;尝试重启车机系统或恢复网络设置;如问题仍未解决,建议联系售后技术支持进一步排查。'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 09:46:10,694 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-27 09:46:10,873 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1027:检查车机网络连接是否正常,确认车辆所在区域有良好信号;尝试重启车机系统;确保SIM卡状态正常;如问题仍未解决,建议联系售后技术支持进行进一步排查。', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 09:46:10,874 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 09:46:10,875 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1027:检查车机网络连接是否正常,确认车辆所在区域有良好信号;尝试重启车机系统;确保SIM卡状态正常;如问题仍未解决,建议联系售后技术支持进行进一步排查。 -2025-10-27 09:46:10,875 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 09:46:10,875 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 09:46:10,875 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 09:46:10,875 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 09:46:10,876 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 09:46:10,876 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 09:46:10,876 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 09:46:10,876 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 09:46:10,876 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 09:46:10,877 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 09:46:10,877 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 09:46:10,877 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 09:46:10,878 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 09:46:10,878 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 09:46:10,878 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 09:46:10,878 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 09:46:11,154 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-27 09:46:11,155 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:46:11] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-27 09:46:11,616 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:46:11] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 09:46:21,969 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 09:46:21,969 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 09:46:21,969 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 09:46:23,358 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 09:46:23,358 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-27 09:46:23,359 - src.integrations.workorder_sync - INFO - 从飞书获取 1 条记录 -2025-10-27 09:46:23,360 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 09:46:23,544 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:46:23,716 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761529583 -2025-10-27 09:46:23,947 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供简洁的技术支持建议,要求: -1. 建议内容必须简短,不要超过200字 -2. 只提供核心解决思路,不要详细的步骤说明 -3. 用一句话或几个短语概括处理方向 -4. 不要包含序号列表或长篇解释 - -问题描述:The widget weather doesn't work ' 返回 3 个结果 -2025-10-27 09:46:25,988 - src.core.llm_client - INFO - API请求成功 -2025-10-27 09:46:26,948 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 检查车机网络连接是否正常,确认信号状态;重启车机系统尝试恢复功能;确保系统版本为最新。如问题仍未解决,建议联系售后技术支持进一步排查。... -2025-10-27 09:46:26,948 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 检查车机网络连接是否正常,确认信号状态;重启车机系统尝试恢复功能;确保系统版本为最新。如问题仍未解决,建议联系售后技术支持进一步排查。... -2025-10-27 09:46:26,948 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-27 09:46:26,949 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 09:46:26,949 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 09:46:29,055 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 09:46:29,056 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:检查车机网络连接是否正常,确认信号状态;重启车机系统尝试恢复功能;确保系统版本为最新。如问题仍未解决,建议联系售后技术支持进一步排查。'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 09:46:29,057 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-27 09:46:29,239 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 09:46:29,240 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 09:46:29,240 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 09:46:29,241 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 09:46:29,241 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 09:46:29,241 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 09:46:29,241 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 09:46:29,241 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 09:46:29,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 09:46:29,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 09:46:29,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 09:46:29,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 09:46:29,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 09:46:29,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 09:46:29,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 09:46:29,242 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 09:46:29,243 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-27 09:46:29,243 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-27 09:46:29,529 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-27 09:46:29,531 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:46:29] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-27 09:46:29,976 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:46:29] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 09:49:31,480 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-27 09:49:31,481 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-27 09:49:33,943 - src.core.database - INFO - 数据库初始化成功 -2025-10-27 09:49:36,370 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-27 09:49:36,383 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-27 09:49:36,454 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-27 09:49:36,455 - werkzeug - INFO - Press CTRL+C to quit -2025-10-27 09:49:36,678 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:49:36,854 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-27 09:49:36,865 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-27 09:49:36,866 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-27 09:49:48,867 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:49:48] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 09:49:49,604 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:49:49] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 09:49:49,990 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:49:50,388 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:49:50,425 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:49:50] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 09:49:50,568 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' -2025-10-27 09:49:50,569 - src.config.unified_config - INFO - 配置文件加载成功 -2025-10-27 09:49:50,569 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: openai - qwen-turbo -2025-10-27 09:49:50,571 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-27 09:49:50,572 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-27 09:49:50,573 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-27 09:49:50,574 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-27 09:49:50,575 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-27 09:49:50,576 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-27 09:49:50,577 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-27 09:49:50,578 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-27 09:49:50,579 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-27 09:49:50,580 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-27 09:49:50,583 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-27 09:49:50,586 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-27 09:49:50,587 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-27 09:49:50,590 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-27 09:49:50,594 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-27 09:49:50,596 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-27 09:49:50,602 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-27 09:49:50,605 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-27 09:49:50,608 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-27 09:49:50,612 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-27 09:49:50,615 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-27 09:49:50,619 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-27 09:49:50,619 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 09:49:50,620 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-27 09:49:50,645 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:49:51,000 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 4238, 'msg': 'ok', 'tenant_access_token': 't-g104ar90XDEZUY6E54KBLQ3TTUQZ5PZWN7CVQM4U'} -2025-10-27 09:49:51,001 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104ar90XDEZUY6E54... -2025-10-27 09:49:51,001 - src.integrations.feishu_client - INFO - 令牌有效期: 4238秒,过期时间: 2025-10-27 11:00:29 -2025-10-27 09:49:51,003 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 09:49:51,003 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 09:49:52,585 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 09:49:52,585 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1027:检查车机网络连接是否正常,确认信号状态;重启车机系统尝试恢复功能;确保系统版本为最新。如问题仍未解决,建议联系售后技术支持进一步排查。', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-27 09:49:52,588 - src.integrations.workorder_sync - INFO - 从飞书获取 1 条记录 -2025-10-27 09:49:52,589 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 09:49:52,775 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:49:52,955 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761529792 -2025-10-27 09:49:53,436 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供简洁的技术支持建议: - -参考格式(处理过程记录的风格): -"检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议邀请用户进站抓取日志分析" - -要求: -1. 格式:直接陈述检查项和建议操作,用逗号或分号连接,不要用序号或分行 -2. 内容:从检查现状开始,然后是建议的操作步骤,最后是若无效的处理 -3. 参考已有处理记录,避免重复已尝试的方法 -4. 如已有处理记录,要基于当前问题状态提出下一步建议 -5. 总长度控制在200字以内 -6. 结尾统一使用"建议邀请用户进站抓取日志分析"(如果问题较复杂) - -问题描述:The widget weather doesn't work - -已处理的步骤: -0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志' 返回 3 个结果 -2025-10-27 09:49:57,191 - src.core.llm_client - INFO - API请求成功 -2025-10-27 09:49:57,563 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍不生效,尝试重启车机或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分... -2025-10-27 09:49:57,564 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍不生效,尝试重启车机或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分 -2025-10-27 09:49:57,565 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍不生效,尝试重启车机或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分 -2025-10-27 09:49:57,565 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍不生效,尝试重启车机或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分... -2025-10-27 09:49:57,566 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-27 09:49:57,566 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 09:49:57,567 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 09:50:00,025 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 09:50:00,025 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍不生效,尝试重启车机或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 09:50:00,027 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-27 09:50:00,209 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1027:检查车机网络连接是否正常,确认信号状态;重启车机系统尝试恢复功能;确保系统版本为最新。如问题仍未解决,建议联系售后技术支持进一步排查。', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 09:50:00,210 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 09:50:00,210 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1027:检查车机网络连接是否正常,确认信号状态;重启车机系统尝试恢复功能;确保系统版本为最新。如问题仍未解决,建议联系售后技术支持进一步排查。 -2025-10-27 09:50:00,211 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 09:50:00,211 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 09:50:00,211 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 09:50:00,211 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 09:50:00,211 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 09:50:00,211 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 09:50:00,211 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 09:50:00,212 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 09:50:00,212 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 09:50:00,212 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 09:50:00,212 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 09:50:00,212 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 09:50:00,212 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 09:50:00,213 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 09:50:00,213 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 09:50:00,213 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 09:50:00,503 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-27 09:50:00,504 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:50:00] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-27 09:50:01,712 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:50:01] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 09:59:51,861 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:59:51] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 09:59:53,279 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 09:59:53,281 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 09:59:53,282 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 09:59:53,519 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:59:53] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 09:59:54,084 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 09:59:54] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 09:59:54,739 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 09:59:54,740 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1027:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍不生效,尝试重启车机或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-27 09:59:54,741 - src.integrations.workorder_sync - INFO - 从飞书获取 1 条记录 -2025-10-27 09:59:54,742 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 09:59:54,919 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 09:59:55,093 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761530395 -2025-10-27 09:59:55,567 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供简洁的技术支持建议: - -参考格式(处理过程记录的风格): -"检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议邀请用户进站抓取日志分析" - -要求: -1. 格式:直接陈述检查项和建议操作,用逗号或分号连接,不要用序号或分行 -2. 内容:从检查现状开始,然后是建议的操作步骤,最后是若无效的处理 -3. 参考已有处理记录,避免重复已尝试的方法 -4. 如已有处理记录,要基于当前问题状态提出下一步建议 -5. 总长度控制在200字以内 -6. 结尾统一使用"建议邀请用户进站抓取日志分析"(如果问题较复杂) - -问题描述:The widget weather doesn't work - -已处理的步骤: -0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志' 返回 3 个结果 -2025-10-27 09:59:58,375 - src.core.llm_client - INFO - API请求成功 -2025-10-27 09:59:58,742 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析... -2025-10-27 09:59:58,742 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析 -2025-10-27 09:59:58,743 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析 -2025-10-27 09:59:58,743 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析... -2025-10-27 09:59:58,744 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-27 09:59:58,744 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 09:59:58,744 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:00:01,904 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:00:01,904 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 10:00:01,906 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-27 10:00:02,376 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1027:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍不生效,尝试重启车机或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 10:00:02,377 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 10:00:02,377 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1027:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍不生效,尝试重启车机或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析 -2025-10-27 10:00:02,378 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 10:00:02,378 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 10:00:02,378 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 10:00:02,378 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 10:00:02,378 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 10:00:02,379 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 10:00:02,379 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 10:00:02,379 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 10:00:02,379 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 10:00:02,379 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 10:00:02,380 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 10:00:02,380 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 10:00:02,380 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 10:00:02,381 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 10:00:02,381 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 10:00:02,381 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 10:00:03,104 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-27 10:00:03,105 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:00:03] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-27 10:00:03,544 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:00:03] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 10:00:13,701 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 10:00:13,701 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 10:00:13,702 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:00:15,629 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:00:15,629 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1027:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-27 10:00:15,630 - src.integrations.workorder_sync - INFO - 从飞书获取 1 条记录 -2025-10-27 10:00:15,630 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 10:00:15,815 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 10:00:15,996 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761530415 -2025-10-27 10:00:16,467 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供简洁的技术支持建议: - -参考格式(处理过程记录的风格): -"检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议邀请用户进站抓取日志分析" - -要求: -1. 格式:直接陈述检查项和建议操作,用逗号或分号连接,不要用序号或分行 -2. 内容:从检查现状开始,然后是建议的操作步骤,最后是若无效的处理 -3. 参考已有处理记录,避免重复已尝试的方法 -4. 如已有处理记录,要基于当前问题状态提出下一步建议 -5. 总长度控制在200字以内 -6. 结尾统一使用"建议邀请用户进站抓取日志分析"(如果问题较复杂) - -问题描述:The widget weather doesn't work - -已处理的步骤: -0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志' 返回 3 个结果 -2025-10-27 10:00:20,894 - src.core.llm_client - INFO - API请求成功 -2025-10-27 10:00:21,281 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析... -2025-10-27 10:00:21,281 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析 -2025-10-27 10:00:21,281 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析 -2025-10-27 10:00:21,282 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析... -2025-10-27 10:00:21,282 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-27 10:00:21,283 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 10:00:21,283 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:00:23,180 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:00:23,181 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 10:00:23,182 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-27 10:00:23,366 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1027:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 10:00:23,366 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 10:00:23,366 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1027:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析 -2025-10-27 10:00:23,367 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 10:00:23,368 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 10:00:23,368 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 10:00:23,368 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 10:00:23,368 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 10:00:23,369 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 10:00:23,369 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 10:00:23,369 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 10:00:23,369 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 10:00:23,370 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 10:00:23,370 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 10:00:23,370 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 10:00:23,370 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 10:00:23,370 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 10:00:23,371 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 10:00:23,371 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 10:00:23,682 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-27 10:00:23,682 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:00:23] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-27 10:00:24,873 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:00:24] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 10:11:23,758 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:11:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 10:11:24,440 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 10:11:24,441 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 10:11:24,441 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:11:25,338 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:11:25] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 10:11:25,908 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:11:25] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 10:11:26,027 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:11:26,027 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1027:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-27 10:11:26,029 - src.integrations.workorder_sync - INFO - 从飞书获取 1 条记录 -2025-10-27 10:11:26,029 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 10:11:26,216 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 10:11:26,396 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761531086 -2025-10-27 10:11:26,574 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供简洁的技术支持建议: - -参考格式(处理过程记录的风格): -"检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议邀请用户进站抓取日志分析" - -要求: -1. 格式:直接陈述检查项和建议操作,用逗号或分号连接,不要用序号或分行 -2. 内容:从检查现状开始,然后是建议的操作步骤,最后是若无效的处理 -3. 参考已有处理记录,避免重复已尝试的方法 -4. 如已有处理记录,要基于当前问题状态提出下一步建议 -5. 总长度控制在200字以内 -6. 结尾统一使用"建议邀请用户进站抓取日志分析"(如果问题较复杂) - -问题描述:The widget weather doesn't work - -已处理的步骤: -0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志' 返回 3 个结果 -2025-10-27 10:11:29,875 - src.core.llm_client - INFO - API请求成功 -2025-10-27 10:11:30,280 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析... -2025-10-27 10:11:30,281 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析 -2025-10-27 10:11:30,281 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析 -2025-10-27 10:11:30,281 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析... -2025-10-27 10:11:30,282 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-27 10:11:30,282 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 10:11:30,282 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:11:32,429 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:11:32,430 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 10:11:32,431 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-27 10:11:32,606 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1027:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 10:11:32,606 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 10:11:32,607 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1027:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如无效则重启车机系统,尝试恢复网络设置或升级车机系统版本,若仍无法解决,建议邀请用户进站抓取日志分析 -2025-10-27 10:11:32,607 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 10:11:32,607 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 10:11:32,607 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 10:11:32,607 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 10:11:32,608 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 10:11:32,608 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 10:11:32,608 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 10:11:32,608 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 10:11:32,608 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 10:11:32,608 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 10:11:32,609 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 10:11:32,609 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 10:11:32,609 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 10:11:32,609 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 10:11:32,609 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 10:11:32,610 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 10:11:32,893 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-27 10:11:32,894 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:11:32] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-27 10:11:34,081 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:11:34] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 10:14:04,368 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:14:04] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 10:14:05,211 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 10:14:05,212 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 10:14:05,212 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:14:05,975 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:14:05] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 10:14:06,549 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:14:06] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 10:14:06,748 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:14:06,749 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1026:检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-27 10:14:06,751 - src.integrations.workorder_sync - INFO - 从飞书获取 1 条记录 -2025-10-27 10:14:06,752 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 10:14:06,932 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 10:14:07,107 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761531247 -2025-10-27 10:14:07,287 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供简洁的技术支持建议: - -参考格式(处理过程记录的风格): -"检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议邀请用户进站抓取日志分析" - -要求: -1. 格式:直接陈述检查项和建议操作,用逗号或分号连接,不要用序号或分行 -2. 内容:从检查现状开始,然后是建议的操作步骤,最后是若无效的处理 -3. 参考已有处理记录,避免重复已尝试的方法 -4. 如已有处理记录,要基于当前问题状态提出下一步建议 -5. 总长度控制在200字以内 -6. 结尾统一使用"建议邀请用户进站抓取日志分析"(如果问题较复杂) - -问题描述:The widget weather doesn't work - -已处理的步骤: -0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志' 返回 3 个结果 -2025-10-27 10:14:10,461 - src.core.llm_client - INFO - API请求成功 -2025-10-27 10:14:10,837 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍不生效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日... -2025-10-27 10:14:10,839 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍不生效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日 -2025-10-27 10:14:10,839 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍不生效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日 -2025-10-27 10:14:10,840 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍不生效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日... -2025-10-27 10:14:10,840 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-27 10:14:10,840 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 10:14:10,841 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:14:13,327 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:14:13,328 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍不生效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 10:14:13,330 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-27 10:14:13,513 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1026:检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 10:14:13,514 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 10:14:13,514 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1026:检查天气小部件的配置和网络连接,确保其权限已正确设置,并尝试重新启动设备或重装小部件以恢复功能。 -2025-10-27 10:14:13,514 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 10:14:13,515 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 10:14:13,515 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 10:14:13,515 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 10:14:13,515 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 10:14:13,515 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 10:14:13,516 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 10:14:13,516 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 10:14:13,529 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 10:14:13,529 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 10:14:13,530 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 10:14:13,530 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 10:14:13,530 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 10:14:13,530 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 10:14:13,531 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 10:14:13,531 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 10:14:13,848 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-27 10:14:13,849 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:14:13] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-27 10:14:15,106 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:14:15] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 10:15:58,895 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:15:58] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 10:16:00,485 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:16:00] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 10:16:01,069 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:16:01] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 10:18:47,458 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:18:47] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 10:18:47,674 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 10:18:47,674 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 10:18:47,674 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:18:48,044 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:18:48] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 10:18:48,049 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:18:48] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 10:18:49,255 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:18:49,256 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1026:检查车机网络连接是否正常,确认信号状态;重启车机系统尝试恢复功能;确保系统版本为最新。如问题仍未解决,建议用户进站获取DMC日志进一步排查。', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-27 10:18:49,257 - src.integrations.workorder_sync - INFO - 从飞书获取 1 条记录 -2025-10-27 10:18:49,257 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 10:18:49,442 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 10:18:49,625 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761531529 -2025-10-27 10:18:49,803 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供简洁的技术支持建议: - -参考格式(处理过程记录的风格): -"检查车机网络信号状态,确认车辆是否处于无信号区域,建议重启车机系统观察天气功能是否恢复,如未恢复,尝试恢复网络设置或升级车机系统版本,若仍无效,建议邀请用户进站抓取日志分析" - -要求: -1. 格式:直接陈述检查项和建议操作,用逗号或分号连接,不要用序号或分行 -2. 内容:从检查现状开始,然后是建议的操作步骤,最后是若无效的处理 -3. 参考已有处理记录,避免重复已尝试的方法 -4. 如已有处理记录,要基于当前问题状态提出下一步建议 -5. 总长度控制在200字以内 -6. 结尾统一使用"建议邀请用户进站抓取日志分析"(如果问题较复杂) - -问题描述:The widget weather doesn't work - -已处理的步骤: -0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志' 返回 3 个结果 -2025-10-27 10:18:52,170 - src.core.llm_client - INFO - API请求成功 -2025-10-27 10:18:52,568 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志... -2025-10-27 10:18:52,568 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志 -2025-10-27 10:18:52,569 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志 -2025-10-27 10:18:52,569 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志... -2025-10-27 10:18:52,569 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议 -2025-10-27 10:18:52,569 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 10:18:52,570 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:18:54,843 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:18:54,844 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 10:18:54,845 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-27 10:18:55,021 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1026:检查车机网络连接是否正常,确认信号状态;重启车机系统尝试恢复功能;确保系统版本为最新。如问题仍未解决,建议用户进站获取DMC日志进一步排查。', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 10:18:55,022 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 10:18:55,022 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1026:检查车机网络连接是否正常,确认信号状态;重启车机系统尝试恢复功能;确保系统版本为最新。如问题仍未解决,建议用户进站获取DMC日志进一步排查。 -2025-10-27 10:18:55,022 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 10:18:55,023 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 10:18:55,023 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 10:18:55,023 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 10:18:55,024 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 10:18:55,024 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 10:18:55,024 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 10:18:55,024 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 10:18:55,024 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 10:18:55,025 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 10:18:55,025 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 10:18:55,025 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 10:18:55,025 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 10:18:55,025 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 10:18:55,026 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 10:18:55,026 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 10:18:55,325 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-27 10:18:55,325 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:18:55] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-27 10:18:55,790 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:18:55] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 10:23:24,729 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-27 10:23:24,730 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-27 10:23:27,501 - src.core.database - INFO - 数据库初始化成功 -2025-10-27 10:23:30,007 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-27 10:23:30,034 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-27 10:23:30,109 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-27 10:23:30,110 - werkzeug - INFO - Press CTRL+C to quit -2025-10-27 10:23:30,327 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 10:23:30,504 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-27 10:23:30,525 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-27 10:23:30,526 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-27 10:23:40,779 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:23:40] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 10:23:41,476 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 10:23:41,652 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' -2025-10-27 10:23:41,653 - src.config.unified_config - INFO - 配置文件加载成功 -2025-10-27 10:23:41,653 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: openai - qwen-turbo -2025-10-27 10:23:41,655 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-27 10:23:41,658 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-27 10:23:41,660 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-27 10:23:41,662 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-27 10:23:41,663 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-27 10:23:41,665 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-27 10:23:41,667 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-27 10:23:41,668 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-27 10:23:41,670 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-27 10:23:41,672 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-27 10:23:41,677 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-27 10:23:41,682 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-27 10:23:41,685 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-27 10:23:41,687 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-27 10:23:41,689 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-27 10:23:41,692 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-27 10:23:41,695 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-27 10:23:41,698 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-27 10:23:41,701 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-27 10:23:41,702 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-27 10:23:41,705 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-27 10:23:41,707 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-27 10:23:41,707 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 10:23:41,708 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-27 10:23:41,724 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 10:23:42,220 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 2206, 'msg': 'ok', 'tenant_access_token': 't-g104ar90XDEZUY6E54KBLQ3TTUQZ5PZWN7CVQM4U'} -2025-10-27 10:23:42,221 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104ar90XDEZUY6E54... -2025-10-27 10:23:42,221 - src.integrations.feishu_client - INFO - 令牌有效期: 2206秒,过期时间: 2025-10-27 11:00:28 -2025-10-27 10:23:42,222 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 10:23:42,223 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:23:42,339 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 10:23:43,387 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:23:43] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 10:23:43,662 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:23:43,662 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-27 10:23:43,664 - src.integrations.workorder_sync - INFO - 从飞书获取 1 条记录 -2025-10-27 10:23:43,664 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 10:23:43,664 - src.integrations.workorder_sync - INFO - 第一条记录结构示例: record_id=rec253kqBfXae4, 有fields字段=True -2025-10-27 10:23:43,664 - src.integrations.workorder_sync - INFO - 第一条记录的fields示例: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source'] -2025-10-27 10:23:43,664 - src.integrations.workorder_sync - INFO - 第一条记录的AI建议字段内容: 1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是 -2025-10-27 10:23:43,665 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议长度: 113 -2025-10-27 10:23:43,665 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议前100字符: 1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进 -2025-10-27 10:23:44,130 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 10:23:44,225 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:23:44] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 10:23:44,591 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761531824 -2025-10-27 10:23:44,795 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: - -格式要求: -1. 用逗号连接,一句话表达,不要用序号或分行 -2. 现状+步骤,语言精炼 -3. 总长度控制在150字以内 - -根据问题复杂程度选择结尾: -- 简单问题:给出具体操作步骤即可,不需要提日志分析 -- 复杂问题:如远程操作无法解决,结尾才使用"建议邀请用户进站抓取日志分析" - -问题描述:The widget weather doesn't work - -已处理的步骤: -0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志' 返回 3 个结果 -2025-10-27 10:23:47,160 - src.core.llm_client - INFO - API请求成功 -2025-10-27 10:23:47,545 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议连接手机热点测试网络,若仍不恢复,尝试重启车机或抓取IHU日志,如远程操作无效,建议邀请用户进站抓取日志分析... -2025-10-27 10:23:47,546 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议连接手机热点测试网络,若仍不恢复,尝试重启车机或抓取IHU日志,如远程操作无效,建议邀请用户进站抓取日志分析 -2025-10-27 10:23:47,546 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议连接手机热点测试网络,若仍不恢复,尝试重启车机或抓取IHU日志,如远程操作无效,建议邀请用户进站抓取日志分析 -2025-10-27 10:23:47,547 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议连接手机热点测试网络,若仍不恢复,尝试重启车机或抓取IHU日志,如远程操作无效,建议邀请用户进站抓取日志分析... -2025-10-27 10:23:47,547 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1027, existing长度=113 -2025-10-27 10:23:47,547 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议,新建议长度: 208 -2025-10-27 10:23:47,548 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 10:23:47,548 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:23:50,414 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:23:50,415 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:\n1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议连接手机热点测试网络,若仍不恢复,尝试重启车机或抓取IHU日志,如远程操作无效,建议邀请用户进站抓取日志分析'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 10:23:50,419 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-27 10:23:50,845 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 10:23:50,846 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 10:23:50,847 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析 -1025: -2025-10-27 10:23:50,847 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 10:23:50,848 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 10:23:50,848 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 10:23:50,848 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 10:23:50,848 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 10:23:50,849 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 10:23:50,849 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 10:23:50,849 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 10:23:50,849 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 10:23:50,850 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 10:23:50,850 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 10:23:50,850 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 10:23:50,850 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 10:23:50,851 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 10:23:50,851 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 10:23:50,851 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 10:23:51,530 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-27 10:23:51,531 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:23:51] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-27 10:23:51,997 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:23:51] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 10:27:22,102 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 10:27:22,106 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 10:27:22,106 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:27:22,212 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:27:22] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 10:27:23,041 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:27:23] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 10:27:23,649 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:27:23,670 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:\n1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议连接手机热点测试网络,若仍不恢复,尝试重启车机或抓取IHU日志,如远程操作无效,建议邀请用户进站抓取日志分析', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-27 10:27:23,673 - src.integrations.workorder_sync - INFO - 从飞书获取 1 条记录 -2025-10-27 10:27:23,674 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 10:27:23,675 - src.integrations.workorder_sync - INFO - 第一条记录结构示例: record_id=rec253kqBfXae4, 有fields字段=True -2025-10-27 10:27:23,675 - src.integrations.workorder_sync - INFO - 第一条记录的fields示例: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source'] -2025-10-27 10:27:23,675 - src.integrations.workorder_sync - INFO - 第一条记录的AI建议字段内容: 1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是 -2025-10-27 10:27:23,676 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议长度: 208 -2025-10-27 10:27:23,679 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议前100字符: 1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进 -2025-10-27 10:27:23,752 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:27:23] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 10:27:24,183 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 10:27:24,642 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761532044 -2025-10-27 10:27:25,065 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: - -格式要求: -1. 用逗号连接,一句话表达,不要用序号或分行 -2. 现状+步骤,语言精炼 -3. 总长度控制在150字以内 - -根据问题复杂程度选择结尾: -- 简单问题:给出具体操作步骤即可,不需要提日志分析 -- 复杂问题:如远程操作无法解决,结尾才使用"建议邀请用户进站抓取日志分析" - -问题描述:The widget weather doesn't work - -已处理的步骤: -0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志' 返回 3 个结果 -2025-10-27 10:27:27,353 - src.core.llm_client - INFO - API请求成功 -2025-10-27 10:27:27,714 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析... -2025-10-27 10:27:27,714 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析 -2025-10-27 10:27:27,715 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析 -2025-10-27 10:27:27,715 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析... -2025-10-27 10:27:27,715 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1027, existing长度=208 -2025-10-27 10:27:27,715 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议,新建议长度: 300 -2025-10-27 10:27:27,716 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 10:27:27,716 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:27:30,823 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:27:30,823 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:\n1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议连接手机热点测试网络,若仍不恢复,尝试重启车机或抓取IHU日志,如远程操作无效,建议邀请用户进站抓取日志分析\n1027-1:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 10:27:30,825 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-27 10:27:31,000 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:\n1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议连接手机热点测试网络,若仍不恢复,尝试重启车机或抓取IHU日志,如远程操作无效,建议邀请用户进站抓取日志分析', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 10:27:31,001 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 10:27:31,001 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析 -1025: -1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议连接手机热点测试网络,若仍不恢复,尝试重启车机或抓取IHU日志,如远程操作无效,建议邀请用户进站抓取日志分析 -2025-10-27 10:27:31,001 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 10:27:31,002 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 10:27:31,002 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 10:27:31,002 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 10:27:31,002 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 10:27:31,002 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 10:27:31,003 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 10:27:31,003 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 10:27:31,003 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 10:27:31,003 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 10:27:31,003 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 10:27:31,003 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 10:27:31,004 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 10:27:31,004 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 10:27:31,004 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 10:27:31,004 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 10:27:31,279 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-27 10:27:31,280 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:27:31] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-27 10:27:32,424 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:27:32] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 10:27:47,593 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-27 10:27:47,593 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-27 10:27:52,971 - src.core.database - INFO - 数据库初始化成功 -2025-10-27 10:27:54,252 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-27 10:27:54,258 - __main__ - ERROR - 启动失败: f-string expression part cannot include a backslash (ai_suggestion_service.py, line 426) -2025-10-27 10:28:04,550 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-27 10:28:04,550 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-27 10:28:06,858 - src.core.database - INFO - 数据库初始化成功 -2025-10-27 10:28:08,099 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-27 10:28:08,106 - __main__ - ERROR - 启动失败: f-string expression part cannot include a backslash (ai_suggestion_service.py, line 426) -2025-10-27 10:28:41,571 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-27 10:28:41,571 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-27 10:28:43,869 - src.core.database - INFO - 数据库初始化成功 -2025-10-27 10:28:45,273 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-27 10:28:45,293 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-27 10:28:45,380 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-27 10:28:45,381 - werkzeug - INFO - Press CTRL+C to quit -2025-10-27 10:28:45,606 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 10:28:45,775 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-27 10:28:45,784 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-27 10:28:45,785 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-27 10:28:46,362 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 10:28:46,858 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:28:46] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 10:28:47,016 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 10:28:48,239 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:28:48] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 10:28:48,889 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 10:28:49,070 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' -2025-10-27 10:28:49,071 - src.config.unified_config - INFO - 配置文件加载成功 -2025-10-27 10:28:49,072 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: openai - qwen-turbo -2025-10-27 10:28:49,074 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-27 10:28:49,075 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-27 10:28:49,077 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-27 10:28:49,078 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-27 10:28:49,079 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-27 10:28:49,080 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-27 10:28:49,082 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-27 10:28:49,083 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-27 10:28:49,086 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-27 10:28:49,088 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-27 10:28:49,090 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-27 10:28:49,093 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-27 10:28:49,096 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-27 10:28:49,099 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-27 10:28:49,101 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-27 10:28:49,104 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-27 10:28:49,106 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-27 10:28:49,108 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-27 10:28:49,112 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-27 10:28:49,115 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-27 10:28:49,117 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-27 10:28:49,120 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-27 10:28:49,120 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 10:28:49,121 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-27 10:28:49,461 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:28:49] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 10:28:49,581 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 1899, 'msg': 'ok', 'tenant_access_token': 't-g104ar90XDEZUY6E54KBLQ3TTUQZ5PZWN7CVQM4U'} -2025-10-27 10:28:49,581 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104ar90XDEZUY6E54... -2025-10-27 10:28:49,581 - src.integrations.feishu_client - INFO - 令牌有效期: 1899秒,过期时间: 2025-10-27 11:00:28 -2025-10-27 10:28:49,583 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 10:28:49,583 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:28:51,294 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:28:51,295 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:\n', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-27 10:28:51,296 - src.integrations.workorder_sync - INFO - 从飞书获取 1 条记录 -2025-10-27 10:28:51,296 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 10:28:51,297 - src.integrations.workorder_sync - INFO - 第一条记录结构示例: record_id=rec253kqBfXae4, 有fields字段=True -2025-10-27 10:28:51,297 - src.integrations.workorder_sync - INFO - 第一条记录的fields示例: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source'] -2025-10-27 10:28:51,297 - src.integrations.workorder_sync - INFO - 第一条记录的AI建议字段内容: 1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是 -2025-10-27 10:28:51,297 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议长度: 114 -2025-10-27 10:28:51,298 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议前100字符: 1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进 -2025-10-27 10:28:51,473 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 10:28:51,643 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761532131 -2025-10-27 10:28:52,132 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: - -格式要求: -1. 用逗号连接,一句话表达,不要用序号或分行 -2. 现状+步骤,语言精炼 -3. 总长度控制在150字以内 - -根据问题复杂程度选择结尾: -- 简单问题:给出具体操作步骤即可,不需要提日志分析 -- 复杂问题:如远程操作无法解决,结尾才使用"建议邀请用户进站抓取日志分析" - -问题描述:The widget weather doesn't work - -已处理的步骤: -0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志' 返回 3 个结果 -2025-10-27 10:28:56,979 - src.core.llm_client - INFO - API请求成功 -2025-10-27 10:28:57,339 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络响应,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取日志分析... -2025-10-27 10:28:57,339 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络响应,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取日志分析 -2025-10-27 10:28:57,340 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络响应,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取日志分析 -2025-10-27 10:28:57,340 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络响应,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取日志分析... -2025-10-27 10:28:57,340 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1027, existing长度=114 -2025-10-27 10:28:57,341 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议,新建议长度: 203 -2025-10-27 10:28:57,341 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 10:28:57,341 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:28:58,703 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 10:28:58,704 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 10:28:58,704 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:29:00,120 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:29:00,121 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络响应,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取日志分析\n1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:\n'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 10:29:00,122 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-27 10:29:00,187 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:29:00,187 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:\n', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}], 'total': 1}, 'msg': 'success'} -2025-10-27 10:29:00,190 - src.integrations.workorder_sync - INFO - 从飞书获取 1 条记录 -2025-10-27 10:29:00,190 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 10:29:00,190 - src.integrations.workorder_sync - INFO - 第一条记录结构示例: record_id=rec253kqBfXae4, 有fields字段=True -2025-10-27 10:29:00,190 - src.integrations.workorder_sync - INFO - 第一条记录的fields示例: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source'] -2025-10-27 10:29:00,191 - src.integrations.workorder_sync - INFO - 第一条记录的AI建议字段内容: 1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是 -2025-10-27 10:29:00,191 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议长度: 114 -2025-10-27 10:29:00,191 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议前100字符: 1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进 -2025-10-27 10:29:00,642 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:\n', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 10:29:00,642 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 10:29:00,643 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析 -1025: - -2025-10-27 10:29:00,643 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 10:29:00,643 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 10:29:00,644 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 10:29:00,644 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 10:29:00,644 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 10:29:00,644 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 10:29:00,644 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 10:29:00,645 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 10:29:00,645 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 10:29:00,645 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 10:29:00,645 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 10:29:00,645 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 10:29:00,646 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 10:29:00,646 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 10:29:00,646 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 10:29:00,646 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 10:29:00,656 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 10:29:01,405 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-27 10:29:01,406 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:29:01] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-27 10:29:01,905 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:29:01] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 10:29:01,988 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761532141 -2025-10-27 10:29:02,153 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: - -格式要求: -1. 用逗号连接,一句话表达,不要用序号或分行 -2. 现状+步骤,语言精炼 -3. 总长度控制在150字以内 - -根据问题复杂程度选择结尾: -- 简单问题:给出具体操作步骤即可,不需要提日志分析 -- 复杂问题:如远程操作无法解决,结尾才使用"建议邀请用户进站抓取日志分析" - -问题描述:The widget weather doesn't work - -已处理的步骤: -0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志' 返回 3 个结果 -2025-10-27 10:29:04,473 - src.core.llm_client - INFO - API请求成功 -2025-10-27 10:29:05,440 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 天气小部件无法使用,已确认TBOX及IHU登录正常且流量绑定无异常,建议先连接手机热点测试网络响应,若仍不恢复则重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析。... -2025-10-27 10:29:05,440 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 天气小部件无法使用,已确认TBOX及IHU登录正常且流量绑定无异常,建议先连接手机热点测试网络响应,若仍不恢复则重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析。 -2025-10-27 10:29:05,440 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 天气小部件无法使用,已确认TBOX及IHU登录正常且流量绑定无异常,建议先连接手机热点测试网络响应,若仍不恢复则重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析。 -2025-10-27 10:29:05,440 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 天气小部件无法使用,已确认TBOX及IHU登录正常且流量绑定无异常,建议先连接手机热点测试网络响应,若仍不恢复则重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析。... -2025-10-27 10:29:05,441 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1027, existing长度=114 -2025-10-27 10:29:05,441 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议,新建议长度: 206 -2025-10-27 10:29:05,441 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 10:29:05,441 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ar90XDEZUY6E54... -2025-10-27 10:29:08,140 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 10:29:08,140 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常且流量绑定无异常,建议先连接手机热点测试网络响应,若仍不恢复则重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析。\n1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:\n'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 10:29:08,141 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-27 10:29:08,317 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:\n', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 10:29:08,318 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 10:29:08,318 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析 -1025: - -2025-10-27 10:29:08,318 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 10:29:08,319 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 10:29:08,319 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 10:29:08,319 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 10:29:08,319 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 10:29:08,319 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 10:29:08,319 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 10:29:08,320 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 10:29:08,320 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 10:29:08,320 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 10:29:08,320 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 10:29:08,321 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 10:29:08,321 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 10:29:08,321 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 10:29:08,321 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 10:29:08,321 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 10:29:08,598 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 1, 'synced_count': 1, 'created_count': 0, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-27 10:29:08,599 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:29:08] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-27 10:29:09,049 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:29:09] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-27 10:29:23,523 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 10:29:23] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 13:25:35,074 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-27 13:25:35,075 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-27 13:25:38,188 - src.core.database - INFO - 数据库初始化成功 -2025-10-27 13:25:41,666 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-27 13:25:41,682 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-27 13:25:41,793 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-27 13:25:41,794 - werkzeug - INFO - Press CTRL+C to quit -2025-10-27 13:25:42,089 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:25:42,294 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-27 13:25:42,306 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-27 13:25:42,306 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-27 13:26:43,325 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 13:26:43] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 13:26:43,814 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:26:44,021 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' -2025-10-27 13:26:44,023 - src.config.unified_config - INFO - 配置文件加载成功 -2025-10-27 13:26:44,023 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: openai - qwen-turbo -2025-10-27 13:26:44,025 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-27 13:26:44,026 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-27 13:26:44,028 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-27 13:26:44,030 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-27 13:26:44,031 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-27 13:26:44,034 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 13:26:44] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 13:26:44,035 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-27 13:26:44,037 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-27 13:26:44,042 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-27 13:26:44,045 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-27 13:26:44,049 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-27 13:26:44,052 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-27 13:26:44,057 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-27 13:26:44,060 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-27 13:26:44,062 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-27 13:26:44,063 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-27 13:26:44,064 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-27 13:26:44,065 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-27 13:26:44,067 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-27 13:26:44,070 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-27 13:26:44,072 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-27 13:26:44,076 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-27 13:26:44,079 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-27 13:26:44,080 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 13:26:44,080 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-27 13:26:44,330 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:26:44,620 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 2000, 'msg': 'ok', 'tenant_access_token': 't-g104arc0EZPYERRZG3ZZHO52A3VD3CLFNEWGAY7R'} -2025-10-27 13:26:44,621 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104arc0EZPYERRZG3... -2025-10-27 13:26:44,621 - src.integrations.feishu_client - INFO - 令牌有效期: 2000秒,过期时间: 2025-10-27 14:00:04 -2025-10-27 13:26:44,624 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 13:26:44,624 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104arc0EZPYERRZG3... -2025-10-27 13:26:44,934 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 13:26:44] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 13:26:45,057 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:26:46,937 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 13:26:46,938 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络响应,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取日志分析\n1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}, {'fields': {'App remote control version': [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}], 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'SIM': "'Астанин Артем Иванович (CSAT: 4.5 ⭐)' ", 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'Vehicle Type01': 'LNNBDDEZ8SD345645 ', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'}, 'id': 'recv0NLSh2a2S7', 'record_id': 'recv0NLSh2a2S7'}, {'fields': {'App remote control version': [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}], 'Created by': 'LNNBDDEZXSD449358.zip', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'SIM': "'Астанин Артем Иванович (CSAT: 4.5 ⭐)' ", 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'Vehicle Type01': 'LNNBDDEZXSD449358', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.'}, 'id': 'recv0NLZoKLlRJ', 'record_id': 'recv0NLZoKLlRJ'}, {'fields': {'App remote control version': [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}], 'Created by': 'Traffic_consumption_issue.pdf', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'SIM': 'Ксения Митрофанова ', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'Vehicle Type01': 'XEYDD14B3SA012164', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'}, 'id': 'recv0NLZoKjKvx', 'record_id': 'recv0NLZoKjKvx'}], 'total': 4}, 'msg': 'success'} -2025-10-27 13:26:46,943 - src.integrations.workorder_sync - INFO - 从飞书获取 4 条记录 -2025-10-27 13:26:46,944 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 13:26:46,944 - src.integrations.workorder_sync - INFO - 第一条记录结构示例: record_id=rec253kqBfXae4, 有fields字段=True -2025-10-27 13:26:46,944 - src.integrations.workorder_sync - INFO - 第一条记录的fields示例: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source'] -2025-10-27 13:26:46,945 - src.integrations.workorder_sync - INFO - 第一条记录的AI建议字段内容: 1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网 -2025-10-27 13:26:46,945 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议长度: 202 -2025-10-27 13:26:46,946 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议前100字符: 1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络响应,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取日志分析 -1026:检查车机网络 -2025-10-27 13:26:47,114 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:26:47,283 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761542807 -2025-10-27 13:26:47,754 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: - -格式要求: -1. 用逗号连接,一句话表达,不要用序号或分行 -2. 现状+步骤,语言精炼 -3. 总长度控制在150字以内 - -根据问题复杂程度选择结尾: -- 简单问题:给出具体操作步骤即可,不需要提日志分析 -- 复杂问题:如远程操作无法解决,结尾才使用"建议邀请用户进站抓取日志分析" - -问题描述:The widget weather doesn't work - -已处理的步骤: -0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志' 返回 3 个结果 -2025-10-27 13:26:50,347 - src.core.llm_client - INFO - API请求成功 -2025-10-27 13:26:50,726 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络,若仍不恢复则重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析... -2025-10-27 13:26:50,727 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络,若仍不恢复则重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析 -2025-10-27 13:26:50,727 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络,若仍不恢复则重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析 -2025-10-27 13:26:50,728 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络,若仍不恢复则重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析... -2025-10-27 13:26:50,728 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1027, existing长度=202 -2025-10-27 13:26:50,728 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议,新建议长度: 292 -2025-10-27 13:26:50,729 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLSh2a2S7 - 现有AI建议长度: 0 -2025-10-27 13:26:50,936 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:26:51,149 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761542811 -2025-10-27 13:26:51,324 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: - -格式要求: -1. 用逗号连接,一句话表达,不要用序号或分行 -2. 现状+步骤,语言精炼 -3. 总长度控制在150字以内 - -根据问题复杂程度选择结尾: -- 简单问题:给出具体操作步骤即可,不需要提日志分析 -- 复杂问题:如远程操作无法解决,结尾才使用"建议邀请用户进站抓取日志分析" - -问题描述:Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19. - - -已处理的步骤: -1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志' 返回 3 个结果 -2025-10-27 13:26:53,923 - src.core.llm_client - INFO - API请求成功 -2025-10-27 13:26:54,282 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 车辆自10月19日起TBOX进入深度睡眠,远程无法唤醒且数据未更新,建议邀请用户进站抓取TBOX和DMC日志分析... -2025-10-27 13:26:54,283 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 车辆自10月19日起TBOX进入深度睡眠,远程无法唤醒且数据未更新,建议邀请用户进站抓取TBOX和DMC日志分析 -2025-10-27 13:26:54,284 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 车辆自10月19日起TBOX进入深度睡眠,远程无法唤醒且数据未更新,建议邀请用户进站抓取TBOX和DMC日志分析 -2025-10-27 13:26:54,284 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 车辆自10月19日起TBOX进入深度睡眠,远程无法唤醒且数据未更新,建议邀请用户进站抓取TBOX和DMC日志分析... -2025-10-27 13:26:54,285 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1027, existing长度=0 -2025-10-27 13:26:54,285 - src.integrations.ai_suggestion_service - INFO - 没有现有建议,返回: 1027:车辆自10月19日起TBOX进入深度睡眠,远程无法唤醒且数据未更新,建议邀请用户进站抓取TBOX和D... -2025-10-27 13:26:54,285 - src.integrations.ai_suggestion_service - INFO - 为记录 recv0NLSh2a2S7 生成AI建议,新建议长度: 61 -2025-10-27 13:26:54,286 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKLlRJ - 现有AI建议长度: 0 -2025-10-27 13:26:54,762 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:26:55,236 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761542815 -2025-10-27 13:26:55,441 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: - -格式要求: -1. 用逗号连接,一句话表达,不要用序号或分行 -2. 现状+步骤,语言精炼 -3. 总长度控制在150字以内 - -根据问题复杂程度选择结尾: -- 简单问题:给出具体操作步骤即可,不需要提日志分析 -- 复杂问题:如远程操作无法解决,结尾才使用"建议邀请用户进站抓取日志分析" - -问题描述:User not able to enter into member center neither mobile phone nor QR code. - -已处理的步骤: -1024: DMC logs attached as well as vieos of the issue.' 返回 3 个结果 -2025-10-27 13:26:57,312 - src.core.llm_client - INFO - API请求成功 -2025-10-27 13:26:57,662 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 当前无法登录会员中心,建议先检查手机网络连接是否正常,尝试重启手机或更换网络环境后重新扫码登录,确认APP为最新版本,若仍无法进入,建议邀请用户进站抓取日志分析。... -2025-10-27 13:26:57,662 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 当前无法登录会员中心,建议先检查手机网络连接是否正常,尝试重启手机或更换网络环境后重新扫码登录,确认APP为最新版本,若仍无法进入,建议邀请用户进站抓取日志分析。 -2025-10-27 13:26:57,663 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 当前无法登录会员中心,建议先检查手机网络连接是否正常,尝试重启手机或更换网络环境后重新扫码登录,确认APP为最新版本,若仍无法进入,建议邀请用户进站抓取日志分析。 -2025-10-27 13:26:57,663 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 当前无法登录会员中心,建议先检查手机网络连接是否正常,尝试重启手机或更换网络环境后重新扫码登录,确认APP为最新版本,若仍无法进入,建议邀请用户进站抓取日志分析。... -2025-10-27 13:26:57,663 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1027, existing长度=0 -2025-10-27 13:26:57,663 - src.integrations.ai_suggestion_service - INFO - 没有现有建议,返回: 1027:当前无法登录会员中心,建议先检查手机网络连接是否正常,尝试重启手机或更换网络环境后重新扫码登录,确认... -2025-10-27 13:26:57,664 - src.integrations.ai_suggestion_service - INFO - 为记录 recv0NLZoKLlRJ 生成AI建议,新建议长度: 86 -2025-10-27 13:26:57,664 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKjKvx - 现有AI建议长度: 0 -2025-10-27 13:26:58,177 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:26:58,645 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761542818 -2025-10-27 13:26:58,853 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: - -格式要求: -1. 用逗号连接,一句话表达,不要用序号或分行 -2. 现状+步骤,语言精炼 -3. 总长度控制在150字以内 - -根据问题复杂程度选择结尾: -- 简单问题:给出具体操作步骤即可,不需要提日志分析 -- 复杂问题:如远程操作无法解决,结尾才使用"建议邀请用户进站抓取日志分析" - -问题描述:Abnormal traffic consumption - -已处理的步骤: -1024:建议用户抓去DMC日志回传分析 -1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf' 返回 3 个结果 -2025-10-27 13:27:01,251 - src.core.llm_client - INFO - API请求成功 -2025-10-27 13:27:01,599 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 当前流量异常消耗达3.12GB/3天,用户仅使用导航,建议先重启车机并关闭非必要后台应用,检查网络设置中数据使用情况,更新车机系统至最新版本,若问题依旧,建议邀请用户进站抓取日志分析。... -2025-10-27 13:27:01,599 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 当前流量异常消耗达3.12GB/3天,用户仅使用导航,建议先重启车机并关闭非必要后台应用,检查网络设置中数据使用情况,更新车机系统至最新版本,若问题依旧,建议邀请用户进站抓取日志分析。 -2025-10-27 13:27:01,600 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 当前流量异常消耗达3.12GB/3天,用户仅使用导航,建议先重启车机并关闭非必要后台应用,检查网络设置中数据使用情况,更新车机系统至最新版本,若问题依旧,建议邀请用户进站抓取日志分析。 -2025-10-27 13:27:01,600 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 当前流量异常消耗达3.12GB/3天,用户仅使用导航,建议先重启车机并关闭非必要后台应用,检查网络设置中数据使用情况,更新车机系统至最新版本,若问题依旧,建议邀请用户进站抓取日志分析。... -2025-10-27 13:27:01,600 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1027, existing长度=0 -2025-10-27 13:27:01,600 - src.integrations.ai_suggestion_service - INFO - 没有现有建议,返回: 1027:当前流量异常消耗达3.12GB/3天,用户仅使用导航,建议先重启车机并关闭非必要后台应用,检查网络设... -2025-10-27 13:27:01,601 - src.integrations.ai_suggestion_service - INFO - 为记录 recv0NLZoKjKvx 生成AI建议,新建议长度: 97 -2025-10-27 13:27:01,601 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 13:27:01,601 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104arc0EZPYERRZG3... -2025-10-27 13:27:03,582 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 13:27:03,583 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027-1:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络,若仍不恢复则重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析\n1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络响应,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取日志分析\n1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 13:27:03,585 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-27 13:27:03,586 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/recv0NLSh2a2S7 -2025-10-27 13:27:03,586 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104arc0EZPYERRZG3... -2025-10-27 13:27:05,450 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 13:27:05,450 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:车辆自10月19日起TBOX进入深度睡眠,远程无法唤醒且数据未更新,建议邀请用户进站抓取TBOX和DMC日志分析'}, 'id': 'recv0NLSh2a2S7', 'record_id': 'recv0NLSh2a2S7'}}, 'msg': 'success'} -2025-10-27 13:27:05,452 - src.integrations.workorder_sync - INFO - 更新飞书记录 recv0NLSh2a2S7 的AI建议 -2025-10-27 13:27:05,452 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/recv0NLZoKLlRJ -2025-10-27 13:27:05,452 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104arc0EZPYERRZG3... -2025-10-27 13:27:07,471 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 13:27:07,472 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:当前无法登录会员中心,建议先检查手机网络连接是否正常,尝试重启手机或更换网络环境后重新扫码登录,确认APP为最新版本,若仍无法进入,建议邀请用户进站抓取日志分析。'}, 'id': 'recv0NLZoKLlRJ', 'record_id': 'recv0NLZoKLlRJ'}}, 'msg': 'success'} -2025-10-27 13:27:07,473 - src.integrations.workorder_sync - INFO - 更新飞书记录 recv0NLZoKLlRJ 的AI建议 -2025-10-27 13:27:07,474 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/recv0NLZoKjKvx -2025-10-27 13:27:07,474 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104arc0EZPYERRZG3... -2025-10-27 13:27:09,385 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 13:27:09,386 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:当前流量异常消耗达3.12GB/3天,用户仅使用导航,建议先重启车机并关闭非必要后台应用,检查网络设置中数据使用情况,更新车机系统至最新版本,若问题依旧,建议邀请用户进站抓取日志分析。'}, 'id': 'recv0NLZoKjKvx', 'record_id': 'recv0NLZoKjKvx'}}, 'msg': 'success'} -2025-10-27 13:27:09,388 - src.integrations.workorder_sync - INFO - 更新飞书记录 recv0NLZoKjKvx 的AI建议 -2025-10-27 13:27:09,880 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络响应,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取日志分析\n1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 13:27:09,881 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 13:27:09,882 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络响应,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取日志分析 -1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析 -1025: -2025-10-27 13:27:09,882 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 13:27:09,882 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 13:27:09,882 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 13:27:09,883 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 13:27:09,883 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 13:27:09,883 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 13:27:09,884 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 13:27:09,884 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 13:27:09,884 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 13:27:09,884 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 13:27:09,884 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 13:27:09,885 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 13:27:09,885 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 13:27:09,885 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 13:27:09,885 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 13:27:09,885 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 13:27:10,119 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'App remote control version': [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}], 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'SIM': "'Астанин Артем Иванович (CSAT: 4.5 ⭐)' ", 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'Vehicle Type01': 'LNNBDDEZ8SD345645 ', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'} -2025-10-27 13:27:10,120 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['App remote control version', 'Date creation', 'Module(模块)', 'SIM', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 13:27:10,120 - src.integrations.flexible_field_mapper - INFO - 映射字段 App remote control version -> app_remote_control_version: [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}] -2025-10-27 13:27:10,121 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761148800000 -2025-10-27 13:27:10,121 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: TBOX -2025-10-27 13:27:10,122 - src.integrations.flexible_field_mapper - INFO - 映射字段 SIM -> vin_sim: 'Астанин Артем Иванович (CSAT: 4.5 ⭐)' -2025-10-27 13:27:10,122 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 13:27:10,122 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19. - -2025-10-27 13:27:10,123 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 13:27:10,123 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR863 -2025-10-27 13:27:10,123 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 13:27:10,124 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi -2025-10-27 13:27:10,124 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Remote control -2025-10-27 13:27:10,124 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: LNNBDDEZ8SD345645 -2025-10-27 13:27:10,124 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: 刘娇龙 -2025-10-27 13:27:10,125 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志 -2025-10-27 13:27:10,125 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 14, 未映射 0 -2025-10-27 13:27:10,125 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 14, 已映射 14, 未映射 0 -2025-10-27 13:27:10,362 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'App remote control version': [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}], 'Created by': 'LNNBDDEZXSD449358.zip', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'SIM': "'Астанин Артем Иванович (CSAT: 4.5 ⭐)' ", 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'Vehicle Type01': 'LNNBDDEZXSD449358', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.'} -2025-10-27 13:27:10,363 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['App remote control version', 'Created by', 'Date creation', 'Module(模块)', 'SIM', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 13:27:10,363 - src.integrations.flexible_field_mapper - INFO - 映射字段 App remote control version -> app_remote_control_version: [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}] -2025-10-27 13:27:10,363 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: LNNBDDEZXSD449358.zip -2025-10-27 13:27:10,363 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761148800000 -2025-10-27 13:27:10,364 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: 生态/ecologically -2025-10-27 13:27:10,364 - src.integrations.flexible_field_mapper - INFO - 映射字段 SIM -> vin_sim: 'Астанин Артем Иванович (CSAT: 4.5 ⭐)' -2025-10-27 13:27:10,364 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 13:27:10,364 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: User not able to enter into member center neither mobile phone nor QR code. -2025-10-27 13:27:10,364 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 13:27:10,365 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR864 -2025-10-27 13:27:10,365 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 13:27:10,365 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 23/10: DMC logs attached as well as vieos of the issue. -2025-10-27 13:27:10,365 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Problem with auth in member center -2025-10-27 13:27:10,365 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: LNNBDDEZXSD449358 -2025-10-27 13:27:10,366 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: 袁清 -2025-10-27 13:27:10,366 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 1024: DMC logs attached as well as vieos of the issue. -2025-10-27 13:27:10,366 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 13:27:10,366 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 13:27:11,003 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'App remote control version': [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}], 'Created by': 'Traffic_consumption_issue.pdf', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'SIM': 'Ксения Митрофанова ', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'Vehicle Type01': 'XEYDD14B3SA012164', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'} -2025-10-27 13:27:11,003 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['App remote control version', 'Created by', 'Date creation', 'Module(模块)', 'SIM', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 13:27:11,004 - src.integrations.flexible_field_mapper - INFO - 映射字段 App remote control version -> app_remote_control_version: [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}] -2025-10-27 13:27:11,004 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Traffic_consumption_issue.pdf -2025-10-27 13:27:11,005 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761235200000 -2025-10-27 13:27:11,005 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: DMC -2025-10-27 13:27:11,005 - src.integrations.flexible_field_mapper - INFO - 映射字段 SIM -> vin_sim: Ксения Митрофанова -2025-10-27 13:27:11,005 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 13:27:11,005 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Abnormal traffic consumption -2025-10-27 13:27:11,006 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 13:27:11,006 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR866 -2025-10-27 13:27:11,006 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Analysising -2025-10-27 13:27:11,006 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi -24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached -2025-10-27 13:27:11,007 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Traffic is over -2025-10-27 13:27:11,007 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: XEYDD14B3SA012164 -2025-10-27 13:27:11,007 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Vsevolod Tsoi -2025-10-27 13:27:11,007 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 1024:建议用户抓去DMC日志回传分析 -1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf -2025-10-27 13:27:11,008 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 13:27:11,008 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 13:27:11,749 - src.core.database - ERROR - 数据库操作失败: dict can not be used as parameter -2025-10-27 13:27:11,750 - src.integrations.workorder_sync - ERROR - 飞书同步失败: dict can not be used as parameter -2025-10-27 13:27:11,751 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 13:27:11] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 500 - -2025-10-27 13:30:55,735 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.8% -2025-10-27 13:30:55,796 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.8% -2025-10-27 13:31:57,179 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.8% -2025-10-27 13:31:57,748 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 88.8% -2025-10-27 13:32:58,618 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.2% -2025-10-27 13:32:59,409 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.2% -2025-10-27 13:34:00,567 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.6% -2025-10-27 13:34:00,849 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.6% -2025-10-27 13:34:57,794 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 13:34:57] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 13:34:58,255 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 13:34:58] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 13:34:59,468 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 13:34:59] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 13:35:02,035 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.9% -2025-10-27 13:35:02,367 - src.core.system_optimizer - WARNING - 性能预警: 内存使用率过高: 89.9% -2025-10-27 13:35:27,055 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-27 13:35:27,055 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-27 13:35:33,014 - src.core.database - INFO - 数据库初始化成功 -2025-10-27 13:35:36,053 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-27 13:35:36,090 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-27 13:35:36,195 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-27 13:35:36,196 - werkzeug - INFO - Press CTRL+C to quit -2025-10-27 13:35:36,707 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:35:37,177 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-27 13:35:37,188 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-27 13:35:37,188 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-27 13:35:43,025 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:35:43,503 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' -2025-10-27 13:35:43,504 - src.config.unified_config - INFO - 配置文件加载成功 -2025-10-27 13:35:43,505 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: openai - qwen-turbo -2025-10-27 13:35:43,507 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-27 13:35:43,509 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-27 13:35:43,511 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-27 13:35:43,512 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-27 13:35:43,514 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-27 13:35:43,515 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-27 13:35:43,517 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-27 13:35:43,518 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-27 13:35:43,520 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-27 13:35:43,522 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-27 13:35:43,524 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-27 13:35:43,525 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-27 13:35:43,527 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-27 13:35:43,528 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-27 13:35:43,530 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-27 13:35:43,531 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-27 13:35:43,533 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-27 13:35:43,535 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-27 13:35:43,537 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-27 13:35:43,538 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-27 13:35:43,540 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-27 13:35:43,541 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-27 13:35:43,542 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 13:35:43,542 - src.integrations.feishu_client - INFO - 正在获取飞书tenant_access_token,应用ID: cli_a8b50ec0eed1500d -2025-10-27 13:35:44,223 - src.integrations.feishu_client - INFO - 飞书API响应: {'code': 0, 'expire': 7200, 'msg': 'ok', 'tenant_access_token': 't-g104ardzY5FUAT4PXXIHVH2MEYWZ56MIGBB6BLWC'} -2025-10-27 13:35:44,224 - src.integrations.feishu_client - INFO - tenant_access_token获取成功: t-g104ardzY5FUAT4PXX... -2025-10-27 13:35:44,225 - src.integrations.feishu_client - INFO - 令牌有效期: 7200秒,过期时间: 2025-10-27 15:35:44 -2025-10-27 13:35:44,228 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 13:35:44,229 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ardzY5FUAT4PXX... -2025-10-27 13:35:46,244 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 13:35:46] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 13:35:47,173 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 13:35:47,174 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '1027-1:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络,若仍不恢复则重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析\n1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络响应,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取日志分析\n1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}, {'fields': {'AI建议': '1027:车辆自10月19日起TBOX进入深度睡眠,远程无法唤醒且数据未更新,建议邀请用户进站抓取TBOX和DMC日志分析', 'App remote control version': [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}], 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'SIM': "'Астанин Артем Иванович (CSAT: 4.5 ⭐)' ", 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'Vehicle Type01': 'LNNBDDEZ8SD345645 ', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'}, 'id': 'recv0NLSh2a2S7', 'record_id': 'recv0NLSh2a2S7'}, {'fields': {'AI建议': '1027:当前无法登录会员中心,建议先检查手机网络连接是否正常,尝试重启手机或更换网络环境后重新扫码登录,确认APP为最新版本,若仍无法进入,建议邀请用户进站抓取日志分析。', 'App remote control version': [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}], 'Created by': 'LNNBDDEZXSD449358.zip', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'SIM': "'Астанин Артем Иванович (CSAT: 4.5 ⭐)' ", 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'Vehicle Type01': 'LNNBDDEZXSD449358', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.'}, 'id': 'recv0NLZoKLlRJ', 'record_id': 'recv0NLZoKLlRJ'}, {'fields': {'AI建议': '1027:当前流量异常消耗达3.12GB/3天,用户仅使用导航,建议先重启车机并关闭非必要后台应用,检查网络设置中数据使用情况,更新车机系统至最新版本,若问题依旧,建议邀请用户进站抓取日志分析。', 'App remote control version': [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}], 'Created by': 'Traffic_consumption_issue.pdf', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'SIM': 'Ксения Митрофанова ', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'Vehicle Type01': 'XEYDD14B3SA012164', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'}, 'id': 'recv0NLZoKjKvx', 'record_id': 'recv0NLZoKjKvx'}], 'total': 4}, 'msg': 'success'} -2025-10-27 13:35:47,180 - src.integrations.workorder_sync - INFO - 从飞书获取 4 条记录 -2025-10-27 13:35:47,180 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 13:35:47,180 - src.integrations.workorder_sync - INFO - 第一条记录结构示例: record_id=rec253kqBfXae4, 有fields字段=True -2025-10-27 13:35:47,181 - src.integrations.workorder_sync - INFO - 第一条记录的fields示例: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source'] -2025-10-27 13:35:47,181 - src.integrations.workorder_sync - INFO - 第一条记录的AI建议字段内容: 1027-1:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测 -2025-10-27 13:35:47,182 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议长度: 292 -2025-10-27 13:35:47,182 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议前100字符: 1027-1:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络,若仍不恢复则重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析 -1027:天气小部件 -2025-10-27 13:35:47,657 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:35:48,128 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761543348 -2025-10-27 13:35:48,598 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: + * Running on http://192.168.31.202:5000 +2025-12-07 23:45:45,133 - werkzeug - INFO - Press CTRL+C to quit +2025-12-07 23:45:45,650 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:45:45,962 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-07 23:45:45,977 - websockets.server - INFO - server listening on 127.0.0.1:8765 +2025-12-07 23:45:45,977 - websockets.server - INFO - server listening on [::1]:8765 +2025-12-07 23:47:49,611 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:47:49,915 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' +2025-12-07 23:47:49,915 - src.config.unified_config - INFO - 配置文件加载成功 +2025-12-07 23:47:49,915 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: qwen - qwen-plus-latest +2025-12-07 23:47:50,384 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:47:50,705 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1765122470 +2025-12-07 23:47:51,394 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: 格式要求: 1. 现状+步骤,语言精炼 2. 总长度控制在150字以内 要求: -1. 基于已有处理步骤,给出下一步的排查建议 -2. 如果远程操作都无法解决,可以考虑更深入的诊断方案 -3. 语言简洁精炼,用逗号连接,不要用序号或分行 +1. 首次给客户建议,只提供远程可操作的一般性排查步骤 +2. 如检查网络、重启系统、确认配置等常见操作 +3. 绝对不要提到"进站"、"抓取日志"等需要线下操作的内容 +4. 语言简洁精炼,用逗号连接,不要用序号或分行 -问题描述:The widget weather doesn't work - -已处理的步骤: -0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志' 返回 3 个结果 -2025-10-27 13:35:51,563 - src.core.llm_client - INFO - API请求成功 -2025-10-27 13:35:52,554 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议连接手机热点测试网络连通性,若仍无效则抓取IHU日志分析,如远程排查无果,需进站进行深入诊断。... -2025-10-27 13:35:52,555 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议连接手机热点测试网络连通性,若仍无效则抓取IHU日志分析,如远程排查无果,需进站进行深入诊断。 -2025-10-27 13:35:52,555 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议连接手机热点测试网络连通性,若仍无效则抓取IHU日志分析,如远程排查无果,需进站进行深入诊断。 -2025-10-27 13:35:52,555 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议连接手机热点测试网络连通性,若仍无效则抓取IHU日志分析,如远程排查无果,需进站进行深入诊断。... -2025-10-27 13:35:52,556 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1027, existing长度=292 -2025-10-27 13:35:52,556 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议,新建议长度: 382 -2025-10-27 13:35:52,556 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLSh2a2S7 - 现有AI建议长度: 61 -2025-10-27 13:35:52,556 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLSh2a2S7 - 现有AI建议前100字符: 1027:车辆自10月19日起TBOX进入深度睡眠,远程无法唤醒且数据未更新,建议邀请用户进站抓取TBOX和DMC日志分析 -2025-10-27 13:35:53,047 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:35:53,519 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761543353 -2025-10-27 13:35:53,988 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: +问题描述:车辆无法远程启动' 返回 3 个结果 +2025-12-07 23:47:54,063 - src.core.llm_client - INFO - API请求成功 +2025-12-07 23:47:54,869 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 车辆无法远程启动,可能因网络异常导致,请先检查手机及车机网络信号是否正常,确认车辆不在无信号区域;重启车机系统后重试远程启动;检查奇瑞汽车APP登录状态及车辆绑定是否正常;确保远程启动功能已在APP中... +2025-12-07 23:47:54,885 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 车辆无法远程启动,可能因网络异常导致,请先检查手机及车机网络信号是否正常,确认车辆不在无信号区域;重启车机系统后重试远程启动;检查奇瑞汽车APP登录状态及车辆绑定是否正常;确保远程启动功能已在APP中 +2025-12-07 23:47:54,885 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 车辆无法远程启动,可能因网络异常导致,请先检查手机及车机网络信号是否正常,确认车辆不在无信号区域;重启车机系统后重试远程启动;检查奇瑞汽车APP登录状态及车辆绑定是否正常;确保远程启动功能已在APP中 +2025-12-07 23:47:54,885 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 车辆无法远程启动,可能因网络异常导致,请先检查手机及车机网络信号是否正常,确认车辆不在无信号区域;重启车机系统后重试远程启动;检查奇瑞汽车APP登录状态及车辆绑定是否正常;确保远程启动功能已在APP中... +2025-12-07 23:47:54,885 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:47:54] "POST /api/workorders/generate-ai-suggestion HTTP/1.1" 200 - +2025-12-07 23:49:32,059 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-07 23:49:32,059 - src.knowledge_base.knowledge_manager - ERROR - 加载向量化器失败: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-07 23:49:32,059 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: qwen - qwen-plus-latest +2025-12-07 23:49:35,032 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:49:35,375 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1765122575 +2025-12-07 23:49:35,743 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: 格式要求: 1. 现状+步骤,语言精炼 2. 总长度控制在150字以内 要求: -1. 基于已有处理步骤,给出下一步的排查建议 -2. 如果远程操作都无法解决,可以考虑更深入的诊断方案 -3. 语言简洁精炼,用逗号连接,不要用序号或分行 +1. 首次给客户建议,只提供远程可操作的一般性排查步骤 +2. 如检查网络、重启系统、确认配置等常见操作 +3. 绝对不要提到"进站"、"抓取日志"等需要线下操作的内容 +4. 语言简洁精炼,用逗号连接,不要用序号或分行 -问题描述:Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19. - - -已处理的步骤: -1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志' 返回 3 个结果 -2025-10-27 13:35:56,982 - src.core.llm_client - INFO - API请求成功 -2025-10-27 13:35:57,955 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 车辆自10月19日进入深度睡眠,TBOX无日志上传,远程无法唤醒,建议客户尽快前往服务站提取TBOX及DMC日志进行深入诊断,以定位通信异常原因。... -2025-10-27 13:35:57,955 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 车辆自10月19日进入深度睡眠,TBOX无日志上传,远程无法唤醒,建议客户尽快前往服务站提取TBOX及DMC日志进行深入诊断,以定位通信异常原因。 -2025-10-27 13:35:57,956 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 车辆自10月19日进入深度睡眠,TBOX无日志上传,远程无法唤醒,建议客户尽快前往服务站提取TBOX及DMC日志进行深入诊断,以定位通信异常原因。 -2025-10-27 13:35:57,956 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 车辆自10月19日进入深度睡眠,TBOX无日志上传,远程无法唤醒,建议客户尽快前往服务站提取TBOX及DMC日志进行深入诊断,以定位通信异常原因。... -2025-10-27 13:35:57,957 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1027, existing长度=61 -2025-10-27 13:35:57,957 - src.integrations.ai_suggestion_service - INFO - 为记录 recv0NLSh2a2S7 生成AI建议,新建议长度: 142 -2025-10-27 13:35:57,958 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKLlRJ - 现有AI建议长度: 86 -2025-10-27 13:35:57,958 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKLlRJ - 现有AI建议前100字符: 1027:当前无法登录会员中心,建议先检查手机网络连接是否正常,尝试重启手机或更换网络环境后重新扫码登录,确认APP为最新版本,若仍无法进入,建议邀请用户进站抓取日志分析。 -2025-10-27 13:35:58,678 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:35:59,152 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761543359 -2025-10-27 13:35:59,861 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: - -格式要求: -1. 现状+步骤,语言精炼 -2. 总长度控制在150字以内 - -要求: -1. 基于已有处理步骤,给出下一步的排查建议 -2. 如果远程操作都无法解决,可以考虑更深入的诊断方案 -3. 语言简洁精炼,用逗号连接,不要用序号或分行 - -问题描述:User not able to enter into member center neither mobile phone nor QR code. - -已处理的步骤: -1024: DMC logs attached as well as vieos of the issue.' 返回 3 个结果 -2025-10-27 13:36:03,863 - src.core.llm_client - INFO - API请求成功 -2025-10-27 13:36:04,816 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 确认手机网络及APP版本正常,尝试重启手机和车辆,清除APP缓存后重新登录,检查车机系统时间是否准确,确保二维码扫描功能开启;若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查账户同步问题。... -2025-10-27 13:36:04,817 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 确认手机网络及APP版本正常,尝试重启手机和车辆,清除APP缓存后重新登录,检查车机系统时间是否准确,确保二维码扫描功能开启;若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查账户同步问题。 -2025-10-27 13:36:04,818 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 确认手机网络及APP版本正常,尝试重启手机和车辆,清除APP缓存后重新登录,检查车机系统时间是否准确,确保二维码扫描功能开启;若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查账户同步问题。 -2025-10-27 13:36:04,820 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 确认手机网络及APP版本正常,尝试重启手机和车辆,清除APP缓存后重新登录,检查车机系统时间是否准确,确保二维码扫描功能开启;若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查账户同步问题。... -2025-10-27 13:36:04,820 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1027, existing长度=86 -2025-10-27 13:36:04,821 - src.integrations.ai_suggestion_service - INFO - 为记录 recv0NLZoKLlRJ 生成AI建议,新建议长度: 192 -2025-10-27 13:36:04,825 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKjKvx - 现有AI建议长度: 97 -2025-10-27 13:36:04,826 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKjKvx - 现有AI建议前100字符: 1027:当前流量异常消耗达3.12GB/3天,用户仅使用导航,建议先重启车机并关闭非必要后台应用,检查网络设置中数据使用情况,更新车机系统至最新版本,若问题依旧,建议邀请用户进站抓取日志分析。 -2025-10-27 13:36:06,000 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:36:06,477 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761543366 -2025-10-27 13:36:08,118 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: - -格式要求: -1. 现状+步骤,语言精炼 -2. 总长度控制在150字以内 - -要求: -1. 基于已有处理步骤,给出下一步的排查建议 -2. 如果远程操作都无法解决,可以考虑更深入的诊断方案 -3. 语言简洁精炼,用逗号连接,不要用序号或分行 - -问题描述:Abnormal traffic consumption - -已处理的步骤: -1024:建议用户抓去DMC日志回传分析 -1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf' 返回 3 个结果 -2025-10-27 13:36:11,565 - src.core.llm_client - INFO - API请求成功 -2025-10-27 13:36:12,550 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 流量异常可能与导航应用后台持续联网有关,建议关闭非必要应用自动更新,限制后台数据使用,检查是否有系统或应用异常进程;若问题依旧,请回传完整日志供技术分析,必要时进站检测通信模块及SIM卡状态。... -2025-10-27 13:36:12,551 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 流量异常可能与导航应用后台持续联网有关,建议关闭非必要应用自动更新,限制后台数据使用,检查是否有系统或应用异常进程;若问题依旧,请回传完整日志供技术分析,必要时进站检测通信模块及SIM卡状态。 -2025-10-27 13:36:12,551 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 流量异常可能与导航应用后台持续联网有关,建议关闭非必要应用自动更新,限制后台数据使用,检查是否有系统或应用异常进程;若问题依旧,请回传完整日志供技术分析,必要时进站检测通信模块及SIM卡状态。 -2025-10-27 13:36:12,551 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 流量异常可能与导航应用后台持续联网有关,建议关闭非必要应用自动更新,限制后台数据使用,检查是否有系统或应用异常进程;若问题依旧,请回传完整日志供技术分析,必要时进站检测通信模块及SIM卡状态。... -2025-10-27 13:36:12,552 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1027, existing长度=97 -2025-10-27 13:36:12,552 - src.integrations.ai_suggestion_service - INFO - 为记录 recv0NLZoKjKvx 生成AI建议,新建议长度: 201 -2025-10-27 13:36:12,552 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 13:36:12,552 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ardzY5FUAT4PXX... -2025-10-27 13:36:14,852 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 13:36:14,852 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027-2:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议连接手机热点测试网络连通性,若仍无效则抓取IHU日志分析,如远程排查无果,需进站进行深入诊断。\n1027-1:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络,若仍不恢复则重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析\n1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络响应,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取日志分析\n1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 13:36:14,854 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-27 13:36:14,855 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/recv0NLSh2a2S7 -2025-10-27 13:36:14,855 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ardzY5FUAT4PXX... -2025-10-27 13:36:17,199 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 13:36:17,200 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027-1:车辆自10月19日进入深度睡眠,TBOX无日志上传,远程无法唤醒,建议客户尽快前往服务站提取TBOX及DMC日志进行深入诊断,以定位通信异常原因。\n1027:车辆自10月19日起TBOX进入深度睡眠,远程无法唤醒且数据未更新,建议邀请用户进站抓取TBOX和DMC日志分析'}, 'id': 'recv0NLSh2a2S7', 'record_id': 'recv0NLSh2a2S7'}}, 'msg': 'success'} -2025-10-27 13:36:17,201 - src.integrations.workorder_sync - INFO - 更新飞书记录 recv0NLSh2a2S7 的AI建议 -2025-10-27 13:36:17,202 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/recv0NLZoKLlRJ -2025-10-27 13:36:17,202 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ardzY5FUAT4PXX... -2025-10-27 13:36:19,415 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 13:36:19,415 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027-1:确认手机网络及APP版本正常,尝试重启手机和车辆,清除APP缓存后重新登录,检查车机系统时间是否准确,确保二维码扫描功能开启;若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查账户同步问题。\n1027:当前无法登录会员中心,建议先检查手机网络连接是否正常,尝试重启手机或更换网络环境后重新扫码登录,确认APP为最新版本,若仍无法进入,建议邀请用户进站抓取日志分析。'}, 'id': 'recv0NLZoKLlRJ', 'record_id': 'recv0NLZoKLlRJ'}}, 'msg': 'success'} -2025-10-27 13:36:19,416 - src.integrations.workorder_sync - INFO - 更新飞书记录 recv0NLZoKLlRJ 的AI建议 -2025-10-27 13:36:19,417 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/recv0NLZoKjKvx -2025-10-27 13:36:19,417 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ardzY5FUAT4PXX... -2025-10-27 13:36:21,462 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 13:36:21,462 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027-1:流量异常可能与导航应用后台持续联网有关,建议关闭非必要应用自动更新,限制后台数据使用,检查是否有系统或应用异常进程;若问题依旧,请回传完整日志供技术分析,必要时进站检测通信模块及SIM卡状态。\n1027:当前流量异常消耗达3.12GB/3天,用户仅使用导航,建议先重启车机并关闭非必要后台应用,检查网络设置中数据使用情况,更新车机系统至最新版本,若问题依旧,建议邀请用户进站抓取日志分析。'}, 'id': 'recv0NLZoKjKvx', 'record_id': 'recv0NLZoKjKvx'}}, 'msg': 'success'} -2025-10-27 13:36:21,464 - src.integrations.workorder_sync - INFO - 更新飞书记录 recv0NLZoKjKvx 的AI建议 -2025-10-27 13:36:21,941 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1027-1:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络,若仍不恢复则重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析\n1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络响应,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取日志分析\n1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析\n1025:', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 13:36:21,942 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 13:36:21,942 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1027-1:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络,若仍不恢复则重启车机系统,如问题持续建议邀请用户进站抓取IHU日志分析 -1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议先连接手机热点测试网络响应,若仍不恢复,尝试重启车机系统,如问题持续建议邀请用户进站抓取日志分析 -1026:检查车机网络连接状态,确认车辆是否处于无信号区域,建议使用手机热点连接车机观察天气小部件是否恢复,如仍无效,尝试重启车机系统或恢复网络设置,必要时升级车机系统版本,若问题持续,建议邀请用户进站抓取日志分析 -1025: -2025-10-27 13:36:21,943 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 13:36:21,944 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 13:36:21,944 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 13:36:21,944 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 13:36:21,944 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 13:36:21,945 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 13:36:21,945 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 13:36:21,945 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 13:36:21,945 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 13:36:21,946 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 13:36:21,946 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 13:36:21,946 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 13:36:21,946 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 13:36:21,946 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 13:36:21,947 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 13:36:21,947 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 13:36:22,183 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1027:车辆自10月19日起TBOX进入深度睡眠,远程无法唤醒且数据未更新,建议邀请用户进站抓取TBOX和DMC日志分析', 'App remote control version': [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}], 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'SIM': "'Астанин Артем Иванович (CSAT: 4.5 ⭐)' ", 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'Vehicle Type01': 'LNNBDDEZ8SD345645 ', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'} -2025-10-27 13:36:22,184 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'App remote control version', 'Date creation', 'Module(模块)', 'SIM', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 13:36:22,185 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1027:车辆自10月19日起TBOX进入深度睡眠,远程无法唤醒且数据未更新,建议邀请用户进站抓取TBOX和DMC日志分析 -2025-10-27 13:36:22,185 - src.integrations.flexible_field_mapper - INFO - 映射字段 App remote control version -> app_remote_control_version: [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}] -2025-10-27 13:36:22,186 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761148800000 -2025-10-27 13:36:22,186 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: TBOX -2025-10-27 13:36:22,186 - src.integrations.flexible_field_mapper - INFO - 映射字段 SIM -> vin_sim: 'Астанин Артем Иванович (CSAT: 4.5 ⭐)' -2025-10-27 13:36:22,187 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 13:36:22,187 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19. - -2025-10-27 13:36:22,187 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 13:36:22,188 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR863 -2025-10-27 13:36:22,188 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 13:36:22,188 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi -2025-10-27 13:36:22,189 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Remote control -2025-10-27 13:36:22,189 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: LNNBDDEZ8SD345645 -2025-10-27 13:36:22,190 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: 刘娇龙 -2025-10-27 13:36:22,190 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志 -2025-10-27 13:36:22,191 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 13:36:22,191 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 13:36:22,431 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1027:当前无法登录会员中心,建议先检查手机网络连接是否正常,尝试重启手机或更换网络环境后重新扫码登录,确认APP为最新版本,若仍无法进入,建议邀请用户进站抓取日志分析。', 'App remote control version': [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}], 'Created by': 'LNNBDDEZXSD449358.zip', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'SIM': "'Астанин Артем Иванович (CSAT: 4.5 ⭐)' ", 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'Vehicle Type01': 'LNNBDDEZXSD449358', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.'} -2025-10-27 13:36:22,432 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'App remote control version', 'Created by', 'Date creation', 'Module(模块)', 'SIM', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 13:36:22,433 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1027:当前无法登录会员中心,建议先检查手机网络连接是否正常,尝试重启手机或更换网络环境后重新扫码登录,确认APP为最新版本,若仍无法进入,建议邀请用户进站抓取日志分析。 -2025-10-27 13:36:22,433 - src.integrations.flexible_field_mapper - INFO - 映射字段 App remote control version -> app_remote_control_version: [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}] -2025-10-27 13:36:22,434 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: LNNBDDEZXSD449358.zip -2025-10-27 13:36:22,434 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761148800000 -2025-10-27 13:36:22,435 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: 生态/ecologically -2025-10-27 13:36:22,435 - src.integrations.flexible_field_mapper - INFO - 映射字段 SIM -> vin_sim: 'Астанин Артем Иванович (CSAT: 4.5 ⭐)' -2025-10-27 13:36:22,435 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 13:36:22,436 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: User not able to enter into member center neither mobile phone nor QR code. -2025-10-27 13:36:22,437 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 13:36:22,438 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR864 -2025-10-27 13:36:22,438 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 13:36:22,439 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 23/10: DMC logs attached as well as vieos of the issue. -2025-10-27 13:36:22,439 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Problem with auth in member center -2025-10-27 13:36:22,440 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: LNNBDDEZXSD449358 -2025-10-27 13:36:22,440 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: 袁清 -2025-10-27 13:36:22,440 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 1024: DMC logs attached as well as vieos of the issue. -2025-10-27 13:36:22,441 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 16, 未映射 0 -2025-10-27 13:36:22,441 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 16, 已映射 16, 未映射 0 -2025-10-27 13:36:22,680 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1027:当前流量异常消耗达3.12GB/3天,用户仅使用导航,建议先重启车机并关闭非必要后台应用,检查网络设置中数据使用情况,更新车机系统至最新版本,若问题依旧,建议邀请用户进站抓取日志分析。', 'App remote control version': [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}], 'Created by': 'Traffic_consumption_issue.pdf', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'SIM': 'Ксения Митрофанова ', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'Vehicle Type01': 'XEYDD14B3SA012164', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'} -2025-10-27 13:36:22,681 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'App remote control version', 'Created by', 'Date creation', 'Module(模块)', 'SIM', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 13:36:22,682 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1027:当前流量异常消耗达3.12GB/3天,用户仅使用导航,建议先重启车机并关闭非必要后台应用,检查网络设置中数据使用情况,更新车机系统至最新版本,若问题依旧,建议邀请用户进站抓取日志分析。 -2025-10-27 13:36:22,682 - src.integrations.flexible_field_mapper - INFO - 映射字段 App remote control version -> app_remote_control_version: [{'avatar_url': 'https://s16-imfile-sg.feishucdn.com/static-resource/v1/v3_00ol_fb9a943e-728d-4c86-9136-1eb9be3ff5hu~?image_size=72x72&cut_type=default-face&quality=&format=jpeg&sticker_format=.webp', 'en_name': 'Vsevolod Tsoi', 'id': 'ou_f59d164483b0d52c47c5ec5ecf6d842c', 'name': 'Vsevolod Tsoi'}] -2025-10-27 13:36:22,682 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Traffic_consumption_issue.pdf -2025-10-27 13:36:22,683 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761235200000 -2025-10-27 13:36:22,683 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: DMC -2025-10-27 13:36:22,683 - src.integrations.flexible_field_mapper - INFO - 映射字段 SIM -> vin_sim: Ксения Митрофанова -2025-10-27 13:36:22,684 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 13:36:22,684 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Abnormal traffic consumption -2025-10-27 13:36:22,684 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 13:36:22,684 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR866 -2025-10-27 13:36:22,685 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Analysising -2025-10-27 13:36:22,685 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi -24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached -2025-10-27 13:36:22,686 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Traffic is over -2025-10-27 13:36:22,686 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: XEYDD14B3SA012164 -2025-10-27 13:36:22,686 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Vsevolod Tsoi -2025-10-27 13:36:22,687 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 1024:建议用户抓去DMC日志回传分析 -1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf -2025-10-27 13:36:22,687 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 16, 未映射 0 -2025-10-27 13:36:22,688 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 16, 已映射 16, 未映射 0 -2025-10-27 13:36:23,404 - src.core.database - ERROR - 数据库操作失败: dict can not be used as parameter -2025-10-27 13:36:23,405 - src.integrations.workorder_sync - ERROR - 飞书同步失败: dict can not be used as parameter -2025-10-27 13:36:23,405 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 13:36:23] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 500 - -2025-10-27 13:39:38,030 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:39:38,270 - src.integrations.workorder_sync - INFO - 开始从飞书同步工单数据... -2025-10-27 13:39:38,270 - src.integrations.feishu_client - INFO - 发送飞书API请求: GET https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records -2025-10-27 13:39:38,271 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ardzY5FUAT4PXX... -2025-10-27 13:39:38,404 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:39:39,488 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 13:39:39] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-27 13:39:39,551 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 13:39:39] "GET /api/analytics HTTP/1.1" 200 - -2025-10-27 13:39:40,715 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 13:39:40,715 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'has_more': False, 'items': [{'fields': {'AI建议': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}, {'fields': {'AI建议': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'VIN|sim': 'LNNBDDEZ8SD345645 ', 'Vehicle Type01': 'JAECOO J7(T1EJ)', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'}, 'id': 'recv0NLSh2a2S7', 'record_id': 'recv0NLSh2a2S7'}, {'fields': {'AI建议': '1024: DMC logs attached as well as vieos of the issue.', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'VIN|sim': 'LNNBDDEZXSD449358', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.'}, 'id': 'recv0NLZoKLlRJ', 'record_id': 'recv0NLZoKLlRJ'}, {'fields': {'AI建议': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'VIN|sim': 'XEYDD14B3SA012164', 'Vehicle Type01': 'TEST', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'}, 'id': 'recv0NLZoKjKvx', 'record_id': 'recv0NLZoKjKvx'}], 'total': 4}, 'msg': 'success'} -2025-10-27 13:39:40,719 - src.integrations.workorder_sync - INFO - 从飞书获取 4 条记录 -2025-10-27 13:39:40,719 - src.integrations.workorder_sync - INFO - 开始生成AI建议... -2025-10-27 13:39:40,719 - src.integrations.workorder_sync - INFO - 第一条记录结构示例: record_id=rec253kqBfXae4, 有fields字段=True -2025-10-27 13:39:40,719 - src.integrations.workorder_sync - INFO - 第一条记录的fields示例: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source'] -2025-10-27 13:39:40,720 - src.integrations.workorder_sync - INFO - 第一条记录的AI建议字段内容: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手 -2025-10-27 13:39:40,720 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议长度: 82 -2025-10-27 13:39:40,720 - src.integrations.ai_suggestion_service - INFO - 记录 rec253kqBfXae4 - 现有AI建议前100字符: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 13:39:40,908 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:39:41,093 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761543581 -2025-10-27 13:39:41,281 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: - -格式要求: -1. 现状+步骤,语言精炼 -2. 总长度控制在150字以内 - -要求: -1. 基于已有处理步骤,给出下一步的排查建议 -2. 如果远程操作都无法解决,可以考虑更深入的诊断方案 -3. 语言简洁精炼,用逗号连接,不要用序号或分行 - -问题描述:The widget weather doesn't work - -已处理的步骤: -0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志' 返回 3 个结果 -2025-10-27 13:39:43,697 - src.core.llm_client - INFO - API请求成功 -2025-10-27 13:39:44,081 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。... -2025-10-27 13:39:44,082 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。 -2025-10-27 13:39:44,082 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。 -2025-10-27 13:39:44,083 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。... -2025-10-27 13:39:44,083 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1027, existing长度=82 -2025-10-27 13:39:44,083 - src.integrations.ai_suggestion_service - INFO - 为记录 rec253kqBfXae4 生成AI建议,新建议长度: 172 -2025-10-27 13:39:44,084 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLSh2a2S7 - 现有AI建议长度: 60 -2025-10-27 13:39:44,084 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLSh2a2S7 - 现有AI建议前100字符: 1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志 -2025-10-27 13:39:44,227 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 13:39:44] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-27 13:39:44,272 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:39:44,504 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761543584 -2025-10-27 13:39:44,989 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: - -格式要求: -1. 现状+步骤,语言精炼 -2. 总长度控制在150字以内 - -要求: -1. 基于已有处理步骤,给出下一步的排查建议 -2. 如果远程操作都无法解决,可以考虑更深入的诊断方案 -3. 语言简洁精炼,用逗号连接,不要用序号或分行 - -问题描述:Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19. - - -已处理的步骤: -1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志' 返回 3 个结果 -2025-10-27 13:39:48,039 - src.core.llm_client - INFO - API请求成功 -2025-10-27 13:39:48,742 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 车辆自10月19日进入深度睡眠,TBOX无远程连接,建议客户尽快进站提取TBOX及DMC日志,进行本地诊断分析,排查电源管理或通信模块异常原因,确认硬件状态及软件配置是否正常。... -2025-10-27 13:39:48,743 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 车辆自10月19日进入深度睡眠,TBOX无远程连接,建议客户尽快进站提取TBOX及DMC日志,进行本地诊断分析,排查电源管理或通信模块异常原因,确认硬件状态及软件配置是否正常。 -2025-10-27 13:39:48,743 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 车辆自10月19日进入深度睡眠,TBOX无远程连接,建议客户尽快进站提取TBOX及DMC日志,进行本地诊断分析,排查电源管理或通信模块异常原因,确认硬件状态及软件配置是否正常。 -2025-10-27 13:39:48,743 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 车辆自10月19日进入深度睡眠,TBOX无远程连接,建议客户尽快进站提取TBOX及DMC日志,进行本地诊断分析,排查电源管理或通信模块异常原因,确认硬件状态及软件配置是否正常。... -2025-10-27 13:39:48,743 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1027, existing长度=60 -2025-10-27 13:39:48,744 - src.integrations.ai_suggestion_service - INFO - 为记录 recv0NLSh2a2S7 生成AI建议,新建议长度: 154 -2025-10-27 13:39:48,744 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKLlRJ - 现有AI建议长度: 54 -2025-10-27 13:39:48,744 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKLlRJ - 现有AI建议前100字符: 1024: DMC logs attached as well as vieos of the issue. -2025-10-27 13:39:49,271 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:39:49,801 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761543589 -2025-10-27 13:39:50,196 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: - -格式要求: -1. 现状+步骤,语言精炼 -2. 总长度控制在150字以内 - -要求: -1. 基于已有处理步骤,给出下一步的排查建议 -2. 如果远程操作都无法解决,可以考虑更深入的诊断方案 -3. 语言简洁精炼,用逗号连接,不要用序号或分行 - -问题描述:User not able to enter into member center neither mobile phone nor QR code. - -已处理的步骤: -1024: DMC logs attached as well as vieos of the issue.' 返回 3 个结果 -2025-10-27 13:39:54,163 - src.core.llm_client - INFO - API请求成功 -2025-10-27 13:39:54,559 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 确认手机网络及APP版本正常,尝试清除APP缓存并重新登录,检查QR码扫描权限是否开启,重启手机和车机,若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查系统故障。... -2025-10-27 13:39:54,559 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 确认手机网络及APP版本正常,尝试清除APP缓存并重新登录,检查QR码扫描权限是否开启,重启手机和车机,若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查系统故障。 -2025-10-27 13:39:54,560 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 确认手机网络及APP版本正常,尝试清除APP缓存并重新登录,检查QR码扫描权限是否开启,重启手机和车机,若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查系统故障。 -2025-10-27 13:39:54,560 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 确认手机网络及APP版本正常,尝试清除APP缓存并重新登录,检查QR码扫描权限是否开启,重启手机和车机,若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查系统故障。... -2025-10-27 13:39:54,561 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1027, existing长度=54 -2025-10-27 13:39:54,561 - src.integrations.ai_suggestion_service - INFO - 为记录 recv0NLZoKLlRJ 生成AI建议,新建议长度: 145 -2025-10-27 13:39:54,561 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKjKvx - 现有AI建议长度: 98 -2025-10-27 13:39:54,562 - src.integrations.ai_suggestion_service - INFO - 记录 recv0NLZoKjKvx - 现有AI建议前100字符: 1024:建议用户抓去DMC日志回传分析 -1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf -2025-10-27 13:39:55,036 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-27 13:39:55,507 - src.dialogue.realtime_chat - INFO - 创建新会话: session_ai_suggestion_service_1761543595 -2025-10-27 13:39:55,770 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 '请为以下问题提供精炼的技术支持操作建议: - -格式要求: -1. 现状+步骤,语言精炼 -2. 总长度控制在150字以内 - -要求: -1. 基于已有处理步骤,给出下一步的排查建议 -2. 如果远程操作都无法解决,可以考虑更深入的诊断方案 -3. 语言简洁精炼,用逗号连接,不要用序号或分行 - -问题描述:Abnormal traffic consumption - -已处理的步骤: -1024:建议用户抓去DMC日志回传分析 -1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf' 返回 3 个结果 -2025-10-27 13:39:59,147 - src.core.llm_client - INFO - API请求成功 -2025-10-27 13:39:59,530 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 流量异常可能与导航应用后台持续联网有关,建议关闭Navi自动更新地图功能并限制后台数据使用,检查车机系统是否存在异常进程,如问题依旧,建议进站检测DMC模块日志及SIM卡通信状态,必要时升级系统或更换... -2025-10-27 13:39:59,531 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 流量异常可能与导航应用后台持续联网有关,建议关闭Navi自动更新地图功能并限制后台数据使用,检查车机系统是否存在异常进程,如问题依旧,建议进站检测DMC模块日志及SIM卡通信状态,必要时升级系统或更换 -2025-10-27 13:39:59,531 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 流量异常可能与导航应用后台持续联网有关,建议关闭Navi自动更新地图功能并限制后台数据使用,检查车机系统是否存在异常进程,如问题依旧,建议进站检测DMC模块日志及SIM卡通信状态,必要时升级系统或更换 -2025-10-27 13:39:59,531 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 流量异常可能与导航应用后台持续联网有关,建议关闭Navi自动更新地图功能并限制后台数据使用,检查车机系统是否存在异常进程,如问题依旧,建议进站检测DMC模块日志及SIM卡通信状态,必要时升级系统或更换... -2025-10-27 13:39:59,532 - src.integrations.ai_suggestion_service - INFO - _format_ai_suggestion_with_numbering 调用 - time_str=1027, existing长度=98 -2025-10-27 13:39:59,532 - src.integrations.ai_suggestion_service - INFO - 为记录 recv0NLZoKjKvx 生成AI建议,新建议长度: 207 -2025-10-27 13:39:59,532 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/rec253kqBfXae4 -2025-10-27 13:39:59,532 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ardzY5FUAT4PXX... -2025-10-27 13:40:01,778 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 13:40:01,779 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:天气小部件无法使用,已确认TBOX及IHU登录正常、流量绑定正常,建议已完成手机热点连接测试并尝试抓取IHU日志,若问题仍存在,建议进站进行系统诊断或软件版本升级排查。\n0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'}, 'id': 'rec253kqBfXae4', 'record_id': 'rec253kqBfXae4'}}, 'msg': 'success'} -2025-10-27 13:40:01,780 - src.integrations.workorder_sync - INFO - 更新飞书记录 rec253kqBfXae4 的AI建议 -2025-10-27 13:40:01,780 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/recv0NLSh2a2S7 -2025-10-27 13:40:01,781 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ardzY5FUAT4PXX... -2025-10-27 13:40:03,936 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 13:40:03,937 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:车辆自10月19日进入深度睡眠,TBOX无远程连接,建议客户尽快进站提取TBOX及DMC日志,进行本地诊断分析,排查电源管理或通信模块异常原因,确认硬件状态及软件配置是否正常。\n1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'}, 'id': 'recv0NLSh2a2S7', 'record_id': 'recv0NLSh2a2S7'}}, 'msg': 'success'} -2025-10-27 13:40:03,938 - src.integrations.workorder_sync - INFO - 更新飞书记录 recv0NLSh2a2S7 的AI建议 -2025-10-27 13:40:03,939 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/recv0NLZoKLlRJ -2025-10-27 13:40:03,939 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ardzY5FUAT4PXX... -2025-10-27 13:40:06,015 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 13:40:06,016 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:确认手机网络及APP版本正常,尝试清除APP缓存并重新登录,检查QR码扫描权限是否开启,重启手机和车机,若仍无法进入会员中心,建议联系售后进行远程诊断或进站排查系统故障。\n1024: DMC logs attached as well as vieos of the issue.'}, 'id': 'recv0NLZoKLlRJ', 'record_id': 'recv0NLZoKLlRJ'}}, 'msg': 'success'} -2025-10-27 13:40:06,017 - src.integrations.workorder_sync - INFO - 更新飞书记录 recv0NLZoKLlRJ 的AI建议 -2025-10-27 13:40:06,018 - src.integrations.feishu_client - INFO - 发送飞书API请求: PUT https://open.feishu.cn/open-apis/bitable/v1/apps/XXnEbiCmEaMblSs6FDJcFCqsnIg/tables/tblnl3vJPpgMTSiP/records/recv0NLZoKjKvx -2025-10-27 13:40:06,018 - src.integrations.feishu_client - INFO - 请求头: Authorization: Bearer t-g104ardzY5FUAT4PXX... -2025-10-27 13:40:08,121 - src.integrations.feishu_client - INFO - 飞书API响应状态码: 200 -2025-10-27 13:40:08,121 - src.integrations.feishu_client - INFO - 飞书API响应内容: {'code': 0, 'data': {'record': {'fields': {'AI建议': '1027:流量异常可能与导航应用后台持续联网有关,建议关闭Navi自动更新地图功能并限制后台数据使用,检查车机系统是否存在异常进程,如问题依旧,建议进站检测DMC模块日志及SIM卡通信状态,必要时升级系统或更换模块。\n1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'}, 'id': 'recv0NLZoKjKvx', 'record_id': 'recv0NLZoKjKvx'}}, 'msg': 'success'} -2025-10-27 13:40:08,123 - src.integrations.workorder_sync - INFO - 更新飞书记录 recv0NLZoKjKvx 的AI建议 -2025-10-27 13:40:08,595 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志', 'Created by': 'Evgeniy', 'Date creation': 1745769600000, 'Module(模块)': 'local O&M', 'Source': 'Mail', 'TR Description': "The widget weather doesn't work ", 'TR Level': 'Low', 'TR Number': 'TR559', 'TR Status': 'Processing', 'TR tracking': '28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs.', 'Type of problem': 'HU troubles', 'VIN|sim': 'LVTDD24B8RG019153 ', 'Vehicle Type01': 'EXEED RX(T22)', 'Wilfulness(责任人)': 'Evgeniy', '处理过程': '0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志'} -2025-10-27 13:40:08,596 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 13:40:08,596 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 13:40:08,597 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Evgeniy -2025-10-27 13:40:08,597 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1745769600000 -2025-10-27 13:40:08,597 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: local O&M -2025-10-27 13:40:08,597 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 13:40:08,598 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: The widget weather doesn't work -2025-10-27 13:40:08,598 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 13:40:08,598 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR559 -2025-10-27 13:40:08,598 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 13:40:08,599 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 28/04:Local feedback weather widget does not work, query TBOX and IHU login record is normal, traffic binding is normal, we suggest users to use mobile phone hotspot to connect to the car, observe whether the widget is restored, if not, try to capture the IHU logs. -2025-10-27 13:40:08,599 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: HU troubles -2025-10-27 13:40:08,599 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LVTDD24B8RG019153 -2025-10-27 13:40:08,599 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED RX(T22) -2025-10-27 13:40:08,600 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Evgeniy -2025-10-27 13:40:08,600 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 0428:属地反馈天气小部件不起作用,查询TBOX及IHU登录记录正常,流量绑定正常,建议用户使用手机热点连接车机,观察小部件是否恢复,如不恢复,尝试抓取IHU日志 -2025-10-27 13:40:08,600 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 13:40:08,600 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 13:40:09,529 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': 'TBOX', 'Source': 'Mail', 'TR Description': 'Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19.\n', 'TR Level': 'Low', 'TR Number': 'TR863', 'TR Status': 'Processing', 'TR tracking': '24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi', 'Type of problem': 'Remote control ', 'VIN|sim': 'LNNBDDEZ8SD345645 ', 'Vehicle Type01': 'JAECOO J7(T1EJ)', 'Wilfulness(责任人)': '刘娇龙', '处理过程': '1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志'} -2025-10-27 13:40:09,530 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 13:40:09,530 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志 -2025-10-27 13:40:09,531 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi -2025-10-27 13:40:09,531 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761148800000 -2025-10-27 13:40:09,531 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: TBOX -2025-10-27 13:40:09,531 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 13:40:09,531 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Vehicle data is not updated in the app => dated from October, 19 - thus, they are old one. No TBOX log in since October, 19. TBOX is in deep sleep since October, 19. - -2025-10-27 13:40:09,532 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 13:40:09,532 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR863 -2025-10-27 13:40:09,532 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 13:40:09,533 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 24/10:The vehicle is in deep sleep, and T-box logs cannot be remotely obtained. The problem is a bit complex and difficult to locate, so the customer needs to visit the station to retrieve T-box logs and DMC logs. @Vsevolod Tsoi -2025-10-27 13:40:09,533 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Remote control -2025-10-27 13:40:09,533 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LNNBDDEZ8SD345645 -2025-10-27 13:40:09,534 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: JAECOO J7(T1EJ) -2025-10-27 13:40:09,534 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: 刘娇龙 -2025-10-27 13:40:09,534 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 1024:车辆处于深度睡眠中,远程无法获取T-box日志,问题有点复杂不好定位,需要客户进站取T-box日志和DMC日志 -2025-10-27 13:40:09,534 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 13:40:09,535 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 13:40:10,488 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1024: DMC logs attached as well as vieos of the issue.', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761148800000, 'Module(模块)': '生态/ecologically', 'Source': 'Mail', 'TR Description': 'User not able to enter into member center neither mobile phone nor QR code.', 'TR Level': 'Low', 'TR Number': 'TR864', 'TR Status': 'Processing', 'TR tracking': '23/10: DMC logs attached as well as vieos of the issue.', 'Type of problem': 'Problem with auth in member center', 'VIN|sim': 'LNNBDDEZXSD449358', 'Vehicle Type01': 'EXEED VX FL(M36T)', 'Wilfulness(责任人)': '袁清', '处理过程': '1024: DMC logs attached as well as vieos of the issue.'} -2025-10-27 13:40:10,489 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 13:40:10,489 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1024: DMC logs attached as well as vieos of the issue. -2025-10-27 13:40:10,490 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi -2025-10-27 13:40:10,490 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761148800000 -2025-10-27 13:40:10,490 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: 生态/ecologically -2025-10-27 13:40:10,491 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 13:40:10,491 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: User not able to enter into member center neither mobile phone nor QR code. -2025-10-27 13:40:10,491 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 13:40:10,492 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR864 -2025-10-27 13:40:10,492 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Processing -2025-10-27 13:40:10,492 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 23/10: DMC logs attached as well as vieos of the issue. -2025-10-27 13:40:10,492 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Problem with auth in member center -2025-10-27 13:40:10,493 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: LNNBDDEZXSD449358 -2025-10-27 13:40:10,493 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: EXEED VX FL(M36T) -2025-10-27 13:40:10,493 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: 袁清 -2025-10-27 13:40:10,493 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 1024: DMC logs attached as well as vieos of the issue. -2025-10-27 13:40:10,493 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 13:40:10,494 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 13:40:10,731 - src.integrations.workorder_sync - INFO - 开始转换飞书字段: {'AI建议': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf', 'Created by': 'Vsevolod Tsoi', 'Date creation': 1761235200000, 'Module(模块)': 'DMC', 'Source': 'Mail', 'TR Description': 'Abnormal traffic consumption', 'TR Level': 'Low', 'TR Number': 'TR866', 'TR Status': 'Analysising', 'TR tracking': '24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi \n24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached', 'Type of problem': 'Traffic is over', 'VIN|sim': 'XEYDD14B3SA012164', 'Vehicle Type01': 'TEST', 'Wilfulness(责任人)': 'Vsevolod Tsoi', '处理过程': '1024:建议用户抓去DMC日志回传分析\n1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf'} -2025-10-27 13:40:10,732 - src.integrations.flexible_field_mapper - INFO - 开始转换字段: ['AI建议', 'Created by', 'Date creation', 'Module(模块)', 'Source', 'TR Description', 'TR Level', 'TR Number', 'TR Status', 'TR tracking', 'Type of problem', 'VIN|sim', 'Vehicle Type01', 'Wilfulness(责任人)', '处理过程'] -2025-10-27 13:40:10,732 - src.integrations.flexible_field_mapper - INFO - 映射字段 AI建议 -> ai_suggestion: 1024:建议用户抓去DMC日志回传分析 -1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf -2025-10-27 13:40:10,733 - src.integrations.flexible_field_mapper - INFO - 映射字段 Created by -> created_by: Vsevolod Tsoi -2025-10-27 13:40:10,733 - src.integrations.flexible_field_mapper - INFO - 映射字段 Date creation -> created_at: 1761235200000 -2025-10-27 13:40:10,733 - src.integrations.flexible_field_mapper - INFO - 映射字段 Module(模块) -> module: DMC -2025-10-27 13:40:10,733 - src.integrations.flexible_field_mapper - INFO - 映射字段 Source -> source: Mail -2025-10-27 13:40:10,733 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Description -> description: Abnormal traffic consumption -2025-10-27 13:40:10,733 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Level -> priority: Low -2025-10-27 13:40:10,733 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Number -> order_id: TR866 -2025-10-27 13:40:10,734 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR Status -> status: Analysising -2025-10-27 13:40:10,734 - src.integrations.flexible_field_mapper - INFO - 映射字段 TR tracking -> resolution: 24/10: It is recommended that users grab the DMC log back for analysis.@Vsevolod Tsoi -24/10: user states he use Navi only and no other apps. Consumption volume - 3.12 Gb for 3 days. Same symptom as E0X - traffic package size is plus mines the same - see pdf from MNO attached -2025-10-27 13:40:10,734 - src.integrations.flexible_field_mapper - INFO - 映射字段 Type of problem -> category: Traffic is over -2025-10-27 13:40:10,734 - src.integrations.flexible_field_mapper - INFO - 映射字段 VIN|sim -> vin_sim: XEYDD14B3SA012164 -2025-10-27 13:40:10,734 - src.integrations.flexible_field_mapper - INFO - 映射字段 Vehicle Type01 -> vehicle_type: TEST -2025-10-27 13:40:10,735 - src.integrations.flexible_field_mapper - INFO - 映射字段 Wilfulness(责任人) -> wilfulness: Vsevolod Tsoi -2025-10-27 13:40:10,735 - src.integrations.flexible_field_mapper - INFO - 映射字段 处理过程 -> solution: 1024:建议用户抓去DMC日志回传分析 -1024:用户表示他只使用Navi,不使用其他应用程序。 消耗量-3.12 Gb,3天。 与E0X相同的症状-流量包大小加上地雷相同-见所附MNO的pdf -2025-10-27 13:40:10,735 - src.integrations.flexible_field_mapper - INFO - 字段转换完成: 已映射 15, 未映射 0 -2025-10-27 13:40:10,735 - src.integrations.workorder_sync - INFO - 字段转换统计: 总字段 15, 已映射 15, 未映射 0 -2025-10-27 13:40:12,208 - src.integrations.workorder_sync - INFO - 飞书同步完成: {'success': True, 'total_records': 4, 'synced_count': 4, 'created_count': 3, 'updated_count': 1, 'ai_suggestions_generated': True, 'errors': []} -2025-10-27 13:40:12,210 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 13:40:12] "POST /api/feishu-sync/sync-from-feishu HTTP/1.1" 200 - -2025-10-27 13:40:12,654 - werkzeug - INFO - 127.0.0.1 - - [27/Oct/2025 13:40:12] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-31 10:20:11,288 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 10:20:11,288 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 10:20:15,278 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 10:20:18,140 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-31 10:20:18,147 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-31 10:20:18,225 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. +问题描述:车辆无法远程启动' 返回 3 个结果 +2025-12-07 23:49:38,096 - src.core.llm_client - INFO - API请求成功 +2025-12-07 23:49:39,226 - src.integrations.ai_suggestion_service - INFO - AI生成原始内容: 车辆远程启动失败,可能因网络异常导致:检查手机与车机网络信号是否正常,确认车辆未处于无信号区域;重启车机系统后重试远程启动;确保奇瑞汽车APP已登录且账号绑定车辆无误;检查APP内远程控制功能是否已开... +2025-12-07 23:49:39,226 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 车辆远程启动失败,可能因网络异常导致:检查手机与车机网络信号是否正常,确认车辆未处于无信号区域;重启车机系统后重试远程启动;确保奇瑞汽车APP已登录且账号绑定车辆无误;检查APP内远程控制功能是否已开 +2025-12-07 23:49:39,226 - src.integrations.ai_suggestion_service - INFO - 未找到需要替换的内容: 车辆远程启动失败,可能因网络异常导致:检查手机与车机网络信号是否正常,确认车辆未处于无信号区域;重启车机系统后重试远程启动;确保奇瑞汽车APP已登录且账号绑定车辆无误;检查APP内远程控制功能是否已开 +2025-12-07 23:49:39,226 - src.integrations.ai_suggestion_service - INFO - AI建议清理后: 车辆远程启动失败,可能因网络异常导致:检查手机与车机网络信号是否正常,确认车辆未处于无信号区域;重启车机系统后重试远程启动;确保奇瑞汽车APP已登录且账号绑定车辆无误;检查APP内远程控制功能是否已开... +2025-12-07 23:49:39,226 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:49:39] "POST /api/workorders/generate-ai-suggestion HTTP/1.1" 200 - +2025-12-07 23:50:09,330 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:09] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-07 23:50:09,861 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:09] "GET / HTTP/1.1" 200 - +2025-12-07 23:50:09,910 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:50:10,210 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:10] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 23:50:10,231 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:10] "GET /static/css/design-system.css HTTP/1.1" 304 - +2025-12-07 23:50:10,244 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:10] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-07 23:50:10,269 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:10] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - +2025-12-07 23:50:10,868 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:50:11,486 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-07 23:50:12,007 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:12] "GET /api/system/info HTTP/1.1" 200 - +2025-12-07 23:50:12,023 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:50:12,023 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:12] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-07 23:50:12,023 - websockets.server - ERROR - opening handshake failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + await connection.handshake( + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + raise self.protocol.handshake_exc + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + response = process_request(self, self.request) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request + if request_headers.get("Upgrade", "").lower() == "websocket": + ^^^^^^^^^^^^^^^^^^^ +AttributeError: 'Request' object has no attribute 'get' +2025-12-07 23:50:13,803 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:50:13,827 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-07 23:50:14,094 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: qwen - qwen-plus-latest +2025-12-07 23:50:14,110 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id +2025-12-07 23:50:14,110 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description +2025-12-07 23:50:14,120 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 +2025-12-07 23:50:14,120 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:14] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-07 23:50:14,128 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category +2025-12-07 23:50:14,145 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority +2025-12-07 23:50:14,153 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status +2025-12-07 23:50:14,157 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source +2025-12-07 23:50:14,168 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at +2025-12-07 23:50:14,173 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> resolution +2025-12-07 23:50:14,181 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution +2025-12-07 23:50:14,194 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by +2025-12-07 23:50:14,202 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module +2025-12-07 23:50:14,210 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness +2025-12-07 23:50:14,218 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close +2025-12-07 23:50:14,227 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type +2025-12-07 23:50:14,244 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim +2025-12-07 23:50:14,252 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version +2025-12-07 23:50:14,261 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw +2025-12-07 23:50:14,271 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record +2025-12-07 23:50:14,277 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:14] "GET /api/workorders HTTP/1.1" 200 - +2025-12-07 23:50:14,315 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day +2025-12-07 23:50:14,352 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time +2025-12-07 23:50:14,360 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion +2025-12-07 23:50:14,381 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at +2025-12-07 23:50:14,594 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:14] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-07 23:50:15,078 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:15] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-07 23:50:15,221 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:15] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-07 23:50:17,119 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:50:17,135 - websockets.server - ERROR - opening handshake failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + await connection.handshake( + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + raise self.protocol.handshake_exc + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + response = process_request(self, self.request) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request + if request_headers.get("Upgrade", "").lower() == "websocket": + ^^^^^^^^^^^^^^^^^^^ +AttributeError: 'Request' object has no attribute 'get' +2025-12-07 23:50:18,410 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:18] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-07 23:50:22,146 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:50:22,146 - websockets.server - ERROR - opening handshake failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + await connection.handshake( + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + raise self.protocol.handshake_exc + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + response = process_request(self, self.request) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request + if request_headers.get("Upgrade", "").lower() == "websocket": + ^^^^^^^^^^^^^^^^^^^ +AttributeError: 'Request' object has no attribute 'get' +2025-12-07 23:50:22,579 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:22] "GET /api/token-monitor/stats HTTP/1.1" 200 - +2025-12-07 23:50:23,329 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:23] "GET /api/token-monitor/records HTTP/1.1" 200 - +2025-12-07 23:50:26,413 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:26] "GET /api/token-monitor/chart HTTP/1.1" 200 - +2025-12-07 23:50:27,165 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:50:27,165 - websockets.server - ERROR - opening handshake failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + await connection.handshake( + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + raise self.protocol.handshake_exc + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + response = process_request(self, self.request) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request + if request_headers.get("Upgrade", "").lower() == "websocket": + ^^^^^^^^^^^^^^^^^^^ +AttributeError: 'Request' object has no attribute 'get' +2025-12-07 23:50:27,680 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:27] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-07 23:50:29,631 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:29] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-07 23:50:32,181 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:50:32,181 - websockets.server - ERROR - opening handshake failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + await connection.handshake( + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + raise self.protocol.handshake_exc + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + response = process_request(self, self.request) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request + if request_headers.get("Upgrade", "").lower() == "websocket": + ^^^^^^^^^^^^^^^^^^^ +AttributeError: 'Request' object has no attribute 'get' +2025-12-07 23:50:33,160 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:33] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-07 23:50:34,860 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:34] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-07 23:50:37,374 - websockets.server - INFO - connection rejected (500 Internal Server Error) +2025-12-07 23:50:37,493 - websockets.server - ERROR - opening handshake failed +Traceback (most recent call last): + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 356, in conn_handler + await connection.handshake( + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 207, in handshake + raise self.protocol.handshake_exc + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 147, in handshake + response = process_request(self, self.request) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\code\assist\src\web\websocket_server.py", line 265, in _process_request + if request_headers.get("Upgrade", "").lower() == "websocket": + ^^^^^^^^^^^^^^^^^^^ +AttributeError: 'Request' object has no attribute 'get' +2025-12-07 23:50:42,461 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) +2025-12-07 23:50:44,043 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:50:44] "GET /api/analytics HTTP/1.1" 200 - +2025-12-07 23:50:59,734 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) +2025-12-07 23:51:02,007 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) +2025-12-07 23:51:02,819 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:51:02] "GET /api/analytics HTTP/1.1" 200 - +2025-12-07 23:51:03,587 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:51:03] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-07 23:51:03,614 - werkzeug - INFO - 127.0.0.1 - - [07/Dec/2025 23:51:03] "GET /api/settings HTTP/1.1" 200 - +2025-12-08 00:09:36,445 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-08 00:09:36,445 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-08 00:09:42,511 - src.core.database - ERROR - 数据库初始化失败: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-08 00:09:42,526 - __main__ - ERROR - 启动失败: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-08 00:22:37,225 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... +2025-12-08 00:22:43,311 - src.core.database - INFO - 数据库初始化成功 +2025-12-08 00:22:44,341 - __main__ - INFO - 跳过系统检查,直接启动服务... +2025-12-08 00:22:47,876 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db +2025-12-08 00:22:47,891 - src.integrations.config_manager - INFO - 配置加载成功 +2025-12-08 00:22:48,149 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-31 10:20:18,230 - werkzeug - INFO - Press CTRL+C to quit -2025-10-31 10:20:18,551 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-31 10:20:18,765 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-31 10:20:18,769 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-31 10:20:18,769 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-31 10:20:21,213 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:21] "GET / HTTP/1.1" 200 - -2025-10-31 10:20:21,523 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:21] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 10:20:21,525 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:21] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-31 10:20:21,526 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:21] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 10:20:21,532 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:21] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 10:20:22,198 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:22] "GET /api/system/info HTTP/1.1" 200 - -2025-10-31 10:20:22,250 - websockets.server - INFO - connection open -2025-10-31 10:20:22,251 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:22] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-31 10:20:22,251 - websockets.server - ERROR - connection handler failed + * Running on http://192.168.31.202:5000 +2025-12-08 00:22:48,157 - werkzeug - INFO - Press CTRL+C to quit +2025-12-08 00:22:48,638 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:22:49,043 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 +2025-12-08 00:22:49,059 - websockets.server - INFO - server listening on 127.0.0.1:8765 +2025-12-08 00:22:49,059 - websockets.server - INFO - server listening on [::1]:8765 +2025-12-08 00:22:53,549 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:53] "GET / HTTP/1.1" 200 - +2025-12-08 00:22:54,061 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:54] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-08 00:22:54,061 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:54] "GET /static/js/core/store.js HTTP/1.1" 200 - +2025-12-08 00:22:54,074 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:54] "GET /static/css/design-system.css HTTP/1.1" 304 - +2025-12-08 00:22:54,087 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:54] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - +2025-12-08 00:22:54,128 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:54] "GET /static/js/components/NotificationManager.js HTTP/1.1" 200 - +2025-12-08 00:22:54,147 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:54] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-08 00:22:54,183 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:54] "GET /static/js/components/AlertManager.js HTTP/1.1" 200 - +2025-12-08 00:22:54,183 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:54] "GET /static/js/services/api.js HTTP/1.1" 200 - +2025-12-08 00:22:54,191 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:54] "GET /static/js/app-new.js HTTP/1.1" 200 - +2025-12-08 00:22:55,015 - src.agent_assistant - INFO - TSP Agent助手初始化完成 +2025-12-08 00:22:55,024 - src.web.service_manager - INFO - 服务 agent_assistant 已初始化 +2025-12-08 00:22:55,025 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:55] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-08 00:22:55,080 - websockets.server - INFO - connection open +2025-12-08 00:22:55,088 - websockets.server - ERROR - connection handler failed Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler await self.handler(connection) ^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-31 10:20:22,416 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-31 10:20:22,621 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:22] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-31 10:20:22,625 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:22] "GET /favicon.ico HTTP/1.1" 404 - -2025-10-31 10:20:22,783 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-31 10:20:22,841 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-31 10:20:22,882 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-31 10:20:23,054 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' -2025-10-31 10:20:23,056 - src.config.unified_config - INFO - 配置文件加载成功 -2025-10-31 10:20:23,056 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: openai - qwen-turbo -2025-10-31 10:20:23,057 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-31 10:20:23,059 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-31 10:20:23,060 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-31 10:20:23,062 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-31 10:20:23,064 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-31 10:20:23,065 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-31 10:20:23,067 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-31 10:20:23,068 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> solution -2025-10-31 10:20:23,069 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-31 10:20:23,071 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-31 10:20:23,072 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-31 10:20:23,073 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-31 10:20:23,075 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-31 10:20:23,076 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-31 10:20:23,078 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-31 10:20:23,083 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-31 10:20:23,085 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-31 10:20:23,087 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-31 10:20:23,088 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-31 10:20:23,090 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-31 10:20:23,091 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-31 10:20:23,093 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-31 10:20:23,158 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-31 10:20:23,190 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-31 10:20:23,203 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:23] "GET /api/workorders HTTP/1.1" 200 - -2025-10-31 10:20:23,541 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:23] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-31 10:20:24,106 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:24] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-31 10:20:24,796 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 10:20:25,581 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:20:25,791 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:25] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-31 10:20:25,827 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:25] "GET /api/settings HTTP/1.1" 200 - -2025-10-31 10:20:26,455 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:20:26,630 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:26] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 10:20:27,286 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:20:27,429 - websockets.server - INFO - connection open -2025-10-31 10:20:27,430 - websockets.server - ERROR - connection handler failed +2025-12-08 00:22:56,309 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:56] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:22:56,328 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:56] "GET / HTTP/1.1" 200 - +2025-12-08 00:22:56,365 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:56] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-08 00:22:56,375 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:56] "GET /static/js/core/store.js HTTP/1.1" 304 - +2025-12-08 00:22:56,379 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:56] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-08 00:22:56,379 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:56] "GET /static/js/services/api.js HTTP/1.1" 304 - +2025-12-08 00:22:56,387 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:56] "GET /static/js/components/NotificationManager.js HTTP/1.1" 304 - +2025-12-08 00:22:56,392 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:56] "GET /static/js/components/AlertManager.js HTTP/1.1" 304 - +2025-12-08 00:22:56,400 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:56] "GET /static/js/app-new.js HTTP/1.1" 304 - +2025-12-08 00:22:56,410 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:56] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - +2025-12-08 00:22:56,410 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:56] "GET /static/css/design-system.css HTTP/1.1" 304 - +2025-12-08 00:22:56,659 - websockets.server - INFO - connection open +2025-12-08 00:22:56,659 - websockets.server - ERROR - connection handler failed Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler await self.handler(connection) ^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-31 10:20:27,460 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:27] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 10:20:27,932 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:20:28,108 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:28] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 10:20:28,769 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:20:28,774 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:28] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 10:20:28,947 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:28] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 10:20:29,225 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: unexpected indent (agent_assistant.py, line 215) -2025-10-31 10:20:29,225 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: cannot import name 'TSPAgentAssistant' from 'src.agent_assistant' (d:\code\tsp-assistant\src\agent_assistant.py) -2025-10-31 10:20:29,225 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:29] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-31 10:20:29,226 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:29] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-31 10:20:31,165 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: unexpected indent (agent_assistant.py, line 215) -2025-10-31 10:20:31,165 - src.web.service_manager - ERROR - 初始化服务 agent_assistant 失败: cannot import name 'TSPAgentAssistant' from 'src.agent_assistant' (d:\code\tsp-assistant\src\agent_assistant.py) -2025-10-31 10:20:31,166 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:31] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-31 10:20:31,166 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:31] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-31 10:20:32,439 - websockets.server - INFO - connection open -2025-10-31 10:20:32,439 - websockets.server - ERROR - connection handler failed +2025-12-08 00:22:56,727 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:22:56,742 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:22:56,727 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:22:56,810 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:22:57,143 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 +2025-12-08 00:22:57,143 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:57] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-08 00:22:57,346 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:57] "GET /api/workorders HTTP/1.1" 200 - +2025-12-08 00:22:57,561 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:22:57,609 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:22:57,762 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:22:57,892 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-08 00:22:57,944 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:57] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:22:57,959 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-08 00:22:58,158 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-08 00:22:58,158 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:58] "GET /api/rules HTTP/1.1" 200 - +2025-12-08 00:22:58,575 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:22:58,891 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:22:58,920 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:22:58,942 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:22:59,307 - src.web.service_manager - INFO - 服务 chat_manager 已初始化 +2025-12-08 00:22:59,308 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:59] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-08 00:22:59,308 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:59] "GET / HTTP/1.1" 200 - +2025-12-08 00:22:59,324 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:22:59,361 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:59] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-08 00:22:59,365 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:59] "GET /static/js/core/store.js HTTP/1.1" 304 - +2025-12-08 00:22:59,367 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:59] "GET /static/js/services/api.js HTTP/1.1" 304 - +2025-12-08 00:22:59,373 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:59] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - +2025-12-08 00:22:59,375 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:59] "GET /static/js/components/NotificationManager.js HTTP/1.1" 304 - +2025-12-08 00:22:59,383 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:59] "GET /static/js/app-new.js HTTP/1.1" 304 - +2025-12-08 00:22:59,383 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:59] "GET /static/js/components/AlertManager.js HTTP/1.1" 304 - +2025-12-08 00:22:59,383 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:59] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - +2025-12-08 00:22:59,399 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:59] "GET /static/css/design-system.css HTTP/1.1" 304 - +2025-12-08 00:22:59,498 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:59] "GET /api/rules HTTP/1.1" 200 - +2025-12-08 00:22:59,506 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:59] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-08 00:22:59,608 - websockets.server - INFO - connection open +2025-12-08 00:22:59,608 - websockets.server - ERROR - connection handler failed Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler await self.handler(connection) ^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-31 10:20:35,298 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:35] "GET /api/knowledge?page=1&per_page=5 HTTP/1.1" 200 - -2025-10-31 10:20:36,771 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:36] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-31 10:20:37,447 - websockets.server - INFO - connection open -2025-10-31 10:20:37,447 - websockets.server - ERROR - connection handler failed +2025-12-08 00:22:59,619 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:59] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-08 00:22:59,683 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-08 00:22:59,715 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:22:59,774 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:59] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:22:59,841 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:22:59] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:22:59,977 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:23:00,007 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:00] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-08 00:23:00,075 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-08 00:23:00,361 - src.web.service_manager - INFO - 服务 assistant 已初始化 +2025-12-08 00:23:00,361 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:00] "GET /api/rules HTTP/1.1" 200 - +2025-12-08 00:23:00,491 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:00] "GET /api/workorders HTTP/1.1" 200 - +2025-12-08 00:23:00,674 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:00] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:23:00,693 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:00] "GET /api/system/info HTTP/1.1" 200 - +2025-12-08 00:23:00,707 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:00] "GET /api/feishu-sync/config HTTP/1.1" 200 - +2025-12-08 00:23:00,941 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:00] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:23:01,125 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 +2025-12-08 00:23:01,540 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:01] "GET /api/workorders HTTP/1.1" 200 - +2025-12-08 00:23:01,574 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' +2025-12-08 00:23:01,578 - src.config.unified_config - INFO - 配置文件加载成功 +2025-12-08 00:23:01,578 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: qwen - qwen-plus-latest +2025-12-08 00:23:01,595 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id +2025-12-08 00:23:01,606 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description +2025-12-08 00:23:01,623 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category +2025-12-08 00:23:01,630 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority +2025-12-08 00:23:01,645 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status +2025-12-08 00:23:01,659 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source +2025-12-08 00:23:01,668 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at +2025-12-08 00:23:01,682 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> resolution +2025-12-08 00:23:01,688 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:01] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-08 00:23:01,688 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution +2025-12-08 00:23:01,707 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by +2025-12-08 00:23:01,715 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module +2025-12-08 00:23:01,732 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness +2025-12-08 00:23:01,740 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close +2025-12-08 00:23:01,748 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type +2025-12-08 00:23:01,764 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim +2025-12-08 00:23:01,782 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version +2025-12-08 00:23:01,797 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw +2025-12-08 00:23:01,799 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record +2025-12-08 00:23:01,813 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day +2025-12-08 00:23:01,821 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time +2025-12-08 00:23:01,829 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion +2025-12-08 00:23:01,847 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at +2025-12-08 00:23:02,174 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:02] "GET /api/workorders HTTP/1.1" 200 - +2025-12-08 00:23:02,829 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:02] "GET /api/feishu-sync/status HTTP/1.1" 200 - +2025-12-08 00:23:02,910 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:02] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:23:03,308 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:03] "GET /api/agent/status HTTP/1.1" 200 - +2025-12-08 00:23:03,331 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:03] "GET /api/agent/tools/stats HTTP/1.1" 200 - +2025-12-08 00:23:04,630 - src.core.database - WARNING - 数据库连接丢失,重试 1/3: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-08 00:23:04,630 - src.web.error_handlers - ERROR - 错误响应: 获取预警列表失败: generator didn't stop after throw() - None +2025-12-08 00:23:04,630 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:04] "GET /api/alerts?per_page=1000 HTTP/1.1" 500 - +2025-12-08 00:23:04,657 - websockets.server - INFO - connection open +2025-12-08 00:23:04,665 - websockets.server - ERROR - connection handler failed Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler await self.handler(connection) ^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-31 10:20:40,607 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:40] "GET /api/workorders/78 HTTP/1.1" 200 - -2025-10-31 10:20:42,457 - websockets.server - INFO - connection open -2025-10-31 10:20:42,458 - websockets.server - ERROR - connection handler failed +2025-12-08 00:23:04,760 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:04] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-08 00:23:07,043 - src.dialogue.realtime_chat - INFO - 创建新会话: session_user_001_1765124587 +2025-12-08 00:23:07,043 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:07] "POST /api/chat/session HTTP/1.1" 200 - +2025-12-08 00:23:07,724 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:07] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:23:08,543 - src.dialogue.realtime_chat - INFO - 结束会话: session_user_001_1765124587 +2025-12-08 00:23:08,543 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:08] "DELETE /api/chat/session/session_user_001_1765124587 HTTP/1.1" 200 - +2025-12-08 00:23:09,691 - websockets.server - INFO - connection open +2025-12-08 00:23:09,710 - websockets.server - ERROR - connection handler failed Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler await self.handler(connection) ^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-31 10:20:45,818 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'TR866 - Traffic is over' 返回 0 个结果 -2025-10-31 10:20:47,465 - websockets.server - INFO - connection open -2025-10-31 10:20:47,466 - websockets.server - ERROR - connection handler failed +2025-12-08 00:23:10,377 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:10] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:23:11,925 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:11] "GET /api/knowledge?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-08 00:23:14,745 - websockets.server - INFO - connection open +2025-12-08 00:23:14,761 - websockets.server - ERROR - connection handler failed Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler await self.handler(connection) ^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-31 10:20:47,542 - src.core.llm_client - INFO - API请求成功 -2025-10-31 10:20:48,019 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:20:48] "POST /api/workorders/78/ai-suggestion HTTP/1.1" 200 - -2025-10-31 10:20:52,472 - websockets.server - INFO - connection open -2025-10-31 10:20:52,472 - websockets.server - ERROR - connection handler failed +2025-12-08 00:23:18,257 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:18] "GET /api/workorders/78 HTTP/1.1" 200 - +2025-12-08 00:23:19,858 - websockets.server - INFO - connection open +2025-12-08 00:23:19,874 - websockets.server - ERROR - connection handler failed Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler await self.handler(connection) ^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-31 10:20:57,476 - websockets.server - INFO - connection open -2025-10-31 10:20:57,476 - websockets.server - ERROR - connection handler failed +2025-12-08 00:23:20,408 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:20] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:23:24,923 - websockets.server - INFO - connection open +2025-12-08 00:23:24,927 - websockets.server - ERROR - connection handler failed Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler await self.handler(connection) ^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' -2025-10-31 10:21:05,750 - src.utils.semantic_similarity - INFO - 正在加载语义相似度模型: all-MiniLM-L6-v2 -2025-10-31 10:21:05,750 - sentence_transformers.SentenceTransformer - INFO - Use pytorch device_name: cpu -2025-10-31 10:21:05,750 - sentence_transformers.SentenceTransformer - INFO - Load pretrained SentenceTransformer: all-MiniLM-L6-v2 -2025-10-31 10:21:15,781 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 622918db-4f07-4b0a-90c7-2dbe3ad89dae)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-31 10:21:15,782 - huggingface_hub.utils._http - WARNING - Retrying in 1s [Retry 1/5]. -2025-10-31 10:21:26,797 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: dc47ad84-2c24-4d00-891d-a8b847cc3c24)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-31 10:21:26,798 - huggingface_hub.utils._http - WARNING - Retrying in 2s [Retry 2/5]. -2025-10-31 10:23:35,972 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 10:23:35,973 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 10:23:38,642 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 10:23:40,154 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-31 10:23:40,169 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-31 10:23:40,253 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-31 10:23:40,255 - werkzeug - INFO - Press CTRL+C to quit -2025-10-31 10:23:40,510 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-31 10:23:40,717 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-31 10:23:40,723 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-31 10:23:40,723 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-31 10:24:05,102 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:24:05] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 10:24:05,841 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:24:06,039 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:24:06] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 10:24:06,177 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-31 10:24:06,776 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:24:06,851 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-31 10:24:06,978 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:24:06] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 10:24:17,939 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:24:17] "GET /api/workorders/78 HTTP/1.1" 200 - -2025-10-31 10:24:20,395 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'TR866 - Traffic is over' 返回 0 个结果 -2025-10-31 10:24:23,287 - src.core.llm_client - INFO - API请求成功 -2025-10-31 10:24:23,734 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:24:23] "POST /api/workorders/78/ai-suggestion HTTP/1.1" 200 - -2025-10-31 10:24:41,514 - src.utils.semantic_similarity - INFO - 正在加载语义相似度模型: all-MiniLM-L6-v2 -2025-10-31 10:24:41,517 - sentence_transformers.SentenceTransformer - INFO - Use pytorch device_name: cpu -2025-10-31 10:24:41,517 - sentence_transformers.SentenceTransformer - INFO - Load pretrained SentenceTransformer: all-MiniLM-L6-v2 -2025-10-31 10:24:51,573 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: 2e39a15f-0b3c-4396-ab81-8fe931cc28a1)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-31 10:24:51,574 - huggingface_hub.utils._http - WARNING - Retrying in 1s [Retry 1/5]. -2025-10-31 10:25:02,586 - huggingface_hub.utils._http - WARNING - '(MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json (Caused by ConnectTimeoutError(, 'Connection to huggingface.co timed out. (connect timeout=10)'))"), '(Request ID: a9fe9039-15ce-4c23-b480-1ca6051f03d7)')' thrown while requesting HEAD https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/./modules.json -2025-10-31 10:25:02,587 - huggingface_hub.utils._http - WARNING - Retrying in 2s [Retry 2/5]. -2025-10-31 10:27:54,276 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 10:27:54,276 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 10:27:57,185 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 10:27:58,439 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-31 10:27:58,445 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-31 10:27:58,510 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-31 10:27:58,511 - werkzeug - INFO - Press CTRL+C to quit -2025-10-31 10:27:58,844 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-31 10:27:59,048 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-31 10:27:59,048 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-31 10:27:59,048 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-31 10:28:08,896 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:28:08] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 10:28:09,938 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-31 10:28:10,625 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 23 个条目 -2025-10-31 10:28:14,199 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'TR866 - Traffic is over' 返回 0 个结果 -2025-10-31 10:28:16,480 - src.core.llm_client - INFO - API请求成功 -2025-10-31 10:28:17,795 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:28:17] "POST /api/workorders/78/ai-suggestion HTTP/1.1" 200 - -2025-10-31 10:28:32,263 - src.utils.semantic_similarity - INFO - LLM客户端初始化成功,将使用LLM API计算语义相似度 -2025-10-31 10:28:33,078 - src.core.llm_client - INFO - API请求成功 -2025-10-31 10:28:33,079 - src.web.blueprints.workorders - INFO - AI建议与人工描述语义相似度: 0.7500 -2025-10-31 10:28:33,816 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:28:33] "POST /api/workorders/78/human-resolution HTTP/1.1" 200 - -2025-10-31 10:28:43,259 - src.web.blueprints.workorders - INFO - 工单 78 使用人工描述入库,AI相似度: 0.7500 -2025-10-31 10:28:43,712 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:28:43,926 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:28:43] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 10:28:44,979 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:28:45,196 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:28:45] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 10:28:45,196 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:28:45] "POST /api/workorders/78/approve-to-knowledge HTTP/1.1" 200 - -2025-10-31 10:28:49,136 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:28:49] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 10:28:50,185 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:28:50] "GET /api/workorders/78 HTTP/1.1" 200 - -2025-10-31 10:29:36,046 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:29:36] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 10:29:54,173 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:29:54,673 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:29:54] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 10:29:56,431 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:29:56,870 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:29:56] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 10:36:11,007 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:36:11] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 10:36:11,958 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:36:12,441 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:36:12] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 10:36:13,992 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:36:14,426 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:36:14] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 10:37:46,235 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:37:46] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 10:37:47,337 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:37:47,821 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:37:47] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 10:37:49,375 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:37:49,811 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:37:49] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 10:39:24,691 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:39:24] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 10:39:25,828 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:39:26,330 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:39:26] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 10:39:27,892 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 10:39:28,339 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 10:39:28] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 10:54:23,005 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 10:54:23,005 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 10:54:25,490 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 10:54:28,187 - __main__ - ERROR - 启动失败: (unicode error) 'utf-8' codec can't decode byte 0xb9 in position 1: invalid start byte (workorder_permissions.py, line 5) -2025-10-31 10:59:12,440 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 10:59:12,440 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 10:59:18,642 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 10:59:20,279 - __main__ - ERROR - 启动失败: (unicode error) 'utf-8' codec can't decode byte 0xb9 in position 1: invalid start byte (workorder_permissions.py, line 5) -2025-10-31 10:59:20,790 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 10:59:20,791 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 10:59:23,478 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 10:59:25,094 - __main__ - ERROR - 启动失败: (unicode error) 'utf-8' codec can't decode byte 0xb9 in position 1: invalid start byte (workorder_permissions.py, line 5) -2025-10-31 11:02:16,212 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 11:02:16,212 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 11:02:18,720 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 11:02:19,954 - __main__ - ERROR - 启动失败: (unicode error) 'utf-8' codec can't decode byte 0xd3 in position 0: invalid continuation byte (workorder_permissions.py, line 8) -2025-10-31 12:19:26,725 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 12:19:26,726 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 12:19:29,117 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 12:19:30,400 - __main__ - ERROR - 启动失败: (unicode error) 'utf-8' codec can't decode byte 0xce in position 6: invalid continuation byte (workorder_permissions.py, line 139) -2025-10-31 12:20:34,696 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 12:20:34,697 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 12:20:38,122 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 12:20:39,365 - __main__ - ERROR - 启动失败: (unicode error) 'utf-8' codec can't decode byte 0xce in position 6: invalid continuation byte (workorder_permissions.py, line 139) -2025-10-31 12:23:38,597 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 12:23:38,597 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 12:23:44,511 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 12:23:46,304 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-31 12:23:46,330 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-31 12:23:46,414 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-31 12:23:46,414 - werkzeug - INFO - Press CTRL+C to quit -2025-10-31 12:23:46,986 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:23:47,463 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-31 12:23:47,476 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-31 12:23:47,477 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-31 12:23:59,564 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:23:59] "GET / HTTP/1.1" 200 - -2025-10-31 12:23:59,713 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:23:59] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-31 12:23:59,728 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:23:59] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 12:23:59,728 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:23:59] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 12:23:59,743 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:23:59] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 12:24:00,246 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:00] "GET /api/workorders HTTP/1.1" 200 - -2025-10-31 12:24:00,249 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:00] "GET /api/system/info HTTP/1.1" 200 - -2025-10-31 12:24:00,269 - websockets.server - INFO - connection open -2025-10-31 12:24:00,271 - websockets.server - ERROR - connection handler failed +2025-12-08 00:23:27,824 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:27] "GET /api/ai-monitor/stats HTTP/1.1" 200 - +2025-12-08 00:23:29,957 - websockets.server - INFO - connection open +2025-12-08 00:23:29,957 - websockets.server - ERROR - connection handler failed Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 248, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-31 12:24:00,274 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:00] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-31 12:24:00,832 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:24:00,963 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:24:01,143 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' -2025-10-31 12:24:01,147 - src.config.unified_config - INFO - 配置文件加载成功 -2025-10-31 12:24:01,147 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: openai - qwen-turbo -2025-10-31 12:24:01,149 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-31 12:24:01,151 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-31 12:24:01,152 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-31 12:24:01,159 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-31 12:24:01,163 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-31 12:24:01,168 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:24:01,169 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-31 12:24:01,179 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-31 12:24:01,181 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> resolution -2025-10-31 12:24:01,182 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-31 12:24:01,183 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-31 12:24:01,184 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-31 12:24:01,186 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-31 12:24:01,190 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-31 12:24:01,193 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-31 12:24:01,196 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-31 12:24:01,198 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-31 12:24:01,199 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-31 12:24:01,201 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-31 12:24:01,202 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-31 12:24:01,208 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-31 12:24:01,212 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-31 12:24:01,214 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-31 12:24:01,645 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:01] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 12:24:01,678 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:01] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-31 12:24:01,897 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:24:01,926 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:24:02,044 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:02] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-31 12:24:02,348 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:02] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-31 12:24:02,583 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:24:03,371 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:03] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-31 12:24:04,015 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:24:04,482 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:04] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-31 12:24:04,516 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:04] "GET /api/settings HTTP/1.1" 200 - -2025-10-31 12:24:05,425 - websockets.server - INFO - connection open -2025-10-31 12:24:05,426 - websockets.server - ERROR - connection handler failed + ^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' +2025-12-08 00:23:30,381 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:30] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - +2025-12-08 00:23:32,230 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:32] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - +2025-12-08 00:23:33,632 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:33] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - +2025-12-08 00:23:35,006 - websockets.server - INFO - connection open +2025-12-08 00:23:35,006 - websockets.server - ERROR - connection handler failed Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 248, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-31 12:24:05,829 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:05] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 12:24:06,288 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:24:06,761 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:06] "GET /api/knowledge?page=1&per_page=5 HTTP/1.1" 200 - -2025-10-31 12:24:06,770 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:06] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 12:24:07,338 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:07] "GET /api/alerts?page=1&per_page=50 HTTP/1.1" 200 - -2025-10-31 12:24:07,541 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:24:07,719 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:07] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 12:24:08,433 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:24:08,590 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:08] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 12:24:08,886 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:08] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 12:24:10,437 - websockets.server - INFO - connection open -2025-10-31 12:24:10,439 - websockets.server - ERROR - connection handler failed + ^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' +2025-12-08 00:23:38,127 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:38] "GET /api/token-monitor/stats HTTP/1.1" 200 - +2025-12-08 00:23:40,049 - websockets.server - INFO - connection open +2025-12-08 00:23:40,049 - websockets.server - ERROR - connection handler failed Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 248, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-31 12:24:10,621 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:24:11,085 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:11] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 12:24:12,045 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:24:12] "GET /api/knowledge?page=1&per_page=5 HTTP/1.1" 200 - -2025-10-31 12:24:15,449 - websockets.server - INFO - connection open -2025-10-31 12:24:15,450 - websockets.server - ERROR - connection handler failed + ^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' +2025-12-08 00:23:42,465 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:42] "GET /api/token-monitor/chart HTTP/1.1" 200 - +2025-12-08 00:23:44,680 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:44] "GET /api/token-monitor/records HTTP/1.1" 200 - +2025-12-08 00:23:45,081 - websockets.server - INFO - connection open +2025-12-08 00:23:45,090 - websockets.server - ERROR - connection handler failed Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler await self.handler(connection) - File "d:\code\tsp-assistant\src\web\websocket_server.py", line 248, in handle_client_with_cors - if websocket.request_headers.get("Origin"): - ^^^^^^^^^^^^^^^^^^^^^^^^^ -AttributeError: 'ServerConnection' object has no attribute 'request_headers' -2025-10-31 12:26:03,635 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 12:26:03,635 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 12:26:05,958 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 12:26:07,227 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-31 12:26:07,246 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-31 12:26:07,397 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-31 12:26:07,398 - werkzeug - INFO - Press CTRL+C to quit -2025-10-31 12:26:07,591 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:26:07,756 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-31 12:26:07,775 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-31 12:26:07,775 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-31 12:26:09,613 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:09] "GET / HTTP/1.1" 200 - -2025-10-31 12:26:09,721 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:09] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 12:26:09,722 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:09] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-31 12:26:09,723 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:09] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 12:26:09,729 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:09] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 12:26:09,933 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:09] "GET /api/workorders HTTP/1.1" 200 - -2025-10-31 12:26:09,935 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:09] "GET /api/system/info HTTP/1.1" 200 - -2025-10-31 12:26:09,961 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:09] "GET /api/workorders?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-31 12:26:09,968 - websockets.server - INFO - connection open -2025-10-31 12:26:09,969 - src.web.websocket_server - INFO - 客户端连接: ('::1', 62620, 0, 0) -2025-10-31 12:26:09,970 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:09] "GET /api/feishu-sync/config HTTP/1.1" 200 - -2025-10-31 12:26:10,098 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:26:10,309 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:10] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-31 12:26:10,601 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:26:10,693 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:26:10,874 - src.config.unified_config - WARNING - 无法加载默认LLM配置,使用内置默认值: No module named 'config.llm_config' -2025-10-31 12:26:10,875 - src.config.unified_config - INFO - 配置文件加载成功 -2025-10-31 12:26:10,875 - src.integrations.ai_suggestion_service - INFO - 使用LLM配置: openai - qwen-turbo -2025-10-31 12:26:10,877 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Number -> order_id -2025-10-31 12:26:10,878 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Description -> description -2025-10-31 12:26:10,880 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Type of problem -> category -2025-10-31 12:26:10,882 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Level -> priority -2025-10-31 12:26:10,883 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR Status -> status -2025-10-31 12:26:10,884 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Source -> source -2025-10-31 12:26:10,885 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date creation -> created_at -2025-10-31 12:26:10,886 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 处理过程 -> resolution -2025-10-31 12:26:10,888 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: TR tracking -> resolution -2025-10-31 12:26:10,889 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Created by -> created_by -2025-10-31 12:26:10,890 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Module(模块) -> module -2025-10-31 12:26:10,891 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Wilfulness(责任人) -> wilfulness -2025-10-31 12:26:10,892 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Date of close TR -> date_of_close -2025-10-31 12:26:10,893 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Vehicle Type01 -> vehicle_type -2025-10-31 12:26:10,894 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: VIN|sim -> vin_sim -2025-10-31 12:26:10,895 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: App remote control version -> app_remote_control_version -2025-10-31 12:26:10,898 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: HMI SW -> hmi_sw -2025-10-31 12:26:10,900 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: 父记录 -> parent_record -2025-10-31 12:26:10,903 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Has it been updated on the same day -> has_updated_same_day -2025-10-31 12:26:10,906 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Operating time -> operating_time -2025-10-31 12:26:10,908 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: AI建议 -> ai_suggestion -2025-10-31 12:26:10,909 - src.integrations.flexible_field_mapper - INFO - 添加字段映射: Issue Start Time -> updated_at -2025-10-31 12:26:10,952 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:26:10,958 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:10] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 12:26:11,384 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:11] "GET /api/feishu-sync/status HTTP/1.1" 200 - -2025-10-31 12:26:11,432 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:26:12,024 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:26:12,908 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:12] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-31 12:26:14,396 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:26:14,824 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:14] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-31 12:26:14,853 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:14] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 12:26:14,864 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:14] "GET /api/settings HTTP/1.1" 200 - -2025-10-31 12:26:15,038 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:26:15,213 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:15] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 12:26:15,547 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:15] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 12:26:15,714 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:26:15,881 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:15] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 12:26:16,289 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:26:16,725 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:16] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 12:26:17,188 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:26:17,385 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:26:17,390 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:17] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 12:26:17,562 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:17] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 12:26:18,629 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:26:19,046 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:19] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 12:26:23,390 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:23] "GET /api/knowledge?page=1&per_page=5 HTTP/1.1" 200 - -2025-10-31 12:26:26,395 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:26] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 12:26:26,998 - src.agent_assistant - INFO - TSP Agent助手初始化完成 -2025-10-31 12:26:26,998 - src.agent_assistant - INFO - TSP Agent助手初始化完成 -2025-10-31 12:26:26,999 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:26] "GET /api/agent/status HTTP/1.1" 200 - -2025-10-31 12:26:27,000 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:26] "GET /api/agent/tools/stats HTTP/1.1" 200 - -2025-10-31 12:26:29,007 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:29] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-31 12:26:29,007 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:29] "GET /api/workorders HTTP/1.1" 200 - -2025-10-31 12:26:29,548 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:29] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 12:26:29,711 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:29] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-31 12:26:30,263 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:30] "GET /api/chat/sessions HTTP/1.1" 200 - -2025-10-31 12:26:30,264 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:30] "GET /api/workorders HTTP/1.1" 200 - -2025-10-31 12:26:30,821 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:30] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 12:26:30,987 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:30] "GET /api/knowledge/stats HTTP/1.1" 200 - -2025-10-31 12:26:31,316 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:31] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-31 12:26:31,321 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:26:31,766 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:31] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-31 12:26:31,810 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:31] "GET /api/settings HTTP/1.1" 200 - -2025-10-31 12:26:32,413 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:26:32,456 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:26:32,599 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:32] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - -2025-10-31 12:26:32,620 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:32] "GET /api/settings HTTP/1.1" 200 - -2025-10-31 12:26:32,636 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:32] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 12:26:33,275 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:26:33,301 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:26:33,379 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:33] "GET /api/token-monitor/stats HTTP/1.1" 200 - -2025-10-31 12:26:33,442 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:33] "GET /api/ai-monitor/stats HTTP/1.1" 200 - -2025-10-31 12:26:33,446 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:33] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 12:26:33,477 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:33] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 12:26:33,896 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:33] "GET /api/ai-monitor/error-distribution HTTP/1.1" 200 - -2025-10-31 12:26:33,896 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:33] "GET /api/ai-monitor/model-comparison HTTP/1.1" 200 - -2025-10-31 12:26:33,928 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:26:34,101 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:34] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 12:26:34,278 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:34] "GET /api/token-monitor/records HTTP/1.1" 200 - -2025-10-31 12:26:35,579 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:35] "GET /api/system-optimizer/status HTTP/1.1" 200 - -2025-10-31 12:26:35,595 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:35] "GET /api/system-optimizer/security-settings HTTP/1.1" 200 - -2025-10-31 12:26:35,597 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:35] "GET /api/system-optimizer/traffic-settings HTTP/1.1" 200 - -2025-10-31 12:26:35,598 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:35] "GET /api/system-optimizer/cost-settings HTTP/1.1" 200 - -2025-10-31 12:26:36,317 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:36] "GET /api/ai-monitor/error-log HTTP/1.1" 200 - -2025-10-31 12:26:36,347 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:26:36] "GET /api/token-monitor/chart HTTP/1.1" 200 - -2025-10-31 12:27:14,945 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:27:14] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 12:27:21,974 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:27:22,442 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:27:22] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 12:27:23,117 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:27:23,289 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:27:23] "GET /api/workorders/by-status/open HTTP/1.1" 200 - -2025-10-31 12:27:23,298 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:27:23] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 12:27:29,068 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:27:29] "GET /api/workorders/by-status/in_progress HTTP/1.1" 200 - -2025-10-31 12:27:49,139 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:27:49] "GET /api/workorders HTTP/1.1" 200 - -2025-10-31 12:27:53,365 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:27:53] "GET /api/workorders/by-status/open HTTP/1.1" 200 - -2025-10-31 12:27:56,511 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:27:56] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 12:27:57,038 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:27:57] "GET /api/workorders/65 HTTP/1.1" 403 - -2025-10-31 12:35:12,988 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 12:35:12,988 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 12:35:15,563 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 12:35:15,567 - __main__ - ERROR - 启动失败: (unicode error) 'utf-8' codec can't decode byte 0xd3 in position 1: invalid continuation byte (auth.py, line 5) -2025-10-31 12:37:21,363 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 12:37:21,363 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 12:37:24,356 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 12:37:26,154 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-31 12:37:26,164 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-31 12:37:26,168 - __main__ - ERROR - 启动失败: name 'secrets' is not defined -2025-10-31 12:39:45,468 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 12:39:45,469 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 12:39:48,142 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 12:39:49,939 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-31 12:39:49,950 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-31 12:39:50,040 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-31 12:39:50,041 - werkzeug - INFO - Press CTRL+C to quit -2025-10-31 12:39:50,243 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:39:50,416 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-31 12:39:50,423 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-31 12:39:50,423 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-31 12:39:54,625 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:39:54] "GET / HTTP/1.1" 302 - -2025-10-31 12:39:54,631 - src.web.app - ERROR - Exception on /login [GET] + ^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' +2025-12-08 00:23:45,861 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:45] "GET /api/conversations?page=1&per_page=10 HTTP/1.1" 200 - +2025-12-08 00:23:48,790 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:48] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:23:48,843 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:23:48] "GET /api/settings HTTP/1.1" 200 - +2025-12-08 00:23:50,107 - websockets.server - INFO - connection open +2025-12-08 00:23:50,107 - websockets.server - ERROR - connection handler failed Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\flask\app.py", line 919, in full_dispatch_request - rv = self.handle_user_exception(e) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\flask_cors\extension.py", line 176, in wrapped_function - return cors_after_request(app.make_response(f(*args, **kwargs))) - ^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\flask\app.py", line 917, in full_dispatch_request - rv = self.dispatch_request() - ^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\flask\app.py", line 902, in dispatch_request - return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\app.py", line 86, in login_page - return render_template('login.html') - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\flask\templating.py", line 149, in render_template - template = app.jinja_env.get_or_select_template(template_name_or_list) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\jinja2\environment.py", line 1087, in get_or_select_template - return self.get_template(template_name_or_list, parent, globals) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\jinja2\environment.py", line 1016, in get_template - return self._load_template(name, globals) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\jinja2\environment.py", line 975, in _load_template - template = self.loader.load(self, name, self.make_globals(globals)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\jinja2\loaders.py", line 126, in load - source, filename, uptodate = self.get_source(environment, name) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\flask\templating.py", line 65, in get_source - return self._get_source_fast(environment, template) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\flask\templating.py", line 96, in _get_source_fast - return loader.get_source(environment, template) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\jinja2\loaders.py", line 215, in get_source - contents = f.read() - ^^^^^^^^ - File "", line 322, in decode -UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 164: invalid continuation byte -2025-10-31 12:39:54,642 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:39:54] "GET /login HTTP/1.1" 500 - -2025-10-31 12:39:59,605 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:39:59] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - -2025-10-31 12:39:59,738 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:40:00,083 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:40:00,157 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:40:00,333 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:40:00] "GET /api/analytics HTTP/1.1" 200 - -2025-10-31 12:40:00,411 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:40:00] "GET / HTTP/1.1" 302 - -2025-10-31 12:40:00,418 - src.web.app - ERROR - Exception on /login [GET] + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + ^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' +2025-12-08 00:23:55,140 - websockets.server - INFO - connection open +2025-12-08 00:23:55,140 - websockets.server - ERROR - connection handler failed Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\flask\app.py", line 1511, in wsgi_app - response = self.full_dispatch_request() - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\flask\app.py", line 919, in full_dispatch_request - rv = self.handle_user_exception(e) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\flask_cors\extension.py", line 176, in wrapped_function - return cors_after_request(app.make_response(f(*args, **kwargs))) - ^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\flask\app.py", line 917, in full_dispatch_request - rv = self.dispatch_request() - ^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\flask\app.py", line 902, in dispatch_request - return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return] - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "d:\code\tsp-assistant\src\web\app.py", line 86, in login_page - return render_template('login.html') - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\flask\templating.py", line 149, in render_template - template = app.jinja_env.get_or_select_template(template_name_or_list) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\jinja2\environment.py", line 1087, in get_or_select_template - return self.get_template(template_name_or_list, parent, globals) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\jinja2\environment.py", line 1016, in get_template - return self._load_template(name, globals) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\jinja2\environment.py", line 975, in _load_template - template = self.loader.load(self, name, self.make_globals(globals)) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\jinja2\loaders.py", line 126, in load - source, filename, uptodate = self.get_source(environment, name) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\flask\templating.py", line 65, in get_source - return self._get_source_fast(environment, template) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\flask\templating.py", line 96, in _get_source_fast - return loader.get_source(environment, template) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\jinja2\loaders.py", line 215, in get_source - contents = f.read() - ^^^^^^^^ - File "", line 322, in decode -UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 164: invalid continuation byte -2025-10-31 12:40:00,423 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:40:00] "GET /login HTTP/1.1" 500 - -2025-10-31 12:40:00,783 - src.core.query_optimizer - WARNING - 未映射的状态: 'Analysising' (数量: 1) -2025-10-31 12:40:00,953 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:40:00] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - -2025-10-31 12:42:44,731 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 12:42:44,731 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 12:42:47,447 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 12:42:49,920 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-31 12:42:49,937 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-31 12:42:50,041 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-31 12:42:50,042 - werkzeug - INFO - Press CTRL+C to quit -2025-10-31 12:42:50,310 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:42:50,512 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-31 12:42:50,525 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-31 12:42:50,525 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-31 12:42:54,157 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:42:54] "GET /login HTTP/1.1" 200 - -2025-10-31 12:43:01,682 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'users.is_active' in 'field list'") -[SQL: SELECT users.id AS users_id, users.username AS users_username, users.email AS users_email, users.password_hash AS users_password_hash, users.`role` AS users_role, users.region AS users_region, users.is_active AS users_is_active, users.last_login AS users_last_login, users.created_at AS users_created_at, users.updated_at AS users_updated_at -FROM users -WHERE users.username = %(username_1)s - LIMIT %(param_1)s] -[parameters: {'username_1': 'admin', 'param_1': 1}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-10-31 12:43:01,684 - src.web.blueprints.auth - ERROR - 登录失败: (pymysql.err.OperationalError) (1054, "Unknown column 'users.is_active' in 'field list'") -[SQL: SELECT users.id AS users_id, users.username AS users_username, users.email AS users_email, users.password_hash AS users_password_hash, users.`role` AS users_role, users.region AS users_region, users.is_active AS users_is_active, users.last_login AS users_last_login, users.created_at AS users_created_at, users.updated_at AS users_updated_at -FROM users -WHERE users.username = %(username_1)s - LIMIT %(param_1)s] -[parameters: {'username_1': 'admin', 'param_1': 1}] -(Background on this error at: https://sqlalche.me/e/20/e3q8) + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + ^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' +2025-12-08 00:24:00,256 - websockets.server - INFO - connection open +2025-12-08 00:24:00,271 - websockets.server - ERROR - connection handler failed Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context - self.dialect.do_execute( - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\default.py", line 951, in do_execute - cursor.execute(statement, parameters) - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\cursors.py", line 153, in execute - result = self._query(query) - ^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\cursors.py", line 322, in _query - conn.query(q) - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\connections.py", line 575, in query - self._affected_rows = self._read_query_result(unbuffered=unbuffered) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\connections.py", line 826, in _read_query_result - result.read() - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\connections.py", line 1203, in read - first_packet = self.connection._read_packet() - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\connections.py", line 782, in _read_packet - packet.raise_for_error() - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error - err.raise_mysql_exception(self._data) - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception - raise errorclass(errno, errval) -pymysql.err.OperationalError: (1054, "Unknown column 'users.is_active' in 'field list'") - -The above exception was the direct cause of the following exception: - -Traceback (most recent call last): - File "d:\code\tsp-assistant\src\web\blueprints\auth.py", line 45, in login - user = db_session.query(User).filter(User.username == username).first() - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\orm\query.py", line 2759, in first - return self.limit(1)._iter().first() # type: ignore - ^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\orm\query.py", line 2857, in _iter - result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( - ^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2351, in execute - return self._execute_internal( - ^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2249, in _execute_internal - result: Result[Any] = compile_state_cls.orm_execute_statement( - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\orm\context.py", line 306, in orm_execute_statement - result = conn.execute( - ^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1419, in execute - return meth( - ^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\sql\elements.py", line 526, in _execute_on_connection - return connection._execute_clauseelement( - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1641, in _execute_clauseelement - ret = self._execute_context( - ^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1846, in _execute_context - return self._exec_single_context( - ^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1986, in _exec_single_context - self._handle_dbapi_exception( - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 2355, in _handle_dbapi_exception - raise sqlalchemy_exception.with_traceback(exc_info[2]) from e - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context - self.dialect.do_execute( - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\default.py", line 951, in do_execute - cursor.execute(statement, parameters) - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\cursors.py", line 153, in execute - result = self._query(query) - ^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\cursors.py", line 322, in _query - conn.query(q) - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\connections.py", line 575, in query - self._affected_rows = self._read_query_result(unbuffered=unbuffered) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\connections.py", line 826, in _read_query_result - result.read() - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\connections.py", line 1203, in read - first_packet = self.connection._read_packet() - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\connections.py", line 782, in _read_packet - packet.raise_for_error() - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error - err.raise_mysql_exception(self._data) - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception - raise errorclass(errno, errval) -sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'users.is_active' in 'field list'") -[SQL: SELECT users.id AS users_id, users.username AS users_username, users.email AS users_email, users.password_hash AS users_password_hash, users.`role` AS users_role, users.region AS users_region, users.is_active AS users_is_active, users.last_login AS users_last_login, users.created_at AS users_created_at, users.updated_at AS users_updated_at -FROM users -WHERE users.username = %(username_1)s - LIMIT %(param_1)s] -[parameters: {'username_1': 'admin', 'param_1': 1}] + File "D:\Programs\Python\Python311\Lib\site-packages\websockets\asyncio\server.py", line 376, in conn_handler + await self.handler(connection) + ^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: WebSocketServer.start_server..handle_client_with_cors() missing 1 required positional argument: 'path' +2025-12-08 00:24:07,843 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:24:07] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:24:11,647 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:24:11] "GET /api/analytics HTTP/1.1" 200 - +2025-12-08 00:24:13,789 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:24:13] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:24:36,370 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:24:36] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-08 00:24:43,922 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:24:43] "GET /api/analytics HTTP/1.1" 200 - +2025-12-08 00:24:59,515 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:24:59] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-08 00:24:59,682 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:24:59] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:25:00,499 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:25:00] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:25:05,585 - src.core.database - WARNING - 数据库连接丢失,重试 1/3: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') (Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-10-31 12:43:01,706 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:43:01] "POST /api/auth/login HTTP/1.1" 500 - -2025-10-31 12:43:09,639 - src.core.database - ERROR - 数据库操作失败: (pymysql.err.OperationalError) (1054, "Unknown column 'users.is_active' in 'field list'") -[SQL: SELECT users.id AS users_id, users.username AS users_username, users.email AS users_email, users.password_hash AS users_password_hash, users.`role` AS users_role, users.region AS users_region, users.is_active AS users_is_active, users.last_login AS users_last_login, users.created_at AS users_created_at, users.updated_at AS users_updated_at -FROM users -WHERE users.username = %(username_1)s - LIMIT %(param_1)s] -[parameters: {'username_1': 'admin', 'param_1': 1}] +2025-12-08 00:25:05,687 - src.analytics.alert_system - ERROR - 获取活跃预警失败: generator didn't stop +2025-12-08 00:25:11,319 - src.core.database - WARNING - 数据库连接丢失,重试 1/3: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') (Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-10-31 12:43:09,639 - src.web.blueprints.auth - ERROR - 登录失败: (pymysql.err.OperationalError) (1054, "Unknown column 'users.is_active' in 'field list'") -[SQL: SELECT users.id AS users_id, users.username AS users_username, users.email AS users_email, users.password_hash AS users_password_hash, users.`role` AS users_role, users.region AS users_region, users.is_active AS users_is_active, users.last_login AS users_last_login, users.created_at AS users_created_at, users.updated_at AS users_updated_at -FROM users -WHERE users.username = %(username_1)s - LIMIT %(param_1)s] -[parameters: {'username_1': 'admin', 'param_1': 1}] +2025-12-08 00:25:11,420 - src.analytics.alert_system - ERROR - 获取活跃预警失败: generator didn't stop +2025-12-08 00:25:16,438 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:25:16] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:25:16,439 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:25:16] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-08 00:25:17,435 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:25:17] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:25:18,198 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:25:18] "GET /api/workorders HTTP/1.1" 200 - +2025-12-08 00:25:19,898 - src.core.database - WARNING - 数据库连接丢失,重试 1/3: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') (Background on this error at: https://sqlalche.me/e/20/e3q8) -Traceback (most recent call last): - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context - self.dialect.do_execute( - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\default.py", line 951, in do_execute - cursor.execute(statement, parameters) - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\cursors.py", line 153, in execute - result = self._query(query) - ^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\cursors.py", line 322, in _query - conn.query(q) - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\connections.py", line 575, in query - self._affected_rows = self._read_query_result(unbuffered=unbuffered) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\connections.py", line 826, in _read_query_result - result.read() - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\connections.py", line 1203, in read - first_packet = self.connection._read_packet() - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\connections.py", line 782, in _read_packet - packet.raise_for_error() - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error - err.raise_mysql_exception(self._data) - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception - raise errorclass(errno, errval) -pymysql.err.OperationalError: (1054, "Unknown column 'users.is_active' in 'field list'") - -The above exception was the direct cause of the following exception: - -Traceback (most recent call last): - File "d:\code\tsp-assistant\src\web\blueprints\auth.py", line 45, in login - user = db_session.query(User).filter(User.username == username).first() - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\orm\query.py", line 2759, in first - return self.limit(1)._iter().first() # type: ignore - ^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\orm\query.py", line 2857, in _iter - result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( - ^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2351, in execute - return self._execute_internal( - ^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2249, in _execute_internal - result: Result[Any] = compile_state_cls.orm_execute_statement( - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\orm\context.py", line 306, in orm_execute_statement - result = conn.execute( - ^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1419, in execute - return meth( - ^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\sql\elements.py", line 526, in _execute_on_connection - return connection._execute_clauseelement( - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1641, in _execute_clauseelement - ret = self._execute_context( - ^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1846, in _execute_context - return self._exec_single_context( - ^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1986, in _exec_single_context - self._handle_dbapi_exception( - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 2355, in _handle_dbapi_exception - raise sqlalchemy_exception.with_traceback(exc_info[2]) from e - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context - self.dialect.do_execute( - File "D:\code\tsp-assistant\.venv\Lib\site-packages\sqlalchemy\engine\default.py", line 951, in do_execute - cursor.execute(statement, parameters) - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\cursors.py", line 153, in execute - result = self._query(query) - ^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\cursors.py", line 322, in _query - conn.query(q) - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\connections.py", line 575, in query - self._affected_rows = self._read_query_result(unbuffered=unbuffered) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\connections.py", line 826, in _read_query_result - result.read() - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\connections.py", line 1203, in read - first_packet = self.connection._read_packet() - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\connections.py", line 782, in _read_packet - packet.raise_for_error() - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\protocol.py", line 219, in raise_for_error - err.raise_mysql_exception(self._data) - File "D:\code\tsp-assistant\.venv\Lib\site-packages\pymysql\err.py", line 150, in raise_mysql_exception - raise errorclass(errno, errval) -sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'users.is_active' in 'field list'") -[SQL: SELECT users.id AS users_id, users.username AS users_username, users.email AS users_email, users.password_hash AS users_password_hash, users.`role` AS users_role, users.region AS users_region, users.is_active AS users_is_active, users.last_login AS users_last_login, users.created_at AS users_created_at, users.updated_at AS users_updated_at -FROM users -WHERE users.username = %(username_1)s - LIMIT %(param_1)s] -[parameters: {'username_1': 'admin', 'param_1': 1}] +2025-12-08 00:25:19,898 - src.analytics.alert_system - ERROR - 获取预警统计失败: generator didn't stop after throw() +2025-12-08 00:25:20,122 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:25:20] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-08 00:25:24,770 - src.core.database - WARNING - 数据库连接丢失,重试 1/3: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') (Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-10-31 12:43:09,654 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:43:09] "POST /api/auth/login HTTP/1.1" 500 - -2025-10-31 12:48:22,420 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 12:48:22,420 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 12:48:24,792 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 12:48:26,053 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-31 12:48:26,060 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-31 12:48:26,118 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-31 12:48:26,120 - werkzeug - INFO - Press CTRL+C to quit -2025-10-31 12:48:26,308 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 12:48:26,481 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-31 12:48:26,486 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-31 12:48:26,487 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-31 12:48:36,866 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:48:36] "POST /api/auth/login HTTP/1.1" 401 - -2025-10-31 12:49:24,914 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:49:24] "POST /api/auth/login HTTP/1.1" 401 - -2025-10-31 12:49:27,309 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:49:27] "GET /login HTTP/1.1" 200 - -2025-10-31 12:49:34,349 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 12:49:34] "POST /api/auth/login HTTP/1.1" 401 - -2025-10-31 13:01:47,457 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 13:01:47,457 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 13:01:53,606 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 13:01:55,009 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-31 13:01:55,009 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-31 13:01:55,076 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-31 13:01:55,077 - werkzeug - INFO - Press CTRL+C to quit -2025-10-31 13:01:55,910 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 13:01:56,416 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-31 13:01:56,423 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-31 13:01:56,423 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-31 13:01:58,044 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:01:58] "GET / HTTP/1.1" 302 - -2025-10-31 13:01:58,062 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:01:58] "GET /login HTTP/1.1" 200 - -2025-10-31 13:02:05,656 - src.web.blueprints.auth - INFO - 登录尝试:用户名=admin -2025-10-31 13:02:06,306 - src.web.blueprints.auth - INFO - 密码验证通过:用户 admin -2025-10-31 13:02:07,605 - src.web.blueprints.auth - INFO - Session创建成功:用户 admin, 角色 admin -2025-10-31 13:02:07,607 - src.web.blueprints.auth - INFO - 用户 admin 登录成功 -2025-10-31 13:02:08,097 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:02:08] "POST /api/auth/login HTTP/1.1" 200 - -2025-10-31 13:02:08,131 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:02:08] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:02:08,204 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:02:08] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:02:08,220 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:02:08] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:02:08,220 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:02:08] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-31 13:02:08,259 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:02:08] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:02:24,434 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:02:24] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:02:24,451 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:02:24] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:02:24,455 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:02:24] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:02:24,458 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:02:24] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-31 13:02:24,466 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:02:24] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:02:41,273 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:02:41] "GET /login HTTP/1.1" 200 - -2025-10-31 13:09:30,301 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 13:09:30,301 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 13:09:33,057 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 13:09:34,598 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-31 13:09:34,598 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-31 13:09:34,674 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-31 13:09:34,675 - werkzeug - INFO - Press CTRL+C to quit -2025-10-31 13:09:34,893 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 13:09:35,068 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-31 13:09:35,084 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-31 13:09:35,084 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-31 13:09:56,870 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:09:56] "GET /dashboard HTTP/1.1" 302 - -2025-10-31 13:09:56,870 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:09:56] "GET /login HTTP/1.1" 200 - -2025-10-31 13:09:58,797 - src.web.blueprints.auth - INFO - 登录尝试:用户名=admin -2025-10-31 13:09:59,072 - src.web.blueprints.auth - INFO - 密码验证通过:用户 admin -2025-10-31 13:09:59,537 - src.web.blueprints.auth - INFO - Session创建成功:用户 admin, 角色 admin -2025-10-31 13:09:59,537 - src.web.blueprints.auth - INFO - 用户 admin 登录成功 -2025-10-31 13:09:59,719 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:09:59] "POST /api/auth/login HTTP/1.1" 200 - -2025-10-31 13:09:59,758 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:09:59] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:09:59,829 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:09:59] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:09:59,872 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:09:59] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:09:59,874 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:09:59] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-31 13:09:59,880 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:09:59] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:10:08,046 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:08] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:10:08,071 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:08] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:10:08,079 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:08] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:10:08,081 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:08] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-31 13:10:08,090 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:08] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:10:08,477 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:08] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:10:08,503 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:08] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:10:08,523 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:08] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-31 13:10:08,524 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:08] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:10:08,530 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:08] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:10:11,997 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:11] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:10:12,033 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:12] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:10:12,038 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:12] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:10:12,039 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:12] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-31 13:10:12,047 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:12] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:10:26,711 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:26] "GET /dashboard/settings HTTP/1.1" 404 - -2025-10-31 13:10:31,609 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:31] "GET /settings HTTP/1.1" 404 - -2025-10-31 13:10:33,562 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:33] "GET /dashboard/settings HTTP/1.1" 404 - -2025-10-31 13:10:36,311 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:36] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:10:36,339 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:10:36] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:12:01,745 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:12:01] "GET /index HTTP/1.1" 404 - -2025-10-31 13:13:36,482 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:13:36] "GET /chat HTTP/1.1" 200 - -2025-10-31 13:13:36,525 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:13:36] "GET /static/js/chat.js HTTP/1.1" 200 - -2025-10-31 13:13:42,132 - websockets.server - INFO - connection open -2025-10-31 13:13:42,132 - src.web.websocket_server - INFO - 客户端连接: ('::1', 50207, 0, 0) -2025-10-31 13:13:42,143 - src.dialogue.realtime_chat - INFO - 创建新会话: session_user_001_1761887622 -2025-10-31 13:13:44,228 - src.knowledge_base.knowledge_manager - INFO - 搜索查询 'APP显示车辆信息错误' 返回 1 个结果 -2025-10-31 13:13:47,831 - src.core.llm_client - INFO - API请求成功 -2025-10-31 13:14:03,097 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:14:03] "GET /feishu HTTP/1.1" 404 - -2025-10-31 13:14:03,132 - src.web.websocket_server - INFO - 客户端断开: ('::1', 50207, 0, 0) -2025-10-31 13:14:10,964 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:14:10] "GET /alert HTTP/1.1" 404 - -2025-10-31 13:14:15,050 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:14:15] "GET /feishu HTTP/1.1" 404 - -2025-10-31 13:14:15,220 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:14:15] "GET /chat HTTP/1.1" 200 - -2025-10-31 13:14:15,260 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:14:15] "GET /static/js/chat.js HTTP/1.1" 304 - -2025-10-31 13:14:16,060 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:14:16] "GET /index HTTP/1.1" 404 - -2025-10-31 13:14:16,603 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:14:16] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:14:16,649 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:14:16] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:14:16,661 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:14:16] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-31 13:14:16,663 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:14:16] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:14:16,692 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:14:16] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:19:02,767 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 13:19:02,767 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 13:19:05,918 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 13:19:07,029 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-31 13:19:07,035 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-31 13:19:07,095 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-31 13:19:07,095 - werkzeug - INFO - Press CTRL+C to quit -2025-10-31 13:19:07,364 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 13:19:07,596 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-31 13:19:07,612 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-31 13:19:07,612 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-31 13:19:13,296 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:19:13] "GET /dashboard HTTP/1.1" 302 - -2025-10-31 13:19:13,304 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:19:13] "GET /login HTTP/1.1" 200 - -2025-10-31 13:19:14,579 - src.web.blueprints.auth - INFO - 登录尝试:用户名=admin -2025-10-31 13:19:14,892 - src.web.blueprints.auth - INFO - 密码验证通过:用户 admin -2025-10-31 13:19:15,481 - src.web.blueprints.auth - INFO - Session创建成功:用户 admin, 角色 admin -2025-10-31 13:19:15,482 - src.web.blueprints.auth - INFO - 用户 admin 登录成功 -2025-10-31 13:19:15,723 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:19:15] "POST /api/auth/login HTTP/1.1" 200 - -2025-10-31 13:19:15,752 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:19:15] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:19:15,834 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:19:15] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:19:15,856 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:19:15] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:19:15,857 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:19:15] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-31 13:19:15,867 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:19:15] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:19:16,233 - src.web.blueprints.auth - INFO - 获取用户信息:user_id=2 -2025-10-31 13:19:16,463 - src.web.blueprints.auth - INFO - 获取用户信息成功:username=admin -2025-10-31 13:19:16,727 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:19:16] "GET /api/auth/current-user HTTP/1.1" 200 - -2025-10-31 13:19:16,733 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:19:16] "GET /api/system/health HTTP/1.1" 404 - -2025-10-31 13:19:46,771 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:19:46] "GET /api/system/health HTTP/1.1" 404 - -2025-10-31 13:20:15,384 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:20:15] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:20:15,414 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:20:15] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:20:15,420 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:20:15] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:20:15,421 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:20:15] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-31 13:20:15,431 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:20:15] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:20:15,653 - src.web.blueprints.auth - INFO - 获取用户信息:user_id=2 -2025-10-31 13:20:15,889 - src.web.blueprints.auth - INFO - 获取用户信息成功:username=admin -2025-10-31 13:20:16,105 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:20:16] "GET /api/auth/current-user HTTP/1.1" 200 - -2025-10-31 13:20:16,105 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:20:16] "GET /api/system/health HTTP/1.1" 404 - -2025-10-31 13:20:46,845 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:20:46] "GET /api/system/health HTTP/1.1" 404 - -2025-10-31 13:21:16,123 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:21:16] "GET /api/system/health HTTP/1.1" 404 - -2025-10-31 13:21:46,795 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:21:46] "GET /api/system/health HTTP/1.1" 404 - -2025-10-31 13:22:16,810 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:22:16] "GET /api/system/health HTTP/1.1" 404 - -2025-10-31 13:22:46,795 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:22:46] "GET /api/system/health HTTP/1.1" 404 - -2025-10-31 13:26:13,386 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 13:26:13,386 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 13:26:18,852 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 13:26:20,394 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-31 13:26:20,410 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-31 13:26:20,473 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-31 13:26:20,474 - werkzeug - INFO - Press CTRL+C to quit -2025-10-31 13:26:20,940 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 13:26:21,389 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-31 13:26:21,395 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-31 13:26:21,396 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-31 13:26:23,582 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:26:23] "GET /dashboard HTTP/1.1" 302 - -2025-10-31 13:26:23,582 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:26:23] "GET /login HTTP/1.1" 200 - -2025-10-31 13:26:24,871 - src.web.blueprints.auth - INFO - 登录尝试:用户名=admin -2025-10-31 13:26:25,381 - src.web.blueprints.auth - INFO - 密码验证通过:用户 admin -2025-10-31 13:26:26,499 - src.web.blueprints.auth - INFO - Session创建成功:用户 admin, 角色 admin -2025-10-31 13:26:26,500 - src.web.blueprints.auth - INFO - 用户 admin 登录成功 -2025-10-31 13:26:26,934 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:26:26] "POST /api/auth/login HTTP/1.1" 200 - -2025-10-31 13:26:26,955 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:26:26] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:26:27,045 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:26:27] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:26:27,055 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:26:27] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:26:27,055 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:26:27] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-31 13:26:27,073 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:26:27] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:26:27,193 - src.web.blueprints.auth - INFO - 获取用户信息:user_id=2 -2025-10-31 13:26:27,630 - src.web.blueprints.auth - INFO - 获取用户信息成功:username=admin -2025-10-31 13:26:28,520 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:26:28] "GET /api/auth/current-user HTTP/1.1" 200 - -2025-10-31 13:26:29,229 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 13:26:30,345 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 13:26:37,214 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:26:37] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-31 13:26:38,300 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:26:38] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-31 13:28:31,774 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:31] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:28:31,799 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:31] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:28:31,807 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:31] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:28:31,813 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:31] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-31 13:28:31,815 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:31] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:28:32,057 - src.web.blueprints.auth - INFO - 获取用户信息:user_id=2 -2025-10-31 13:28:32,489 - src.web.blueprints.auth - INFO - 获取用户信息成功:username=admin -2025-10-31 13:28:32,871 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:32] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:28:32,902 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:32] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:28:32,913 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:32] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:28:32,913 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:32] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-31 13:28:32,922 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:32] "GET /api/auth/current-user HTTP/1.1" 200 - -2025-10-31 13:28:32,925 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:32] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:28:37,660 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:37] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:28:37,701 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:37] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:28:37,706 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:37] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:28:37,708 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:37] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-31 13:28:37,721 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:37] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:28:40,801 - src.web.blueprints.auth - INFO - 登录尝试:用户名=admin -2025-10-31 13:28:41,058 - src.web.blueprints.auth - INFO - 获取用户信息:user_id=2 -2025-10-31 13:28:41,166 - src.web.blueprints.auth - INFO - 密码验证通过:用户 admin -2025-10-31 13:28:41,491 - src.web.blueprints.auth - INFO - 获取用户信息成功:username=admin -2025-10-31 13:28:41,725 - src.web.blueprints.auth - INFO - Session创建成功:用户 admin, 角色 admin -2025-10-31 13:28:41,725 - src.web.blueprints.auth - INFO - 用户 admin 登录成功 -2025-10-31 13:28:41,923 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:41] "GET /api/auth/current-user HTTP/1.1" 200 - -2025-10-31 13:28:41,939 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:41] "POST /api/auth/login HTTP/1.1" 200 - -2025-10-31 13:28:41,958 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:41] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:28:42,000 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:42] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:28:42,004 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:42] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:28:42,022 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:42] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:28:42,023 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:42] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-31 13:28:42,222 - src.web.blueprints.auth - INFO - 获取用户信息:user_id=2 -2025-10-31 13:28:42,453 - src.web.blueprints.auth - INFO - 获取用户信息成功:username=admin -2025-10-31 13:28:42,685 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:42] "GET /api/auth/current-user HTTP/1.1" 200 - -2025-10-31 13:28:57,659 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:57] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:28:57,696 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:57] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:28:57,709 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:57] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:28:57,710 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:57] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-31 13:28:57,724 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:57] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:28:57,946 - src.web.blueprints.auth - INFO - 获取用户信息:user_id=2 -2025-10-31 13:28:58,395 - src.web.blueprints.auth - INFO - 获取用户信息成功:username=admin -2025-10-31 13:28:58,822 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:28:58] "GET /api/auth/current-user HTTP/1.1" 200 - -2025-10-31 13:29:52,429 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:29:52] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:29:52,484 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:29:52] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:29:52,485 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:29:52] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 200 - -2025-10-31 13:29:52,486 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:29:52] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:29:52,500 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:29:52] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:29:52,708 - src.web.blueprints.auth - INFO - 获取用户信息:user_id=2 -2025-10-31 13:29:52,945 - src.web.blueprints.auth - INFO - 获取用户信息成功:username=admin -2025-10-31 13:29:53,173 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:29:53] "GET /api/auth/current-user HTTP/1.1" 200 - -2025-10-31 13:29:59,774 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-10-31 13:29:59,774 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-10-31 13:30:05,973 - src.core.database - INFO - 数据库初始化成功 -2025-10-31 13:30:07,165 - src.core.backup_manager - INFO - 备份数据库初始化成功: tsp_assistant.db -2025-10-31 13:30:07,173 - src.integrations.config_manager - INFO - 配置加载成功 -2025-10-31 13:30:07,239 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. - * Running on all addresses (0.0.0.0) - * Running on http://127.0.0.1:5000 - * Running on http://10.210.229.242:5000 -2025-10-31 13:30:07,240 - werkzeug - INFO - Press CTRL+C to quit -2025-10-31 13:30:07,759 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 13:30:08,243 - src.web.websocket_server - INFO - 启动WebSocket服务器: ws://localhost:8765 -2025-10-31 13:30:08,263 - websockets.server - INFO - server listening on 127.0.0.1:8765 -2025-10-31 13:30:08,263 - websockets.server - INFO - server listening on [::1]:8765 -2025-10-31 13:30:12,599 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:30:12] "GET /dashboard HTTP/1.1" 302 - -2025-10-31 13:30:12,606 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:30:12] "GET /login HTTP/1.1" 200 - -2025-10-31 13:30:13,778 - src.web.blueprints.auth - INFO - 登录尝试:用户名=admin -2025-10-31 13:30:14,392 - src.web.blueprints.auth - INFO - 密码验证通过:用户 admin -2025-10-31 13:30:15,631 - src.web.blueprints.auth - INFO - Session创建成功:用户 admin, 角色 admin -2025-10-31 13:30:15,631 - src.web.blueprints.auth - INFO - 用户 admin 登录成功 -2025-10-31 13:30:16,126 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:30:16] "POST /api/auth/login HTTP/1.1" 200 - -2025-10-31 13:30:16,158 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:30:16] "GET /dashboard HTTP/1.1" 200 - -2025-10-31 13:30:16,292 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:30:16] "GET /static/js/dashboard.js?v=1.0.9 HTTP/1.1" 304 - -2025-10-31 13:30:16,292 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:30:16] "GET /static/css/design-system.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:30:16,292 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:30:16] "GET /static/css/style.css?v=1.0.0 HTTP/1.1" 304 - -2025-10-31 13:30:16,292 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:30:16] "GET /static/js/chat.js?v=1.0.0 HTTP/1.1" 200 - -2025-10-31 13:30:16,309 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:30:16] "GET /static/css/design-system.css HTTP/1.1" 304 - -2025-10-31 13:30:16,465 - src.web.blueprints.auth - INFO - 获取用户信息:user_id=2 -2025-10-31 13:30:16,963 - src.web.blueprints.auth - INFO - 获取用户信息成功:username=admin -2025-10-31 13:30:17,462 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:30:17] "GET /api/auth/current-user HTTP/1.1" 200 - -2025-10-31 13:30:17,990 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 13:30:19,014 - src.knowledge_base.knowledge_manager - INFO - 向量化器加载成功,包含 24 个条目 -2025-10-31 13:30:19,988 - websockets.server - INFO - connection open -2025-10-31 13:30:19,988 - src.web.websocket_server - INFO - 客户端连接: ('::1', 51692, 0, 0) -2025-10-31 13:30:19,992 - src.dialogue.realtime_chat - INFO - 创建新会话: session_user_001_1761888619 -2025-10-31 13:31:03,239 - src.dialogue.realtime_chat - INFO - 结束会话: session_user_001_1761888619 -2025-10-31 13:31:08,610 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:31:08] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-10-31 13:31:09,889 - werkzeug - INFO - 127.0.0.1 - - [31/Oct/2025 13:31:09] "GET /api/alerts?page=1&per_page=10 HTTP/1.1" 200 - -2025-11-05 10:11:10,804 - __main__ - INFO - 正在启动TSP智能助手综合管理平台... -2025-11-05 10:11:10,804 - __main__ - INFO - 跳过系统检查,直接启动服务... -2025-11-05 10:11:21,533 - src.core.database - ERROR - 数据库初始化失败: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on '43.134.68.207' (timed out)") +2025-12-08 00:25:24,873 - src.analytics.alert_system - ERROR - 获取活跃预警失败: generator didn't stop +2025-12-08 00:25:32,839 - src.core.database - WARNING - 数据库连接丢失,重试 1/3: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') (Background on this error at: https://sqlalche.me/e/20/e3q8) -2025-11-05 10:11:21,534 - __main__ - ERROR - 启动失败: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on '43.134.68.207' (timed out)") +2025-12-08 00:25:32,923 - src.analytics.alert_system - ERROR - 获取活跃预警失败: generator didn't stop +2025-12-08 00:25:44,871 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:25:44] "GET /api/settings HTTP/1.1" 200 - +2025-12-08 00:25:51,120 - src.core.database - WARNING - 数据库连接丢失,重试 1/3: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') (Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-08 00:25:51,120 - src.web.error_handlers - ERROR - 未处理错误 get_health: generator didn't stop after throw() +2025-12-08 00:25:51,206 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:25:51] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-08 00:26:09,914 - src.core.database - WARNING - 数据库连接丢失,重试 1/3: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-08 00:26:09,937 - src.web.error_handlers - ERROR - 未处理错误 get_health: generator didn't stop +2025-12-08 00:26:13,585 - src.core.database - WARNING - 数据库连接丢失,重试 1/3: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-08 00:26:13,585 - src.analytics.alert_system - ERROR - 获取预警统计失败: generator didn't stop after throw() +2025-12-08 00:26:15,404 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:26:15] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:26:18,653 - src.core.database - WARNING - 数据库连接丢失,重试 1/3: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-08 00:26:18,670 - src.web.error_handlers - ERROR - 未处理错误 get_health: generator didn't stop after throw() +2025-12-08 00:26:20,462 - src.core.database - WARNING - 数据库连接丢失,重试 1/3: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') +(Background on this error at: https://sqlalche.me/e/20/e3q8) +2025-12-08 00:26:20,487 - src.analytics.alert_system - ERROR - 获取活跃预警失败: generator didn't stop after throw() +2025-12-08 00:26:34,821 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:26:34] "GET /api/analytics HTTP/1.1" 200 - +2025-12-08 00:26:56,976 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:26:56] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:26:59,704 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:26:59] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:27:07,498 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:27:07] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-08 00:27:22,552 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:27:22] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:27:30,169 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:27:30] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:27:31,733 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:27:31] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:27:53,602 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:27:53] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:27:55,401 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:27:55] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:28:17,477 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:28:17] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:28:20,151 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:28:20] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:28:34,062 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:28:34] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:28:34,681 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:28:34] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:28:48,267 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:28:48] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:28:56,519 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:28:56] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:29:02,536 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:29:02] "GET /api/chat/sessions HTTP/1.1" 200 - +2025-12-08 00:29:06,850 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:29:06] "GET /api/alerts?per_page=1000 HTTP/1.1" 200 - +2025-12-08 00:29:07,956 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:29:07] "GET /api/workorders HTTP/1.1" 200 - +2025-12-08 00:29:09,800 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:29:09] "GET /api/knowledge/stats HTTP/1.1" 200 - +2025-12-08 00:29:17,108 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:29:17] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:29:17,537 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:29:17] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:30:00,884 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:30:00] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:30:03,133 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:30:03] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:30:07,463 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:30:07] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:30:21,591 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:30:21] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:30:38,600 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:30:38] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:30:39,154 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:30:39] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:30:50,140 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:30:50] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:30:59,201 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:30:59] "GET /api/analytics?timeRange=30&dimension=workorders HTTP/1.1" 200 - +2025-12-08 00:30:59,228 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:30:59] "GET /api/settings HTTP/1.1" 200 - +2025-12-08 00:31:22,933 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:31:22] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:31:24,516 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:31:24] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:31:32,283 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:31:32] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:31:42,001 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:31:42] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:31:50,641 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:31:50] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:32:11,064 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:32:11] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:32:27,720 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:32:27] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:32:30,013 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:32:30] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:32:54,831 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:32:54] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:33:07,031 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:33:07] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:33:07,910 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:33:07] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:33:13,658 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:33:13] "GET /api/analytics?days=7&dimension=performance HTTP/1.1" 200 - +2025-12-08 00:33:14,420 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:33:14] "GET /api/alerts HTTP/1.1" 200 - +2025-12-08 00:33:27,392 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:33:27] "GET /api/monitor/status HTTP/1.1" 200 - +2025-12-08 00:33:29,903 - werkzeug - INFO - 127.0.0.1 - - [08/Dec/2025 00:33:29] "GET /api/alerts HTTP/1.1" 200 - diff --git a/logs/tsp_assistant.log b/logs/tsp_assistant.log deleted file mode 100644 index 173b41d..0000000 --- a/logs/tsp_assistant.log +++ /dev/null @@ -1,70 +0,0 @@ -2025-09-19 18:26:27,748 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V001 - location -2025-09-19 18:26:27,752 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V001 - status -2025-09-19 18:26:27,756 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V001 - battery -2025-09-19 18:26:27,759 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V001 - engine -2025-09-19 18:26:27,764 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V002 - location -2025-09-19 18:26:27,768 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V002 - status -2025-09-19 18:26:27,772 - src.vehicle.vehicle_data_manager - INFO - 添加车辆数据成功: V002 - fault -2025-09-19 18:26:27,773 - src.vehicle.vehicle_data_manager - INFO - 示例车辆数据添加成功 -2025-09-19 18:53:30,187 - sqlalchemy.pool.impl.QueuePool - ERROR - Exception during reset or similar -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\sqlalchemy\pool\base.py", line 985, in _finalize_fairy - fairy._reset( - ~~~~~~~~~~~~^ - pool, - ^^^^^ - ...<2 lines>... - asyncio_safe=can_manipulate_connection, - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ) - ^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\sqlalchemy\pool\base.py", line 1433, in _reset - pool._dialect.do_rollback(self) - ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\sqlalchemy\engine\default.py", line 711, in do_rollback - dbapi_connection.rollback() - ~~~~~~~~~~~~~~~~~~~~~~~~~^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\pymysql\connections.py", line 505, in rollback - self._read_ok_packet() - ~~~~~~~~~~~~~~~~~~~~^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\pymysql\connections.py", line 465, in _read_ok_packet - pkt = self._read_packet() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\pymysql\connections.py", line 751, in _read_packet - packet_header = self._read_bytes(4) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\pymysql\connections.py", line 789, in _read_bytes - data = self._rfile.read(num_bytes) - File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.13_3.13.2032.0_x64__qbz5n2kfra8p0\Lib\socket.py", line 719, in readinto - return self._sock.recv_into(b) - ~~~~~~~~~~~~~~~~~~~~^^^ -KeyboardInterrupt -2025-09-19 18:54:31,332 - sqlalchemy.pool.impl.QueuePool - ERROR - Exception during reset or similar -Traceback (most recent call last): - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\sqlalchemy\pool\base.py", line 985, in _finalize_fairy - fairy._reset( - ~~~~~~~~~~~~^ - pool, - ^^^^^ - ...<2 lines>... - asyncio_safe=can_manipulate_connection, - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ) - ^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\sqlalchemy\pool\base.py", line 1433, in _reset - pool._dialect.do_rollback(self) - ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\sqlalchemy\engine\default.py", line 711, in do_rollback - dbapi_connection.rollback() - ~~~~~~~~~~~~~~~~~~~~~~~~~^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\pymysql\connections.py", line 505, in rollback - self._read_ok_packet() - ~~~~~~~~~~~~~~~~~~~~^^ - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\pymysql\connections.py", line 465, in _read_ok_packet - pkt = self._read_packet() - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\pymysql\connections.py", line 751, in _read_packet - packet_header = self._read_bytes(4) - File "C:\Users\Administrator.CHERY-NOT-8217.000\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\pymysql\connections.py", line 789, in _read_bytes - data = self._rfile.read(num_bytes) - File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.13_3.13.2032.0_x64__qbz5n2kfra8p0\Lib\socket.py", line 719, in readinto - return self._sock.recv_into(b) - ~~~~~~~~~~~~~~~~~~~~^^^ -KeyboardInterrupt diff --git a/simple_git_push.bat b/simple_git_push.bat deleted file mode 100644 index 2e9ac70..0000000 --- a/simple_git_push.bat +++ /dev/null @@ -1,108 +0,0 @@ -@echo off -chcp 65001 >nul -setlocal enabledelayedexpansion - -echo ======================================== -echo 简单Git推送工具 -echo ======================================== -echo. - -:: 1. 显示Git状态 -echo [1] Git状态: -git status --short -echo. - -:: 2. 显示远程仓库 -echo [2] 远程仓库: -git remote -v -if %errorlevel% neq 0 ( - echo 错误: 未配置远程仓库 - pause - exit /b 1 -) -echo. - -:: 3. 显示当前分支 -echo [3] 当前分支: -for /f "tokens=*" %%b in ('git branch --show-current 2^>nul') do set branch=%%b -if "!branch!"=="" ( - echo 警告: 无法获取分支名称,尝试使用main - set branch=main -) -echo 分支: !branch! -echo. - -:: 4. 检查是否有未提交的更改 -echo [4] 检查未提交的更改... -git diff --quiet -set has_uncommitted=%errorlevel% -git diff --cached --quiet -set has_staged=%errorlevel% - -if %has_uncommitted% neq 0 ( - echo 有未暂存的更改 -) -if %has_staged% neq 0 ( - echo 有已暂存的更改 -) -if %has_uncommitted% equ 0 if %has_staged% equ 0 ( - echo 所有更改已提交 -) -echo. - -:: 5. 尝试推送 -echo [5] 开始推送... -echo 命令: git push origin !branch! -echo. - -git push origin !branch! 2>&1 | findstr /v "^$" -set push_error=!errorlevel! - -if !push_error! equ 0 ( - echo. - echo ======================================== - echo 推送成功! - echo ======================================== -) else ( - echo. - echo ======================================== - echo 推送失败!错误码: !push_error! - echo ======================================== - echo. - echo 尝试设置上游并推送... - git push -u origin !branch! 2>&1 | findstr /v "^$" - set push_u_error=!errorlevel! - - if !push_u_error! equ 0 ( - echo. - echo ======================================== - echo 推送成功(已设置上游)! - echo ======================================== - ) else ( - echo. - echo ======================================== - echo 推送仍然失败 - echo ======================================== - echo. - echo 常见问题和解决方案: - echo. - echo 1. 认证问题: - echo - 检查SSH密钥: ssh -T git@github.com (GitHub) - echo - 检查SSH密钥: ssh -T git@gitee.com (Gitee) - echo - 或使用HTTPS + Personal Access Token - echo. - echo 2. 远程仓库地址: - git config --get remote.origin.url - echo. - echo 3. 分支冲突: - echo - 先拉取: git pull origin !branch! --rebase - echo - 解决冲突后推送: git push origin !branch! - echo. - echo 4. 检查网络连接和远程仓库权限 - echo. - ) -) - -echo. -pause - diff --git a/src/__pycache__/__init__.cpython-311.pyc b/src/__pycache__/__init__.cpython-311.pyc index 1a8ee36e8c4fa720a83aa59639b14026354a2080..74e1682d2c5035293ef1dd2abf6fa94bcc210147 100644 GIT binary patch delta 39 tcmX@lc!H64IWI340}xaxnP%orIX@*erlhz)H?g=lv$!NNZ(_S607?`O Am;e9( diff --git a/src/__pycache__/agent_assistant.cpython-311.pyc b/src/__pycache__/agent_assistant.cpython-311.pyc index eb66b0502fe26f9da46e597d2a711aa2962e5273..19251cc57d42b93ba186712c9d62939720f10abd 100644 GIT binary patch delta 45 zcmeC)!q~Efk#9LKFBbz4R4JKe9(UNt_k@*C)x|0%IX@*eCb76Uvv@N*8%qcPE}{*4 delta 51 zcmZqK!q~lqk#9LKFBbz4ERbc%6t>^U_k>kcC&elzIX@*erlhz)H?g=lv$!NNZxb6! F2mpC&52FA8 diff --git a/src/__pycache__/main.cpython-311.pyc b/src/__pycache__/main.cpython-311.pyc index ac841dda5b8b4cbfff5e36e6614b7e192e7e27ac..62c38b47d327b1e8e51fdf777e2c7eb76ee3f0e2 100644 GIT binary patch delta 45 zcmaFzmhtXeM!w~|yj%=GP^Dy=`POeEUoID)l#5kNa(+r`Ok#0yX7T0;Tp>9CT}}^6 delta 52 zcmccnmhs73M!w~|yj%=G@bAsXjHf;u`Et2L621I9A|=K&2R delta 48 zcmZ3=x`vf^IWI340}vcGewMLsBkw*&QSB6~nB@GF)R>au0^P*o;>_Zb#JtHj8P5O! DZA%dc diff --git a/src/agent/__pycache__/agent_core.cpython-311.pyc b/src/agent/__pycache__/agent_core.cpython-311.pyc index 317864e7d52a34edda03ca71f2582d8ce5b21de9..a1e7abe7fb6ad90c51e2f4779d455a765ab0a755 100644 GIT binary patch delta 43 xcmexV`nr^FIWI340}xaxnPxU>ZRAsD=2LUAib>8-NsUP?F3v38?8Uso8~`B94R!zk delta 50 zcmaD|`l*y}IWI340}vcGewN{>xsgwuSyVU0DkeEUB{im`xIj0txHz-8Br$KZGxG{_ E0IWF?H2?qr diff --git a/src/agent/__pycache__/executor.cpython-311.pyc b/src/agent/__pycache__/executor.cpython-311.pyc index ef77c26dbbb762659e1cf41f4af421d4f436ae92..3621c86af2d3d94cea256a236ef68401b7bf254e 100644 GIT binary patch delta 45 zcmcb8gz?G|M!w~|yj%=GP^Dy=c|3R{Uoi)tii=fDa(+r`Ok#0yX7T1}97iJoOFR!Y delta 52 zcmca|gz@$fM!w~|yj%=GaM<`+MpfWOzG4nh?G&q+n3CcG-NfSJ%;J*7yv_X_ GMp HaK!)s+AI=W diff --git a/src/agent/__pycache__/llm_client.cpython-311.pyc b/src/agent/__pycache__/llm_client.cpython-311.pyc index 70c0b1d94720e8ddae926f080e72f0aed23eeffe..75ec8518d673e995724f6e5551517d67458ecf7f 100644 GIT binary patch delta 43 xcmcancd?FdIWI340}xaxnPz@h-pH52%%|pJ6_cEwk{Xj(T%1|Fxt;lv#4&0RZMbzN@`3=ae;1PadBpGNn+mS2Ih;_ E0K{$*X#fBK diff --git a/src/agent/__pycache__/planner.cpython-311.pyc b/src/agent/__pycache__/planner.cpython-311.pyc index d609fdcec1c72b27a452aff6ab71e3b903366837..4321995e347f79992d3b7146cf9826fa8964f4ff 100644 GIT binary patch delta 45 zcmdlwgK^yqM!w~|yj%=GP^Dy=`NMi6pCvn=vWrzra(+r`Ok#0yX7T12_M0vMEL;vV delta 52 zcmZ2CgK_H&M!w~|yj%=GaM<`+M!eNVK1+5{trV-6n3CcG-NfSJ%;J*7yv?EP GH(da(AQ6!O diff --git a/src/agent/__pycache__/reasoning_engine.cpython-311.pyc b/src/agent/__pycache__/reasoning_engine.cpython-311.pyc index 0847c1596bfe769659c61833403ece4be3db66a2..6a1c8e148244ab0fadae957cb2cd76b28d1836fa 100644 GIT binary patch delta 45 zcmeyhgz@tdM!w~|yj%=GP^Dy=dDV3zpAZ|Lj*C@Ha(+r`Ok#0yX7OfIHdh}2K(r0% delta 52 zcmeyogz?uBM!w~|yj%=GaM<`+#y97Ud_ruZ#wk`Y$@wX%F(t(Xx{1ZbnZ+fEd7Jgv GTzvrDI1&H= diff --git a/src/agent/__pycache__/tool_manager.cpython-311.pyc b/src/agent/__pycache__/tool_manager.cpython-311.pyc index 3093c4ec6aaab96ac8e01a80259b491ebcf6df64..7ee7fd23cc0bed45d1d8c95480f3b83869f68073 100644 GIT binary patch delta 45 zcmcb(n(@?XM!w~|yj%=GP^Dy=sq3_n?;i`FhKp59a(+r`Ok#0yX7Of4)(rswI2H~% delta 52 zcmX@Ln(^XlM!w~|yj%=GaM<`+MwP=xzJDyD`YBd1$@wX%F(t(Xx{1ZbnZ+fEd7GtJ HHv|9x+6NMS diff --git a/src/analytics/__pycache__/__init__.cpython-311.pyc b/src/analytics/__pycache__/__init__.cpython-311.pyc index c6e18c11a8ad3ee0b51fbd22a4a0502c128f31ee..cecf113cc6b3c591efa765ba63e5b9e9e01a6480 100644 GIT binary patch delta 39 tcmbQkIF*riIWI340}xaxnPv)1&QD2=Nh~hTES?zZ4gjyn3Vr|p delta 46 zcmbQrIERsUIWI340}vcGewM*Mk=IyMKgB90IX@*erlhz)H?g=lv$!NNZ=#<&04R|T AbpQYW diff --git a/src/analytics/__pycache__/ai_success_monitor.cpython-311.pyc b/src/analytics/__pycache__/ai_success_monitor.cpython-311.pyc index 6a2fa48f2b3a8dcd00a42805cbf0562d72ef8f40..8a64f0c456c14d516b90a19ee39725d34e32933c 100644 GIT binary patch delta 45 zcmZ2{nsLr)M!w~|yj%=GP^Dy=xh!TQ-$iCVBNwZfn8f1Z%;L>onAax)073{4 AZU6uP delta 52 zcmbPpnsM=IM!w~|yj%=GaM<`+hE>!?zKhJFmMK;-$@wX%F(t(Xx{1ZbnZ+fEd7Ixd HuTKO3&Set# diff --git a/src/analytics/__pycache__/alert_system.cpython-311.pyc b/src/analytics/__pycache__/alert_system.cpython-311.pyc index 36a9db1e678529170fb799e5d67689f499097e10..970afe5c8729caa695a8654be614bcb621d6e983 100644 GIT binary patch delta 45 zcmcb=oAJhOM!w~|yj%=GP^Dy=dBJrfA0soLj*C@Ha(+r`Ok#0yX7Oef=G{>MJ)jOa delta 52 zcmcbyoALf`M!w~|yj%=GaM<`+hJwpRK1OCy;}olyn3CcG-NfSJ%;J*7yv?%A GyQ2WUY!QC| diff --git a/src/analytics/__pycache__/analytics_manager.cpython-311.pyc b/src/analytics/__pycache__/analytics_manager.cpython-311.pyc index ac359cec6597242ab15c6d945ec1d64597876336..bec5df9a633607060819a90c230faaf14cef5491 100644 GIT binary patch delta 45 zcmey{$M~&}k#9LKFBbz4R4JKerWtSK%Vg#=bg_y_&QD2=Nh~hTEZ*G1{LvWzH=hoY delta 52 zcmey?$N0C8k#9LKFBbz495#NIVPUk9FOyl+BE>2uIX@*erlhz)H?g=lv$!NNZ*wd2 GM`r-X@)BDB diff --git a/src/analytics/__pycache__/monitor_service.cpython-311.pyc b/src/analytics/__pycache__/monitor_service.cpython-311.pyc index 655b41a80ac692b3ddcb73fcc18d453955af88ea..1ce6572b49e18c857c9849ede59bb61a8e77dd83 100644 GIT binary patch delta 43 xcmeCr>d4|-&dbZi00dP^rkS^uH}Yw)@ael)#U$saq{bu`7iSi4_GUR^000I}4G#bS delta 50 zcmeCk>d)d^&dbZi00f7PpJiNA+Q_HDB5Iam6_cEwk{VM|T%em+T%1{4l9;#Ih2@9= E0F>Ji0RR91 diff --git a/src/analytics/__pycache__/token_monitor.cpython-311.pyc b/src/analytics/__pycache__/token_monitor.cpython-311.pyc index 7b55cc7f7675d0fbbce4383593d2c8d21f22f6e2..5af707441a6e83478ce869ca59eb2e8c09bd24d5 100644 GIT binary patch delta 45 zcmZo#&iH#7Bj0jfUM>b8s8TY`G;`a?cbu6|*TpI(IX@*eCb76Uvv~6><{AC~FpCbG delta 52 zcmeypjIn7sBj0jfUM>b8IBfhZBgkbV-*IM9lN76%n3CcG-NfSJ%;J*7yv>i9 HXZQmE%Z(DP diff --git a/src/analytics/alert_system.py b/src/analytics/alert_system.py index e1f25cb..adf8bbd 100644 --- a/src/analytics/alert_system.py +++ b/src/analytics/alert_system.py @@ -167,6 +167,17 @@ class AlertSystem: except Exception as e: logger.error(f"检查规则 {rule_name} 失败: {e}") + # 如果规则检查失败,也可以考虑生成一个系统级别的预警 + system_alert = { + "rule_name": f"系统预警 - 规则检查失败: {rule_name}", + "alert_type": AlertType.SYSTEM.value, + "level": AlertLevel.ERROR.value, + "message": f"规则 \'{rule_name}\' 检查失败: {e}", + "data": {"error": str(e)}, + "timestamp": datetime.now().isoformat(), + "rule_id": "system_rule_check_failure" + } + self._save_alert(system_alert) # 保存系统预警 return triggered_alerts @@ -238,6 +249,8 @@ class AlertSystem: except Exception as e: logger.error(f"获取规则数据失败: {e}") + # 重新抛出异常,让上层调用者决定如何处理 + raise return data diff --git a/src/config/__pycache__/__init__.cpython-311.pyc b/src/config/__pycache__/__init__.cpython-311.pyc index cd5013270497d64482b36abb20608860629415b9..20e2ade4ffef61820a387d86dda7dd2888d3c837 100644 GIT binary patch delta 39 tcmbQqIEj&WIWI340}xaxnPv)1R^0qRIYPnd&B=Ji^PGB F004-yB)R|q diff --git a/src/config/__pycache__/unified_config.cpython-311.pyc b/src/config/__pycache__/unified_config.cpython-311.pyc index a0b5d92d753ea728ca7aa9b8cada3c47bd7eedda..0ce4eb2fc42ebb4b139a98a2d9e2bdaf1ca0b339 100644 GIT binary patch delta 516 zcmbQ)!nm!4k#9LKFBbz4tX^Q6S){R%kCT}bn=KTj_|FDElEb+QWc4L)rbtC-~c zl+>8S;^NHW&4Micj3z9F<*9kMI0}mL%Q90^i>j21vvrdVQj${B5)I7_EmBO(QWFy` zEX@rqEe(xL4b05a3=Ae0v$_ikfHdkBF14ZU|d6xOW6!V6gzAi!2s5MBE|r z?iX0xFS5Ab5L9k(?J&N;q6|bAS(G;)VY6U#)&?0T0U{(pgbs)RTcHbL=>dsbEJ^wK zIYkB_zBGuC0THqwLJLexw&$o~)SA4J#b)w1jta(GlZ!a_vKfP{jEu@$Elm8BLH8E@tgPG(|MntWeWd~&mB0)(~s zx2P8@H`t~qu$h|!q$7Eyz`+C#A+T$~Qeej$Y(A{f!-=e6a)7kV<}#!EER0H$9+d%{1P;*uIPj0Jsr~6#xJL delta 477 zcmdni!Z@>qk#9LKFBbz4XdnNVp{%}MtC-~c zl+>7#;sV{o;^NHWlEl2tTrB>K!fg2ksdS!l^2;()Qj2aeOzvfM=jJLbPtDUU zDJ@FMpZt_Hc`~b*h!AU9PJUuZkvh=2A}J7|F*%RT!cL~aqa*nOiwqE5WRbZcEZX4S z5qyC~6o@Xeh~5x!hse8MU~#|5;(kL=w!yW-_yUV85M5-E-TZ{jg3(zAWSj(ukOUFB zAOdWK9*Ct6ByO=J<>%)V8G`uIAVLO2$btxMFflovql!^`vLd_W{44e0cx> diff --git a/src/config/config.py b/src/config/config.py index a5d34e7..56fbe78 100644 --- a/src/config/config.py +++ b/src/config/config.py @@ -11,6 +11,7 @@ class Config: # 数据库配置 DATABASE_URL = "mysql+pymysql://tsp_assistant:123456@jeason.online/tsp_assistant?charset=utf8mb4" + # DATABASE_URL = "sqlite:///local_test.db" # 本地测试数据库 # 知识库配置 KNOWLEDGE_BASE_PATH = "data/knowledge_base" diff --git a/src/config/unified_config.py b/src/config/unified_config.py index 92981a6..4a5cad1 100644 --- a/src/config/unified_config.py +++ b/src/config/unified_config.py @@ -27,10 +27,10 @@ class DatabaseConfig: @dataclass class LLMConfig: """LLM配置""" - provider: str = "openai" - api_key: str = "" + provider: str = "qwen" + api_key: str = "sk-c0dbefa1718d46eaa897199135066f00" base_url: str = "https://dashscope.aliyuncs.com/compatible-mode/v1" - model: str = "qwen-turbo" + model: str = "qwen-plus-latest" temperature: float = 0.7 max_tokens: int = 2000 timeout: int = 30 diff --git a/src/core/__pycache__/__init__.cpython-311.pyc b/src/core/__pycache__/__init__.cpython-311.pyc index 267c7644f558fe4be8b0f0cf92f2487bca08cd77..85f6415d4127c51bf7854bd01fd713d6cd1c8ec7 100644 GIT binary patch delta 39 tcmbQvIDwIOIWI340}xaxnPv)1TGsVCb5)bAeah3>VkO+)m z2r+{UjSYhah>am**f?kmvx6*y^=!x#HV>M^mO)F{I%uV3rjRXcAGFi7IphdC2c0x+ z3Aw`VK{rDT9quIGOD-XCY)y8U@7_x5Q>{MT=PdH2&_sjcsP z@=oq=-oN|f-`VdW?*X4du?m5h7z>6)#fDT6L$QF*s967eA{HEv1VRei7aWc$#-7Ne zk5L@MaY+&*F@IoU0x!==@dI?rg<|hvy7Mp3zS&}t7t2^!W(MfUt1WJ zwzX5JJ7pTI5$a*CwL%q$uu*aJ#A9QJ)J2PXVC)s*9EPPT1tX;J|6mUg*pEzt_)C>B ztSJP+aK(5DdR{K|hL)v0B@lQuJ22&&9FI#KQE^xjV;!%GlO4ljfyk)X5gQ9eJA#pp z329u252N7kH2`Cfsc8&)L}5eN)n0z+CE+PioU!p&#fV=#IT4g_Yp_ulzv!7sR1JG#ZS?hN99i1MA^TecL_4|X7V9f8Is?jXV=3*%vPZE6^$PCG@ z>Yrs#du}zYOYKWHZOJrkk(;*6va+=?O`iwQiYV3zc;kt2Nl?r%#kdq1F0BDn}gL;FKXs$ zi-Y#^gEkE4_KXSo(s^Ek1k4lcKv`8lPNRNS-cR~nkRZoPyK4$K{waL~;{|rw5VJt@ zLO6~)nTCV`IN}&-5ZEiGOEB8YIAR)Loy}Cs+&T09?b*5KUp&IobE_DFf?~xfM*?9H zw;`Q=P>@=opJIe#tr&xWm}2_QVc3*#zHNcf=(rS&jfH(?3HdALcx*T_enP6EJ&vD< zNx0Aw2c#&%W~{PI1SUh{0YNWD_ox^VB``jII-sdlS}E%5c;FI!3CIk|n@K}+vgXWR zW+B=rH+0>b z{Ta`G*|R@w-LLL;6CKFP(pT|-?FsTqfL<=kRbWP$D+awBrVReNIG+S7JxZ|0OFBmSZ_wzPF&6p5NDR=Av>kG#Sxh@1hZu{7 zX=e=eQ6U^hwM9e4nz?jyFehy1iC{_CVf?IK0t`vG609FhGYueXw93nZoUQS6ypeMitTQ{^DnvCd6i8UKcM5GWe&CsJee*&zCqLZ?$zJlJ9|}amiz42 zw`V>oHbW!VJ!RR%OXDH2JB}!$^v3t*Z~x?K?l(WXeg4|*pU9#KrM#YJgS!b7Im zMuMRjK$v5bifJS$MPt%)I0YUFq9}DTbXvPG`z(?!B)gHI0#uA>&$}^Y9v%;egE5~+ z#bSsGDE?F|#doua7^HRB*jWS;elQ(Ml@2x1A{$*jnzZ5yswrGWnsSv^l4jlI)l~E4 z6{YzCR0F>>iiaDJp*E<{xGDgy26(E$VT2eszNs}@)3mG_acr~=z!^Yft1IpPR_Y}n z@MNsJWb3Z9b=NIdz3ghqxYo(8b$QZe>rB;ysXE*JZuf^Z8Si@8yMD>Lbh4tMd@SAm9HijMIQPiTJ!$72K&N@q>gqhl zUU1Vys&lD*?_&Gj8`iH{<>!Yo?MLPIqqOE0SDUWun?G{xC`9mNxPF=IPjmeMj#fW) zVZ)py`&7$?={aY%wM}l_ndX|aP5g!D=WJQ1eRj@TjQG}z?m1VsdELdQ=G?cMeHWWP zSbK5poI8j7U%6ogg3tF}RudU+Nalvp+z`B`<(WD5j3>+0pLM_M&TzcU@oA2y1KW|| zcFG*Qb!Xm6RzIEPH)YrD%&u9VZED4*d2{yZt?=Z%_BGXc0%XqisE$TLnP(0M=vmx)wT?`UFNo@>68DSzV}KU z%Ph(%01@SkCiQ)Wa5b~BC^}V_`u6U38~=Tq2k0N%?EY%YA8Hw(^jzqmB${hHV-Nll zh#q8=olm`~00057abmTLAx|&`cui%D zBlNnR{AbXs2m9{+^o!iz{ajUR;NYSD82}Fgb(ypm$+wZ929tV_>;qDCA5ghS{Xq1H z6I_QFJ<_1-{6V48bQfs$01ScN9`b*z+ug4A_#lws(u6ObCx{G z>C>MSIIHG_`Tz5*0!X$-Kd_6h-9R&WOra65X1y#y}DW%#RM+M2Mg>|7)& zTo3@j=41(M7yDzJSPpB=E4vf=RRoUK|BKE6$GQZ=2?1w$&9p6sS6GE0m=MMzwBhQgsS`}ey;d(ya84j0F^Y<|jF!~H=uq*NijwNJC`nThfsWB>I1%W-*Mk3EwOX#)kg4*?RlYo_ay6x1 z{F>kJk?S8^p9mR#yUcH2;=335?i(l5e0PR_LFQjr;(xfv|1iV9B=au;@bL0*W~+FB zBY7M2r%WihkL(^IDVNa{T;Vh{W!J3BHm=F8dJ5^zGeA4pE#I`u~D_YynDIT<43K8 zYs?b^UT72vg@l_@fD1RllW}&)&W^ORqi~mjcO7$`!1;0B1U(>*eh0+xBX6&lyw}6_ znvFLb9gx1czQ+rhe|^>onJ>+3uif&c-H2%ygK0NSd+ohl#xK`Y_wF!$xx)l$-KPdT z$5iVLLgLA`1V4ibMsN_B3atSbC6Y&bEh3oowgb*KL$4$8mQXz(_pYA+jF0 z$3-y(gm5sTSZVakw(aWu<>%M$Tz|jRbgGKhep@^l2v3B>&ET!X@qTJWj=3-XNqt`z zPkU`Cat0&y3UpFWRpFBTC=}=}*=q`iKoCa)@eq9a!qH9fD;yJDi@!!b=t_aX;%b&S zev#vo^{I{Nod?nfhthu`X1EcV8<{m_9UR)OK8EgveHmx3?CecDd$XRJStm7FK7(qs ze0BK2g!)f@#qRfq;cE?eP=3Yf_rDeogbFnlzh4+1_WSYcCb)Fq2-0hHg*`St9-{uB z!V2I#NgYrxq28C!{7JY2RHOX@q~Q7&TuzG1s0}}YwRE-c3)IJij*RLL32$a7!7G*M zhg3(*z`XI7WgF9MW1cmbw!*G2605<~ogBu3?vxtQw1!}dl#v!J^wQ`?pQajns#&Ym zbbv{*d4lmgI8hj{Kx?d~hGYv?G^E<*I~R-#hZn5Z_Q)Ie(XvWXv&mGGg60q{08@x= zGs0koR zm_0=E+iA1_?||G_FfxeJLw+?5$J4J*$>BF>u99psnQD=JB~c}a!t+(p@3!=kSVHVa zZv)iteCF8X1Xz)ZeF9eu;FP~AAy!hV;QJn&KuO$;pHGejz}co(6`oQ#>{KxnRd*A< zP;sLFUHlR#jo~ZNT+{vZjdi!Wv-e17bP%LQGe7`+{h=zB5IIg6_cEwk{VM|T%em+T%1{4l9;#IjK$j= E0FmPmYXATM diff --git a/src/core/__pycache__/cache_manager.cpython-311.pyc b/src/core/__pycache__/cache_manager.cpython-311.pyc index 4d0016791616456fa0bd3b09a307ac5ba1993791..3d71020848ca0a51c3a62ad9ae8e843d8ca58612 100644 GIT binary patch delta 43 xcmaEsem|XWIWI340}xaxnP$FK*vNN?nNP#TDkeEUB{e3oxHz+T^HXL<0{}4X4lV!y delta 50 zcmcbg{w$quIWI340}vcGewOi7ek0!@W>NhVtC-~cl+>7#;sV{o;^NHWlEl2t_m~+C E0Lmv4EdT%j diff --git a/src/core/__pycache__/database.cpython-311.pyc b/src/core/__pycache__/database.cpython-311.pyc index ba94a4da70b8057b1108e6edfbe9be1158c0cbe7..465f911db29586670360f2576682476aa6dcf346 100644 GIT binary patch delta 4138 zcmbVPeQXrR6`#G`z3-2`^ZGt)Y!(~)e4%!r1d&ljHjb#F353Ks->w~leMjf+ zVsOu#6(Pkzq;(h)L*fRv2_z^qahfWns39dGBytC<24*}TT2C;{U&y;mSKQdAk#&c- zT_%}RD6I$D4746-1JD-PsM02&t+PC4pluqY2(sm@^)!Rfd+-)6*{0Z`r*Mcn4HfUr zRij-F*{-%Ypl^v>atQ4bWxg9}d?M-59AVCoZ#B)<>ej~Hfsm~1_J_j*VX~P$Xe0oPIR0r+%yISFaU-OHhnG3*P41_Og&8N8Y{vbdJmbS`E+ z@#_2n9T@8<@DxhPaa{}JCK+9s)1aO zB2gUd3d}D97}5Z5HN3aJ1v9^>?LZ8gL^3nV$eK}2OcP`FLL)*G49=1Z2Ct1Zpcwm8 zG|4dVoo2{~mX%rqNQtrJqQ>juxxjcfZDnLnhLwXLYI z^2xufPB)&4!S))lAhdAKI84>PUmw%Ffn-CB0W`*Vn1Z%=BnGKd;1BY%W~g;fFh^<@ z>po|PmLISK^!>?VJ4EzzGeBtCNVf5%UX!ZI5^Dx4mh#?jzBeyy5^faKUTE*RDL99h zI?`KkWb+S9V0eie3p_F&rN=ueewK_V<#G=;$=%2*TQ>C0(g}vEZZ1*T0hFfn3puqqrwtBVvtcc z!gK|kfxVc~G_20(_9_R4Ls-rj6pTZ-XDHksrs5=N4AV_`$I#TT1eN{!@FvYj1DP?E z#~YdkLjnI_cvHiC(=)&sehA?E>*zY&t%!A%s4%0O7@qbeT&wO@-HXEI(Ame2*ak!4 zh!h9~gGwMW5DJb6cWDVLVI?vWw=bv)0KX!SI2Kez28NVSG%_NF75uz{rRV%%sXr7{ zB>%Ag0HzTyN@G**)tTJO?`O}G>z}@v`^Bkm&iy9)_J`nyf(N8K%>5&pMk%^s32XdR zfd$yF|Na#9+#h~-{lbOp_)KnUEc^C5vo1XQYZw6pxE2b?k(a;uWUA1!QSzB^DYRy^ zfzZ&P=d`X=mA0r}v7}n{@h8PTzQYUQ=$_!K9rP z6Bc@>1=pnYs5L1_DM3mIQd)54?_=%2A(l^WJ-YRk$B#Weq2AwLb4hu`KoiAy;j@Fe zCYDWh9qmd~cmH`W06a-?drI7%xYzSNTzQttpw#VpBv#~+!{WS2L8U;StAcbzkdi`G zN~lT*Ro9j+pJq<9O|_lue7*BT*HqVp;kFjVMc2I+D%3SO)P|dMjekc0D3MYkEP0cC zGn3b&QfYckQd~LFk#<#0KXt{mI^kM<&0TrY`nomY9r&sofId(3&Jun71tRI*lXCA# zxc8*vZt1w5-g#k(wO)C=*jE3esla|kcDijxp5-UaubUG!eTjffv8FGcboZy+{R#ES zf)6^6b|zMAI=2P@o}}2E5}OlZ^VdSDDy#+!tP*ug)SdW$)QuN8xJX|pgp39Xybhupo01K>_Ynk>n?BzPKZ6kNNNu@U$+Z%LW z>MGiOx-VDq(E6p1r!@^M&>xLhS249KK&RYWW4V*376qBy@ei^Sr*pr3D|_zT9rCG7 zimP06@u2OD7Vm(*8J)6U2}C0bhD;FMjR)#hKf|h99e2|vx_@WGwWNmYj1YKE3G9VU zKOaG*R)56b>klhi{Xu`ff*Tfa7}X$)LCP(%OZY2ui>$V9Y%EHNXlh0egj-fflqP9z zgZ4nNaAD8FQXv5%pK9u?3zME{$YuFb@=vR+4)RisniHvceL;qr6EQ^{w6sHR(fY@aqtBPxX8+-oz1z&`JSC_Q54OGPZ>6WPNjw?`|A7~%_r%z3D* z4I(W~TQfR&AiNLG9_)mY8m%!sDhke0L$apeC)Gvt5SL~>WWdU-cSbymT{GVlLueZc zzXsiC>Z><+(zcQ#KZm$zsZ9&wG1FC{`ifAU6lzjJO+u(in}w_9nk(j-q}iJ?dlP2w zHM8TF9fvy-?sZA?`jmNn!n{6Bz7aah={fO2i?zjpE;@``IQHVQik4>fVl%&mBQxeb zc4|LN53Mjwj6r9z%CdnOC;gTREwv!-CWkFyPX~~`*(uVc7@nIVaaz|fN62H=2B!R@ zVQV|X<0qhvvOlnnD!`*`KxIR-k=+!Hmz5jJ=NW z5Z3V^^9I@Ar~>KFICe4(^q^d9`q?cKq)o+Jgk($Fndy(}#WKcRG|BGLbt~Ql{;(Zj z3}tQ0QnuQptu6&&MqgJ*PfE#|(uQ~$m8yE3rlFYrGGLnG7q%|f3x7QLDO!G(LN5iG zLLUW4suAv@Fht>J6e1MpT-8z3ZH%cFD!^YE3KxEX#z3zzL^_?G_&OfWpm_)~NGs+w zRs0U-_|EC!8E!^ScpFm{8}f+OEySBFupWA*z?^@K(es|^m3ai8#UL7a&+!M~?}|1R zgPXkT{3BCNdR_0Yi&8~ZA5fJuM!C0Vs1RosP3exlX(%K|2bE3u5P8&{Xy2`2e0g+l dys6fIx3KjfhpZLjJxNPt%2GLIq_=9X{{TQ_FwgWKXHkllu4Y9Om1 zdjw*74fl+8i4t-J#-nCMD6_w?0f_hRoC5+KAazgAUV>DjI|ByFSmqVm` zQGk8JP6r`HM?N>Sd35mkm*O&iMd^^@4i@Ftm8lKrQ*<56X49!OB*xZ(9v4~6HYfAB z>`*#yyNm|dxor&6#TdAuo5rlwmW$-=$c!+RLde42%{d+zC%URrB-Vq|V zLTaZh-l~gs67gFigIrXYnai_GZ)&OXuncYpH~(NaSoaXhJ$l@GlDfz^eU-dVDZF`7 zeNNAG#z;;A$NySAVXY^Hae7hYZCX8_4#y}(ibFuL@HE93>!N~gsv#s`wa2QqR0J`< zmjB~v;OqS1zFy!O%TZKP+0oJA9NUbFlV#KC!DMQLZ32~TL7SXPXD#!x$ZRSdmI((f zn_=5vZkbB{lfU8g%V@d=@GEqnQz2z5?gV4EgR!~bs`=omDMv|gy21;=s;M6A3tHK9 z@0s2?Ej+J<3-+^k*B2@g(G^?<@VcXgZ)@Q>Ejq773tIH97M$)r(_N_AG}{CK&z#me zuN`SEXsrucU=do$0Wt6`5>KS05l{Ja&zYXL`p))E*?n=U>q!H6TB~5==R-|ombPo; zs@m2pe%;*GAl__{LA=>4g7q7%vb|2^9}1OR)e`~ak5yvQSZg>?Jfm-;`}t>jMA31s zoqwlWRXah93pRbM9b`)Y!1KrZtDEQn{&saE)vsNz?xOS!ezu~9Mj zFjM)Q$?#OzMOrQmYr|+u$C>Ylw8)3i#9J!ArxtgwctNL zIDjgG7lsvvN=z*E1u0yR!X=5HsPlC+$#AHaV2Bc>yd=2g@cI6WW3$q%QCPioKC-Pu zz_bkaMR1#Z&2}v5T#0=}b$%oEdCLJ@)}{>CE~@Z{8GZDZerAJzI=7EzjeOdCk&W<= l>kC~Yl*UWs|M9+UfB59=L6LYPQ-|g}(RojFLd9-p|1XQNn`{68 diff --git a/src/core/__pycache__/llm_client.cpython-311.pyc b/src/core/__pycache__/llm_client.cpython-311.pyc index 79e8804e9a1797536890bd1078aa6e1a86d21ebb..e4f49a6c7ee26de9b7149a13167bcf60165b955a 100644 GIT binary patch delta 42 wcmX?Qeb}0JIWI340}xaxnPxuN$UBpnPu0aLCOJPPH72pRIJ0>3Zf1Td01KWC5dZ)H delta 49 zcmX?Xeaf15IWI340}vcGewN|Ak#{Dus7{JiOmcooYD`ISfo@`Pab|HzV&3L0%=}US DiP;cz diff --git a/src/core/__pycache__/models.cpython-311.pyc b/src/core/__pycache__/models.cpython-311.pyc index 44aed6f55e69f04208a21e927ea133385fb10e35..530e97a397b6a7ef6b9583315a2513e5926dbda0 100644 GIT binary patch delta 3323 zcma)8ZA@F&8NS!p#$WgYf14O^fTT{FHiSTyvSjU)FhUndNZB+eigA4}U}A7|uid7U z&5o2zRQ&*YXhS=iIaQXCGz+wr+AJcI_G8obqY_4*Kv$YHX>~%hA7$FKAN{rWJr~S} z$+ScK+A% zHhEeF^aU?KyT4-lX>VDp>z_q04Z@EABz-~*_42`REHM}tO3_?~P>--5p@DpBJ>lLG zVE`F~)=ampo|Quk&=6;$sUsp&*ipzZmBSxgdWrBE}@*Ed3*@`>tKHQ5Ifo_Wxy*vPtdVuF5i2=VtaG-4m0*3I! zoLKO-eXkq6w%G+qFYsb4`YO)_L-DPvAHqQhuV>CwDpogRC=;$qv(8gsUJZ?|UrrC2 zm9<;55?_NAMCe3NBOD^9eLs0>U6TehZV~1R+7L!a&bK5Bb0zcn&V35DhWx#@<=}=G zP$>a50$HdcR2v!@Jv2W=UOqWAg*{J>k&M>8(bj_goAr_m7lc@t7sX&aGQi6@Y(Tea zge|expbg=J%*(rex++}_<}v#!`OMx*PAHC%3AKa#vBb*i-z#yGq_Ui(YBY8YXSm5i z#e|>SxUxG&a?)*A8MzYZ?I@{XjpT(AM{=`Uz{Z&_GXXmXwJ+e{EPzg~9BP$SQg(^F zkib|UO-w%=`BJVfk}3ga@nyjR1l6uZutE263ZLmgyNEq1EzLY74xqUfhQvon<%YEf zi_pJP09ToKA#{f6FZ74mG@h2Cb`vb0G9+8>NT%^6MNM{CGY>OCoQ^h*h2<$|@m#+9 zyGIZ1=4XEXD19kUM)LRGZuhIC(!P+`7md6ksl~p~{>COr%@1NRmb88RMK03Ii*c#! z0#xSLVgeUTqW3L@q!jsRkEB_%ix_rwHLakMLFD7XHD<_y!alpv^n36X_W`7sytj7h z+;rpj3Zh3`o4eUT|hMN?Z_con}@Y)-31g3qe|z=FH>UZ!gbWlBM;lgfzGb zQwSd;TtoOJ!gYX6S{cKAeE9sjTGlQx336?={sBkHg8j{8&6#|^`tgl(v#noteBO~g za4dJ=ShlVuSJ$#wcXFZbWVWs|SJ$~<>YUef(rYbTNH2H|R&}aZ4mz9l0_~`05*QS6 zT{5P>AQ{*T>Oddmrw#h*wZ7oq_>{&9QPegk>>$grFa|G1hQayiE96Ib`hQ=+DW){A zB_)YHFlhO~ormvy^7Xy@`QKd4U%B@%J(r&w{bp_ij`!F1-+l4q@jQ7ae}Ceexi{PW z8UaU08a%s$$?KhYHh3-a@#I zfZur=252KG&)+Z)naMnsbKc)UhSKWu$3r*VwK}>-f_XPfsi7^?S4W zy*d5f)X{aWe0XdkG%%|=Dk@n8Fi^iLzR=fyHkBCYw_hQzEspHDExvTc0^ANa2VPXYAnp;{?61KvyIv3ekcWq`j6e|>j z9ty%PMiiC3SkW)cQxDN&^)WR*lZ7=U$EfuF?vg1}W5aN9KL ztV7wx?vN{FXeJ<;iZEVQuLzbimrh>FQOlLirBaE(6kYxZw|Yi&iM=nEiOjy2Pmo6Q zylcN8wP@`FLm7<@WR1~13ByPl*+iP%bBBq`eCwVqAwA|PaUZD(!g3ce6j9K3;lwLyxgXepwCysn;R+5gGt`m5{y@e%TklH*p$DNC0b_A!V^1mofoj0#Crm!Q@(5LywU2zyygbx&cic~zo(a`ZjJoGu-TY;eB0ivpAv5;y)A2w7qUoeV} z2>om=^wrLWnhP}-h+P$~3@=R_oVJWUSa)m3#>MlloWU3f7g@FZ&5n^VSL7FDKh~mC z=Vb|^S1o|$9HCk=H=+o-gfBim1dc|A3Lf4e<4x-znbtKJFMn?MA1cLewr1j1>CuEi?N`m8 zCN@5AH{K6idM*GzB~PBeu8xt6mP^sY`d!#YU>XAS<7x>ZWRXop>)2#ehUsMYqX$eY OI!RdjK2I6{9Q*?aYA(nC diff --git a/src/core/__pycache__/query_optimizer.cpython-311.pyc b/src/core/__pycache__/query_optimizer.cpython-311.pyc index 1497b763e7379f0afd74917ad5acd54f0d9e1ca6..11c0fc3c0850508f7a8145c72d8d0c10314b92e6 100644 GIT binary patch delta 408 zcmex$iLv`KBj0jfUM>b8*t^m+Q^0#8-$WKZEf=epn8f1Z%;L>kSd48M*(bkn zv=_a_otT%HQwbE!%uBz;3FcHyR&k2v-UT$GXg84XbDMlITx{|Jr$5?YvCSZftuR?l z_99CV8zBnOxcRvATqeeSn^WDkGBRG6EbVbt_!3avE$*V!;{2Sl)Rg$dlA;Tfe|y}J zI04ds5=ay?0|^BMg(4}C$mvPWW|I}Yycu^*&h^R>KMWMpWV*!*)L)RFSDYGOl9`)Y zbY$`euWgJsColKD&$xGTyH7OZq0Kn~&smrl88?T9u3=Vq4ODQ8IXAHaNMz<|vJ^>z1lWpF3-XIfih!yVBdypN yUv7?x_hA)10x~TeMDQ~L2@wz>zIkuTR3=90$-(LC86_q&XIL<*ZMMmb8nDFjnhN0(1zKJZNhAvhy$@wX%F(t(Xx{1ZbnZ+fEd7Ia= z7~3+kPJZZUKiR@5f^7#-PtnfJ)11T^wZZJoAc3u5Q6QnoUStVkBSfJZZaB|nV%)R2 z%xxxrr4(A~R2urAQJaz*dx6kY7|%1XN`dX~o9)d~`XEDG2F delta 47 zcmZqi@Al_j&dbZi00bgdEE~CXnMKW0tYVV$Q&M9}iVJiTi;FXhOA_-oyD{6T000_p B4MzX~ diff --git a/src/core/auth_manager.py b/src/core/auth_manager.py new file mode 100644 index 0000000..8ac3168 --- /dev/null +++ b/src/core/auth_manager.py @@ -0,0 +1,144 @@ +# -*- coding: utf-8 -*- +""" +认证管理器 +处理用户登录、注册、会话管理等功能 +""" + +import jwt +import hashlib +from datetime import datetime, timedelta +from typing import Optional, Dict, Any +from flask import current_app + +from src.core.database import db_manager +from src.core.models import User + + +class AuthManager: + """认证管理器""" + + def __init__(self): + self.secret_key = "your-secret-key-change-this-in-production" # 应该从配置中读取 + self.token_expiry = timedelta(hours=24) + + def hash_password(self, password: str) -> str: + """密码哈希""" + return hashlib.sha256(password.encode()).hexdigest() + + def verify_password(self, password: str, password_hash: str) -> bool: + """验证密码""" + return self.hash_password(password) == password_hash + + def generate_token(self, user_data: dict) -> str: + """生成JWT token""" + payload = { + 'user_id': user_data['id'], + 'username': user_data['username'], + 'exp': datetime.utcnow() + self.token_expiry, + 'iat': datetime.utcnow() + } + return jwt.encode(payload, self.secret_key, algorithm='HS256') + + def verify_token(self, token: str) -> Optional[Dict[str, Any]]: + """验证JWT token""" + try: + payload = jwt.decode(token, self.secret_key, algorithms=['HS256']) + return payload + except jwt.ExpiredSignatureError: + return None + except jwt.InvalidTokenError: + return None + + def authenticate_user(self, username: str, password: str) -> Optional[dict]: + """用户认证""" + print(f"[DEBUG] 开始认证用户: {username}") + with db_manager.get_session() as session: + user = session.query(User).filter_by(username=username).first() + print(f"[DEBUG] 找到用户: {user is not None}") + + if user and user.is_active and self.verify_password(password, user.password_hash): + print(f"[DEBUG] 用户认证成功: {user.username}") + + # 立即访问所有需要的属性,确保在会话内 + user_id = user.id + username_val = user.username + password_hash_val = user.password_hash + email_val = user.email + name_val = user.name + role_val = user.role + is_active_val = user.is_active + created_at_val = user.created_at + last_login_val = datetime.now() + + print(f"[DEBUG] 访问用户属性成功: name={name_val}, role={role_val}") + + # 更新最后登录时间 + user.last_login = last_login_val + session.commit() + print("[DEBUG] 数据库更新成功") + + # 返回用户数据字典,避免SQLAlchemy会话绑定问题 + user_dict = { + 'id': user_id, + 'username': username_val, + 'password_hash': password_hash_val, + 'email': email_val, + 'name': name_val, + 'role': role_val, + 'is_active': is_active_val, + 'created_at': created_at_val, + 'last_login': last_login_val + } + print(f"[DEBUG] 返回用户字典: {user_dict['username']}") + return user_dict + else: + print("[DEBUG] 用户认证失败") + return None + + def get_user_by_id(self, user_id: int) -> Optional[User]: + """根据ID获取用户""" + with db_manager.get_session() as session: + return session.query(User).filter_by(id=user_id).first() + + def get_user_by_token(self, token: str) -> Optional[User]: + """根据token获取用户""" + payload = self.verify_token(token) + if payload: + return self.get_user_by_id(payload['user_id']) + return None + + def create_user(self, username: str, password: str, name: str, email: str = None, role: str = 'user') -> Optional[User]: + """创建新用户""" + try: + with db_manager.get_session() as session: + # 检查用户名是否已存在 + existing_user = session.query(User).filter_by(username=username).first() + if existing_user: + return None + + user = User( + username=username, + name=name, + email=email, + role=role, + is_active=True + ) + user.set_password(password) + + session.add(user) + session.commit() + return user + except Exception as e: + print(f"创建用户失败: {e}") + return None + + def create_default_admin(self): + """创建默认管理员用户""" + admin = self.create_user('admin', 'admin123', '系统管理员', 'admin@example.com', 'admin') + if admin: + print("默认管理员用户已创建: admin/admin123") + return admin + + +# 全局认证管理器实例 +auth_manager = AuthManager() diff --git a/src/core/database.py b/src/core/database.py index 5373ae0..7c6d87f 100644 --- a/src/core/database.py +++ b/src/core/database.py @@ -26,18 +26,22 @@ class DatabaseManager: # 根据数据库类型选择不同的连接参数 if "mysql" in db_config["url"]: - # MySQL配置 - 优化连接池 + # MySQL配置 - 优化连接池和重连机制 self.engine = create_engine( db_config["url"], echo=db_config["echo"], - pool_size=20, # 增加连接池大小 - max_overflow=30, # 增加溢出连接数 - pool_pre_ping=True, - pool_recycle=1800, # 减少回收时间 - pool_timeout=30, # 连接池超时(秒) + pool_size=10, # 连接池大小 + max_overflow=20, # 溢出连接数 + pool_pre_ping=True, # 连接前检查连接是否有效 + pool_recycle=3600, # 1小时后回收连接 + pool_timeout=60, # 连接池超时(秒) connect_args={ "charset": "utf8mb4", "autocommit": False, + "connect_timeout": 30, # 连接超时 + "read_timeout": 60, # 读取超时 + "write_timeout": 60, # 写入超时 + "max_allowed_packet": 64*1024*1024, # 64MB "connect_timeout": 30, # 连接超时(秒)- 适用于网络延迟较大的情况 "read_timeout": 30, # 读取超时(秒) "write_timeout": 30, # 写入超时(秒) @@ -82,7 +86,32 @@ class DatabaseManager: logger.error(f"数据库操作失败: {e}") raise finally: - session.close() + try: + session.close() + except Exception as close_error: + logger.warning(f"关闭数据库会话时出错: {close_error}") + + def check_connection(self) -> bool: + """检查数据库连接是否正常""" + try: + with self.get_session() as session: + session.execute(text("SELECT 1")) + return True + except Exception as e: + logger.error(f"数据库连接检查失败: {e}") + return False + + def reconnect(self) -> bool: + """重新连接数据库""" + try: + if self.engine: + self.engine.dispose() + self._initialize_database() + logger.info("数据库重新连接成功") + return True + except Exception as e: + logger.error(f"数据库重新连接失败: {e}") + return False def get_session_direct(self) -> Session: """直接获取数据库会话""" diff --git a/src/core/models.py b/src/core/models.py index 8565b7b..a6f2342 100644 --- a/src/core/models.py +++ b/src/core/models.py @@ -2,6 +2,7 @@ from sqlalchemy import Column, Integer, String, Text, DateTime, Float, Boolean, from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship from datetime import datetime +import hashlib Base = declarative_base() @@ -173,3 +174,39 @@ class WorkOrderProcessHistory(Base): # 关联工单 work_order = relationship("WorkOrder", back_populates="process_history") + + +class User(Base): + """用户模型""" + __tablename__ = "users" + + id = Column(Integer, primary_key=True) + username = Column(String(50), unique=True, nullable=False) + password_hash = Column(String(128), nullable=False) + email = Column(String(120), unique=True, nullable=True) + name = Column(String(100), nullable=True) + role = Column(String(20), default='user') # admin, user, operator + is_active = Column(Boolean, default=True) + created_at = Column(DateTime, default=datetime.now) + last_login = Column(DateTime) + + def set_password(self, password): + """设置密码哈希""" + self.password_hash = hashlib.sha256(password.encode()).hexdigest() + + def check_password(self, password): + """验证密码""" + return self.password_hash == hashlib.sha256(password.encode()).hexdigest() + + def to_dict(self): + """转换为字典格式(用于API响应)""" + return { + 'id': self.id, + 'username': self.username, + 'email': self.email, + 'name': self.name, + 'role': self.role, + 'is_active': self.is_active, + 'created_at': self.created_at.isoformat() if self.created_at else None, + 'last_login': self.last_login.isoformat() if self.last_login else None + } diff --git a/src/core/query_optimizer.py b/src/core/query_optimizer.py index b5946a2..84b3b5d 100644 --- a/src/core/query_optimizer.py +++ b/src/core/query_optimizer.py @@ -292,7 +292,7 @@ class QueryOptimizer: # 处理状态映射(支持中英文状态) status_mapping = { 'open': ['open', '待处理', '新建', 'new'], - 'in_progress': ['in_progress', '处理中', '进行中', 'progress', 'processing'], + 'in_progress': ['in_progress', '处理中', '进行中', 'progress', 'processing', 'analysising', 'analyzing'], 'resolved': ['resolved', '已解决', '已完成'], 'closed': ['closed', '已关闭', '关闭'] } diff --git a/src/dialogue/__pycache__/__init__.cpython-311.pyc b/src/dialogue/__pycache__/__init__.cpython-311.pyc index 6f2c0eaebe69910102f7bdb0d87ccdd6e893dfb8..77ea6417c0f8983b76db540fbe0afe12b60e9a18 100644 GIT binary patch delta 39 tcmbQuIE9gSIWI340}xaxnPv)1~ AaR2}S diff --git a/src/dialogue/__pycache__/conversation_history.cpython-311.pyc b/src/dialogue/__pycache__/conversation_history.cpython-311.pyc index cb6c156ae884fe33fff90f86c16cab087c842f27..509d311b1dde385733805544a5dd742c1b9dab0f 100644 GIT binary patch delta 45 zcmZ2JjcLI&Ccfpoyj%=GP^Dy=`JrSZUm_cyv5Qqqa(+r`Ok#0yX7T10w#6*~F#ry( delta 52 zcmZ25jcNHbCcfpoyj%=GaM<`+hJMjTzC<=rs}!r4n3CcG-NfSJ%;J*7yv?<2 Gi(3G%f)V2Y diff --git a/src/dialogue/__pycache__/dialogue_manager.cpython-311.pyc b/src/dialogue/__pycache__/dialogue_manager.cpython-311.pyc index cb715610b52b38033448414ad6f1e84b397aeee9..1be43a3838cf67fd300201afe9cee3d2bab12c83 100644 GIT binary patch delta 45 zcmdnBmvQr6M!w~|yj%=GP^Dy=>Fc+VZ!a64zKc~%a(+r`Ok#0yX7T0+Y`4MzIUWxc delta 52 zcmdnImvPr#M!w~|yj%=GaM<`+M!nBQzP)UsW+_%N$@wX%F(t(Xx{1ZbnZ+fEd7E#t H-3kW)*7_4Y diff --git a/src/dialogue/__pycache__/realtime_chat.cpython-311.pyc b/src/dialogue/__pycache__/realtime_chat.cpython-311.pyc index 1f461bcf6ede12baf202cd9b3fb499a0fc3f3d89..564fc609fec8a15d6ae4da366457d0e46a5b9cb2 100644 GIT binary patch delta 2360 zcmaJ?dr(wW7{6y<;KCv-cX|0*SY%lT94HYB(2$4C2pEe3CbC}kUYCV+m(IP5LW@yD zTB!-1$^PgCqeD8HrZ-J{s54nvNrOhIx0xpY?hjG>!?9`Vd}l!#vv%NjzVp4$_kHKw zKQ5z>#!TVg|C|q&3O}N{rWH{##e=zTX7Isi8GLNrAb4Y;SSB#tJUegDppl0>RLbv4c zhJxJ^mIcKh3gSf|wT8PyL6JORS@3~898}0$TLH3=T3b(ALRgkWj}%mJkH;^{8j@rS zwX%~jTa9^z0dkx)NQl%|yVRN#o4zzLbCT0r>d^IQ=4Ev>xht98iA?Wc!u4b-L`hW0 zr%mvSuJL78`LZ*?D}3z)Upvm%lGgOE>@`kqZ%r!2%T9A`p8j%SL9J6imWe1m<}}vk zsg)VIsG^-FflB~ZQg9hDj0+9}bW_k`rmBxI-O12pJN#H1a4X&RE~NG6$rp2y&?xzF z&Ksyx?VNj5zv>~!aZ$%lQ48D&unZs-pr3+f>cX^}3T^=o58wvCq}85o@=~%l2jV1q zd{R)tP-mK0S12e;$JK-O5rq2H>Z~0)bYC6IZr9~Ozg*@=#_R{bJ1A(#kJrqa0SI$CTr3_FV-g!8lbXm9&taP}UE*irByq5S`uq4jpWazo2??~ zPt6tU`~ea!USb*mUDuSZ4Lw6{6z?~6P$uqD!^=AL=v8vFBn5@Yy^@u+gTRLu4j-bR zS(K0>1U#}t&o9c+ex!lG0Cyj=CMAG2>j|4CcxkWz&_;HaIuoOjV9#21lAJ5ep3j;y zi!!H*H$CSPWlaqSUuH#u>MXmhx3Mtr=0)d~rRO90<+*4NX)IrZ2Gr5=HTuNQLE{|2 zd4LPVSXGd?0Z5kJMW9|FRaJ}7AnB@_XFCOq(*WxLn7o~gR4sVyVNW22>@~C4MvFl| zGNGVm-WtN4o)8u#OmEMfs(Q3vt*kz4NMw$fi!Z_O0S=mZ&PY%hRYuNkor^hsERST+FGBGxQ6 z2{1ue1!yO8n;fM>K(c9JhAMG?OR=Bt^of$@5M5=o50dsnW!* z;2v_fsoFFGHkhnvu18nZq2?HqiADF3cUwCUPiA?J#VSRIMP#^r|`lN_vP z8lvlkwU->1&RM N+l>GFe@NNq^>3;%Ux5Gs delta 1907 zcmai!du&rx7{Kr8ZEr`r)lu5LWU#Jvt_yqM5I3M@j=37xc(}Q49jxni@3xMvUCzC* zhhssBghy2HQ=)`Kh>1c(0$x#&5K#y&Is+!~&(*~EhcP~4AR)$RNIc)^<_N)f|M=bS ze6Mrw_kHJlc%A$`O&srLW!VJw?D_Ndz@hdt4qbFtH>}v)o065ynmSw_Q`NYt#gh6p zu{OiBPl8nqwfdS&zr`gNP0W)E@-dh{6ShGo+?d~DUofjV>VktV7Ysk;D3v`&GFk+$ zpq0%U1;HoKl{@U(k~z)MTnsSF#S?a@YjZheA{T2*=j=?qt|>o1XNP^#-Xh5SJwir= zQL#f9A%3s^n{$%Dh1a( z!Yy-@fbD6&em&PMg74wWMe72>E9=S`zY5rzP2#k*swp5&KS59qSei|`bzvzXF{mnZ zmkzOHG|6CCsiJO6Xeu3KE7ihKgb($hM;L|*%g9l9qwsYi>lKSmiY)$HPr(uytu=^T z#3+Ly4b#-nutuLnjSKM%Vh}vV`O;=4j+cPP?t<20Cpn?_7at>JRG;VDZ6bz#pk%;Q zxrO=oZL|WT>JW3g;0AP(!60!%N`Er={3X&j)6L|S{Z4XIAMx)ulLUwrA!!c=4Z+5W zC%f8Ej3HJc>KXhQ>7Dow^q>~~4ZFInzh6>odPEMTcUVrpVFWR8mut8r_91bNQ`v`P22^ zf$3{_`j@JG#G`*uU1xIQfA}rwuYV0Q90K!luhfptMd+LrRYo-$>(!#$-&e!10D z<|mZb*JPL~stiI^6LX*G^Ix`A33gt3S^I+H0lwY-8b8?xXKVVLUH9z98*&87YnMqA zxSM~**G<;K!P-MoFH_REUcO?hnD;!B8)=B~gf%@Sb!Z)c(}DWRy(qd7Z!;KKT1ty0 zqN>6QBdh5~<)Oih-$mQN6U>t$=-vsdgO6sX_rW!9-21RS=v%~FG><7~TQoDoQKp(1 zk?Ek5bn4#+Z;PZ2zNue8y5YzAQnDKyYc`Ncy=%<|G5Z{*J&*VVaRDwiR%N%M$S37f zlt$ogV;R{CrJ+LCX;hqHFidfoa&rtKp~dd|6QN%Zyc}9c2I0NXCUQW(8#-^!<`LZY z5_(*Kt4*Ejd42dHeF&BN5uY&_mcBS;6}dkM?T;h65mymkAf^y8NHs6E^GaRD^&q_2 z+)8x)_vUvpq~oYL0f*Zf3f^L(L5A<040?>|#;bXogAqIAhF#=mSQ1upzh;L2^ZW(A z3wM)~5NIE$!r?P4G?wgFD2`OR`*`b8emMDsfx|#gA!2Z|-MeZZiVg&CKCenAE_u;; zeRyeRXJxBmNV1YpG=-jlWgX?@EcA3VNV_m(H=OKfbR0&JPf8AxfJEHjjw~b7`r3$9 zlK7W&L%4g8INar5k}yZM#m9&3s5|(v>o9=;Q63VL=^E6 z;tJwR2E*KwN+sw|xc(I~d&X*F#1cI2y(QrLTub_WsddUbrB0Pz=}NC3z()OIk5?oS q_(2)7-^6rTh<%{+#mOE0T3-oS{hXEL-4Y(m+gyL=KdjWtlKlg!h1xR! diff --git a/src/dialogue/realtime_chat.py b/src/dialogue/realtime_chat.py index afc737a..94ef4a7 100644 --- a/src/dialogue/realtime_chat.py +++ b/src/dialogue/realtime_chat.py @@ -141,7 +141,13 @@ class RealtimeChatManager: # 保存到数据库(每轮一条,带会话标记) self._save_conversation(session_id, user_msg, assistant_msg) - + + # 更新知识库使用次数 + if knowledge_results: + used_entry_ids = [result["id"] for result in knowledge_results if result.get("id")] + if used_entry_ids: + self.knowledge_manager.update_usage_count(used_entry_ids) + return { "success": True, "response": assistant_response["content"], # 修改为response字段 diff --git a/src/integrations/__pycache__/__init__.cpython-311.pyc b/src/integrations/__pycache__/__init__.cpython-311.pyc index ca92c342f7fa74d561d169ede0bf9ad7df9513d4..642d61e907dc3edde75378be9a1ef7568cbb5f7c 100644 GIT binary patch delta 39 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 delta 3234 zcma)83v5%@8NTP**KhmUN$fZeh=U!Nd4zkQo*8TsrNr1Lf zZ*so#zs@=T`Oi83@1I;C@4iVKZ`kb?4!-Z}KHqt^hb&oXTaJ3v!bm^KTM&m9#1pj!AMTuJkYIQj}gL-W6rX_3yJ?!n&soRE`hO zXjqsD1jiYG)jI7ER>h@ z38N$=Osw4Sc$rBxQk`T>n4`R8N|+_HY98k#i%P~h)ilnX5E2&Ez=jQ;JjpsiU}k8U zFJT46YbBmFs#Ud2@SuX0RoPS<9hU(2aP+uplWem=PT1qx4aius%2v-J$*$TZha?_) z;8ef~=Ly}zD-up+6}9r%bG}-pxj9MP0(78TwSm7YrSbu3jOzRL9p` z-O@Mr?9|Gu-F9w}1U&;2Y@K;d;M&oHH-}%i_Op>2V=vzP!}o5Se(C19 z$!ov+@r`3AuaAyh`|Z0o&z)nZd;#`qu%7+He33c4bD6^`k%6RQ4H7cIPS~!n)634X z7wn%A8%sC}tUmB7B`9&)+t02zqQy??1_{LjqlE}X2*n6Kwp09$+Ye;Q7>>wYQCUh6 zS#g4Z-4?f*SHlGu=F){tti}1pQd4nd+Q#wTv>ho9!O6Kw(yk0ux+FuPVzepkN!Gc# zN!iAd8p6FlZw}xEVyV^ZE?CQJs&p4t5~QmHKZ4lqUChU4)!uqXmhc67&!6 zUr>LKl>ZAK$kpNR()B3bpoxe0avyC*enxl;-_@;GP;H=3LN|cpZl52g)zH(Y0Pd01 z_sC)z05WKz3s|JE+JFI|%h|6ApCOIRQdDGE1cD(yJZe7#`stz+Pb!iN=U&y3YUY@? zDyJUp5rR6}fOI2kpVveFp8VsydO~`bHQ*;ZlS>01k`S)b95m7eX!b3DlzvyNH%eW| z=OAySa(|>NEYnutg4WDoX&zOe8Zw455Q(RpkVoRZv1n(Xyl*f@C547qcz$J(3`PoO zT;I%BO+CQVh3uE}E6K&=C-V=Jr2NfKjPBJaUW2d}VI4vhdv;A6_BFMpXlp451~47n zK7R!MwV-MI)!~EiuSJyB;HWsl0Ky)GL4>^kL;UjcA^r(yE1<0`r>j`i+I5fBq5gq@ zrA*=20FBGaKH3N>1y9N68_xLMg!62G;1{uvs@?44wYj90-Cf(_Q$V4)bA9CG&B@p4 zKH%vP!t)3!E>-^MQWOL9^;W54c~vPmzS~vv4`}DrhePquw6mdYNNq#dg|GxcJIBR9 z1Al?~2D|8dXxpEJZ`8wr3w)XQVeOEA$DRO$&w@D0Zy6ga0>| zyjwk@TfYj;;hKc;*i%BJcXw|*j3K-K;RxjKyspOzlC2+HLPxkBE}>U-%=x&7{nah% z1XX~V;bH&T=pqIt)>PW{A$Vj7W5Q&H@&MUCpGh@2Iw%?%JqENTOP>eY3iRcgpkRaS z3^PG?Zpn8NJA1Xx4|dx41=dGXG-Q4(A7UJXmHi;w9^-BuzyKw|HUYaoGZT@7sEXhVt6P+r8N4>KD|IDAWS`ZQ zxeVY>&Iw*MNg}=lsG>{j^Vym$F7FsQ@0P|Knty>SUK&+(w+( z9iQ_f^Bk-0i?g$(4MK@?zY`YuFBEK`X6u2fho2FiflI8lp_IMm^RuH3^;)W5wrL9~ zWrsFBPXdfIo*|>`7mZB@%oKD5`@C`CI_)}YHxVx(Ee8m?GB@!M3SLAQ1xUHzI)-IM zk)_V;RiZ~&q^V%pVKkYo4q9Q*O2kVz%n_9bJC%W+9$CTkquo<>ODty7O^x>F;J1Tf zhQLFS@FW*M^)@kF4h&5PhLWE)w~)C)T|R#?-_l?cE|xy&YcL9bG77*@hAY03lv>~? z5$5jZTgy;VhJfiMMV8Qw&2zp(%fcxDL?N>Ah*aLFgc97U{6>+D?S!X%2DHpXo1|rZ#W= zi#@|kh5M!=vFUJshD~$a7QUT_?peNrzl&TaaG6QCK0Z3b%+8xt?_ueVc6Plp*jyo$ zra6Ggz-0WL4e#Z?Q~&Gz)5~f#*(F8mrb0WWy5yfYh7w(UIfRb2Z w$6oRq_UVoZXA*a=rBN*g_3Uhym;9bx=sH%_VI+BJ?#uC?n*8opXtl`x5Bf0v(*OVf diff --git a/src/integrations/__pycache__/config_manager.cpython-311.pyc b/src/integrations/__pycache__/config_manager.cpython-311.pyc index 532ebfd01f1c1c5f5703a5e7fce936a52476d9a3..6f2b9e208d5e380b3236de349ce553453f24b8e8 100644 GIT binary patch delta 43 xcmX?7xVMmRIWI340}xaxnPw^}ZR8VX;WKoxib>8-NsUP?F3v38Y{t@O0ssW4408Yg delta 50 zcmdm6c%+bTIWI340}vcGewJacxRFnoMbyH@DkeEUB{im`xIj0txHz-8Br$KZK1-ho E0FosTX8-^I diff --git a/src/integrations/__pycache__/feishu_client.cpython-311.pyc b/src/integrations/__pycache__/feishu_client.cpython-311.pyc index 658294d6de039634baa557a87768984f18d79038..a28d01bbb689ad4e3ca14a0c19ca96739f531e87 100644 GIT binary patch delta 43 xcmX?9w7ZCJIWI340}xaxnP$pqZ{$12!e`)O6_cEwk{Xj(T%1|F`6El92>=&74XywH delta 50 zcmdm8bf}1LIWI340}vcGewOiGb0gn57EyB-tC-~cl+>7#;sV{o;^NHWlEl2tuUG<2 E0KoVXRR910 diff --git a/src/integrations/__pycache__/feishu_permission_checker.cpython-311.pyc b/src/integrations/__pycache__/feishu_permission_checker.cpython-311.pyc index 1ba636cbf8d28332e2c05e964dc8d5a013052a97..39240f92c9539f7394e024aebc539e025402848c 100644 GIT binary patch delta 43 xcmZ3Lu{eWoIWI340}xaxnPz_0*~mAUna{?>DkeEUB{e3oxHz+T^ET!Z0{|TJ4f6m1 delta 50 zcmZ3Su_}XaIWI340}vcGewOh>dn4auW>IGstC-~cl+>7#;sV{o;^NHWlEl2t>zPXo E0IZ!6y8r+H diff --git a/src/integrations/__pycache__/flexible_field_mapper.cpython-311.pyc b/src/integrations/__pycache__/flexible_field_mapper.cpython-311.pyc index 0598bafd7d8e0e4c70128146c60ce3bba49d54a0..6911695fbb3425a0c318ed25a90cbca94e40d1cb 100644 GIT binary patch delta 45 zcmdn6lyT)!M!w~|yj%=GP^Dy=x!rXmUn47@g^N{8a(+r`Ok#0yX7T1FtUSH|FnA5= delta 52 zcmZ3vlySpSM!w~|yj%=GaOdd1j33S$`5IY8?Nh8`lJiqiV@iq(bQ6nkks+ diff --git a/src/integrations/__pycache__/workorder_sync.cpython-311.pyc b/src/integrations/__pycache__/workorder_sync.cpython-311.pyc index cc7165977b512cedc828104fc08d3115bf392f0e..6b1714b8392b65ad4e1b243e927efff9816c3760 100644 GIT binary patch delta 45 zcmX^2lJWRUM!w~|yj%=GP^Dy=85XmVZvzvbp^H^aa(+r`Ok#0yX7T3BOuq{OPo59Q delta 52 zcmX^9lJVS2M!w~|yj%=Ga7Lab(p-v%a8ixjJvn3CcG-NfSJ%;J*7yv=8r Heis4&$uAPe diff --git a/src/integrations/ai_suggestion_service.py b/src/integrations/ai_suggestion_service.py index ca75e8a..3c0be73 100644 --- a/src/integrations/ai_suggestion_service.py +++ b/src/integrations/ai_suggestion_service.py @@ -23,16 +23,17 @@ class AISuggestionService: self.llm_config = get_config().llm logger.info(f"使用LLM配置: {self.llm_config.provider} - {self.llm_config.model}") - def generate_suggestion(self, tr_description: str, process_history: Optional[str] = None, vin: Optional[str] = None, existing_ai_suggestion: Optional[str] = None) -> str: + def generate_suggestion(self, tr_description: str, process_history: Optional[str] = None, vin: Optional[str] = None, existing_ai_suggestion: Optional[str] = None, context: str = "realtime_chat") -> str: """ - 生成AI建议 - 参考处理过程记录生成建议 - + 生成AI建议 - 根据不同上下文使用不同的提示词 + Args: tr_description: TR描述 process_history: 处理过程记录(可选,用于了解当前问题状态) vin: 车架号(可选) existing_ai_suggestion: 现有的AI建议(可选,用于判断是否是首次建议) - + context: 调用上下文,"realtime_chat" 或 "feishu_sync" + Returns: AI建议文本 """ @@ -70,16 +71,11 @@ class AISuggestionService: 2. 如果远程操作都无法解决,可以考虑更深入的诊断方案 3. 语言简洁精炼,用逗号连接,不要用序号或分行""" - # 构建用户消息 - 要求生成简洁的简短建议 - user_message = f"""请为以下问题提供精炼的技术支持操作建议: - -格式要求: -1. 现状+步骤,语言精炼 -2. 总长度控制在150字以内 - -{suggestion_instruction} - -问题描述:{tr_description}{context_info}""" + # 根据上下文选择不同的提示词构建方法 + if context == "feishu_sync": + user_message = self._build_feishu_sync_prompt(tr_description, process_history, vin, existing_ai_suggestion, is_first_suggestion) + else: + user_message = self._build_realtime_chat_prompt(tr_description, process_history, is_first_suggestion) # 创建会话 session_id = chat_manager.create_session("ai_suggestion_service") @@ -248,7 +244,127 @@ class AISuggestionService: logger.info(f"未找到需要替换的内容: {content[:100] if len(content) > 100 else content}") return result - + + def _build_feishu_sync_prompt(self, tr_description: str, process_history: str = None, vin: str = None, existing_ai_suggestion: str = None, is_first_suggestion: bool = True) -> str: + """ + 构建飞书同步专用的AI建议提示词 + + Args: + tr_description: TR描述 + process_history: 处理过程记录 + vin: 车架号 + existing_ai_suggestion: 现有的AI建议 + is_first_suggestion: 是否是首次建议 + + Returns: + 构建的提示词 + """ + prompt = f"""请作为专业的汽车技术支持工程师,为以下工单问题提供详细的技术分析和处理建议。 + +问题描述: +{tr_description} + +""" + + # 添加处理过程记录 + if process_history and process_history.strip(): + prompt += f""" +当前处理进度: +{process_history} + +""" + + # 添加VIN信息 + if vin: + prompt += f""" +车辆VIN:{vin} + +""" + + # 添加现有AI建议历史 + if existing_ai_suggestion and existing_ai_suggestion.strip(): + prompt += f""" +历史AI建议记录: +{existing_ai_suggestion} + +""" + + # 根据是否首次建议设置不同的要求 + if is_first_suggestion: + prompt += """ +要求: +1. 详细分析问题描述,识别可能的根本原因 +2. 基于当前处理进度,判断问题处于哪个阶段 +3. 提供具体的排查步骤和技术指导 +4. 建议需要收集哪些技术信息(如日志、配置、版本等) +5. 如果需要,可以建议进站处理的具体项目 +6. 语言专业,包含技术细节,方便技术人员理解 +7. 建议格式要清晰,便于执行和跟踪 + +请提供完整的分析和建议:""" + else: + prompt += """ +要求: +1. 基于已有处理记录和当前进度,分析问题进展情况 +2. 判断之前的处理步骤是否有效,找出可能的遗漏点 +3. 根据问题发展阶段提供更深入的技术解决方案 +4. 如果远程处理无效,明确说明需要哪些线下技术支持 +5. 详细说明进站后需要执行的具体诊断和修复步骤 +6. 包含技术参数、工具要求和注意事项 +7. 便于技术人员快速理解问题状态和下一步行动 + +请提供针对性的深入分析和处理建议:""" + + return prompt + + def _build_realtime_chat_prompt(self, tr_description: str, process_history: str = None, is_first_suggestion: bool = True) -> str: + """ + 构建实时对话专用的AI建议提示词(保持原有风格) + + Args: + tr_description: TR描述 + process_history: 处理过程记录 + is_first_suggestion: 是否是首次建议 + + Returns: + 构建的提示词 + """ + # 构建上下文信息 + context_info = "" + if process_history and process_history.strip(): + context_info = f""" + +已处理的步骤: +{process_history}""" + + # 根据是否为首次建议,设置不同的提示词 + if is_first_suggestion: + # 首次建议:只给出一般性的排查步骤,不要提进站抓取日志 + suggestion_instruction = """要求: +1. 首次给客户建议,只提供远程可操作的一般性排查步骤 +2. 如检查网络、重启系统、确认配置等常见操作 +3. 绝对不要提到"进站"、"抓取日志"等需要线下操作的内容 +4. 语言简洁精炼,用逗号连接,不要用序号或分行""" + else: + # 后续建议:如果已有处理记录但未解决,可以考虑更深入的方案 + suggestion_instruction = """要求: +1. 基于已有处理步骤,给出下一步的排查建议 +2. 如果远程操作都无法解决,可以考虑更深入的诊断方案 +3. 语言简洁精炼,用逗号连接,不要用序号或分行""" + + # 构建用户消息 - 要求生成简洁的简短建议 + user_message = f"""请为以下问题提供精炼的技术支持操作建议: + +格式要求: +1. 现状+步骤,语言精炼 +2. 总长度控制在150字以内 + +{suggestion_instruction} + +问题描述:{tr_description}{context_info}""" + + return user_message + def _clean_and_validate_response(self, content: str) -> str: """ 清理和校验响应内容 @@ -346,14 +462,15 @@ class AISuggestionService: logger.error(f"清理响应内容失败: {e}") return content - def batch_generate_suggestions(self, records: List[Dict[str, Any]], limit: int = 10) -> List[Dict[str, Any]]: + def batch_generate_suggestions(self, records: List[Dict[str, Any]], limit: int = 10, context: str = "feishu_sync") -> List[Dict[str, Any]]: """ 批量生成AI建议 - + Args: records: 记录列表 limit: 处理数量限制 - + context: 调用上下文,"realtime_chat" 或 "feishu_sync" + Returns: 处理后的记录列表 """ @@ -377,7 +494,7 @@ class AISuggestionService: logger.info(f"记录 {record.get('record_id', i)} - 现有AI建议前100字符: {existing_ai_suggestion[:100]}") if tr_description: - ai_suggestion = self.generate_suggestion(tr_description, process_history, vin, existing_ai_suggestion) + ai_suggestion = self.generate_suggestion(tr_description, process_history, vin, existing_ai_suggestion, context) # 处理同一天多次更新的情况 new_suggestion = self._format_ai_suggestion_with_numbering( time_str, ai_suggestion, existing_ai_suggestion diff --git a/src/knowledge_base/__pycache__/__init__.cpython-311.pyc b/src/knowledge_base/__pycache__/__init__.cpython-311.pyc index 6f28396015b214ddd8345ce0f3d32b8b8ad255d2..912cf7a311ad761053393cd7d3b96da73c5125f3 100644 GIT binary patch delta 39 tcmZ3;IE#^YIWI340}xaxnPv)4O2uEX2`Q1BAvTrWBTX*lvTcJJ zIMf(pB*weWd0bRth@hybkotlUP!sMCpr(n2gv3N?eYuTXLVV>+n+A^4*`3dPpJ$%u znJ2T^4>Rz_0yI7}7`6d24&L7z>S&)aK7mlebMQE}ji1>IY&?LW_<-W0QA(cTb-rcLyVpP$bdAdJz1Q zh->FhIF@yCII5fvgrrChQ>a5$Et!bS&+QDp=&r-v`T(xxEn4^h0`LUlpsy5n?Wsi) zynqLq-K7$9m&tDxia;>H;EwhxHd+P%9`xu?|QY`e4VA8mq<+ z93Z-5BghGq>OmAO!!PUXNIQV=r302B%^>;>NyUDWNmW1W2j|dFpdX65n3LqD@4QI= zHJ!OP@#*>1)j6CV9n0K#mbrc9+9>A!wT*V z-}=Ahc(}%fWpC||&E%#pm$Z4ntwXJCcC^UriC(m`Z7%Ji3sGGSsTOnEv&}1@#UHkN zZRj7H#w*~H{u)@0&-?#|kFcTB4sRyvJI^u=hoD(wo%BwZOdV4Jk+aU+@?GHDr&RbD d4|loYJWh0FTYHP3RR!N>Hs@da&aOg#y|3{2U%>zX delta 216 zcmeC(%lLRBBj0jfUM>b8IBfhZW0K=WzSWG39+P)5dNHa@W@WNuRGnv?mN8@VrpP3w$^0>_EDZ9jVv}8BJ}@qwY#OW1xP5YL a>__`xHb$`z4A{w!VDT?FWQ*j09svMXhCS&3 diff --git a/src/knowledge_base/knowledge_manager.py b/src/knowledge_base/knowledge_manager.py index 104f8c5..0c7c9d6 100644 --- a/src/knowledge_base/knowledge_manager.py +++ b/src/knowledge_base/knowledge_manager.py @@ -417,3 +417,23 @@ class KnowledgeManager: except Exception as e: logger.error(f"获取知识库统计失败: {e}") return {} + + def update_usage_count(self, entry_ids: List[int]) -> bool: + """更新知识库条目的使用次数""" + try: + with db_manager.get_session() as session: + # 批量更新使用次数 + session.query(KnowledgeEntry).filter( + KnowledgeEntry.id.in_(entry_ids) + ).update({ + "usage_count": KnowledgeEntry.usage_count + 1, + "updated_at": datetime.now() + }) + session.commit() + + logger.info(f"成功更新 {len(entry_ids)} 个知识库条目的使用次数") + return True + + except Exception as e: + logger.error(f"更新知识库使用次数失败: {e}") + return False \ No newline at end of file diff --git a/src/utils/__pycache__/__init__.cpython-311.pyc b/src/utils/__pycache__/__init__.cpython-311.pyc index 2bac13a25f9e2b85b8b98436448666ac46339dac..512823c6a9f9a1980756ec84b95fbb6d8a2fadd5 100644 GIT binary patch delta 39 tcmbQiIFXTeIWI340}xaxnPv)1r|e=ClboND8k1ODoLRiNljXA-03*u|RsaA1 delta 49 zcmeww_9u*YIWI340}vcGewLxSkvE-1R4c_QCOJPPHKwGvKsT|tIJ3AUF>iAd%V#wJ Doe&Xp diff --git a/src/vehicle/__pycache__/__init__.cpython-311.pyc b/src/vehicle/__pycache__/__init__.cpython-311.pyc index efa26e4ea123823f7ac710edd839b433f50f265d..e533729a98ac4ad8fc4ac2fe0e17e2de2a50b389 100644 GIT binary patch delta 39 tcmdnVw26s#IWI340}xaxnP$$O$h(P8&BZDvIX@*eCb76Uvv}f_Q~=Kh3|{~M delta 46 zcmdnQw3CTn3CcG-NfSJ%;J*7yoqO10Z+sb AP5=M^ diff --git a/src/vehicle/__pycache__/vehicle_data_manager.cpython-311.pyc b/src/vehicle/__pycache__/vehicle_data_manager.cpython-311.pyc index cf963a62566d6fa2ff06a57959a4b063f00d7ff9..256e94c795ebfdd99eaab62d0a50844ad3f1dec2 100644 GIT binary patch delta 43 xcmexT_qL92IWI340}xaxnP%>?-pCih%xC0c6_cEwk{Xj(T%1|FxtjT>H2^YA4w(P| delta 50 zcmaD`_oa?+IWI340}vcGewJZrwUIA^S=2JcDkeEUB{im`xIj0txHz-8Br$Ju3G+{D E0JxkI4*&oF diff --git a/src/web/__pycache__/app.cpython-310.pyc b/src/web/__pycache__/app.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79054f0c0457933c2d5ef2ecb5eefa36234d9d72 GIT binary patch literal 17260 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 literal 34948 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 U(^ucQ;kVj_;}%9+NW|9v0sX4Owg3PC literal 0 HcmV?d00001 diff --git a/src/web/__pycache__/error_handlers.cpython-310.pyc b/src/web/__pycache__/error_handlers.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..03eb5bf9e66bcc2297e21b9026840c2c71799764 GIT binary patch literal 2878 zcmbVO?QaxC7~h$FySrXrq2|jgYi_5Qqi{DF1_B_p9A&`x%W1F~;Yaz1E{}HDQyPxqarD-_7%T z-qxwFk16o9+P|IrJE|zZ<4g4eGUaU;?j4wzl2RC9)Fvqct7_A{no_SWGr6ACScFAKwN!nTB*yAM(oiLdvwDy;vYo7v zH?bz(%$i{}c}q6JTG+NxJ++PPVy)be`zAMe6F0JSmy$JD8`}Z<+ZjEkBzG6zf$PWC zW-hK?zaCr}U70$+`op=kt2cs+i^11l2Dh&U=WfT!lT*w0XIJiBUcPf?<@?cU?egM6 z@XKUu4N#QcB=PkDVfDL7)sGyqY}-0vb6-7J81%Jwa~Tiz%~P&Z$Ynv0EfzAqA-Go* zg$%*-m50Kr!%$&7=zz&n#+4D^)gvDDRA~hrQ?kG}Q%BZZH%XS4v7wDUmDWD{@>prfBfrgKrXLm=a}Zk4NSyBjd^` zbyi`tL}!&t+5#bpr!kdjo?fCO1Y|Tv;I?{}9#;(IBZ!S*`Z;hNt^))xjlqu}!8B@M znwu~qTVR@lV~=1)YhcDUVb*Pd85z7;g&Ae>8kqH)FdJ%N4k*dS-eNrv9!#Dse{&=B zRN^7+PWU<(!V$%WO`F|`+!Xjm9x7iNS-Ut@IV3eh$?~0v)muM-<}_+H0YdrPvE_TW z%5&GsU)&GIZzPJ%j|)M6WwuVE~e^x}NYGk8+XExo*xWgr}O1-vbp<2M3o_U$aD?>l>#58CJrVh%j+SdDzh<9LMXj0MYfjT#@M- z;3v8yjp>tCf!SQRo&AGwDagrwE|3Ek6N=I%(m-~S4iY(2Yo-4T?F~WFR(~!nQQgiS z+sRnAd!Vxdxugk9SAqE|@r4GzmZ-d#3`~CWW1x*7c9A86wiB&UU_RC? z2mnU6(5^x&H z#X3@r@))x+f6L#WEq`|lN<=VuePw1b_ZMWZcpi?{=%zCcQt z?o1eQF9E!)wAEYPi6J%dS|X`dg(hAosR@ifu^%Tq=|=>2`<(*tC&P3jR{hqD;Fecm zG`+6X17}=Jj|kOBgtU=35ii5*pGZ-dALa3>;KF5J!$8hp?OA`2Asmtw3}9ddJ`v{V zFfA!eEfP^*Qc9F*JupAf`Vcyh)_;(szUdY-8SsiUs#m-Un9>ZeTmF`|CfB8*g|f!& zs2Eo{zhT~C&~@=UBt|1(o<>9`yd$%*mwFzKMMW`$-f(mpsR@ zU0HB_!yD`exj>6$&6OqC*R!_eo(_9Xw2yo5%eEBO4OvF8xXK(2Ll0YmujUG#uY1LQ vXc)-0yj7LM{_|R-C-1PL%@05hDQ+7~;3hpzwu7T$v_)-cZHc$X_eK8&A;KK( literal 0 HcmV?d00001 diff --git a/src/web/__pycache__/error_handlers.cpython-311.pyc b/src/web/__pycache__/error_handlers.cpython-311.pyc index ca420e6b651f75a8ed91e6fbc2119c70a5857d89..5a9aeec1a3399db3ce60d8233dc7f212b9a99afb 100644 GIT binary patch delta 41 vcmcbuc}0_FIWI340}yDQO`lkHeB zX2s^?R$_q`)wc*!SZs!{*tAqkTFGfr)R;U%a`D;_ETlEAU-ah|mX{WmFP-tP{H!hi z@xy~VrjhnE5!+@jd)ICLiI zBsoq_QeLQUos_0w=f}Y|L|i%#!I-4i2$OEe3zU+NNM)x&TzMi-$&^eyW!tD?_aoFL;9_MAq=I=`Zs@F`TfU(+2LG_$HCym?dllB+EYrE(W;kx z^E1;DY3ao*&Z|79a1~%Yh1k@nVY*d5p^w%orbjIiouEOryq+=34TIPZ24?^oO_FGe zZl@WzC90m59&2)aS4T`D6WfvoLx{n^K&;|w`1a0_DG0|rK~WbZ5KXCVgP}mQ4@Tbe z=N22Y=L6kL7-(H#3XXtfwGSF`7LYQXA{2r!jRBB{Il>?XQ?S$#k#a`G%}JgLiI*=M zr3&8(0KNko)HEVMqA5@o%&WNX6phpRU>CAMF2ln4A-ifCwsR=ooa-f9V~dm{=S3-q z!7k``dQ78otqISCepM+Y*Pr<>zZ=TTQA>~%`2~_58M7+x6N$>Vg~x1xkNJE~(p z>ImmcC9-k87bbE{{SJa0N$*4Z)6mopbfeV1)OtaCJDoj?>!DU1&b)r1X8U^2BQ6U~ zeedSZH&qo`1gfrlG3Vc0Y*mm=(zR3B{`W1zc1vaJ=(yoF&uhrhU8pT98SqlqtUPaG zbQ3^asQ3c1Y0p|AaUShL;{9D%;{4V*yDni<(P6%!xLZ)%DD-9YnT4jldlR3V%DQ%F zuH5@+<^Gw*cfT|)F8yC|`#!YBOQvldGhAa$+bn8(G8hS;Is-_k3>So6LRMWAeiiK- zCUJA!aH%dy+=19wXOYAm=mY3H3r*J~?f{#3>V_BgV{nU7hy2;!HL z_*znGcvd#)ELWPOLbXvIuR8+U;B8rjhrSHA;E9_?cJp)rDuXM{%Zy^tW>{_HD5u%e zjq9^fPBjd1W1Ts|PYDWdOzdTiCdZQA$*(WiuwmOFN9QoW9Pxo7WoUg*$D6YrKb%YB zcM*Q$=(?xrdb!GKHuh7x{%Osyn}Zi zo3%t2J&YyCbiv4q@~;wws!~Q)d(;H}GKo}NAaXtYH2`^Wcj82;GR85{I7WaYIWK|V zC1CfGaBRFSzEQZyVv!f9!e99SZm!!T>v%Lkb;;sZ@hKX$SuWYS((f literal 0 HcmV?d00001 diff --git a/src/web/__pycache__/service_manager.cpython-311.pyc b/src/web/__pycache__/service_manager.cpython-311.pyc index 9465a5b23f3a82b1baa81ca967b75d8fcf663acd..0ecaca83ceb4835e6d9217f7450b555ec6d3489f 100644 GIT binary patch delta 1891 zcma)7ZAe>J7(OTW-sIlgo5ZTk9JL{SH(jjO&#I|kn~qW@-Q502nS|W5TC5o-QO1_G z*>Iho(|Ss6>&FyI)phj8V6-s1;org_4xth#>_?*=qcme1jKRjpPcia z_dMr4@5fEV`7FmeZ?TvWw8J;cI}4>NR$AwQnR$I`BtAH|ad&QG>~j3Zf_dYc&!60n zY|h8}Hs(h*HE#B;e>xr?oPGM>LHzE_lW&Kvd|h^_1t=zvAGKi>wHZ|0#;Jxr)W)lv zUpQk>`98kQs0tu4sYXCiH33Sh2x#8akw8aQ%^*=!xfQvTn6=eUdOLmoH@w~6vwqUU z?A&Fhv(U*5&HsOv(i8Y7cF_;<0juk^>eIe}>Obub20MfF4z9x~^k-a~@rQPkFb<=0 zFw$EuCVtvr$hU?JNfAP`2I}S0=!`+CnC5O{gzmtrH;lSVb5O{boFkNrNd5)xh3!1s zo`X~_j3<%Ghq*~K&F|*<7^wnXHn^IMJz2o^^s{^M(QCR7bmu=`>fZ{-^QD2`O`xT( zJ9{iJcE<0074M&p&kx0iuTcY+S0oS#p~3B;tP_kI5NLY;x`nBXTQ zKwLbLL5cZ26Y{tm z&1{(M0?_+PO5VNUllzdyZ-aE}4z+KcLYz#C1z?+e#N@$w^r5L# zBY$QuWGZf^vXhu%sT?1nm6AJ8V^(|}-cb8_J)!@NwqL5iZu*^+w7J=Q%U;H)OLtR` z%g1mzt&)>A_xd|JeO>tjZlX zWR(XlEzqN3xmXdRUY&bo-Tha zc^zad%E8M32@YeN;5p30$pB`A3+SkAKb^7V)Ky@xXD|H1WWQ}MgfL3W8auL*n!TEu K9kH=TJNO^5)corJ delta 1422 zcmaJ>U1%It6ux)rcuNZLt;#6?aQ1_@Wew5c<#;kwgN@zL*DN1yQCbKKSIhv)OHJi+ApP zGxz-5@0@eb%hmZ9LpDN=UB--HI#GRIk%K6KvXzPb(j_o z?YQlSQl@3{Ccf3j0%a3$UD(}TNcWPG&=3>SN7(K&B7AQ2DP{U8u?2WVe42`ITukne zPPd}ruOEE9_2I|$l(%kP`T3jkup#y*CB`dL3%>Mr-Z@p8D;8?XeDMTET9X~diVO|H zXuu*cAa!A66OuI=L4kV)VTo*pIxdzjFRq1#aC(BIxBoaiRw-8(Z!E4z9~l?R>k(@$ zV!<8hwT>uyoNw(SSF~|Mtn`cr#nqrZZa_-@wk5_ncJh5GLW1d_D`PYcN0j6q6D74^ zqe7)BWgRG~3iZG`xf8EMf_r_Yr07ogP8p>p(7Rn{4mP*WBfuG<>N>}Nbpk3;%0le*`qWmq-leQ)=39p zuV(f8G~xVgu9Q7lZ;2;yoYnTx0r*O*r!fr&L)T(y&N2EV4xUOInBfE+fmFDW%7QaH zm!Eh3k7hZXp~J8mPRDpy`G@+6@OKgKKP@oz_L%l?7nbQkV$&)AP6|-gJ7be9h{nn7 zGw~awc_tfrO4)~6_ZiTP_#n0ePERD^!L?A5`OLg(jnQP@4+Y~ng%cskPex~a68HDJ zRmQw>jD^spQE+&{JTNrI1#tvyOf~$T@q-%wUX8D-T^nlGT4VZ*lgTjLHv7&p1FdVK zTVj4wu^wEq0S?0)c-U+|2flTc_`Xc%f|Jl&wb8n3$>f*M_%9O^M%n-X diff --git a/src/web/__pycache__/websocket_server.cpython-310.pyc b/src/web/__pycache__/websocket_server.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0637bcffa90d3ed1549d755077aac3647866d375 GIT binary patch literal 8198 zcmbVRTW}lKdEOfq3lIdaqNtk<+lp=278%>IlPa`EiDbuWUCJ@#Xw0VB!Z=G3G=Qbg zF2oRl64Fv^jUrh}Y?>rcnSK{W3YI;Ko2Ol4YL zomAyjo7Ci0pVV>H^G3m#G*p5y@{xi$X%?cBQTeRptw{^xk$kKWpNwP7WYK(AAu*Xy z6-Qt0c9JXVWY1R=X0h05g~d*3lf6!o#h=so6OKOHht|)!&Z~g#J*7+zI0MUrD+=&v z6SAcfr9Z(IIsLRaQKtl_1&zS zU)Qh_^8-&gnLI5#G?VfFJX6d}J3LERTYphJ97OZ>s*2($prb-G1pV%1hGVdZ6PYrI zHm4(#CbOLAl*VE#e%b)_f~PK)z*CH#Shr&UI>~x45@+|xu|B7Z^<&&*18fjj5}U@i zu_26iZyMjuhB2PpG`@rF#CXr9@m*{;#(Ou7?_sxKye}NT6{iaJlVZ1FykG9}cDeIA z*k0^>fPIGDd0LqqWOuQ>gZ)Snq_A-Y0rC5Wdt80yf4PycMy$o6Y2BT+d&B zk(U*0LMJMY!%+BU>PSN+$x-dK^Kh<1(Md7slPwpP&uIrCx zJTK?@qaM$W&O6Ui^Q83Jo|LhXxdma_cCMK7ZF@V`c@{cTHC0PZsO8}X6#|hQse_7G z15=icTL00#f%Z>mAMZuCgrmPmo*w8^-Ald9)Q+<{!aD9 zbJcf$Qakg(ji0TS`Y_gbTD$&6?d7-kr^eF}-iryLXBZP^-kpXP2qRaVaz&Cm1=n|M z%y7r^u4tT4@NLu)O@eNKR`+mc8gy}ZNXR`H{MbaNEhe-fwS4QwgKvQEcxXNZB+Ub@ zzp~gkLi>SgKl;1swZ)bLMOn_vW;o-+z`%D(<#cgZQS}M zSP?CNJTM<^QcFTdwwhSyEy8*%spS`ZVjUQDQm^RCup_uLx2S`2p}E=gwYYg1jJ!LL^?u50r4~-%#IKiAf^Bj?FbPA#5^FZ z4iL(6tfI2`<}(mIMNuQA?1yt9sKdumlljgTgqF8V@ug)v!?h=V^^{vx4F22~1qT2gsYD=ra@E7JB z5epf4go$L9J8&$}YiPV%92W`CDKa|*5M9%bZ_hyFUA_Q262Q*8{5jj@3>vhJ=9|y9 z=V$zqC%Onnh*Fxx+NGb~c=PRG6F1)bu=>XLN~Df|I&pNowtTI6?ZWyiKVDm1Ee$qy z9>7-LdT;F)(BE{AFlIfsC?a_`!#ttmy<*6o$rM@MvD?oe2J7Q(M;WM(wjOCmeQ@*9 z_SC1gK4Jr1%TYxa4vmvLoV#4~(CH34S(iDF%7NIU-^@C5KFBPURYU?f-Sc@m+G2E4 zAc8R9?=vD1GQyU8i`SoWOsLLA?M{Z&2!ZYb7ViOc+M=e#Rr*`nP8jITZKsyhhSj9n ztKOqpi`pN`w`?>9?Wo83=Yf|~V3Q@YUH?fZfCp&{7;a$3wPhKbt!S_SbgxSbpv> zHxyTsnx<=DxA}X+wA5R)@|_#mSr_eg#p%q;)4*NlrL^V5$xt)15wzQ4Y> z6xfM?*OF8`h0Xq!sC47nuc}wSU%md_wZC1eUU;GQ!>i+>x2{5UdR{RkuLCNZ7%k;} z{w1sq*v!9-+jKl&EoqbFujrZMZWbo9ZYU+M`C*!Wl)A^LBPR2&pzFZmgEXI_?g{E1 zr)~px_hIa5H18I4+F~5swX{LiP?I|GSaSJyMpSZnZznFdn!z?6M}d^07t+^{eROR+ zHoU=*t6IoaUFw_;{~U6abQ#(UJ#OJ?1UxmNzxRTtW~jdbPmw<~^tXX49V^k{0{vZk z`Ge|(A5~v|v3lX}*WSHa{q+x9IQv^tt$?Y4h95Z$hKAnBt}`^<%Ft*ydvlHskeRRR zdwmsYaA&Tz+U%y{9;7v2rEV*Rj$opI_VI3X#85-BGa*&Bjh%ONVrPs0YU3s)0>n{i zeXruCjhju4r8~01rnJY1v|xjy@*e!by;U&~n?=w}ZzPleE0lnS)vZfFB~mdf(TcSa zIf;A_k`QZ=gf2)z9FlMZk`QN!7VVC+ZkF6+$$K_g^6Cd~SI@V~fQa}xKktYx=6G42 zlipNVS%fgt2vJIu2i49l)-J8CzxwX_PyR+&b3EtroWCH>*ok7D)|nzt8Sp!jj5R`^SK8Qd%{ z=}z*pDYR*mnpPXY$MLeQ^igu*#@Y94i%X$Cl4mM4^)cWR>0@6DVS{L}u8`81$phca zyz;w%{U(IoTKSsq*h=|63$&LB^#r=|zD@+>^%@(V9WXjSqiNyZmNr5E3}1qj>AM z=&lvjFog!fly1j_ z`;W?GqADGKkTC@ApFafbVbm6Q)D0p=g_2KK+(?V!{w1)<=yppYQ55hmXkITm1lR4c z)~-!b)shkza~Xf8bNYN(l}1~gRb=8Uipp<(alu*YNr0PLx3>Q&f z`TUn2Mv`9Ki^LUS8WP-Z1PSglO7Sx?nVk=l*(COnU|r2*Rwk@*N?41#n7mTDdYtyr z-MSBkz5QQCH?BttoY*P_4r)OnekiDhAq^8yxzgM;&oHMPf6j5{_GR+96HbW=D79DK zub#QOe))~s@=Mj1UJMpj-}=S=REbI}jpvVkdA@q?yVZ+73lZ&4<^Ds5b=h&Gcmmj1 zDlER?b*UK#Z{k$IrKC_G+RPxQ9WQMM!iLxcm;>oX;+v$R)AJ>y9(J(Yld&iz!t+o) zvN|Fm@bc^=hD`acuSz`aUOadEYJ_MOJb8r9+wQNP+@a(`;x z+dn$`iMl_iP7-6bEGhl~6COn?2mxgsl}d2jiYaGccPmJ!r9LZiwR#?xk7aqPj|J{JeyT;@;dxs>Skz%5%~tuYu7WjaJh(P zyoF*m=L++&l8-bV2bFc-=V_@t;T+w`Vvh00`FjAn`td@|AlvUD%tnNWLr&Si6LhhBeN>s27@}DPAg)WgHvDd>d}LXzsu=9~m2++Y)&b<z1lrqfjX9E^Aw2hlHm?6*9S^ZNv6O z^3Dk-pWep5P3VY{K?N~NAF?3cGPV^aip2CFw@-WuEMVV!BL)}=L|YzO46$4W>r2iE z;t=_T*rsoX!Dqx6lAtH#S2F%B!bCnR*jLxH884TG5t+(O3**T6V@HJ;xo(fFKvM`I*MZmk>c};{3y?0~7x+rd^)d(u6on_|W)Ai7eqC6Yp)eStc0HJMVYT zyZ4;)&VBEkbH5w-dJyVPYqe^C>6^2)f%C2}bV^3&YW6GD-hiSMqp0a#O!=8B5*2BQP@jn;+O2ZH1 zKRG&RcnL*q?eQaJr4;-TT`E6myFvl*B!FNTL|``wAwvUnghrKC3%Z(bKuZ=_(9s3D z;sHjWBg`HsIs^ufKwK1NXAJ;|G3ZUT$s;Ht%m?5j>J$Xv9KN#zL2%8Cal?O&kkMtO zA`q>0Sxbey^Qu!grgQkt(mo)lU#Fh|!}I|LVtETdttuNj=UPydGq1w&SApsr-2nx9 z$7Ms)F5?S1dWTEvKyX6|2CmQd$Q{&3dQ?V`y*r`kDMgPlv zekt6ZHJ8w}ib7V=*%OldNVD`(^cQR`{f+ec8p7NyM??q*YBN^h0*7;YKf>LK)RCX zB_Lu*DI~wR$Dhh?pJ$JrsxE*Lw5xh0o5p%l0G+O`jw)1jztldJ24vj&Y-W5QOzVJY zk!&oP%ARV5Dr(;6Kx+D8XU3#b<`N63C@w$ z-(!56_`36u4j8T!<ajIUdEn z__f+exRFUIcXvn~;joykfly`*gOd?WMD8L$Y9yuW%i7PjQt~~DF^Qz3i%|^d@8yoD z0`FRi;io|`od-DMvBsD$sd32~7fHY3Nxou&_l)zNiv^=iNxo6$8z*?*IPXjHkIDRF zLoGusSGA^N?Xf^o>yfpdG@vs^GG8;n*N^k{qXpk#JEA+mZye`0CizyGZzXn9e9=&g zW=c~qvVB}rp3sz|ZS|iy25~4UTI>sod$Ht%nQckr*UUtI5G`I|g=NUQ;v08Ap3dlH z_9Gs|k7q%qZnL{2-A^Py`j>PfUglj*H5Djo5=)!Y0FOVe%MA0O&ZxjeGY76B1umpH zXoBcu!*ccr@jZxsYrrugZdEfpgf_2ovLpuaC>mU4HNB5T61Zf+n5H3wX$GBNg*@9B U=uCtA`5SLr0iqh`fq`7QC;3x*{fs z(aa^zyN$(V%9lAazo7l%vMgb!i<-=|qz*!2;+JJ6OP0E6Ld+6(UJDhMv3TFPzkBXE z=bm%k>p8dIoxoGWS>I%4>JW_9TDJS{+G|;A)>JOl?&<840((Moe@TZdcgvxUAa%0! zI4=@l$1t`;e&>cUc0{_>RXko3xs>@OhZ`ea<2b|b0$=iTI&3ya{>&X?@S(^N^FdZU zs)&7<9yhOwu(l}%e-*jy=wNV!9x=B^PQBq$;k)$en_sWLr$Xp$gwZ(Cq7YUxON}s= z@MX|lg_#;;FpPWX3$=^>QI$h4@FrSj$}$bJ5*ua*F>y#7tcX}c8brIZZM3vFKQmag zsI@FgRg#*P73VsF1}6$-EV)L=g$RRD8w#>R=m^t>hA_QfY^E2Bvz?j`nfK5*bBe`~ zVi;E-50cWdVJ?g&H1t}biT+kB?nuiqI_s)N!L1M_=Vg?h#B zSu@OsH1v+Hh|z|5TF!~qHV8b-ALoOb)H;Nhl7%F)l1U_3eg5dO{4nq>$cg^PV9AGD zN6qUB40;kcJP?pW?FRxKQh>;`a@{`q(>iO7eqMc`L+%KL2HVL;+BSUx&)6z%fwqz zV=2(&#;Mw8%J!~NODq&|dPrO-T}=q>XHTR3SmIA+(i>$J_R9=(4$Rc3 zM59<@UY2nvn;O=N^mKL>-I;ILA~6#4YO9T^mYYkAQbFZtxm0F{RH;5ux(34|G4y=- z7Tiqd%k7z4An<26)z@cek(j3rL+kWoiMCd_w4@i*ZcGO0ClyEEc@7)d3$UCSE0o8CU0({lGqj`aT4E!CG~zNCAWs&u679X z>RtU^M7d&mBY#)VVLw9@PswYA1c7riL{tP_0Q2g_TS-1uMReaJ1ja>BlRP`3FGFswKAXx7-CYOJMPtQRerNNQML2ad>f?9nW_%n+0 zFx~BQ', methods=['DELETE']) -def unregister_custom_tool(name): - try: - success = service_manager.get_agent_assistant().agent_core.tool_manager.unregister_tool(name) - return jsonify({"success": success}) - except Exception as e: - return jsonify({"error": str(e)}), 500 - -# ============================================================================ -# 分析相关API - 已迁移到 core 蓝图 -# ============================================================================ - -@app.route('/api/analytics/export') -def export_analytics(): - """导出分析报告""" - try: - # 生成Excel报告(使用数据库真实数据) - analytics = query_optimizer.get_analytics_optimized(30) - - # 创建工作簿 - from openpyxl import Workbook - from openpyxl.styles import Font - wb = Workbook() - ws = wb.active - ws.title = "分析报告" - - # 添加标题 - ws['A1'] = 'TSP智能助手分析报告' - ws['A1'].font = Font(size=16, bold=True) - - # 添加工单统计 - ws['A3'] = '工单统计' - ws['A3'].font = Font(bold=True) - ws['A4'] = '总工单数' - ws['B4'] = analytics['workorders']['total'] - ws['A5'] = '待处理' - ws['B5'] = analytics['workorders']['open'] - ws['A6'] = '已解决' - ws['B6'] = analytics['workorders']['resolved'] - - # 保存文件 - report_path = 'uploads/analytics_report.xlsx' - os.makedirs('uploads', exist_ok=True) - wb.save(report_path) - - from flask import send_file - return send_file(report_path, as_attachment=True, download_name='analytics_report.xlsx') - - except Exception as e: - return jsonify({"error": str(e)}), 500 - -# ============================================================================ -# 车辆数据相关API -# ============================================================================ -@app.route('/api/vehicle/data') -def get_vehicle_data(): - """获取车辆数据""" - try: - vehicle_id = request.args.get('vehicle_id') - vehicle_vin = request.args.get('vehicle_vin') - data_type = request.args.get('data_type') - limit = request.args.get('limit', 10, type=int) - - vehicle_mgr = service_manager.get_vehicle_manager() - if vehicle_vin: - data = vehicle_mgr.get_vehicle_data_by_vin(vehicle_vin, data_type, limit) - elif vehicle_id: - data = vehicle_mgr.get_vehicle_data(vehicle_id, data_type, limit) - else: - data = vehicle_mgr.search_vehicle_data(limit=limit) - - return jsonify(data) - except Exception as e: - return jsonify({"error": str(e)}), 500 - -@app.route('/api/vehicle/data/vin//latest') -def get_latest_vehicle_data_by_vin(vehicle_vin): - """按VIN获取车辆最新数据""" - try: - data = service_manager.get_vehicle_manager().get_latest_vehicle_data_by_vin(vehicle_vin) - return jsonify(data) - except Exception as e: - return jsonify({"error": str(e)}), 500 - -@app.route('/api/vehicle/data//latest') -def get_latest_vehicle_data(vehicle_id): - """获取车辆最新数据""" - try: - data = service_manager.get_vehicle_manager().get_latest_vehicle_data(vehicle_id) - return jsonify(data) - except Exception as e: - return jsonify({"error": str(e)}), 500 - -@app.route('/api/vehicle/data//summary') -def get_vehicle_summary(vehicle_id): - """获取车辆数据摘要""" - try: - summary = service_manager.get_vehicle_manager().get_vehicle_summary(vehicle_id) - return jsonify(summary) - except Exception as e: - return jsonify({"error": str(e)}), 500 - -@app.route('/api/vehicle/data', methods=['POST']) -def add_vehicle_data(): - """添加车辆数据""" - try: - data = request.get_json() - success = service_manager.get_vehicle_manager().add_vehicle_data( - vehicle_id=data['vehicle_id'], - data_type=data['data_type'], - data_value=data['data_value'], - vehicle_vin=data.get('vehicle_vin') - ) - return jsonify({"success": success, "message": "数据添加成功" if success else "添加失败"}) - except Exception as e: - return jsonify({"error": str(e)}), 500 - -@app.route('/api/vehicle/init-sample-data', methods=['POST']) -def init_sample_vehicle_data(): - """初始化示例车辆数据""" - try: - success = service_manager.get_vehicle_manager().add_sample_vehicle_data() - return jsonify({"success": success, "message": "示例数据初始化成功" if success else "初始化失败"}) - except Exception as e: - return jsonify({"error": str(e)}), 500 - -# ============================================================================ -# API测试相关接口 -# ============================================================================ -@app.route('/api/test/connection', methods=['POST']) -def test_api_connection(): - """测试API连接""" - try: - data = request.get_json() - api_provider = data.get('api_provider', 'openai') - api_base_url = data.get('api_base_url', '') - api_key = data.get('api_key', '') - model_name = data.get('model_name', 'qwen-turbo') - - # 这里可以调用LLM客户端进行连接测试 - # 暂时返回模拟结果 - - return jsonify({ - "success": True, - "message": f"API连接测试成功 - {api_provider}", - "response_time": "150ms", - "model_status": "可用" - }) - except Exception as e: - return jsonify({"success": False, "error": str(e)}), 500 - -@app.route('/api/test/model', methods=['POST']) -def test_model_response(): - """测试模型回答""" - try: - data = request.get_json() - test_message = data.get('test_message', '你好,请简单介绍一下你自己') - - # 这里可以调用LLM客户端进行回答测试 - # 暂时返回模拟结果 - return jsonify({ - "success": True, - "test_message": test_message, - "response": "你好!我是TSP智能助手,基于大语言模型构建的智能客服系统。我可以帮助您解决车辆相关问题,提供技术支持和服务。", - "response_time": "1.2s", - "tokens_used": 45 - }) - except Exception as e: - return jsonify({"success": False, "error": str(e)}), 500 +# API测试相关路由已移动到 test_bp 蓝图 # ============================================================================ # 应用启动配置 diff --git a/src/web/blueprints/__pycache__/__init__.cpython-310.pyc b/src/web/blueprints/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6177792ac73944f26af1440c4d61414f1a119a86 GIT binary patch literal 216 zcmd1j<>g`kg6f!y83{o8F^Gc<7=auIATH(r5-AK(3@MDk44O=(jzBI~cxuwqT~nS< zS@B}>+^4hmJzKHx>D=jDPdBtZU9$Y?yl%Ig#Nup-f@j@rPdnP4?AY~m$*dUG)553gVil8|pOPArSX`W0JaK6l0MOYC2LJ#7 delta 45 zcmeyu_?wYuIWI340}vcGewHzjr$yAn#VRH_KP5G$q_{vgvA8(1xFj)e;=C{bNplak diff --git a/src/web/blueprints/__pycache__/agent.cpython-311.pyc b/src/web/blueprints/__pycache__/agent.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd33b8673dda0fdf0152e0c61b5712ae9469d21c GIT binary patch literal 15050 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 literal 0 HcmV?d00001 diff --git a/src/web/blueprints/__pycache__/alerts.cpython-310.pyc b/src/web/blueprints/__pycache__/alerts.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e1b9c7cc93bec04da7d6418a89ecfb0d8e4cff2d GIT binary patch literal 3165 zcmZ`*U5p$@5$^8!+1c5j+gtD51=~p+eqfMKL*sN!d$e$W$PCs73vJl78-G`3{76K)KeRL#jiTn*cS7yBK5GY~Lh{<7cU zQQ-N#&v|%Py>3SaYAF}Xe!Cq=IaA=WXQMzQU+G7Ia&`0B;A#-% z;%X^OQ84w^hGGl9qKq&H3WXFY}MM-LooH2Rn#i59CM8aW*ZC+|=4CrR)mRGDBQS4PL&&#D!c}=9Ns>DTAg8noBdyTt2EWs=zGO z(cGBmSqh`tm<%1Tn@TpfXTZyn=jmY)m?o*Pwk|ypDV-;q!OgF{R|W?bJ!>Qoiz0GAt(#r)~d5L*{&sz@*~NK zw6a5Qlh+t;?68Z(25Vj$R<2i8^Y1l!jWiefk3d}aU%WSY>6HxBligSM$8Wy(?(Ssw z=E3+^@4fqiGJAm00|-3b(_$ob&7Woc9b z3foC|HCR&)pt>7f4fr$Xo33IZS49En^*VkG5Z3VYa6!?)sT~Q+h%gzbLJY`!_iwP1Z^eOgInUappV1LdOovKbL{@)9s+)>)la;Vm0w>N1y^Mva=( zp>?1dtr?DS+%OFXWDmY|uyOxht1`yu^tJ!_(LYxoKS7;uvVV&+uz)fzd}(zJasbem zT<&stU!g=$U^1KolDojRPbOqUp^T7(jf^qbGE*|LuxyT*ZW-LnTNbzT7Tj)Q#*4Si zAx&)Vrj(cNFf0T*$qR#XkmO7!xy{RolY%aUn~zsErb%8Mvg-_zTz_?v&-F0^lik~s zcYd2CxrT+Z;r8i623Sd$M1eN?>kHqReEZGJNR<$7BFsR6ZqBmMjsqU{nT(` zJ=Lx?nJVNrlQ;!ZW$D{Yd<5F(o5d`591I^`hXVf=R7FQqhusHcm-7oQ1IbC88X+n^ ziR=krO+y1&&o4fOQp8WjK8>v}0{b$M#6(~aafiD3YyYceS7{zqw1cY|-T5 zTyXZ@d42z_vG^Q_bC=oLN8$@0QH>ewz5nj{LFX`Kp;ErDXP$*=z78ZYo(%H@@+J2M z>b93wPC+$$Qv2Qu`RSFshPJVuPoMj+-UI3Ov8iWLyj*EYMIHUX88@c*g+BZsWPNU< zS2U*0!4oq~8@vFXn_}9Td9IjaT7R|YTn*R#pZsug^X&|-Yke&3`6YJm7n!Qb#AiXO zi{CSuvkwi)>U#Jx9PR&kypkV3D>e_h+EC8aQQ1202gdWTfe=VyteH`T;!~pyHgh}b z&o>uU!Si^x?Rm=DhUjDVhW!+^ne^6s$`ai^Tv2Dx3X?}5W(1z# uPzvf~#5`2aDY*0CK0l4%k$3}{v|*KL1KuigpxBma^{h*sD!|aG(*FRB0A|1d literal 0 HcmV?d00001 diff --git a/src/web/blueprints/__pycache__/alerts.cpython-311.pyc b/src/web/blueprints/__pycache__/alerts.cpython-311.pyc index c057408693ee493f95ea59b6db85f617627614cd..0221f3c8804c16790eb382ea86a8a9cd8c56392e 100644 GIT binary patch delta 41 vcmZoQ{%6FqoR^o20SL5anPzU}S-Pz0KiV81+GC0v1ZFC{@SWJq=IWIgr4#JO!pb#Pwk##91hvb+ePcR3-{_6X!M8gae_g&JRNj2%)XXoVv*&K-Pu_g@z}_d{|C~Q}&zrw^Vs`Y@%$XZAr>_?nj|ab;8NQVN zZg}>G^D~*z+24lp!{?uT^_TalFdR_0XOEtw2^Ni8+|B6cNos;{)HLGJ?tbnuX`E=? zQJwDRo^U*@_gm43IZ)XYPDGm)<^hR&lT6nVjCM!+2HZ`wFJUk%vfw%hZfGJ5&l0i- zqo)u=6qC|uK5!7sv}DVQ4gpQew(QhhF?ZS_p_DX^7aJ_f#8n=+v?8OFTpqf#Gvz$G z5caf-xKl38K5}7&;FODac7g;e9mGp~*OpCymsg<`iojPDCrI-ZMN$Ds<-$teHMQIq zfxdLzazI`Y>rx6?QDP8(Nd`uhV33s{RlkH=Q^u{exvPNt>Pxt*%eZwmcTL)DmDK2H z#lo)YAp&d5BLMMtj#m~Li^tTGiz^{(Z3$1giI1$iw!SC zY_K+!W+_}A*QiuJCmXxvhHADkb1rC!wMID~qoz^3F1u$KS*&-~YS3VBgT z3MP&iuCHoRb}Sm9S`04rVakLGQi1hrM#755q64-He`>IvF2m>nSoy$+TTkm@d2*RB zZKq?wXmT|uJ~?<`=Ik9vwEXaunW1kM<6M4s>(k|e6Og%Lf^n{N89FH#x^*dk`poRz z^G~i{0OGcQ#DwcMHZyoPZ^Mw_fVFUMFF0f{LYc{(mSKf;F7IhcikqIlce3yp0I`)T zMuNrxYb{{6{&;fv*ZirQfVFYVsA=fOC;_}}U`;Zi8)0IWvRh+RWOJ}jH~YAI9)<{D z+7~q~&FC3ex$qJ!=ECMG!lo9stZ?K=jKcd;L5$wGu&%|!G0L5kF@r__g*R`1z|U(; z776y!uHcfhU?Nd@tw19NqroNT!bCQ5EH;?v@6(w$4XzfaLDTBjsma9U<~4_@rImaw z9xdUnaKwrp1COkzrNe1-!`X7#FgcEednk!Qcoj2zj57E*Antj;FGAs37;z>(4%}f{ zEa0)-w4JeCuz!(>SC7lRUC>PKD+E$Ygsmf7qNX^eb;a@`*uK3ZVi4L9Hcg0Y2kf^4 zqS4V+e4fpY1=oX#e!jf$$d>lQTEU*!r#T4`9Yk}k24~YW-jOY@(|BjLyiVgy+44G# zH)qT1oC~dNcv!XLLDi1id#0*(=c;yRJfN(s&U`i$8VP0O=?Zn^5DfnH8F>T)RJAoD zXIh5vbZy<3GQMH5C0pA(Rok4aZ5H|wJW?S@8y1rq#?-UwPihgjZP_OLbz>blf8*qv zIsdl#1^)V?Fpst6{BIOhOR?=ae_H{A->hlN_#R>Jh;MZ7q>{y3rtp>=-U7lj_I~Rg zc8~g|a9s}9WpQ0ztsPr^qdohfmQ_2a)XtpRnZ=#Y^S-J%BsrT(-6OSn%zeo}{_%zC zi`Chh%~NV1rv@gsWz}F7FRjm^%sF5^jHY-(j=#67T|)OIZ+olbzHe=Nv*UiFB;;l% z^Z_4tYZ@^kn#P^odf4n?;!DaD(TN*qUrY8nNE~Z+ZUJ-I!fnyI65Pp*q($v3as@pD zCSonny}&zT21)947kdY$;=d1b2s-dilI9eLq|71Fd6D#X7QOZVbsBjF?Z3a(+D!l0 z>hUAl9Uo=YeN*bboVsst8H8T0d?@)JNdD2iQ&N3Ss-KfzlOT%F{o_FL+A@u;X5v%z EAC}a$ga7~l literal 0 HcmV?d00001 diff --git a/src/web/blueprints/__pycache__/auth.cpython-311.pyc b/src/web/blueprints/__pycache__/auth.cpython-311.pyc index ed657b1dc4e15d8060c840b5e7b17ab8812decbe..82f538ab3b619afcf1b4a9d60133c20878340195 100644 GIT binary patch literal 6308 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 GHvB(Xv9D+V literal 15533 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 G$^QT*CBfGK diff --git a/src/web/blueprints/__pycache__/conversations.cpython-310.pyc b/src/web/blueprints/__pycache__/conversations.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0da64273d65982709a3087918eae20db2c292a5c GIT binary patch literal 9488 zcmcIqTW}mzdhXlw+%LLVzG4d&SO#nhl7%I#%Ynu0g<=I;c8Z{?t*P;xmORp2LqBi`tMT6HP4yiu#Z)>RKUK3=M^f;h}IbG87TCKp|R;4aG!VFT{(9p@gUh z3&~{=G9%Ph_kN2E!4 zXq})WK}oSLL0NCC8C}bgtb0UeJ<|&7Wora|gP`}d>1)|KLEk9o>)8gc|3jY(spj;2ix7iJX(l01!P;O*53Ch(hv|CDV zt?Y(eBaQR#EuKHKaIU^Eb8PX+GmRHMiZot1f(NhRg}KJj-z+?T3175Q%f)ZYW}^~8kb&eOh4Ut;>2A)ZhY|m;<)ZUHDybZXVIAlqq@~A@Cv{a@}t2N1^Xe{7S zWTMO}OlQHmQd7LAka$wPr?7a^ENwJkOSWt)wrXoEG99P|>;T@4j!1Q7m-Msln$AMD z{;LeoprlI= zVTQHPA>huvACM17>9v&sNO1AwrN*geT(mV#9&4Ps(3pC5vHr#Amt0uJauv>vk|oA+0#@0| z7C6nsiHf?Qn@+&AvX+_F1uNe`8;SiUDz2h;0tV-0zVv%ANJqFzBrVHFOh+9tEJww@ z;e<42BOWsy=%jIIP6l(-@$xv=s9X4+gE<4+0ozA4EuIehM(+GXN9TrFDOiq1T={x> zTQ<&0{6^G1zj=U{%ho{FG_i#SOr9G!VC)^(+uF-!=SJB+UUj;zm>`X3-ho0w%bKiznbLdZn5-O*s3_%#|Mz($oRItF&|&3|d@Ej`=o{DpIo#p@daUKn90|Sk zM_(VsCAQQqa#k>w+#g-L7RSBqy z#57IPq)AnlT#&PXt&9ekhBAaJj4Q%#qjEM{mrAl|iQzfU^wR+Sl{{{d%zF>WvP8d! za6O1Ic4G`HQ7vNAU?j0=WGiW_-lhq*H;qI&#ZxJ)3MxFQp=;utC6f~BDZvo?Uij%E&q67vLTnUH)p{2P_4Z6GaIPG~S zFr4QADJ>npnTlJe_%mt>=gsnPnHRGb|8pXKhl=Z{xE@7XbCN62fW7Jt$8VrsX(|ZG zZgCT8&f1j-%`n5t<_iQ-llm%ZMBV^&Cgkof6kS1$E)CeFQvd9R&l4#Rmph1|zU!X* z?%8t>%tWwgSo_M%?0_Umf>hD}10(@x0I?20p%$(KP%OaoLZlcaDB0?4jA#IM5SAc( zTKPXgGAQO8 zuB%D5)KYA;-gpWKERc7s7lSnyA0dH-FjE=)kTw={zlwu;+O|SH=|Vk4st-Ut!IJT5Su5OwbgwJ3SkhVm4i=m*IDv94$W$xBG%Grc zC1&~&troI_wmybY_{(;{4z8DKaL4TMXlzoBN#(mmJ&v~{ts1CBwt8hC<>=+Av7d`g>6*vd@L9}=!J+G5y6LrZ}#x#DgWP*}J zdvZ(}e}w8RRFTS$5QS>Bgq`5O!}#%0%*u3Ym@8OM9};hrG}ecJWfu!m zov7}JEYd4YDtIULpi~OO#&%aP%h(=dc}s9P(X+?=N4(Pmeliy|^zH$@*ZddId$}k< z>%}UpvBN^qs1-a$&6gyO4ODl(f3KnGD)jFBb#m= zauxJ2VaxYUz+_Qb;vIQk{{j`#R*B9PPnq2f#&0792$# zqxFDKFWM&2hC3H`&|Uc=a27_Z53Q@nmm~y9L5}8UBv&9V=%U-a)mFjnVtcQw6?0#pahW~ zfLu1Rq!qDKo)S#8m0+lrI+TJE6nCKnyDI+$pKE^ZaP!yo=Hb^DKmPf`>mPh_`T54% z$6Q@EKlfb!njS=-KA+$L8l=X`ZROMihZ|cL<{%!q@Q-AA5?dY}e=6Q67{smi?2SO>~?3GJ}YJYR;nf_&G zk4Olx+Ked9Iy!}k_AkFNKX;$yEiK76uqd>V6H$p$Zp2KvzEbLah2c<)7bjKdqg)$L%qzCB)On+)NlP z-+oV8b)B=AV9yYf!lid&t}DbcynMj)+3-!P*>ET1h7fzJuIsO6&72z_s4&NlS};oP z$7_4b<-&5H;Kbc<+cXdgFw+eYC|GdRV)meL;hYqjhV#rQOoO=-h*jJnG0Lgfdx-aG>nS*SEqM^EUFz~_%C@=&RdC>7K~ z^U7g;b4ZDxPA!UjJ+5oz&8Tk@ZzjZ>z2KSx&G+U~Xnp7-eOEtdn=dF2DCmu#|BF<> zbD{`n6W<=7fKq_L4fs3a%bf!x_d>p8bZjMZ``doi1!4pDSftqCRl!qIv6YlDrPfNk zsU1|2fJ4fT5_B5Vk+M^*z^L9zyRqOj0vv=#BB4~ zi%ZYGyYT+Uq@+$9ZOpvc%CjQn>SbVOPBhS-m(u9tnL6#Re{scY?$e`+QunT(eP+mS*PW&F6?EU#9iPtQXwh& zR~I;KBT*m~KF$2xW6ftCapKF^qwEmD3RXfw3x&uR z3B3)3gXsCSKrk!CVwP9`G!XukxcrcS0M9|D^d%NwqeQ2<#uDmGC>@=Y&TjY=mTDsp z55Pc`9f5htHG$MVBg0TU!qz`6+>R20Q z`fQM;d@#eTpg>zN>+-2XH@O)nxCxkbi|m0PW^VSN`S^2-ul;<_5+w+EkqXLox~YZ> zbtD;@$3G&^Pyo?OK2gf4LyQUtw5Q1R`jpb}BM{HeA|yH{;X~neamAJ&SN03{i+7`o z6T>pM&!vRhbyjhd?KeBJwbBWT>?lBOk#5?#8E)REG~Om@BHalaZ-JK`u;sV@9zpBP zZ}4o64kS!*5(1Z}(=5e&!@+YLF-mv=hZ>ozj#l63JWd3 zIlB6+0*;owB=YJzUl@W%sM9yt`QCJ*kby~Gtf+o7par{SMbqI2(XUU|KUc!5XoD%d zI1wChkE%NIMIC<4KTx-we!r%Dw5VcJYr+b+UQeJdyT^*K5Tx0u6<&=Eiv4kS+^6%6uJR5Rl$|JDI6Eo=ePts$3=%d3A!0- zk$MSMceU*axh=3CKDQ<8b6b{ACU62G4$H({KrZIDC&D-&C(-=XO!Mito73l(!R2Ty zTQ!%0n0?DrIfeQjJWvMM3AaDJ(vN3P2VKFi4F>|JIII{a`3z_yXU+b#S z^!Vdctg`<62{h0@%$WVCC~B(hskU5`$d`#g+cBZu>1&)|Cd10POa_N@g{(Qo$$q(j zrX_Z|+J`4NNYC!g;#fUE^kkb}EF%au-QyS%B@a>ix_0}Df7x(Px38vVme0atui#w9 zXKgcH6u`*|c0zP~PkuO$(qoW3{CsJ|2}6kY32)yCWillSpEI0xkH`SDO*gjLxa%JV zc)0@0v=v=Ao#kQeYkpXB@s#w<64ia7uPkou1d)N3v1tqZU6uP literal 0 HcmV?d00001 diff --git a/src/web/blueprints/__pycache__/conversations.cpython-311.pyc b/src/web/blueprints/__pycache__/conversations.cpython-311.pyc index faea6f1bd375536cbb6ef74f38d82021d94993e2..c2c0958ba291286abec5f5fc1dd2e5df5810c5f7 100644 GIT binary patch delta 43 xcmeylfbr7;MxN!oyj%=Gpf$@hb0d!)7oU-fRZMbzN@`4EadBqxW`8a%Hvk^~4GaJP delta 50 zcmeygfbr)7MxN!oyj%=GaM<`+#zr1JE>TMttC-~cl+>7#;sV{o;^NHWlEl2t9$Z>( E0H;?FyZ`_I diff --git a/src/web/blueprints/__pycache__/core.cpython-310.pyc b/src/web/blueprints/__pycache__/core.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d9c12de1cd15e726d1d148926a73fb74ceee21d GIT binary patch literal 11525 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 delta 50 zcmbP#k#X5YMxN!oyj%=GaM<`+#zvlfyrKp!Rx!!>DXB3f#Ra;F#l@M$C5d^PZ}1+E F0syUK5=H<3 diff --git a/src/web/blueprints/__pycache__/feishu_sync.cpython-310.pyc b/src/web/blueprints/__pycache__/feishu_sync.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..63b3e9420043e3fe4e6b7f8bfb9e32daaab2c8b8 GIT binary patch literal 10568 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 E0KeoB^Z)<= diff --git a/src/web/blueprints/__pycache__/knowledge.cpython-310.pyc b/src/web/blueprints/__pycache__/knowledge.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..75ec70892da335a924d31136fb55fea0854f8367 GIT binary patch literal 6034 zcmb7ITZ|jk8J_!$$Jf2@hJk1+__tjX-Mp5K2o!N&<+tsxOuL(rO;6O3iwARjE8s^?`!u_n)!7&Srtu z)|@lvKmWP?m+$}26ytGQ!q0f)PkZj)C`o^(M)yxg<8D0euq;VTnvj^xl)OA4i&~jb zM6FJ!sMWkSt54{&#)L6zPM9+BYI$omG7%B)dfuLmPDE#86S3L&L|m2}of%Gonanz_ zP9#}`*@vZxl#{IYuxLYOF%~~8&C3(Lf|39w$x?#S=Okyq!+NG=)_YuGeXL*5`vvC! zI0xB~pbQAk;ST2rTPNs)f_@!a-R~ii`c7S3c=9)kKR>+fkq4IE zdVTTa8}>2=OFPEYAaYN>?38$}-~}dk_LUtMFEehjkejNE$wAU}`2JkhNzY~qnQ4b( zM9-c~f#scarj$!NoENzp3}m^J@tm-k=8jt`7F;J7YLVS?HtV?VN=IaGp*WX!*tAnk zjANehP8&5S{z?D(8BIX>AIsk?Hp zEu~7(H|=1pt5-~6F4sU|tA?z}oZ5kO)xl}GBpz|_zrZP~fApjoc}6&br!w`pT9aB7 zjp;24gfk=86=pEAq12RC%MvY>44+)5rol}jESiV=)O1<$wYt@ioO+7OiMM}kK89cerql2+w}oIIx~o82+uH{ z7@iS4>+rda&YKsG{r$qs$C z$eg^(*AX>JuIU1#=y*B~$}52}mCJir=teMzqw*Vw)hcoZSx;8@P1Mww<7NXrJgiZi znsTuNJ)fJ+VI!G*9>OY>oC4z;XqxM(K-81?C>5k`5=wEZ$Y(PiznO@dAZ|a9bxIy> zM|C|umgtg5vaQ^7xWgdX7I2FoP8uG}Y#oZ=1HPr%b z^}iQ9_PcU2TX`sz(k@4oOYr= z$jmzFbfD!5Q^i1s!RJcC4>;{6G`LQX?l$07S`wr}!&tG(K+QV^zLnM$yZJia#*EMl zzD08yv=J;GS(z6JkXz1sF29F{b)vj5dj2qIkKu92hZHpdleWpQ6&tk$L+?i&Qd6=p z+K0b%uVu?y4sLtv>6yGlSg2p zOcA9jN^L}9`f;r$dj?{Z%r`Ov5e|v%X{BR;X60@epdzA>!6GnD^a=B_JLVOwDF=}_ zF;NTiij@g>n{Qo0qSP_3=9$LgsqRfkOr#p z-85SIw(Uyq819$go0M335%D`E}d_5i_W}8 zR#)M6T5Nu`tQ7J-9BM5&@yBtVLwH>B4e|l9_!dA@9{{>s$`>>2DjTP)nbKNe<9|iS zuD(yH`;3g#J?SY-VXCl6jgAbsMGx6~4HiG6G9B6D4T8()<|0ea!}>+7*A!73HDtEF zN>F}E@|772IV|SD<;)%d<%~+84XTY$5N#maMR?Gw_XGT6l{Xgr>b*&<1`6p(vMR+1qhhR(e5$16R;E!(YhFx4;^hjb1s}T40M4RT3nj!z?K{rgsEPAI96EvE`^tOE*APOjb95W2U^1JB!6P+qhNP;p-@x`i8ewa0wciFl1J5ESy5~S zxu2qFF=THJi@wPENqZKzrE$rSDu)J`jzWlRSJBA*{O%e9Oo~}3;5<=_ak7ARbi{68w1Xe6% z&0u#<4PxEm`Rt&VT0P$d?BK%?*;DfH3bI#8eCx)=9iy^_0I7;F&uy*RPRRcS DmO!>k literal 0 HcmV?d00001 diff --git a/src/web/blueprints/__pycache__/knowledge.cpython-311.pyc b/src/web/blueprints/__pycache__/knowledge.cpython-311.pyc index 90c7987b09a0afb6673ce2e7381770323a0e5d54..ba694ac3a521f71edf5060667341fd56c26bf1e5 100644 GIT binary patch delta 1199 zcmah|T}TvB6yDj{nKgGu+i=^T$z|77b99|ms0T$Wr8FotQi95u#+_+dTzBlwNCgqv z4^~1&HwuLQpa@@r7|@rj=OW0!UIwHWS9&YxC4B0h8CfNWhUMEc=jS{3JLk@l`bgzo zaa_5JJdLw^bG>i4yEJtaKc;Kx3WLVuY`9%^8y<)|&!9_iPt+6p`<;d2-G^OSwO|x) z&#m2>DZYNP`fldO+na0C_lvimeP3L}0Z*_^pe=7UuZ_rg-3km19u zkj4XmE~`vKii)I>OQ-?s{^p(pL}~z%0JQ*cENfd%*Uo8ZOg4}JPR4c~x|mVNjht4n zXq^Nq(8ej&{Phty1&TqMS67Kft$_A`s}a|6BGrV4IFackj*vOc-Lth+O@~sD(M&)H zAXo$v0n&KB3WfH8X(#N51lFPJ!~27Ast2D9R+SGy2Ea-4O0bo#-xOji1~r0bi#*4R zzlIO6PGihRc=kB34C0PRtkZ63ccU$jA{#O~1Hm2wI!z!RkE0#r-{NFNkwy#Jg}ka{ zRWw3;=gmivs5@Lz)Gv4uOZ;eq{{tTrH~HNbL+*&7JKS!Y+onbe)BsGH!CjvjDus)Q zI9WYg(@2GIYfU%RjE$NHZ8ldQB=-Xh5U{)#WK_r%vRlUHLs%@b*}_~V<}GtRx$3DN2Jb&*EHotIB^h(HBKq}sGtwSiTE-QyeGAF4#Z3PadOXh&OPV5C%vlX zRNn)iuaqL|!`!#A1CMfZ^oRpy%s2>0HghNe0s{vREEVqsn6-lE9k$~5DTVpH069s4hhygSb zuu9T~zE?-%auzk?DKB3*@1eIb2 zAsBGyVSAzF#6;T*Fl273YIipNY0g#wIuw{iE$4Uf^*}e5FA={F@Z11o8N3{<3)r=F zLzL5E6gexS-QerRtAk-S38pz53^@YD{`v$Lf}&792fo19iGPwfESAh)p?Da=a5!JM z3NZjD%s2cDOSj_bNSIvti%2saz&|3JXc2d=xYA|k0&UPXfPMm&Yf?s;bSAY(L=PGR zw+1i{kil%U!(#{Tg!f*&IhtUP67!sSDEg79-37b8_*RjCvN#Ux@Mj# NLYe7rKTR`0{{@aHEOr0@ diff --git a/src/web/blueprints/__pycache__/monitoring.cpython-310.pyc b/src/web/blueprints/__pycache__/monitoring.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ecf963f2245e5da03f50e4288b703c31af79471 GIT binary patch literal 11252 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 A7ytkO literal 0 HcmV?d00001 diff --git a/src/web/blueprints/__pycache__/monitoring.cpython-311.pyc b/src/web/blueprints/__pycache__/monitoring.cpython-311.pyc index 4a19510b33f9474b984a09590bea1e4befae8306..c065ad5af68974d91e20d2f1f56541939e55c000 100644 GIT binary patch delta 43 xcmeA^%-C|6k!LwCFBbz4Xw5Rs+{hEj%BSyQ6_cEwk{Xj(T%1|Fxr$XV1^@~847>mU delta 50 zcmZoU%-DUHk!LwCFBbz495#NIv5_Z|Rn*MIDkeEUB{im`xIj0txHz-8Br$JuF{@w< E0FNvXYybcN diff --git a/src/web/blueprints/__pycache__/system.cpython-310.pyc b/src/web/blueprints/__pycache__/system.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..438b5999b45cc343f8d9cc4d1cae47bd8a3cee39 GIT binary patch literal 13309 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 IIg?iZ4`2TDvj6}9 literal 0 HcmV?d00001 diff --git a/src/web/blueprints/__pycache__/system.cpython-311.pyc b/src/web/blueprints/__pycache__/system.cpython-311.pyc index 478f4ef80230e61f46f602ada4f93dd4dc73aef0..a9db02a29be6a5f0e060c3a2d991a543b40c0352 100644 GIT binary patch delta 43 xcmZpFz}WDBk!LwCFBbz4Xw5Rs+{hEh!>8?H6_cEwk{Xj(T%1|Fxt^yZ82}Tk4S)au delta 50 zcmZp8z}WtPk!LwCFBbz495#NIv5_Z^N7Ts0DkeEUB{im`xIj0txHz-8Br$Ju1y4sZ E0Gf6YFaQ7m diff --git a/src/web/blueprints/__pycache__/test.cpython-311.pyc b/src/web/blueprints/__pycache__/test.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4aff382a42c93593bb14656a9366cc4fee0c6882 GIT binary patch literal 2603 zcmcIm|4&m_6u<9Vzq}TTIIKpQ7|mu?zBt7M9gC1@wq$W8@PjraP3e1R720~=s~`bW z8Pf`WVN3%X2-PXVREl9n0)s{WfzhNtke4i3BCjn!twv3ZKkeLp;Y*bty}9q)bI(2J zynD|*pYz`RtSlZu^9_|c|JES%f=tqlOEIrzfayU3vLb;J=z6Mww$crZm1$tDEQM$! z(gGuL0{f5~Vi0-&PqJAxq9&kC&z6sZM$n$19_of@(1$141bsUi0`@^#fULSzJ@6m& zV0h1iUNBZ6OP2Q#IOQvjej9nx84KQw_D!fij>mq!rS{G6>fQEe*F{*1{WTD|b}y;% z!gnDud|MspOc^}7tac2>ewgML$nGqRqOYv?iXQBA$%+<>XS|{W%qhw3a@L(wSQ)0x z`eM7sSxi_9rSM){Z}VWW&e_y#D0aAAF3}-7-7bYa`h8V3C}l@Ep>CL_7Pl|gT%R@G$$Hba+QRTr*5Lzh`q7cM_T zmz9^LiJ%koEmR-6MGL%O5RCoo5S;VD;#sTERwV0|PPGl;ovqvo4_UHdX}yJ8X)k2= z(-{&|9qpixBO#}iJI__6#zv|UH8ICgBV}3RHG#imCM@QOVuag;8+D&`3L;iCZjb1) zJCo8{yCmA+!WE=wiPmZHoWeJ_1+m`dvNwp${Fz44RVaILt-IR09(*r)O}-@J?}BtI zC@fI8-K8ZBk{7^<)a$|MjbRI`XeF=1AxaWS8A-CA5S1(}N*=chUMf2qM8%kVl_c9` zuXK2X#<^gwa3aQTyzm+#d1OR`St8S&5M>+5T7>})6U;06Lro6RlgLd*lCedju!3E- zV-i!GMF@!o&LO&#D3PrdB-%U6*ZXT6aLO9HBsnFyM#7GoMzOZ0HVqZ2hM=Lyb52=H z7#oSr5)|+jaAkx?A|UgjxMmGkLH%P|7dCAUnYM&YTm0;td1FsgcT*sHOcyejh0SGt zpAnmv0by~gV5*lx6N(Z7T0s@`8Wdd5^*_(*Mz`SZ+QF0h>Ur0M8Uq6Q`lpm^vRyF zGmrQEv2WJAA9~1iAZ$7?Q8jBiIIGL-Z=uB*;sqG#Q#fr~B~{6y=PX}Y#yrn1sNBmu zFQN#)mjl|YDNbDJirPRhkf;rDU_MT5Sb-|0g%VhSBgMNv15+QwB)!5~w*r%y2-Lra zNj`;1Lo0or223W#WtcR2Nm8falBm>b-$3-y4aJzqtQ0c5pM%o;bU?i~{okKgV!@}; zQJ;GC=KNG=bn5E-gl~SL6INrFepjD9uJ#TtQ@#-K{}kyBR#zR3{4xoJU+ox)Tfq%3o4WE<@;L$X9FjF`5~$}OclrJwG^pKguY}DU9u$Gl{RP!d=^+w40eR69dSA* TVL&J`*qI@VBeH^vVBh}(D&Fv9 literal 0 HcmV?d00001 diff --git a/src/web/blueprints/__pycache__/vehicle.cpython-311.pyc b/src/web/blueprints/__pycache__/vehicle.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..448d250298ef619567ee781122ce8dbccf1f1c93 GIT binary patch literal 6048 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 z zh)f#6TB(dUkO9a1ITg2!A!rND@)mhl#2U^cHrLovj)9R;G%iYID9wMOJ7yL~a5vN` z`2;D}t}f3U&w!N%W*q;P8qj*+OV1!6;UJtr7(?;_ny8#kfJ)%7+Ha;Q@(2zjaB~Fd z2_Bk9U8HoZwo(Y2Yl=pTPyB<#GxlHr4UQLbxwIR@rF?~3(rJAR{{QS38Uq~7Fu$3OXh>d>R*vcPZ^Hq>&)nXOg)P-0P)% zK`&&)Ywd+q38UjT%$U6elRtuzvrPPuAUyq@#8u$;?sCYd&@=gCquU8$-tf5Fy<|v) zdWBda$oR{NJAij7l@*@q6NWMdUWy&~D?>*gJ!skF5sQ5Z|78)6kOqr>@Ca~3=AeDp zqXDC@$w58uLY-$UZ}1F_I2)TV>O5mb@po`es;?k)_s5dt%ivWO#A~OXY9+do8IYln z)u!5|>Ddcc7Hdh;!g%rJ+Ud8dr##DKtHnaH1R#?SK1Q(uS0-V_5KV)%v%%sJ?gwYy ze0%o%iys~z+-&QEEtFsUd(?iwjkShk7S}as3<{1U%|!eH^@_a!-n8r5Y@OTv z|7sCU)NeROodrwzW3(0p?On;u|bS`cZUA>=)7YIdta6 zrKY=Jq2gUC3DCNymK6I}d1SGLh$8^1v3*C0fPV{pv)DC(~unn?%z-aFUg@%NWKgJ4qH4qfSU%Mr;#eoOoA$uy2=5?j4wbF?!67lior1 zM!zvYl)BtztaM`FA*-A=%u_4JONZ=bl^$qNg>t*y>%^h4gq;YYkfPFDC84nzR6K$G zSiv(GWVmJ;I|wJ)FTB~c4K+70Y zLEC#g&7>dw4M^RDHID@IlJ?3V^O7}{wZ<(@9P3)|glJtP zZbP~qX%o_Bta2Y+E5qy@!~7>kkoOPi+LA~41IDcvqcmf@yl(V`m-q0x-zN1aFG7Uo|1U8APRxIh&-Pu^1IBuFL2s&YJKj?#^>#@{A28lw;SBueYtl2 zYVC<5JfN(%kt=N)q|1;PMu$7a2%xx&K$-@iK>R9C)Z@9V+lafV0vUb8Jp_oMG54!I zcDQ!&s^os+6IApl00Pkvvs%oFPf`x~2VITAV7JeQ`ToJ*dpPMTN$|+sRDlMTom0Qu z!(w;)r>Njr0{?)(1%M*4VClkWo$!{yl7DdXU~v$ot@)5S8t%_J8$_H=3e`ULEO-Ju zHf>Yu*n>rqtOsYVy)3t_uKm4;TsJOBKJ#b9ta0>LaXCs5s9gL0xt14HpP1y&cgrXu zgf?WMW3s~~O!piy97cqjbs&QfS`v`N?+_r%mG~TitpNDk2AYfbeY!=+MauAEe#03G zuPYp|nA=KoANd=F#f>Pe0~XIBMIsWsr^OqzfvPn)xEsh9?0l*j3*qWtPvQHWZ4@Qw zMs^}7l5eFx%ACF_B{X?Hhhco&_i&hIK$b-Mj3k?k~V&bmYQEj#2zB`pfJYh4k5~<5F($HNdH>355`9NC;Td0Sly&HqO2}&cu{&3 zxApgZu|8!5)Wrc-KGk27)2mNiHLD#?^e0HYJgk18L858>cf*KD&-#0MJ2}VVq@*gb z_YdE;jsbt8mAuq~qMQs}y}v9d+z%Io+P;Vh}TgtIY(PlGUnkkYje z6p}nZJ*xUa9052Rn52s3n8eVXVvr`pD|nFZnB#`%3mklTBPd2e_z4h&q)!J^)?PuF zE$zLuKtW4#7(ZtKzdi@p#Pw^4B~72~U1*p3%`Ea-(ZH~DCC z_oNgih#Z*J z?l6Ze9TuLGcu5<4Zhg0BIbCUi(PBNSjKm)&&CI_l8 z23?`tj$BrqDVP_^@5pDoIam-X>?jPmJKUk7j-pU;M=_IIf+eBSj#9>3gJq%ej>dAH zgDw~)o187#pLd)Pp%M6{8mW-7WX}#k%Dzw2F-NW#tfaf_uDQ;sos@F!<4%CXsk9r{ zQI)o>cS^1<{`uUgotN@vc+5?E%*~%xd%+Cb>a=ZrzEn6%?d};K-bo%svv?HG@Tkdn zl+5}Br87KgGahBLdX&%bsLOa%%dVTAlWsSza2KP*0ptKTYA<+v(@634m+aRM8?GlVdfvFOpa4`} zp4i|<3eh&>?J#X}m!V|Bd&Nl6jhE~<4jXO+@1&`_iFu0zXQU#Ae0vDmdc}#(kP@r` zr$`y=Ql5Dg@1b{_n|K#}$h>G#4ti>L1S7tfqS+pa1c@6Y1ba=&fjq|%7xGRd<}}Hn ze>ML|#}sCI)>6T1=&vkGX|uJ8p0d_y^1yD$oBx4sv0_}g$1nHB0+Fzy3r4!SWTNQ% zd?XwQcPYAFUs&=*$@O5a7-Er58Ek`!CJ^2cp>sbeG#z%t^vNfbayr4<2-C2oGkX1>NzsoyOXjUzV|p>o+Bg zE4aH}?>8q*gE?rCH22_pV^_l5g8`f7@wKJ-{7F0p8N0yVGKrsfRC5o8F1x@6BPh)m zP2w@AxH2SQlzD7YFu62XLbG0(>o)h4q8(mLpDAVZWlWjYXG%<8wMw!cwM`u#o;&nL z!T=)&E}2n;xz=xqEl*bk9Wy0hbivLd*^X-Ix>r`x-FG;$tdngddu%m*Em-Su>=69I z7EZGCTlZTxrtW=wAGb%`!u9dqtau51vZjm<*VI*PgEkaHF9}3QAhws_BqudMVCvVw zZN1k<|595~uNeHknA{a1dr3E%bOBKeh&WwgSypt>NSyfL9*RiuAPv+JP)$x%fs6A~epufkgGokMW3S2RA-6;;G8IYxh7S8!7;%Is0% zZ}3Nm+yE`e!6@sTVg{Ses0_V;X{_B9m&sm5w<8dYL8aJ3)>p+4A(Biwx9=r{-cw({ zC4ib9Bs-A=k%W+hkwlR6BH0B*F$SWM9T5`p#Yhx|F(f)9H=|mN#)#LJdPX{@!ILD| zU$uMsRM$unMR6oJB8t5)LUyuFMLQ*5%%>PL0S~7Q}q#;EsYDX#-(sRdK>3=nsl@{Bpv&T6gS2%l?^C}W3 zrpX*yJntLQ?R=BbKF&=cSFm_>s%)AGD_*;HZ8q_Q?Alin&skjb)0SJ7dD~mK3$?2j zwKt0IR9K+!PNSxMp8lPABJvA)0{rYqbhO;>9i!EJ2diLqCIGWN>xvF{$4 z9=JFqy_y+Pdeh>nihlzg=|i#y$a=3?on!`#qMm3ZOs=DJaV2e7QqXl63>2+DDEr7n zh?56F>eVP37O6TSN8`a5K~ptMHNatvs=?{-6B&SFB0kA6&_4^m=qEr9Ky=#aua;~S z#vSyTmIul)3%Iw9YZJK(qN#0>c)?oQ)+}DAF4+D zr~3B~Y1j2@am^dbrKjJYON)P=PY)KkV3o>FO4_5Esjmef_NIi;gW$q0;4?1?cwD8^ z@|;P0=0$6YG*NXSt{&D+C`b5yd>*@1BH&BQfk3NO*ntuI$Jp>KAPYN1CyoqjJ)hs?p z`slG$#Tp2Y0R4DXQ=QjBz7_y8&`t<+fJEue)t;nc^+&?HWfJvawiIPy7h96*A#L*^DB0F4YN>rr4u#OhR$I3SUG(DE5nh`y+w+>gZvkUWj#2S^5x^l(u7 zjKD?>!*{itSi}$`$B`f|t3hi}EE$~aghmg6M&bJ)#NmOWiV<&}!9X;o@P5MP2?JgO zm|;ZY1E;3dDJDFU; z;?=3LaRWWIPBG@?AC^XoijS_Pcimk`@4dT--g9?xa=(ej${0&9V7 zoC7k@{#6l|<9>YcMQ7!RvvPd#lxA3~v$i#@X)H3Fo$1c%Ffe-Ut0nZw*lp`pFXoQ4 zR;;cQ&o8n7e?ha-4TZN#vG7)%W_6SPttJuqc|7v-8Nb-Hre1toEL~GAzFom1U#(qJ zPt6;OgzZ`evrD@R>G2It+S;8*KiJ^p^^fkZ~*OWSgVn2kEx z3TWk{E@U@6nnTCmtHaz=FDArjX-rQ)xb+6WggnTo6Jn229 z04hsbg;s;VrYa->zb>A?$C8p#T9 zf999@h0wpuN)oG7Es*v&>C;(|tBakJP>2q;&B=yr-zM3ExuHDF{1ckNd`Lzsbij%| zM*7G=jsuwVgQ3t$%kR%w2u!+jC`|VT`Ai3Z&$I?81tt3X4;$SE$#K-!uZ`gXnYyGb zDLbK+oV0w@N&mWUe*OHkhU3^mr<-Ce#uiQJ0mKlra#EmW=-2Jn0cf%NB+zoj%jwu1 z9_xdXW_%xQ`lffwQ&1Nf1hQUD)h3W?V&b#hm4c1es6yPd^lmnvC|$b6orI0)5%5#= zA;={mEmgq)*Gq2^TQ14>fG3!utB}TWysra4@;&6`em43I$^1 z-_idtlJ6s7KsbSFdh#DAeF6z08aago%@uvT7glLmQdeetcMQZBj9u)=b-e5O*NboJEl_wfXO#sC@04NToqA3Cb^3R%6Oo_KBfo(0 zOH6AU#CJ8NYrW#T9v*qGc5TDZpE}gomQpB9&h+hA8LCWPmWQ;%FBhsvaTkgb~%I>{_qj*3&;WBGa-+M!;6v9y(Qwe!`L^NY*J?J7`|;ByA}$v!^mJcAo@hj(9UvdHKNie|Pv~Ydhrb zUz|SuyTea?KJakshW4`hvd_+b_wvyLU!1sS?ArsAlY7M$Bb|~ASy6zUPqE}Zj``y6 zUi-<|i;twV$&`BRp?g0+@*??9&@1BZKv=Q&l87I0tg{<38{DuXE_!*z+1kD_^X4|n zWOu+X1MvM6wB$UJb3iu5bAV3mF7$Zp;8SUgG^JjD65c-xed&vrk1r{k zvgJ@Qlx2hnq)HWT=^=jQE(k2lEE{}*&WYH9eLd?Uxq!ybbO2^7lF&Q@#r2?9H#jWB z4JtCS$2x~9_H3*Y6E={l^-WaGlJ0?6$;~u2rAOo~P*(8(pSJ-?VjAeyuH`?r=Z@G* zFWSpT?BxTRQ9JC3d1E_2oHzGmY&dTo{C(^!e0=qAW$UoJ?V@w}h;#Y5jl<40!jB94%kL**$;Ie?0z`@VB}C_KpZVBd8+#R)x)0o7Yi4R6fPLBkLx(&E&Q-y zed;gCxKUU2u&er_t7gPiGhq6}Rr;Z8-X+((QMY%rsCLxh9M^NX^RIB4T+>w~1E#Mm zoFi{E&plc=XEd*VT(8MDjdMW2#$g5Y-omocw9eR-uAlZtnbHFuT=qye|gI<+EAv~&z^*d7 zC7dJN&eKTv7C4OlY531NMMEM%nZ6piA&HeMdVhBWW=~WF@?Wy5RRp$9iI`1Zfh87% zMH>VBf3R_y0DLupxDM(jk71jRC~V99bboJ2B|ZyTjY4PUSS%O}b^3z=8P*2MWq{|bp@_zcagiFVk##~z1 zKW8%=s>*4pm!gFoWuW(;&cHGcPd>$Vf6vjw{S}3OK%NZ*1CHCU$R59s4)<3If8yw$ z`-_wR4PwQ*BM|G15r`o?0VGvShA%h}3Iu)Zywr^DZY2MMgngd)5;-=k43M%X@-@ZO z9S`}!oiTY&Y*Oy_1v+5A6g||A%K31x7znXJCVxUL>yH*ya5B1E_TxvD7$%J29f2;j z?Jwz%8{F^>;0IEvVy$?ToX3I_~ZEtj10%cF}@roVkeRyk`NLW%1IW>>=jSMGRwf&@SCOwG#hOW21v1~=+FtH7{iGJ zUs5#+9UeEGF-#wIY@O{*D%&lX? zyp7f#+mKuUE}O_g?D1kG_!My~kg+qbjeYxgYSf7zbxV-2C;SF-_?YbY@AHEPK0kWq z@?)nj|KM@bf~syHaNsUWfq01AfRZkhXd=CGc>QGq0Cr}Pm0qJ4o_H^E0BZAg|QLBJzxfGC=%56+{uB5Q)ee;e^H7M4+k=g7rOs`7f15ck86EEc%G%?1*0r)n8Ct&Oq9s(iT;VK4cdnfz; zqDHzC6lL^$gR=xVB`Xl>jgTqd8fu^`AMrzf8*DeMIf6Epm>lX2;)!pZ1ScOeYe*+H z!_qxAHf%Bq1b1F)YY0JXXZrASCAxa3c%3lx@^fE`Fn>o~dVd%LtRYKC+Oz`wZ4bctAv5?f`=VbVdOiHkR z_>U1a#PDObFS?Ux&=B_~>eygU6dU9yJNL=)u7-Fl03Ww7@)c8bSI`&qcgvx@Y|p0{ z;Sp|PpQ=d(7%WyF(TuhR%mYHcK$v);ND@d`nD-;c!n__ihP{n+|F28ntI)Au7bh{l zP|s#l-=ntosPp*JDV|AbADJ>qy>0av2FOI0QkEV2BWWodm~j`)eAfVTd| z#T#hdZyS@#cpmonNUw;TP%y&hj|)t;Lf{1ZhkVW@KIh@v2CD}1hxwd~e9Z`7GcIJI z4-j;z%}A;;4#TdRi##Z5$Axk<1%jq^8ObX6{LU(`<8#3H#oJ$8&8lx1;akRqO7sDO zJ~w0}>v?MZ?8e%Lv$1Bdcw3|S7xKie+^FNruu-Eq zqw#7wHD0Y(*Qf2&vR_@Np8Xm+4eZz0X=J|{of-Jm_ht5Hc4lfRjiJxfZ|*cRx3SOC zpVgVwZ|$`9+d6Ii*`3)eJfqLv@91{-Vwz=C<|~_m^~*^p|#)_Lp^* z^_O>+_j@`$?3t~vqQA1UlDV_{s`{%ttC`#0SJOYMb5?(CXKjC7XI+1NXFaQ3me=8P zd!29O{78@T@gFUJw%6sW+pqJwA2W2$fx7|jT)5|&HL*YM8gHJj(VOpU@D|{|5dTF! zv#+5rmWjq&oZv4>@Rug|%M$!9pJ%_@TmG1_vng5!59%<_H#;<6E=1+b$OxAHN~ zkMR6;IZo$-^l80S2efZg$B%=zCMk!7X>*vBPO-$4zob^(M9^<cb2 z=#dv5I5MN2FFW8kqw#6*8Pas>yjpyQbdPE95z_mNUV|@Vzrkz7GMB0HXTWdrX0Z^H zF9WfR`!l>|ER1Ha1)X4x1g6 zO+Wd>wexRY`_7Y}KmPQ!_uuT1zeR{fUmyAceAy0w@1-`V>4HnTygK;g*j_z+^4E&R zl)oJ;ra?}pLG=tB2llh;|5$zCKmC!e|84bw=bxkN^VRjnNM83)V6dzE@L_K7AzxSE zAm{TR9PIN(%7*;Du7gAU-2+_+8tfaQu~9wG$CIJ%K0JJ=*LOtqprE_A%RhAB0EUcG z^iW@TeFHtdNO4kj%0rB#!SCza@27Tp{%wi3d0)?<*S9a=KRmbF@9*^ox(5RL{9Mnz zBfbarJrJ86{(VOVxd#V1uaEOL9zGT^b#?U)^ai@Rj+dt%l*U+ue3av#2k?j{JZtud zK{Qo`8yC>;oN(9Ps?GTyX|%R}I8R2i|U${bBXF|8B%wEey-lm&KQ|cIAt%g}im)v@37)cxaJWb%)?;6o14Sk`PZa#ji@K&kw106Zf9g$>obp?XGVG|rpR$RJy5Tt4QT(ctHzf&CG!`o{nXRfo*lb7^7i#tPhWrPXaD-%$dz}$bN$T= z*WdcqwSRo~+Pg1FG5__wr#Pw!YMaYmm?4hy4FtNd0B~I#8V#f&AD@Rtd>$H=&qE{D z&4b(uB;=L=L^AfYt>3%;&U#(MM!C>amO5gfJk)EMl!#JNLO+2=G@ltd`1m`VRWP#h zsnsV}Ke8^InML!~9k#nhvcAsHSluUA^M)ce?c#crdWQAr9yo5PNArT(5Vbz(^6I^Y z#3jpXKrb7I=-Zau%hRJz|4m)oJFtH+Vxr!r6(nNr9vB=r);~Dp$5PmWlDJlYh#s9< zuan%gHgotI?;limYl_jM47m+Reh2>jYXPXESMu?9*ipkfY6M5E=%{_9Eu86~zFrcx z7n~YCF?_ajtXQxw7VV39)8cSe-pC5p>k+Fw&AWQNk!;{N^g0f5Y=Ml}qkdYd1DH&a ztnMBO%Q<$~r;bf?BjQj}bG`$#7$7~6AM`;Nu#>=$KVlgGCKPqs32Qkp;PXb8;2tv? z7Q5(^&t^av=*}6C^#MYAqSqnW9Zx_n)(o2i40Dho1_`S$1dTymP#??)W(G}x7@ms= zhvfG!K9@JNKLXq4b;i1(e1nL6=yEN0H}n*27sxv_~{jS@oGi zM!d8Zpaq_*Z@)WzA|%m65^Z$-gD0GATZE_%@adZ}e;PFOPgHS}t5YeS>}iRZv>)Q$=Mj zSA68@lkZHw^pYxa+zqmscP8mK;}kCFN+N-${;^@U|lE$P+}TJ^$F% zvGda}o{{rojyoB`uNtZ8kr$@leFw3lgUg0>`mJAG|LJ*_0BD(wMzf2NDp-uTO_)^N z76R=A+6ZhWu$2JOsoXYzh&9@YT|^~+O|O+S4?IJJgvBNn8+mCmHG7U5JP#c6bbL*y zdUWEco=;!+>Ghw#((I|Xat%~K7JUf)SQfFQam3r>Xl07%fzw3v-Cl1bqi3+czn2l> z`-wV?Wb_S!yyGGU_E9jeKicDClzYVJR)SPPYQDQ!(?VP>@ONajHaPl{-L zenQje6^LC?Y6$fKqQX}3u4rto8&Rn&|4uBNk7#C=jYl&zr;jJa)-*#f#*^Pp=TC`U4*6Jy14yEA>_J=3I%(okZb?^w%86d_D|NhYI9&}==NiirzpC1%{(2IojK3eDov$n3Vzlvf zxt+t>G;KTi9*7jjhV_oYdH z%dNew^uQbvd+T=6$MuUmo8mE@|rzNZ0XDHw+~yingbed*2~)AEKrK(L&P&; zS1{`hYr=bI4O&AgTrd_BSg6jM@rEt2jdATDj!e?!%?|2PwPT<%sb6x3ZGjpk1Ft>4 zZb93lI<(pLuuW-mkl5djp*xZ4`UlTWzwm?Uw|{o^+*1;|aP`Fxj`sPFg4aF$>&O1} zy%(-re0us@&rhEi1733N*_W=4jQ;C;CqMtz2h)!~ef@*c>*r5iJ@d;ezkc!hFTVfz znKwUw`Rs9BV`C(9=rEWvUjOlY1q%%Lz-I=-ypgis^%_{_zN7eLb`3tbff2_YjO9Fi z;pyp-Ujl7GJ+6NL$t&;vQvT#?Bj$D8f$j|)@WuK}(5OHVLQkSd$$9G3^$*6G6W9+h zzpn`+zw+MM>BmQ|z4I!2AYoTu)93m6t3RB6;vcVm|5sPfkFc0m-#vfzu~XCU{0KyP zW)E1#{R4hDjlBb2-%(bz>reg|-5~XWx`NG~Awmz-LD$}U2i3lE@mX~msUhgS>u1HK;umO9&k#YQ1QOO9>$UKN38zAAr9=L{gi(sE9#@P z+%c-@{Zt9vVK1v3H^6+}{gKQAzJV^_Yks0dV_25-E8$w@UA_T7Nmi2QAL~2rDI^@m zzyC0(oJTa69-kh4_GS&DoO8INrl%?f#W!yLgdM>NcVV>-)ra_Om6Csv)ED`eG) zS#@7%N{#Du$iiknx$#u{iT1N4p=11lErPXOw6;%Kv!kKKpPHzis87~#wt3~%}-n}|pRXf@qb{CGWzcH2X0iy#6 z)Nl%EI!<@+RckM40dNcMb)tJ6pL8=kPEY9xp|i2_b2N^U8I8rfPB&vP+1Ba8jw(KO zhaC-k{2eapMcaVr z)CTa?3VB0;pD2}2oFyBYbe}X?HhPSoEHB+yZ2VoZ5$@mBwz@X0&|F?&X)DtI-sot{ z)&D-%2zMl&wMokxLq252x3~y%q=M+ew+#VpdvO7)NOiAetx0N0ULPGgQuf?0yXY9`y&H(yi@mit(V;YA3 z5735;Lo`b4iXRcM!%RU_8nh@g{u2(y8A;Zn*CG0Pu?y_$IE38)jktI+f|M8!Ofw7D z?6o}xCfT|~7I+reWVEOzUBOHR1xkbLWX0Df-ZyL>s0dUk*#fz;fCZ>Sk7b`T#>WLi z%uavtJxvU;pq?wcNexNR#jc?KK{gZO^Bpz^4L40MYg`2lY0?{SnqEN?jcL-GL+)4| z)xYT7nAVvlq(Xd^IPvo*sa@ufYL28!HEc!SsgP(TUJ&p6aUkhI-Ej~!@wtZ-#VjQO zVkX2QhE38HU+ZDp0nKoB(6&x9s=c>(*dELd6(=P@K(EH@2-**kFppi|)q0)qm#X|Z z@ROX6U3l(-pJbUazZ-seH1IqZeoyqV2L3$wD^&h`_$y<6u2Ag@sb*~~2Korj*Jba3 z)@w(u1xQyN3xuEYk&$!wP4LTe4E_xG5Jj7Rr$^E*Qxv^@Yk#SrSQx1 zh_yoY-FhpK$Lv_1EDzatt9c-YIdM72zFW<~TXs(OiZ*_RX)$X~mIkeuqsUyIuXxXg z9qN@Om`&>n;yJwKx4yEZVYS;CtNpH6Ycv{=qO*sc>hipv0O88fE9i``b#Fo|ycPR( zJvtDi_F?D4&YjU;g*dCPR13eDa?_c?KAK(!bGBm^=Yh75}Z6Zs8dfC+lI6XY>LKWR`>0Fk8Zj0WRqpr9Zz z7e8?-K7=UH#Ql=q$uppggPMEIBriP#zjQsLI|+>Ahj#m-`S4PtPjV(kQ^!Zo85sULX{Jq4;06lMTa*|um6x;SDLanBGqO<~b)f8ZE5MqUGTdc@cR+Ak2v z7~H=fOty%z56T4rFz@^NA{o%^g0>uYj&gXBzz+z#L?A@qJb{-1BIaKI;Qm3bzdOMF zkOD6dc!dBh)ZBLoyh`9T0zW1|q;N#<4{-H45o?U3C0UQsdpJeHBKeur06MYG#QD${L;9xscTo>gf1Ghh*=Jh2L68J=%+76Jkd)& ziSW&if1kKd5SKnveh=sLQkFFo3VoIvQv+BYXm0?eHxVj-+TQ`%HQJpuV0r*0bQIh`^ftgaO=Zq#1 ze!)V%N(!H8)Hq6ssNAFt7nHtaecl?nTdY}pv2>zlgHW(hEZ8_|4BN{nM!P!3(u=Dn zYBmc6Tf~Ab6oZkcJJc~&U79;lvrQ=2E*5MbHKNaR83`U*E>!Vi zwTacuGdA*OYjP_>^+QfqJxNlUTEf$KBgMVhVpmhfujjtX#w6zTZ1jMG>nt8@1cDH;ou>-+l9z)>1~)^$dKW zaXVdK5rEf;F(Ox^rlcaYOemf+)-4n_jc*c)T1K`^yNbePbHfEC;gafbVOh9*Hl}BBq+Uv&_^7cmFlz2xOG{z=4{M)foKDsu)qfzrw;hOA@3jN2mR(L*M zw8;a{pWNj6Q-z_UCi71=<=U_FDU5bKQe5{Zm7DN3TglJD8 z=-|`E`SfuGCFsl!grfrxNKVoE2lxn3}Vq7AeJJ=^>e`qLiSC6G0u4Ta=nNkeX|f&@UOm4DQK* zOt*qx<%pGcNN!s&qf4dE)2E&x?NJ5qWr!_d)Afc_p$u1!WD?p;vKEyXT;+47>~UO{RZ{5enSL zh{5OzT22m*zZNlgRBJm|PTkEzx>+jsT zzIA8Uw(UEaf=(n)rkLUy$O)9Qv8T`1%}KNl(G=YK0MMB-Fbp2#p?|0^pimg3S<3yI z;%y|r2nE(T?c}8#x%&b9768KQrAxx@9jXptBrNy8B32d%LH|w+0pa%z#wL9KM8e@K zM0*8rc&A5nHVV#pqI2G)bIpWvO*kiS^vJXHF+Y2+STHA?TX=T1m|GM3oiS^2)@r}d z7;`LN5g5t%+My|!8>1Me6ygC`nlR)^;-rQfq%3T|-nIEoQ7_Phf;;s+wdgrc7 z2QG8M$~(oCck(;;@VoW^iYxc>b$8=tDE>mRc6qpdIkwe=s~TpU=3HR<0ACT9VIUu^ zV@+fLxReb~juNfK1bcK%#fFud53APZZ^+Pp+-!yClMKTKOXepQ zJ-KaKa%VS^d!=RLeEsh-%QrUYe>Y1@?gk^^aaU6dcoNMrJqtC$RdFmP;?^=u=x6vk zBw|AGYdUZbiW$8WnNNHy$XIkiU1~XyS|Sy{mZw%HR>wa?D;K+hnp9l=)Zfhbx&aH) z`^(k%3`yORz9V}2j(839m-vOmCIuNU03JcBg;b{mexv{A_zKII+OPo<61!DpRxtR8Bi0?cu33rJ8Lu01mzh| zv=IE@E06u|31g6^g?D4OS-NqEsZ6JxYn4iw@jZ}cuBqZH(gBR3JnvG@I@N4Y$_uFT zk}=0y!5b55dJ8hC;Y>((OuI%0!SKyZG3JHYD7a~4z z(iQ)10h={=GtVW=Hm&Ald)g6NqGXxSZWW!S#0jY4|GP&>omWY$jQ^k!vS5U=Na}m< zAY_4AX-3GZ8X>D9bqiV*i5uLqv<+@gtln@}sNC}GLwJ=cTwae5F1HyYt@7RSNSn?j zZS^>L7!pLY`i+5X%>sXQtPb#J!C#~DTj8Ij^4s9ARr!gUsZ;sw@T+BS4)_VHXBXO{ z^4)4%P%9_W&56rJ_T5G>tDt|uw^J0G1 zHraO@wJJa^GL4B+3xg)WqF`39_7yGE7@e^aK!4ie-^28)ZyGug+sLrmdzBm+O_!}M z!>bJ(P@V^~<4a8X(iKN(I>T`G!`Yze*sqGFD;ZjY+@hP-nB4CATR*z`504XNH~RY3 z?~Px5`pxNgzDxTm-g;5m?Vy(ANg9Df>ydEhYx){WL>ehz{^acRxv|fm1)kr*c1~P9 z6N3Ej`kNm>=koenuSgL;|1O?`DrBUOm2F@H#pj1u5Hg4uO-1|R4-XFbu?vp&WPr}< zKm3|SlCW$-nYXa3gS(UBQ7MTsnF|y~w5dc_jggDwEfI^d3qO)WyHWl7quX`Z?qZ1+ z3sLm*1YRcaLjVwzstv4uWz$=1`^4*rRKG|f2yaRYa{okmW)dLb7WY#E+XxVK$W0Pp zWZ}=?idgoL^pfd2a`awsI|%%Oz%)JAcSBnE4td`t@Gk_e5O|LO&2g!dZlOmL#9HaP zkh?~iUMCPD5Z_OdS|_7B?GjnZ2uz|aBibVoSHcD%Z1a<(blis&0}{A_hx`#U{dAGo zHKOf_xD$4&NDq=i8I7wud{CnA??-linz}KvHI8~^dtVg-!0QWi_d@#kHR88m>iR#& z$CgOgj(8E(bli5BO5lv)Uqn*kx3uW^4&3yR^A-_e;Z@JjR=eN#eQpPiyMEC^@ z`6?+KO2i4Wrff)MKATl5&VmkMRX86ClR9U+mTzqRxJz7*+c(kZ;~Ra`#g(Cr{M>bX z)q0_LgIK)bvYs#AGLxTJuvC?F#m^LFBJ-(Pi}@vO!mQ2Wtj(j_rs~&<^_~1Z2ZZ{A zV*NqhJu93)i*LMx&!>B;eAZYdKYtTn+a{E67RxtZUdxwno2k0Zay^=YR_%@H{0gag zYM8oZyn74onflu-rvq+0O`6`PdesIIOc?lO3u|le2Iw~g>|#V zx)tHtdg5?Y)m&H=byiki0FQ-*u3i7z)qM57(3%U|CaYIYRIe1OSBupMTFu|J51Y>B zqMZQPc}DF7fHww8T!qXlCt=yig|IlcK`@@`813Vw)k>{i8dGlhSgr=^hm&GQk&n<$9SHEb`;C0aNVYnSuR6HRHF&MsRu`8XJj#xpdMRnMJhtHz2 z;|`3QbTJbI8h)2rI7fCClF(V>e(VBLi|Gy#a>TCqR)CELrcuZgd#e5oE$PB)7y|F?^H4^J#tv4Sk+&UG@%SNO8 zMq!fBy2xAH2Lr0ZFyRU%c2BGf^>5OAF{)NP)#`y+ti124w;JKfd#HNb)NhUY4S-vo z!(h>7 zwIi-9ePE;VJm`ooF=VaLM`uw&S-iXBri)PmfuzVP#_-yc^*>`y#5{rD>~ zFNXGFvQ3>5J4P~pG5s9~-C@c}Ep#WA%n;2aX~XIC>62I4c2n?XuK&aP5Y}IN?VZm@ z@v-JULnQ9M0dz0Sq)o;BO$&gfzxj$1x9RVJo-Yl_nen0_C z!#05xA=jU=batuK2&6KwGkE&MORwp<3FJV^PK@;=@daq5t*_=bP~J>;+GlCLv9_)_USL*6H*gXJNoQr~Dv0{N% z>0wtdw$J({b1LnWIn|0bQ-jOm^K$pY=XU}ma93iwzYZy)qN>g5FeOjn-%ki;3f78B zmJd;~N@)OQz)l@KaTHcV>>klhyEx68wPS|2Og}bZt7qM6v2L{#1`Xk}8~K_weDPYr zwN7-cyVS$G+IVYQJlAHe*6h>%hp=r}&NG@6KVL|JU!{5mawe>qP`F$yT#n$)ep!-=USdyb#4_!`z*nj3))dJ zZ@hWJvl5L8S1ue6ynXa%M=x0}xBhXnuyn7ubnisvUfx>%84YTIEr+jO%6>m9uNbw4 zUDX&>=Y81V>zQ=dPPnnDb>GD%0J^t#N)Ew&ujsy)ci$U!fnla~9#cm@!msS$>yFU9 z`|ioz_fG7-m%r~If9OH+P(au{B<>!Po(k@xqWdWCKKfZ@?W?n2o;|itsB9K1n@8=i z6nSRZ>1Aiz1y{Z3g3^fA*@Y6S_}cp}uKQrqJDV=;<9F^BTK0%7Q0u;jzv~`Av1K2g z;}+cajc!9HELin%f!MldV*Va}{+>{CsF~llpLcks!J4a>8?I^!S1;tNxA051ggtfe zidBolHH#4#F0Y4jhZC#}04R4j!Py`HJ38pm7WEyr7EW5rC#>aywL-L3@YV{NLsto&SGn0SQE;pP=L;a9jU`Jnj$MmBz(2bw<=;Fq=Y z_dLKC_uv*>UeV=+u5F4*AAJ*UI`>n)5KVOamLe!wLCDtKMmzE@F9x77El_zESP zrtf7uT&a0t--8a&rd9z?+$hUps>Vpk^G9$hG$~YLOmUm-?Mkq`a9RFANG1ZD?QDyUv~}} z4S4|6WxxjB^*7&)kphyPIR!sfBfL^73E_psP(paQ|4D%1x$c{5r7DuhNT%HU-$VUB)AR1mTl)gG0yQsIZt zqSpK~;fL*bZ3#ath4yHixUGnGT7?VBU$Q-Kd!<(>m?sv@n=Dv5QLyxV^Ly6I)`?}i zgo52-!S2a|dnO9*5elGDdM^Yhl97z`(l+Efqlp7wkoT+ju$gSVZ57G-?5FLo82FkV z!Q&M@UjD#?eE%_i|8c?bP0{g9p4~CS9IJpa*d#FJ$mR1|E;<2l3yzhdV+Yo}=KoV0dNSi1#lk7(`T ztv&eeBNc4wfj4ih5v?`6wIw|V7zAyzDJ~BeH_aIJw7Ul23yq$3*8t2k#dR3# zzm&a}(23+_ANJ(r${5`Eddc5&Ck==B_o!=wUGu%x$_+aGZz{sKgrOO+pHxwG*02RTQ=(T zpA?pFSf&4DnU>tEjDW{0QfQerb@$FymW4PJfSB401^6GJkN$rYK%-$cHgtz%X8#Ks zEcB`mzoKUv|FH^Xp(m3r7~(U&kr9s;U>A?9=STZY0xFHZ_?XxkWJvu<^+MAyKJI`P z%u}P+6jFVZl*sD?Y z?2DO9`%%?vs+u^0X0P*{?ts>t<8{5^PB4gQ@#d0#9#;nY6qbi@UO~{}%~QI|Yf-uL zRqg`Cjr8fz(>kRd@oi6oo~q(2jB~VEMpaYlq23Cj3WIt61~p?|ohuCN6~>P)n7Z23 zR#AcpY-Avv<-x3=wM#}a1M`(uD;lQpV~hCmEJR7f=u5idQ$TN6HPc9k&0G9;LbR4C zMKhf>TU<%n0P)YFSE80&5~5WiBU&&3$PleKLxAq3Tu+VJDdO`p+`?Yb#3f}M0D(PT13g}LtyZ5*MoHG4efdH|C`nlx7?Z$i(ZQ_ z2LPg0Bo++gG#hj}LXt0{U*e|%UNdYU3?)ZJ2-JR)V!vpBU5bTdQ~tPqN3$nlV#o22 zwcry-aok{OMPNqvfd2@cXTZ3T!0684Sw#Dw+G+*&9K~M*!*f24%rq!^OmRoXq%vTU z1LVrT5y@e|!gDZs-?NXe*c1B3t3xjjjdfns3AHQ4+7$@GeW~JiH6PYoHt{=l3Tt+W zYj#P&a$08Xf?=lUa?6e*zJaxUy)XekbQop8xZw0l?_7E3J6GO)<;ulxM^yuvX~q;| z`_z+H-z0+~*WP_@`pI{2-p|#ae+wqDr%%0g^{H23+)*|PEsg%aJo2c;BH4MAGHbRB zRiaQ!^vop5E;uwEue|&Cm0!Owed^KckNg8z>4-+-Zm}q{ij|CT4+}@FuYpznomZ~^ z`n#xzR2u9*UOo2)xZ4o}X)|J6RwFW5XJi)d4=iNYe_q||!St)w!w#avbN0jH2aHY9 zIKc#9#DarQx&ng_!Xlt#`y{jH;2_Sd@Jl$m8~87>-a%R0;>HsD*Cb}PML{1V6u<0N zQG98O-a_QfiBy0Cd-1rQgIy2C4&8`Ydi}ivwA~G73>mz=JpqX$PTXpopA$3S(bv}x zs~|MU98L$681xZ4xW;r;3!UFYrvJGnDu)`v?Ilo1G3m`r5zhEI>C54j##lmNgjJA)gpDL^q3zrCm z%f!NElZ9;)g>9E>_`P@Wg>6FN-D2V0Bb%p|wqBb3pS;4-o#N7+eBM2yht3R~9thn% zt`qVWig^op+;`tIvhlOLqBFgxd!ujs{RiL>JO@R!tiKJIX7 zO{iBaoj2|jOBar}iKVM99urI3MlGM^6rP!TdhTC53x%9TV$Pz;oD~x}EB?~5O>DWB z?|wk+_D!_-gq;0i&i=`qzKNVZA!k6$85mg`c44=j(Kc@?ul}O;J;UYAeBNFmZ?BlQ zcT`U#BN=vFD>yu&!vn@I?$4?lNA;qkVydG4Ldp5E3uUAFXR{N@G{`eTfs4(2@dn(2 zYoqAeII}cyE=aQ@?TkpCBP@iGV5zfGPq!OiFZ+8EVjXx7A9c0qh!ESfm#(->Cd}4k)F4D9Bwg`%8)K2W0)&V}ubU`Gsc0HyM@)Qv zU7O|3(u7E=cO2D^OCD%6+cIrc6OrM&j3?{I&!E%L?mZHi96X9g%ljy?? zJX5JIL2X1goJrO`p$3$IfWm0`EMlJh3=PR}pio zf0NQVgHEI)yqaB@u~jj*`ZvB_ph(qkdLG*22s*v_iTfb`M%A78SvVWBP+gin(5BSv zuUf|_kX3gi>lg_mQC~Q;6S-aa;6?0vqVsm%enlcSXuH&}et8{7wZ3`g%Ej-*NYZOB zT)gt$d$8P2YBAq_<)5E=W%=S7P%x5e&-9z;uRirFX#IecjW`ky@ni%6qh^O_g;JNM z*6rbL;Gs&l2b3a1vw@%z*;@*eg*`)L+#YAq;2=I&+2~S^*c>80O02S|x4Mw)Z~f%T zubz@y(Cqm)edD72Lo^Sib|yraj-7vlqxW{DAbF2o6+R!XYK<$ZSg65=$ zFh$tg&&VcLQK>pcdg71hAM*9k0iH0E2;vvV^GZcisW-I-Snlt}xws0eB5C@sMh>+^ zX8jk;6C$$~$D0q~?X{shM+`6xa^|knckyNO#&d++MPlxv$=v3N+-4!SMa*p(vEX!8 zApGVHT1g$KdKF*1T5#PVy6(7C#kYs@D^rmi;i|bKYoV_*V{q8Y!j8Rs{2eYT6^rKZMf1lvSf^*S z-}uIhokHFwF>lkTUbaHN{gR(A*)H9JV~6P2!LwVEcV*dN5HJQPjrFvZFTLa94glPO zqg8aY@{U$m%XgNA-P`#1JM7-f$KT;nk67Bsmo6Hw96!XDw2rP17uBC_8V~SAEwBV9 z7PXA7Mb#&Z=1dgL8Cx$DEf9+qjINz3D(5}(agSGxcVEA`JXrs<@J~klE;~if7NMwJENUNJJGwS@L;zVebV>l3)05G)kjXjAKs3o0HX7L|0LnNO z)zr16FvXbHAmq*!bLWn1fP}4}Y%+iTL_R7ZbE7Hs4qSsVa1a*-?!U}mQ_Zl1AemvXWt z%sui_8&U)-VK=_MPy6>I0tr=kwAHz#Q1ctNi(qYQrG>VC7t<|K(10wLhc3_9FR#!ZZ~{1PuRtEsC{(iRq7L^ z5KGqn0ilNztw2(uR~0=c5*)&K9-#rzEA{aRFgQVHfs&aCIY&nJCGD;l_$J~wW4W<< z%VI`WZ`pSn_0CRFZ~JZ3o6KAMwR$J&o;i~QQa3dh6sJR^Q%t}d&c|GnN13y$eV7$F zYH||$7+iF!tg;sZqvj4~(0+wrW`K~+=%tvRiJvuZJuL^3Pii}HR7AnmS49Oq{>Ay!WFcUU{j8o5BLTZyP?1)Lp zOt^_yGJ)xmGz$u4v7|%*8sbUu`l2Bca!!vwfrH5;`VDfZ7zK58Qld-9*J%TQLB4N^c^jhFx1Ksbq`@60MVgC^#GnL?|*=k zzLN_EP1@R~qTjeVNVg$k#o^q8UD40h5RvcE9Ad4Is!fu&81;%{#7OXbRj%c!x1>lU zgJVbCe(t8~Fx5CFtCa+CL$uCLKmN-r?|#4D#M!CZ4gwbt9C0vm!Rv!`sf(G~AVcY} z-5%(D2uAPWgn7u`{k=Y%y%lqjje5lcd+H=cijs#BtNi(;GpWhQh&OgDFSi!)hKPQQ zRy!s@j?t{QD>_pML~61`VzE)FB=1scqe2EUQj7__=F!t15Kwlp5NaR^!I)r-5o$~b zMucP3USpypj8SN-P)a0Q5)a2Ul-od0j3kgdCds;p$4$C+(j{r!l|^TOiUh;7ko%Bp zM<(5vcK#2ev$~|J!PoA14Bz1r?Jy{AL&jrk#fCd1=VukwV#VUo>~K~6WYwyPs#O>L z;_B`E>fQXV-F&x?hiUVw{bCjE00@`O8_kl5t3araFA30n@BQMv15tNLKyVC+jv=1i zVW<09*q_Wqk)bNFa-rm8MJ`BJYuT(b*;hzVP0Q^WR&^*X#@JxNz_I!tpiZ3&onHe9h9!1L6D{ zic`cFHieGTnZiY7*z1C0g{MlY&$U0-ajt``T!Q2QAS;*IFa+<8ohED)tYxCLjJK90 z3ech&jGmecrtp&G;*t*D)5Cif(7mfCT)ikIF|}KJYb{HdvdqhfspRBJ)Ei&lFA-BZ zvJV~u@)5!d#=gPlF2F6A7K)~YylLU>8_UFD!_0p8L979fx;9%$*w(h1gl%wtXlR`U z&quS#^U>0^1@QdNPM+VDtjUAt_Y27L`_+cc`pi%DdbmH$(2_foxviEhrTS0vTDBDE z|B$1F`ws<1z~h-sz5Ry=xj+vJl`lf2X|?m0Fo_&>+fAYqBmcKe}Y61jjuA$zF1Ony_WF0g} zJFpowP0eLg3fy^B4dZizHBp%?KnrDAUg~WSuq&6a(IMX2xk4a$&0fnJ33jr9B5G2b zMo8W!0PC6bHH}_}N3UQ;8r?~2 z+9x(>JQ}_B9OC>wfmh8j^lv^*&bW5e>q%95dsoN;cd`qR} zrY$Ycn|~XnS#GJcg0!U-dW&wOw5(tzSAgT3RSbdH{7EG3fTdyBm#Y9evi=EXT;AjZprHZpH8oQ-#Fj?xl^c#O{#3?sXm zgv3c>nUJ%YgO*^{t>~HFN}M;!6Ua|T+$x~xsiu2hJ!!|fBEDA>#yxI@VvX`FRH?WXm$y2YjrXR8%!#Bh3sQ_X ztvG&Or9aDo9rC_G$s6sh!^wK;I#er96__ zaRnWU%~!Zd+{Z4sW$kyki3Jb~mnGo{m)8uq8&q-T#@sN(;ZQ8Eh8knx>fiWL0K*3( zu2^4XImm3Q+sHwFr;wXG7)d%7yU;WwntLL7&a`D8K_d-y-MhuB5b^^~NOCl`7=Z`#f_1mvW z5$bVRY~#^B|Iy^i$6fxw4D%0&=8&z*sdy zHcHAWD%H`$bQCzErzAE`FS&@N#rR)WPdsw<+*=a=i#tS*P6I?T`hDKsp?>Z`3VDV? z41+icrQ>rGbGL2X-WAbyflKxxMM&TgQ4R@qYq>rOyGEd&z;%EjV!}yVKh+g(_8ixH z=6Z%ac&ZKuyHPeb6JvzcXWf?dT&V)AZ0aU;*`6WBb-Hr#$5OY&v^f4J;zhD0@{n=p zaKa)x9CL^^3c+^F)gO$i1}IiBi9@$gI+_KCr}RNrgvgVe1iZftaA?mL=2>Kz&$}u*!}JHLJtFTFJgjm6OJ1^;%EFeNy~i!kPhxAED>2F zhMxZr*osDii&QH1b1844Y8ekNVjLI@40J2q!u@y3!MqD+o=PTr6(*m;AlygE8N2UY za-Ab^3)A2|iuW1-o%7j`({!Nu?i=8aAf(>Kbx{5H07SBe4)+bBt%tkOHBVA}m)!lb z{)L|#q$hgxLi*V^O;OB41HIU(0w$|e$@>tV!fIDbY{n7czezIUp6Zn$P{xUx1} zw~!pTtLmp}n=S;;KYZa~*#XXDO%XVcHAUb&))bvJe_fy{DLc0;wD#4FFK-;{xVZL% zjqhx{)GoB_5LOXYmGTy%Yq|4u&Nx?5PjM_j%~sNO49?-h#g5{vJe(HIKX zX=il$(skOY)oU&-{N2(ImtI~0^D~oobxqvW#or$g?iv#B8WPq%B(8l(SbaoXeT2@B zY~ejEH>Ro^e_`gUno&KZSHtk?wXs-;2%Q%^CzfW0rqJ_J*7I4RHld(VENJ8l8fhDT z_Vd|7L7iAo#~0L17nD&9zIxlmWdOJ@8>L_As87CN`^-Y>cd7R!_yrq@uNYK^r*kv* zYGNi*FN_nryf4> z@Yx3i`)tt;8_rr=?UWN z87ua7-kNx`J~vZ|yvOSYI+B-(Wme$X#_L;>wS2U>RS|gKY)6JZKS}9 zv(_0B6-8TO*>WUxFrfqek0K3eshS`rEm$fPEEfxwvlT^n}~-} z*G@H4)7Oq{X~~S@Td67ROx;3FGn3v06BA@nuSc)6!X47lvIMn&SuZAS2?C>#5bo%O z!*g-$sW%&kn&Q1xj>ctgGLebV3yiHiuuf8?bi}8m_jRWxwpj)20@d~&Lu#-osy9O`)D&kcfdb)aQ}YnJogUv4D~~Gq!Bx&K_L4N`h0=@ zzDD+oee5<^2<;98aFi-VirD0JQKG>6K`947>(=YJJ}itl-9?Vu6{FL+0X$(1Om13? z+8-iyKIw5RsH5H{E!hfPPn52tXTykRdaWawIJMPJdrt15hcqL(E|jM_g+|ZT_=uV6 zgY77YdOu?MX~_bWDp9AUa=Q}Nd)5k$Lyoyf;1}SaMZeGpb5hEx4@$+66UCMK1$%>N zZvYZ%26k@EIn{omoiAK7z7hbpV1<_VTHd-gN~yN+#h@=&iLO3XE&bN zc6wWAtKeQBx)+R?!&&aL+7qirR>?W89=Gv@t8oj~J47oH#c65ZX;b#8tP@$h`=0Sq z0Nj`BrC&h7v`;kc<4yZ!3`X;?ZrX*DST9!d9S3I6UhPA)Tibm^_XUGrF^CY`5#5a` zdjU0a7%>zWOTG(qtmc?D$dV7UYG4V&6s`x)-_1P*#vwJYK=) zF2*gGmWZY$ylDwjkl-tte*s&b1ktoP`Do40y> zvHs&+E!-a$8v&1(q|zGq_WHq&={cBMQ+ys6AWvHV%C|QT|4P8=(wy#)h?n`@aa-k5 z;(lI9(IN|d61~!GIA)uo({4HT8gXbkzQ>9fo^1k7tU+cn_UUC`NPOR%u^IrENYG3k zHV)L{n?y@$^ujj@79SGYXATxL5|GX0)}_FGc4Jd3`asgF9xDI8Tw35q~GaYHg4t*M-M z025P2Mfe@e?2`4PA&|~goo1kePgWzj6#+Ej%e@K{SDC8g=Q9;+`u>HeO-ZcY(6P=q zVGXQ^`8Apm>wc{_`!SQ(esi;1oXLx`2^0bFKql}Pl^-Lo(ok0Nj~@rpybi2Vo*weV z+|tej9CGh~V9hyf39OAhAzT@U+~=tK5m=u~I$Z%e<62e!;*19Lg{sG)B@PDo>-d*0 zyanrGZjC1OhFxfK6Ly)e&If*+IDq#hBYyrSyj4)sNJv%uq8=ka>R#-ETbTiwiUI?| z<^C#tVkncu{bRt!&{o-WB@D8^Y~SW%*v(FOSdv?d9zY3 z)|5@dS#iBNOL?lepuCZl63>;#1h}v^uuVx3Ob~shcu&itIIeX#>)|Zmxa?Pj<9db` zBEKkJJA#7(o`HFy>mQ6>d-vx|UHz5mr@uEn^2FzlKMjjYS1vw3ed0W@%IO!+Y#7>t zgwb;wKX?JAmEtowNrJO;Pfh>y2h-=qqZyt)c@2A=N1vE}<}9`|!=4jzMu}3w*P?bu z8CLes$U9;SbaOz=y7~vbLy+v9Ko~nL61J7Do_uop&F7&QkMj$p`Y_?%5H0ppr|*qG z$y|B>tot*BN@iBE6Bq|a9vJX>x_z1%t|IOS&7KDx- z=2jiAiGAi3F^9?sS1j5A!X)P*pBvXT*EKN2mDi1XeDCOy(5zP*UT!$wc%hNcpC<*Y zAv3mx8vOxjVJPeY4pN?>40x{o;_c}R-%mJhAv&nowjd4F$oLS+;iayHwtsX=eCL(v zQ$NIJ05OCCPZbOC-5?XX9)aX0F35RPvRI6AxRPIq=Ozd zQ1nFrk-VPnfv#9vm9dhzL)4+%eAZ zd&l@$Hfh*?O_8Pu{8xa8Gwy9n`0Z z3GPN{XL5NRBpM@hYC-)HoWwZN1`ERBn)&owiL(jl*E2P%@j~DEfeQoVtHLP-^jm_R z?Cw(0RYm7iF8HjlQY@^8I{(<6qZw1KJoPHZ-*G>@LSDBB=;{_--55~kf^hBp(KgXt z&AY2Vi#ikcLZeoV&F|kOuDo+%?w$PHJI@|Jdz`=P0p40NWi1bv)`!dIggyT8d&R|@ zc#ofM-!~*jxMUU{iskcZbAhKRTwD|O%oRNgXIvH=wiN(;MF8g<*s>wtv$;-fIkAN= zcqr5Wfcs*z@MgijLbQ{_-hKyfO1x1ClDT1hfW!YytTO-5s^6m5{3f$i zgP#x0_BDl?4-2&9F05FyQvYEybGK;8y)qBsAGunqHZRftc8L|9kM-+k!SiW7c|KiY z*xa1?X)|T`=}IlRSCRV$iA&;^T7P56fB5q$7+mda3MqB^dmt*j{rA(jZM6(vSv5 zMjDjF%3~t2O|T!WA_!A!qJx3YSP)4hm0igTq(PP9OJsGVAPpD^4;@qEu;F2Brj>qG zq=A)f^OW~@N(|z6o~7g2C4wM^VQ-KS>;Pc{{|!~>V5mC8Vr;+S4-m2o_~rzDVJ>v& zzyTc64jry2Rv$uejN1*eLfXU{k9pF!!%;<&Ex%r3C(dY8psmWAc97?#KKvK=5^j28m7 zff^ek8%HE@>fo$jjUAG~cH_v7tSGXu(>9LeqzFYakz5I>ZNi@@R?}8EP8}=lk6APp zBh*ykQIvFv!-Fru82yZUb(ay8ZTn$=Gi@RVd%=3SlBSL4ydUD zlLQE)jTL#A79naZC?WG9or7X{L=3lL77}p`kH`nc#ELU_P+7%K#GTJ1DxQ@po)vMN zI-@wUXu<(m;j(DL0Z{^$OJi4>?)p-0fkoMTv%0vE^}+p0jq977Xo&ZV&IjAteaVe! z<_Df`Xx;LLZ(A$2##L>rwcm)k5&kT@+mFc2AVqH0W^HS5+-$H@xS6N$1{Q90?Z~m; z?2PT;?Voq>2>*r827N7egZdi5K2qO~;TO<={-M{KO%{JZfF_GL|0Z`*Kh1HeT&WZZ zy$!OxN0HDsVDlKYqkSGOp^s;$%KYQZ9s&jxhbE(E-=;w&mnqeL{i{!w-+u4zMJT;q z1SbF+(e>r}^2D#d{$R#3QPREp@c)efqFLE)rIoq){*4LqMRxrktpmRc6RY|`SidVX zchh92AVvEi&b@DkrR_FY+U7BO(Yk9fi^;39*>Vg^%FRd<7KpG_*(Dk-+9=9~nD-De zs{^R^wj;Ex8$CUG?D*(GNRqVYZCc-xX=1W~-1$3P@b~~K!7##Q`Je`nBun{gWpDnw z&_QaR_cn{(X1Ga*o310%uUtEQC;Frm9TgA0kch^mXk1-FEU{e3$kzV46=;XndauBS zZUPyk;=pc;4X13BWJ^Mu@C$t~q)ttWy!>fzNBAW&&(QVLnw5sZT>KIhTk-~${b3~= z5eyAJ7lsC(Yr=t1CO1(w&F;5W0E%}=Efd;wFYZ7S_7KtcS4GGs)djuF=yVW ztmb~>>JHjJs_6FHZ+LkGZ}_u8U#m(7#7b2>nILk{aO*$u_?m3kP2ZM4A}?a0#n#;3hRm%$fF}==0;bK zJ&IdsAm1zu^Db*ofX(@`TjyrXhhb^+?JsFg7k@^cl?CKhlX&nk3R;Ylq1g3Df#_YvZVD zieHbxFYKsrkE(heWSnLpjccf>SkQc9pl)qYKA=@5yo2^Xrg?`ZUYd6*2?1LCf0chP z_?_AR7wT0w3t6G)J!=|_>z7ttjZMYwM4m{LbW0`O3nl&YCH-IJ*GlY;>97}||q%e}Y#F70lTv!dp5(wByq+tw#s7CGwwFN^(Be;E} z$iF{PTrU;Zr&S(qv2+^i!?Zn@(vcKpi-Og~jpy*-e&@p%1!+}5z6TFVT@>^-lf8`I z^~_6HGwfw-&qw4|fg2}ot|eC;2!GL$4Qc@z zZu}k?&?v?9kqR_YCL#-tPdS%C)5Dre*USK@S^Y_4u3n$g%(<;~YT6s7iImLMr(Z`v zkH9oQ8;+{1HG&}qgXz;I8L82_*;l7^0!#1S%bed}6=l$-Fx`XEqV?KH&jZ>NrkuE2 zN1D53nusv3fj=u7i@7hePp5wZFyC&?4egCgdCAq64nV_urT7K2}TCrPxZeWpv3A@g^6Z|SU6~;B(z4+GhrJ1{*e7byTIwJ^UkmeF{_p0J# z6}K|H=RMDMTdq%Orq_-qCVkoM0OJ~a1z5)=YUg&nOu8W1%)5ZF8}FW zNWIldO^T}x>}9|%!e|;dRdx4tfa)J6@>@DpF7#5kgGde$LkP__r?Q28Bc0esB%=`e zT{>%sjo+c@5Rp+LnXXJ=Ffbhg^r{Gu$&>#~Rgh3w)e872g$Na@z|sJlDP70z^m*hP zr+Gocg~=}sACAW355b35(C>dId>8^De7G6-FuiOUn?qL#hJ)o->!#|&s#ZvbgY8nV zeIeL2AM8p5yQN_Fgm=kH2A`czCxyfi;qAeZ@a>g+d&PYtqHjcWk1Si@Xykjr(T7WL zQMbZb$O=X8Sv?-R>L;X^D<<+B8N5$Ic^@y}(XQF&SDj%2_l8ei( z7EKjRH_kexjZY+syQSi8I9jq~-kT^Nmdb}GXcKLqp2=pl_M_Ju6QMpS)JJmI(povx zWRl5lfIv0?zB32}vdrgvk%mZ19$N~of4^R?X_9KTYP7als_m4k>ZPj3<^Cb5f4>+$ zJl!XSqYL4l`EXAnyj==!7jYas41sDX2~Xm79GdOjvP7m(h*@l zeyzf@Lc!U%ojRgAUSRwB7hU78 z9EVSfqlZqMVa}-+omffkLPJojsiI1rAwu|iF_(NcoESa!l2A`+9}-~$=0_B2BGOD` z1CfnHXc-MZ3`yU1*yk>sIWYDzECA3(0fAT+ivc?Q^Fs&W2SPZFEfWXeR%4V}Z=tj0 zdSTPz_KFEkfzh^#M z&+(Nax88inT%Bk=WbPI5(GHnw6|INNwTRXO`?z^*iui5>+m(Ztos*3-xngWk%pXeR z4@vn$=RNSTz?V$Es&M#9B?UQrU~(LKIy_wCSxJzqj>t9jGH68@RPk-%AqxbN*ZCDY zzLyFDN;W0J-9fS9pinM{b507mIDgsX-YdJ6H57Amfzagml@p4GVtHI)`Q!^%o>ROO z%jeb>Px`KSl(iIFmpsRsE8ud<6hEa?!zS`GzL77U0lNZUsRSdA&AY%C%<~18_ayit zi7!%Y&++^Qg(JFR=WNAB+Uqt`?&+H8B9Sjh@bwa3uh^QY3KFa>2_9z} z6x)-m0iu+<(MXFM4IumMJ_tvsg{>05HMLaCNJ}X-GP{$N>XP^_#TKIL0-=_k;Ps>) z^Mys{9-pgYWd_r(Z2|K@%WiCHGQ;3(8I$@KS=SMzLXR0~ z`w`Wir0B0r@O2Vjr`TN70tjV}=qW{}tc?l2N#dInTM7Hg6Q#_}M%orr?w0F^ud8?6 zEAhRG?P;DTITib&Vtu#^J^8fxX|~Vx&PCac?2`Chimi|pBueFWqg*m^qu$=-XJ)Er z0;aonu|hD)Q^EfLy-0K# diff --git a/src/web/blueprints/agent.py b/src/web/blueprints/agent.py new file mode 100644 index 0000000..e96e77d --- /dev/null +++ b/src/web/blueprints/agent.py @@ -0,0 +1,257 @@ +# -*- coding: utf-8 -*- +""" +Agent相关API蓝图 +处理智能代理、工具执行、监控等功能 +""" + +from flask import Blueprint, request, jsonify +import asyncio + +agent_bp = Blueprint('agent', __name__, url_prefix='/api/agent') + + +@agent_bp.route('/status') +def get_agent_status(): + """获取Agent状态""" + try: + from src.web.service_manager import service_manager + status = service_manager.get_agent_assistant().get_agent_status() + return jsonify({"success": True, **status}) + except Exception as e: + # 返回默认状态,避免500错误 + return jsonify({ + "success": False, + "status": "inactive", + "active_goals": 0, + "available_tools": 0, + "error": "Agent服务暂时不可用" + }) + + +@agent_bp.route('/action-history') +def get_agent_action_history(): + """获取Agent动作执行历史""" + try: + from src.web.service_manager import service_manager + limit = request.args.get('limit', 50, type=int) + history = service_manager.get_agent_assistant().get_action_history(limit) + return jsonify({ + "success": True, + "history": history, + "count": len(history) + }) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@agent_bp.route('/trigger-sample', methods=['POST']) +def trigger_sample_action(): + """触发示例动作""" + try: + from src.web.service_manager import service_manager + import asyncio + result = asyncio.run(service_manager.get_agent_assistant().trigger_sample_actions()) + return jsonify(result) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@agent_bp.route('/clear-history', methods=['POST']) +def clear_agent_history(): + """清空Agent执行历史""" + try: + from src.web.service_manager import service_manager + result = service_manager.get_agent_assistant().clear_execution_history() + return jsonify(result) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@agent_bp.route('/llm-stats') +def get_llm_stats(): + """获取LLM使用统计""" + try: + from src.web.service_manager import service_manager + stats = service_manager.get_agent_assistant().get_llm_usage_stats() + return jsonify({ + "success": True, + "stats": stats + }) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@agent_bp.route('/toggle', methods=['POST']) +def toggle_agent_mode(): + """切换Agent模式""" + try: + from src.web.service_manager import service_manager + data = request.get_json() + enabled = data.get('enabled', True) + success = service_manager.get_agent_assistant().toggle_agent_mode(enabled) + return jsonify({ + "success": success, + "message": f"Agent模式已{'启用' if enabled else '禁用'}" + }) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@agent_bp.route('/monitoring/start', methods=['POST']) +def start_agent_monitoring(): + """启动Agent监控""" + try: + from src.web.service_manager import service_manager + success = service_manager.get_agent_assistant().start_proactive_monitoring() + return jsonify({ + "success": success, + "message": "Agent监控已启动" if success else "启动失败" + }) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@agent_bp.route('/monitoring/stop', methods=['POST']) +def stop_agent_monitoring(): + """停止Agent监控""" + try: + from src.web.service_manager import service_manager + success = service_manager.get_agent_assistant().stop_proactive_monitoring() + return jsonify({ + "success": success, + "message": "Agent监控已停止" if success else "停止失败" + }) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@agent_bp.route('/proactive-monitoring', methods=['POST']) +def proactive_monitoring(): + """主动监控检查""" + try: + from src.web.service_manager import service_manager + result = service_manager.get_agent_assistant().run_proactive_monitoring() + return jsonify(result) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@agent_bp.route('/intelligent-analysis', methods=['POST']) +def intelligent_analysis(): + """智能分析""" + try: + from src.web.service_manager import service_manager + analysis = service_manager.get_agent_assistant().run_intelligent_analysis() + return jsonify({"success": True, "analysis": analysis}) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@agent_bp.route('/chat', methods=['POST']) +def agent_chat(): + """Agent对话接口""" + try: + from src.web.service_manager import service_manager + data = request.get_json() + message = data.get('message', '') + context = data.get('context', {}) + + if not message: + return jsonify({"error": "消息不能为空"}), 400 + + # 使用Agent助手处理消息 + agent_assistant = service_manager.get_agent_assistant() + + # 模拟Agent处理(实际应该调用真正的Agent处理逻辑) + import asyncio + result = asyncio.run(agent_assistant.process_message_agent( + message=message, + user_id=context.get('user_id', 'admin'), + work_order_id=None, + enable_proactive=True + )) + + return jsonify({ + "success": True, + "response": result.get('response', 'Agent已处理您的请求'), + "actions": result.get('actions', []), + "status": result.get('status', 'completed') + }) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@agent_bp.route('/tools/stats') +def get_agent_tools_stats(): + """获取Agent工具统计""" + try: + from src.web.service_manager import service_manager + agent_assistant = service_manager.get_agent_assistant() + tools = agent_assistant.agent_core.tool_manager.get_available_tools() + performance = agent_assistant.agent_core.tool_manager.get_tool_performance_report() + return jsonify({ + "success": True, + "tools": tools, + "performance": performance + }) + except Exception as e: + # 返回默认工具列表,避免500错误 + return jsonify({ + "success": False, + "tools": [], + "performance": {}, + "error": "工具统计暂时不可用" + }) + + +@agent_bp.route('/tools/execute', methods=['POST']) +def execute_agent_tool(): + """执行指定的Agent工具""" + try: + from src.web.service_manager import service_manager + data = request.get_json() or {} + tool_name = data.get('tool') or data.get('name') + parameters = data.get('parameters') or {} + if not tool_name: + return jsonify({"error": "缺少工具名称tool"}), 400 + + import asyncio + result = asyncio.run(service_manager.get_agent_assistant().agent_core.tool_manager.execute_tool(tool_name, parameters)) + return jsonify(result) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@agent_bp.route('/tools/register', methods=['POST']) +def register_custom_tool(): + """注册自定义工具(仅登记元数据,函数为占位符)""" + try: + from src.web.service_manager import service_manager + data = request.get_json() or {} + name = data.get('name') + description = data.get('description', '') + if not name: + return jsonify({"error": "缺少工具名称"}), 400 + + def _placeholder_tool(**kwargs): + return {"message": f"自定义工具 {name} 已登记(占位),当前不可执行", "params": kwargs} + + service_manager.get_agent_assistant().agent_core.tool_manager.register_tool( + name, + _placeholder_tool, + metadata={"description": description, "custom": True} + ) + return jsonify({"success": True, "message": "工具已注册"}) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@agent_bp.route('/tools/unregister/', methods=['DELETE']) +def unregister_custom_tool(name): + """注销自定义工具""" + try: + from src.web.service_manager import service_manager + success = service_manager.get_agent_assistant().agent_core.tool_manager.unregister_tool(name) + return jsonify({"success": success}) + except Exception as e: + return jsonify({"error": str(e)}), 500 diff --git a/src/web/blueprints/analytics.py b/src/web/blueprints/analytics.py new file mode 100644 index 0000000..3e0447f --- /dev/null +++ b/src/web/blueprints/analytics.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +""" +分析相关API蓝图 +处理数据分析、报告生成等功能 +""" + +from flask import Blueprint, request, jsonify, send_file +import os + +analytics_bp = Blueprint('analytics', __name__, url_prefix='/api/analytics') + + +@analytics_bp.route('/export') +def export_analytics(): + """导出分析报告""" + try: + from src.web.service_manager import service_manager + from src.core.query_optimizer import query_optimizer + from openpyxl import Workbook + from openpyxl.styles import Font + + # 生成Excel报告(使用数据库真实数据) + analytics = query_optimizer.get_analytics_optimized(30) + + # 创建工作簿 + wb = Workbook() + ws = wb.active + ws.title = "分析报告" + + # 添加标题 + ws['A1'] = 'TSP智能助手分析报告' + ws['A1'].font = Font(size=16, bold=True) + + # 添加工单统计 + ws['A3'] = '工单统计' + ws['A3'].font = Font(bold=True) + ws['A4'] = '总工单数' + ws['B4'] = analytics['workorders']['total'] + ws['A5'] = '待处理' + ws['B5'] = analytics['workorders']['open'] + ws['A6'] = '已解决' + ws['B6'] = analytics['workorders']['resolved'] + + # 保存文件 + report_path = 'uploads/analytics_report.xlsx' + os.makedirs('uploads', exist_ok=True) + wb.save(report_path) + + return send_file(report_path, as_attachment=True, download_name='analytics_report.xlsx') + + except Exception as e: + return jsonify({"error": str(e)}), 500 diff --git a/src/web/blueprints/auth.py b/src/web/blueprints/auth.py new file mode 100644 index 0000000..670cd4a --- /dev/null +++ b/src/web/blueprints/auth.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- +""" +认证蓝图 +处理用户登录、注册、注销等功能 +""" + +from flask import Blueprint, request, jsonify, session, redirect, url_for +from src.core.auth_manager import auth_manager +from src.web.error_handlers import handle_api_errors, create_error_response, create_success_response + +auth_bp = Blueprint('auth', __name__, url_prefix='/api/auth') + + +@auth_bp.route('/login', methods=['POST']) +@handle_api_errors +def login(): + """用户登录""" + data = request.get_json() + + if not data or not data.get('username') or not data.get('password'): + return jsonify({"success": False, "message": "用户名和密码不能为空"}), 400 + + username = data['username'] + password = data['password'] + remember = data.get('remember', False) + + # 认证用户 + user_data = auth_manager.authenticate_user(username, password) + + if user_data: + # 生成token + token = auth_manager.generate_token(user_data) + + # 存储到session + session['user_id'] = user_data['id'] + session['username'] = user_data['username'] + session['user_info'] = user_data + session['token'] = token + + if remember: + session.permanent = True + + # 构建响应 + response_data = { + "success": True, + "message": "登录成功", + "user": { + "id": user_data['id'], + "username": user_data['username'], + "name": user_data['name'], + "email": user_data['email'], + "role": user_data['role'] + }, + "token": token + } + + return jsonify(response_data) + else: + return jsonify({"success": False, "message": "用户名或密码错误"}), 401 + + +@auth_bp.route('/logout', methods=['POST']) +@handle_api_errors +def logout(): + """用户注销""" + # 清除session + session.clear() + + return jsonify(create_success_response(message="注销成功")) + + +@auth_bp.route('/status') +@handle_api_errors +def get_auth_status(): + """获取认证状态""" + if 'user_id' in session and 'user_info' in session: + return jsonify({ + "authenticated": True, + "user": session['user_info'], + "token": session.get('token') + }) + else: + return jsonify({ + "authenticated": False, + "user": None, + "token": None + }) + + +@auth_bp.route('/register', methods=['POST']) +@handle_api_errors +def register(): + """用户注册(仅管理员可用)""" + # 检查当前用户是否为管理员 + if not session.get('user_info') or session['user_info'].get('role') != 'admin': + return create_error_response("权限不足", 403) + + data = request.get_json() + + required_fields = ['username', 'password', 'name'] + if not all(data.get(field) for field in required_fields): + return create_error_response("缺少必要字段", 400) + + user = auth_manager.create_user( + username=data['username'], + password=data['password'], + name=data['name'], + email=data.get('email'), + role=data.get('role', 'user') + ) + + if not user: + return create_error_response("用户创建失败,用户名可能已存在", 400) + + return jsonify(create_success_response( + data={ + "id": user.id, + "username": user.username, + "name": user.name, + "email": user.email, + "role": user.role + }, + message="用户创建成功" + )) + + +@auth_bp.route('/user/profile') +@handle_api_errors +def get_user_profile(): + """获取用户信息""" + if 'user_info' not in session: + return create_error_response("未登录", 401) + + return jsonify(create_success_response(data=session['user_info'])) + + +@auth_bp.route('/user/profile', methods=['PUT']) +@handle_api_errors +def update_user_profile(): + """更新用户信息""" + if 'user_info' not in session: + return create_error_response("未登录", 401) + + data = request.get_json() + user_id = session['user_info']['id'] + + # 这里应该实现用户信息的更新逻辑 + # 暂时只返回成功响应 + + return jsonify(create_success_response(message="用户信息更新成功")) diff --git a/src/web/blueprints/knowledge.py b/src/web/blueprints/knowledge.py index 9b9a554..5f64775 100644 --- a/src/web/blueprints/knowledge.py +++ b/src/web/blueprints/knowledge.py @@ -14,10 +14,9 @@ from src.web.error_handlers import handle_api_errors, create_error_response, cre knowledge_bp = Blueprint('knowledge', __name__, url_prefix='/api/knowledge') def get_agent_assistant(): - """获取Agent助手实例()""" + """获取Agent助手实例(懒加载)""" global _agent_assistant if '_agent_assistant' not in globals(): - from src.agent_assistant import TSPAgentAssistant _agent_assistant = TSPAgentAssistant() return _agent_assistant diff --git a/src/web/blueprints/test.py b/src/web/blueprints/test.py new file mode 100644 index 0000000..88e0b30 --- /dev/null +++ b/src/web/blueprints/test.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +""" +API测试相关蓝图 +处理API连接测试、模型测试等功能 +""" + +from flask import Blueprint, request, jsonify + +test_bp = Blueprint('test', __name__, url_prefix='/api/test') + + +@test_bp.route('/connection', methods=['POST']) +def test_api_connection(): + """测试API连接""" + try: + data = request.get_json() + api_provider = data.get('api_provider', 'openai') + api_base_url = data.get('api_base_url', '') + api_key = data.get('api_key', '') + model_name = data.get('model_name', 'qwen-turbo') + + # 这里可以调用LLM客户端进行连接测试 + # 暂时返回模拟结果 + + return jsonify({ + "success": True, + "message": f"API连接测试成功 - {api_provider}", + "response_time": "150ms", + "model_status": "可用" + }) + except Exception as e: + return jsonify({"success": False, "error": str(e)}), 500 + + +@test_bp.route('/model', methods=['POST']) +def test_model_response(): + """测试模型回答""" + try: + data = request.get_json() + test_message = data.get('test_message', '你好,请简单介绍一下你自己') + + # 这里可以调用LLM客户端进行回答测试 + # 暂时返回模拟结果 + return jsonify({ + "success": True, + "test_message": test_message, + "response": "你好!我是TSP智能助手,基于大语言模型构建的智能客服系统。我可以帮助您解决车辆相关问题,提供技术支持和服务。", + "response_time": "1.2s", + "tokens_used": 45 + }) + except Exception as e: + return jsonify({"success": False, "error": str(e)}), 500 diff --git a/src/web/blueprints/vehicle.py b/src/web/blueprints/vehicle.py new file mode 100644 index 0000000..7ca7687 --- /dev/null +++ b/src/web/blueprints/vehicle.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +""" +车辆数据相关API蓝图 +处理车辆数据查询、添加、监控等功能 +""" + +from flask import Blueprint, request, jsonify + +vehicle_bp = Blueprint('vehicle', __name__, url_prefix='/api/vehicle') + + +@vehicle_bp.route('/data') +def get_vehicle_data(): + """获取车辆数据""" + try: + from src.web.service_manager import service_manager + vehicle_id = request.args.get('vehicle_id') + vehicle_vin = request.args.get('vehicle_vin') + data_type = request.args.get('data_type') + limit = request.args.get('limit', 10, type=int) + + vehicle_mgr = service_manager.get_vehicle_manager() + if vehicle_vin: + data = vehicle_mgr.get_vehicle_data_by_vin(vehicle_vin, data_type, limit) + elif vehicle_id: + data = vehicle_mgr.get_vehicle_data(vehicle_id, data_type, limit) + else: + data = vehicle_mgr.search_vehicle_data(limit=limit) + + return jsonify(data) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@vehicle_bp.route('/data/vin//latest') +def get_latest_vehicle_data_by_vin(vehicle_vin): + """按VIN获取车辆最新数据""" + try: + from src.web.service_manager import service_manager + data = service_manager.get_vehicle_manager().get_latest_vehicle_data_by_vin(vehicle_vin) + return jsonify(data) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@vehicle_bp.route('/data//latest') +def get_latest_vehicle_data(vehicle_id): + """获取车辆最新数据""" + try: + from src.web.service_manager import service_manager + data = service_manager.get_vehicle_manager().get_latest_vehicle_data(vehicle_id) + return jsonify(data) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@vehicle_bp.route('/data//summary') +def get_vehicle_summary(vehicle_id): + """获取车辆数据摘要""" + try: + from src.web.service_manager import service_manager + summary = service_manager.get_vehicle_manager().get_vehicle_summary(vehicle_id) + return jsonify(summary) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@vehicle_bp.route('/data', methods=['POST']) +def add_vehicle_data(): + """添加车辆数据""" + try: + from src.web.service_manager import service_manager + data = request.get_json() + success = service_manager.get_vehicle_manager().add_vehicle_data( + vehicle_id=data['vehicle_id'], + data_type=data['data_type'], + data_value=data['data_value'], + vehicle_vin=data.get('vehicle_vin') + ) + return jsonify({"success": success, "message": "数据添加成功" if success else "添加失败"}) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + +@vehicle_bp.route('/init-sample-data', methods=['POST']) +def init_sample_vehicle_data(): + """初始化示例车辆数据""" + try: + from src.web.service_manager import service_manager + success = service_manager.get_vehicle_manager().add_sample_vehicle_data() + return jsonify({"success": success, "message": "示例数据初始化成功" if success else "初始化失败"}) + except Exception as e: + return jsonify({"error": str(e)}), 500 diff --git a/src/web/blueprints/workorders.py b/src/web/blueprints/workorders.py index 077c776..5b4f9f8 100644 --- a/src/web/blueprints/workorders.py +++ b/src/web/blueprints/workorders.py @@ -10,7 +10,6 @@ import logging import uuid import time from datetime import datetime -from typing import Optional from flask import Blueprint, request, jsonify, send_file from werkzeug.utils import secure_filename from sqlalchemy import text @@ -26,13 +25,13 @@ class SimpleAIAccuracyConfig: self.manual_review_threshold = 0.80 self.ai_suggestion_confidence = 0.95 self.human_resolution_confidence = 0.90 - + def should_auto_approve(self, similarity: float) -> bool: return similarity >= self.auto_approve_threshold - + def should_use_human_resolution(self, similarity: float) -> bool: return similarity < self.use_human_resolution_threshold - + def get_confidence_score(self, similarity: float, use_human: bool = False) -> float: if use_human: return self.human_resolution_confidence @@ -41,83 +40,12 @@ class SimpleAIAccuracyConfig: from src.main import TSPAssistant from src.core.database import db_manager -from src.core.models import WorkOrder, Conversation, WorkOrderSuggestion, KnowledgeEntry, WorkOrderProcessHistory +from src.core.models import WorkOrder, Conversation, WorkOrderSuggestion, KnowledgeEntry from src.core.query_optimizer import query_optimizer from src.web.service_manager import service_manager -from src.core.workorder_permissions import ( - WorkOrderPermissionManager, WorkOrderDispatchManager, - UserRole, WorkOrderModule -) workorders_bp = Blueprint('workorders', __name__, url_prefix='/api/workorders') -def get_current_user_role() -> UserRole: - """获取当前用户角色(临时实现,实际需要集成认证系统)""" - # TODO: 从session或token中获取用户信息 - # 在没有认证系统之前,默认返回ADMIN以便可以查看所有工单 - # 实际实现时需要从认证系统获取真实角色 - role_str = request.headers.get('X-User-Role', 'admin') # 临时改为admin,避免VIEWER无法查看数据 - try: - return UserRole(role_str) - except ValueError: - return UserRole.ADMIN # 临时返回ADMIN,避免VIEWER无法查看数据 - -def get_current_user_name() -> str: - """获取当前用户名(临时实现,实际需要集成认证系统)""" - # TODO: 从session或token中获取用户信息 - return request.headers.get('X-User-Name', 'anonymous') - -def add_process_history( - workorder_id: int, - processor_name: str, - process_content: str, - action_type: str, - processor_role: Optional[str] = None, - processor_region: Optional[str] = None, - previous_status: Optional[str] = None, - new_status: Optional[str] = None, - assigned_module: Optional[str] = None -) -> WorkOrderProcessHistory: - """ - 添加工单处理过程记录 - - Args: - workorder_id: 工单ID - processor_name: 处理人员姓名 - process_content: 处理内容 - action_type: 操作类型(dispatch、process、close、reassign等) - processor_role: 处理人员角色 - processor_region: 处理人员区域 - previous_status: 处理前的状态 - new_status: 处理后的状态 - assigned_module: 分配的模块 - - Returns: - 创建的处理记录对象 - """ - try: - with db_manager.get_session() as session: - history = WorkOrderProcessHistory( - work_order_id=workorder_id, - processor_name=processor_name, - processor_role=processor_role, - processor_region=processor_region, - process_content=process_content, - action_type=action_type, - previous_status=previous_status, - new_status=new_status, - assigned_module=assigned_module, - process_time=datetime.now() - ) - session.add(history) - session.commit() - session.refresh(history) - logger.info(f"工单 {workorder_id} 添加处理记录: {action_type} by {processor_name}") - return history - except Exception as e: - logger.error(f"添加处理记录失败: {e}") - raise - # 移除get_assistant函数,使用service_manager def _ensure_workorder_template_file() -> str: @@ -125,14 +53,14 @@ def _ensure_workorder_template_file() -> str: # 获取项目根目录 current_dir = os.path.dirname(os.path.abspath(__file__)) project_root = os.path.abspath(os.path.join(current_dir, '..', '..', '..')) - + # 模板文件路径(项目根目录下的uploads) template_path = os.path.join(project_root, 'uploads', 'workorder_template.xlsx') - + # 确保目录存在 uploads_dir = os.path.join(project_root, 'uploads') os.makedirs(uploads_dir, exist_ok=True) - + if not os.path.exists(template_path): # 尝试从其他可能的位置复制模板 possible_locations = [ @@ -140,7 +68,7 @@ def _ensure_workorder_template_file() -> str: os.path.join(current_dir, 'uploads', 'workorder_template.xlsx'), os.path.join(os.getcwd(), 'uploads', 'workorder_template.xlsx') ] - + source_found = False for source_path in possible_locations: if os.path.exists(source_path): @@ -151,7 +79,7 @@ def _ensure_workorder_template_file() -> str: break except Exception as e: logger.warning(f"复制模板文件失败: {e}") - + if not source_found: # 自动生成一个最小可用模板 try: @@ -163,66 +91,42 @@ def _ensure_workorder_template_file() -> str: logger.info(f"自动生成模板文件: {template_path}") except Exception as gen_err: raise FileNotFoundError('模板文件缺失且自动生成失败,请检查依赖:openpyxl/pandas') from gen_err - + return template_path @workorders_bp.route('') def get_workorders(): - """获取工单列表(分页,带权限过滤)""" + """获取工单列表(分页)""" try: - # 获取当前用户角色和权限 - current_role = get_current_user_role() - # 获取分页参数 page = request.args.get('page', 1, type=int) per_page = request.args.get('per_page', 10, type=int) status_filter = request.args.get('status', '') priority_filter = request.args.get('priority', '') - module_filter = request.args.get('module', '') # 模块过滤 - + # 从数据库获取分页数据 from src.core.database import db_manager from src.core.models import WorkOrder - + with db_manager.get_session() as session: # 构建查询 query = session.query(WorkOrder) - - # 权限过滤:业务方只能看到自己模块的工单 - if not WorkOrderPermissionManager.can_view_all_workorders(current_role): - # 获取用户可访问的模块 - accessible_modules = WorkOrderPermissionManager.get_accessible_modules(current_role) - if accessible_modules: - # 构建模块列表过滤条件 - module_names = [m.value for m in accessible_modules] - query = query.filter(WorkOrder.assigned_module.in_(module_names)) - else: - # 如果没有可访问的模块,返回空列表 - return jsonify({ - "workorders": [], - "total": 0, - "page": page, - "per_page": per_page, - "total_pages": 0 # 统一使用total_pages字段 - }) - + # 应用过滤器 if status_filter: query = query.filter(WorkOrder.status == status_filter) if priority_filter: query = query.filter(WorkOrder.priority == priority_filter) - if module_filter: - query = query.filter(WorkOrder.assigned_module == module_filter) - + # 按创建时间倒序排列 query = query.order_by(WorkOrder.created_at.desc()) - + # 计算总数 total = query.count() - + # 分页查询 workorders = query.offset((page - 1) * per_page).limit(per_page).all() - + # 转换为字典 workorders_data = [] for workorder in workorders: @@ -231,11 +135,6 @@ def get_workorders(): 'order_id': workorder.order_id, 'title': workorder.title, 'description': workorder.description, - 'assigned_module': workorder.assigned_module, - 'module_owner': workorder.module_owner, - 'dispatcher': workorder.dispatcher, - 'dispatch_time': workorder.dispatch_time.isoformat() if workorder.dispatch_time else None, - 'region': workorder.region, 'category': workorder.category, 'priority': workorder.priority, 'status': workorder.status, @@ -247,10 +146,10 @@ def get_workorders(): 'updated_at': workorder.updated_at.isoformat() if workorder.updated_at else None, 'date_of_close': workorder.date_of_close.isoformat() if workorder.date_of_close else None }) - + # 计算分页信息 total_pages = (total + per_page - 1) // per_page - + return jsonify({ 'workorders': workorders_data, 'page': page, @@ -258,13 +157,13 @@ def get_workorders(): 'total': total, 'total_pages': total_pages }) - + except Exception as e: return jsonify({"error": str(e)}), 500 @workorders_bp.route('', methods=['POST']) def create_workorder(): - """创建工单(初始状态为待分发)""" + """创建工单""" try: data = request.get_json() result = service_manager.get_assistant().create_work_order( @@ -273,72 +172,23 @@ def create_workorder(): category=data['category'], priority=data['priority'] ) - - # 获取当前用户信息(用于记录创建人) - current_user = get_current_user_name() - current_role = get_current_user_role() - - # 创建工单后,设置为待分发状态(未分配模块) - if result and 'id' in result: - workorder_id = result.get('id') - with db_manager.get_session() as session: - workorder = session.query(WorkOrder).filter(WorkOrder.id == workorder_id).first() - if workorder: - # 初始状态为待分发 - workorder.assigned_module = WorkOrderModule.UNASSIGNED.value - workorder.status = "pending" # 待处理/待分发 - workorder.created_by = current_user # 记录创建人 - session.commit() - - # 记录创建工单的处理历史 - processor_region = "overseas" if current_role == UserRole.OVERSEAS_OPS else "domestic" - add_process_history( - workorder_id=workorder_id, - processor_name=current_user, - process_content=f"工单已创建:{data.get('title', '')[:50]}", - action_type="create", - processor_role=current_role.value, - processor_region=processor_region, - previous_status=None, - new_status="pending" - ) - + # 清除工单相关缓存 from src.core.cache_manager import cache_manager cache_manager.clear() # 清除所有缓存 - + return jsonify({"success": True, "workorder": result}) except Exception as e: return jsonify({"error": str(e)}), 500 @workorders_bp.route('/') def get_workorder_details(workorder_id): - """获取工单详情(含数据库对话记录,带权限检查)""" + """获取工单详情(含数据库对话记录)""" try: - # 获取当前用户角色和权限 - current_role = get_current_user_role() - with db_manager.get_session() as session: w = session.query(WorkOrder).filter(WorkOrder.id == workorder_id).first() if not w: return jsonify({"error": "工单不存在"}), 404 - - # 权限检查:业务方只能访问自己模块的工单 - if not WorkOrderPermissionManager.can_view_all_workorders(current_role): - # 检查是否有权限访问该工单 - assigned_module_str = w.assigned_module - if not assigned_module_str or assigned_module_str == WorkOrderModule.UNASSIGNED.value: - # 未分配的工单,业务方不能访问 - return jsonify({"error": "无权访问该工单"}), 403 - - try: - assigned_module = WorkOrderModule(assigned_module_str) - accessible_modules = WorkOrderPermissionManager.get_accessible_modules(current_role) - if assigned_module not in accessible_modules: - return jsonify({"error": "无权访问该工单"}), 403 - except ValueError: - # 如果模块值无效,业务方不能访问 - return jsonify({"error": "无权访问该工单"}), 403 convs = session.query(Conversation).filter(Conversation.work_order_id == w.id).order_by(Conversation.timestamp.asc()).all() conv_list = [] for c in convs: @@ -348,27 +198,6 @@ def get_workorder_details(workorder_id): "assistant_response": c.assistant_response, "timestamp": c.timestamp.isoformat() if c.timestamp else None }) - - # 获取处理过程记录 - process_history_list = session.query(WorkOrderProcessHistory).filter( - WorkOrderProcessHistory.work_order_id == w.id - ).order_by(WorkOrderProcessHistory.process_time.asc()).all() - - process_history_data = [] - for ph in process_history_list: - process_history_data.append({ - "id": ph.id, - "processor_name": ph.processor_name, - "processor_role": ph.processor_role, - "processor_region": ph.processor_region, - "process_content": ph.process_content, - "action_type": ph.action_type, - "previous_status": ph.previous_status, - "new_status": ph.new_status, - "assigned_module": ph.assigned_module, - "process_time": ph.process_time.isoformat() if ph.process_time else None - }) - # 在会话内构建工单数据 workorder = { "id": w.id, @@ -382,13 +211,7 @@ def get_workorder_details(workorder_id): "updated_at": w.updated_at.isoformat() if w.updated_at else None, "resolution": w.resolution, "satisfaction_score": w.satisfaction_score, - "assigned_module": w.assigned_module, - "module_owner": w.module_owner, - "dispatcher": w.dispatcher, - "dispatch_time": w.dispatch_time.isoformat() if w.dispatch_time else None, - "region": w.region, - "conversations": conv_list, - "process_history": process_history_data # 处理过程记录 + "conversations": conv_list } return jsonify(workorder) except Exception as e: @@ -396,72 +219,29 @@ def get_workorder_details(workorder_id): @workorders_bp.route('/', methods=['PUT']) def update_workorder(workorder_id): - """更新工单(写入数据库,自动记录处理历史)""" + """更新工单(写入数据库)""" try: - # 获取当前用户信息 - current_user = get_current_user_name() - current_role = get_current_user_role() - data = request.get_json() if not data.get('title') or not data.get('description'): return jsonify({"error": "标题和描述不能为空"}), 400 - with db_manager.get_session() as session: w = session.query(WorkOrder).filter(WorkOrder.id == workorder_id).first() if not w: return jsonify({"error": "工单不存在"}), 404 - - # 记录更新前的状态 - previous_status = w.status - previous_priority = w.priority - - # 更新工单信息 w.title = data.get('title', w.title) w.description = data.get('description', w.description) w.category = data.get('category', w.category) w.priority = data.get('priority', w.priority) - new_status = data.get('status', w.status) - w.status = new_status + w.status = data.get('status', w.status) w.resolution = data.get('resolution', w.resolution) w.satisfaction_score = data.get('satisfaction_score', w.satisfaction_score) w.updated_at = datetime.now() - session.commit() - - # 如果状态或优先级发生变化,记录处理历史 - has_status_change = previous_status != new_status - has_priority_change = previous_priority != data.get('priority', w.priority) - - if has_status_change or has_priority_change: - # 构建处理内容 - change_items = [] - if has_status_change: - change_items.append(f"状态变更:{previous_status} → {new_status}") - if has_priority_change: - change_items.append(f"优先级变更:{previous_priority} → {data.get('priority', w.priority)}") - - process_content = ";".join(change_items) - if data.get('resolution'): - process_content += f";解决方案:{data.get('resolution', '')[:100]}" - - # 判断区域 - processor_region = "overseas" if current_role == UserRole.OVERSEAS_OPS else "domestic" - - add_process_history( - workorder_id=workorder_id, - processor_name=current_user, - process_content=process_content or "更新工单信息", - action_type="update", - processor_role=current_role.value, - processor_region=processor_region, - previous_status=previous_status, - new_status=new_status - ) - + # 清除工单相关缓存 from src.core.cache_manager import cache_manager cache_manager.clear() # 清除所有缓存 - + updated = { "id": w.id, "title": w.title, @@ -485,25 +265,25 @@ def delete_workorder(workorder_id): workorder = session.query(WorkOrder).filter(WorkOrder.id == workorder_id).first() if not workorder: return jsonify({"error": "工单不存在"}), 404 - + # 先删除所有相关的子记录(按外键依赖顺序) # 1. 删除工单建议记录 try: session.execute(text("DELETE FROM work_order_suggestions WHERE work_order_id = :id"), {"id": workorder_id}) except Exception as e: print(f"删除工单建议记录失败: {e}") - + # 2. 删除对话记录 session.query(Conversation).filter(Conversation.work_order_id == workorder_id).delete() - + # 3. 删除工单 session.delete(workorder) session.commit() - + # 清除工单相关缓存 from src.core.cache_manager import cache_manager cache_manager.clear() # 清除所有缓存 - + return jsonify({ "success": True, "message": "工单删除成功" @@ -511,6 +291,39 @@ def delete_workorder(workorder_id): except Exception as e: return jsonify({"error": str(e)}), 500 +@workorders_bp.route('/generate-ai-suggestion', methods=['POST']) +def generate_ai_suggestion(): + """通用AI建议生成API - 不需要先创建工单""" + try: + data = request.get_json() + if not data or 'tr_description' not in data: + return jsonify({"error": "缺少tr_description参数"}), 400 + + tr_description = data['tr_description'] + vin = data.get('vin') + process_history = data.get('process_history') + + # 使用AI建议服务生成建议 + from src.integrations.ai_suggestion_service import AISuggestionService + ai_service = AISuggestionService() + + suggestion = ai_service.generate_suggestion( + tr_description=tr_description, + process_history=process_history, + vin=vin + ) + + return jsonify({ + "success": True, + "suggestion": suggestion, + "message": "AI建议生成成功" + }) + + except Exception as e: + logger.error(f"AI建议生成失败: {e}") + return jsonify({"error": f"AI建议生成失败: {str(e)}"}), 500 + + @workorders_bp.route('//ai-suggestion', methods=['POST']) def generate_workorder_ai_suggestion(workorder_id): """根据工单描述与知识库生成AI建议草稿""" @@ -582,22 +395,22 @@ def save_workorder_human_resolution(workorder_id): except Exception: sim = 0.0 rec.ai_similarity = sim - + # 使用简化的配置 config = SimpleAIAccuracyConfig() - + # 自动审批条件 approved = config.should_auto_approve(sim) rec.approved = approved - + # 记录使用人工描述入库的标记(当AI准确率低于阈值时) use_human_resolution = config.should_use_human_resolution(sim) rec.use_human_resolution = use_human_resolution - + session.commit() return jsonify({ - "success": True, - "similarity": sim, + "success": True, + "similarity": sim, "approved": approved, "use_human_resolution": use_human_resolution }) @@ -612,14 +425,14 @@ def approve_workorder_to_knowledge(workorder_id): w = session.query(WorkOrder).filter(WorkOrder.id == workorder_id).first() if not w: return jsonify({"error": "工单不存在"}), 404 - + rec = session.query(WorkOrderSuggestion).filter(WorkOrderSuggestion.work_order_id == w.id).first() if not rec: return jsonify({"error": "未找到工单建议记录"}), 400 - + # 使用简化的配置 config = SimpleAIAccuracyConfig() - + # 确定使用哪个内容入库 if rec.use_human_resolution and rec.human_resolution: # AI准确率低于阈值,使用人工描述入库 @@ -635,7 +448,7 @@ def approve_workorder_to_knowledge(workorder_id): logger.info(f"工单 {workorder_id} 使用AI建议入库,相似度: {rec.ai_similarity:.4f}") else: return jsonify({"error": "未找到可入库的内容"}), 400 - + # 入库为知识条目 entry = KnowledgeEntry( question=w.title or (w.description[:20] if w.description else '工单问题'), @@ -649,9 +462,9 @@ def approve_workorder_to_knowledge(workorder_id): ) session.add(entry) session.commit() - + return jsonify({ - "success": True, + "success": True, "knowledge_id": entry.id, "used_content": "human_resolution" if rec.use_human_resolution else "ai_suggestion", "confidence_score": confidence_score @@ -667,25 +480,25 @@ def import_workorders(): # 检查是否有文件上传 if 'file' not in request.files: return jsonify({"error": "没有上传文件"}), 400 - + file = request.files['file'] if file.filename == '': return jsonify({"error": "没有选择文件"}), 400 - + if not file.filename.endswith(('.xlsx', '.xls')): return jsonify({"error": "只支持Excel文件(.xlsx, .xls)"}), 400 - + # 保存上传的文件 filename = secure_filename(file.filename) upload_path = os.path.join('uploads', filename) os.makedirs('uploads', exist_ok=True) file.save(upload_path) - + # 解析Excel文件 try: df = pd.read_excel(upload_path) imported_workorders = [] - + # 处理每一行数据 for index, row in df.iterrows(): # 根据Excel列名映射到工单字段 @@ -694,16 +507,16 @@ def import_workorders(): category = str(row.get('分类', row.get('category', '技术问题'))) priority = str(row.get('优先级', row.get('priority', 'medium'))) status = str(row.get('状态', row.get('status', 'open'))) - + # 验证必填字段 if not title or title.strip() == '': continue - + # 生成唯一的工单ID timestamp = int(time.time()) unique_id = str(uuid.uuid4())[:8] order_id = f"IMP_{timestamp}_{unique_id}" - + # 创建工单到数据库 try: with db_manager.get_session() as session: @@ -717,26 +530,26 @@ def import_workorders(): created_at=datetime.now(), updated_at=datetime.now() ) - + # 处理可选字段 if pd.notna(row.get('解决方案', row.get('resolution'))): workorder.resolution = str(row.get('解决方案', row.get('resolution'))) - + if pd.notna(row.get('满意度', row.get('satisfaction_score'))): try: workorder.satisfaction_score = int(row.get('满意度', row.get('satisfaction_score'))) except (ValueError, TypeError): workorder.satisfaction_score = None - + session.add(workorder) session.commit() - + logger.info(f"成功导入工单: {order_id} - {title}") - + except Exception as db_error: logger.error(f"导入工单到数据库失败: {db_error}") continue - + # 添加到返回列表 imported_workorders.append({ "id": workorder.id, @@ -751,23 +564,23 @@ def import_workorders(): "resolution": workorder.resolution, "satisfaction_score": workorder.satisfaction_score }) - + # 清理上传的文件 os.remove(upload_path) - + return jsonify({ "success": True, "message": f"成功导入 {len(imported_workorders)} 个工单", "imported_count": len(imported_workorders), "workorders": imported_workorders }) - + except Exception as e: # 清理上传的文件 if os.path.exists(upload_path): os.remove(upload_path) return jsonify({"error": f"解析Excel文件失败: {str(e)}"}), 400 - + except Exception as e: return jsonify({"error": str(e)}), 500 @@ -780,7 +593,7 @@ def download_import_template(): "success": True, "template_url": f"/uploads/workorder_template.xlsx" }) - + except Exception as e: return jsonify({"error": str(e)}), 500 @@ -789,256 +602,27 @@ def download_import_template_file(): """直接返回工单导入模板文件(下载)""" try: template_path = _ensure_workorder_template_file() - + # 检查文件是否存在 if not os.path.exists(template_path): logger.error(f"模板文件不存在: {template_path}") return jsonify({"error": "模板文件不存在"}), 404 - + # 检查文件大小 file_size = os.path.getsize(template_path) if file_size == 0: logger.error(f"模板文件为空: {template_path}") return jsonify({"error": "模板文件为空"}), 500 - + logger.info(f"准备下载模板文件: {template_path}, 大小: {file_size} bytes") - + try: # Flask>=2 使用 download_name return send_file(template_path, as_attachment=True, download_name='工单导入模板.xlsx', mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') except TypeError: # 兼容 Flask<2 的 attachment_filename return send_file(template_path, as_attachment=True, attachment_filename='工单导入模板.xlsx', mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') - + except Exception as e: logger.error(f"下载模板文件失败: {e}") return jsonify({"error": f"下载失败: {str(e)}"}), 500 - -@workorders_bp.route('//dispatch', methods=['POST']) -def dispatch_workorder(workorder_id): - """工单分发:运维将工单分配给业务模块""" - try: - # 获取当前用户角色和权限 - current_role = get_current_user_role() - current_user = get_current_user_name() - - # 检查分发权限 - if not WorkOrderPermissionManager.can_dispatch_workorder(current_role): - return jsonify({ - "success": False, - "error": "无权进行工单分发,只有属地运维和管理员可以分发工单" - }), 403 - - # 获取请求数据 - data = request.get_json() or {} - target_module_str = data.get('target_module', '') - - if not target_module_str: - return jsonify({"success": False, "error": "请指定目标模块"}), 400 - - # 验证模块 - try: - target_module = WorkOrderModule(target_module_str) - except ValueError: - return jsonify({"success": False, "error": f"无效的模块: {target_module_str}"}), 400 - - # 获取工单 - with db_manager.get_session() as session: - workorder = session.query(WorkOrder).filter(WorkOrder.id == workorder_id).first() - if not workorder: - return jsonify({"success": False, "error": "工单不存在"}), 404 - - # 执行分发 - module_owner = WorkOrderDispatchManager.get_module_owner(target_module) - - # 记录分发前的状态 - previous_status = workorder.status - - # 更新工单信息 - workorder.assigned_module = target_module.value - workorder.module_owner = module_owner - workorder.dispatcher = current_user - workorder.dispatch_time = datetime.now() - workorder.status = "assigned" # 更新状态为已分配 - - # 根据区域自动设置(可以从工单source或其他字段判断) - # 这里简化处理,可以根据实际需求调整 - if not workorder.region: - # 如果source包含特定关键词,可以判断区域 - source = workorder.source or "" - if any(keyword in source.lower() for keyword in ["overseas", "abroad", "海外"]): - workorder.region = "overseas" - else: - workorder.region = "domestic" - - session.commit() - - # 记录处理历史:工单分发 - processor_region = "overseas" if current_role == UserRole.OVERSEAS_OPS else "domestic" - add_process_history( - workorder_id=workorder_id, - processor_name=current_user, - process_content=f"工单已分发到{target_module.value}模块,业务接口人:{module_owner}", - action_type="dispatch", - processor_role=current_role.value, - processor_region=processor_region, - previous_status=previous_status, - new_status="assigned", - assigned_module=target_module.value - ) - - logger.info(f"工单 {workorder_id} 已分发到 {target_module.value} 模块,分发人: {current_user}") - - return jsonify({ - "success": True, - "message": f"工单已成功分发到{target_module.value}模块", - "workorder": { - "id": workorder.id, - "assigned_module": workorder.assigned_module, - "module_owner": workorder.module_owner, - "dispatcher": workorder.dispatcher, - "dispatch_time": workorder.dispatch_time.isoformat() if workorder.dispatch_time else None, - "status": workorder.status - } - }) - - except Exception as e: - logger.error(f"工单分发失败: {e}") - return jsonify({"success": False, "error": str(e)}), 500 - -@workorders_bp.route('//suggest-module', methods=['POST']) -def suggest_workorder_module(workorder_id): - """AI建议工单应该分配的模块""" - try: - with db_manager.get_session() as session: - workorder = session.query(WorkOrder).filter(WorkOrder.id == workorder_id).first() - if not workorder: - return jsonify({"success": False, "error": "工单不存在"}), 404 - - # 使用AI分析建议模块 - suggested_module = WorkOrderDispatchManager.suggest_module( - description=workorder.description or "", - title=workorder.title or "" - ) - - return jsonify({ - "success": True, - "suggested_module": suggested_module.value if suggested_module else None, - "module_owner": WorkOrderDispatchManager.get_module_owner(suggested_module) if suggested_module else None - }) - - except Exception as e: - logger.error(f"模块建议失败: {e}") - return jsonify({"success": False, "error": str(e)}), 500 - -@workorders_bp.route('/modules', methods=['GET']) -def get_available_modules(): - """获取所有可用的模块列表""" - try: - modules = [ - {"value": m.value, "name": m.name, "owner": WorkOrderDispatchManager.get_module_owner(m)} - for m in WorkOrderModule - if m != WorkOrderModule.UNASSIGNED - ] - return jsonify({"success": True, "modules": modules}) - except Exception as e: - return jsonify({"success": False, "error": str(e)}), 500 - -@workorders_bp.route('//process-history', methods=['GET']) -def get_workorder_process_history(workorder_id): - """获取工单处理过程记录""" - try: - with db_manager.get_session() as session: - workorder = session.query(WorkOrder).filter(WorkOrder.id == workorder_id).first() - if not workorder: - return jsonify({"error": "工单不存在"}), 404 - - # 获取处理历史 - history_list = session.query(WorkOrderProcessHistory).filter( - WorkOrderProcessHistory.work_order_id == workorder_id - ).order_by(WorkOrderProcessHistory.process_time.asc()).all() - - history_data = [] - for ph in history_list: - history_data.append({ - "id": ph.id, - "processor_name": ph.processor_name, - "processor_role": ph.processor_role, - "processor_region": ph.processor_region, - "process_content": ph.process_content, - "action_type": ph.action_type, - "previous_status": ph.previous_status, - "new_status": ph.new_status, - "assigned_module": ph.assigned_module, - "process_time": ph.process_time.isoformat() if ph.process_time else None - }) - - return jsonify({ - "success": True, - "workorder_id": workorder_id, - "process_history": history_data, - "total": len(history_data) - }) - except Exception as e: - logger.error(f"获取处理历史失败: {e}") - return jsonify({"success": False, "error": str(e)}), 500 - -@workorders_bp.route('//process-history', methods=['POST']) -def add_workorder_process_history(workorder_id): - """手动添加工单处理过程记录""" - try: - # 获取当前用户信息 - current_user = get_current_user_name() - current_role = get_current_user_role() - - data = request.get_json() or {} - process_content = data.get('process_content', '').strip() - - if not process_content: - return jsonify({"success": False, "error": "处理内容不能为空"}), 400 - - with db_manager.get_session() as session: - workorder = session.query(WorkOrder).filter(WorkOrder.id == workorder_id).first() - if not workorder: - return jsonify({"success": False, "error": "工单不存在"}), 404 - - # 获取可选参数 - action_type = data.get('action_type', 'process') # 默认操作类型为process - processor_role = data.get('processor_role', current_role.value) - processor_region = data.get('processor_region') - if not processor_region: - # 根据角色自动判断区域 - processor_region = "overseas" if current_role == UserRole.OVERSEAS_OPS else "domestic" - - previous_status = data.get('previous_status', workorder.status) - new_status = data.get('new_status', workorder.status) - assigned_module = data.get('assigned_module', workorder.assigned_module) - - # 添加处理记录 - history = add_process_history( - workorder_id=workorder_id, - processor_name=data.get('processor_name', current_user), - process_content=process_content, - action_type=action_type, - processor_role=processor_role, - processor_region=processor_region, - previous_status=previous_status, - new_status=new_status, - assigned_module=assigned_module - ) - - return jsonify({ - "success": True, - "message": "处理记录已添加", - "history": { - "id": history.id, - "processor_name": history.processor_name, - "processor_role": history.processor_role, - "process_content": history.process_content, - "action_type": history.action_type, - "process_time": history.process_time.isoformat() if history.process_time else None - } - }) - except Exception as e: - logger.error(f"添加处理记录失败: {e}") - return jsonify({"success": False, "error": str(e)}), 500 diff --git a/src/web/decorators.py b/src/web/decorators.py new file mode 100644 index 0000000..9e84ac0 --- /dev/null +++ b/src/web/decorators.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +""" +通用装饰器 +提供统一的错误处理、服务管理等装饰器 +""" + +from functools import wraps +from flask import jsonify +from src.web.service_manager import service_manager + + +def handle_errors(default_response=None): + """统一错误处理装饰器""" + def decorator(f): + @wraps(f) + def decorated_function(*args, **kwargs): + try: + return f(*args, **kwargs) + except Exception as e: + if default_response: + return default_response + return jsonify({"error": str(e)}), 500 + return decorated_function + return decorator + + +def with_service(service_name): + """服务注入装饰器""" + def decorator(f): + @wraps(f) + def decorated_function(*args, **kwargs): + # 将服务管理器注入到函数参数中 + kwargs['service_manager'] = service_manager + return f(*args, **kwargs) + return decorated_function + return decorator + + +def require_json(required_fields=None): + """JSON请求验证装饰器""" + def decorator(f): + @wraps(f) + def decorated_function(*args, **kwargs): + from flask import request + try: + data = request.get_json() + if data is None: + return jsonify({"error": "请求必须是JSON格式"}), 400 + + if required_fields: + missing_fields = [field for field in required_fields if field not in data] + if missing_fields: + return jsonify({"error": f"缺少必要字段: {', '.join(missing_fields)}"}), 400 + + kwargs['data'] = data + return f(*args, **kwargs) + except Exception as e: + return jsonify({"error": "JSON格式错误"}), 400 + return decorated_function + return decorator + + +def cache_response(timeout=300): + """响应缓存装饰器""" + def decorator(f): + @wraps(f) + def decorated_function(*args, **kwargs): + from flask import make_response + response = f(*args, **kwargs) + if isinstance(response, tuple): + response, status = response + else: + status = 200 + + if hasattr(response, 'headers'): + response.headers['Cache-Control'] = f'public, max-age={timeout}' + return response + return decorated_function + return decorator diff --git a/src/web/error_handlers.py b/src/web/error_handlers.py index d720caf..def6221 100644 --- a/src/web/error_handlers.py +++ b/src/web/error_handlers.py @@ -41,7 +41,7 @@ def handle_database_errors(func: Callable) -> Callable: return func(*args, **kwargs) except Exception as e: logger.error(f"数据库错误 {func.__name__}: {e}") - return jsonify({"error": "数据库操作失败"}), 500 + return jsonify({"error": f"数据库操作失败: {str(e)}"}), 500 return wrapper diff --git a/src/web/service_manager.py b/src/web/service_manager.py index 5de11ba..84d552c 100644 --- a/src/web/service_manager.py +++ b/src/web/service_manager.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- """ 服务管理器 +统一管理各种服务的懒加载实例 """ from typing import Optional, Dict, Any @@ -10,14 +11,17 @@ logger = logging.getLogger(__name__) class ServiceManager: + """服务管理器 - 统一管理各种服务的懒加载实例""" + def __init__(self): self._services: Dict[str, Any] = {} def get_service(self, service_name: str, factory_func): - """获取服务实例""" + """获取服务实例(懒加载)""" if service_name not in self._services: try: self._services[service_name] = factory_func() + logger.info(f"服务 {service_name} 已初始化") except Exception as e: logger.error(f"初始化服务 {service_name} 失败: {e}") raise @@ -55,11 +59,12 @@ class ServiceManager: """清除指定服务实例""" if service_name in self._services: del self._services[service_name] + logger.info(f"服务 {service_name} 已清除") def clear_all_services(self): """清除所有服务实例""" self._services.clear() - + logger.info("所有服务实例已清除") # 全局服务管理器实例 diff --git a/src/web/static/css/components.css b/src/web/static/css/components.css new file mode 100644 index 0000000..8c53f4f --- /dev/null +++ b/src/web/static/css/components.css @@ -0,0 +1,519 @@ +/* 组件样式 */ + +/* 按钮样式增强 */ +.btn { + font-weight: 500; + transition: var(--transition); + border: none; + padding: 0.5rem 1.25rem; +} + +.btn:hover { + transform: translateY(-2px); + box-shadow: var(--shadow-md); +} + +.btn-icon { + padding: 0.5rem; + line-height: 1; +} + +/* 卡片样式增强 */ +.card { + border: none; + border-radius: var(--border-radius-lg); + box-shadow: var(--shadow-sm); + transition: var(--transition); +} + +.card:hover { + box-shadow: var(--shadow-md); + transform: translateY(-2px); +} + +.card-header { + background: transparent; + border-bottom: 1px solid var(--border-light); + padding: var(--spacing-lg); + font-weight: 600; +} + +/* 统计卡片 */ +.stat-card { + background: linear-gradient(135deg, var(--primary-color), var(--primary-dark)); + color: var(--text-white); + border-radius: var(--border-radius-lg); + padding: var(--spacing-lg); + position: relative; + overflow: hidden; +} + +.stat-card::before { + content: ''; + position: absolute; + top: 0; + right: 0; + width: 100px; + height: 100px; + background: rgba(255,255,255,0.1); + border-radius: 50%; + transform: translate(30px, -30px); +} + +.stat-card.success { + background: linear-gradient(135deg, var(--success-color), #1e7e34); +} + +.stat-card.warning { + background: linear-gradient(135deg, var(--warning-color), #e0a800); +} + +.stat-card.danger { + background: linear-gradient(135deg, var(--danger-color), #bd2130); +} + +.stat-card.info { + background: linear-gradient(135deg, var(--info-color), #138496); +} + +.stat-number { + font-size: 2.5rem; + font-weight: bold; + line-height: 1; + margin-bottom: 0.5rem; +} + +.stat-label { + font-size: var(--font-size-sm); + opacity: 0.9; +} + +/* 数据表格 */ +.data-table { + background: var(--bg-primary); + border-radius: var(--border-radius); + overflow: hidden; +} + +.data-table table { + margin-bottom: 0; +} + +.data-table th { + background: var(--bg-secondary); + border-bottom: 2px solid var(--border-color); + font-weight: 600; + text-transform: uppercase; + font-size: var(--font-size-sm); + padding: var(--spacing); +} + +.data-table td { + padding: var(--spacing); + vertical-align: middle; +} + +.data-table tbody tr:hover { + background: var(--bg-secondary); +} + +/* 表格工具栏 */ +.table-toolbar { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: var(--spacing); + flex-wrap: wrap; + gap: var(--spacing); +} + +.table-search { + position: relative; + flex: 1; + max-width: 300px; +} + +.table-search input { + padding-left: 2.5rem; +} + +.table-search i { + position: absolute; + left: 0.75rem; + top: 50%; + transform: translateY(-50%); + color: var(--text-muted); +} + +/* 分页 */ +.pagination { + margin-bottom: 0; +} + +.pagination .page-link { + border: none; + color: var(--primary-color); + padding: 0.5rem 0.75rem; +} + +.pagination .page-item.active .page-link { + background: var(--primary-color); + border-color: var(--primary-color); +} + +/* 模态框增强 */ +.modal-content { + border: none; + border-radius: var(--border-radius-lg); + box-shadow: var(--shadow-lg); +} + +.modal-header { + border-bottom: 1px solid var(--border-light); + padding: var(--spacing-lg); +} + +.modal-footer { + border-top: 1px solid var(--border-light); + padding: var(--spacing-lg); +} + +/* 表单样式 */ +.form-label { + font-weight: 500; + margin-bottom: 0.5rem; + color: var(--text-primary); +} + +.form-control, .form-select { + border: 1px solid var(--border-color); + border-radius: var(--border-radius); + padding: 0.75rem; + transition: var(--transition-fast); +} + +.form-control:focus, .form-select:focus { + border-color: var(--primary-color); + box-shadow: 0 0 0 0.2rem rgba(0,123,255,0.25); +} + +/* 徽章 */ +.badge { + font-weight: 500; + padding: 0.375em 0.75em; +} + +/* 进度条 */ +.progress { + height: 8px; + border-radius: 4px; + background: var(--bg-light); +} + +.progress-bar { + border-radius: 4px; +} + +/* Toast 通知 */ +.toast-container { + position: fixed; + top: var(--navbar-height); + right: var(--spacing); + z-index: var(--z-tooltip); +} + +.toast { + min-width: 300px; + border: none; + box-shadow: var(--shadow-md); + margin-bottom: var(--spacing); +} + +.toast.success { + background: var(--success-color); + color: var(--text-white); +} + +.toast.error { + background: var(--danger-color); + color: var(--text-white); +} + +.toast.warning { + background: var(--warning-color); + color: var(--text-primary); +} + +.toast.info { + background: var(--info-color); + color: var(--text-white); +} + +/* 加载动画 */ +.spinner { + display: inline-block; + width: 2rem; + height: 2rem; + border: 3px solid var(--border-light); + border-top-color: var(--primary-color); + border-radius: 50%; + animation: spin 0.8s linear infinite; +} + +@keyframes spin { + to { transform: rotate(360deg); } +} + +/* 骨架屏 */ +.skeleton { + background: linear-gradient(90deg, var(--bg-light) 25%, var(--border-light) 50%, var(--bg-light) 75%); + background-size: 200% 100%; + animation: loading 1.5s infinite; +} + +@keyframes loading { + 0% { background-position: 200% 0; } + 100% { background-position: -200% 0; } +} + +/* 空状态 */ +.empty-state { + text-align: center; + padding: var(--spacing-xl); + color: var(--text-muted); +} + +.empty-state i { + font-size: 4rem; + margin-bottom: var(--spacing); + opacity: 0.5; +} + +/* 状态指示器 */ +.status-indicator { + display: inline-flex; + align-items: center; + gap: 0.5rem; + font-size: var(--font-size-sm); +} + +.status-indicator::before { + content: ''; + width: 8px; + height: 8px; + border-radius: 50%; + background: currentColor; +} + +.status-indicator.online { + color: var(--success-color); +} + +.status-indicator.offline { + color: var(--danger-color); +} + +.status-indicator.pending { + color: var(--warning-color); +} + +/* 标签页 */ +.nav-tabs { + border-bottom: 2px solid var(--border-light); +} + +.nav-tabs .nav-link { + border: none; + color: var(--text-secondary); + padding: var(--spacing) var(--spacing-lg); + transition: var(--transition-fast); +} + +.nav-tabs .nav-link:hover { + color: var(--primary-color); + border: none; +} + +.nav-tabs .nav-link.active { + color: var(--primary-color); + background: transparent; + border: none; + border-bottom: 2px solid var(--primary-color); +} + +/* 折叠/展开 */ +.collapsible { + cursor: pointer; + user-select: none; +} + +.collapsible-icon { + transition: transform 0.3s ease; +} + +.collapsible.collapsed .collapsible-icon { + transform: rotate(-90deg); +} + +/* 代码块 */ +.code-block { + background: var(--bg-dark); + color: var(--text-white); + padding: var(--spacing); + border-radius: var(--border-radius); + overflow-x: auto; + font-family: 'Courier New', monospace; + font-size: var(--font-size-sm); +} + +/* 时间线 */ +.timeline { + position: relative; + padding-left: 2rem; +} + +.timeline::before { + content: ''; + position: absolute; + left: 0.5rem; + top: 0; + bottom: 0; + width: 2px; + background: var(--border-color); +} + +.timeline-item { + position: relative; + margin-bottom: var(--spacing-lg); +} + +.timeline-item::before { + content: ''; + position: absolute; + left: -1.5rem; + top: 0.5rem; + width: 10px; + height: 10px; + border-radius: 50%; + background: var(--primary-color); + border: 2px solid var(--bg-primary); +} + +/* 响应式调整 */ +@media (max-width: 768px) { + .table-toolbar { + flex-direction: column; + align-items: stretch; + } + + .table-search { + max-width: 100%; + } + + .stat-number { + font-size: 2rem; + } + + .toast-container { + left: var(--spacing); + right: var(--spacing); + } + + .toast { + min-width: auto; + } +} + +/* 导航栏样式 */ +.navbar { + height: var(--navbar-height); + background: var(--bg-primary); + border-bottom: 1px solid var(--border-light); + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 var(--spacing-lg); + position: relative; + z-index: var(--z-sticky); +} + +.navbar-brand { + display: flex; + align-items: center; + gap: var(--spacing-sm); + font-size: 1.25rem; + font-weight: 700; + color: var(--primary-color); + text-decoration: none; +} + +.navbar-brand i { + font-size: 1.5rem; +} + +.navbar-toggler { + display: none; + background: none; + border: none; + color: var(--text-secondary); + font-size: 1.25rem; + padding: var(--spacing-sm); + border-radius: var(--border-radius); + transition: var(--transition); + cursor: pointer; +} + +.navbar-toggler:hover { + background: var(--bg-hover); + color: var(--text-primary); +} + +.navbar-nav { + display: flex; + align-items: center; + list-style: none; + margin: 0; + padding: 0; + gap: var(--spacing); +} + +.nav-item { + position: relative; +} + +.nav-link { + display: flex; + align-items: center; + gap: var(--spacing-xs); + padding: var(--spacing-sm) var(--spacing); + color: var(--text-secondary); + text-decoration: none; + border-radius: var(--border-radius); + transition: var(--transition); + font-weight: 500; +} + +.nav-link:hover { + color: var(--text-primary); + background: var(--bg-hover); +} + +.nav-link i { + font-size: 1rem; +} + +/* 响应式导航栏 */ +@media (max-width: 768px) { + .navbar-toggler { + display: block; + order: -1; + } + + .navbar-brand span { + display: none; + } + + .navbar-nav { + display: none; + } +} \ No newline at end of file diff --git a/src/web/static/css/layout.css b/src/web/static/css/layout.css new file mode 100644 index 0000000..f80f4da --- /dev/null +++ b/src/web/static/css/layout.css @@ -0,0 +1,590 @@ +/* 布局样式 */ + +/* 全局样式 */ +* { + box-sizing: border-box; +} + +html, body { + height: 100%; + margin: 0; + padding: 0; + overflow-x: hidden; +} + +body { + font-family: var(--font-family); + font-size: var(--font-size); + line-height: 1.6; + color: var(--text-primary); + background: var(--bg-secondary); +} + +/* 应用容器 */ +.app-container { + display: flex; + min-height: 100vh; + position: relative; +} + +/* 主要内容区域 */ +.main-content { + flex: 1; + display: flex; + flex-direction: column; + margin-left: var(--sidebar-width); + transition: margin-left 0.3s ease; +} + +.sidebar.collapsed + .main-content { + margin-left: var(--sidebar-collapsed-width); +} + +/* 页面容器 */ +.page-container { + flex: 1; + display: flex; + flex-direction: column; + min-height: 0; /* 防止flex item超出容器 */ +} + +/* 页面头部统一样式 */ +.page-header { + background: var(--bg-primary); + border-bottom: 1px solid var(--border-light); + padding: var(--spacing-lg) var(--spacing-xl); + display: flex; + justify-content: space-between; + align-items: center; + flex-shrink: 0; +} + +.page-title { + font-size: 1.75rem; + font-weight: 600; + color: var(--text-primary); + margin: 0; +} + +.page-subtitle { + font-size: var(--font-size-sm); + color: var(--text-secondary); + margin: var(--spacing-xs) 0 0 0; +} + +.page-actions { + display: flex; + gap: var(--spacing); + align-items: center; +} + +/* 页面内容区域 */ +.page-content { + flex: 1; + padding: var(--spacing-xl); + overflow-y: auto; + min-height: 0; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .main-content { + margin-left: 0; + } + + .sidebar { + transform: translateX(-100%); + } + + .sidebar.open { + transform: translateX(0); + } + + .page-header { + padding: var(--spacing) var(--spacing-lg); + flex-direction: column; + align-items: flex-start; + gap: var(--spacing); + } + + .page-title { + font-size: 1.5rem; + } + + .page-content { + padding: var(--spacing-lg); + } +} + +@media (max-width: 576px) { + .page-header { + padding: var(--spacing-sm) var(--spacing); + } + + .page-content { + padding: var(--spacing); + } +} + +/* 侧边栏 */ +.sidebar { + width: var(--sidebar-width); + background: var(--bg-dark); + color: var(--text-white); + transition: all 0.3s ease; + position: fixed; + top: 0; + left: 0; + bottom: 0; + z-index: var(--z-fixed); + overflow-x: hidden; + overflow-y: auto; + box-shadow: var(--shadow-lg); +} + +.sidebar.collapsed { + width: var(--sidebar-collapsed-width); +} + +/* 移动端侧边栏遮罩 */ +.sidebar-overlay { + display: none; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.5); + z-index: calc(var(--z-fixed) - 1); +} + +.sidebar-overlay.show { + display: block; +} + +.sidebar-header { + padding: var(--spacing-lg); + border-bottom: 1px solid rgba(255,255,255,0.1); + display: flex; + align-items: center; + gap: var(--spacing); +} + +.sidebar-logo { + font-size: 1.25rem; + font-weight: 700; + color: var(--text-white); + text-decoration: none; + white-space: nowrap; +} + +.sidebar.collapsed .sidebar-logo span { + display: none; +} + +.sidebar-nav { + padding: var(--spacing) 0; + list-style: none; + margin: 0; +} + +.sidebar-nav-item { + display: flex; + align-items: center; + padding: 0.875rem var(--spacing-lg); + color: rgba(255,255,255,0.8); + text-decoration: none; + transition: all 0.2s ease; + position: relative; + white-space: nowrap; + border-radius: 0 var(--border-radius) var(--border-radius) 0; + margin: 0 var(--spacing-sm); + font-weight: 500; +} + +.sidebar-nav-item:hover { + color: var(--text-white); + background: rgba(255,255,255,0.1); + transform: translateX(4px); +} + +.sidebar-nav-item.active { + color: var(--text-white); + background: linear-gradient(90deg, var(--primary-color), var(--primary-dark)); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); +} + +.sidebar-nav-item.active::before { + content: ''; + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 4px; + background: var(--primary-light); + border-radius: 0 var(--border-radius) var(--border-radius) 0; +} + +.sidebar-nav-item i { + width: 20px; + margin-right: var(--spacing); + text-align: center; +} + +.sidebar.collapsed .sidebar-nav-item span { + display: none; +} + +.sidebar.collapsed .sidebar-nav-item i { + margin-right: 0; +} + +.sidebar-toggle { + position: absolute; + right: -15px; + top: var(--spacing-xl); + background: var(--primary-color); + color: var(--text-white); + border: 2px solid var(--bg-secondary); + border-radius: 50%; + width: 30px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: var(--transition-fast); +} + +.sidebar-toggle:hover { + background: var(--primary-dark); +} + +/* 主内容区 */ +.main-content { + flex: 1; + margin-left: var(--sidebar-width); + transition: margin-left 0.3s ease; + display: flex; + flex-direction: column; +} + +.sidebar.collapsed + .main-content { + margin-left: var(--sidebar-collapsed-width); +} + +/* 顶部导航栏 */ +.navbar { + background: var(--bg-primary); + box-shadow: var(--shadow-sm); + padding: 0 var(--spacing-lg); + height: var(--navbar-height); + display: flex; + align-items: center; + justify-content: space-between; + position: sticky; + top: 0; + z-index: var(--z-sticky); +} + +.navbar-brand { + font-size: 1.25rem; + font-weight: 600; + color: var(--text-primary); + text-decoration: none; + display: flex; + align-items: center; + gap: var(--spacing-sm); +} + +.navbar-nav { + display: flex; + align-items: center; + gap: var(--spacing); + list-style: none; + margin: 0; + padding: 0; +} + +.navbar-nav .nav-item { + position: relative; +} + +.navbar-nav .nav-link { + color: var(--text-secondary); + padding: 0.5rem var(--spacing); + border-radius: var(--border-radius); + text-decoration: none; + transition: var(--transition-fast); + display: flex; + align-items: center; + gap: var(--spacing-sm); +} + +.navbar-nav .nav-link:hover { + color: var(--primary-color); + background: var(--bg-secondary); +} + +.navbar-nav .nav-link.active { + color: var(--primary-color); + background: rgba(0,123,255,0.1); +} + +/* 用户菜单 */ +.user-menu { + position: relative; +} + +.user-avatar { + width: 36px; + height: 36px; + border-radius: 50%; + background: var(--primary-color); + color: var(--text-white); + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + font-weight: 500; +} + +.user-dropdown { + position: absolute; + top: 100%; + right: 0; + background: var(--bg-primary); + border: 1px solid var(--border-color); + border-radius: var(--border-radius); + box-shadow: var(--shadow-md); + min-width: 200px; + padding: var(--spacing-sm) 0; + margin-top: var(--spacing-sm); + display: none; + z-index: var(--z-dropdown); +} + +.user-dropdown.show { + display: block; +} + +.user-dropdown-item { + display: block; + padding: 0.5rem var(--spacing); + color: var(--text-primary); + text-decoration: none; + transition: var(--transition-fast); +} + +.user-dropdown-item:hover { + background: var(--bg-secondary); +} + +.user-dropdown-divider { + border-top: 1px solid var(--border-light); + margin: var(--spacing-sm) 0; +} + +/* 页面内容 */ +.page-content { + flex: 1; + padding: var(--spacing-lg); + overflow-y: auto; +} + +/* 页面头部 */ +.page-header { + margin-bottom: var(--spacing-lg); + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + gap: var(--spacing); +} + +.page-title { + font-size: 1.75rem; + font-weight: 700; + color: var(--text-primary); + margin: 0; +} + +.page-subtitle { + font-size: var(--font-size); + color: var(--text-muted); + margin: var(--spacing-sm) 0 0 0; +} + +.page-actions { + display: flex; + gap: var(--spacing-sm); + flex-wrap: wrap; +} + +/* 面包屑导航 */ +.breadcrumb { + background: transparent; + padding: 0; + margin-bottom: var(--spacing); +} + +.breadcrumb-item { + color: var(--text-muted); +} + +.breadcrumb-item a { + color: var(--text-secondary); + text-decoration: none; +} + +.breadcrumb-item a:hover { + color: var(--primary-color); +} + +.breadcrumb-item.active { + color: var(--text-primary); +} + +/* 网格系统增强 */ +.row { + margin-left: -0.5rem; + margin-right: -0.5rem; +} + +.row > [class*="col"] { + padding-left: 0.5rem; + padding-right: 0.5rem; +} + +/* 间距工具类 */ +.gap-0 { gap: 0; } +.gap-1 { gap: var(--spacing-xs); } +.gap-2 { gap: var(--spacing-sm); } +.gap-3 { gap: var(--spacing); } +.gap-4 { gap: var(--spacing-lg); } +.gap-5 { gap: var(--spacing-xl); } + +/* 滚动条样式 */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background: var(--bg-secondary); +} + +::-webkit-scrollbar-thumb { + background: var(--border-color); + border-radius: 4px; +} + +::-webkit-scrollbar-thumb:hover { + background: var(--text-muted); +} + +/* 加载遮罩 */ +.loading-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0,0,0,0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: var(--z-modal); +} + +.loading-content { + background: var(--bg-primary); + padding: var(--spacing-lg); + border-radius: var(--border-radius); + text-align: center; + box-shadow: var(--shadow-lg); +} + +/* 响应式布局 */ +@media (max-width: 992px) { + .sidebar { + transform: translateX(-100%); + } + + .sidebar.show { + transform: translateX(0); + } + + .main-content { + margin-left: 0; + } + + .page-header { + flex-direction: column; + align-items: flex-start; + } +} + +@media (max-width: 768px) { + .navbar { + padding: 0 var(--spacing); + } + + .page-content { + padding: var(--spacing); + } + + .row { + margin-left: -0.25rem; + margin-right: -0.25rem; + } + + .row > [class*="col"] { + padding-left: 0.25rem; + padding-right: 0.25rem; + } + + .page-actions { + width: 100%; + justify-content: flex-start; + } +} + +@media (max-width: 576px) { + .page-title { + font-size: 1.5rem; + } + + .stat-number { + font-size: 1.75rem; + } + + .btn { + padding: 0.375rem 0.75rem; + font-size: var(--font-size-sm); + } +} + +/* 打印样式 */ +@media print { + .sidebar, + .navbar, + .page-actions, + .btn, + .modal { + display: none !important; + } + + .main-content { + margin-left: 0 !important; + } + + .page-content { + padding: 0; + } + + .card { + box-shadow: none; + border: 1px solid var(--border-color); + } +} \ No newline at end of file diff --git a/src/web/static/css/main.css b/src/web/static/css/main.css new file mode 100644 index 0000000..3eb4af0 --- /dev/null +++ b/src/web/static/css/main.css @@ -0,0 +1,417 @@ +/* 主样式文件 - 导入所有模块 */ +@import url('variables.css'); +@import url('components.css'); +@import url('layout.css'); + +/* 全局动画 */ +.fade-enter { + opacity: 0; +} + +.fade-enter-active { + opacity: 1; + transition: opacity 0.3s ease; +} + +.fade-exit { + opacity: 1; +} + +.fade-exit-active { + opacity: 0; + transition: opacity 0.3s ease; +} + +.slide-enter { + transform: translateX(100%); +} + +.slide-enter-active { + transform: translateX(0); + transition: transform 0.3s ease; +} + +.slide-exit { + transform: translateX(0); +} + +.slide-exit-active { + transform: translateX(-100%); + transition: transform 0.3s ease; +} + +/* 实用工具类 */ +.text-truncate-2 { + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; +} + +.text-truncate-3 { + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; +} + +.hover-scale { + transition: transform 0.2s ease; +} + +.hover-scale:hover { + transform: scale(1.05); +} + +.hover-shadow { + transition: box-shadow 0.2s ease; +} + +.hover-shadow:hover { + box-shadow: var(--shadow-md); +} + +/* 自定义滚动条区域 */ +.custom-scrollbar { + overflow-y: auto; + scrollbar-width: thin; + scrollbar-color: var(--border-color) var(--bg-secondary); +} + +.custom-scrollbar::-webkit-scrollbar { + width: 6px; +} + +.custom-scrollbar::-webkit-scrollbar-track { + background: var(--bg-secondary); +} + +.custom-scrollbar::-webkit-scrollbar-thumb { + background: var(--border-color); + border-radius: 3px; +} + +.custom-scrollbar::-webkit-scrollbar-thumb:hover { + background: var(--text-muted); +} + +/* 文件上传区域 */ +.file-upload-area { + border: 2px dashed var(--border-color); + border-radius: var(--border-radius); + padding: var(--spacing-xl); + text-align: center; + transition: var(--transition-fast); + cursor: pointer; +} + +.file-upload-area:hover { + border-color: var(--primary-color); + background: var(--bg-secondary); +} + +.file-upload-area.dragover { + border-color: var(--primary-color); + background: rgba(0,123,255,0.05); +} + +/* 代码高亮 */ +.highlight { + background: var(--warning-color); + color: var(--text-primary); + padding: 0.125rem 0.25rem; + border-radius: var(--border-radius-sm); + font-size: 0.875em; +} + +/* 搜索高亮 */ +.search-highlight { + background: yellow; + padding: 0.125rem 0.25rem; + border-radius: 2px; +} + +/* 浮动操作按钮 */ +.fab { + position: fixed; + bottom: var(--spacing-lg); + right: var(--spacing-lg); + width: 56px; + height: 56px; + border-radius: 50%; + background: var(--primary-color); + color: var(--text-white); + border: none; + box-shadow: var(--shadow-lg); + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: var(--transition); + z-index: var(--z-fixed); +} + +.fab:hover { + transform: scale(1.1); + box-shadow: 0 8px 32px rgba(0,123,255,0.3); +} + +/* 标签输入 */ +.tag-input { + display: flex; + flex-wrap: wrap; + gap: var(--spacing-sm); + padding: var(--spacing-sm); + border: 1px solid var(--border-color); + border-radius: var(--border-radius); + min-height: 38px; + cursor: text; +} + +.tag-input input { + border: none; + outline: none; + flex: 1; + min-width: 100px; + padding: 0.25rem; +} + +.tag { + background: var(--primary-color); + color: var(--text-white); + padding: 0.25rem 0.5rem; + border-radius: var(--border-radius-sm); + display: flex; + align-items: center; + gap: 0.25rem; + font-size: var(--font-size-sm); +} + +.tag-remove { + cursor: pointer; + opacity: 0.8; + transition: opacity 0.2s; +} + +.tag-remove:hover { + opacity: 1; +} + +/* 开关切换 */ +.switch { + position: relative; + display: inline-block; + width: 44px; + height: 24px; +} + +.switch input { + opacity: 0; + width: 0; + height: 0; +} + +.switch-slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: var(--border-color); + transition: var(--transition); + border-radius: 24px; +} + +.switch-slider:before { + position: absolute; + content: ""; + height: 18px; + width: 18px; + left: 3px; + bottom: 3px; + background: white; + transition: var(--transition); + border-radius: 50%; +} + +input:checked + .switch-slider { + background: var(--primary-color); +} + +input:checked + .switch-slider:before { + transform: translateX(20px); +} + +/* 评分组件 */ +.rating { + display: inline-flex; + gap: 0.25rem; +} + +.rating-star { + color: var(--border-color); + cursor: pointer; + transition: color 0.2s; +} + +.rating-star.filled { + color: var(--warning-color); +} + +.rating-star:hover { + color: var(--warning-color); +} + +/* 步骤条 */ +.steps { + display: flex; + justify-content: space-between; + position: relative; + margin: var(--spacing-lg) 0; +} + +.step { + flex: 1; + text-align: center; + position: relative; +} + +.step::before { + content: ''; + position: absolute; + top: 20px; + left: 50%; + right: -50%; + height: 2px; + background: var(--border-color); + z-index: -1; +} + +.step:last-child::before { + display: none; +} + +.step.active::before { + background: var(--primary-color); +} + +.step-circle { + width: 40px; + height: 40px; + border-radius: 50%; + background: var(--border-color); + color: var(--text-muted); + display: inline-flex; + align-items: center; + justify-content: center; + margin-bottom: var(--spacing-sm); + transition: var(--transition); +} + +.step.active .step-circle, +.step.completed .step-circle { + background: var(--primary-color); + color: var(--text-white); +} + +.step-label { + font-size: var(--font-size-sm); + color: var(--text-muted); +} + +.step.active .step-label { + color: var(--text-primary); + font-weight: 500; +} + +/* 穿梭框 */ +.transfer { + display: flex; + gap: var(--spacing); + align-items: center; +} + +_transfer-panel { + flex: 1; + border: 1px solid var(--border-color); + border-radius: var(--border-radius); + background: var(--bg-primary); +} + +_transfer-header { + padding: var(--spacing); + border-bottom: 1px solid var(--border-light); + background: var(--bg-secondary); + font-weight: 500; +} + +_transfer-body { + max-height: 300px; + overflow-y: auto; +} + +_transfer-item { + padding: var(--spacing-sm) var(--spacing); + cursor: pointer; + transition: var(--transition-fast); +} + +_transfer-item:hover { + background: var(--bg-secondary); +} + +_transfer-item.selected { + background: rgba(0,123,255,0.1); + color: var(--primary-color); +} + +_transfer-controls { + display: flex; + flex-direction: column; + gap: var(--spacing-sm); +} + +/* 统计图表容器 */ +.chart-container { + position: relative; + height: 300px; + margin: var(--spacing) 0; +} + +.chart-canvas { + max-height: 100%; +} + +/* 焦点样式 */ +.focus-visible { + outline: 2px solid var(--primary-color); + outline-offset: 2px; +} + +/* 可访问性 */ +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0,0,0,0); + white-space: nowrap; + border: 0; +} + +/* 选择禁用 */ +.user-select-none { + user-select: none; +} + +/* 性能优化 */ +.will-change-transform { + will-change: transform; +} + +.gpu-accelerated { + transform: translateZ(0); +} \ No newline at end of file diff --git a/src/web/static/css/variables.css b/src/web/static/css/variables.css new file mode 100644 index 0000000..91531ad --- /dev/null +++ b/src/web/static/css/variables.css @@ -0,0 +1,90 @@ +/* CSS变量定义 */ +:root { + /* 主色调 */ + --primary-color: #007bff; + --primary-dark: #0056b3; + --primary-light: #66b3ff; + + /* 辅助色 */ + --secondary-color: #6c757d; + --success-color: #28a745; + --warning-color: #ffc107; + --danger-color: #dc3545; + --info-color: #17a2b8; + + /* 背景色 */ + --bg-primary: #ffffff; + --bg-secondary: #f8f9fa; + --bg-dark: #343a40; + --bg-light: #e9ecef; + --bg-hover: #f8f9fa; + + /* 文字色 */ + --text-primary: #212529; + --text-secondary: #6c757d; + --text-muted: #868e96; + --text-white: #ffffff; + + /* 边框色 */ + --border-color: #dee2e6; + --border-light: #e9ecef; + + /* 阴影 */ + --shadow-sm: 0 2px 4px rgba(0,0,0,0.08); + --shadow-md: 0 4px 12px rgba(0,0,0,0.12); + --shadow-lg: 0 8px 24px rgba(0,0,0,0.16); + + /* 圆角 */ + --border-radius-sm: 0.25rem; + --border-radius: 0.5rem; + --border-radius-lg: 1rem; + + /* 间距 */ + --spacing-xs: 0.25rem; + --spacing-sm: 0.5rem; + --spacing: 1rem; + --spacing-lg: 1.5rem; + --spacing-xl: 3rem; + + /* 过渡 */ + --transition: all 0.3s ease; + --transition-fast: all 0.15s ease; + + /* 字体 */ + --font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + --font-size-sm: 0.875rem; + --font-size: 1rem; + --font-size-lg: 1.125rem; + --font-size-xl: 1.25rem; + + /* 侧边栏 */ + --sidebar-width: 250px; + --sidebar-collapsed-width: 70px; + + /* 头部导航栏 */ + --navbar-height: 60px; + + /* Z-index层级 */ + --z-dropdown: 1000; + --z-sticky: 1020; + --z-fixed: 1030; + --z-modal-backdrop: 1040; + --z-modal: 1050; + --z-popover: 1060; + --z-tooltip: 1070; +} + +/* 深色模式变量 */ +[data-theme="dark"] { + --bg-primary: #1a1a1a; + --bg-secondary: #2d2d2d; + --bg-dark: #0d1117; + --bg-light: #3d3d3d; + + --text-primary: #e6e6e6; + --text-secondary: #b3b3b3; + --text-muted: #808080; + + --border-color: #404040; + --border-light: #4d4d4d; +} \ No newline at end of file diff --git a/src/web/static/js/app-new.js b/src/web/static/js/app-new.js new file mode 100644 index 0000000..ce0d2bc --- /dev/null +++ b/src/web/static/js/app-new.js @@ -0,0 +1,130 @@ +/** + * 重构后的主应用文件 + * 使用模块化架构整合所有功能 + */ + +// 全局变量声明 +let alertManager; +let healthMonitor; +let agentMonitor; + +// DOM加载完成后初始化应用 +document.addEventListener('DOMContentLoaded', async () => { + try { + // 初始化各个管理器 + alertManager = new AlertManager(); + healthMonitor = new HealthMonitor(); + agentMonitor = new AgentMonitor(); + + // 启动自动刷新 + healthMonitor.startMonitoring(); + + console.log('TSP助手应用初始化完成'); + } catch (error) { + console.error('应用初始化失败:', error); + notificationManager.error('应用初始化失败,请刷新页面重试'); + } +}); + +// 健康监控组件 +class HealthMonitor { + constructor() { + this.interval = null; + } + + startMonitoring() { + // 每5秒检查一次健康状态和监控状态 + this.interval = setInterval(async () => { + try { + const [healthData, monitorData] = await Promise.all([ + apiService.getHealth(), + apiService.getMonitorStatus() + ]); + + store.updateHealth(healthData); + store.updateMonitorStatus(monitorData.monitor_status); + } catch (error) { + console.error('健康检查失败:', error); + } + }, 5000); + } + + stopMonitoring() { + if (this.interval) { + clearInterval(this.interval); + this.interval = null; + } + } +} + +// Agent监控组件 +class AgentMonitor { + constructor() { + this.interval = null; + this.init(); + } + + init() { + // 监听Agent相关按钮 + this.bindAgentControls(); + this.loadAgentStatus(); + } + + bindAgentControls() { + const toggleBtn = document.getElementById('toggle-agent'); + if (toggleBtn) { + toggleBtn.addEventListener('click', () => this.toggleAgent()); + } + } + + async loadAgentStatus() { + try { + const status = await apiService.getAgentStatus(); + store.updateAgentStatus(status); + this.updateAgentDisplay(); + } catch (error) { + console.error('加载Agent状态失败:', error); + } + } + + async toggleAgent() { + try { + const currentStatus = store.getState().agentStatus; + const enabled = currentStatus.status === 'inactive'; + + const result = await apiService.toggleAgent(enabled); + + if (result.success) { + notificationManager.success(`Agent已${enabled ? '启用' : '禁用'}`); + await this.loadAgentStatus(); + } else { + notificationManager.error(result.message || '操作失败'); + } + } catch (error) { + console.error('切换Agent状态失败:', error); + notificationManager.error('操作失败'); + } + } + + updateAgentDisplay() { + const status = store.getState().agentStatus; + const statusElement = document.getElementById('agent-status'); + + if (statusElement) { + const statusText = status.status === 'active' ? '运行中' : '未运行'; + const statusClass = status.status === 'active' ? 'text-success' : 'text-secondary'; + + statusElement.innerHTML = ` + + Agent: ${statusText} + (${status.active_goals} 个活跃目标, ${status.available_tools} 个工具) + `; + } + } +} + +// 导出全局对象供HTML访问 +window.alertManager = alertManager; +window.apiService = apiService; +window.store = store; +window.notificationManager = notificationManager; diff --git a/src/web/static/js/chat.js b/src/web/static/js/chat.js index e38fe8f..e1d1fe8 100644 --- a/src/web/static/js/chat.js +++ b/src/web/static/js/chat.js @@ -6,7 +6,7 @@ class ChatClient { this.sessionId = null; this.isConnected = false; this.messageCount = 0; - + this.init(); } @@ -18,24 +18,24 @@ class ChatClient { bindEvents() { // 开始对话 document.getElementById('start-chat').addEventListener('click', () => this.startChat()); - + // 结束对话 document.getElementById('end-chat').addEventListener('click', () => this.endChat()); - + // 发送消息 document.getElementById('send-button').addEventListener('click', () => this.sendMessage()); - + // 回车发送 document.getElementById('message-input').addEventListener('keypress', (e) => { if (e.key === 'Enter') { this.sendMessage(); } }); - + // 创建工单 document.getElementById('create-work-order').addEventListener('click', () => this.showWorkOrderModal()); document.getElementById('create-work-order-btn').addEventListener('click', () => this.createWorkOrder()); - + // 快速操作按钮 document.querySelectorAll('.quick-action-btn').forEach(btn => { btn.addEventListener('click', (e) => { @@ -50,17 +50,17 @@ class ChatClient { try { // 连接WebSocket await this.connectWebSocket(); - + // 创建会话 const userId = document.getElementById('user-id').value || 'anonymous'; const workOrderId = document.getElementById('work-order-id').value || null; - + const response = await this.sendWebSocketMessage({ type: 'create_session', user_id: userId, work_order_id: workOrderId ? parseInt(workOrderId) : null }); - + if (response.type === 'session_created') { this.sessionId = response.session_id; this.updateSessionInfo(); @@ -69,7 +69,7 @@ class ChatClient { } else { this.showError('创建会话失败'); } - + } catch (error) { console.error('启动对话失败:', error); this.showError('启动对话失败: ' + error.message); @@ -84,11 +84,11 @@ class ChatClient { session_id: this.sessionId }); } - + this.sessionId = null; this.disableChat(); this.addSystemMessage('对话已结束。'); - + } catch (error) { console.error('结束对话失败:', error); } @@ -97,48 +97,48 @@ class ChatClient { async sendMessage() { const input = document.getElementById('message-input'); const message = input.value.trim(); - + if (!message || !this.sessionId) { return; } - + // 清空输入框 input.value = ''; - + // 添加用户消息 this.addMessage('user', message); - + // 显示打字指示器 this.showTypingIndicator(); - + try { const response = await this.sendWebSocketMessage({ type: 'send_message', session_id: this.sessionId, message: message }); - + this.hideTypingIndicator(); - + if (response.type === 'message_response' && response.result.success) { const result = response.result; - + // 添加助手回复 this.addMessage('assistant', result.content, { knowledge_used: result.knowledge_used, confidence_score: result.confidence_score, work_order_id: result.work_order_id }); - + // 更新工单ID if (result.work_order_id) { document.getElementById('work-order-id').value = result.work_order_id; } - + } else { this.addMessage('assistant', '抱歉,我暂时无法处理您的问题。请稍后再试。'); } - + } catch (error) { this.hideTypingIndicator(); console.error('发送消息失败:', error); @@ -151,12 +151,12 @@ class ChatClient { const description = document.getElementById('wo-description').value; const category = document.getElementById('wo-category').value; const priority = document.getElementById('wo-priority').value; - + if (!title || !description) { this.showError('请填写工单标题和描述'); return; } - + try { const response = await this.sendWebSocketMessage({ type: 'create_work_order', @@ -166,23 +166,23 @@ class ChatClient { category: category, priority: priority }); - + if (response.type === 'work_order_created' && response.result.success) { const workOrderId = response.result.work_order_id; document.getElementById('work-order-id').value = workOrderId; this.addSystemMessage(`工单创建成功!工单号: ${response.result.order_id}`); - + // 关闭模态框 const modal = bootstrap.Modal.getInstance(document.getElementById('workOrderModal')); modal.hide(); - + // 清空表单 document.getElementById('work-order-form').reset(); - + } else { this.showError('创建工单失败: ' + (response.result.error || '未知错误')); } - + } catch (error) { console.error('创建工单失败:', error); this.showError('创建工单失败: ' + error.message); @@ -193,7 +193,7 @@ class ChatClient { return new Promise((resolve, reject) => { try { this.websocket = new WebSocket('ws://localhost:8765'); - + // 设置连接超时 const timeout = setTimeout(() => { if (this.websocket.readyState !== WebSocket.OPEN) { @@ -201,26 +201,26 @@ class ChatClient { reject(new Error('WebSocket连接超时,请检查服务器是否启动')); } }, 5000); // 5秒超时 - + this.websocket.onopen = () => { clearTimeout(timeout); this.isConnected = true; this.updateConnectionStatus(true); resolve(); }; - + this.websocket.onclose = () => { clearTimeout(timeout); this.isConnected = false; this.updateConnectionStatus(false); }; - + this.websocket.onerror = (error) => { clearTimeout(timeout); console.error('WebSocket错误:', error); reject(new Error('WebSocket连接失败,请检查服务器是否启动')); }; - + this.websocket.onmessage = (event) => { try { const data = JSON.parse(event.data); @@ -229,7 +229,7 @@ class ChatClient { console.error('解析WebSocket消息失败:', error); } }; - + } catch (error) { reject(error); } @@ -242,15 +242,15 @@ class ChatClient { reject(new Error('WebSocket未连接')); return; } - + const messageId = 'msg_' + Date.now(); message.messageId = messageId; - + // 设置超时 const timeout = setTimeout(() => { reject(new Error('请求超时')); }, 10000); - + // 监听响应 const handleResponse = (event) => { try { @@ -264,7 +264,7 @@ class ChatClient { // 忽略解析错误 } }; - + this.websocket.addEventListener('message', handleResponse); this.websocket.send(JSON.stringify(message)); }); @@ -277,29 +277,29 @@ class ChatClient { addMessage(role, content, metadata = {}) { const messagesContainer = document.getElementById('chat-messages'); - + // 如果是第一条消息,清空欢迎信息 if (this.messageCount === 0) { messagesContainer.innerHTML = ''; } - + const messageDiv = document.createElement('div'); messageDiv.className = `message ${role}`; - + const avatar = document.createElement('div'); avatar.className = 'message-avatar'; avatar.textContent = role === 'user' ? 'U' : 'A'; - + const contentDiv = document.createElement('div'); contentDiv.className = 'message-content'; contentDiv.innerHTML = content; - + // 添加时间戳 const timeDiv = document.createElement('div'); timeDiv.className = 'message-time'; timeDiv.textContent = new Date().toLocaleTimeString(); contentDiv.appendChild(timeDiv); - + // 添加元数据 if (metadata.knowledge_used && metadata.knowledge_used.length > 0) { const knowledgeDiv = document.createElement('div'); @@ -307,21 +307,21 @@ class ChatClient { knowledgeDiv.innerHTML = `基于 ${metadata.knowledge_used.length} 条知识库信息生成`; contentDiv.appendChild(knowledgeDiv); } - + if (metadata.confidence_score) { const confidenceDiv = document.createElement('div'); confidenceDiv.className = 'confidence-score'; confidenceDiv.textContent = `置信度: ${(metadata.confidence_score * 100).toFixed(1)}%`; contentDiv.appendChild(confidenceDiv); } - + if (metadata.work_order_id) { const workOrderDiv = document.createElement('div'); workOrderDiv.className = 'work-order-info'; workOrderDiv.innerHTML = `关联工单: ${metadata.work_order_id}`; contentDiv.appendChild(workOrderDiv); } - + if (role === 'user') { messageDiv.appendChild(contentDiv); messageDiv.appendChild(avatar); @@ -329,20 +329,20 @@ class ChatClient { messageDiv.appendChild(avatar); messageDiv.appendChild(contentDiv); } - + messagesContainer.appendChild(messageDiv); messagesContainer.scrollTop = messagesContainer.scrollHeight; - + this.messageCount++; } addSystemMessage(content) { const messagesContainer = document.getElementById('chat-messages'); - + const messageDiv = document.createElement('div'); messageDiv.className = 'text-center text-muted py-2'; messageDiv.innerHTML = `${content}`; - + messagesContainer.appendChild(messageDiv); messagesContainer.scrollTop = messagesContainer.scrollHeight; } @@ -394,7 +394,7 @@ class ChatClient { this.showError('请先开始对话'); return; } - + const modal = new bootstrap.Modal(document.getElementById('workOrderModal')); modal.show(); } diff --git a/src/web/static/js/components/AlertManager.js b/src/web/static/js/components/AlertManager.js new file mode 100644 index 0000000..41e62b1 --- /dev/null +++ b/src/web/static/js/components/AlertManager.js @@ -0,0 +1,355 @@ +/** + * 预警管理组件 + * 专门处理预警相关的功能 + */ + +class AlertManager { + constructor() { + this.refreshInterval = null; + this.init(); + } + + init() { + this.bindEvents(); + this.loadInitialData(); + this.startAutoRefresh(); + } + + bindEvents() { + // 监控控制按钮 + this.bindButton('start-monitor', () => this.startMonitoring()); + this.bindButton('stop-monitor', () => this.stopMonitoring()); + this.bindButton('check-alerts', () => this.checkAlerts()); + this.bindButton('refresh-alerts', () => this.loadAlerts()); + + // 预警过滤和排序 + this.bindSelect('alert-filter', () => this.updateAlertsDisplay()); + this.bindSelect('alert-sort', () => this.updateAlertsDisplay()); + } + + bindButton(id, handler) { + const element = document.getElementById(id); + if (element) { + element.addEventListener('click', handler); + } + } + + bindSelect(id, handler) { + const element = document.getElementById(id); + if (element) { + element.addEventListener('change', handler); + } + } + + async loadInitialData() { + store.setLoading(true); + try { + await Promise.all([ + this.loadAlerts(), + this.loadRules(), + this.loadMonitorStatus() + ]); + } catch (error) { + console.error('加载初始数据失败:', error); + notificationManager.error('加载数据失败,请刷新页面重试'); + } finally { + store.setLoading(false); + } + } + + startAutoRefresh() { + // 清除现有定时器 + if (this.refreshInterval) { + clearInterval(this.refreshInterval); + } + + // 每10秒刷新一次预警 + this.refreshInterval = setInterval(() => { + this.loadAlerts(); + }, 10000); + } + + // 监控控制方法 + async startMonitoring() { + try { + store.setLoading(true); + const result = await apiService.startMonitoring(); + + if (result.success) { + notificationManager.success('监控已启动'); + await this.loadMonitorStatus(); + } else { + notificationManager.error(result.message || '启动监控失败'); + } + } catch (error) { + console.error('启动监控失败:', error); + notificationManager.error('启动监控失败'); + } finally { + store.setLoading(false); + } + } + + async stopMonitoring() { + try { + store.setLoading(true); + const result = await apiService.stopMonitoring(); + + if (result.success) { + notificationManager.success('监控已停止'); + await this.loadMonitorStatus(); + } else { + notificationManager.error(result.message || '停止监控失败'); + } + } catch (error) { + console.error('停止监控失败:', error); + notificationManager.error('停止监控失败'); + } finally { + store.setLoading(false); + } + } + + async checkAlerts() { + try { + store.setLoading(true); + await this.loadAlerts(); + notificationManager.success('预警检查完成'); + } catch (error) { + console.error('检查预警失败:', error); + notificationManager.error('检查预警失败'); + } finally { + store.setLoading(false); + } + } + + // 数据加载方法 + async loadAlerts() { + try { + const data = await apiService.getAlerts(); + store.updateAlerts(data); + this.updateAlertsDisplay(); + } catch (error) { + console.error('加载预警失败:', error); + } + } + + async loadRules() { + try { + const data = await apiService.getRules(); + store.updateRules(data); + this.updateRulesDisplay(); + } catch (error) { + console.error('加载规则失败:', error); + } + } + + async loadMonitorStatus() { + try { + const data = await apiService.getMonitorStatus(); + store.updateMonitorStatus(data.monitor_status); + this.updateMonitorStatusDisplay(); + } catch (error) { + console.error('加载监控状态失败:', error); + } + } + + // 显示更新方法 + updateAlertsDisplay() { + const alerts = store.getSortedAlerts('timestamp', 'desc'); + const container = document.getElementById('alerts-container'); + + if (!container) return; + + if (alerts.length === 0) { + container.innerHTML = '

暂无预警
'; + return; + } + + container.innerHTML = alerts.map(alert => this.createAlertElement(alert)).join(''); + } + + createAlertElement(alert) { + const levelClass = this.getLevelClass(alert.level); + const typeText = this.getTypeText(alert.alert_type); + const levelText = this.getLevelText(alert.level); + const timeText = this.formatTime(alert.timestamp); + + return ` +
+
+
+
+
+ ${levelText} + ${typeText} + ${timeText} +
+
${alert.title}
+

${alert.description}

+
+ + +
+
+
+
+
+ `; + } + + updateRulesDisplay() { + const rules = store.getState().rules; + const container = document.getElementById('rules-container'); + + if (!container) return; + + if (rules.length === 0) { + container.innerHTML = '

暂无规则
'; + return; + } + + container.innerHTML = rules.map(rule => this.createRuleElement(rule)).join(''); + } + + createRuleElement(rule) { + const enabledText = rule.enabled ? '启用' : '禁用'; + + return ` + + ${rule.name} + ${rule.alert_type} + ${rule.level} + ${rule.threshold} + ${enabledText} + + + + + + `; + } + + updateMonitorStatusDisplay() { + const status = store.getState().monitorStatus; + const element = document.getElementById('monitor-status'); + + if (!element) return; + + const statusConfig = { + 'running': { icon: 'text-success', text: '运行中' }, + 'stopped': { icon: 'text-danger', text: '已停止' }, + 'unknown': { icon: 'text-warning', text: '未知' } + }; + + const config = statusConfig[status] || statusConfig.unknown; + + element.innerHTML = ` + 监控状态: ${config.text} + `; + } + + // 工具方法 + getLevelClass(level) { + const levelMap = { + 'critical': 'danger', + 'error': 'danger', + 'warning': 'warning', + 'info': 'info' + }; + return levelMap[level] || 'secondary'; + } + + getLevelText(level) { + const levelMap = { + 'critical': '严重', + 'error': '错误', + 'warning': '警告', + 'info': '信息' + }; + return levelMap[level] || level; + } + + getTypeText(type) { + const typeMap = { + 'performance': '性能', + 'quality': '质量', + 'volume': '量级', + 'system': '系统', + 'business': '业务' + }; + return typeMap[type] || type; + } + + formatTime(timestamp) { + const date = new Date(timestamp); + const now = new Date(); + const diff = now - date; + + if (diff < 60000) return '刚刚'; + if (diff < 3600000) return `${Math.floor(diff / 60000)}分钟前`; + if (diff < 86400000) return `${Math.floor(diff / 3600000)}小时前`; + return date.toLocaleDateString(); + } + + // 预警操作方法 + async acknowledgeAlert(alertId) { + try { + await apiService.updateAlert(alertId, { acknowledged: true }); + notificationManager.success('预警已确认'); + await this.loadAlerts(); + } catch (error) { + console.error('确认预警失败:', error); + notificationManager.error('确认预警失败'); + } + } + + viewAlertDetail(alertId) { + // 这里可以实现查看详情的逻辑 + notificationManager.info('详情查看功能开发中'); + } + + // 规则操作方法 + editRule(ruleName) { + const rule = store.getState().rules.find(r => r.name === ruleName); + if (!rule) { + notificationManager.error('规则不存在'); + return; + } + + // 填充编辑表单 + document.getElementById('edit-rule-name-original').value = rule.name; + document.getElementById('edit-rule-name').value = rule.name; + document.getElementById('edit-rule-type').value = rule.alert_type; + document.getElementById('edit-rule-level').value = rule.level; + document.getElementById('edit-rule-threshold').value = rule.threshold; + document.getElementById('edit-rule-description').value = rule.description || ''; + document.getElementById('edit-rule-condition').value = rule.condition; + document.getElementById('edit-rule-interval').value = rule.check_interval; + document.getElementById('edit-rule-cooldown').value = rule.cooldown; + document.getElementById('edit-rule-enabled').checked = rule.enabled; + + // 显示编辑模态框 + const modal = new bootstrap.Modal(document.getElementById('editRuleModal')); + modal.show(); + } + + async deleteRule(ruleName) { + if (!confirm(`确定要删除规则 "${ruleName}" 吗?`)) return; + + try { + await apiService.deleteRule(ruleName); + notificationManager.success('规则删除成功'); + await this.loadRules(); + } catch (error) { + console.error('删除规则失败:', error); + notificationManager.error('删除规则失败'); + } + } +} diff --git a/src/web/static/js/components/NotificationManager.js b/src/web/static/js/components/NotificationManager.js new file mode 100644 index 0000000..e00b790 --- /dev/null +++ b/src/web/static/js/components/NotificationManager.js @@ -0,0 +1,137 @@ +/** + * 通知管理组件 + * 统一处理应用内通知显示 + */ + +class NotificationManager { + constructor() { + this.container = null; + this.init(); + } + + init() { + // 创建通知容器 + this.container = document.createElement('div'); + this.container.className = 'notification-container position-fixed'; + this.container.style.cssText = ` + top: 20px; + right: 20px; + z-index: 9999; + max-width: 400px; + `; + document.body.appendChild(this.container); + + // 监听状态变化 + store.subscribe((prevState, newState) => { + if (prevState.notifications !== newState.notifications) { + this.renderNotifications(newState.notifications); + } + }); + } + + renderNotifications(notifications) { + this.container.innerHTML = ''; + + notifications.forEach(notification => { + const notificationEl = this.createNotificationElement(notification); + this.container.appendChild(notificationEl); + }); + } + + createNotificationElement(notification) { + const div = document.createElement('div'); + const typeClass = this.getTypeClass(notification.type); + + div.className = `alert alert-${typeClass} alert-dismissible fade show shadow`; + div.style.cssText = ` + margin-bottom: 10px; + border-radius: 8px; + border: none; + `; + + div.innerHTML = ` +
+ +
+ ${notification.title || this.getDefaultTitle(notification.type)} +
${notification.message}
+
+ +
+ `; + + // 添加关闭事件 + const closeBtn = div.querySelector('.btn-close'); + closeBtn.addEventListener('click', () => { + store.removeNotification(notification.id); + }); + + return div; + } + + getTypeClass(type) { + const typeMap = { + 'success': 'success', + 'error': 'danger', + 'warning': 'warning', + 'info': 'info' + }; + return typeMap[type] || 'info'; + } + + getIconClass(type) { + const iconMap = { + 'success': 'fas fa-check-circle', + 'error': 'fas fa-exclamation-triangle', + 'warning': 'fas fa-exclamation-circle', + 'info': 'fas fa-info-circle' + }; + return iconMap[type] || 'fas fa-info-circle'; + } + + getDefaultTitle(type) { + const titleMap = { + 'success': '成功', + 'error': '错误', + 'warning': '警告', + 'info': '提示' + }; + return titleMap[type] || '通知'; + } + + // 便捷方法 + success(message, title = null) { + store.addNotification({ + type: 'success', + message, + title + }); + } + + error(message, title = null) { + store.addNotification({ + type: 'error', + message, + title + }); + } + + warning(message, title = null) { + store.addNotification({ + type: 'warning', + message, + title + }); + } + + info(message, title = null) { + store.addNotification({ + type: 'info', + message, + title + }); + } +} + +// 创建全局通知管理器实例 +const notificationManager = new NotificationManager(); diff --git a/src/web/static/js/components/modal.js b/src/web/static/js/components/modal.js new file mode 100644 index 0000000..11b95c0 --- /dev/null +++ b/src/web/static/js/components/modal.js @@ -0,0 +1,418 @@ +/** + * 模态框组件 + */ + +import { addClass, removeClass, hasClass } from '../core/utils.js'; + +export class Modal { + constructor(options = {}) { + this.id = options.id || `modal-${Date.now()}`; + this.title = options.title || ''; + this.content = options.content || ''; + this.size = options.size || ''; // sm, lg, xl + this.backdrop = options.backdrop !== false; + this.keyboard = options.keyboard !== false; + this.centered = options.centered || false; + this.scrollable = options.scrollable || false; + this.static = options.static || false; + this.className = options.className || ''; + this.footer = options.footer || null; + this.show = false; + + this.onShow = options.onShow || (() => {}); + this.onShown = options.onShown || (() => {}); + this.onHide = options.onHide || (() => {}); + this.onHidden = options.onHidden || (() => {}); + + this.init(); + } + + init() { + this.createModal(); + this.bindEvents(); + } + + createModal() { + // 创建模态框容器 + this.modal = document.createElement('div'); + this.modal.className = 'modal fade'; + this.modal.id = this.id; + this.modal.setAttribute('tabindex', '-1'); + this.modal.setAttribute('aria-labelledby', `${this.id}-label`); + this.modal.setAttribute('aria-hidden', 'true'); + + // 模态框对话框 + const dialog = document.createElement('div'); + dialog.className = `modal-dialog ${this.size ? `modal-${this.size}` : ''} ${this.centered ? 'modal-dialog-centered' : ''} ${this.scrollable ? 'modal-dialog-scrollable' : ''}`; + + // 模态框内容 + const content = document.createElement('div'); + content.className = 'modal-content'; + if (this.className) { + addClass(content, this.className); + } + + // 构建模态框HTML + let modalHTML = ` + + + `; + + // 添加底部按钮 + if (this.footer) { + modalHTML += ` + + `; + } + + content.innerHTML = modalHTML; + dialog.appendChild(content); + this.modal.appendChild(dialog); + + // 添加到页面 + document.body.appendChild(this.modal); + } + + renderFooter() { + if (!this.footer) return ''; + + if (Array.isArray(this.footer)) { + return this.footer.map(btn => { + const attrs = Object.keys(btn) + .filter(key => key !== 'text') + .map(key => `${key}="${btn[key]}"`) + .join(' '); + return ``; + }).join(''); + } + + return ''; + } + + bindEvents() { + // 关闭按钮 + const closeBtn = this.modal.querySelector('.btn-close'); + if (closeBtn) { + closeBtn.addEventListener('click', () => this.hide()); + } + + // 背景点击 + if (!this.static) { + this.modal.addEventListener('click', (e) => { + if (e.target === this.modal) { + this.hide(); + } + }); + } + + // ESC键关闭 + if (this.keyboard) { + document.addEventListener('keydown', (e) => { + if (e.key === 'Escape' && this.show) { + this.hide(); + } + }); + } + } + + show() { + if (this.show) return; + + // 触发显示前事件 + this.onShow(); + + // 添加到页面 + if (!this.modal.parentNode) { + document.body.appendChild(this.modal); + } + + // 显示模态框 + this.modal.style.display = 'block'; + addClass(this.modal, 'show'); + this.modal.setAttribute('aria-hidden', 'false'); + + // 防止背景滚动 + document.body.style.overflow = 'hidden'; + + this.show = true; + + // 聚焦到第一个可聚焦元素 + setTimeout(() => { + const focusable = this.modal.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'); + if (focusable) { + focusable.focus(); + } + }, 100); + + // 触发显示后事件 + setTimeout(() => { + this.onShown(); + }, 150); + } + + hide() { + if (!this.show) return; + + // 触发隐藏前事件 + this.onHide(); + + // 隐藏模态框 + removeClass(this.modal, 'show'); + this.modal.setAttribute('aria-hidden', 'true'); + + // 恢复背景滚动 + document.body.style.overflow = ''; + + this.show = false; + + // 延迟移除DOM + setTimeout(() => { + if (this.modal) { + this.modal.style.display = 'none'; + if (this.modal.parentNode) { + this.modal.parentNode.removeChild(this.modal); + } + } + + // 触发隐藏后事件 + this.onHidden(); + }, 150); + } + + toggle() { + if (this.show) { + this.hide(); + } else { + this.show(); + } + } + + update(options) { + if (options.title) { + this.title = options.title; + const titleEl = this.modal.querySelector('.modal-title'); + if (titleEl) { + titleEl.textContent = this.title; + } + } + + if (options.content) { + this.content = options.content; + const bodyEl = this.modal.querySelector('.modal-body'); + if (bodyEl) { + bodyEl.innerHTML = this.content; + } + } + + if (options.footer !== undefined) { + this.footer = options.footer; + const footerEl = this.modal.querySelector('.modal-footer'); + if (footerEl) { + if (this.footer) { + footerEl.style.display = 'block'; + footerEl.innerHTML = typeof this.footer === 'string' ? this.footer : this.renderFooter(); + + // 重新绑定底部按钮事件 + this.bindFooterEvents(); + } else { + footerEl.style.display = 'none'; + } + } + } + } + + bindFooterEvents() { + const footer = this.modal.querySelector('.modal-footer'); + if (!footer) return; + + footer.querySelectorAll('button').forEach(btn => { + const dataDismiss = btn.getAttribute('data-bs-dismiss'); + if (dataDismiss === 'modal') { + btn.addEventListener('click', () => this.hide()); + } + }); + } + + getModal() { + return this.modal; + } + + getElement(selector) { + return this.modal.querySelector(selector); + } + + destroy() { + this.hide(); + setTimeout(() => { + if (this.modal && this.modal.parentNode) { + this.modal.parentNode.removeChild(this.modal); + } + this.modal = null; + }, 200); + } +} + +// 确认对话框 +export function confirm(options = {}) { + return new Promise((resolve) => { + const modal = new Modal({ + title: options.title || '确认', + content: ` +
+ +

${options.message || '确定要执行此操作吗?'}

+
+ `, + size: 'sm', + centered: true, + footer: [ + { text: '取消', class: 'btn btn-secondary', 'data-bs-dismiss': 'modal' }, + { text: '确定', class: 'btn btn-primary', id: 'confirm-btn' } + ] + }); + + modal.onHidden = () => { + modal.destroy(); + }; + + modal.getElement('#confirm-btn').addEventListener('click', () => { + modal.hide(); + resolve(true); + }); + + modal.onHidden = () => { + resolve(false); + modal.destroy(); + }; + + modal.show(); + }); +} + +// 警告对话框 +export function alert(options = {}) { + return new Promise((resolve) => { + const modal = new Modal({ + title: options.title || '提示', + content: ` +
+ +

${options.message || ''}

+
+ `, + size: 'sm', + centered: true, + footer: [ + { text: '确定', class: 'btn btn-primary', id: 'alert-btn' } + ] + }); + + modal.onHidden = () => { + modal.destroy(); + resolve(); + }; + + modal.getElement('#alert-btn').addEventListener('click', () => { + modal.hide(); + }); + + modal.show(); + }); +} + +// Toast通知 +export class Toast { + constructor(options = {}) { + this.id = `toast-${Date.now()}`; + this.type = options.type || 'info'; + this.message = options.message || ''; + this.duration = options.duration || 3000; + this.closable = options.closable !== false; + this.autoHide = options.autoHide !== false; + + this.init(); + } + + init() { + this.createToast(); + this.show(); + } + + createToast() { + // 查找或创建toast容器 + let container = document.querySelector('.toast-container'); + if (!container) { + container = document.createElement('div'); + container.className = 'toast-container'; + document.body.appendChild(container); + } + + // 创建toast元素 + this.toast = document.createElement('div'); + this.toast.className = `toast ${this.type}`; + this.toast.id = this.id; + + const iconMap = { + success: 'fa-check-circle', + error: 'fa-exclamation-circle', + warning: 'fa-exclamation-triangle', + info: 'fa-info-circle' + }; + + this.toast.innerHTML = ` +
+ + ${this.message} + ${this.closable ? '' : ''} +
+ `; + + container.appendChild(this.toast); + + // 绑定关闭事件 + if (this.closable) { + const closeBtn = this.toast.querySelector('.btn-close'); + if (closeBtn) { + closeBtn.addEventListener('click', () => this.hide()); + } + } + + // 自动隐藏 + if (this.autoHide) { + setTimeout(() => this.hide(), this.duration); + } + } + + show() { + setTimeout(() => { + addClass(this.toast, 'show'); + }, 10); + } + + hide() { + removeClass(this.toast, 'show'); + setTimeout(() => { + if (this.toast && this.toast.parentNode) { + this.toast.parentNode.removeChild(this.toast); + } + }, 300); + } +} + +// 创建全局toast函数 +export function showToast(options) { + if (typeof options === 'string') { + options = { message: options }; + } + return new Toast(options); +} + +// 导出 +export default Modal; \ No newline at end of file diff --git a/src/web/static/js/components/navbar.js b/src/web/static/js/components/navbar.js new file mode 100644 index 0000000..580cad7 --- /dev/null +++ b/src/web/static/js/components/navbar.js @@ -0,0 +1,414 @@ +/** + * 导航栏组件 + */ + +import { addClass, removeClass, hasClass, toggleClass } from '../core/utils.js'; +import store from '../core/store.js'; +import router from '../core/router.js'; + +export class Navbar { + constructor(container) { + this.container = typeof container === 'string' ? document.querySelector(container) : container; + this.userMenuOpen = false; + this.init(); + } + + init() { + this.render(); + this.bindEvents(); + } + + render() { + this.container.innerHTML = ` + + `; + } + + bindEvents() { + // 侧边栏切换(移动端) + const sidebarToggle = this.container.querySelector('#sidebar-toggle'); + if (sidebarToggle) { + sidebarToggle.addEventListener('click', () => { + this.toggleSidebar(); + }); + } + + // 用户菜单切换 + const userMenuToggle = this.container.querySelector('#user-menu-toggle'); + if (userMenuToggle) { + userMenuToggle.addEventListener('click', (e) => { + e.preventDefault(); + this.toggleUserMenu(); + }); + } + + // 通知下拉菜单 + const notificationsDropdown = this.container.querySelector('#notifications-dropdown'); + if (notificationsDropdown) { + const toggle = notificationsDropdown.querySelector('[data-toggle="dropdown"]'); + if (toggle) { + toggle.addEventListener('click', (e) => { + e.preventDefault(); + this.toggleNotifications(); + }); + } + } + + // 主题切换 + const themeToggle = this.container.querySelector('#theme-toggle'); + if (themeToggle) { + themeToggle.addEventListener('click', () => { + this.toggleTheme(); + }); + } + + // 退出登录 + const logoutBtn = this.container.querySelector('#logout-btn'); + if (logoutBtn) { + logoutBtn.addEventListener('click', (e) => { + e.preventDefault(); + this.handleLogout(); + }); + } + + // 清空通知 + const clearNotifications = this.container.querySelector('#clear-notifications'); + if (clearNotifications) { + clearNotifications.addEventListener('click', (e) => { + e.preventDefault(); + this.clearNotifications(); + }); + } + + // 路由链接 + this.container.querySelectorAll('[data-route]').forEach(link => { + link.addEventListener('click', (e) => { + e.preventDefault(); + const route = e.currentTarget.getAttribute('data-route'); + if (route) { + router.push(route); + } + }); + }); + + // 点击外部关闭下拉菜单 + document.addEventListener('click', (e) => { + if (!this.container.contains(e.target)) { + this.closeUserMenu(); + this.closeNotifications(); + } + }); + + // 监听store变化 + store.subscribe((state) => { + this.updateUser(state.user); + this.updateNotifications(state.ui.notifications); + this.updateMonitorStatus(state.monitor); + }); + } + + toggleUserMenu() { + const dropdown = this.container.querySelector('#user-dropdown'); + if (dropdown) { + this.userMenuOpen = !this.userMenuOpen; + toggleClass(dropdown, 'show'); + } + } + + closeUserMenu() { + const dropdown = this.container.querySelector('#user-dropdown'); + if (dropdown && hasClass(dropdown, 'show')) { + this.userMenuOpen = false; + removeClass(dropdown, 'show'); + } + } + + toggleNotifications() { + const dropdown = this.container.querySelector('#notifications-dropdown .dropdown-menu'); + if (dropdown) { + toggleClass(dropdown, 'show'); + } + } + + closeNotifications() { + const dropdown = this.container.querySelector('#notifications-dropdown .dropdown-menu'); + if (dropdown && hasClass(dropdown, 'show')) { + removeClass(dropdown, 'show'); + } + } + + toggleTheme() { + const currentTheme = store.getState('app.theme'); + const newTheme = currentTheme === 'light' ? 'dark' : 'light'; + + store.commit('SET_THEME', newTheme); + + const icon = this.container.querySelector('#theme-icon'); + if (icon) { + icon.className = newTheme === 'light' ? 'fas fa-moon' : 'fas fa-sun'; + } + } + + handleLogout() { + if (confirm('确定要退出登录吗?')) { + // 调用注销API + fetch('/api/logout', { method: 'POST' }) + .then(() => { + // 清除应用状态 + store.commit('SET_USER', null); + store.commit('SET_LOGIN', false); + store.commit('SET_TOKEN', null); + + // 清除本地存储和会话存储 + localStorage.removeItem('user'); + localStorage.removeItem('token'); + localStorage.removeItem('remember'); + sessionStorage.removeItem('token'); + + // 显示提示 + if (window.showToast) { + window.showToast('已退出登录', 'info'); + } + + // 跳转到登录页 + router.push('/login'); + }) + .catch(error => { + console.error('注销失败:', error); + // 即使API调用失败,也要清除本地状态 + store.commit('SET_USER', null); + store.commit('SET_LOGIN', false); + store.commit('SET_TOKEN', null); + localStorage.clear(); + sessionStorage.clear(); + router.push('/login'); + }); + } + } + + clearNotifications() { + store.setState({ + ui: { + ...store.getState('ui'), + notifications: [] + } + }); + } + + updateNotifications(notifications) { + const countEl = this.container.querySelector('#notification-count'); + const listEl = this.container.querySelector('#notification-list'); + + if (!countEl || !listEl) return; + + const count = notifications.length; + countEl.textContent = count; + countEl.style.display = count > 0 ? 'inline-block' : 'none'; + + if (count === 0) { + listEl.innerHTML = ''; + } else { + listEl.innerHTML = notifications.slice(0, 5).map(notification => ` + +
+
+ +
+
+
${notification.message}
+
${this.formatTime(notification.time)}
+
+
+
+ `).join(''); + } + } + + getNotificationIcon(type) { + const icons = { + success: 'fa-check-circle', + error: 'fa-exclamation-circle', + warning: 'fa-exclamation-triangle', + info: 'fa-info-circle' + }; + return icons[type] || 'fa-bell'; + } + + updateMonitorStatus(monitor) { + const indicator = this.container.querySelector('#status-indicator'); + const text = this.container.querySelector('#status-text'); + + if (!indicator || !text) return; + + if (monitor.status === 'running') { + indicator.className = 'fas fa-circle text-success'; + text.textContent = '监控运行中'; + } else { + indicator.className = 'fas fa-circle text-warning'; + text.textContent = '监控已停止'; + } + } + + updateUser(user) { + const avatar = this.container.querySelector('#user-avatar'); + const name = this.container.querySelector('#user-name'); + const role = this.container.querySelector('#user-role'); + + if (user && user.info) { + const initial = this.getInitial(user.info.name); + if (avatar) avatar.textContent = initial; + if (name) name.textContent = user.info.name; + if (role) role.textContent = user.info.role || '用户'; + } else { + if (avatar) avatar.textContent = 'U'; + if (name) name.textContent = '未登录'; + if (role) role.textContent = '访客'; + } + } + + getUserInitial() { + const user = store.getState('user.info'); + return user ? this.getInitial(user.name) : 'U'; + } + + getUserName() { + const user = store.getState('user.info'); + return user ? user.name : '未登录'; + } + + getUserRole() { + const user = store.getState('user.info'); + return user ? (user.role || '用户') : '访客'; + } + + getInitial(name) { + if (!name) return 'U'; + const chars = name.trim().split(/\s+/); + if (chars.length >= 2) { + return chars[0][0] + chars[chars.length - 1][0]; + } + return name[0].toUpperCase(); + } + + toggleSidebar() { + const sidebar = document.querySelector('.sidebar'); + const overlay = document.querySelector('.sidebar-overlay') || this.createOverlay(); + const isMobile = window.innerWidth <= 768; + + if (isMobile) { + // 移动端:切换显示 + toggleClass(sidebar, 'open'); + toggleClass(overlay, 'show'); + } else { + // 桌面端:切换折叠 + toggleClass(sidebar, 'collapsed'); + } + } + + createOverlay() { + const overlay = document.createElement('div'); + overlay.className = 'sidebar-overlay'; + overlay.addEventListener('click', () => { + this.toggleSidebar(); + }); + document.body.appendChild(overlay); + return overlay; + } + + formatTime(time) { + const date = new Date(time); + const now = new Date(); + const diff = now - date; + + if (diff < 60000) { + return '刚刚'; + } else if (diff < 3600000) { + return `${Math.floor(diff / 60000)}分钟前`; + } else if (diff < 86400000) { + return `${Math.floor(diff / 3600000)}小时前`; + } else { + return date.toLocaleDateString(); + } + } +} + +// 导出组件 +export default Navbar; \ No newline at end of file diff --git a/src/web/static/js/components/sidebar.js b/src/web/static/js/components/sidebar.js new file mode 100644 index 0000000..5854a53 --- /dev/null +++ b/src/web/static/js/components/sidebar.js @@ -0,0 +1,235 @@ +/** + * 侧边栏组件 + */ + +import { addClass, removeClass, hasClass, toggleClass } from '../core/utils.js'; +import router from '../core/router.js'; + +export class Sidebar { + constructor(container) { + this.container = typeof container === 'string' ? document.querySelector(container) : container; + this.collapsed = false; + this.init(); + } + + init() { + this.render(); + this.bindEvents(); + } + + render() { + this.container.innerHTML = ` + + `; + + // 初始化折叠状态 + const isCollapsed = localStorage.getItem('sidebar-collapsed') === 'true'; + if (isCollapsed) { + this.collapsed = true; + addClass(this.container.querySelector('#sidebar'), 'collapsed'); + } + } + + renderMenuItems() { + const menuItems = [ + { + path: '/', + icon: 'fas fa-tachometer-alt', + title: '仪表板', + badge: null + }, + { + path: '/workorders', + icon: 'fas fa-tasks', + title: '工单管理', + badge: 'workorders' + }, + { + path: '/alerts', + icon: 'fas fa-bell', + title: '预警管理', + badge: 'alerts' + }, + { + path: '/knowledge', + icon: 'fas fa-book', + title: '知识库', + badge: null + }, + { + path: '/chat', + icon: 'fas fa-comments', + title: '智能对话', + badge: null + }, + { + path: '/chat-http', + icon: 'fas fa-comment-dots', + title: 'HTTP对话', + badge: null + }, + { + path: '/monitoring', + icon: 'fas fa-chart-line', + title: '系统监控', + badge: null + }, + { + path: '/feishu', + icon: 'fab fa-lark', + title: '飞书同步', + badge: null + }, + { + path: '/agent', + icon: 'fas fa-robot', + title: '智能Agent', + badge: null + }, + { + path: '/vehicle', + icon: 'fas fa-car', + title: '车辆数据', + badge: null + }, + { + path: '/settings', + icon: 'fas fa-cog', + title: '系统设置', + badge: null + } + ]; + + return menuItems.map(item => ` + + + ${item.title} + ${item.badge ? `0` : ''} + + `).join(''); + } + + bindEvents() { + // 折叠切换 + const toggleBtn = this.container.querySelector('#sidebar-toggle'); + if (toggleBtn) { + toggleBtn.addEventListener('click', (e) => { + e.preventDefault(); + this.toggle(); + }); + } + + // 菜单项点击 + this.container.querySelectorAll('.sidebar-nav-item').forEach(item => { + item.addEventListener('click', (e) => { + e.preventDefault(); + const route = e.currentTarget.getAttribute('data-route'); + if (route) { + router.push(route); + } + + // 移动端点击后自动收起侧边栏 + if (window.innerWidth < 992 && !this.collapsed) { + this.toggle(); + } + }); + }); + + // 监听路由变化 + router.afterEach((to) => { + this.updateActiveMenu(to.path); + }); + + // 监听窗口大小变化 + window.addEventListener('resize', () => { + this.handleResize(); + }); + + // 初始化激活状态 + this.updateActiveMenu(window.location.pathname); + } + + toggle() { + const sidebar = this.container.querySelector('#sidebar'); + if (sidebar) { + this.collapsed = !this.collapsed; + toggleClass(sidebar, 'collapsed'); + localStorage.setItem('sidebar-collapsed', this.collapsed); + } + } + + expand() { + const sidebar = this.container.querySelector('#sidebar'); + if (sidebar && hasClass(sidebar, 'collapsed')) { + this.collapsed = false; + removeClass(sidebar, 'collapsed'); + localStorage.setItem('sidebar-collapsed', 'false'); + } + } + + collapse() { + const sidebar = this.container.querySelector('#sidebar'); + if (sidebar && !hasClass(sidebar, 'collapsed')) { + this.collapsed = true; + addClass(sidebar, 'collapsed'); + localStorage.setItem('sidebar-collapsed', 'true'); + } + } + + updateActiveMenu(path) { + this.container.querySelectorAll('.sidebar-nav-item').forEach(item => { + const route = item.getAttribute('data-route'); + if (route === path) { + addClass(item, 'active'); + } else { + removeClass(item, 'active'); + } + }); + } + + updateBadge(type, count) { + const badge = this.container.querySelector(`#sidebar-badge-${type}`); + if (badge) { + badge.textContent = count; + badge.style.display = count > 0 ? 'inline-block' : 'none'; + } + } + + handleResize() { + if (window.innerWidth >= 992) { + // 桌面端,恢复之前的折叠状态 + const isCollapsed = localStorage.getItem('sidebar-collapsed') === 'true'; + if (isCollapsed !== this.collapsed) { + if (isCollapsed) { + this.collapse(); + } else { + this.expand(); + } + } + } else { + // 移动端,默认收起 + if (!this.collapsed) { + this.collapse(); + } + } + } +} + +// 导出组件 +export default Sidebar; \ No newline at end of file diff --git a/src/web/static/js/core/api.js b/src/web/static/js/core/api.js new file mode 100644 index 0000000..a5bc081 --- /dev/null +++ b/src/web/static/js/core/api.js @@ -0,0 +1,472 @@ +/** + * API统一管理模块 + */ + +import { defaultConfig, debounce, storage, handleError } from './utils.js'; + +// API配置 +const config = { + ...defaultConfig, + timeout: 10000, // 请求超时时间 + retryTimes: 3, // 重试次数 + retryDelay: 1000 // 重试延迟 +}; + +// 请求拦截器 +const requestInterceptors = []; +const responseInterceptors = []; + +// 添加请求拦截器 +export function addRequestInterceptor(interceptor) { + requestInterceptors.push(interceptor); +} + +// 添加响应拦截器 +export function addResponseInterceptor(interceptor) { + responseInterceptors.push(interceptor); +} + +// 默认请求拦截器 +addRequestInterceptor(async (options) => { + // 添加认证头 + const token = storage.get('authToken'); + if (token) { + options.headers = { + ...options.headers, + 'Authorization': `Bearer ${token}` + }; + } + + // 添加用户信息头 + const userInfo = storage.get('userInfo'); + if (userInfo) { + options.headers = { + ...options.headers, + 'X-User-Name': userInfo.name || '', + 'X-User-Role': userInfo.role || '' + }; + } + + // 添加请求ID + options.headers = { + ...options.headers, + 'X-Request-ID': generateRequestId() + }; + + return options; +}); + +// 默认响应拦截器 +addResponseInterceptor(async (response) => { + // 处理通用错误 + if (response.status === 401) { + // 未授权,清除本地存储并跳转到登录页 + storage.remove('authToken'); + storage.remove('userInfo'); + window.location.href = '/login'; + throw new Error('未授权,请重新登录'); + } + + if (response.status >= 500) { + throw new Error('服务器错误,请稍后重试'); + } + + return response; +}); + +// 生成请求ID +function generateRequestId() { + return Date.now().toString(36) + Math.random().toString(36).substr(2); +} + +// 基础请求函数 +async function request(url, options = {}) { + // 合并配置 + const finalOptions = { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + ...options.headers + }, + ...options + }; + + // 执行请求拦截器 + for (const interceptor of requestInterceptors) { + Object.assign(finalOptions, await interceptor(finalOptions)); + } + + // 构建完整URL + const fullUrl = url.startsWith('http') ? url : `${config.apiBaseUrl}${url}`; + + // 创建AbortController用于超时控制 + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), config.timeout); + finalOptions.signal = controller.signal; + + try { + let lastError; + + // 重试机制 + for (let i = 0; i <= config.retryTimes; i++) { + try { + const response = await fetch(fullUrl, finalOptions); + + // 执行响应拦截器 + let processedResponse = response; + for (const interceptor of responseInterceptors) { + processedResponse = await interceptor(processedResponse); + } + + // 解析响应 + const data = await parseResponse(processedResponse); + + // 如果响应表示失败,抛出错误 + if (data.code && data.code !== 200) { + throw new Error(data.message || '请求失败'); + } + + return data; + } catch (error) { + lastError = error; + + // 如果是网络错误或超时,且还有重试次数,则延迟后重试 + if (i < config.retryTimes && (error.name === 'TypeError' || error.name === 'AbortError')) { + await new Promise(resolve => setTimeout(resolve, config.retryDelay * Math.pow(2, i))); + continue; + } + + // 其他错误直接抛出 + throw error; + } + } + + throw lastError; + } catch (error) { + handleError(error, `API Request: ${finalOptions.method} ${url}`); + throw error; + } finally { + clearTimeout(timeoutId); + } +} + +// 解析响应 +async function parseResponse(response) { + const contentType = response.headers.get('content-type'); + + if (contentType && contentType.includes('application/json')) { + return await response.json(); + } else if (contentType && contentType.includes('text/')) { + return { + code: response.ok ? 200 : response.status, + data: await response.text(), + message: response.statusText + }; + } else { + return { + code: response.ok ? 200 : response.status, + data: await response.blob(), + message: response.statusText + }; + } +} + +// HTTP方法封装 +export const http = { + get(url, params = {}, options = {}) { + const queryString = new URLSearchParams(params).toString(); + const fullUrl = queryString ? `${url}?${queryString}` : url; + return request(fullUrl, { ...options, method: 'GET' }); + }, + + post(url, data = {}, options = {}) { + return request(url, { + ...options, + method: 'POST', + body: JSON.stringify(data) + }); + }, + + put(url, data = {}, options = {}) { + return request(url, { + ...options, + method: 'PUT', + body: JSON.stringify(data) + }); + }, + + patch(url, data = {}, options = {}) { + return request(url, { + ...options, + method: 'PATCH', + body: JSON.stringify(data) + }); + }, + + delete(url, options = {}) { + return request(url, { ...options, method: 'DELETE' }); + }, + + upload(url, formData, options = {}) { + return request(url, { + ...options, + method: 'POST', + headers: { + // 不要设置Content-Type,让浏览器自动设置multipart/form-data + }, + body: formData + }); + }, + + download(url, params = {}, options = {}) { + const queryString = new URLSearchParams(params).toString(); + const fullUrl = queryString ? `${url}?${queryString}` : url; + + return request(fullUrl, { + ...options, + method: 'GET' + }).then(response => { + // 创建下载链接 + const blob = response.data; + const downloadUrl = window.URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = downloadUrl; + + // 从响应头获取文件名 + const contentDisposition = response.headers?.get('content-disposition'); + if (contentDisposition) { + const filename = contentDisposition.match(/filename="?([^"]+)"?/); + link.download = filename ? filename[1] : 'download'; + } + + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + window.URL.revokeObjectURL(downloadUrl); + + return response; + }); + } +}; + +// API接口定义 +export const api = { + // 系统相关 + system: { + health: () => http.get('/health'), + info: () => http.get('/system/info'), + settings: () => http.get('/settings'), + saveSettings: (data) => http.post('/settings', data) + }, + + // 工单管理 + workorders: { + list: (params) => http.get('/workorders', params), + create: (data) => http.post('/workorders', data), + get: (id) => http.get(`/workorders/${id}`), + update: (id, data) => http.put(`/workorders/${id}`, data), + delete: (id) => http.delete(`/workorders/${id}`), + dispatch: (id, module) => http.post(`/workorders/${id}/dispatch`, { target_module: module }), + suggestModule: (id) => http.post(`/workorders/${id}/suggest-module`), + aiSuggestion: (id) => http.post(`/workorders/${id}/ai-suggestion`), + humanResolution: (id, data) => http.post(`/workorders/${id}/human-resolution`, data), + approveToKnowledge: (id, data) => http.post(`/workorders/${id}/approve-to-knowledge`, data), + processHistory: (id) => http.get(`/workorders/${id}/process-history`), + addProcessHistory: (id, data) => http.post(`/workorders/${id}/process-history`, data), + import: (file) => { + const formData = new FormData(); + formData.append('file', file); + return http.upload('/workorders/import', formData); + }, + export: (params) => http.download('/workorders/export', params), + getTemplate: () => http.get('/workorders/import/template'), + downloadTemplate: () => http.download('/workorders/import/template/file'), + modules: () => http.get('/workorders/modules'), + byStatus: (status) => http.get(`/workorders/by-status/${status}`), + batchDelete: (ids) => http.post('/batch-delete/workorders', { ids }) + }, + + // 对话管理 + conversations: { + list: (params) => http.get('/conversations', params), + get: (id) => http.get(`/conversations/${id}`), + delete: (id) => http.delete(`/conversations/${id}`), + clear: () => http.delete('/conversations/clear'), + search: (params) => http.get('/conversations/search', params), + analytics: () => http.get('/conversations/analytics'), + migrateMerge: (data) => http.post('/conversations/migrate-merge', data), + timeline: (workOrderId, params) => http.get(`/conversations/workorder/${workOrderId}/timeline`, params), + context: (workOrderId) => http.get(`/conversations/workorder/${workOrderId}/context`), + summary: (workOrderId) => http.get(`/conversations/workorder/${workOrderId}/summary`) + }, + + // 聊天接口 + chat: { + createSession: (data) => http.post('/chat/session', data), + sendMessage: (data) => http.post('/chat/message', data), + getHistory: (sessionId) => http.get(`/chat/history/${sessionId}`), + createWorkOrder: (data) => http.post('/chat/work-order', data), + getWorkOrderStatus: (workOrderId) => http.get(`/chat/work-order/${workOrderId}`), + endSession: (sessionId) => http.delete(`/chat/session/${sessionId}`), + sessions: () => http.get('/chat/sessions') + }, + + // 知识库 + knowledge: { + list: (params) => http.get('/knowledge', params), + search: (params) => http.get('/knowledge/search', params), + create: (data) => http.post('/knowledge', data), + get: (id) => http.get(`/knowledge/${id}`), + update: (id, data) => http.put(`/knowledge/${id}`, data), + delete: (id) => http.delete(`/knowledge/delete/${id}`), + verify: (id) => http.post(`/knowledge/verify/${id}`), + unverify: (id) => http.post(`/knowledge/unverify/${id}`), + stats: () => http.get('/knowledge/stats'), + upload: (file, data) => { + const formData = new FormData(); + formData.append('file', file); + Object.keys(data).forEach(key => { + formData.append(key, data[key]); + }); + return http.upload('/knowledge/upload', formData); + }, + byStatus: (status) => http.get(`/knowledge/by-status/${status}`), + batchDelete: (ids) => http.post('/batch-delete/knowledge', { ids }) + }, + + // 预警管理 + alerts: { + list: (params) => http.get('/alerts', params), + create: (data) => http.post('/alerts', data), + get: (id) => http.get(`/alerts/${id}`), + update: (id, data) => http.put(`/alerts/${id}`, data), + delete: (id) => http.delete(`/alerts/${id}`), + resolve: (id, data) => http.post(`/alerts/${id}/resolve`, data), + statistics: () => http.get('/alerts/statistics'), + byLevel: (level) => http.get(`/alerts/by-level/${level}`), + batchDelete: (ids) => http.post('/batch-delete/alerts', { ids }) + }, + + // 预警规则 + rules: { + list: () => http.get('/rules'), + create: (data) => http.post('/rules', data), + update: (name, data) => http.put(`/rules/${name}`, data), + delete: (name) => http.delete(`/rules/${name}`) + }, + + // 监控管理 + monitor: { + start: () => http.post('/monitor/start'), + stop: () => http.post('/monitor/stop'), + status: () => http.get('/monitor/status'), + checkAlerts: () => http.post('/check-alerts'), + analytics: (params) => http.get('/analytics', params) + }, + + // Token监控 + tokenMonitor: { + stats: () => http.get('/token-monitor/stats'), + chart: (params) => http.get('/token-monitor/chart', params), + records: (params) => http.get('/token-monitor/records', params), + settings: (data) => http.post('/token-monitor/settings', data), + export: (params) => http.download('/token-monitor/export', params) + }, + + // AI监控 + aiMonitor: { + stats: () => http.get('/ai-monitor/stats'), + modelComparison: () => http.get('/ai-monitor/model-comparison'), + errorDistribution: () => http.get('/ai-monitor/error-distribution'), + errorLog: (params) => http.get('/ai-monitor/error-log', params), + clearErrorLog: () => http.delete('/ai-monitor/error-log') + }, + + // Agent相关 + agent: { + status: () => http.get('/agent/status'), + toggle: () => http.post('/agent/toggle'), + chat: (data) => http.post('/agent/chat', data), + actionHistory: () => http.get('/agent/action-history'), + clearHistory: () => http.post('/agent/clear-history'), + tools: { + stats: () => http.get('/agent/tools/stats'), + execute: (data) => http.post('/agent/tools/execute', data), + register: (data) => http.post('/agent/tools/register', data), + unregister: (name) => http.delete(`/agent/tools/unregister/${name}`) + }, + monitoring: { + start: () => http.post('/agent/monitoring/start'), + stop: () => http.post('/agent/monitoring/stop'), + proactiveCheck: () => http.post('/agent/proactive-monitoring'), + intelligentAnalysis: () => http.post('/agent/intelligent-analysis') + }, + llmStats: () => http.get('/agent/llm-stats'), + triggerSample: () => http.post('/agent/trigger-sample') + }, + + // 车辆数据 + vehicle: { + data: (params) => http.get('/vehicle/data', params), + latestById: (id) => http.get(`/vehicle/data/${id}/latest`), + latestByVin: (vin) => http.get(`/vehicle/data/vin/${vin}/latest`), + summary: (id) => http.get(`/vehicle/data/${id}/summary`), + add: (data) => http.post('/vehicle/data', data), + initSample: () => http.post('/vehicle/init-sample-data') + }, + + // 飞书同步 + feishu: { + config: { + get: () => http.get('/feishu-sync/config'), + save: (data) => http.post('/feishu-sync/config', data) + }, + testConnection: () => http.get('/feishu-sync/test-connection'), + checkPermissions: () => http.get('/feishu-sync/check-permissions'), + syncFromFeishu: (data) => http.post('/feishu-sync/sync-from-feishu', data), + syncToFeishu: (workOrderId) => http.post(`/feishu-sync/sync-to-feishu/${workOrderId}`), + status: () => http.get('/feishu-sync/status'), + createWorkorder: (data) => http.post('/feishu-sync/create-workorder', data), + fieldMapping: { + status: () => http.get('/feishu-sync/field-mapping/status'), + discover: () => http.post('/feishu-sync/field-mapping/discover'), + add: (data) => http.post('/feishu-sync/field-mapping/add', data), + remove: (data) => http.post('/feishu-sync/field-mapping/remove', data) + }, + previewData: (params) => http.get('/feishu-sync/preview-feishu-data', params), + config: { + export: () => http.download('/feishu-sync/config/export'), + import: (file) => { + const formData = new FormData(); + formData.append('file', file); + return http.upload('/feishu-sync/config/import', formData); + }, + reset: () => http.post('/feishu-sync/config/reset') + } + }, + + // 系统优化 + systemOptimizer: { + status: () => http.get('/system-optimizer/status'), + optimizeCpu: () => http.post('/system-optimizer/optimize-cpu'), + optimizeMemory: () => http.post('/system-optimizer/optimize-memory'), + optimizeDisk: () => http.post('/system-optimizer/optimize-disk'), + clearCache: () => http.post('/system-optimizer/clear-cache'), + optimizeAll: () => http.post('/system-optimizer/optimize-all'), + securitySettings: (data) => http.post('/system-optimizer/security-settings', data), + trafficSettings: (data) => http.post('/system-optimizer/traffic-settings', data), + costSettings: (data) => http.post('/system-optimizer/cost-settings', data), + healthCheck: () => http.post('/system-optimizer/health-check') + }, + + // 数据库备份 + backup: { + info: () => http.get('/backup/info'), + create: (data) => http.post('/backup/create', data), + restore: (data) => http.post('/backup/restore', data) + } +}; + +// 导出默认配置和请求方法 +export { config }; +export default { http, api, config }; \ No newline at end of file diff --git a/src/web/static/js/core/router.js b/src/web/static/js/core/router.js new file mode 100644 index 0000000..2b9ac81 --- /dev/null +++ b/src/web/static/js/core/router.js @@ -0,0 +1,466 @@ +/** + * 路由管理模块 + */ + +import { parseQueryString, serializeQueryString } from './utils.js'; +import store from './store.js'; + +// 路由配置 +class Router { + constructor() { + this.routes = new Map(); + this.currentRoute = null; + this.beforeEachHooks = []; + this.afterEachHooks = []; + this.mode = 'history'; // 'history' 或 'hash' + this.base = '/'; + this.fallback = true; + + // 绑定事件处理器 + this.handlePopState = this.handlePopState.bind(this); + this.handleHashChange = this.handleHashChange.bind(this); + } + + // 配置路由 + config(options = {}) { + if (options.mode) this.mode = options.mode; + if (options.base) this.base = options.base; + if (options.fallback !== undefined) this.fallback = options.fallback; + return this; + } + + // 添加路由 + addRoute(path, component, options = {}) { + const route = { + path, + component, + name: options.name || path, + meta: options.meta || {}, + props: options.props || false, + children: options.children || [], + beforeEnter: options.beforeEnter + }; + + // 转换路径为正则表达式 + route.regex = this.pathToRegex(path); + route.keys = []; + + // 提取动态参数 + const paramNames = path.match(/:\w+/g); + if (paramNames) { + route.keys = paramNames.map(name => name.slice(1)); + } + + this.routes.set(path, route); + return this; + } + + // 批量添加路由 + addRoutes(routes) { + routes.forEach(route => { + this.addRoute(route.path, route.component, route); + }); + return this; + } + + // 路径转正则 + pathToRegex(path) { + const regexPath = path + .replace(/\//g, '\\/') + .replace(/:\w+/g, '([^\\/]+)') + .replace(/\*/g, '(.*)'); + return new RegExp(`^${regexPath}$`); + } + + // 匹配路由 + match(path) { + for (const [routePath, route] of this.routes) { + const match = path.match(route.regex); + if (match) { + const params = {}; + route.keys.forEach((key, index) => { + params[key] = match[index + 1]; + }); + + return { + route, + params, + path, + query: this.parseQuery(path) + }; + } + } + + // 404处理 + return { + route: { path: '/404', component: 'notfound' }, + params: {}, + path, + query: {} + }; + } + + // 解析查询字符串 + parseQuery(path) { + const queryIndex = path.indexOf('?'); + if (queryIndex === -1) return {}; + + const queryString = path.slice(queryIndex + 1); + return parseQueryString(queryString); + } + + // 构建路径 + buildPath(route, params = {}, query = {}) { + let path = route.path; + + // 替换动态参数 + Object.keys(params).forEach(key => { + path = path.replace(`:${key}`, params[key]); + }); + + // 添加查询字符串 + const queryString = serializeQueryString(query); + if (queryString) { + path += `?${queryString}`; + } + + return path; + } + + // 导航到指定路径 + push(path, data = {}) { + return this.navigateTo(path, 'push', data); + } + + // 替换当前路径 + replace(path, data = {}) { + return this.navigateTo(path, 'replace', data); + } + + // 返回上一页 + go(n) { + window.history.go(n); + } + + // 返回 + back() { + this.go(-1); + } + + // 前进 + forward() { + this.go(1); + } + + // 执行导航 + async navigateTo(path, type = 'push', data = {}) { + // 匹配路由 + const matched = this.match(path); + + // 创建路由对象 + const route = { + path: matched.path, + name: matched.route.name, + params: matched.params, + query: matched.query, + meta: matched.route.meta, + hash: this.parseHash(path), + ...data + }; + + // 执行前置守卫 + const guards = [...this.beforeEachHooks, matched.route.beforeEnter].filter(Boolean); + for (const guard of guards) { + const result = await guard(route, this.currentRoute); + if (result === false) { + return Promise.reject(new Error('Navigation cancelled')); + } + if (typeof result === 'string') { + return this.navigateTo(result, type, data); + } + if (result && typeof result === 'object') { + return this.navigateTo(result.path || result, type, result); + } + } + + // 保存当前路由 + const prevRoute = this.currentRoute; + this.currentRoute = route; + + // 更新URL + this.updateURL(path, type); + + // 执行后置守卫 + this.afterEachHooks.forEach(hook => { + try { + hook(route, prevRoute); + } catch (error) { + console.error('After each hook error:', error); + } + }); + + // 更新store + store.commit('SET_CURRENT_ROUTE', route); + + return route; + } + + // 更新URL + updateURL(path, type) { + if (this.mode === 'history') { + const url = this.base === '/' ? path : `${this.base}${path}`.replace('//', '/'); + if (type === 'replace') { + window.history.replaceState({ path }, '', url); + } else { + window.history.pushState({ path }, '', url); + } + } else { + const hash = this.mode === 'hash' ? `#${path}` : `#${this.base}${path}`.replace('//', '/'); + if (type === 'replace') { + window.location.replace(hash); + } else { + window.location.hash = hash; + } + } + } + + // 解析hash + parseHash(path) { + const hashIndex = path.indexOf('#'); + return hashIndex === -1 ? '' : path.slice(hashIndex + 1); + } + + // 处理popstate事件 + handlePopState(event) { + if (event.state && event.state.path) { + this.navigateTo(event.state.path, 'push', { replace: true }); + } else { + const path = this.getCurrentPath(); + this.navigateTo(path, 'push', { replace: true }); + } + } + + // 处理hashchange事件 + handleHashChange() { + const path = this.getCurrentPath(); + this.navigateTo(path, 'push', { replace: true }); + } + + // 获取当前路径 + getCurrentPath() { + if (this.mode === 'history') { + const path = window.location.pathname; + return path.startsWith(this.base) ? path.slice(this.base.length) : path; + } else { + const hash = window.location.hash.slice(1); + return hash.startsWith(this.base) ? hash.slice(this.base.length) : hash; + } + } + + // 全局前置守卫 + beforeEach(hook) { + this.beforeEachHooks.push(hook); + } + + // 全局后置守卫 + afterEach(hook) { + this.afterEachHooks.push(hook); + } + + // 启动路由 + start() { + // 监听事件 + if (this.mode === 'history') { + window.addEventListener('popstate', this.handlePopState); + } else { + window.addEventListener('hashchange', this.handleHashChange); + } + + // 处理初始路由 + const path = this.getCurrentPath(); + this.navigateTo(path, 'push', { replace: true }); + + // 拦截链接点击 + this.interceptLinks(); + + return this; + } + + // 拦截链接 + interceptLinks() { + document.addEventListener('click', (e) => { + const link = e.target.closest('a'); + if (!link) return; + + const href = link.getAttribute('href'); + if (!href || href.startsWith('http') || href.startsWith('mailto:') || href.startsWith('tel:')) { + return; + } + + e.preventDefault(); + this.push(href); + }); + } + + // 停止路由 + stop() { + window.removeEventListener('popstate', this.handlePopState); + window.removeEventListener('hashchange', this.handleHashChange); + return this; + } +} + +// 创建路由实例 +export const router = new Router(); + +// 路由配置 +router.config({ + mode: 'history', + base: '/', + fallback: true +}); + +// 添加路由 +router.addRoutes([ + { + path: '/', + name: 'dashboard', + component: 'Dashboard', + meta: { title: '仪表板', icon: 'fas fa-tachometer-alt' } + }, + { + path: '/workorders', + name: 'workorders', + component: 'WorkOrders', + meta: { title: '工单管理', icon: 'fas fa-tasks' } + }, + { + path: '/workorders/:id', + name: 'workorder-detail', + component: 'WorkOrderDetail', + meta: { title: '工单详情' } + }, + { + path: '/alerts', + name: 'alerts', + component: 'Alerts', + meta: { title: '预警管理', icon: 'fas fa-bell' } + }, + { + path: '/knowledge', + name: 'knowledge', + component: 'Knowledge', + meta: { title: '知识库', icon: 'fas fa-book' } + }, + { + path: '/knowledge/:id', + name: 'knowledge-detail', + component: 'KnowledgeDetail', + meta: { title: '知识详情' } + }, + { + path: '/chat', + name: 'chat', + component: 'Chat', + meta: { title: '智能对话', icon: 'fas fa-comments' } + }, + { + path: '/chat-http', + name: 'chat-http', + component: 'ChatHttp', + meta: { title: '对话(HTTP)', icon: 'fas fa-comment-dots' } + }, + { + path: '/monitoring', + name: 'monitoring', + component: 'Monitoring', + meta: { title: '系统监控', icon: 'fas fa-chart-line' } + }, + { + path: '/settings', + name: 'settings', + component: 'Settings', + meta: { title: '系统设置', icon: 'fas fa-cog' } + }, + { + path: '/feishu', + name: 'feishu', + component: 'Feishu', + meta: { title: '飞书同步', icon: 'fab fa-lark' } + }, + { + path: '/agent', + name: 'agent', + component: 'Agent', + meta: { title: '智能Agent', icon: 'fas fa-robot' } + }, + { + path: '/vehicle', + name: 'vehicle', + component: 'Vehicle', + meta: { title: '车辆数据', icon: 'fas fa-car' } + }, + { + path: '/profile', + name: 'profile', + component: 'Profile', + meta: { title: '个人资料' } + }, + { + path: '/login', + name: 'login', + component: 'Login', + meta: { title: '登录', requiresAuth: false } + }, + { + path: '/404', + name: '404', + component: 'notfound', + meta: { title: '页面未找到' } + }, + { + path: '*', + redirect: '/404' + } +]); + +// 全局前置守卫 +router.beforeEach((to, from) => { + // 设置页面标题 + if (to.meta.title) { + document.title = `${to.meta.title} - TSP智能助手`; + } + + // 权限检查 + if (to.meta.requiresAuth !== false && !store.getState('user.isLogin')) { + return '/login'; + } + + // 管理员权限检查 + if (to.meta.requiresAdmin && !store.getState('user.info.isAdmin')) { + return '/403'; + } +}); + +// 导出路由实例和辅助函数 +export function push(path, data) { + return router.push(path, data); +} + +export function replace(path, data) { + return router.replace(path, data); +} + +export function go(n) { + return router.go(n); +} + +export function back() { + return router.back(); +} + +export function forward() { + return router.forward(); +} + +export default router; \ No newline at end of file diff --git a/src/web/static/js/core/store.js b/src/web/static/js/core/store.js new file mode 100644 index 0000000..0d2b3f7 --- /dev/null +++ b/src/web/static/js/core/store.js @@ -0,0 +1,203 @@ +/** + * 全局状态管理 + * 集中管理应用状态,避免状态分散 + */ + +class Store { + constructor() { + this.state = { + // 预警相关 + alerts: [], + alertFilters: { + level: 'all', + type: 'all', + status: 'all' + }, + alertStats: { + total: 0, + critical: 0, + warning: 0, + info: 0 + }, + + // 规则相关 + rules: [], + + // 系统状态 + health: {}, + monitorStatus: 'unknown', + + // Agent相关 + agentStatus: { + status: 'inactive', + active_goals: 0, + available_tools: 0 + }, + agentHistory: [], + + // 车辆数据 + vehicleData: [], + + // UI状态 + loading: false, + notifications: [] + }; + + this.listeners = []; + this.debounceTimers = new Map(); + } + + // 获取状态 + getState() { + return { ...this.state }; + } + + // 更新状态 + setState(updates) { + const prevState = { ...this.state }; + this.state = { ...this.state, ...updates }; + + // 通知监听器 + this.notifyListeners(prevState, this.state); + } + + // 订阅状态变化 + subscribe(listener) { + this.listeners.push(listener); + return () => { + this.listeners = this.listeners.filter(l => l !== listener); + }; + } + + // 通知监听器 + notifyListeners(prevState, newState) { + this.listeners.forEach(listener => { + try { + listener(prevState, newState); + } catch (error) { + console.error('状态监听器错误:', error); + } + }); + } + + // 防抖更新状态 + setStateDebounced(updates, delay = 300) { + const key = JSON.stringify(updates); + + if (this.debounceTimers.has(key)) { + clearTimeout(this.debounceTimers.get(key)); + } + + this.debounceTimers.set(key, setTimeout(() => { + this.setState(updates); + this.debounceTimers.delete(key); + }, delay)); + } + + // 预警相关方法 + updateAlerts(alerts) { + this.setState({ alerts }); + + // 更新统计信息 + const stats = { + total: alerts.length, + critical: alerts.filter(a => a.level === 'critical').length, + warning: alerts.filter(a => a.level === 'warning').length, + info: alerts.filter(a => a.level === 'info').length + }; + this.setState({ alertStats: stats }); + } + + updateAlertFilters(filters) { + this.setState({ alertFilters: { ...this.state.alertFilters, ...filters } }); + } + + // 规则相关方法 + updateRules(rules) { + this.setState({ rules }); + } + + // 系统状态相关方法 + updateHealth(health) { + this.setState({ health }); + } + + updateMonitorStatus(status) { + this.setState({ monitorStatus: status }); + } + + // Agent相关方法 + updateAgentStatus(status) { + this.setState({ agentStatus: status }); + } + + updateAgentHistory(history) { + this.setState({ agentHistory: history }); + } + + // 车辆数据相关方法 + updateVehicleData(data) { + this.setState({ vehicleData: data }); + } + + // UI状态相关方法 + setLoading(loading) { + this.setState({ loading }); + } + + // 通知相关方法 + addNotification(notification) { + const notifications = [...this.state.notifications, { + id: Date.now(), + timestamp: new Date(), + ...notification + }]; + this.setState({ notifications }); + + // 3秒后自动移除 + setTimeout(() => { + this.removeNotification(notification.id || notifications[notifications.length - 1].id); + }, 3000); + } + + removeNotification(id) { + const notifications = this.state.notifications.filter(n => n.id !== id); + this.setState({ notifications }); + } + + // 获取过滤后的预警 + getFilteredAlerts() { + const { alerts, alertFilters } = this.state; + + return alerts.filter(alert => { + if (alertFilters.level !== 'all' && alert.level !== alertFilters.level) return false; + if (alertFilters.type !== 'all' && alert.alert_type !== alertFilters.type) return false; + if (alertFilters.status !== 'all' && alert.status !== alertFilters.status) return false; + return true; + }); + } + + // 获取排序后的预警 + getSortedAlerts(sortBy = 'timestamp', sortOrder = 'desc') { + const filtered = this.getFilteredAlerts(); + + return filtered.sort((a, b) => { + let aVal = a[sortBy]; + let bVal = b[sortBy]; + + if (sortBy === 'timestamp') { + aVal = new Date(aVal); + bVal = new Date(bVal); + } + + if (sortOrder === 'asc') { + return aVal > bVal ? 1 : -1; + } else { + return aVal < bVal ? 1 : -1; + } + }); + } +} + +// 创建全局状态管理实例 +const store = new Store(); \ No newline at end of file diff --git a/src/web/static/js/core/utils.js b/src/web/static/js/core/utils.js new file mode 100644 index 0000000..4b0271f --- /dev/null +++ b/src/web/static/js/core/utils.js @@ -0,0 +1,431 @@ +/** + * 工具函数集合 + */ + +// 防抖函数 +export function debounce(func, wait) { + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; +} + +// 节流函数 +export function throttle(func, limit) { + let inThrottle; + return function(...args) { + if (!inThrottle) { + func.apply(this, args); + inThrottle = true; + setTimeout(() => inThrottle = false, limit); + } + }; +} + +// 格式化日期 +export function formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') { + if (!date) return ''; + + const d = new Date(date); + const year = d.getFullYear(); + const month = String(d.getMonth() + 1).padStart(2, '0'); + const day = String(d.getDate()).padStart(2, '0'); + const hours = String(d.getHours()).padStart(2, '0'); + const minutes = String(d.getMinutes()).padStart(2, '0'); + const seconds = String(d.getSeconds()).padStart(2, '0'); + + return format + .replace('YYYY', year) + .replace('MM', month) + .replace('DD', day) + .replace('HH', hours) + .replace('mm', minutes) + .replace('ss', seconds); +} + +// 相对时间格式化 +export function formatRelativeTime(date) { + if (!date) return ''; + + const now = new Date(); + const target = new Date(date); + const diff = now - target; + + const seconds = Math.floor(diff / 1000); + const minutes = Math.floor(seconds / 60); + const hours = Math.floor(minutes / 60); + const days = Math.floor(hours / 24); + + if (days > 30) { + return formatDate(date, 'YYYY-MM-DD'); + } else if (days > 0) { + return `${days}天前`; + } else if (hours > 0) { + return `${hours}小时前`; + } else if (minutes > 0) { + return `${minutes}分钟前`; + } else { + return '刚刚'; + } +} + +// 文件大小格式化 +export function formatFileSize(bytes) { + if (bytes === 0) return '0 B'; + + const k = 1024; + const sizes = ['B', 'KB', 'MB', 'GB', 'TB']; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + + return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; +} + +// 数字千分位格式化 +export function formatNumber(num) { + return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); +} + +// 深拷贝 +export function deepClone(obj) { + if (obj === null || typeof obj !== 'object') { + return obj; + } + + if (obj instanceof Date) { + return new Date(obj.getTime()); + } + + if (obj instanceof Array) { + return obj.map(item => deepClone(item)); + } + + if (typeof obj === 'object') { + const clonedObj = {}; + for (const key in obj) { + if (obj.hasOwnProperty(key)) { + clonedObj[key] = deepClone(obj[key]); + } + } + return clonedObj; + } +} + +// 生成唯一ID +export function generateId(prefix = '') { + const timestamp = Date.now().toString(36); + const randomStr = Math.random().toString(36).substr(2, 5); + return `${prefix}${timestamp}${randomStr}`; +} + +// 查询参数解析 +export function parseQueryString(queryString) { + const params = new URLSearchParams(queryString); + const result = {}; + + for (const [key, value] of params) { + result[key] = value; + } + + return result; +} + +// 查询参数序列化 +export function serializeQueryString(params) { + return Object.entries(params) + .filter(([_, value]) => value !== undefined && value !== null) + .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`) + .join('&'); +} + +// 获取查询参数 +export function getQueryParam(name) { + const params = new URLSearchParams(window.location.search); + return params.get(name); +} + +// 设置查询参数 +export function setQueryParam(name, value) { + const params = new URLSearchParams(window.location.search); + params.set(name, value); + const newUrl = `${window.location.pathname}?${params.toString()}${window.location.hash}`; + window.history.replaceState(null, '', newUrl); +} + +// 删除查询参数 +export function removeQueryParam(name) { + const params = new URLSearchParams(window.location.search); + params.delete(name); + const newUrl = `${window.location.pathname}${params.toString() ? '?' + params.toString() : ''}${window.location.hash}`; + window.history.replaceState(null, '', newUrl); +} + +// 本地存储封装 +export const storage = { + set(key, value, isSession = false) { + try { + const storage = isSession ? sessionStorage : localStorage; + storage.setItem(key, JSON.stringify(value)); + } catch (e) { + console.error('Storage set error:', e); + } + }, + + get(key, defaultValue = null, isSession = false) { + try { + const storage = isSession ? sessionStorage : localStorage; + const item = storage.getItem(key); + return item ? JSON.parse(item) : defaultValue; + } catch (e) { + console.error('Storage get error:', e); + return defaultValue; + } + }, + + remove(key, isSession = false) { + try { + const storage = isSession ? sessionStorage : localStorage; + storage.removeItem(key); + } catch (e) { + console.error('Storage remove error:', e); + } + }, + + clear(isSession = false) { + try { + const storage = isSession ? sessionStorage : localStorage; + storage.clear(); + } catch (e) { + console.error('Storage clear error:', e); + } + } +}; + +// Cookie操作 +export const cookie = { + set(name, value, days = 7) { + const date = new Date(); + date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); + const expires = `expires=${date.toUTCString()}`; + document.cookie = `${name}=${value};${expires};path=/`; + }, + + get(name) { + const nameEQ = `${name}=`; + const ca = document.cookie.split(';'); + for (let c of ca) { + while (c.charAt(0) === ' ') { + c = c.substring(1); + } + if (c.indexOf(nameEQ) === 0) { + return c.substring(nameEQ.length, c.length); + } + } + return null; + }, + + remove(name) { + document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/;`; + } +}; + +// 类名操作 +export function addClass(element, className) { + if (element.classList) { + element.classList.add(className); + } else { + element.className += ` ${className}`; + } +} + +export function removeClass(element, className) { + if (element.classList) { + element.classList.remove(className); + } else { + element.className = element.className.replace( + new RegExp(`(^|\\b)${className.split(' ').join('|')}(\\b|$)`, 'gi'), + ' ' + ); + } +} + +export function hasClass(element, className) { + if (element.classList) { + return element.classList.contains(className); + } else { + return new RegExp(`(^| )${className}( |$)`, 'gi').test(element.className); + } +} + +export function toggleClass(element, className) { + if (hasClass(element, className)) { + removeClass(element, className); + } else { + addClass(element, className); + } +} + +// 事件委托 +export function delegate(parent, selector, event, handler) { + parent.addEventListener(event, function(e) { + if (e.target.matches(selector)) { + handler(e); + } + }); +} + +// DOM就绪 +export function ready(fn) { + if (document.readyState !== 'loading') { + fn(); + } else { + document.addEventListener('DOMContentLoaded', fn); + } +} + +// 动画帧 +export const raf = window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + function(callback) { return setTimeout(callback, 1000 / 60); }; + +export const caf = window.cancelAnimationFrame || + window.webkitCancelAnimationFrame || + window.mozCancelAnimationFrame || + function(id) { clearTimeout(id); }; + +// 错误处理 +export function handleError(error, context = '') { + console.error(`Error in ${context}:`, error); + + // 发送错误到服务器(可选) + if (window.errorReporting) { + window.errorReporting.report(error, context); + } + + // 显示用户友好的错误信息 + showToast('发生错误,请稍后重试', 'error'); +} + +// 安全的JSON解析 +export function safeJsonParse(str, defaultValue = null) { + try { + return JSON.parse(str); + } catch (e) { + return defaultValue; + } +} + +// XSS防护 - HTML转义 +export function escapeHtml(text) { + const map = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + return text.replace(/[&<>"']/g, m => map[m]); +} + +// 验证函数 +export const validators = { + email: (email) => { + const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + return re.test(email); + }, + + phone: (phone) => { + const re = /^1[3-9]\d{9}$/; + return re.test(phone); + }, + + url: (url) => { + try { + new URL(url); + return true; + } catch { + return false; + } + }, + + idCard: (idCard) => { + const re = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; + return re.test(idCard); + } +}; + +// URL构建器 +export class URLBuilder { + constructor(baseURL = '') { + this.baseURL = baseURL; + this.params = {}; + } + + path(path) { + this.baseURL = this.baseURL.replace(/\/$/, '') + '/' + path.replace(/^\//, ''); + return this; + } + + query(key, value) { + if (value !== undefined && value !== null) { + this.params[key] = value; + } + return this; + } + + build() { + const queryString = serializeQueryString(this.params); + return queryString ? `${this.baseURL}?${queryString}` : this.baseURL; + } +} + +// 图片压缩 +export function compressImage(file, options = {}) { + const { + maxWidth = 800, + maxHeight = 800, + quality = 0.8, + mimeType = 'image/jpeg' + } = options; + + return new Promise((resolve) => { + const canvas = document.createElement('canvas'); + const ctx = canvas.getContext('2d'); + const img = new Image(); + + img.onload = () => { + // 计算新尺寸 + let { width, height } = img; + + if (width > maxWidth || height > maxHeight) { + const ratio = Math.min(maxWidth / width, maxHeight / height); + width *= ratio; + height *= ratio; + } + + canvas.width = width; + canvas.height = height; + + // 绘制并压缩 + ctx.drawImage(img, 0, 0, width, height); + canvas.toBlob(resolve, mimeType, quality); + }; + + img.src = URL.createObjectURL(file); + }); +} + +// 导出默认配置 +export const defaultConfig = { + apiBaseUrl: '/api', + wsUrl: `ws://${window.location.host}:8765`, + toastDuration: 3000, + paginationSize: 10, + debounceDelay: 300, + throttleDelay: 100 +}; \ No newline at end of file diff --git a/src/web/static/js/core/websocket.js b/src/web/static/js/core/websocket.js new file mode 100644 index 0000000..2204074 --- /dev/null +++ b/src/web/static/js/core/websocket.js @@ -0,0 +1,441 @@ +/** + * WebSocket管理模块 + */ + +import { defaultConfig, storage, debounce } from './utils.js'; +import store from './store.js'; + +// WebSocket配置 +const config = { + ...defaultConfig, + reconnectInterval: 3000, // 重连间隔 + maxReconnectAttempts: 5, // 最大重连次数 + heartbeatInterval: 30000, // 心跳间隔 + heartbeatTimeout: 5000, // 心跳超时 + messageQueue: [], // 消息队列 + debug: false // 调试模式 +}; + +// WebSocket状态枚举 +export const WebSocketState = { + CONNECTING: 0, + OPEN: 1, + CLOSING: 2, + CLOSED: 3 +}; + +// WebSocket管理器类 +class WebSocketManager { + constructor(url = config.wsUrl) { + this.url = url; + this.ws = null; + this.state = WebSocketState.CLOSED; + this.reconnectAttempts = 0; + this.reconnectTimer = null; + this.heartbeatTimer = null; + this.heartbeatTimeoutTimer = null; + this.messageHandlers = new Map(); + this.readyStateHandlers = []; + this.messageId = 0; + this.pendingRequests = new Map(); + + // 绑定方法 + this.onOpen = this.onOpen.bind(this); + this.onClose = this.onClose.bind(this); + this.onMessage = this.onMessage.bind(this); + this.onError = this.onError.bind(this); + } + + // 连接WebSocket + connect() { + if (this.ws && this.ws.readyState === WebSocket.OPEN) { + this.log('WebSocket already connected'); + return; + } + + // 清除之前的重连定时器 + if (this.reconnectTimer) { + clearTimeout(this.reconnectTimer); + this.reconnectTimer = null; + } + + this.log('Connecting to WebSocket...'); + this.setState(WebSocketState.CONNECTING); + + try { + // 构建WebSocket URL,添加认证信息 + const token = storage.get('authToken'); + const wsUrl = token ? `${this.url}?token=${token}` : this.url; + + this.ws = new WebSocket(wsUrl); + + // 绑定事件处理器 + this.ws.onopen = this.onOpen; + this.ws.onclose = this.onClose; + this.ws.onmessage = this.onMessage; + this.ws.onerror = this.onError; + + } catch (error) { + this.log('WebSocket connection error:', error); + this.handleError(error); + } + } + + // 断开连接 + disconnect() { + this.log('Disconnecting WebSocket...'); + this.setState(WebSocketState.CLOSING); + + // 停止重连 + if (this.reconnectTimer) { + clearTimeout(this.reconnectTimer); + this.reconnectTimer = null; + } + + // 停止心跳 + this.stopHeartbeat(); + + // 关闭连接 + if (this.ws) { + this.ws.close(); + this.ws = null; + } + + this.setState(WebSocketState.CLOSED); + } + + // 发送消息 + send(type, data = {}, options = {}) { + return new Promise((resolve, reject) => { + if (this.ws && this.ws.readyState === WebSocket.OPEN) { + const message = { + id: this.messageId++, + type, + data, + timestamp: Date.now() + }; + + // 如果需要响应,保存回调 + if (options.expectResponse) { + this.pendingRequests.set(message.id, { + resolve, + reject, + timeout: setTimeout(() => { + this.pendingRequests.delete(message.id); + reject(new Error('Request timeout')); + }, options.timeout || 30000) + }); + } + + // 发送消息 + this.ws.send(JSON.stringify(message)); + this.log('Sent message:', message); + + // 如果不需要响应,立即解决 + if (!options.expectResponse) { + resolve(message.id); + } + } else { + // 连接未就绪,加入队列 + config.messageQueue.push({ type, data, options, resolve, reject }); + reject(new Error('WebSocket not connected')); + } + }); + } + + // 注册消息处理器 + on(type, handler) { + if (!this.messageHandlers.has(type)) { + this.messageHandlers.set(type, []); + } + this.messageHandlers.get(type).push(handler); + } + + // 取消注册消息处理器 + off(type, handler) { + if (this.messageHandlers.has(type)) { + const handlers = this.messageHandlers.get(type); + const index = handlers.indexOf(handler); + if (index > -1) { + handlers.splice(index, 1); + } + } + } + + // 注册状态变化处理器 + onReadyStateChange(handler) { + this.readyStateHandlers.push(handler); + } + + // 事件处理器 + onOpen() { + this.log('WebSocket connected'); + this.setState(WebSocketState.OPEN); + this.reconnectAttempts = 0; + + // 启动心跳 + this.startHeartbeat(); + + // 发送队列中的消息 + this.flushMessageQueue(); + + // 通知状态变化 + this.notifyReadyStateChange(); + + // 更新store状态 + store.commit('SET_WS_CONNECTED', true); + } + + onClose(event) { + this.log('WebSocket closed:', event); + this.setState(WebSocketState.CLOSED); + + // 停止心跳 + this.stopHeartbeat(); + + // 拒绝所有待处理的请求 + this.pendingRequests.forEach(({ reject, timeout }) => { + clearTimeout(timeout); + reject(new Error('WebSocket closed')); + }); + this.pendingRequests.clear(); + + // 通知状态变化 + this.notifyReadyStateChange(); + + // 更新store状态 + store.commit('SET_WS_CONNECTED', false); + + // 自动重连 + if (!event.wasClean && this.reconnectAttempts < config.maxReconnectAttempts) { + this.reconnect(); + } + } + + onMessage(event) { + try { + const message = JSON.parse(event.data); + this.log('Received message:', message); + + // 处理响应消息 + if (message.id && this.pendingRequests.has(message.id)) { + const { resolve, reject, timeout } = this.pendingRequests.get(message.id); + clearTimeout(timeout); + this.pendingRequests.delete(message.id); + + if (message.error) { + reject(new Error(message.error)); + } else { + resolve(message.data); + } + return; + } + + // 处理业务消息 + const handlers = this.messageHandlers.get(message.type); + if (handlers) { + handlers.forEach(handler => { + try { + handler(message.data, message); + } catch (error) { + this.log('Handler error:', error); + } + }); + } else { + this.log('No handler for message type:', message.type); + } + + // 处理心跳响应 + if (message.type === 'pong') { + this.handlePong(); + } + + } catch (error) { + this.log('Message parse error:', error); + } + } + + onError(error) { + this.log('WebSocket error:', error); + this.handleError(error); + } + + // 重连 + reconnect() { + if (this.reconnectAttempts >= config.maxReconnectAttempts) { + this.log('Max reconnect attempts reached'); + return; + } + + this.reconnectAttempts++; + this.log(`Reconnecting... Attempt ${this.reconnectAttempts}`); + + this.reconnectTimer = setTimeout(() => { + this.connect(); + }, config.reconnectInterval); + } + + // 启动心跳 + startHeartbeat() { + this.heartbeatTimer = setInterval(() => { + this.send('ping').catch(error => { + this.log('Heartbeat error:', error); + }); + + // 设置心跳超时 + this.heartbeatTimeoutTimer = setTimeout(() => { + this.log('Heartbeat timeout'); + this.disconnect(); + this.reconnect(); + }, config.heartbeatTimeout); + }, config.heartbeatInterval); + } + + // 停止心跳 + stopHeartbeat() { + if (this.heartbeatTimer) { + clearInterval(this.heartbeatTimer); + this.heartbeatTimer = null; + } + if (this.heartbeatTimeoutTimer) { + clearTimeout(this.heartbeatTimeoutTimer); + this.heartbeatTimeoutTimer = null; + } + } + + // 处理pong响应 + handlePong() { + if (this.heartbeatTimeoutTimer) { + clearTimeout(this.heartbeatTimeoutTimer); + this.heartbeatTimeoutTimer = null; + } + } + + // 清空消息队列 + flushMessageQueue() { + while (config.messageQueue.length > 0) { + const { type, data, options, resolve, reject } = config.messageQueue.shift(); + this.send(type, data, options).then(resolve).catch(reject); + } + } + + // 设置状态 + setState(state) { + this.state = state; + this.notifyReadyStateChange(); + } + + // 通知状态变化 + notifyReadyStateChange() { + this.readyStateHandlers.forEach(handler => { + try { + handler(this.state); + } catch (error) { + this.log('ReadyState handler error:', error); + } + }); + } + + // 处理错误 + handleError(error) { + this.log('WebSocket error:', error); + + // 显示错误提示 + store.dispatch('showToast', { + type: 'error', + message: 'WebSocket连接失败' + }); + } + + // 日志输出 + log(...args) { + if (config.debug) { + console.log('[WebSocket]', ...args); + } + } + + // 获取连接状态 + getReadyState() { + return this.state; + } + + // 检查是否已连接 + isConnected() { + return this.state === WebSocket.OPEN; + } +} + +// 创建全局WebSocket实例 +export const wsManager = new WebSocketManager(); + +// 扩展WebSocket管理器,添加业务方法 +wsManager.on('connected', (data) => { + store.dispatch('showToast', { + type: 'success', + message: 'WebSocket已连接' + }); +}); + +wsManager.on('disconnected', (data) => { + store.dispatch('showToast', { + type: 'warning', + message: 'WebSocket已断开' + }); +}); + +// 业务方法封装 +export const wsApi = { + // 创建会话 + createSession: (data) => wsManager.send('create_session', data, { expectResponse: true }), + + // 发送消息 + sendMessage: (data) => wsManager.send('send_message', data, { expectResponse: true }), + + // 获取历史记录 + getHistory: (sessionId) => wsManager.send('get_history', { session_id: sessionId }, { expectResponse: true }), + + // 创建工单 + createWorkOrder: (data) => wsManager.send('create_work_order', data, { expectResponse: true }), + + // 获取工单状态 + getWorkOrderStatus: (workOrderId) => wsManager.send('get_work_order_status', { work_order_id: workOrderId }, { expectResponse: true }), + + // 结束会话 + endSession: (sessionId) => wsManager.send('end_session', { session_id: sessionId }, { expectResponse: true }) +}; + +// 初始化WebSocket连接 +export function initWebSocket() { + // 页面可见时连接 + document.addEventListener('visibilitychange', () => { + if (!document.hidden && !wsManager.isConnected()) { + wsManager.connect(); + } + }); + + // 窗口获得焦点时检查连接 + window.addEventListener('focus', () => { + if (!wsManager.isConnected()) { + wsManager.connect(); + } + }); + + // 页面卸载时断开连接 + window.addEventListener('beforeunload', () => { + wsManager.disconnect(); + }); + + // 网络状态变化时重连 + window.addEventListener('online', () => { + if (!wsManager.isConnected()) { + wsManager.connect(); + } + }); + + // 自动连接 + wsManager.connect(); +} + +// 导出配置和管理器 +export { config }; +export default wsManager; \ No newline at end of file diff --git a/src/web/static/js/dashboard.js b/src/web/static/js/dashboard.js index 09d4352..49a7b57 100644 --- a/src/web/static/js/dashboard.js +++ b/src/web/static/js/dashboard.js @@ -1 +1,6738 @@ -// test +// TSP智能助手综合管理平台前端脚本 + +// 多语言支持 +const translations = { + zh: { + // 导航栏 + 'nav-title': 'TSP智能助手', + 'nav-health-checking': '检查中...', + 'nav-health-normal': '系统正常', + 'nav-health-warning': '系统警告', + 'nav-health-error': '系统错误', + + // 侧边栏 + 'sidebar-dashboard': '仪表板', + 'sidebar-workorders': '工单管理', + 'sidebar-conversations': '智能对话', + 'sidebar-agent': 'Agent管理', + 'sidebar-alerts': '预警管理', + 'sidebar-knowledge': '知识库', + 'sidebar-analytics': '数据分析', + 'sidebar-feishu-sync': '飞书同步', + 'sidebar-conversation-history': '对话历史', + 'sidebar-token-monitor': 'Token监控', + 'sidebar-ai-monitor': 'AI监控', + 'sidebar-system-optimizer': '系统优化', + 'sidebar-system': '系统设置', + + // 预警管理页面 + 'alerts-critical': '严重预警', + 'alerts-warning': '警告预警', + 'alerts-info': '信息预警', + 'alerts-total': '总预警数', + 'alerts-active': '活跃预警', + 'alerts-resolve': '解决', + + // 设置页面 + 'settings-title': '系统设置', + 'settings-basic': '基础设置', + 'settings-system-info': '系统信息', + 'settings-log-config': '日志配置', + 'settings-current-port': '当前服务端口', + 'settings-websocket-port': 'WebSocket端口', + 'settings-log-level': '日志级别', + 'settings-save': '保存设置', + 'settings-save-success': '设置保存成功', + 'settings-save-failed': '保存设置失败', + 'settings-port-note': '服务端口配置需要在配置文件中修改,前端页面仅显示当前状态。', + 'settings-log-note': '调整系统日志的详细程度' + }, + en: { + // Navigation + 'nav-title': 'TSP Intelligent Assistant', + 'nav-health-checking': 'Checking...', + 'nav-health-normal': 'System Normal', + 'nav-health-warning': 'System Warning', + 'nav-health-error': 'System Error', + + // Sidebar + 'sidebar-dashboard': 'Dashboard', + 'sidebar-workorders': 'Work Orders', + 'sidebar-conversations': 'Smart Chat', + 'sidebar-agent': 'Agent Management', + 'sidebar-alerts': 'Alert Management', + 'sidebar-knowledge': 'Knowledge Base', + 'sidebar-analytics': 'Analytics', + 'sidebar-feishu-sync': 'Feishu Sync', + 'sidebar-conversation-history': 'Conversation History', + 'sidebar-token-monitor': 'Token Monitor', + 'sidebar-ai-monitor': 'AI Monitor', + 'sidebar-system-optimizer': 'System Optimizer', + 'sidebar-system': 'System Settings', + + // Alert Management page + 'alerts-critical': 'Critical Alerts', + 'alerts-warning': 'Warning Alerts', + 'alerts-info': 'Info Alerts', + 'alerts-total': 'Total Alerts', + 'alerts-active': 'Active Alerts', + 'alerts-resolve': 'Resolve', + + // Settings page + 'settings-title': 'System Settings', + 'settings-basic': 'Basic Settings', + 'settings-system-info': 'System Information', + 'settings-log-config': 'Log Configuration', + 'settings-current-port': 'Current Service Port', + 'settings-websocket-port': 'WebSocket Port', + 'settings-log-level': 'Log Level', + 'settings-save': 'Save Settings', + 'settings-save-success': 'Settings saved successfully', + 'settings-save-failed': 'Failed to save settings', + 'settings-port-note': 'Service port configuration needs to be modified in configuration files. Frontend only displays current status.', + 'settings-log-note': 'Adjust the detail level of system logs' + } +}; + +// 全局语言切换函数 +function switchLanguage(lang) { + localStorage.setItem('preferred-language', lang); + document.documentElement.lang = lang; + + // 更新按钮状态 + document.getElementById('lang-zh').classList.toggle('active', lang === 'zh'); + document.getElementById('lang-en').classList.toggle('active', lang === 'en'); + + // 更新页面文本 + updatePageLanguage(lang); +} + +// 更新页面语言 +function updatePageLanguage(lang) { + const t = translations[lang]; + if (!t) return; + + // 更新所有带有 data-i18n 属性的元素 + const elements = document.querySelectorAll('[data-i18n]'); + elements.forEach(element => { + const key = element.getAttribute('data-i18n'); + if (t[key]) { + // 检查元素是否包含图标(i标签) + const icon = element.querySelector('i'); + if (icon) { + // 如果包含图标,只更新文本部分 + const textNodes = Array.from(element.childNodes).filter(node => + node.nodeType === Node.TEXT_NODE || (node.nodeType === Node.ELEMENT_NODE && node.tagName !== 'I') + ); + // 保留图标,更新其他文本内容 + element.innerHTML = icon.outerHTML + ' ' + t[key]; + } else { + // 如果没有图标,直接更新文本内容 + element.textContent = t[key]; + } + } + }); + + // 更新导航栏标题(特殊处理,因为包含图标) + const navBrand = document.querySelector('.navbar-brand'); + if (navBrand) { + const icon = navBrand.querySelector('i'); + if (icon) { + navBrand.innerHTML = `${t['nav-title']}`; + } + } + + // 更新当前标签页标题 + const currentTabTitle = document.getElementById('current-tab-title'); + if (currentTabTitle) { + const currentTab = document.querySelector('.nav-link.active'); + if (currentTab) { + const tabKey = currentTab.getAttribute('data-i18n'); + if (tabKey && t[tabKey]) { + // 检查当前标签是否包含图标 + const icon = currentTab.querySelector('i'); + if (icon) { + currentTabTitle.innerHTML = icon.outerHTML + ' ' + t[tabKey]; + } else { + currentTabTitle.textContent = t[tabKey]; + } + } + } + } +} + +class TSPDashboard { + constructor() { + this.currentTab = 'dashboard'; + this.charts = {}; + this.refreshIntervals = {}; + this.websocket = null; + this.sessionId = null; + this.isAgentMode = true; + this.currentLanguage = localStorage.getItem('preferred-language') || 'zh'; + + // 优化:添加前端缓存 + this.cache = new Map(); + this.cacheTimeout = 30000; // 30秒缓存 + + // 智能更新机制 + this.lastUpdateTimes = { + alerts: 0, + workorders: 0, + health: 0, + analytics: 0 + }; + + this.updateThresholds = { + alerts: 10000, // 10秒 + workorders: 30000, // 30秒 + health: 30000, // 30秒 + analytics: 60000 // 60秒 + }; + + this.isPageVisible = true; + + // 分页配置 + this.paginationConfig = { + defaultPageSize: 10, + pageSizeOptions: [5, 10, 20, 50], + maxVisiblePages: 5 + }; + + this.init(); + this.restorePageState(); + this.initLanguage(); + this.initSmartUpdate(); + + // 添加页面卸载时的清理逻辑 + window.addEventListener('beforeunload', () => { + this.destroyAllCharts(); + this.cleanupConnections(); + }); + } + + initLanguage() { + // 初始化语言设置 + document.documentElement.lang = this.currentLanguage; + document.getElementById('lang-zh').classList.toggle('active', this.currentLanguage === 'zh'); + document.getElementById('lang-en').classList.toggle('active', this.currentLanguage === 'en'); + updatePageLanguage(this.currentLanguage); + } + + async generateAISuggestion(workorderId) { + const button = document.querySelector(`button[onclick="dashboard.generateAISuggestion(${workorderId})"]`); + const textarea = document.getElementById(`aiSuggestion_${workorderId}`); + + try { + // 添加加载状态 + if (button) { + button.classList.add('btn-loading'); + button.disabled = true; + } + if (textarea) { + textarea.classList.add('ai-loading'); + textarea.value = '正在生成AI建议,请稍候...'; + } + + const resp = await fetch(`/api/workorders/${workorderId}/ai-suggestion`, { method: 'POST' }); + const data = await resp.json(); + + if (data.success) { + if (textarea) { + textarea.value = data.suggestion || ''; + textarea.classList.remove('ai-loading'); + textarea.classList.add('success-animation'); + + // 移除成功动画类 + setTimeout(() => { + textarea.classList.remove('success-animation'); + }, 600); + } + this.showNotification('AI建议已生成', 'success'); + } else { + throw new Error(data.error || '生成失败'); + } + } catch (e) { + console.error('生成AI建议失败:', e); + if (textarea) { + textarea.value = 'AI建议生成失败,请重试'; + textarea.classList.remove('ai-loading'); + } + this.showNotification('生成AI建议失败: ' + e.message, 'error'); + } finally { + // 移除加载状态 + if (button) { + button.classList.remove('btn-loading'); + button.disabled = false; + } + } + } + + async saveHumanResolution(workorderId) { + try { + const text = document.getElementById(`humanResolution_${workorderId}`).value.trim(); + if (!text) { this.showNotification('请输入人工描述', 'warning'); return; } + const resp = await fetch(`/api/workorders/${workorderId}/human-resolution`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ human_resolution: text }) + }); + const data = await resp.json(); + if (data.success) { + const simEl = document.getElementById(`aiSim_${workorderId}`); + const apprEl = document.getElementById(`aiApproved_${workorderId}`); + const approveBtn = document.getElementById(`approveBtn_${workorderId}`); + const percent = Math.round((data.similarity || 0) * 100); + + // 更新相似度显示,使用语义相似度 + if (simEl) { + simEl.innerHTML = `语义相似度: ${percent}%`; + + // 使用新的CSS类 + if (percent >= 90) { + simEl.className = 'similarity-badge high'; + } else if (percent >= 80) { + simEl.className = 'similarity-badge medium'; + } else { + simEl.className = 'similarity-badge low'; + } + + simEl.title = this.getSimilarityExplanation(percent); + } + + // 更新审批状态 + if (apprEl) { + if (data.use_human_resolution) { + apprEl.textContent = '将使用人工描述入库'; + apprEl.className = 'status-badge human-resolution'; + } else if (data.approved) { + apprEl.textContent = '已自动审批'; + apprEl.className = 'status-badge approved'; + } else { + apprEl.textContent = '未审批'; + apprEl.className = 'status-badge pending'; + } + } + + // 更新审批按钮状态 + if (approveBtn) { + const canApprove = data.approved || data.use_human_resolution; + approveBtn.disabled = !canApprove; + + if (data.use_human_resolution) { + approveBtn.textContent = '使用人工描述入库'; + approveBtn.className = 'approve-btn'; + approveBtn.title = 'AI准确率低于90%,将使用人工描述入库'; + } else if (data.approved) { + approveBtn.textContent = '已自动审批'; + approveBtn.className = 'approve-btn approved'; + approveBtn.title = 'AI建议与人工描述高度一致'; + } else { + approveBtn.textContent = '审批入库'; + approveBtn.className = 'approve-btn'; + approveBtn.title = '手动审批入库'; + } + } + + // 显示更详细的反馈信息 + const message = this.getSimilarityMessage(percent, data.approved, data.use_human_resolution); + this.showNotification(message, data.approved ? 'success' : data.use_human_resolution ? 'warning' : 'info'); + } else { + throw new Error(data.error || '保存失败'); + } + } catch (e) { + console.error('保存人工描述失败:', e); + this.showNotification('保存人工描述失败: ' + e.message, 'error'); + } + } + + async approveToKnowledge(workorderId) { + try { + const resp = await fetch(`/api/workorders/${workorderId}/approve-to-knowledge`, { method: 'POST' }); + const data = await resp.json(); + if (data.success) { + const contentType = data.used_content === 'human_resolution' ? '人工描述' : 'AI建议'; + const confidence = Math.round((data.confidence_score || 0) * 100); + this.showNotification(`已入库为知识条目!使用${contentType},置信度: ${confidence}%`, 'success'); + } else { + throw new Error(data.error || '入库失败'); + } + } catch (e) { + console.error('入库失败:', e); + this.showNotification('入库失败: ' + e.message, 'error'); + } + } + init() { + this.bindEvents(); + // 优化:并行加载初始数据,提高响应速度 + this.loadInitialDataAsync(); + this.startAutoRefresh(); + this.initCharts(); + } + + async loadInitialDataAsync() { + // 并行加载多个数据源 + try { + await Promise.all([ + this.loadDashboard(), + this.loadWorkOrders(), + this.loadConversationHistory(), + this.loadKnowledgeBase() + ]); + } catch (error) { + console.error('并行加载数据失败:', error); + // 回退到串行加载 + await this.loadInitialData(); + } + } + + // 优化:添加缓存方法 + getCachedData(key) { + const cached = this.cache.get(key); + if (cached && Date.now() - cached.timestamp < this.cacheTimeout) { + return cached.data; + } + return null; + } + + // 统一分页组件 + createPaginationComponent(data, containerId, loadFunction, itemName = '条记录') { + const paginationContainer = document.getElementById(containerId); + if (!paginationContainer) return; + + // 调试信息 + console.log(`分页数据 (${containerId}):`, data); + + const { page, total_pages, total, per_page } = data; + + // 检查必要字段 + if (page === undefined || total_pages === undefined || total === undefined || per_page === undefined) { + console.error(`分页数据不完整 (${containerId}):`, { page, total_pages, total, per_page }); + paginationContainer.innerHTML = '
分页数据加载中...
'; + return; + } + + if (total_pages <= 1) { + paginationContainer.innerHTML = ''; + return; + } + + let paginationHtml = ` +
+
+ 共 ${total} ${itemName},第 ${page} / ${total_pages} 页 +
+ + +
+
+ +
+ `; + + paginationContainer.innerHTML = paginationHtml; + } + + // 加载指定页面 + loadPage(loadFunction, page, containerId) { + const pageSize = this.getPageSize(containerId); + if (loadFunction === 'loadAlerts') { + this.loadAlerts(page, true); + } else if (loadFunction === 'loadWorkOrders') { + this.loadWorkOrders(page, true); + } else if (loadFunction === 'loadKnowledge') { + this.loadKnowledge(page); + } else if (loadFunction === 'loadConversationHistory') { + this.loadConversationHistory(page); + } + } + + // 改变每页显示条数 + changePageSize(containerId, pageSize, loadFunction) { + // 保存页面大小到localStorage + localStorage.setItem(`pageSize_${containerId}`, pageSize); + + // 重新加载第一页 + if (loadFunction === 'loadAlerts') { + this.loadAlerts(1, true); + } else if (loadFunction === 'loadWorkOrders') { + this.loadWorkOrders(1, true); + } else if (loadFunction === 'loadKnowledge') { + this.loadKnowledge(1); + } else if (loadFunction === 'loadConversationHistory') { + this.loadConversationHistory(1); + } + } + + // 获取页面大小 + getPageSize(containerId) { + const saved = localStorage.getItem(`pageSize_${containerId}`); + return saved ? parseInt(saved) : this.paginationConfig.defaultPageSize; + } + + setCachedData(key, data) { + this.cache.set(key, { + data: data, + timestamp: Date.now() + }); + } + + clearCache() { + this.cache.clear(); + } + + bindEvents() { + // 标签页切换 + document.querySelectorAll('[data-tab]').forEach(tab => { + tab.addEventListener('click', (e) => { + e.preventDefault(); + this.switchTab(tab.dataset.tab); + }); + }); + + // 对话控制 + document.getElementById('start-chat').addEventListener('click', () => this.startChat()); + document.getElementById('end-chat').addEventListener('click', () => this.endChat()); + document.getElementById('create-work-order').addEventListener('click', () => this.showCreateWorkOrderModal()); + document.getElementById('send-button').addEventListener('click', () => this.sendMessage()); + document.getElementById('message-input').addEventListener('keypress', (e) => { + if (e.key === 'Enter') this.sendMessage(); + }); + + // 快速操作按钮 + document.querySelectorAll('.quick-action-btn').forEach(btn => { + btn.addEventListener('click', () => { + const message = btn.dataset.message; + document.getElementById('message-input').value = message; + this.sendMessage(); + }); + }); + + // Agent控制 + document.getElementById('agent-mode-toggle').addEventListener('change', (e) => { + this.toggleAgentMode(e.target.checked); + }); + + // Agent对话功能 + document.getElementById('send-agent-message').addEventListener('click', () => this.sendAgentMessage()); + document.getElementById('clear-agent-chat').addEventListener('click', () => this.clearAgentChat()); + document.getElementById('agent-message-input').addEventListener('keypress', (e) => { + if (e.key === 'Enter' && !e.shiftKey) { + e.preventDefault(); + this.sendAgentMessage(); + } + }); + + // Agent控制按钮 + document.getElementById('trigger-sample-action').addEventListener('click', () => this.triggerSampleAction()); + document.getElementById('clear-agent-history').addEventListener('click', () => this.clearAgentHistory()); + document.getElementById('start-agent-monitoring').addEventListener('click', () => this.startAgentMonitoring()); + document.getElementById('stop-agent-monitoring').addEventListener('click', () => this.stopAgentMonitoring()); + document.getElementById('proactive-monitoring').addEventListener('click', () => this.proactiveMonitoring()); + document.getElementById('intelligent-analysis').addEventListener('click', () => this.intelligentAnalysis()); + + // 预警管理 + document.getElementById('refresh-alerts').addEventListener('click', () => this.loadAlerts()); + document.getElementById('alert-filter').addEventListener('change', () => this.updateAlertsDisplay()); + + // 统计数字点击事件 + document.addEventListener('click', (e) => { + if (e.target.classList.contains('clickable-stat')) { + const type = e.target.dataset.type; + const status = e.target.dataset.status || e.target.dataset.level; + this.showStatPreview(type, status); + } + }); + + // 知识库管理 + document.getElementById('search-knowledge').addEventListener('click', () => this.searchKnowledge()); + document.getElementById('knowledge-search').addEventListener('keypress', (e) => { + if (e.key === 'Enter') this.searchKnowledge(); + }); + + // 工单管理 + document.getElementById('refresh-workorders').addEventListener('click', () => this.loadWorkOrders()); + document.getElementById('workorder-status-filter').addEventListener('change', () => this.loadWorkOrders()); + document.getElementById('workorder-priority-filter').addEventListener('change', () => this.loadWorkOrders()); + + // 模态框 + document.getElementById('create-work-order-btn').addEventListener('click', () => this.createWorkOrder()); + document.getElementById('add-knowledge-btn').addEventListener('click', () => this.addKnowledge()); + document.getElementById('upload-file-btn').addEventListener('click', () => this.uploadFile()); + + // 置信度滑块 + document.getElementById('knowledge-confidence').addEventListener('input', (e) => { + document.getElementById('confidence-value').textContent = e.target.value; + }); + document.getElementById('file-confidence').addEventListener('input', (e) => { + document.getElementById('file-confidence-value').textContent = e.target.value; + }); + + // 处理方式选择 + document.getElementById('process-method').addEventListener('change', (e) => { + const manualDiv = document.getElementById('manual-question-div'); + if (e.target.value === 'manual') { + manualDiv.style.display = 'block'; + } else { + manualDiv.style.display = 'none'; + } + }); + + // 系统设置 + document.getElementById('system-settings-form').addEventListener('submit', (e) => { + e.preventDefault(); + this.saveSystemSettings(); + }); + + // API测试按钮事件 + const testApiBtn = document.getElementById('test-api-connection'); + if (testApiBtn) { + testApiBtn.addEventListener('click', () => this.testApiConnection()); + } + + const testModelBtn = document.getElementById('test-model-response'); + if (testModelBtn) { + testModelBtn.addEventListener('click', () => this.testModelResponse()); + } + + // 重启服务按钮事件 + const restartBtn = document.getElementById('restart-service'); + if (restartBtn) { + restartBtn.addEventListener('click', () => { + if (confirm('确定要重启服务吗?这将中断当前连接。')) { + this.showNotification('重启服务功能待实现', 'info'); + } + }); + } + } + + switchTab(tabName) { + // 更新导航状态 + document.querySelectorAll('.nav-link').forEach(link => { + link.classList.remove('active'); + }); + document.querySelector(`[data-tab="${tabName}"]`).classList.add('active'); + + // 显示对应内容 + document.querySelectorAll('.tab-content').forEach(content => { + content.style.display = 'none'; + }); + document.getElementById(`${tabName}-tab`).style.display = 'block'; + + this.currentTab = tabName; + + // 如果切换到分析页面,重新初始化图表 + if (tabName === 'analytics') { + // 延迟一点时间确保DOM已更新 + setTimeout(() => { + this.initializeCharts(); + }, 100); + } + + // 保存当前页面状态 + this.savePageState(); + + // 加载对应数据 + switch(tabName) { + case 'dashboard': + this.loadDashboardData(); + break; + case 'chat': + this.loadChatData(); + break; + case 'agent': + this.loadAgentData(); + break; + case 'alerts': + this.loadAlerts(); + break; + case 'knowledge': + this.loadKnowledge(); + break; + case 'workorders': + this.loadWorkOrders(); + break; + case 'conversation-history': + this.loadConversationHistory(); + break; + case 'token-monitor': + this.loadTokenMonitor(); + break; + case 'ai-monitor': + this.loadAIMonitor(); + break; + case 'system-optimizer': + this.loadSystemOptimizer(); + break; + case 'analytics': + this.loadAnalytics(); + break; + case 'settings': + this.loadSettings(); + break; + } + } + + savePageState() { + const state = { + currentTab: this.currentTab, + timestamp: Date.now() + }; + localStorage.setItem('tsp_dashboard_state', JSON.stringify(state)); + } + + restorePageState() { + try { + const savedState = localStorage.getItem('tsp_dashboard_state'); + if (savedState) { + const state = JSON.parse(savedState); + // 如果状态保存时间不超过1小时,则恢复 + if (Date.now() - state.timestamp < 3600000) { + this.switchTab(state.currentTab); + } + } + } catch (error) { + console.warn('恢复页面状态失败:', error); + } + } + + async loadInitialData() { + await Promise.all([ + this.loadHealth(), + this.loadDashboardData(), + this.loadSystemInfo() + ]); + } + + // 初始化智能更新机制 + initSmartUpdate() { + // 页面可见性检测 + document.addEventListener('visibilitychange', () => { + this.isPageVisible = !document.hidden; + if (this.isPageVisible) { + // 页面重新可见时,立即更新数据 + this.smartRefresh(); + } + }); + + // 尝试连接WebSocket获取实时更新 + this.initWebSocketConnection(); + + // 智能定时刷新 + this.startSmartRefresh(); + } + + // 初始化WebSocket连接 + initWebSocketConnection() { + try { + const wsUrl = `ws://localhost:8765/dashboard`; + this.websocket = new WebSocket(wsUrl); + + this.websocket.onopen = () => { + console.log('WebSocket连接已建立'); + // 发送订阅消息 + this.websocket.send(JSON.stringify({ + type: 'subscribe', + topics: ['alerts', 'workorders', 'health'] + })); + }; + + this.websocket.onmessage = (event) => { + try { + const data = JSON.parse(event.data); + this.handleRealtimeUpdate(data); + } catch (error) { + console.error('WebSocket消息解析失败:', error); + } + }; + + this.websocket.onclose = () => { + console.log('WebSocket连接已关闭'); + // 5秒后重连 + setTimeout(() => { + if (this.isPageVisible) { + this.initWebSocketConnection(); + } + }, 5000); + }; + + this.websocket.onerror = (error) => { + console.error('WebSocket连接错误:', error); + }; + } catch (error) { + console.log('WebSocket连接失败,使用轮询模式:', error); + } + } + + // 处理实时更新 + handleRealtimeUpdate(data) { + switch (data.type) { + case 'alert_update': + // 直接更新预警统计,无需API调用 + this.updateAlertStatistics(data.alerts); + this.lastUpdateTimes.alerts = Date.now(); + break; + case 'workorder_update': + // 更新工单统计 + if (this.currentTab === 'workorders') { + this.loadWorkOrders(); + } + this.lastUpdateTimes.workorders = Date.now(); + break; + case 'health_update': + // 更新健康状态 + this.updateHealthDisplay(data.health); + this.lastUpdateTimes.health = Date.now(); + break; + } + } + + // 智能刷新机制 + startSmartRefresh() { + // 每5秒检查一次是否需要更新 + this.refreshIntervals.smart = setInterval(() => { + if (this.isPageVisible) { + this.smartRefresh(); + } + }, 5000); + } + + // 智能刷新逻辑 + smartRefresh() { + const now = Date.now(); + + // 如果最近有用户操作,跳过自动更新 + if (now - this.lastUpdateTimes.alerts < 5000) { // 5秒内不自动更新 + return; + } + + // 检查预警数据是否需要更新 + if (now - this.lastUpdateTimes.alerts > this.updateThresholds.alerts) { + this.refreshAlertStats(); + this.lastUpdateTimes.alerts = now; + } + + // 检查健康状态是否需要更新 + if (now - this.lastUpdateTimes.health > this.updateThresholds.health) { + this.loadHealth(); + this.lastUpdateTimes.health = now; + } + + // 检查分析数据是否需要更新 + if (now - this.lastUpdateTimes.analytics > this.updateThresholds.analytics) { + this.loadAnalytics(); + this.lastUpdateTimes.analytics = now; + } + + // 根据当前标签页决定是否更新工单数据 + if (this.currentTab === 'workorders' && + now - this.lastUpdateTimes.workorders > this.updateThresholds.workorders) { + this.loadWorkOrders(); + this.lastUpdateTimes.workorders = now; + } + } + + startAutoRefresh() { + // 保留原有的刷新机制作为备用 + this.refreshIntervals.health = setInterval(() => { + if (this.isPageVisible) { + this.loadHealth(); + } + }, 30000); + + this.refreshIntervals.currentTab = setInterval(() => { + if (this.isPageVisible) { + this.refreshCurrentTab(); + } + }, 30000); + } + + refreshCurrentTab() { + switch(this.currentTab) { + case 'dashboard': + this.loadDashboardData(); + break; + case 'alerts': + this.loadAlerts(); + break; + case 'agent': + this.loadAgentData(); + break; + } + } + + // 刷新预警统计(优化版) + async refreshAlertStats() { + try { + // 检查缓存 + const cacheKey = 'alerts_stats'; + const cachedData = this.cache.get(cacheKey); + const now = Date.now(); + + if (cachedData && (now - cachedData.timestamp) < this.cacheTimeout) { + // 使用缓存数据 + this.updateAlertStatistics(cachedData.data); + return; + } + + const response = await fetch('/api/alerts?per_page=1000'); // 获取全部数据 + const data = await response.json(); + + if (data.alerts) { + // 更新缓存 + this.cache.set(cacheKey, { + data: data.alerts, + timestamp: now + }); + + this.updateAlertStatistics(data.alerts); + } + } catch (error) { + console.error('刷新预警统计失败:', error); + // 静默处理错误,避免频繁的错误日志 + } + } + + // 更新健康状态显示 + updateHealthDisplay(healthData) { + if (healthData.status) { + const statusElement = document.getElementById('health-status'); + if (statusElement) { + statusElement.textContent = healthData.status; + statusElement.className = `badge ${this.getHealthBadgeClass(healthData.status)}`; + } + } + + if (healthData.details) { + const detailsElement = document.getElementById('health-details'); + if (detailsElement) { + detailsElement.innerHTML = healthData.details; + } + } + } + + async loadHealth() { + try { + const response = await fetch('/api/health'); + const data = await response.json(); + this.updateHealthDisplay(data); + } catch (error) { + console.error('加载健康状态失败:', error); + } + } + + updateHealthDisplay(health) { + const healthScore = health.health_score || 0; + const healthStatus = health.status || 'unknown'; + + // 更新健康指示器 + const healthDot = document.getElementById('health-dot'); + const healthStatusText = document.getElementById('health-status'); + const systemHealthDot = document.getElementById('system-health-dot'); + const systemHealthText = document.getElementById('system-health-text'); + const healthProgress = document.getElementById('health-progress'); + + if (healthDot) { + healthDot.className = `health-dot ${healthStatus}`; + } + if (healthStatusText) { + healthStatusText.textContent = this.getHealthStatusText(healthStatus); + } + if (systemHealthDot) { + systemHealthDot.className = `health-dot ${healthStatus}`; + } + if (systemHealthText) { + systemHealthText.textContent = this.getHealthStatusText(healthStatus); + } + if (healthProgress) { + healthProgress.style.width = `${healthScore * 100}%`; + healthProgress.className = `progress-bar ${this.getHealthColor(healthScore)}`; + } + + // 更新内存和CPU使用率 + const memoryUsage = health.memory_usage || 0; + const memoryProgress = document.getElementById('memory-progress'); + if (memoryProgress) { + memoryProgress.style.width = `${memoryUsage}%`; + } + + const cpuUsage = health.cpu_usage || 0; + const cpuProgress = document.getElementById('cpu-progress'); + if (cpuProgress) { + cpuProgress.style.width = `${cpuUsage}%`; + } + } + + getHealthStatusText(status) { + const statusMap = { + 'excellent': '优秀', + 'good': '良好', + 'fair': '一般', + 'poor': '较差', + 'critical': '严重', + 'unknown': '未知' + }; + return statusMap[status] || status; + } + + getHealthColor(score) { + if (score >= 0.8) return 'bg-success'; + if (score >= 0.6) return 'bg-info'; + if (score >= 0.4) return 'bg-warning'; + return 'bg-danger'; + } + + async loadDashboardData() { + try { + const [sessionsResponse, alertsResponse, workordersResponse, knowledgeResponse] = await Promise.all([ + fetch('/api/chat/sessions'), + fetch('/api/alerts?per_page=1000'), // 获取全部预警数据 + fetch('/api/workorders'), + fetch('/api/knowledge/stats') + ]); + + const sessions = await sessionsResponse.json(); + const alerts = await alertsResponse.json(); + const workorders = await workordersResponse.json(); + const knowledge = await knowledgeResponse.json(); + + // 更新统计卡片 + document.getElementById('total-sessions').textContent = sessions.sessions?.length || 0; + document.getElementById('total-alerts').textContent = alerts.alerts?.length || 0; + document.getElementById('total-workorders').textContent = workorders.workorders?.filter(w => w.status === 'open').length || 0; + document.getElementById('knowledge-count').textContent = knowledge.total_entries || 0; + + // 更新预警统计数字 + if (alerts.alerts) { + this.updateAlertStatistics(alerts.alerts); + } + + // 更新知识库详细统计 + document.getElementById('knowledge-total').textContent = knowledge.total_entries || 0; + document.getElementById('knowledge-active').textContent = knowledge.active_entries || 0; + const confidencePercent = Math.round((knowledge.average_confidence || 0) * 100); + document.getElementById('knowledge-confidence').style.width = `${confidencePercent}%`; + document.getElementById('knowledge-confidence').setAttribute('aria-valuenow', confidencePercent); + document.getElementById('knowledge-confidence').textContent = `${confidencePercent}%`; + + // 更新性能图表 + await this.updatePerformanceChart(sessions, alerts, workorders); + + // 更新系统健康状态 + await this.updateSystemHealth(); + + // 加载分析数据并更新统计卡片 + await this.loadAnalytics(); + + } catch (error) { + console.error('加载仪表板数据失败:', error); + } + } + + + + initCharts() { + // 性能趋势图 + const performanceCtx = document.getElementById('performanceChart'); + if (performanceCtx) { + this.charts.performance = new Chart(performanceCtx, { + type: 'line', + data: { + labels: [], + datasets: [{ + label: '工单数量', + data: [], + borderColor: '#007bff', + backgroundColor: 'rgba(0, 123, 255, 0.1)', + tension: 0.4 + }, { + label: '预警数量', + data: [], + borderColor: '#dc3545', + backgroundColor: 'rgba(220, 53, 69, 0.1)', + tension: 0.4 + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + scales: { + y: { + beginAtZero: true + } + } + } + }); + } + + // 分析图表 + const analyticsCtx = document.getElementById('analyticsChart'); + if (analyticsCtx) { + this.charts.analytics = new Chart(analyticsCtx, { + type: 'line', + data: { + labels: [], + datasets: [{ + label: '满意度', + data: [], + borderColor: '#28a745', + backgroundColor: 'rgba(40, 167, 69, 0.1)', + tension: 0.4 + }, { + label: '解决时间(小时)', + data: [], + borderColor: '#ffc107', + backgroundColor: 'rgba(255, 193, 7, 0.1)', + tension: 0.4 + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + scales: { + y: { + beginAtZero: true + } + } + } + }); + } + + // 类别分布图 + const categoryCtx = document.getElementById('categoryChart'); + if (categoryCtx) { + this.charts.category = new Chart(categoryCtx, { + type: 'doughnut', + data: { + labels: [], + datasets: [{ + data: [], + backgroundColor: [ + '#007bff', + '#28a745', + '#ffc107', + '#dc3545', + '#17a2b8' + ] + }] + }, + options: { + responsive: true, + maintainAspectRatio: false + } + }); + } + } + + async updatePerformanceChart(sessions, alerts, workorders) { + if (!this.charts.performance) return; + + try { + // 获取真实的分析数据 + const response = await fetch('/api/analytics?days=7&dimension=performance'); + const analyticsData = await response.json(); + + if (analyticsData.trend && analyticsData.trend.length > 0) { + // 使用真实数据 + const labels = analyticsData.trend.map(item => { + const date = new Date(item.date); + return `${date.getMonth() + 1}/${date.getDate()}`; + }); + + const workorderData = analyticsData.trend.map(item => item.workorders || 0); + const alertData = analyticsData.trend.map(item => item.alerts || 0); + + this.charts.performance.data.labels = labels; + this.charts.performance.data.datasets[0].data = workorderData; + this.charts.performance.data.datasets[1].data = alertData; + this.charts.performance.update(); + } else { + // 如果没有真实数据,显示提示 + this.charts.performance.data.labels = ['暂无数据']; + this.charts.performance.data.datasets[0].data = [0]; + this.charts.performance.data.datasets[1].data = [0]; + this.charts.performance.update(); + } + } catch (error) { + console.error('获取性能趋势数据失败:', error); + // 出错时显示空数据 + this.charts.performance.data.labels = ['数据加载失败']; + this.charts.performance.data.datasets[0].data = [0]; + this.charts.performance.data.datasets[1].data = [0]; + this.charts.performance.update(); + } + } + + // 更新系统健康状态显示 + async updateSystemHealth() { + try { + const response = await fetch('/api/settings'); + const settings = await response.json(); + + // 更新健康分数 + const healthScore = Math.max(0, 100 - (settings.memory_usage_percent || 0) - (settings.cpu_usage_percent || 0)); + const healthProgress = document.getElementById('health-progress'); + const healthDot = document.getElementById('system-health-dot'); + const healthText = document.getElementById('system-health-text'); + + if (healthProgress) { + healthProgress.style.width = `${healthScore}%`; + healthProgress.setAttribute('aria-valuenow', healthScore); + } + + if (healthDot) { + healthDot.className = 'health-dot'; + if (healthScore >= 80) healthDot.classList.add('excellent'); + else if (healthScore >= 60) healthDot.classList.add('good'); + else if (healthScore >= 40) healthDot.classList.add('fair'); + else if (healthScore >= 20) healthDot.classList.add('poor'); + else healthDot.classList.add('critical'); + } + + if (healthText) { + const statusText = healthScore >= 80 ? '优秀' : + healthScore >= 60 ? '良好' : + healthScore >= 40 ? '一般' : + healthScore >= 20 ? '较差' : '严重'; + healthText.textContent = `${statusText} (${healthScore}%)`; + } + + // 更新内存使用 + const memoryProgress = document.getElementById('memory-progress'); + if (memoryProgress && settings.memory_usage_percent !== undefined) { + memoryProgress.style.width = `${settings.memory_usage_percent}%`; + memoryProgress.setAttribute('aria-valuenow', settings.memory_usage_percent); + } + + // 更新CPU使用 + const cpuProgress = document.getElementById('cpu-progress'); + if (cpuProgress && settings.cpu_usage_percent !== undefined) { + cpuProgress.style.width = `${settings.cpu_usage_percent}%`; + cpuProgress.setAttribute('aria-valuenow', settings.cpu_usage_percent); + } + + } catch (error) { + console.error('更新系统健康状态失败:', error); + } + } + + // 对话功能 + async startChat() { + try { + const userId = document.getElementById('user-id').value; + const workOrderId = document.getElementById('work-order-id').value; + + const response = await fetch('/api/chat/session', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + user_id: userId, + work_order_id: workOrderId ? parseInt(workOrderId) : null + }) + }); + + const data = await response.json(); + if (data.success) { + this.sessionId = data.session_id; + document.getElementById('start-chat').disabled = true; + document.getElementById('end-chat').disabled = false; + document.getElementById('message-input').disabled = false; + document.getElementById('send-button').disabled = false; + document.getElementById('session-info').textContent = `会话ID: ${this.sessionId}`; + document.getElementById('connection-status').className = 'badge bg-success'; + document.getElementById('connection-status').innerHTML = '已连接'; + + this.showNotification('对话已开始', 'success'); + } else { + this.showNotification('开始对话失败', 'error'); + } + } catch (error) { + console.error('开始对话失败:', error); + this.showNotification('开始对话失败', 'error'); + } + } + + async endChat() { + try { + if (!this.sessionId) return; + + const response = await fetch(`/api/chat/session/${this.sessionId}`, { + method: 'DELETE' + }); + + const data = await response.json(); + if (data.success) { + this.sessionId = null; + document.getElementById('start-chat').disabled = false; + document.getElementById('end-chat').disabled = true; + document.getElementById('message-input').disabled = true; + document.getElementById('send-button').disabled = true; + document.getElementById('session-info').textContent = '未开始对话'; + document.getElementById('connection-status').className = 'badge bg-secondary'; + document.getElementById('connection-status').innerHTML = '未连接'; + + this.showNotification('对话已结束', 'info'); + } else { + this.showNotification('结束对话失败', 'error'); + } + } catch (error) { + console.error('结束对话失败:', error); + this.showNotification('结束对话失败', 'error'); + } + } + + async sendMessage() { + const messageInput = document.getElementById('message-input'); + const message = messageInput.value.trim(); + + if (!message || !this.sessionId) return; + + // 显示用户消息 + this.addMessage('user', message); + messageInput.value = ''; + + // 显示占位提示:小奇正在查询中 + const typingId = this.showTypingIndicator(); + + // 发送消息到服务器 + try { + const response = await fetch('/api/chat/message', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + session_id: this.sessionId, + message: message + }) + }); + + const data = await response.json(); + if (data.success) { + this.updateTypingIndicator(typingId, data.response, data.knowledge_used); + } else { + this.updateTypingIndicator(typingId, '抱歉,处理您的消息时出现了错误。', null, true); + } + } catch (error) { + console.error('发送消息失败:', error); + this.updateTypingIndicator(typingId, '网络连接错误,请稍后重试。', null, true); + } + } + + showTypingIndicator() { + const messagesContainer = document.getElementById('chat-messages'); + const id = `typing-${Date.now()}`; + const messageDiv = document.createElement('div'); + messageDiv.className = 'message assistant'; + messageDiv.id = id; + const avatar = document.createElement('div'); + avatar.className = 'message-avatar'; + avatar.innerHTML = ''; + const contentDiv = document.createElement('div'); + contentDiv.className = 'message-content'; + contentDiv.innerHTML = ` +
小奇正在查询中,请稍后…
+
${new Date().toLocaleTimeString()}
+ `; + messageDiv.appendChild(avatar); + messageDiv.appendChild(contentDiv); + messagesContainer.appendChild(messageDiv); + messagesContainer.scrollTop = messagesContainer.scrollHeight; + return id; + } + + updateTypingIndicator(typingId, content, knowledgeUsed = null, isError = false) { + const node = document.getElementById(typingId); + if (!node) { + // 回退:若占位不存在则直接追加 + this.addMessage('assistant', content, knowledgeUsed, isError); + return; + } + const contentDiv = node.querySelector('.message-content'); + if (contentDiv) { + contentDiv.innerHTML = ` +
${content}
+
${new Date().toLocaleTimeString()}
+ `; + if (knowledgeUsed && knowledgeUsed.length > 0) { + const knowledgeDiv = document.createElement('div'); + knowledgeDiv.className = 'knowledge-info'; + knowledgeDiv.innerHTML = ` + + 使用了知识库: ${knowledgeUsed.map(k => k.question || k.source || '实时数据').join(', ')} + `; + contentDiv.appendChild(knowledgeDiv); + } + if (isError) { + contentDiv.style.borderLeft = '4px solid #dc3545'; + } else { + contentDiv.style.borderLeft = ''; + } + } + const messagesContainer = document.getElementById('chat-messages'); + messagesContainer.scrollTop = messagesContainer.scrollHeight; + } + + addMessage(role, content, knowledgeUsed = null, isError = false) { + const messagesContainer = document.getElementById('chat-messages'); + + // 移除欢迎消息 + const welcomeMsg = messagesContainer.querySelector('.text-center'); + if (welcomeMsg) { + welcomeMsg.remove(); + } + + const messageDiv = document.createElement('div'); + messageDiv.className = `message ${role}`; + + const avatar = document.createElement('div'); + avatar.className = 'message-avatar'; + avatar.innerHTML = role === 'user' ? '' : ''; + + const contentDiv = document.createElement('div'); + contentDiv.className = 'message-content'; + contentDiv.innerHTML = ` +
${content}
+
${new Date().toLocaleTimeString()}
+ `; + + if (knowledgeUsed && knowledgeUsed.length > 0) { + const knowledgeDiv = document.createElement('div'); + knowledgeDiv.className = 'knowledge-info'; + knowledgeDiv.innerHTML = ` + + 使用了知识库: ${knowledgeUsed.map(k => k.question).join(', ')} + `; + contentDiv.appendChild(knowledgeDiv); + } + + if (isError) { + contentDiv.style.borderLeft = '4px solid #dc3545'; + } + + messageDiv.appendChild(avatar); + messageDiv.appendChild(contentDiv); + messagesContainer.appendChild(messageDiv); + + // 滚动到底部 + messagesContainer.scrollTop = messagesContainer.scrollHeight; + } + + // Agent功能 + async toggleAgentMode(enabled) { + try { + const response = await fetch('/api/agent/toggle', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ enabled }) + }); + + const data = await response.json(); + if (data.success) { + this.isAgentMode = enabled; + this.showNotification(`Agent模式已${enabled ? '启用' : '禁用'}`, 'success'); + this.loadAgentData(); + } else { + this.showNotification('切换Agent模式失败', 'error'); + } + } catch (error) { + console.error('切换Agent模式失败:', error); + this.showNotification('切换Agent模式失败', 'error'); + } + } + + async loadAgentData() { + try { + const [statusResp, toolsResp] = await Promise.all([ + fetch('/api/agent/status'), + fetch('/api/agent/tools/stats') + ]); + const data = await statusResp.json(); + const toolsData = await toolsResp.json(); + + if (data.success) { + document.getElementById('agent-current-state').textContent = data.status || '未知'; + document.getElementById('agent-active-goals').textContent = data.active_goals || 0; + const tools = (toolsData.success ? toolsData.tools : (data.tools || [])) || []; + document.getElementById('agent-available-tools').textContent = tools.length || 0; + + // 更新工具列表(使用真实统计) + this.updateToolsList(tools); + + // 更新执行历史 + this.updateAgentExecutionHistory(data.execution_history || []); + } + } catch (error) { + console.error('加载Agent数据失败:', error); + } + } + + updateToolsList(tools) { + const toolsList = document.getElementById('tools-list'); + if (!tools || tools.length === 0) { + toolsList.innerHTML = '

暂无工具

'; + return; + } + + const toolsHtml = tools.map(tool => { + const usage = tool.usage_count || 0; + const success = Math.round((tool.success_rate || 0) * 100); + const meta = tool.metadata || {}; + return ` +
+
+ ${tool.name} + ${meta.description ? `
${meta.description}
` : ''} + 使用次数: ${usage} +
+
+ ${success}% + +
+
+ `; + }).join(''); + + toolsList.innerHTML = toolsHtml; + + // 绑定执行事件 + toolsList.querySelectorAll('button[data-tool]').forEach(btn => { + btn.addEventListener('click', async () => { + const tool = btn.getAttribute('data-tool'); + // 简单参数输入(可扩展为动态表单) + let params = {}; + try { + const input = prompt('请输入执行参数(JSON):', '{}'); + if (input) params = JSON.parse(input); + } catch (e) { + this.showNotification('参数格式错误,应为JSON', 'warning'); + return; + } + try { + const resp = await fetch('/api/agent/tools/execute', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ tool, parameters: params }) + }); + const res = await resp.json(); + if (res.success) { + this.showNotification(`工具 ${tool} 执行成功`, 'success'); + await this.loadAgentData(); + } else { + this.showNotification(res.error || `工具 ${tool} 执行失败`, 'error'); + } + } catch (err) { + console.error('执行工具失败:', err); + this.showNotification('执行工具失败: ' + err.message, 'error'); + } + }); + }); + + // 追加自定义工具注册入口 + const addDiv = document.createElement('div'); + addDiv.className = 'mt-3'; + addDiv.innerHTML = ` +
+ + + +
+ `; + toolsList.appendChild(addDiv); + document.getElementById('register-tool-btn').addEventListener('click', async () => { + const name = document.getElementById('custom-tool-name').value.trim(); + const description = document.getElementById('custom-tool-desc').value.trim(); + if (!name) { this.showNotification('请输入工具名称', 'warning'); return; } + try { + const resp = await fetch('/api/agent/tools/register', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ name, description }) + }); + const res = await resp.json(); + if (res.success) { + this.showNotification('工具注册成功', 'success'); + this.loadAgentData(); + } else { + this.showNotification(res.error || '工具注册失败', 'error'); + } + } catch (e) { + console.error('注册工具失败:', e); + this.showNotification('注册工具失败', 'error'); + } + }); + } + + updateExecutionHistory(history) { + const historyContainer = document.getElementById('agent-execution-history'); + if (history.length === 0) { + historyContainer.innerHTML = '

暂无执行历史

'; + return; + } + + const historyHtml = history.slice(-5).map(item => ` +
+
+ ${item.type || '未知任务'} + ${new Date(item.timestamp).toLocaleString()} +
+
${item.description || '无描述'}
+
+ + ${item.success ? '成功' : '失败'} + +
+
+ `).join(''); + + historyContainer.innerHTML = historyHtml; + } + + async startAgentMonitoring() { + try { + const response = await fetch('/api/agent/monitoring/start', { method: 'POST' }); + const data = await response.json(); + + if (data.success) { + this.showNotification('Agent监控已启动', 'success'); + } else { + this.showNotification('启动Agent监控失败', 'error'); + } + } catch (error) { + console.error('启动Agent监控失败:', error); + this.showNotification('启动Agent监控失败', 'error'); + } + } + + async stopAgentMonitoring() { + try { + const response = await fetch('/api/agent/monitoring/stop', { method: 'POST' }); + const data = await response.json(); + + if (data.success) { + this.showNotification('Agent监控已停止', 'success'); + } else { + this.showNotification('停止Agent监控失败', 'error'); + } + } catch (error) { + console.error('停止Agent监控失败:', error); + this.showNotification('停止Agent监控失败', 'error'); + } + } + + async proactiveMonitoring() { + try { + const response = await fetch('/api/agent/proactive-monitoring', { method: 'POST' }); + const data = await response.json(); + + if (data.success) { + this.showNotification(`主动监控完成,发现 ${data.proactive_actions?.length || 0} 个行动机会`, 'info'); + } else { + this.showNotification('主动监控失败', 'error'); + } + } catch (error) { + console.error('主动监控失败:', error); + this.showNotification('主动监控失败', 'error'); + } + } + + async intelligentAnalysis() { + try { + const response = await fetch('/api/agent/intelligent-analysis', { method: 'POST' }); + const data = await response.json(); + + if (data.success) { + this.showNotification('智能分析完成', 'success'); + // 更新分析图表 + this.updateAnalyticsChart(data.analysis); + } else { + this.showNotification('智能分析失败', 'error'); + } + } catch (error) { + console.error('智能分析失败:', error); + this.showNotification('智能分析失败', 'error'); + } + } + + updateAnalyticsChart(analysis) { + if (!this.charts.analytics || !analysis) return; + + // 更新分析图表数据 + const labels = analysis.trends?.dates || []; + const satisfactionData = analysis.trends?.satisfaction || []; + const resolutionTimeData = analysis.trends?.resolution_time || []; + + this.charts.analytics.data.labels = labels; + this.charts.analytics.data.datasets[0].data = satisfactionData; + this.charts.analytics.data.datasets[1].data = resolutionTimeData; + this.charts.analytics.update(); + } + + // 预警管理 + async loadAlerts(page = 1, forceRefresh = false) { + const cacheKey = `alerts_page_${page}`; + + if (!forceRefresh && this.cache.has(cacheKey)) { + const cachedData = this.cache.get(cacheKey); + this.updateAlertsDisplay(cachedData.alerts); + this.updateAlertsPagination(cachedData); + this.updateAlertStatistics(cachedData.alerts); // 添加统计更新 + return; + } + + try { + const pageSize = this.getPageSize('alerts-pagination'); + const response = await fetch(`/api/alerts?page=${page}&per_page=${pageSize}`); + const data = await response.json(); + + this.cache.set(cacheKey, data); + this.updateAlertsDisplay(data.alerts); + this.updateAlertsPagination(data); + this.updateAlertStatistics(data.alerts); // 添加统计更新 + } catch (error) { + console.error('加载预警失败:', error); + this.showNotification('加载预警失败', 'error'); + } + } + + updateAlertsDisplay(alerts) { + const container = document.getElementById('alerts-container'); + + if (alerts.length === 0) { + container.innerHTML = ` +
+ +
暂无活跃预警
+

系统运行正常,没有需要处理的预警

+
+ `; + return; + } + + // 添加预警列表的批量操作头部 + const headerHtml = ` +
+
+ + +
+
+ +
+
+ `; + + const alertsHtml = alerts.map(alert => ` +
+
+
+ +
+
+ ${this.getLevelText(alert.level)} + ${alert.rule_name || '未知规则'} + ${this.formatTime(alert.created_at)} +
+
${alert.message}
+
+ 类型: ${this.getTypeText(alert.alert_type)} | + 级别: ${this.getLevelText(alert.level)} +
+
+
+
+ +
+
+
+ `).join(''); + + container.innerHTML = headerHtml + alertsHtml; + } + + updateAlertsPagination(data) { + this.createPaginationComponent(data, 'alerts-pagination', 'loadAlerts', '条预警'); + } + + updateAlertStatistics(alerts) { + // 如果传入的是分页数据,需要重新获取全部数据来计算统计 + if (alerts && alerts.length > 0) { + // 检查是否是分页数据(通常分页数据少于50条) + const pageSize = this.getPageSize('alerts-pagination'); + if (alerts.length <= pageSize) { + // 可能是分页数据,需要获取全部数据 + this.updateAlertStatisticsFromAPI(); + return; + } + } + + // 使用传入的数据计算统计 + const stats = (alerts || []).reduce((acc, alert) => { + acc[alert.level] = (acc[alert.level] || 0) + 1; + acc.total = (acc.total || 0) + 1; + return acc; + }, {}); + + document.getElementById('critical-alerts').textContent = stats.critical || 0; + document.getElementById('warning-alerts').textContent = stats.warning || 0; + document.getElementById('info-alerts').textContent = stats.info || 0; + document.getElementById('total-alerts-count').textContent = stats.total || 0; + } + + // 从API获取全部预警数据来计算统计 + async updateAlertStatisticsFromAPI() { + try { + // 获取全部预警数据(不分页) + const response = await fetch('/api/alerts?per_page=1000'); // 获取大量数据 + const data = await response.json(); + + if (data.alerts) { + const stats = data.alerts.reduce((acc, alert) => { + acc[alert.level] = (acc[alert.level] || 0) + 1; + acc.total = (acc.total || 0) + 1; + return acc; + }, {}); + + document.getElementById('critical-alerts').textContent = stats.critical || 0; + document.getElementById('warning-alerts').textContent = stats.warning || 0; + document.getElementById('info-alerts').textContent = stats.info || 0; + document.getElementById('total-alerts-count').textContent = stats.total || 0; + + // 更新缓存 + this.cache.set('alerts_stats', { + data: data.alerts, + timestamp: Date.now() + }); + } + } catch (error) { + console.error('获取全部预警统计失败:', error); + } + } + + // 预警批量删除功能 + toggleSelectAllAlerts() { + const selectAllCheckbox = document.getElementById('select-all-alerts'); + const alertCheckboxes = document.querySelectorAll('.alert-checkbox'); + + alertCheckboxes.forEach(checkbox => { + checkbox.checked = selectAllCheckbox.checked; + }); + + this.updateBatchDeleteAlertsButton(); + } + + updateBatchDeleteAlertsButton() { + const selectedCheckboxes = document.querySelectorAll('.alert-checkbox:checked'); + const batchDeleteBtn = document.getElementById('batch-delete-alerts'); + + if (batchDeleteBtn) { + batchDeleteBtn.disabled = selectedCheckboxes.length === 0; + batchDeleteBtn.textContent = selectedCheckboxes.length > 0 + ? `批量删除 (${selectedCheckboxes.length})` + : '批量删除'; + } + } + + async batchDeleteAlerts() { + const selectedCheckboxes = document.querySelectorAll('.alert-checkbox:checked'); + const selectedIds = Array.from(selectedCheckboxes).map(cb => parseInt(cb.value)); + + if (selectedIds.length === 0) { + this.showNotification('请选择要删除的预警', 'warning'); + return; + } + + if (!confirm(`确定要删除选中的 ${selectedIds.length} 个预警吗?此操作不可撤销。`)) { + return; + } + + try { + const response = await fetch('/api/batch-delete/alerts', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ ids: selectedIds }) + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification(data.message, 'success'); + + // 清除所有相关缓存 + this.cache.delete('alerts'); + this.cache.delete('alerts_stats'); + + // 立即更新统计数字,避免跳动 + await this.updateStatsAfterDelete(selectedIds.length); + + // 重新加载预警列表 + await this.loadAlerts(); + + // 重置批量删除按钮状态 + this.updateBatchDeleteAlertsButton(); + } else { + this.showNotification(data.error || '批量删除失败', 'error'); + } + } catch (error) { + console.error('批量删除预警失败:', error); + this.showNotification('批量删除预警失败', 'error'); + } + } + + // 删除后更新统计数字(平滑更新) + async updateStatsAfterDelete(deletedCount) { + try { + // 直接调用API获取最新统计,不依赖页面显示数据 + await this.updateAlertStatisticsFromAPI(); + + // 更新最后更新时间,避免智能更新机制干扰 + this.lastUpdateTimes.alerts = Date.now(); + + } catch (error) { + console.error('更新删除后统计失败:', error); + // 如果计算失败,直接刷新 + await this.refreshAlertStats(); + } + } + + // 获取当前显示的预警数据 + getCurrentDisplayedAlerts() { + const alertElements = document.querySelectorAll('.alert-item'); + const alerts = []; + + alertElements.forEach(element => { + const level = element.querySelector('.alert-level')?.textContent?.trim(); + if (level) { + alerts.push({ level: level.toLowerCase() }); + } + }); + + return alerts; + } + + // 计算预警统计 + calculateAlertStats(alerts) { + const stats = { critical: 0, warning: 0, info: 0, total: 0 }; + + alerts.forEach(alert => { + const level = alert.level.toLowerCase(); + if (stats.hasOwnProperty(level)) { + stats[level]++; + } + stats.total++; + }); + + return stats; + } + + // 平滑更新预警统计数字 + smoothUpdateAlertStats(newStats) { + // 获取当前显示的数字 + const currentCritical = parseInt(document.getElementById('critical-alerts')?.textContent || '0'); + const currentWarning = parseInt(document.getElementById('warning-alerts')?.textContent || '0'); + const currentInfo = parseInt(document.getElementById('info-alerts')?.textContent || '0'); + const currentTotal = parseInt(document.getElementById('total-alerts-count')?.textContent || '0'); + + // 平滑过渡到新数字 + this.animateNumberChange('critical-alerts', currentCritical, newStats.critical); + this.animateNumberChange('warning-alerts', currentWarning, newStats.warning); + this.animateNumberChange('info-alerts', currentInfo, newStats.info); + this.animateNumberChange('total-alerts-count', currentTotal, newStats.total); + } + + // 数字变化动画 + animateNumberChange(elementId, from, to) { + const element = document.getElementById(elementId); + if (!element) return; + + const duration = 300; // 300ms动画 + const startTime = Date.now(); + + const animate = () => { + const elapsed = Date.now() - startTime; + const progress = Math.min(elapsed / duration, 1); + + // 使用缓动函数 + const easeOut = 1 - Math.pow(1 - progress, 3); + const currentValue = Math.round(from + (to - from) * easeOut); + + element.textContent = currentValue; + + if (progress < 1) { + requestAnimationFrame(animate); + } + }; + + requestAnimationFrame(animate); + } + + // 解决预警后更新统计数字 + async updateStatsAfterResolve(alertId) { + try { + // 直接调用API获取最新统计,不依赖页面显示数据 + await this.updateAlertStatisticsFromAPI(); + + // 更新最后更新时间,避免智能更新机制干扰 + this.lastUpdateTimes.alerts = Date.now(); + + } catch (error) { + console.error('更新解决后统计失败:', error); + // 如果计算失败,直接刷新 + await this.refreshAlertStats(); + } + } + + async resolveAlert(alertId) { + try { + const response = await fetch(`/api/alerts/${alertId}/resolve`, { method: 'POST' }); + const data = await response.json(); + + if (data.success) { + this.showNotification('预警已解决', 'success'); + + // 清除缓存 + this.cache.delete('alerts'); + this.cache.delete('alerts_stats'); + + // 立即更新统计数字 + await this.updateStatsAfterResolve(alertId); + + // 重新加载预警列表 + this.loadAlerts(); + } else { + this.showNotification('解决预警失败', 'error'); + } + } catch (error) { + console.error('解决预警失败:', error); + this.showNotification('解决预警失败', 'error'); + } + } + + // 知识库管理 + async loadKnowledge(page = 1) { + try { + const pageSize = this.getPageSize('knowledge-pagination'); + const response = await fetch(`/api/knowledge?page=${page}&per_page=${pageSize}`); + const data = await response.json(); + + if (data.knowledge) { + this.updateKnowledgeDisplay(data.knowledge); + this.updateKnowledgePagination(data); + } else { + // 兼容旧格式 + this.updateKnowledgeDisplay(data); + } + } catch (error) { + console.error('加载知识库失败:', error); + } + } + + updateKnowledgeDisplay(knowledge) { + const container = document.getElementById('knowledge-list'); + + if (knowledge.length === 0) { + container.innerHTML = '

暂无知识条目

'; + return; + } + + // 添加知识库列表的批量操作头部 + const headerHtml = ` +
+
+ + +
+
+ +
+
+ `; + + const knowledgeHtml = knowledge.map(item => ` +
+
+
+ +
+
${item.question}
+

${item.answer}

+
+ 分类: ${item.category} + 置信度: ${Math.round(item.confidence_score * 100)}% + 使用次数: ${item.usage_count || 0} + + ${item.is_verified ? '已验证' : '未验证'} + +
+
+
+
+
+ ${item.is_verified ? + `` : + `` + } + +
+
+
+
+ `).join(''); + + container.innerHTML = headerHtml + knowledgeHtml; + } + + updateKnowledgePagination(data) { + this.createPaginationComponent(data, 'knowledge-pagination', 'loadKnowledge', '条知识'); + } + + async searchKnowledge() { + const query = document.getElementById('knowledge-search').value.trim(); + if (!query) { + this.loadKnowledge(); + return; + } + + try { + const response = await fetch(`/api/knowledge/search?q=${encodeURIComponent(query)}`); + const results = await response.json(); + this.updateKnowledgeDisplay(results); + } catch (error) { + console.error('搜索知识库失败:', error); + } + } + + async addKnowledge() { + const question = document.getElementById('knowledge-question').value.trim(); + const answer = document.getElementById('knowledge-answer').value.trim(); + const category = document.getElementById('knowledge-category').value; + const confidence = parseFloat(document.getElementById('knowledge-confidence').value); + + if (!question || !answer) { + this.showNotification('请填写完整信息', 'warning'); + return; + } + + try { + const response = await fetch('/api/knowledge', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + question, + answer, + category, + confidence_score: confidence + }) + }); + + const data = await response.json(); + if (data.success) { + this.showNotification('知识添加成功', 'success'); + bootstrap.Modal.getInstance(document.getElementById('addKnowledgeModal')).hide(); + document.getElementById('knowledge-form').reset(); + this.loadKnowledge(); + } else { + this.showNotification('添加知识失败', 'error'); + } + } catch (error) { + console.error('添加知识失败:', error); + this.showNotification('添加知识失败', 'error'); + } + } + + async uploadFile() { + const fileInput = document.getElementById('file-input'); + const processMethod = document.getElementById('process-method').value; + const category = document.getElementById('file-category').value; + const confidence = parseFloat(document.getElementById('file-confidence').value); + const manualQuestion = document.getElementById('manual-question').value.trim(); + + if (!fileInput.files[0]) { + this.showNotification('请选择文件', 'warning'); + return; + } + + if (processMethod === 'manual' && !manualQuestion) { + this.showNotification('请指定问题', 'warning'); + return; + } + + // 显示进度条 + const progressDiv = document.getElementById('upload-progress'); + const progressBar = progressDiv.querySelector('.progress-bar'); + const statusText = document.getElementById('upload-status'); + + progressDiv.style.display = 'block'; + progressBar.style.width = '0%'; + statusText.textContent = '正在上传文件...'; + + try { + const formData = new FormData(); + formData.append('file', fileInput.files[0]); + formData.append('process_method', processMethod); + formData.append('category', category); + formData.append('confidence_score', confidence); + if (manualQuestion) { + formData.append('manual_question', manualQuestion); + } + + // 模拟进度更新 + let progress = 0; + const progressInterval = setInterval(() => { + progress += Math.random() * 20; + if (progress > 90) progress = 90; + progressBar.style.width = progress + '%'; + + if (progress < 30) { + statusText.textContent = '正在上传文件...'; + } else if (progress < 60) { + statusText.textContent = '正在解析文件内容...'; + } else if (progress < 90) { + statusText.textContent = '正在生成知识库...'; + } + }, 500); + + const response = await fetch('/api/knowledge/upload', { + method: 'POST', + body: formData + }); + + clearInterval(progressInterval); + progressBar.style.width = '100%'; + statusText.textContent = '处理完成!'; + + const data = await response.json(); + + setTimeout(() => { + progressDiv.style.display = 'none'; + + if (data.success) { + this.showNotification(`文件处理成功,生成了 ${data.knowledge_count || 0} 条知识`, 'success'); + bootstrap.Modal.getInstance(document.getElementById('uploadFileModal')).hide(); + document.getElementById('file-upload-form').reset(); + this.loadKnowledge(); + } else { + this.showNotification(data.error || '文件处理失败', 'error'); + } + }, 1000); + + } catch (error) { + console.error('文件上传失败:', error); + progressDiv.style.display = 'none'; + this.showNotification('文件上传失败', 'error'); + } + } + + async verifyKnowledge(knowledgeId) { + try { + const response = await fetch(`/api/knowledge/verify/${knowledgeId}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + verified_by: 'admin' + }) + }); + + const data = await response.json(); + if (data.success) { + this.showNotification('知识库验证成功', 'success'); + this.loadKnowledge(); + } else { + this.showNotification('知识库验证失败', 'error'); + } + } catch (error) { + console.error('验证知识库失败:', error); + this.showNotification('验证知识库失败', 'error'); + } + } + + async unverifyKnowledge(knowledgeId) { + try { + const response = await fetch(`/api/knowledge/unverify/${knowledgeId}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + } + }); + + const data = await response.json(); + if (data.success) { + this.showNotification('取消验证成功', 'success'); + this.loadKnowledge(); + } else { + this.showNotification('取消验证失败', 'error'); + } + } catch (error) { + console.error('取消验证失败:', error); + this.showNotification('取消验证失败', 'error'); + } + } + + async deleteKnowledge(knowledgeId) { + if (!confirm('确定要删除这条知识库条目吗?')) { + return; + } + + try { + const response = await fetch(`/api/knowledge/delete/${knowledgeId}`, { + method: 'DELETE' + }); + + const data = await response.json(); + if (data.success) { + this.showNotification('知识库删除成功', 'success'); + this.loadKnowledge(); + } else { + this.showNotification('知识库删除失败', 'error'); + } + } catch (error) { + console.error('删除知识库失败:', error); + this.showNotification('删除知识库失败', 'error'); + } + } + + // 知识库批量删除功能 + toggleSelectAllKnowledge() { + const selectAllCheckbox = document.getElementById('select-all-knowledge'); + const knowledgeCheckboxes = document.querySelectorAll('.knowledge-checkbox'); + + knowledgeCheckboxes.forEach(checkbox => { + checkbox.checked = selectAllCheckbox.checked; + }); + + this.updateBatchDeleteKnowledgeButton(); + } + + updateBatchDeleteKnowledgeButton() { + const selectedCheckboxes = document.querySelectorAll('.knowledge-checkbox:checked'); + const batchDeleteBtn = document.getElementById('batch-delete-knowledge'); + + if (batchDeleteBtn) { + batchDeleteBtn.disabled = selectedCheckboxes.length === 0; + batchDeleteBtn.textContent = selectedCheckboxes.length > 0 + ? `批量删除 (${selectedCheckboxes.length})` + : '批量删除'; + } + } + + async batchDeleteKnowledge() { + const selectedCheckboxes = document.querySelectorAll('.knowledge-checkbox:checked'); + const selectedIds = Array.from(selectedCheckboxes).map(cb => parseInt(cb.value)); + + if (selectedIds.length === 0) { + this.showNotification('请选择要删除的知识库条目', 'warning'); + return; + } + + if (!confirm(`确定要删除选中的 ${selectedIds.length} 个知识库条目吗?此操作不可撤销。`)) { + return; + } + + try { + const response = await fetch('/api/batch-delete/knowledge', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ ids: selectedIds }) + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification(data.message, 'success'); + + // 清除缓存并强制刷新 + this.cache.delete('knowledge'); + await this.loadKnowledge(); + + // 重置批量删除按钮状态 + this.updateBatchDeleteKnowledgeButton(); + } else { + this.showNotification(data.error || '批量删除失败', 'error'); + } + } catch (error) { + console.error('批量删除知识库条目失败:', error); + this.showNotification('批量删除知识库条目失败', 'error'); + } + } + + // 工单管理 + async loadWorkOrders(page = 1, forceRefresh = false) { + const cacheKey = `workorders_page_${page}`; + + if (!forceRefresh && this.cache.has(cacheKey)) { + const cachedData = this.cache.get(cacheKey); + this.updateWorkOrdersDisplay(cachedData.workorders); + this.updateWorkOrdersPagination(cachedData); + // 不在这里更新统计,因为分页数据不完整 + return; + } + + try { + const statusFilter = document.getElementById('workorder-status-filter')?.value || 'all'; + const priorityFilter = document.getElementById('workorder-priority-filter')?.value || 'all'; + + let url = '/api/workorders'; + const params = new URLSearchParams(); + params.append('page', page); + const pageSize = this.getPageSize('workorders-pagination'); + params.append('per_page', pageSize.toString()); + if (statusFilter !== 'all') params.append('status', statusFilter); + if (priorityFilter !== 'all') params.append('priority', priorityFilter); + + // 添加强制刷新参数 + if (forceRefresh) { + params.append('_t', Date.now().toString()); + } + + if (params.toString()) url += '?' + params.toString(); + + const response = await fetch(url, { + cache: forceRefresh ? 'no-cache' : 'default', + headers: forceRefresh ? { + 'Cache-Control': 'no-cache', + 'Pragma': 'no-cache' + } : {} + }); + + if (!response.ok) { + throw new Error(`HTTP ${response.status}: ${response.statusText}`); + } + + const data = await response.json(); + this.updateWorkOrdersDisplay(data.workorders); + this.updateWorkOrdersPagination(data); + // 不在这里更新统计,因为分页数据不完整 + + // 更新缓存 + this.cache.set(cacheKey, data); + + } catch (error) { + console.error('加载工单失败:', error); + this.showNotification('加载工单失败: ' + error.message, 'error'); + } + } + + updateWorkOrdersDisplay(workorders) { + const container = document.getElementById('workorders-list'); + + if (workorders.length === 0) { + container.innerHTML = '

暂无工单

'; + return; + } + + // 添加工单列表的批量操作头部 + const headerHtml = ` +
+
+ + +
+
+ +
+
+ `; + + const workordersHtml = workorders.map(workorder => ` +
+
+
+ +
+
${workorder.title}
+

${workorder.description ? workorder.description.substring(0, 100) + (workorder.description.length > 100 ? '...' : '') : '无处理过程'}

+
+ ${this.getPriorityText(workorder.priority)} + ${this.getStatusText(workorder.status)} + 分类: ${workorder.category} + 创建时间: ${new Date(workorder.created_at).toLocaleString()} +
+
+
+
+
+ + + +
+
+
+
+ `).join(''); + + container.innerHTML = headerHtml + workordersHtml; + } + + updateWorkOrdersPagination(data) { + this.createPaginationComponent(data, 'workorders-pagination', 'loadWorkOrders', '个工单'); + } + + updateWorkOrderStatistics(workorders) { + const stats = workorders.reduce((acc, wo) => { + acc.total = (acc.total || 0) + 1; + acc[wo.status] = (acc[wo.status] || 0) + 1; + return acc; + }, {}); + + // 状态映射 + const statusMapping = { + 'open': ['open', '待处理', '新建', 'new'], + 'in_progress': ['in_progress', '处理中', '进行中', 'progress', 'processing'], + 'resolved': ['resolved', '已解决', '已完成'], + 'closed': ['closed', '已关闭', '关闭'] + }; + + // 统计各状态的数量 + const mapped_counts = {'open': 0, 'in_progress': 0, 'resolved': 0, 'closed': 0}; + + for (const [status, count] of Object.entries(stats)) { + if (status === 'total') continue; + + const status_lower = String(status).toLowerCase(); + let mapped = false; + + for (const [mapped_status, possible_values] of Object.entries(statusMapping)) { + if (possible_values.some(v => v.toLowerCase() === status_lower)) { + mapped_counts[mapped_status] += count; + mapped = true; + break; + } + } + + if (!mapped) { + console.warn(`未映射的状态: '${status}' (数量: ${count})`); + } + } + + document.getElementById('workorders-total').textContent = stats.total || 0; + document.getElementById('workorders-open').textContent = mapped_counts['open']; + document.getElementById('workorders-progress').textContent = mapped_counts['in_progress']; + document.getElementById('workorders-resolved').textContent = mapped_counts['resolved']; + + console.log('工单统计更新:', { + total: stats.total, + open: mapped_counts['open'], + in_progress: mapped_counts['in_progress'], + resolved: mapped_counts['resolved'], + closed: mapped_counts['closed'] + }); + } + + // 工单批量删除功能 + toggleSelectAllWorkorders() { + const selectAllCheckbox = document.getElementById('select-all-workorders'); + const workorderCheckboxes = document.querySelectorAll('.workorder-checkbox'); + + workorderCheckboxes.forEach(checkbox => { + checkbox.checked = selectAllCheckbox.checked; + }); + + this.updateBatchDeleteButton(); + } + + updateBatchDeleteButton() { + const selectedCheckboxes = document.querySelectorAll('.workorder-checkbox:checked'); + const batchDeleteBtn = document.getElementById('batch-delete-workorders'); + + if (batchDeleteBtn) { + batchDeleteBtn.disabled = selectedCheckboxes.length === 0; + batchDeleteBtn.textContent = selectedCheckboxes.length > 0 + ? `批量删除 (${selectedCheckboxes.length})` + : '批量删除'; + } + } + + async batchDeleteWorkorders() { + const selectedCheckboxes = document.querySelectorAll('.workorder-checkbox:checked'); + const selectedIds = Array.from(selectedCheckboxes).map(cb => parseInt(cb.value)); + + if (selectedIds.length === 0) { + this.showNotification('请选择要删除的工单', 'warning'); + return; + } + + if (!confirm(`确定要删除选中的 ${selectedIds.length} 个工单吗?此操作不可撤销。`)) { + return; + } + + try { + const response = await fetch('/api/batch-delete/workorders', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ ids: selectedIds }) + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification(data.message, 'success'); + + // 清除缓存并强制刷新 + this.cache.delete('workorders'); + await this.loadWorkOrders(true); // 强制刷新 + await this.loadAnalytics(); + + // 重置批量删除按钮状态 + this.updateBatchDeleteButton(); + } else { + this.showNotification(data.error || '批量删除失败', 'error'); + } + } catch (error) { + console.error('批量删除工单失败:', error); + this.showNotification('批量删除工单失败', 'error'); + } + } + + async createWorkOrder() { + const title = document.getElementById('wo-title').value.trim(); + const description = document.getElementById('wo-description').value.trim(); + const category = document.getElementById('wo-category').value; + const priority = document.getElementById('wo-priority').value; + + if (!title || !description) { + this.showNotification('请填写完整信息', 'warning'); + return; + } + + try { + const response = await fetch('/api/workorders', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + title, + description, + category, + priority + }) + }); + + const data = await response.json(); + if (data.success) { + this.showNotification('工单创建成功', 'success'); + bootstrap.Modal.getInstance(document.getElementById('createWorkOrderModal')).hide(); + document.getElementById('work-order-form').reset(); + // 立即刷新工单列表和统计 + await this.loadWorkOrders(); + await this.loadAnalytics(); + } else { + this.showNotification('创建工单失败: ' + (data.error || '未知错误'), 'error'); + } + } catch (error) { + console.error('创建工单失败:', error); + this.showNotification('创建工单失败', 'error'); + } + } + + async viewWorkOrderDetails(workorderId) { + try { + const response = await fetch(`/api/workorders/${workorderId}`); + const workorder = await response.json(); + + if (workorder.error) { + this.showNotification('获取工单详情失败', 'error'); + return; + } + + this.showWorkOrderDetailsModal(workorder); + } catch (error) { + console.error('获取工单详情失败:', error); + this.showNotification('获取工单详情失败', 'error'); + } + } + + showWorkOrderDetailsModal(workorder) { + // 创建模态框HTML + const modalHtml = ` + + `; + + // 移除已存在的模态框 + const existingModal = document.getElementById('workOrderDetailsModal'); + if (existingModal) { + existingModal.remove(); + } + + // 添加新的模态框到页面 + document.body.insertAdjacentHTML('beforeend', modalHtml); + + // 显示模态框 + const modal = new bootstrap.Modal(document.getElementById('workOrderDetailsModal')); + modal.show(); + + // 模态框关闭时移除DOM元素 + document.getElementById('workOrderDetailsModal').addEventListener('hidden.bs.modal', function() { + this.remove(); + }); + } + + async updateWorkOrder(workorderId) { + try { + // 获取工单详情 + const response = await fetch(`/api/workorders/${workorderId}`); + const workorder = await response.json(); + + if (workorder.id) { + this.showEditWorkOrderModal(workorder); + } else { + throw new Error(workorder.error || '获取工单详情失败'); + } + } catch (error) { + console.error('获取工单详情失败:', error); + this.showNotification('获取工单详情失败: ' + error.message, 'error'); + } + } + + async deleteWorkOrder(workorderId) { + console.log('deleteWorkOrder called with ID:', workorderId); + + if (!confirm('确定要删除这个工单吗?此操作不可撤销。')) { + console.log('用户取消了删除操作'); + return; + } + + try { + console.log('发送删除请求到:', `/api/workorders/${workorderId}`); + const response = await fetch(`/api/workorders/${workorderId}`, { + method: 'DELETE' + }); + + console.log('删除响应状态:', response.status); + const data = await response.json(); + console.log('删除响应数据:', data); + + if (data.success) { + this.showNotification('工单删除成功', 'success'); + // 立即刷新工单列表和统计 + await this.loadWorkOrders(); + await this.loadAnalytics(); + } else { + this.showNotification('删除工单失败: ' + (data.error || '未知错误'), 'error'); + } + } catch (error) { + console.error('删除工单失败:', error); + this.showNotification('删除工单失败: ' + error.message, 'error'); + } + } + + showEditWorkOrderModal(workorder) { + // 创建编辑工单模态框 + const modalHtml = ` + + `; + + // 移除已存在的模态框 + const existingModal = document.getElementById('editWorkOrderModal'); + if (existingModal) { + existingModal.remove(); + } + + // 添加新模态框到页面 + document.body.insertAdjacentHTML('beforeend', modalHtml); + + // 显示模态框 + const modal = new bootstrap.Modal(document.getElementById('editWorkOrderModal')); + modal.show(); + + // 模态框关闭时清理 + document.getElementById('editWorkOrderModal').addEventListener('hidden.bs.modal', function() { + this.remove(); + }); + } + + async saveWorkOrder(workorderId) { + try { + // 获取表单数据 + const formData = { + title: document.getElementById('editTitle').value, + description: document.getElementById('editDescription').value, + category: document.getElementById('editCategory').value, + priority: document.getElementById('editPriority').value, + status: document.getElementById('editStatus').value, + resolution: document.getElementById('editResolution').value, + satisfaction_score: parseInt(document.getElementById('editSatisfactionScore').value) || null + }; + + // 验证必填字段 + if (!formData.title.trim() || !formData.description.trim()) { + this.showNotification('标题和描述不能为空', 'error'); + return; + } + + // 发送更新请求 + const response = await fetch(`/api/workorders/${workorderId}`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(formData) + }); + + const result = await response.json(); + + if (result.success) { + this.showNotification('工单更新成功', 'success'); + // 关闭模态框 + const modal = bootstrap.Modal.getInstance(document.getElementById('editWorkOrderModal')); + modal.hide(); + // 刷新工单列表和统计 + await this.loadWorkOrders(); + await this.loadAnalytics(); + } else { + throw new Error(result.error || '更新工单失败'); + } + } catch (error) { + console.error('更新工单失败:', error); + this.showNotification('更新工单失败: ' + error.message, 'error'); + } + } + + // 工单导入功能 + showImportModal() { + // 显示导入模态框 + const modal = new bootstrap.Modal(document.getElementById('importWorkOrderModal')); + modal.show(); + + // 重置表单 + document.getElementById('excel-file-input').value = ''; + document.getElementById('import-progress').classList.add('d-none'); + document.getElementById('import-result').classList.add('d-none'); + } + + async downloadTemplate() { + try { + // 直接请求文件接口,避免浏览器跨源/权限限制 + const resp = await fetch('/api/workorders/import/template/file'); + if (!resp.ok) throw new Error('下载接口返回错误'); + const blob = await resp.blob(); + const blobUrl = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = blobUrl; + a.download = '工单导入模板.xlsx'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + window.URL.revokeObjectURL(blobUrl); + this.showNotification('模板下载成功', 'success'); + } catch (error) { + console.error('下载模板失败:', error); + this.showNotification('下载模板失败: ' + error.message, 'error'); + } + } + + async importWorkOrders() { + const fileInput = document.getElementById('excel-file-input'); + const file = fileInput.files[0]; + + if (!file) { + this.showNotification('请选择要导入的Excel文件', 'error'); + return; + } + + // 验证文件类型 + if (!file.name.match(/\.(xlsx|xls)$/)) { + this.showNotification('只支持Excel文件(.xlsx, .xls)', 'error'); + return; + } + + // 验证文件大小 + if (file.size > 16 * 1024 * 1024) { + this.showNotification('文件大小不能超过16MB', 'error'); + return; + } + + // 显示进度条 + document.getElementById('import-progress').classList.remove('d-none'); + document.getElementById('import-result').classList.add('d-none'); + + try { + // 创建FormData + const formData = new FormData(); + formData.append('file', file); + + // 发送导入请求 + const response = await fetch('/api/workorders/import', { + method: 'POST', + body: formData + }); + + const result = await response.json(); + + if (result.success) { + // 显示成功消息 + document.getElementById('import-progress').classList.add('d-none'); + document.getElementById('import-result').classList.remove('d-none'); + document.getElementById('import-success-message').textContent = + `成功导入 ${result.imported_count} 个工单`; + + this.showNotification(result.message, 'success'); + + // 刷新工单列表 + this.loadWorkOrders(); + + // 3秒后关闭模态框 + setTimeout(() => { + const modal = bootstrap.Modal.getInstance(document.getElementById('importWorkOrderModal')); + modal.hide(); + }, 3000); + + } else { + throw new Error(result.error || '导入工单失败'); + } + + } catch (error) { + console.error('导入工单失败:', error); + document.getElementById('import-progress').classList.add('d-none'); + this.showNotification('导入工单失败: ' + error.message, 'error'); + } + } + + // 对话历史管理 + async loadConversationHistory(page = 1) { + try { + const pageSize = this.getPageSize('conversations-pagination'); + const response = await fetch(`/api/conversations?page=${page}&per_page=${pageSize}`); + const data = await response.json(); + + if (data.conversations) { + this.renderConversationList(data.conversations || []); + this.updateConversationPagination(data); + this.updateConversationStats(data.stats || {}); + } else { + throw new Error(data.error || '加载对话历史失败'); + } + } catch (error) { + console.error('加载对话历史失败:', error); + this.showNotification('加载对话历史失败: ' + error.message, 'error'); + } + } + + renderConversationList(conversations) { + const container = document.getElementById('conversation-list'); + if (!conversations || conversations.length === 0) { + container.innerHTML = ` +
+ +

暂无对话记录

+
+ `; + return; + } + + const html = conversations.map(conv => ` +
+
+
+
+
用户: ${conv.user_id || '匿名'}
+ ${new Date(conv.timestamp).toLocaleString()} +
+
+ + +
+
+
+

用户: ${conv.user_message?.substring(0, 100)}${conv.user_message?.length > 100 ? '...' : ''}

+

助手: ${conv.assistant_response?.substring(0, 100)}${conv.assistant_response?.length > 100 ? '...' : ''}

+
+
+ 响应时间: ${conv.response_time || 0}ms + ${conv.work_order_id ? `工单: ${conv.work_order_id}` : ''} +
+
+
+ `).join(''); + + container.innerHTML = html; + } + + updateConversationPagination(data) { + this.createPaginationComponent(data, 'conversations-pagination', 'loadConversationHistory', '条对话'); + } + + updateConversationStats(stats) { + document.getElementById('conversation-total').textContent = stats.total || 0; + document.getElementById('conversation-today').textContent = stats.today || 0; + document.getElementById('conversation-avg-response').textContent = `${stats.avg_response_time || 0}ms`; + document.getElementById('conversation-active-users').textContent = stats.active_users || 0; + } + + async refreshConversationHistory() { + // 先尝试触发一次合并迁移(幂等,重复调用也安全) + try { + await fetch('/api/conversations/migrate-merge', { method: 'POST' }); + } catch (e) { /* 忽略迁移失败 */ } + await this.loadConversationHistory(); + this.showNotification('对话历史已刷新', 'success'); + } + + async clearAllConversations() { + if (!confirm('确定要清空所有对话历史吗?此操作不可恢复!')) { + return; + } + + try { + const response = await fetch('/api/conversations/clear', { method: 'DELETE' }); + const data = await response.json(); + + if (data.success) { + this.showNotification('对话历史已清空', 'success'); + await this.loadConversationHistory(); + } else { + throw new Error(data.error || '清空对话历史失败'); + } + } catch (error) { + console.error('清空对话历史失败:', error); + this.showNotification('清空对话历史失败: ' + error.message, 'error'); + } + } + + async deleteConversation(conversationId) { + if (!confirm('确定要删除这条对话记录吗?')) { + return; + } + + try { + const response = await fetch(`/api/conversations/${conversationId}`, { method: 'DELETE' }); + const data = await response.json(); + + if (data.success) { + this.showNotification('对话记录已删除', 'success'); + await this.loadConversationHistory(); + } else { + throw new Error(data.error || '删除对话记录失败'); + } + } catch (error) { + console.error('删除对话记录失败:', error); + this.showNotification('删除对话记录失败: ' + error.message, 'error'); + } + } + + async viewConversation(conversationId) { + try { + const response = await fetch(`/api/conversations/${conversationId}`); + const data = await response.json(); + + if (data.success) { + data.user_id = data.user_id || '匿名'; + this.showConversationModal(data); + } else { + throw new Error(data.error || '获取对话详情失败'); + } + } catch (error) { + console.error('获取对话详情失败:', error); + this.showNotification('获取对话详情失败: ' + error.message, 'error'); + } + } + + showConversationModal(conversation) { + const modalHtml = ` + + `; + + // 移除已存在的模态框 + const existingModal = document.getElementById('conversationModal'); + if (existingModal) { + existingModal.remove(); + } + + // 添加新模态框 + document.body.insertAdjacentHTML('beforeend', modalHtml); + + // 显示模态框 + const modal = new bootstrap.Modal(document.getElementById('conversationModal')); + modal.show(); + } + + async filterConversations() { + const search = document.getElementById('conversation-search').value; + const userFilter = document.getElementById('conversation-user-filter').value; + const dateFilter = document.getElementById('conversation-date-filter').value; + + try { + const params = new URLSearchParams(); + if (search) params.append('search', search); + if (userFilter) params.append('user_id', userFilter); + if (dateFilter) params.append('date_filter', dateFilter); + + const response = await fetch(`/api/conversations?${params.toString()}`); + const data = await response.json(); + + if (data.success) { + this.renderConversationList(data.conversations || []); + this.renderConversationPagination(data.pagination || {}); + } else { + throw new Error(data.error || '筛选对话失败'); + } + } catch (error) { + console.error('筛选对话失败:', error); + this.showNotification('筛选对话失败: ' + error.message, 'error'); + } + } + + // Token监控 + async loadTokenMonitor() { + try { + const response = await fetch('/api/token-monitor/stats'); + const data = await response.json(); + + if (data.success) { + this.updateTokenStats(data); + this.loadTokenChart(); + this.loadTokenRecords(); + } else { + throw new Error(data.error || '加载Token监控数据失败'); + } + } catch (error) { + console.error('加载Token监控数据失败:', error); + this.showNotification('加载Token监控数据失败: ' + error.message, 'error'); + } + } + + updateTokenStats(stats) { + document.getElementById('token-today').textContent = stats.today_tokens || 0; + document.getElementById('token-month').textContent = stats.month_tokens || 0; + document.getElementById('token-cost').textContent = `¥${stats.total_cost || 0}`; + document.getElementById('token-budget').textContent = `¥${stats.budget_limit || 1000}`; + } + + async loadTokenChart() { + try { + const response = await fetch('/api/token-monitor/chart'); + const data = await response.json(); + + if (data.success) { + this.renderTokenChart(data); + } + } catch (error) { + console.error('加载Token图表失败:', error); + } + } + + renderTokenChart(data) { + const ctx = document.getElementById('tokenChart').getContext('2d'); + + if (this.charts.tokenChart) { + this.charts.tokenChart.destroy(); + } + + this.charts.tokenChart = new Chart(ctx, { + type: 'line', + data: { + labels: data.labels || [], + datasets: [{ + label: 'Token消耗', + data: data.tokens || [], + borderColor: '#007bff', + backgroundColor: 'rgba(0, 123, 255, 0.1)', + tension: 0.4 + }, { + label: '成本', + data: data.costs || [], + borderColor: '#28a745', + backgroundColor: 'rgba(40, 167, 69, 0.1)', + tension: 0.4, + yAxisID: 'y1' + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + scales: { + y: { + type: 'linear', + display: true, + position: 'left', + title: { + display: true, + text: 'Token数量' + } + }, + y1: { + type: 'linear', + display: true, + position: 'right', + title: { + display: true, + text: '成本 (元)' + }, + grid: { + drawOnChartArea: false, + }, + } + } + } + }); + } + + async loadTokenRecords() { + try { + const response = await fetch('/api/token-monitor/records'); + const data = await response.json(); + + if (data.success) { + this.renderTokenRecords(data.records || []); + } + } catch (error) { + console.error('加载Token记录失败:', error); + } + } + + renderTokenRecords(records) { + const tbody = document.getElementById('token-records'); + + if (!records || records.length === 0) { + tbody.innerHTML = ` + + 暂无记录 + + `; + return; + } + + const html = records.map(record => ` + + ${new Date(record.timestamp).toLocaleString()} + ${record.user_id || '匿名'} + ${record.model || 'qwen-turbo'} + ${record.input_tokens || 0} + ${record.output_tokens || 0} + ${record.total_tokens || 0} + ¥${record.cost || 0} + ${record.response_time || 0}ms + + `).join(''); + + tbody.innerHTML = html; + } + + async saveTokenSettings() { + const dailyThreshold = document.getElementById('daily-threshold').value; + const monthlyBudget = document.getElementById('monthly-budget').value; + const enableAlerts = document.getElementById('enable-alerts').checked; + + try { + const response = await fetch('/api/token-monitor/settings', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + daily_threshold: parseInt(dailyThreshold), + monthly_budget: parseFloat(monthlyBudget), + enable_alerts: enableAlerts + }) + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification('Token设置已保存', 'success'); + } else { + throw new Error(data.error || '保存Token设置失败'); + } + } catch (error) { + console.error('保存Token设置失败:', error); + this.showNotification('保存Token设置失败: ' + error.message, 'error'); + } + } + + async updateTokenChart(period) { + // 更新按钮状态 + document.querySelectorAll('#tokenChart').forEach(btn => { + btn.classList.remove('active'); + }); + event.target.classList.add('active'); + + try { + const response = await fetch(`/api/token-monitor/chart?period=${period}`); + const data = await response.json(); + + if (data.success) { + this.renderTokenChart(data); + } + } catch (error) { + console.error('更新Token图表失败:', error); + } + } + + async exportTokenData() { + try { + const response = await fetch('/api/token-monitor/export'); + const blob = await response.blob(); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = 'token_usage_data.xlsx'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + window.URL.revokeObjectURL(url); + this.showNotification('Token数据导出成功', 'success'); + } catch (error) { + console.error('导出Token数据失败:', error); + this.showNotification('导出Token数据失败: ' + error.message, 'error'); + } + } + + async refreshTokenData() { + await this.loadTokenMonitor(); + this.showNotification('Token数据已刷新', 'success'); + } + + // AI监控 + async loadAIMonitor() { + try { + const response = await fetch('/api/ai-monitor/stats'); + const data = await response.json(); + + if (data.success) { + this.updateAIStats(data); + this.loadModelComparisonChart(); + this.loadErrorDistributionChart(); + this.loadErrorLog(); + } else { + throw new Error(data.error || '加载AI监控数据失败'); + } + } catch (error) { + console.error('加载AI监控数据失败:', error); + this.showNotification('加载AI监控数据失败: ' + error.message, 'error'); + } + } + + updateAIStats(stats) { + document.getElementById('ai-success-rate').textContent = `${stats.success_rate || 0}%`; + document.getElementById('ai-response-time').textContent = `${stats.avg_response_time || 0}ms`; + document.getElementById('ai-error-rate').textContent = `${stats.error_rate || 0}%`; + document.getElementById('ai-total-calls').textContent = stats.total_calls || 0; + } + + async loadModelComparisonChart() { + try { + const response = await fetch('/api/ai-monitor/model-comparison'); + const data = await response.json(); + + if (data.success) { + this.renderModelComparisonChart(data); + } + } catch (error) { + console.error('加载模型对比图表失败:', error); + } + } + + renderModelComparisonChart(data) { + const ctx = document.getElementById('modelComparisonChart').getContext('2d'); + + if (this.charts.modelComparisonChart) { + this.charts.modelComparisonChart.destroy(); + } + + this.charts.modelComparisonChart = new Chart(ctx, { + type: 'bar', + data: { + labels: data.models || [], + datasets: [{ + label: '成功率 (%)', + data: data.success_rates || [], + backgroundColor: 'rgba(40, 167, 69, 0.8)' + }, { + label: '平均响应时间 (ms)', + data: data.response_times || [], + backgroundColor: 'rgba(255, 193, 7, 0.8)', + yAxisID: 'y1' + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + scales: { + y: { + type: 'linear', + display: true, + position: 'left', + title: { + display: true, + text: '成功率 (%)' + } + }, + y1: { + type: 'linear', + display: true, + position: 'right', + title: { + display: true, + text: '响应时间 (ms)' + }, + grid: { + drawOnChartArea: false, + }, + } + } + } + }); + } + + async loadErrorDistributionChart() { + try { + const response = await fetch('/api/ai-monitor/error-distribution'); + const data = await response.json(); + + if (data.success) { + this.renderErrorDistributionChart(data); + } + } catch (error) { + console.error('加载错误分布图表失败:', error); + } + } + + renderErrorDistributionChart(data) { + const ctx = document.getElementById('errorDistributionChart').getContext('2d'); + + if (this.charts.errorDistributionChart) { + this.charts.errorDistributionChart.destroy(); + } + + this.charts.errorDistributionChart = new Chart(ctx, { + type: 'doughnut', + data: { + labels: data.error_types || [], + datasets: [{ + data: data.counts || [], + backgroundColor: [ + '#dc3545', + '#fd7e14', + '#ffc107', + '#17a2b8', + '#6c757d' + ] + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { + position: 'bottom' + } + } + } + }); + } + + async loadErrorLog() { + try { + const response = await fetch('/api/ai-monitor/error-log'); + const data = await response.json(); + + if (data.success) { + this.renderErrorLog(data.errors || []); + } + } catch (error) { + console.error('加载错误日志失败:', error); + } + } + + renderErrorLog(errors) { + const tbody = document.getElementById('error-log'); + + if (!errors || errors.length === 0) { + tbody.innerHTML = ` + + 暂无错误记录 + + `; + return; + } + + const html = errors.map(error => ` + + ${new Date(error.timestamp).toLocaleString()} + ${error.error_type || '未知'} + ${error.error_message || ''} + ${error.model || 'qwen-turbo'} + ${error.user_id || '匿名'} + + + + + `).join(''); + + tbody.innerHTML = html; + } + + async refreshErrorLog() { + await this.loadErrorLog(); + this.showNotification('错误日志已刷新', 'success'); + } + + async clearErrorLog() { + if (!confirm('确定要清空错误日志吗?')) { + return; + } + + try { + const response = await fetch('/api/ai-monitor/error-log', { method: 'DELETE' }); + const data = await response.json(); + + if (data.success) { + this.showNotification('错误日志已清空', 'success'); + await this.loadErrorLog(); + } else { + throw new Error(data.error || '清空错误日志失败'); + } + } catch (error) { + console.error('清空错误日志失败:', error); + this.showNotification('清空错误日志失败: ' + error.message, 'error'); + } + } + + // 系统优化 + async loadSystemOptimizer() { + try { + const response = await fetch('/api/system-optimizer/status'); + const data = await response.json(); + + if (data.success) { + this.updateSystemStats(data); + this.loadSecuritySettings(); + this.loadTrafficSettings(); + this.loadCostSettings(); + } else { + throw new Error(data.error || '加载系统优化数据失败'); + } + } catch (error) { + console.error('加载系统优化数据失败:', error); + this.showNotification('加载系统优化数据失败: ' + error.message, 'error'); + } + } + + updateSystemStats(stats) { + document.getElementById('cpu-usage').textContent = `${stats.cpu_usage || 0}%`; + document.getElementById('memory-usage-percent').textContent = `${stats.memory_usage || 0}%`; + document.getElementById('disk-usage').textContent = `${stats.disk_usage || 0}%`; + document.getElementById('network-latency').textContent = `${stats.network_latency || 0}ms`; + + // 更新健康指标 + this.updateHealthIndicator('system-health-indicator', stats.system_health || 95); + this.updateHealthIndicator('database-health-indicator', stats.database_health || 98); + this.updateHealthIndicator('api-health-indicator', stats.api_health || 92); + this.updateHealthIndicator('cache-health-indicator', stats.cache_health || 99); + + document.getElementById('system-health-score').textContent = `${stats.system_health || 95}%`; + document.getElementById('database-health-score').textContent = `${stats.database_health || 98}%`; + document.getElementById('api-health-score').textContent = `${stats.api_health || 92}%`; + document.getElementById('cache-health-score').textContent = `${stats.cache_health || 99}%`; + } + + updateHealthIndicator(elementId, score) { + const element = document.getElementById(elementId); + if (!element) return; + + element.className = 'health-dot'; + if (score >= 95) element.classList.add('excellent'); + else if (score >= 85) element.classList.add('good'); + else if (score >= 70) element.classList.add('fair'); + else if (score >= 50) element.classList.add('poor'); + else element.classList.add('critical'); + } + + async optimizeCPU() { + try { + const response = await fetch('/api/system-optimizer/optimize-cpu', { method: 'POST' }); + const data = await response.json(); + + if (data.success) { + this.showNotification(data.message || 'CPU优化完成', 'success'); + this.updateOptimizationProgress('cpu-optimization', data.progress || 100); + // 刷新状态并回落进度条 + await this.loadSystemOptimizer(); + setTimeout(() => this.updateOptimizationProgress('cpu-optimization', 0), 1500); + } else { + throw new Error(data.error || 'CPU优化失败'); + } + } catch (error) { + console.error('CPU优化失败:', error); + this.showNotification('CPU优化失败: ' + error.message, 'error'); + } + } + + async optimizeMemory() { + try { + const response = await fetch('/api/system-optimizer/optimize-memory', { method: 'POST' }); + const data = await response.json(); + + if (data.success) { + this.showNotification(data.message || '内存优化完成', 'success'); + this.updateOptimizationProgress('memory-optimization', data.progress || 100); + await this.loadSystemOptimizer(); + setTimeout(() => this.updateOptimizationProgress('memory-optimization', 0), 1500); + } else { + throw new Error(data.error || '内存优化失败'); + } + } catch (error) { + console.error('内存优化失败:', error); + this.showNotification('内存优化失败: ' + error.message, 'error'); + } + } + + async optimizeDisk() { + try { + const response = await fetch('/api/system-optimizer/optimize-disk', { method: 'POST' }); + const data = await response.json(); + + if (data.success) { + this.showNotification(data.message || '磁盘优化完成', 'success'); + this.updateOptimizationProgress('disk-optimization', data.progress || 100); + await this.loadSystemOptimizer(); + setTimeout(() => this.updateOptimizationProgress('disk-optimization', 0), 1500); + } else { + throw new Error(data.error || '磁盘优化失败'); + } + } catch (error) { + console.error('磁盘优化失败:', error); + this.showNotification('磁盘优化失败: ' + error.message, 'error'); + } + } + + updateOptimizationProgress(elementId, progress) { + const element = document.getElementById(elementId); + if (element) { + element.style.width = `${progress}%`; + } + } + + async saveSecuritySettings() { + const settings = { + input_validation: document.getElementById('input-validation').checked, + rate_limiting: document.getElementById('rate-limiting').checked, + sql_injection_protection: document.getElementById('sql-injection-protection').checked, + xss_protection: document.getElementById('xss-protection').checked + }; + + try { + const response = await fetch('/api/system-optimizer/security-settings', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(settings) + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification('安全设置已保存', 'success'); + } else { + throw new Error(data.error || '保存安全设置失败'); + } + } catch (error) { + console.error('保存安全设置失败:', error); + this.showNotification('保存安全设置失败: ' + error.message, 'error'); + } + } + + async saveTrafficSettings() { + const settings = { + request_limit: parseInt(document.getElementById('request-limit').value), + concurrent_limit: parseInt(document.getElementById('concurrent-limit').value), + ip_whitelist: document.getElementById('ip-whitelist').value.split('\n').filter(ip => ip.trim()) + }; + + try { + const response = await fetch('/api/system-optimizer/traffic-settings', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(settings) + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification('流量设置已保存', 'success'); + } else { + throw new Error(data.error || '保存流量设置失败'); + } + } catch (error) { + console.error('保存流量设置失败:', error); + this.showNotification('保存流量设置失败: ' + error.message, 'error'); + } + } + + async saveCostSettings() { + const settings = { + monthly_budget_limit: parseFloat(document.getElementById('monthly-budget-limit').value), + per_call_cost_limit: parseFloat(document.getElementById('per-call-cost-limit').value), + auto_cost_control: document.getElementById('auto-cost-control').checked + }; + + try { + const response = await fetch('/api/system-optimizer/cost-settings', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(settings) + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification('成本设置已保存', 'success'); + } else { + throw new Error(data.error || '保存成本设置失败'); + } + } catch (error) { + console.error('保存成本设置失败:', error); + this.showNotification('保存成本设置失败: ' + error.message, 'error'); + } + } + + async runHealthCheck() { + try { + const response = await fetch('/api/system-optimizer/health-check', { method: 'POST' }); + const data = await response.json(); + + if (data.success) { + this.showNotification('健康检查完成', 'success'); + this.updateSystemStats(data); + } else { + throw new Error(data.error || '健康检查失败'); + } + } catch (error) { + console.error('健康检查失败:', error); + this.showNotification('健康检查失败: ' + error.message, 'error'); + } + } + + async refreshSystemStatus() { + await this.loadSystemOptimizer(); + this.showNotification('系统状态已刷新', 'success'); + } + + async clearCache() { + try { + const response = await fetch('/api/system-optimizer/clear-cache', { method: 'POST' }); + const data = await response.json(); + if (data.success) { + this.showNotification(data.message || '缓存已清理', 'success'); + await this.loadSystemOptimizer(); + } else { + throw new Error(data.error || '清理缓存失败'); + } + } catch (error) { + console.error('清理缓存失败:', error); + this.showNotification('清理缓存失败: ' + error.message, 'error'); + } + } + + async optimizeAll() { + try { + const response = await fetch('/api/system-optimizer/optimize-all', { method: 'POST' }); + const data = await response.json(); + if (data.success) { + this.showNotification(data.message || '一键优化完成', 'success'); + await this.loadSystemOptimizer(); + ['cpu-optimization','memory-optimization','disk-optimization'].forEach(id => this.updateOptimizationProgress(id, 100)); + setTimeout(() => ['cpu-optimization','memory-optimization','disk-optimization'].forEach(id => this.updateOptimizationProgress(id, 0)), 1500); + } else { + throw new Error(data.error || '一键优化失败'); + } + } catch (error) { + console.error('一键优化失败:', error); + this.showNotification('一键优化失败: ' + error.message, 'error'); + } + } + + async loadSecuritySettings() { + try { + const response = await fetch('/api/system-optimizer/security-settings'); + const data = await response.json(); + + if (data.success) { + document.getElementById('input-validation').checked = data.input_validation || false; + document.getElementById('rate-limiting').checked = data.rate_limiting || false; + document.getElementById('sql-injection-protection').checked = data.sql_injection_protection || false; + document.getElementById('xss-protection').checked = data.xss_protection || false; + } + } catch (error) { + console.error('加载安全设置失败:', error); + } + } + + async loadTrafficSettings() { + try { + const response = await fetch('/api/system-optimizer/traffic-settings'); + const data = await response.json(); + + if (data.success) { + document.getElementById('request-limit').value = data.request_limit || 100; + document.getElementById('concurrent-limit').value = data.concurrent_limit || 50; + document.getElementById('ip-whitelist').value = (data.ip_whitelist || []).join('\n'); + } + } catch (error) { + console.error('加载流量设置失败:', error); + } + } + + async loadCostSettings() { + try { + const response = await fetch('/api/system-optimizer/cost-settings'); + const data = await response.json(); + + if (data.success) { + document.getElementById('monthly-budget-limit').value = data.monthly_budget_limit || 1000; + document.getElementById('per-call-cost-limit').value = data.per_call_cost_limit || 0.1; + document.getElementById('auto-cost-control').checked = data.auto_cost_control || false; + } + } catch (error) { + console.error('加载成本设置失败:', error); + } + } + + // 数据分析 + async loadAnalytics() { + try { + const response = await fetch('/api/analytics'); + const analytics = await response.json(); + this.updateAnalyticsDisplay(analytics); + this.updateStatisticsCards(analytics); // 添加统计卡片更新 + this.initializeCharts(); + } catch (error) { + console.error('加载分析数据失败:', error); + } + } + + // 初始化图表 + initializeCharts() { + if (!this.charts) { + this.charts = {}; + } + this.updateCharts(); + } + + // 清理连接 + cleanupConnections() { + // 关闭WebSocket连接 + if (this.websocket) { + this.websocket.close(); + this.websocket = null; + } + + // 清理所有定时器 + Object.values(this.refreshIntervals).forEach(interval => { + clearInterval(interval); + }); + this.refreshIntervals = {}; + } + + // 销毁所有图表 + destroyAllCharts() { + if (!this.charts) return; + + Object.keys(this.charts).forEach(chartId => { + if (this.charts[chartId]) { + try { + this.charts[chartId].destroy(); + } catch (e) { + console.warn(`Error destroying chart ${chartId}:`, e); + } + this.charts[chartId] = null; + } + }); + + // 清理charts对象 + this.charts = {}; + } + + // 安全的图表创建方法 + createChart(canvasId, chartConfig) { + const canvas = document.getElementById(canvasId); + if (!canvas) { + console.error(`Canvas element '${canvasId}' not found`); + return null; + } + + // 确保charts对象存在 + if (!this.charts) { + this.charts = {}; + } + + // 销毁现有图表 + if (this.charts[canvasId]) { + try { + this.charts[canvasId].destroy(); + } catch (e) { + console.warn(`Error destroying chart ${canvasId}:`, e); + } + this.charts[canvasId] = null; + } + + try { + const ctx = canvas.getContext('2d'); + this.charts[canvasId] = new Chart(ctx, chartConfig); + return this.charts[canvasId]; + } catch (e) { + console.error(`Error creating chart ${canvasId}:`, e); + return null; + } + } + + // 更新所有图表 + async updateCharts() { + try { + const timeRange = document.getElementById('timeRange').value; + const chartType = document.getElementById('chartType').value; + const dataDimension = document.getElementById('dataDimension').value; + + // 获取数据 + const response = await fetch(`/api/analytics?timeRange=${timeRange}&dimension=${dataDimension}`); + const data = await response.json(); + + // 更新统计卡片 + this.updateStatisticsCards(data); + + // 更新图表 + this.updateMainChart(data, chartType); + this.updateDistributionChart(data); + this.updateTrendChart(data); + this.updatePriorityChart(data); + + // 更新分析报告 + this.updateAnalyticsReport(data); + + } catch (error) { + console.error('更新图表失败:', error); + this.showNotification('更新图表失败: ' + error.message, 'error'); + } + } + + // 更新统计卡片 + updateStatisticsCards(data) { + // 更新工单统计 + const total = data.workorders?.total || 0; + const open = data.workorders?.open || 0; + const inProgress = data.workorders?.in_progress || 0; + const resolved = data.workorders?.resolved || 0; + const avgSatisfaction = data.satisfaction?.average || 0; + + // 更新工单统计数字(使用正确的元素ID) + if (document.getElementById('workorders-total')) { + document.getElementById('workorders-total').textContent = total; + } + if (document.getElementById('workorders-open')) { + document.getElementById('workorders-open').textContent = open; + } + if (document.getElementById('workorders-progress')) { + document.getElementById('workorders-progress').textContent = inProgress; + } + if (document.getElementById('workorders-resolved')) { + document.getElementById('workorders-resolved').textContent = resolved; + } + + // 同时更新其他可能的元素ID + if (document.getElementById('totalWorkorders')) { + document.getElementById('totalWorkorders').textContent = total; + } + if (document.getElementById('openWorkorders')) { + document.getElementById('openWorkorders').textContent = open; + } + if (document.getElementById('resolvedWorkorders')) { + document.getElementById('resolvedWorkorders').textContent = resolved; + } + document.getElementById('avgSatisfaction').textContent = avgSatisfaction.toFixed(1); + + // 更新预警统计 + const alertTotal = data.alerts?.total || 0; + const alertActive = data.alerts?.active || 0; + const alertCritical = data.alerts?.by_level?.critical || 0; + const alertWarning = data.alerts?.by_level?.warning || 0; + const alertError = data.alerts?.by_level?.error || 0; + + // 更新预警统计显示 + if (document.getElementById('critical-alerts')) { + document.getElementById('critical-alerts').textContent = alertCritical; + } + if (document.getElementById('warning-alerts')) { + document.getElementById('warning-alerts').textContent = alertWarning; + } + if (document.getElementById('error-alerts')) { + document.getElementById('error-alerts').textContent = alertError; + } + if (document.getElementById('total-alerts-count')) { + document.getElementById('total-alerts-count').textContent = alertTotal; + } + + // 更新性能统计 + const performanceScore = data.performance?.score || 0; + const performanceTrend = data.performance?.trend || 'stable'; + + if (document.getElementById('performance-score')) { + document.getElementById('performance-score').textContent = performanceScore.toFixed(1); + } + if (document.getElementById('performance-trend')) { + document.getElementById('performance-trend').textContent = this.getPerformanceTrendText(performanceTrend); + } + + // 更新满意度统计 + const satisfactionAvg = data.satisfaction?.average || 0; + const satisfactionCount = data.satisfaction?.count || 0; + + if (document.getElementById('satisfaction-avg')) { + document.getElementById('satisfaction-avg').textContent = satisfactionAvg.toFixed(1); + } + if (document.getElementById('satisfaction-count')) { + document.getElementById('satisfaction-count').textContent = satisfactionCount; + } + + // 更新进度条 + if (total > 0) { + document.getElementById('openProgress').style.width = `${(open / total) * 100}%`; + document.getElementById('resolvedProgress').style.width = `${(resolved / total) * 100}%`; + document.getElementById('satisfactionProgress').style.width = `${(avgSatisfaction / 5) * 100}%`; + } + } + + // 更新主图表 + updateMainChart(data, chartType) { + const chartData = this.prepareChartData(data, chartType); + + const chartConfig = { + type: chartType, + data: chartData, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + title: { + display: true, + text: '数据分析趋势' + }, + legend: { + display: true, + position: 'top' + } + }, + scales: chartType === 'pie' || chartType === 'doughnut' ? {} : { + x: { + display: true, + title: { + display: true, + text: '时间' + } + }, + y: { + display: true, + title: { + display: true, + text: '数量' + } + } + } + } + }; + + this.createChart('mainChart', chartConfig); + } + + // 更新分布图表 + updateDistributionChart(data) { + const currentDimension = document.getElementById('dataDimension')?.value || 'workorders'; + + let labels, values, title, backgroundColor; + + if (currentDimension === 'alerts') { + // 预警级别分布 + const alertLevels = data.alerts?.by_level || {}; + labels = Object.keys(alertLevels); + values = Object.values(alertLevels); + title = '预警级别分布'; + backgroundColor = [ + '#FF6384', // critical - 红色 + '#FFCE56', // warning - 黄色 + '#36A2EB', // error - 蓝色 + '#4BC0C0', // info - 青色 + '#9966FF' // 其他 + ]; + } else if (currentDimension === 'performance') { + // 性能指标分布 + const performanceMetrics = data.performance?.by_level || {}; + labels = Object.keys(performanceMetrics); + values = Object.values(performanceMetrics); + title = '性能指标分布'; + backgroundColor = [ + '#28a745', // 优秀 - 绿色 + '#ffc107', // 良好 - 黄色 + '#fd7e14', // 一般 - 橙色 + '#dc3545' // 差 - 红色 + ]; + } else if (currentDimension === 'satisfaction') { + // 满意度分布 + const satisfactionLevels = data.satisfaction?.by_level || {}; + labels = Object.keys(satisfactionLevels); + values = Object.values(satisfactionLevels); + title = '满意度分布'; + backgroundColor = [ + '#28a745', // 非常满意 - 绿色 + '#ffc107', // 满意 - 黄色 + '#fd7e14', // 一般 - 橙色 + '#dc3545' // 不满意 - 红色 + ]; + } else { + // 工单分类分布 + const categories = data.workorders?.by_category || {}; + labels = Object.keys(categories); + values = Object.values(categories); + title = '工单分类分布'; + backgroundColor = [ + '#FF6384', + '#36A2EB', + '#FFCE56', + '#4BC0C0', + '#9966FF', + '#FF9F40' + ]; + } + + const chartConfig = { + type: 'doughnut', + data: { + labels: labels, + datasets: [{ + data: values, + backgroundColor: backgroundColor + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + title: { + display: true, + text: title + }, + legend: { + display: true, + position: 'bottom' + } + } + } + }; + + this.createChart('distributionChart', chartConfig); + } + + // 更新趋势图表 + updateTrendChart(data) { + const ctx = document.getElementById('trendChart').getContext('2d'); + + if (this.charts.trendChart) { + this.charts.trendChart.destroy(); + } + + const trendData = data.trend || []; + const labels = trendData.map(item => item.date); + const workorders = trendData.map(item => item.workorders); + const alerts = trendData.map(item => item.alerts); + + this.charts.trendChart = new Chart(ctx, { + type: 'line', + data: { + labels: labels, + datasets: [{ + label: '工单数量', + data: workorders, + borderColor: '#36A2EB', + backgroundColor: 'rgba(54, 162, 235, 0.1)', + tension: 0.4 + }, { + label: '预警数量', + data: alerts, + borderColor: '#FF6384', + backgroundColor: 'rgba(255, 99, 132, 0.1)', + tension: 0.4 + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + title: { + display: true, + text: '时间趋势分析' + } + }, + scales: { + x: { + display: true, + title: { + display: true, + text: '日期' + } + }, + y: { + display: true, + title: { + display: true, + text: '数量' + } + } + } + } + }); + } + + // 更新优先级图表 + updatePriorityChart(data) { + const ctx = document.getElementById('priorityChart').getContext('2d'); + + if (this.charts.priorityChart) { + this.charts.priorityChart.destroy(); + } + + const currentDimension = document.getElementById('dataDimension')?.value || 'workorders'; + + let labels, values, title, backgroundColor, label; + + if (currentDimension === 'alerts') { + // 预警严重程度分布 + const alertSeverities = data.alerts?.by_severity || {}; + labels = Object.keys(alertSeverities).map(s => this.getSeverityText(s)); + values = Object.values(alertSeverities); + title = '预警严重程度分布'; + label = '预警数量'; + backgroundColor = [ + '#28a745', // low - 绿色 + '#ffc107', // medium - 黄色 + '#fd7e14', // high - 橙色 + '#dc3545' // critical - 红色 + ]; + } else if (currentDimension === 'performance') { + // 性能指标分布 + const performanceMetrics = data.performance?.by_metric || {}; + labels = Object.keys(performanceMetrics); + values = Object.values(performanceMetrics); + title = '性能指标分布'; + label = '性能值'; + backgroundColor = [ + '#28a745', // 优秀 - 绿色 + '#ffc107', // 良好 - 黄色 + '#fd7e14', // 一般 - 橙色 + '#dc3545' // 差 - 红色 + ]; + } else if (currentDimension === 'satisfaction') { + // 满意度分布 + const satisfactionLevels = data.satisfaction?.by_level || {}; + labels = Object.keys(satisfactionLevels).map(s => this.getSatisfactionText(s)); + values = Object.values(satisfactionLevels); + title = '满意度分布'; + label = '满意度数量'; + backgroundColor = [ + '#28a745', // 非常满意 - 绿色 + '#ffc107', // 满意 - 黄色 + '#fd7e14', // 一般 - 橙色 + '#dc3545' // 不满意 - 红色 + ]; + } else { + // 工单优先级分布 + const priorities = data.workorders?.by_priority || {}; + labels = Object.keys(priorities).map(p => this.getPriorityText(p)); + values = Object.values(priorities); + title = '工单优先级分布'; + label = '工单数量'; + backgroundColor = [ + '#28a745', // 低 - 绿色 + '#ffc107', // 中 - 黄色 + '#fd7e14', // 高 - 橙色 + '#dc3545' // 紧急 - 红色 + ]; + } + + this.charts.priorityChart = new Chart(ctx, { + type: 'bar', + data: { + labels: labels, + datasets: [{ + label: label, + data: values, + backgroundColor: backgroundColor + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + title: { + display: true, + text: title + } + }, + scales: { + y: { + beginAtZero: true + } + } + } + }); + } + + // 准备图表数据 + prepareChartData(data, chartType) { + const trendData = data.trend || []; + const labels = trendData.map(item => item.date); + const workorders = trendData.map(item => item.workorders); + const alerts = trendData.map(item => item.alerts); + const performance = trendData.map(item => item.performance || 0); + const satisfaction = trendData.map(item => item.satisfaction || 0); + + if (chartType === 'pie' || chartType === 'doughnut') { + // 根据数据维度选择显示内容 + const currentDimension = document.getElementById('dataDimension')?.value || 'workorders'; + + if (currentDimension === 'alerts') { + const alertLevels = data.alerts?.by_level || {}; + return { + labels: Object.keys(alertLevels), + datasets: [{ + data: Object.values(alertLevels), + backgroundColor: [ + '#FF6384', // critical - 红色 + '#FFCE56', // warning - 黄色 + '#36A2EB', // error - 蓝色 + '#4BC0C0', // info - 青色 + '#9966FF' // 其他 + ] + }] + }; + } else if (currentDimension === 'performance') { + // 性能指标分布 + const performanceMetrics = data.performance || {}; + return { + labels: Object.keys(performanceMetrics), + datasets: [{ + data: Object.values(performanceMetrics), + backgroundColor: [ + '#28a745', // 优秀 - 绿色 + '#ffc107', // 良好 - 黄色 + '#fd7e14', // 一般 - 橙色 + '#dc3545' // 差 - 红色 + ] + }] + }; + } else if (currentDimension === 'satisfaction') { + // 满意度分布 + const satisfactionLevels = data.satisfaction?.by_level || {}; + return { + labels: Object.keys(satisfactionLevels), + datasets: [{ + data: Object.values(satisfactionLevels), + backgroundColor: [ + '#28a745', // 非常满意 - 绿色 + '#ffc107', // 满意 - 黄色 + '#fd7e14', // 一般 - 橙色 + '#dc3545' // 不满意 - 红色 + ] + }] + }; + } else { + const categories = data.workorders?.by_category || {}; + return { + labels: Object.keys(categories), + datasets: [{ + data: Object.values(categories), + backgroundColor: [ + '#FF6384', + '#36A2EB', + '#FFCE56', + '#4BC0C0', + '#9966FF', + '#FF9F40' + ] + }] + }; + } + } else { + // 线图和柱状图根据数据维度显示不同内容 + const currentDimension = document.getElementById('dataDimension')?.value || 'workorders'; + const datasets = []; + + if (currentDimension === 'performance') { + // 性能指标图表 + datasets.push({ + label: '性能指标', + data: performance, + borderColor: '#28a745', + backgroundColor: 'rgba(40, 167, 69, 0.1)', + tension: chartType === 'line' ? 0.4 : 0 + }); + } else if (currentDimension === 'satisfaction') { + // 满意度图表 + datasets.push({ + label: '满意度评分', + data: satisfaction, + borderColor: '#ffc107', + backgroundColor: 'rgba(255, 193, 7, 0.1)', + tension: chartType === 'line' ? 0.4 : 0 + }); + } else { + // 默认显示工单和预警数据 + datasets.push({ + label: '工单数量', + data: workorders, + borderColor: '#36A2EB', + backgroundColor: 'rgba(54, 162, 235, 0.1)', + tension: chartType === 'line' ? 0.4 : 0 + }); + + // 如果有预警数据,添加预警数据集 + if (alerts.some(alert => alert > 0)) { + datasets.push({ + label: '预警数量', + data: alerts, + borderColor: '#FF6384', + backgroundColor: 'rgba(255, 99, 132, 0.1)', + tension: chartType === 'line' ? 0.4 : 0 + }); + } + } + + return { + labels: labels, + datasets: datasets + }; + } + } + + // 导出图表 + exportChart(chartId) { + if (this.charts[chartId]) { + const link = document.createElement('a'); + link.download = `${chartId}_chart.png`; + link.href = this.charts[chartId].toBase64Image(); + link.click(); + } + } + + // 全屏图表 + fullscreenChart(chartId) { + // 这里可以实现全屏显示功能 + this.showNotification('全屏功能开发中', 'info'); + } + + // 导出报告 + async exportReport() { + try { + const response = await fetch('/api/analytics/export'); + const blob = await response.blob(); + const url = window.URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = 'analytics_report.xlsx'; + link.click(); + window.URL.revokeObjectURL(url); + } catch (error) { + console.error('导出报告失败:', error); + this.showNotification('导出报告失败: ' + error.message, 'error'); + } + } + + // 打印报告 + printReport() { + window.print(); + } + + // Agent执行历史相关功能 + async refreshAgentHistory() { + try { + const response = await fetch('/api/agent/action-history?limit=20'); + const data = await response.json(); + + if (data.success) { + this.updateAgentExecutionHistory(data.history); + this.showNotification(`已加载 ${data.count} 条执行历史`, 'success'); + } else { + throw new Error(data.error || '获取执行历史失败'); + } + } catch (error) { + console.error('刷新Agent历史失败:', error); + this.showNotification('刷新Agent历史失败: ' + error.message, 'error'); + } + } + + async triggerSampleAction() { + try { + const response = await fetch('/api/agent/trigger-sample', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + } + }); + const data = await response.json(); + + if (data.success) { + this.showNotification(data.message, 'success'); + // 刷新执行历史 + await this.refreshAgentHistory(); + } else { + throw new Error(data.error || '触发示例动作失败'); + } + } catch (error) { + console.error('触发示例动作失败:', error); + this.showNotification('触发示例动作失败: ' + error.message, 'error'); + } + } + + async clearAgentHistory() { + if (!confirm('确定要清空Agent执行历史吗?此操作不可恢复。')) { + return; + } + + try { + const response = await fetch('/api/agent/clear-history', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + } + }); + const data = await response.json(); + + if (data.success) { + this.showNotification(data.message, 'success'); + // 清空显示 + this.updateAgentExecutionHistory([]); + } else { + throw new Error(data.error || '清空历史失败'); + } + } catch (error) { + console.error('清空Agent历史失败:', error); + this.showNotification('清空Agent历史失败: ' + error.message, 'error'); + } + } + + updateAgentExecutionHistory(history) { + const container = document.getElementById('agent-execution-history'); + + if (!history || history.length === 0) { + container.innerHTML = ` +
+ +

暂无执行历史

+
+ `; + return; + } + + const historyHtml = history.map(record => { + const startTime = new Date(record.start_time * 1000).toLocaleString(); + const endTime = new Date(record.end_time * 1000).toLocaleString(); + const duration = Math.round((record.end_time - record.start_time) * 100) / 100; + + const priorityColor = { + 5: 'danger', + 4: 'warning', + 3: 'info', + 2: 'secondary', + 1: 'light' + }[record.priority] || 'secondary'; + + const confidenceColor = record.confidence >= 0.8 ? 'success' : + record.confidence >= 0.5 ? 'warning' : 'danger'; + + return ` +
+
+
+
+
${record.description}
+
+ 优先级 ${record.priority} + 置信度 ${(record.confidence * 100).toFixed(0)}% + ${record.success ? '成功' : '失败'} +
+ + 开始: ${startTime} | + 耗时: ${duration}秒 + +
+
+ ${record.action_type} +
+
+ ${record.result && record.result.message ? ` +
+ 结果: ${record.result.message} +
+ ` : ''} +
+
+ `; + }).join(''); + + container.innerHTML = historyHtml; + } + + // 更新分析报告 + updateAnalyticsReport(data) { + const reportContainer = document.getElementById('analytics-report'); + + if (!reportContainer) return; + + const summary = data.summary || {}; + const workorders = data.workorders || {}; + const satisfaction = data.satisfaction || {}; + const alerts = data.alerts || {}; + const performance = data.performance || {}; + + const reportHtml = ` +
+
+
工单统计概览
+
+ + + + + + + + + + + + + + + + + + + + + +
总工单数${workorders.total || 0}
待处理${workorders.open || 0}
处理中${workorders.in_progress || 0}
已解决${workorders.resolved || 0}
已关闭${workorders.closed || 0}
+
+
+
+
满意度分析
+
+ + + + + + + + + + + + + + + + + + + + + +
平均满意度${satisfaction.average || 0}/5.0
5星评价${satisfaction.distribution?.['5'] || 0} 个
4星评价${satisfaction.distribution?.['4'] || 0} 个
3星评价${satisfaction.distribution?.['3'] || 0} 个
2星及以下${(satisfaction.distribution?.['2'] || 0) + (satisfaction.distribution?.['1'] || 0)} 个
+
+
+
+ +
+
+
预警统计
+
+ + + + + + + + + + + + + +
总预警数${alerts.total || 0}
活跃预警${alerts.active || 0}
已解决${alerts.resolved || 0}
+
+
+
+
性能指标
+
+ + + + + + + + + + + + + + + + + +
响应时间${performance.response_time || 0} 秒
系统可用性${performance.uptime || 0}%
错误率${performance.error_rate || 0}%
吞吐量${performance.throughput || 0} 请求/小时
+
+
+
+ +
+
+
关键指标总结
+
+
+
+
+
${summary.resolution_rate || 0}%
+

解决率

+
+
+
+
+
+
+
${summary.avg_satisfaction || 0}
+

平均满意度

+
+
+
+
+
+
+
${summary.active_alerts || 0}
+

活跃预警

+
+
+
+
+
+
+
${summary.total_workorders || 0}
+

总工单数

+
+
+
+
+
+
+ `; + + reportContainer.innerHTML = reportHtml; + } + + updateAnalyticsDisplay(analytics) { + // 更新分析报告 + const reportContainer = document.getElementById('analytics-report'); + if (analytics.summary) { + reportContainer.innerHTML = ` +
+
+
性能指标
+
    +
  • 总工单数: ${analytics.summary.total_orders || 0}
  • +
  • 解决率: ${Math.round((analytics.summary.resolution_rate || 0) * 100)}%
  • +
  • 平均解决时间: ${analytics.summary.avg_resolution_time_hours || 0}小时
  • +
  • 平均满意度: ${analytics.summary.avg_satisfaction || 0}
  • +
+
+
+
趋势分析
+
    +
  • 工单趋势: ${analytics.summary.trends?.orders_trend ? '上升' : '下降'}
  • +
  • 满意度趋势: ${analytics.summary.trends?.satisfaction_trend ? '上升' : '下降'}
  • +
  • 解决时间趋势: ${analytics.summary.trends?.resolution_time_trend ? '上升' : '下降'}
  • +
+
+
+ `; + } + + // 更新类别分布图 + if (analytics.category_distribution && this.charts.category) { + const labels = Object.keys(analytics.category_distribution); + const data = Object.values(analytics.category_distribution); + + this.charts.category.data.labels = labels; + this.charts.category.data.datasets[0].data = data; + this.charts.category.update(); + } + } + + // 系统设置 + async loadSettings() { + try { + const response = await fetch('/api/settings'); + const settings = await response.json(); + this.updateSettingsDisplay(settings); + } catch (error) { + console.error('加载设置失败:', error); + } + } + + updateSettingsDisplay(settings) { + if (settings.api_timeout !== undefined) document.getElementById('api-timeout').value = settings.api_timeout; + if (settings.max_history !== undefined) document.getElementById('max-history').value = settings.max_history; + if (settings.refresh_interval !== undefined) document.getElementById('refresh-interval').value = settings.refresh_interval; + if (settings.auto_monitoring !== undefined) document.getElementById('auto-monitoring').checked = settings.auto_monitoring; + if (settings.agent_mode !== undefined) document.getElementById('agent-mode').checked = settings.agent_mode; + // 新增:API与模型、端口、日志级别(如页面存在对应输入框则填充) + const map = [ + ['api-provider','api_provider'], + ['api-base-url','api_base_url'], + ['api-key','api_key'], + ['model-name','model_name'], + ['model-temperature','model_temperature'], + ['model-max-tokens','model_max_tokens'], + ['server-port','server_port'], + ['websocket-port','websocket_port'], + ['log-level','log_level'] + ]; + map.forEach(([id, key]) => { + const el = document.getElementById(id); + if (el && settings[key] !== undefined) el.value = settings[key]; + }); + + // 更新温度滑块显示值 + const tempSlider = document.getElementById('model-temperature'); + const tempValue = document.getElementById('temperature-value'); + if (tempSlider && tempValue) { + tempSlider.addEventListener('input', function() { + tempValue.textContent = this.value; + }); + tempValue.textContent = tempSlider.value; + } + + // 更新服务状态显示 + this.updateServiceStatus(settings); + } + + async saveSystemSettings() { + const settings = { + api_timeout: parseInt(document.getElementById('api-timeout').value), + max_history: parseInt(document.getElementById('max-history').value), + refresh_interval: parseInt(document.getElementById('refresh-interval').value), + auto_monitoring: document.getElementById('auto-monitoring').checked, + agent_mode: document.getElementById('agent-mode').checked, + api_provider: document.getElementById('api-provider')?.value || '', + api_base_url: document.getElementById('api-base-url')?.value || '', + api_key: document.getElementById('api-key')?.value || '', + model_name: document.getElementById('model-name')?.value || '', + model_temperature: parseFloat(document.getElementById('model-temperature')?.value || 0.7), + model_max_tokens: parseInt(document.getElementById('model-max-tokens')?.value || 1000), + server_port: parseInt(document.getElementById('server-port')?.value || 5000), + websocket_port: parseInt(document.getElementById('websocket-port')?.value || 8765), + log_level: document.getElementById('log-level')?.value || 'INFO' + }; + + try { + const response = await fetch('/api/settings', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(settings) + }); + + const data = await response.json(); + if (data.success) { + this.showNotification('设置保存成功', 'success'); + } else { + this.showNotification('保存设置失败', 'error'); + } + } catch (error) { + console.error('保存设置失败:', error); + this.showNotification('保存设置失败', 'error'); + } + } + + // 更新服务状态显示 + updateServiceStatus(settings) { + // 更新仪表板服务状态卡片 + if (settings.current_server_port !== undefined) { + const webPortEl = document.getElementById('web-port-status'); + if (webPortEl) webPortEl.textContent = settings.current_server_port; + } + if (settings.current_websocket_port !== undefined) { + const wsPortEl = document.getElementById('ws-port-status'); + if (wsPortEl) wsPortEl.textContent = settings.current_websocket_port; + } + if (settings.log_level !== undefined) { + const logLevelEl = document.getElementById('log-level-status'); + if (logLevelEl) logLevelEl.textContent = settings.log_level; + } + if (settings.uptime_seconds !== undefined) { + const uptimeEl = document.getElementById('uptime-status'); + if (uptimeEl) { + const hours = Math.floor(settings.uptime_seconds / 3600); + const minutes = Math.floor((settings.uptime_seconds % 3600) / 60); + uptimeEl.textContent = `${hours}小时${minutes}分钟`; + } + } + + // 更新系统设置页面的当前端口显示 + const currentPortEl = document.getElementById('current-server-port'); + if (currentPortEl && settings.current_server_port !== undefined) { + currentPortEl.textContent = settings.current_server_port; + } + } + + // 刷新服务状态 + async refreshServiceStatus() { + try { + const response = await fetch('/api/settings'); + const settings = await response.json(); + this.updateServiceStatus(settings); + this.showNotification('服务状态已刷新', 'success'); + } catch (error) { + console.error('刷新服务状态失败:', error); + this.showNotification('刷新服务状态失败', 'error'); + } + } + + // 测试API连接 + async testApiConnection() { + try { + const apiProvider = document.getElementById('api-provider').value; + const apiBaseUrl = document.getElementById('api-base-url').value; + const apiKey = document.getElementById('api-key').value; + const modelName = document.getElementById('model-name').value; + + const response = await fetch('/api/test/connection', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + api_provider: apiProvider, + api_base_url: apiBaseUrl, + api_key: apiKey, + model_name: modelName + }) + }); + + const result = await response.json(); + if (result.success) { + this.showNotification(`API连接测试成功: ${result.message}`, 'success'); + } else { + this.showNotification(`API连接测试失败: ${result.error}`, 'error'); + } + } catch (error) { + console.error('API连接测试失败:', error); + this.showNotification('API连接测试失败', 'error'); + } + } + + // 测试模型回答 + async testModelResponse() { + try { + const testMessage = prompt('请输入测试消息:', '你好,请简单介绍一下你自己'); + if (!testMessage) return; + + const response = await fetch('/api/test/model', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + test_message: testMessage + }) + }); + + const result = await response.json(); + if (result.success) { + const message = `模型回答测试成功:\n\n问题: ${result.test_message}\n\n回答: ${result.response}\n\n响应时间: ${result.response_time}`; + alert(message); + this.showNotification('模型回答测试成功', 'success'); + } else { + this.showNotification(`模型回答测试失败: ${result.error}`, 'error'); + } + } catch (error) { + console.error('模型回答测试失败:', error); + this.showNotification('模型回答测试失败', 'error'); + } + } + + async loadSystemInfo() { + try { + const response = await fetch('/api/system/info'); + const info = await response.json(); + this.updateSystemInfoDisplay(info); + } catch (error) { + console.error('加载系统信息失败:', error); + } + } + + updateSystemInfoDisplay(info) { + const container = document.getElementById('system-info'); + container.innerHTML = ` +
+ 系统版本: ${info.version || '1.0.0'} +
+
+ Python版本: ${info.python_version || '未知'} +
+
+ 数据库: ${info.database || 'SQLite'} +
+
+ 运行时间: ${info.uptime || '未知'} +
+
+ 内存使用: ${info.memory_usage || '0'} MB +
+ `; + } + + // 工具函数 + getLevelText(level) { + const levelMap = { + 'critical': '严重', + 'error': '错误', + 'warning': '警告', + 'info': '信息' + }; + return levelMap[level] || level; + } + + getTypeText(type) { + const typeMap = { + 'performance': '性能', + 'quality': '质量', + 'volume': '量级', + 'system': '系统', + 'business': '业务' + }; + return typeMap[type] || type; + } + + getAlertColor(level) { + const colorMap = { + 'critical': 'danger', + 'error': 'danger', + 'warning': 'warning', + 'info': 'info' + }; + return colorMap[level] || 'secondary'; + } + + getPriorityText(priority) { + const priorityMap = { + 'low': '低', + 'medium': '中', + 'high': '高', + 'urgent': '紧急' + }; + return priorityMap[priority] || priority; + } + + getSeverityText(severity) { + const severityMap = { + 'low': '低', + 'medium': '中', + 'high': '高', + 'critical': '严重' + }; + return severityMap[severity] || severity; + } + + getSatisfactionText(level) { + const satisfactionMap = { + 'very_satisfied': '非常满意', + 'satisfied': '满意', + 'neutral': '一般', + 'dissatisfied': '不满意' + }; + return satisfactionMap[level] || level; + } + + getPerformanceTrendText(trend) { + const trendMap = { + 'up': '上升', + 'down': '下降', + 'stable': '稳定' + }; + return trendMap[trend] || trend; + } + + getPriorityColor(priority) { + const colorMap = { + 'low': 'secondary', + 'medium': 'primary', + 'high': 'warning', + 'urgent': 'danger' + }; + return colorMap[priority] || 'secondary'; + } + + getStatusText(status) { + const statusMap = { + 'open': '待处理', + 'in_progress': '处理中', + 'resolved': '已解决', + 'closed': '已关闭' + }; + return statusMap[status] || status; + } + + // 统计数字预览功能 + async showStatPreview(type, status) { + try { + let title = ''; + let data = []; + let apiUrl = ''; + + switch (type) { + case 'workorder': + title = this.getWorkorderPreviewTitle(status); + apiUrl = status === 'all' ? '/api/workorders' : `/api/workorders/by-status/${status}`; + break; + case 'alert': + title = this.getAlertPreviewTitle(status); + apiUrl = `/api/alerts/by-level/${status}`; + break; + case 'knowledge': + title = this.getKnowledgePreviewTitle(status); + apiUrl = `/api/knowledge/by-status/${status}`; + break; + default: + return; + } + + // 显示加载状态 + this.showLoadingModal(title); + + const response = await fetch(apiUrl); + const result = await response.json(); + + // 处理不同的API响应结构 + if (result.success !== false) { + if (result.success === true) { + // 新API结构: {success: true, data: {workorders: [...]}} + data = result.data[type + 's'] || result.data.knowledge || []; + } else if (result.workorders) { + // 旧API结构: {workorders: [...], page: 1, ...} + data = result.workorders || []; + } else if (result.alerts) { + // 预警API结构 + data = result.alerts || []; + } else if (result.knowledge) { + // 知识库API结构 + data = result.knowledge || []; + } else { + data = []; + } + this.showPreviewModal(title, type, data); + } else { + const errorMsg = result.error || result.message || '未知错误'; + this.showNotification('获取数据失败: ' + errorMsg, 'error'); + } + } catch (error) { + console.error('预览失败:', error); + this.showNotification('预览失败: ' + error.message, 'error'); + } + } + + getWorkorderPreviewTitle(status) { + const titles = { + 'all': '所有工单', + 'open': '待处理工单', + 'in_progress': '处理中工单', + 'resolved': '已解决工单', + 'closed': '已关闭工单' + }; + return titles[status] || '工单列表'; + } + + getAlertPreviewTitle(level) { + const titles = { + 'critical': '严重预警', + 'warning': '警告预警', + 'info': '信息预警' + }; + return titles[level] || '预警列表'; + } + + getKnowledgePreviewTitle(status) { + const titles = { + 'verified': '已验证知识', + 'unverified': '未验证知识' + }; + return titles[status] || '知识库条目'; + } + + showLoadingModal(title) { + const modalHtml = ` + + `; + + // 移除已存在的模态框和遮罩 + this.removeExistingModal(); + + document.body.insertAdjacentHTML('beforeend', modalHtml); + const modalElement = document.getElementById('statPreviewModal'); + const modal = new bootstrap.Modal(modalElement, { + backdrop: true, + keyboard: true + }); + + // 添加事件监听器确保正确清理 + modalElement.addEventListener('hidden.bs.modal', () => { + this.cleanupModal(); + }); + + modal.show(); + } + + showPreviewModal(title, type, data) { + let contentHtml = ''; + + if (data.length === 0) { + contentHtml = ` +
+ +
暂无数据
+

当前条件下没有找到相关记录

+
+ `; + } else { + switch (type) { + case 'workorder': + contentHtml = this.generateWorkorderPreviewHtml(data); + break; + case 'alert': + contentHtml = this.generateAlertPreviewHtml(data); + break; + case 'knowledge': + contentHtml = this.generateKnowledgePreviewHtml(data); + break; + } + } + + const modalHtml = ` + + `; + + // 移除已存在的模态框和遮罩 + this.removeExistingModal(); + + document.body.insertAdjacentHTML('beforeend', modalHtml); + const modalElement = document.getElementById('statPreviewModal'); + const modal = new bootstrap.Modal(modalElement, { + backdrop: true, + keyboard: true + }); + + // 添加事件监听器确保正确清理 + modalElement.addEventListener('hidden.bs.modal', () => { + this.cleanupModal(); + }); + + modal.show(); + } + + generateWorkorderPreviewHtml(workorders) { + return ` +
+ + + + + + + + + + + + + ${workorders.map(wo => ` + + + + + + + + + `).join('')} + +
工单ID标题状态优先级创建时间操作
${wo.order_id || wo.id} +
+ ${wo.title} +
+
+ + ${this.getStatusText(wo.status)} + + + + ${this.getPriorityText(wo.priority)} + + ${new Date(wo.created_at).toLocaleString()} + +
+
+ `; + } + + generateAlertPreviewHtml(alerts) { + return ` +
+ + + + + + + + + + + + + ${alerts.map(alert => ` + + + + + + + + + `).join('')} + +
预警ID消息级别类型创建时间操作
${alert.id} +
+ ${alert.message} +
+
+ + ${this.getLevelText(alert.level)} + + ${this.getTypeText(alert.alert_type)}${new Date(alert.created_at).toLocaleString()} + +
+
+ `; + } + + generateKnowledgePreviewHtml(knowledge) { + return ` +
+ + + + + + + + + + + + + ${knowledge.map(item => ` + + + + + + + + + `).join('')} + +
ID标题分类验证状态创建时间操作
${item.id} +
+ ${item.title} +
+
${item.category || '未分类'} + + ${item.is_verified ? '已验证' : '未验证'} + + ${new Date(item.created_at).toLocaleString()} +
+ ${item.is_verified ? + `` : + `` + } + +
+
+
+ `; + } + + getAlertLevelColor(level) { + const colorMap = { + 'critical': 'danger', + 'warning': 'warning', + 'info': 'info' + }; + return colorMap[level] || 'secondary'; + } + + goToFullView(type, status) { + // 关闭预览模态框 + const modal = bootstrap.Modal.getInstance(document.getElementById('statPreviewModal')); + if (modal) { + modal.hide(); + } + + // 切换到对应的标签页 + switch (type) { + case 'workorder': + this.switchTab('workorders'); + // 设置筛选器 + if (status !== 'all') { + setTimeout(() => { + const filter = document.getElementById('workorder-status-filter'); + if (filter) { + filter.value = status; + this.loadWorkOrders(); + } + }, 100); + } + break; + case 'alert': + this.switchTab('alerts'); + // 设置筛选器 + setTimeout(() => { + const filter = document.getElementById('alert-filter'); + if (filter) { + filter.value = status; + this.updateAlertsDisplay(); + } + }, 100); + break; + case 'knowledge': + this.switchTab('knowledge'); + break; + } + } + + // 模态框清理方法 + removeExistingModal() { + const existingModal = document.getElementById('statPreviewModal'); + if (existingModal) { + // 获取模态框实例并销毁 + const modalInstance = bootstrap.Modal.getInstance(existingModal); + if (modalInstance) { + modalInstance.dispose(); + } + existingModal.remove(); + } + + // 清理可能残留的遮罩 + const backdrops = document.querySelectorAll('.modal-backdrop'); + backdrops.forEach(backdrop => backdrop.remove()); + + // 恢复body的滚动 + document.body.classList.remove('modal-open'); + document.body.style.overflow = ''; + document.body.style.paddingRight = ''; + } + + cleanupModal() { + // 延迟清理,确保动画完成 + setTimeout(() => { + this.removeExistingModal(); + }, 300); + } + + getStatusColor(status) { + const colorMap = { + 'open': 'warning', + 'in_progress': 'info', + 'resolved': 'success', + 'closed': 'secondary' + }; + return colorMap[status] || 'secondary'; + } + + formatTime(timestamp) { + const date = new Date(timestamp); + const now = new Date(); + const diff = now - date; + + if (diff < 60000) { // 1分钟内 + return '刚刚'; + } else if (diff < 3600000) { // 1小时内 + return `${Math.floor(diff / 60000)}分钟前`; + } else if (diff < 86400000) { // 1天内 + return `${Math.floor(diff / 3600000)}小时前`; + } else { + return date.toLocaleDateString(); + } + } + + showNotification(message, type = 'info') { + const notification = document.createElement('div'); + notification.className = `notification alert alert-${type === 'error' ? 'danger' : type} alert-dismissible fade show`; + notification.innerHTML = ` + ${message} + + `; + + document.body.appendChild(notification); + + setTimeout(() => { + if (notification.parentNode) { + notification.parentNode.removeChild(notification); + } + }, 3000); + } + + getSimilarityExplanation(percent) { + if (percent >= 95) { + return "语义高度相似,AI建议与人工描述基本一致,建议自动审批"; + } else if (percent >= 90) { + return "语义较为相似,AI建议与人工描述大体一致,建议人工审核"; + } else if (percent >= 80) { + return "语义部分相似,AI建议与人工描述有一定差异,需要人工判断"; + } else if (percent >= 60) { + return "语义相似度较低,AI建议与人工描述差异较大,建议使用人工描述"; + } else { + return "语义差异很大,AI建议与人工描述差异很大,优先使用人工描述"; + } + } + + getSimilarityMessage(percent, approved, useHumanResolution = false) { + if (useHumanResolution) { + return `人工描述已保存!语义相似度: ${percent}%,AI准确率低于90%,将使用人工描述入库`; + } else if (approved) { + return `人工描述已保存!语义相似度: ${percent}%,已自动审批入库`; + } else if (percent >= 90) { + return `人工描述已保存!语义相似度: ${percent}%,建议人工审核后审批`; + } else if (percent >= 80) { + return `人工描述已保存!语义相似度: ${percent}%,需要人工判断是否审批`; + } else { + return `人工描述已保存!语义相似度: ${percent}%,建议使用人工描述入库`; + } + } + + showCreateWorkOrderModal() { + const modal = new bootstrap.Modal(document.getElementById('createWorkOrderModal')); + modal.show(); + } + + // 新增Agent对话功能 + async sendAgentMessage() { + const messageInput = document.getElementById('agent-message-input'); + const message = messageInput.value.trim(); + + if (!message) { + this.showNotification('请输入消息', 'warning'); + return; + } + + try { + // 显示发送状态 + const sendBtn = document.getElementById('send-agent-message'); + const originalText = sendBtn.innerHTML; + sendBtn.innerHTML = '发送中...'; + sendBtn.disabled = true; + + const response = await fetch('/api/agent/chat', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + message: message, + context: { + user_id: 'admin', + session_id: `agent_session_${Date.now()}` + } + }) + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification('Agent响应成功', 'success'); + // 清空输入框 + messageInput.value = ''; + // 刷新执行历史 + await this.loadAgentExecutionHistory(); + } else { + this.showNotification('Agent响应失败: ' + (data.error || '未知错误'), 'error'); + } + } catch (error) { + console.error('发送Agent消息失败:', error); + this.showNotification('发送Agent消息失败: ' + error.message, 'error'); + } finally { + // 恢复按钮状态 + const sendBtn = document.getElementById('send-agent-message'); + sendBtn.innerHTML = '发送'; + sendBtn.disabled = false; + } + } + + // 清空Agent对话 + clearAgentChat() { + document.getElementById('agent-message-input').value = ''; + this.showNotification('对话已清空', 'info'); + } + + // 加载Agent执行历史 + async loadAgentExecutionHistory() { + try { + const response = await fetch('/api/agent/action-history?limit=10'); + const data = await response.json(); + + if (data.success) { + this.updateExecutionHistory(data.history); + } + } catch (error) { + console.error('加载Agent执行历史失败:', error); + } + } + + // 触发示例动作 + async triggerSampleAction() { + try { + const response = await fetch('/api/agent/trigger-sample', { + method: 'POST' + }); + const data = await response.json(); + + if (data.success) { + this.showNotification('示例动作执行成功', 'success'); + await this.loadAgentExecutionHistory(); + } else { + this.showNotification('示例动作执行失败: ' + (data.error || '未知错误'), 'error'); + } + } catch (error) { + console.error('触发示例动作失败:', error); + this.showNotification('触发示例动作失败: ' + error.message, 'error'); + } + } + + // 清空Agent历史 + async clearAgentHistory() { + if (!confirm('确定要清空Agent执行历史吗?')) { + return; + } + + try { + const response = await fetch('/api/agent/clear-history', { + method: 'POST' + }); + const data = await response.json(); + + if (data.success) { + this.showNotification('Agent历史已清空', 'success'); + await this.loadAgentExecutionHistory(); + } else { + this.showNotification('清空Agent历史失败: ' + (data.error || '未知错误'), 'error'); + } + } catch (error) { + console.error('清空Agent历史失败:', error); + this.showNotification('清空Agent历史失败: ' + error.message, 'error'); + } + } +} + +// 飞书同步管理器 +class FeishuSyncManager { + constructor() { + this.loadConfig(); + this.refreshStatus(); + } + + async loadConfig() { + try { + const response = await fetch('/api/feishu-sync/config'); + const data = await response.json(); + + if (data.success) { + const config = data.config; + document.getElementById('appId').value = config.feishu.app_id || ''; + document.getElementById('appSecret').value = ''; + document.getElementById('appToken').value = config.feishu.app_token || ''; + document.getElementById('tableId').value = config.feishu.table_id || ''; + + // 显示配置状态 + const statusBadge = config.feishu.status === 'active' ? + '已配置' : + '未配置'; + + // 可以在这里添加状态显示 + } + } catch (error) { + console.error('加载配置失败:', error); + } + } + + async saveConfig() { + const config = { + app_id: document.getElementById('appId').value, + app_secret: document.getElementById('appSecret').value, + app_token: document.getElementById('appToken').value, + table_id: document.getElementById('tableId').value + }; + + if (!config.app_id || !config.app_secret || !config.app_token || !config.table_id) { + this.showNotification('请填写完整的配置信息', 'error'); + return; + } + + try { + const response = await fetch('/api/feishu-sync/config', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(config) + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification('配置保存成功', 'success'); + } else { + this.showNotification('配置保存失败: ' + data.error, 'error'); + } + } catch (error) { + this.showNotification('配置保存失败: ' + error.message, 'error'); + } + } + + async testConnection() { + try { + this.showNotification('正在测试连接...', 'info'); + + const response = await fetch('/api/feishu-sync/test-connection'); + const data = await response.json(); + + if (data.success) { + this.showNotification('飞书连接正常', 'success'); + } else { + this.showNotification('连接失败: ' + data.error, 'error'); + } + } catch (error) { + this.showNotification('连接测试失败: ' + error.message, 'error'); + } + } + + async syncFromFeishu() { + try { + const limit = document.getElementById('syncLimit').value; + this.showNotification('开始从飞书同步数据...', 'info'); + this.showProgress(true); + + const response = await fetch('/api/feishu-sync/sync-from-feishu', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + generate_ai_suggestions: false, + limit: parseInt(limit) + }) + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification(data.message, 'success'); + this.addSyncLog(data.message); + this.refreshStatus(); + } else { + this.showNotification('同步失败: ' + data.error, 'error'); + this.addSyncLog('同步失败: ' + data.error); + } + } catch (error) { + this.showNotification('同步失败: ' + error.message, 'error'); + this.addSyncLog('同步失败: ' + error.message); + } finally { + this.showProgress(false); + } + } + + async syncWithAI() { + try { + const limit = document.getElementById('syncLimit').value; + this.showNotification('开始同步数据并生成AI建议...', 'info'); + this.showProgress(true); + + const response = await fetch('/api/feishu-sync/sync-from-feishu', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + generate_ai_suggestions: true, + limit: parseInt(limit) + }) + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification(data.message, 'success'); + this.addSyncLog(data.message); + this.refreshStatus(); + } else { + this.showNotification('同步失败: ' + data.error, 'error'); + this.addSyncLog('同步失败: ' + data.error); + } + } catch (error) { + this.showNotification('同步失败: ' + error.message, 'error'); + this.addSyncLog('同步失败: ' + error.message); + } finally { + this.showProgress(false); + } + } + + // 打开字段映射管理页面 + openFieldMapping() { + const section = document.getElementById('fieldMappingSection'); + if (section.style.display === 'none') { + section.style.display = 'block'; + // 自动加载映射状态 + this.loadMappingStatus(); + } else { + section.style.display = 'none'; + } + } + + async previewFeishuData() { + try { + this.showNotification('正在获取飞书数据预览...', 'info'); + + const response = await fetch('/api/feishu-sync/preview-feishu-data'); + const data = await response.json(); + + if (data.success) { + this.displayPreviewData(data.preview_data); + this.showNotification(`获取到 ${data.total_count} 条预览数据`, 'success'); + } else { + this.showNotification('获取预览数据失败: ' + data.error, 'error'); + } + } catch (error) { + this.showNotification('获取预览数据失败: ' + error.message, 'error'); + } + } + + displayPreviewData(data) { + const tbody = document.querySelector('#previewTable tbody'); + tbody.innerHTML = ''; + + data.forEach(item => { + const row = document.createElement('tr'); + row.innerHTML = ` + ${item.record_id} + ${item.fields['TR Number'] || '-'} + ${item.fields['TR Description'] || '-'} + ${item.fields['Type of problem'] || '-'} + ${item.fields['Source'] || '-'} + ${item.fields['TR (Priority/Status)'] || '-'} + + + + `; + tbody.appendChild(row); + }); + + document.getElementById('previewSection').style.display = 'block'; + } + + async refreshStatus() { + try { + const response = await fetch('/api/feishu-sync/status'); + const data = await response.json(); + + if (data.success) { + const status = data.status; + document.getElementById('totalLocalWorkorders').textContent = status.total_local_workorders || 0; + document.getElementById('syncedWorkorders').textContent = status.synced_workorders || 0; + document.getElementById('unsyncedWorkorders').textContent = status.unsynced_workorders || 0; + } + } catch (error) { + console.error('刷新状态失败:', error); + } + } + + showProgress(show) { + const progress = document.getElementById('syncProgress'); + if (show) { + progress.style.display = 'block'; + const bar = progress.querySelector('.progress-bar'); + bar.style.width = '100%'; + } else { + setTimeout(() => { + progress.style.display = 'none'; + const bar = progress.querySelector('.progress-bar'); + bar.style.width = '0%'; + }, 1000); + } + } + + addSyncLog(message) { + const log = document.getElementById('syncLog'); + const timestamp = new Date().toLocaleString(); + const logEntry = document.createElement('div'); + logEntry.innerHTML = `[${timestamp}] ${message}`; + + if (log.querySelector('.text-muted')) { + log.innerHTML = ''; + } + + log.appendChild(logEntry); + log.scrollTop = log.scrollHeight; + } + + async exportConfig() { + try { + const response = await fetch('/api/feishu-sync/config/export'); + const data = await response.json(); + + if (data.success) { + // 创建下载链接 + const blob = new Blob([data.config], { type: 'application/json' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `feishu_config_${new Date().toISOString().split('T')[0]}.json`; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + + this.showNotification('配置导出成功', 'success'); + } else { + this.showNotification('配置导出失败: ' + data.error, 'error'); + } + } catch (error) { + this.showNotification('配置导出失败: ' + error.message, 'error'); + } + } + + showImportModal() { + const modal = new bootstrap.Modal(document.getElementById('importConfigModal')); + modal.show(); + } + + async importConfig() { + try { + const configJson = document.getElementById('configJson').value.trim(); + + if (!configJson) { + this.showNotification('请输入配置JSON数据', 'warning'); + return; + } + + const response = await fetch('/api/feishu-sync/config/import', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ config: configJson }) + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification('配置导入成功', 'success'); + this.loadConfig(); + this.refreshStatus(); + + // 关闭模态框 + const modal = bootstrap.Modal.getInstance(document.getElementById('importConfigModal')); + modal.hide(); + document.getElementById('configJson').value = ''; + } else { + this.showNotification('配置导入失败: ' + data.error, 'error'); + } + } catch (error) { + this.showNotification('配置导入失败: ' + error.message, 'error'); + } + } + + async resetConfig() { + if (confirm('确定要重置所有配置吗?此操作不可撤销!')) { + try { + const response = await fetch('/api/feishu-sync/config/reset', { + method: 'POST' + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification('配置重置成功', 'success'); + this.loadConfig(); + this.refreshStatus(); + } else { + this.showNotification('配置重置失败: ' + data.error, 'error'); + } + } catch (error) { + this.showNotification('配置重置失败: ' + error.message, 'error'); + } + } + } + + async createWorkorder(recordId) { + if (confirm(`确定要从飞书记录 ${recordId} 创建工单吗?`)) { + try { + this.showNotification('正在创建工单...', 'info'); + + const response = await fetch('/api/feishu-sync/create-workorder', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + record_id: recordId + }) + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification(data.message, 'success'); + // 刷新工单列表(如果用户在工单页面) + if (typeof window.refreshWorkOrders === 'function') { + window.refreshWorkOrders(); + } + } else { + this.showNotification('创建工单失败: ' + data.message, 'error'); + } + } catch (error) { + this.showNotification('创建工单失败: ' + error.message, 'error'); + } + } + } + + // 字段映射管理方法 + async discoverFields() { + try { + this.showNotification('正在发现字段...', 'info'); + + const response = await fetch('/api/feishu-sync/field-mapping/discover', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ limit: 5 }) + }); + + const data = await response.json(); + + if (data.success) { + this.displayDiscoveryResults(data.discovery_report); + this.showNotification('字段发现完成', 'success'); + } else { + this.showNotification('字段发现失败: ' + data.error, 'error'); + } + } catch (error) { + this.showNotification('字段发现失败: ' + error.message, 'error'); + } + } + + displayDiscoveryResults(report) { + const container = document.getElementById('fieldMappingContent'); + let html = ''; + + // 已映射字段 + if (report.mapped_fields && Object.keys(report.mapped_fields).length > 0) { + html += '
已映射字段
'; + for (const [feishuField, localField] of Object.entries(report.mapped_fields)) { + html += `
+ ${feishuField}${localField} +
`; + } + html += '
'; + } + + // 未映射字段和建议 + if (report.unmapped_fields && report.unmapped_fields.length > 0) { + html += '
未映射字段
'; + for (const field of report.unmapped_fields) { + html += `
+ ${field}`; + + const suggestions = report.suggested_mappings[field] || []; + if (suggestions.length > 0) { + html += '
建议映射:'; + suggestions.slice(0, 2).forEach(suggestion => { + html += `
+ ${suggestion.local_field} + (${suggestion.reason}) + +
`; + }); + html += '
'; + } + + html += '
'; + } + html += '
'; + } + + container.innerHTML = html; + } + + async applySuggestion(feishuField, localField) { + if (confirm(`确定要将 "${feishuField}" 映射到 "${localField}" 吗?`)) { + try { + const response = await fetch('/api/feishu-sync/field-mapping/add', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + feishu_field: feishuField, + local_field: localField, + priority: 3 + }) + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification('映射添加成功!', 'success'); + this.discoverFields(); // 重新发现字段 + } else { + this.showNotification('添加映射失败: ' + data.error, 'error'); + } + } catch (error) { + this.showNotification('请求失败: ' + error.message, 'error'); + } + } + } + + async loadMappingStatus() { + try { + const response = await fetch('/api/feishu-sync/field-mapping/status'); + const data = await response.json(); + + if (data.success) { + this.displayMappingStatus(data.status); + } else { + this.showNotification('获取映射状态失败: ' + data.error, 'error'); + } + } catch (error) { + this.showNotification('请求失败: ' + error.message, 'error'); + } + } + + displayMappingStatus(status) { + const container = document.getElementById('fieldMappingContent'); + let html = ''; + + html += `
+
+
+
+
${status.total_mappings}
+

直接映射

+
+
+
+
+
+
+
${status.total_aliases}
+

别名映射

+
+
+
+
+
+
+
${status.total_patterns}
+

模式匹配

+
+
+
+
+
+
+
+ ${status.auto_mapping_enabled ? '启用' : '禁用'} +
+

自动映射

+
+
+
+
`; + + // 显示当前映射 + if (status.field_mapping && Object.keys(status.field_mapping).length > 0) { + html += '
当前字段映射:
'; + for (const [feishuField, localField] of Object.entries(status.field_mapping)) { + html += `
+
+ ${feishuField}${localField} + +
+
`; + } + html += '
'; + } + + container.innerHTML = html; + } + + async removeMapping(feishuField) { + if (confirm(`确定要删除映射 "${feishuField}" 吗?`)) { + try { + const response = await fetch('/api/feishu-sync/field-mapping/remove', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + feishu_field: feishuField + }) + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification('映射删除成功!', 'success'); + this.loadMappingStatus(); // 刷新状态 + } else { + this.showNotification('删除映射失败: ' + data.error, 'error'); + } + } catch (error) { + this.showNotification('请求失败: ' + error.message, 'error'); + } + } + } + + showAddMappingModal() { + // 简单的添加映射功能 + const feishuField = prompt('请输入飞书字段名:'); + if (!feishuField) return; + + const localField = prompt('请输入本地字段名 (如: order_id, description, category):'); + if (!localField) return; + + this.addFieldMapping(feishuField, localField); + } + + async addFieldMapping(feishuField, localField) { + try { + const response = await fetch('/api/feishu-sync/field-mapping/add', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + feishu_field: feishuField, + local_field: localField, + priority: 3 + }) + }); + + const data = await response.json(); + + if (data.success) { + this.showNotification('映射添加成功!', 'success'); + this.loadMappingStatus(); // 刷新状态 + } else { + this.showNotification('添加映射失败: ' + data.error, 'error'); + } + } catch (error) { + this.showNotification('请求失败: ' + error.message, 'error'); + } + } + + async checkPermissions() { + try { + this.showNotification('正在检查飞书权限...', 'info'); + + const response = await fetch('/api/feishu-sync/check-permissions'); + const data = await response.json(); + + if (data.success) { + this.displayPermissionCheck(data.permission_check, data.summary); + this.showNotification('权限检查完成', 'success'); + } else { + this.showNotification('权限检查失败: ' + data.error, 'error'); + } + } catch (error) { + this.showNotification('权限检查失败: ' + error.message, 'error'); + } + } + + displayPermissionCheck(permissionCheck, summary) { + const container = document.getElementById('fieldMappingContent'); + + let html = '
飞书权限检查结果
'; + + // 整体状态 + const statusClass = permissionCheck.success ? 'success' : 'danger'; + const statusIcon = permissionCheck.success ? 'check-circle' : 'exclamation-triangle'; + html += `
+ + 整体状态: ${permissionCheck.success ? '正常' : '异常'} +
`; + + // 检查项目 + html += '
检查项目:
'; + for (const [checkName, checkResult] of Object.entries(permissionCheck.checks)) { + const statusClass = checkResult.status === 'success' ? 'success' : + checkResult.status === 'warning' ? 'warning' : 'danger'; + const statusIcon = checkResult.status === 'success' ? 'check-circle' : + checkResult.status === 'warning' ? 'exclamation-triangle' : 'times-circle'; + + html += `
+ + ${checkName}: ${checkResult.message} +
`; + } + + // 修复建议 + if (permissionCheck.recommendations && permissionCheck.recommendations.length > 0) { + html += '
修复建议:
    '; + permissionCheck.recommendations.forEach(rec => { + html += `
  • ${rec}
  • `; + }); + html += '
'; + } + + // 错误信息 + if (permissionCheck.errors && permissionCheck.errors.length > 0) { + html += '
错误信息:
    '; + permissionCheck.errors.forEach(error => { + html += `
  • ${error}
  • `; + }); + html += '
'; + } + + html += '
'; + + container.innerHTML = html; + + // 显示字段映射管理区域 + const section = document.getElementById('fieldMappingSection'); + section.style.display = 'block'; + } + + showNotification(message, type = 'info') { + const container = document.getElementById('notificationContainer'); + const alert = document.createElement('div'); + alert.className = `alert alert-${type === 'error' ? 'danger' : type} alert-dismissible fade show`; + alert.innerHTML = ` + ${message} + + `; + + container.appendChild(alert); + + setTimeout(() => { + if (alert.parentNode) { + alert.parentNode.removeChild(alert); + } + }, 5000); + } +} + +// 初始化应用 +let dashboard; +let feishuSync; +document.addEventListener('DOMContentLoaded', () => { + dashboard = new TSPDashboard(); + feishuSync = new FeishuSyncManager(); +}); diff --git a/src/web/static/js/main.js b/src/web/static/js/main.js new file mode 100644 index 0000000..b30eb92 --- /dev/null +++ b/src/web/static/js/main.js @@ -0,0 +1,406 @@ +/** + * 主入口文件 + */ + +import { ready, storage } from './core/utils.js'; +import store from './core/store.js'; +import router from './core/router.js'; +import { initWebSocket } from './core/websocket.js'; +import Navbar from './components/navbar.js'; +import Sidebar from './components/sidebar.js'; +import { showToast } from './components/modal.js'; + +// 应用主类 +class App { + constructor() { + this.components = {}; + this.currentRoute = null; + } + + // 初始化应用 + async init() { + try { + // 显示加载状态 + this.showLoading(); + + // 初始化路由 + router.start(); + + // 初始化UI组件 + this.initComponents(); + + // 恢复应用状态 + this.restoreAppState(); + + // 初始化WebSocket + initWebSocket(); + + // 绑定全局事件 + this.bindGlobalEvents(); + + // 注册服务工作者(PWA支持) + this.registerServiceWorker(); + + // 隐藏加载状态 + this.hideLoading(); + + console.log('App initialized successfully'); + } catch (error) { + console.error('App initialization failed:', error); + this.handleInitError(error); + } + } + + // 初始化组件 + initComponents() { + // 初始化导航栏 + const navbarContainer = document.querySelector('#navbar'); + if (navbarContainer) { + this.components.navbar = new Navbar(navbarContainer); + } + + // 初始化侧边栏 + const sidebarContainer = document.querySelector('#sidebar-container'); + if (sidebarContainer) { + this.components.sidebar = new Sidebar(sidebarContainer); + } + + // 初始化其他组件... + } + + // 恢复应用状态 + restoreAppState() { + // 恢复主题 + const savedTheme = storage.get('app.theme', 'light'); + store.commit('SET_THEME', savedTheme); + + // 恢复用户信息(如果有) + const userInfo = storage.get('userInfo'); + if (userInfo) { + store.commit('SET_USER', userInfo); + store.commit('SET_LOGIN', true); + } + + // 恢复其他设置... + } + + // 绑定全局事件 + bindGlobalEvents() { + // 监听路由变化 + router.afterEach((to) => { + this.handleRouteChange(to); + }); + + // 监听网络状态 + window.addEventListener('online', () => { + showToast('网络已连接', 'success'); + }); + + window.addEventListener('offline', () => { + showToast('网络已断开', 'warning'); + }); + + // 监听页面可见性变化 + document.addEventListener('visibilitychange', () => { + if (document.hidden) { + store.commit('SET_APP_ACTIVE', false); + } else { + store.commit('SET_APP_ACTIVE', true); + } + }); + + // 监听存储变化(多标签页同步) + window.addEventListener('storage', (e) => { + this.handleStorageChange(e); + }); + + // 监听未捕获的错误 + window.addEventListener('error', (e) => { + this.handleError(e.error); + }); + + window.addEventListener('unhandledrejection', (e) => { + this.handleError(e.reason); + }); + } + + // 处理路由变化 + async handleRouteChange(to) { + this.currentRoute = to; + + // 更新页面标题 + if (to.meta.title) { + document.title = `${to.meta.title} - TSP智能助手`; + } + + // 加载页面组件 + await this.loadPage(to); + + // 更新导航状态 + this.updateNavigation(to); + + // 滚动到顶部 + window.scrollTo(0, 0); + } + + // 加载页面组件 + async loadPage(route) { + const pageContainer = document.querySelector('#page-content'); + if (!pageContainer) return; + + // 显示加载状态 + pageContainer.innerHTML = this.createLoadingHTML(); + + try { + // 映射路由到页面文件 + const pageFile = this.getPageFile(route.name); + + // 动态导入页面组件 + const pageModule = await import(`./pages/${pageFile}.js`); + const PageComponent = pageModule.default; + + // 实例化页面组件 + const page = new PageComponent(pageContainer, route); + + // 保存页面实例 + this.components.currentPage = page; + + // 将页面实例暴露到全局(供内联事件使用) + if (route.name === 'alerts') { + window.alertsPage = page; + } + + } catch (error) { + console.error('Failed to load page:', error); + pageContainer.innerHTML = this.createErrorHTML(error); + } + } + + // 获取页面文件名 + getPageFile(routeName) { + const pageMap = { + 'dashboard': 'dashboard', + 'workorders': 'workorders', + 'workorder-detail': 'workorders', + 'alerts': 'alerts', + 'knowledge': 'knowledge', + 'knowledge-detail': 'knowledge', + 'chat': 'chat', + 'chat-http': 'chat', + 'monitoring': 'monitoring', + 'settings': 'settings', + 'profile': 'settings', + 'login': 'login', + 'feishu': 'feishu', + 'agent': 'agent', + 'vehicle': 'vehicle' + }; + + return pageMap[routeName] || 'dashboard'; + } + + // 更新导航状态 + updateNavigation(route) { + // 更新侧边栏激活状态 + if (this.components.sidebar) { + this.components.sidebar.updateActiveMenu(route.path); + } + + // 更新导航栏面包屑 + this.updateBreadcrumb(route); + } + + // 更新面包屑 + updateBreadcrumb(route) { + const breadcrumbContainer = document.querySelector('#breadcrumb'); + if (!breadcrumbContainer) return; + + const items = [ + { text: '首页', link: '/' } + ]; + + // 根据路由构建面包屑 + if (route.path !== '/') { + const pathSegments = route.path.split('/').filter(Boolean); + let currentPath = ''; + + pathSegments.forEach((segment, index) => { + currentPath += `/${segment}`; + const isLast = index === pathSegments.length - 1; + + // 这里可以根据路由配置获取更友好的名称 + const name = this.getPathName(segment); + + items.push({ + text: name, + link: isLast ? null : currentPath + }); + }); + } + + breadcrumbContainer.innerHTML = this.createBreadcrumbHTML(items); + } + + // 获取路径名称 + getPathName(segment) { + const names = { + workorders: '工单管理', + alerts: '预警管理', + knowledge: '知识库', + chat: '智能对话', + 'chat-http': 'HTTP对话', + monitoring: '系统监控', + settings: '系统设置' + }; + return names[segment] || segment; + } + + // 处理存储变化 + handleStorageChange(e) { + // 处理多标签页之间的状态同步 + if (e.key === 'tsp_assistant_store') { + const newState = JSON.parse(e.newValue); + store.setState(newState, false); + } + } + + // 处理错误 + handleError(error) { + console.error('Application error:', error); + + // 显示错误提示 + showToast('发生错误,请刷新页面重试', 'error'); + + // 发送错误报告(如果配置了且有report方法) + if (window.errorReporting && window.errorReporting.enabled && window.errorReporting.report) { + try { + window.errorReporting.report(error); + } catch (reportError) { + console.error('Error reporting failed:', reportError); + } + } + } + + // 处理初始化错误 + handleInitError(error) { + this.hideLoading(); + + const pageContainer = document.querySelector('#page-content'); + if (pageContainer) { + pageContainer.innerHTML = ` +
+
+
+
+
+ +

应用初始化失败

+

${error.message || '未知错误'}

+ +
+
+
+
+
+ `; + } + } + + // 注册服务工作者 + registerServiceWorker() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.register('/sw.js') + .then(registration => { + console.log('ServiceWorker registered:', registration); + }) + .catch(error => { + console.log('ServiceWorker registration failed:', error); + }); + } + } + + // 显示加载状态 + showLoading() { + const loadingHTML = ` +
+
+
+

加载中...

+
+
+ `; + document.body.insertAdjacentHTML('beforeend', loadingHTML); + } + + // 隐藏加载状态 + hideLoading() { + const overlay = document.getElementById('loading-overlay'); + if (overlay) { + overlay.remove(); + } + } + + // 创建加载HTML + createLoadingHTML() { + return ` +
+
+
+

加载中...

+
+
+ `; + } + + // 创建错误HTML + createErrorHTML(error) { + return ` +
+
+
+
+
+ +

页面加载失败

+

${error.message || '未知错误'}

+ +
+
+
+
+
+ `; + } + + // 创建面包屑HTML + createBreadcrumbHTML(items) { + return ` + + `; + } +} + +// 创建应用实例 +const app = new App(); + +// DOM加载完成后初始化应用 +ready(() => { + app.init(); +}); + +// 暴露到全局(便于调试) +window.app = app; +window.store = store; +window.router = router; \ No newline at end of file diff --git a/src/web/static/js/navigation.js b/src/web/static/js/navigation.js deleted file mode 100644 index cbe1b7c..0000000 --- a/src/web/static/js/navigation.js +++ /dev/null @@ -1,142 +0,0 @@ -/** - * 通用导航管理脚本 - * 用于处理页面间导航和活动状态 - */ - -class NavigationManager { - constructor() { - this.currentPage = this.getCurrentPage(); - this.init(); - } - - init() { - // 设置当前页面的活动状态 - this.setActiveNavigation(); - - // 添加导航点击事件监听 - this.addNavigationListeners(); - - // 添加页面加载完成后的处理 - this.addPageLoadHandlers(); - } - - getCurrentPage() { - const path = window.location.pathname; - if (path === '/' || path === '/dashboard') return 'dashboard'; - if (path === '/alerts') return 'alerts'; - if (path === '/chat') return 'chat'; - if (path === '/chat-http') return 'chat-http'; - return 'dashboard'; - } - - setActiveNavigation() { - // 清除所有活动状态 - document.querySelectorAll('.nav-link').forEach(link => { - link.classList.remove('active'); - }); - - // 设置当前页面的活动状态 - const activeSelectors = { - 'dashboard': 'a.nav-link[href="/dashboard"]', - 'alerts': 'a.nav-link[href="/alerts"]', - 'chat': 'a.nav-link[href="/chat"]', - 'chat-http': 'a.nav-link[href="/chat-http"]' - }; - - const selector = activeSelectors[this.currentPage]; - if (selector) { - document.querySelectorAll(selector).forEach(link => { - link.classList.add('active'); - }); - } - } - - addNavigationListeners() { - // 对导航链接添加点击处理 - document.querySelectorAll('a.nav-link[href^="/"]').forEach(link => { - link.addEventListener('click', (e) => { - const href = link.getAttribute('href'); - - // 如果是当前页面,阻止默认行为 - if (href === window.location.pathname) { - e.preventDefault(); - return; - } - - // 显示加载状态 - this.showLoadingState(); - - // 正常跳转 - // 注意:这里不阻止默认行为,让浏览器正常跳转 - }); - }); - - // 对 dashboard.html 的侧边栏导航特殊处理 - document.querySelectorAll('.sidebar a.nav-link[href^="/"]').forEach(link => { - link.addEventListener('click', (e) => { - this.showLoadingState(); - }); - }); - } - - showLoadingState() { - // 显示加载提示 - const loadingHtml = ` - - `; - - document.body.insertAdjacentHTML('beforeend', loadingHtml); - } - - addPageLoadHandlers() { - // 页面加载完成后移除加载状态 - window.addEventListener('load', () => { - const loading = document.getElementById('navigation-loading'); - if (loading) { - loading.remove(); - } - }); - - // 处理浏览器前进后退 - window.addEventListener('popstate', () => { - this.currentPage = this.getCurrentPage(); - this.setActiveNavigation(); - }); - } - - // 手动导航到指定页面 - navigateTo(page) { - const urls = { - 'dashboard': '/dashboard', - 'alerts': '/alerts', - 'chat': '/chat', - 'chat-http': '/chat-http' - }; - - const url = urls[page]; - if (url && url !== window.location.pathname) { - this.showLoadingState(); - window.location.href = url; - } - } -} - -// 页面加载完成后初始化导航管理器 -document.addEventListener('DOMContentLoaded', () => { - window.navigationManager = new NavigationManager(); -}); - -// 导航函数,可以在控制台或页面中使用 -window.navigateTo = (page) => { - if (window.navigationManager) { - window.navigationManager.navigateTo(page); - } -}; \ No newline at end of file diff --git a/src/web/static/js/pages/agent.js b/src/web/static/js/pages/agent.js new file mode 100644 index 0000000..2f0b07c --- /dev/null +++ b/src/web/static/js/pages/agent.js @@ -0,0 +1,560 @@ +/** + * Agent页面组件 + */ + +export default class Agent { + constructor(container, route) { + this.container = container; + this.route = route; + this.init(); + } + + async init() { + try { + this.render(); + this.bindEvents(); + this.loadAgentStatus(); + this.loadActionHistory(); + } catch (error) { + console.error('Agent init error:', error); + this.showError(error); + } + } + + render() { + this.container.innerHTML = ` + + +
+ +
+
+
+
+ Agent状态 +
+
+
+
+
+ 加载中... +
+
加载Agent状态...
+
+
+
+
+ + +
+
+
+
+ 控制面板 +
+
+
+
+ + + + +
+
+
+
+
+ + +
+
+
+
+
+ Agent对话 +
+
+
+
+
暂无对话记录
+
+
+ + +
+
+
+
+ + +
+
+
+
+ 工具统计 +
+
+
+
+ 加载中... +
+
+
+ + +
+
+
+ LLM使用统计 +
+
+
+
+ 加载中... +
+
+
+
+
+ + +
+
+
+
+
+ 执行历史 +
+ +
+
+
+ 加载中... +
+
+
+
+
+ `; + } + + bindEvents() { + // 控制按钮事件 + document.getElementById('start-monitoring-btn').addEventListener('click', () => { + this.startMonitoring(); + }); + + document.getElementById('stop-monitoring-btn').addEventListener('click', () => { + this.stopMonitoring(); + }); + + document.getElementById('run-analysis-btn').addEventListener('click', () => { + this.runAnalysis(); + }); + + document.getElementById('trigger-sample-btn').addEventListener('click', () => { + this.triggerSampleActions(); + }); + + // 对话事件 + document.getElementById('send-chat-btn').addEventListener('click', () => { + this.sendChatMessage(); + }); + + document.getElementById('chat-input').addEventListener('keypress', (e) => { + if (e.key === 'Enter') { + this.sendChatMessage(); + } + }); + + // 清空历史 + document.getElementById('clear-history-btn').addEventListener('click', () => { + this.clearHistory(); + }); + + // 定期刷新状态 + this.statusInterval = setInterval(() => { + this.loadAgentStatus(); + }, 5000); + } + + async loadAgentStatus() { + try { + const response = await fetch('/api/agent/status'); + const data = await response.json(); + + const statusDiv = document.getElementById('agent-status'); + if (data.success) { + const status = data.status || 'unknown'; + const activeGoals = data.active_goals || 0; + const availableTools = data.available_tools || 0; + + let statusClass = 'text-warning'; + let statusText = '未知状态'; + + switch (status) { + case 'active': + statusClass = 'text-success'; + statusText = '运行中'; + break; + case 'inactive': + statusClass = 'text-secondary'; + statusText = '未激活'; + break; + case 'error': + statusClass = 'text-danger'; + statusText = '错误'; + break; + } + + statusDiv.innerHTML = ` +
+ + ${statusText} +
+
+
+
${activeGoals}
+ 活跃目标 +
+
+
${availableTools}
+ 可用工具 +
+
+ `; + } else { + statusDiv.innerHTML = ` +
+ +
Agent服务不可用
+
+ `; + } + } catch (error) { + console.error('加载Agent状态失败:', error); + document.getElementById('agent-status').innerHTML = ` +
+ +
加载状态失败
+
+ `; + } + } + + async loadActionHistory() { + try { + const response = await fetch('/api/agent/action-history?limit=20'); + const data = await response.json(); + + const historyDiv = document.getElementById('action-history'); + if (data.success && data.history.length > 0) { + let html = '
'; + html += ''; + + data.history.forEach(action => { + const timestamp = new Date(action.timestamp).toLocaleString(); + const statusClass = action.success ? 'text-success' : 'text-danger'; + const statusText = action.success ? '成功' : '失败'; + + html += ` + + + + + `; + }); + + html += '
时间动作状态详情
${timestamp}${action.action_type || '未知'}${statusText}${action.details || ''}
'; + historyDiv.innerHTML = html; + } else { + historyDiv.innerHTML = '
暂无执行历史
'; + } + } catch (error) { + console.error('加载执行历史失败:', error); + document.getElementById('action-history').innerHTML = '
加载历史失败
'; + } + } + + async loadToolsStats() { + try { + const response = await fetch('/api/agent/tools/stats'); + const data = await response.json(); + + const statsDiv = document.getElementById('tools-stats'); + if (data.success) { + const tools = data.tools || []; + const performance = data.performance || {}; + + let html = `
工具数量: ${tools.length}
`; + + if (tools.length > 0) { + html += '
可用工具:
    '; + tools.slice(0, 5).forEach(tool => { + html += `
  • • ${tool.name}
  • `; + }); + if (tools.length > 5) { + html += `
  • ... 还有 ${tools.length - 5} 个工具
  • `; + } + html += '
'; + } + + statsDiv.innerHTML = html; + } else { + statsDiv.innerHTML = '
获取工具统计失败
'; + } + } catch (error) { + console.error('加载工具统计失败:', error); + document.getElementById('tools-stats').innerHTML = '
加载失败
'; + } + } + + async loadLLMStats() { + try { + const response = await fetch('/api/agent/llm-stats'); + const data = await response.json(); + + const statsDiv = document.getElementById('llm-stats'); + if (data.success) { + const stats = data.stats || {}; + let html = ''; + + if (stats.total_requests) { + html += `
总请求数: ${stats.total_requests}
`; + } + if (stats.success_rate !== undefined) { + html += `
成功率: ${(stats.success_rate * 100).toFixed(1)}%
`; + } + if (stats.average_response_time) { + html += `
平均响应时间: ${stats.average_response_time.toFixed(2)}s
`; + } + + if (!html) { + html = '
暂无统计数据
'; + } + + statsDiv.innerHTML = html; + } else { + statsDiv.innerHTML = '
获取LLM统计失败
'; + } + } catch (error) { + console.error('加载LLM统计失败:', error); + document.getElementById('llm-stats').innerHTML = '
加载失败
'; + } + } + + async startMonitoring() { + try { + const response = await fetch('/api/agent/monitoring/start', { method: 'POST' }); + const data = await response.json(); + + if (data.success) { + if (window.showToast) { + window.showToast('监控已启动', 'success'); + } + this.loadAgentStatus(); + } else { + if (window.showToast) { + window.showToast(data.message || '启动监控失败', 'error'); + } + } + } catch (error) { + console.error('启动监控失败:', error); + if (window.showToast) { + window.showToast('网络错误', 'error'); + } + } + } + + async stopMonitoring() { + try { + const response = await fetch('/api/agent/monitoring/stop', { method: 'POST' }); + const data = await response.json(); + + if (data.success) { + if (window.showToast) { + window.showToast('监控已停止', 'success'); + } + this.loadAgentStatus(); + } else { + if (window.showToast) { + window.showToast(data.message || '停止监控失败', 'error'); + } + } + } catch (error) { + console.error('停止监控失败:', error); + if (window.showToast) { + window.showToast('网络错误', 'error'); + } + } + } + + async runAnalysis() { + try { + const response = await fetch('/api/agent/intelligent-analysis', { method: 'POST' }); + const data = await response.json(); + + if (data.success) { + if (window.showToast) { + window.showToast('智能分析完成', 'success'); + } + this.loadActionHistory(); + } else { + if (window.showToast) { + window.showToast('分析失败', 'error'); + } + } + } catch (error) { + console.error('运行分析失败:', error); + if (window.showToast) { + window.showToast('网络错误', 'error'); + } + } + } + + async triggerSampleActions() { + try { + const response = await fetch('/api/agent/trigger-sample', { method: 'POST' }); + const data = await response.json(); + + if (data.success) { + if (window.showToast) { + window.showToast('示例动作已触发', 'success'); + } + this.loadActionHistory(); + } else { + if (window.showToast) { + window.showToast('触发示例动作失败', 'error'); + } + } + } catch (error) { + console.error('触发示例动作失败:', error); + if (window.showToast) { + window.showToast('网络错误', 'error'); + } + } + } + + async sendChatMessage() { + const input = document.getElementById('chat-input'); + const message = input.value.trim(); + + if (!message) { + return; + } + + // 添加用户消息到界面 + this.addMessageToChat('user', message); + input.value = ''; + + try { + const response = await fetch('/api/agent/chat', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + message: message, + context: { user_id: 'admin' } + }) + }); + + const data = await response.json(); + + if (data.success) { + // 添加Agent回复到界面 + this.addMessageToChat('agent', data.response); + } else { + this.addMessageToChat('agent', '抱歉,处理您的请求时出现错误。'); + } + } catch (error) { + console.error('发送消息失败:', error); + this.addMessageToChat('agent', '网络错误,请稍后重试。'); + } + } + + addMessageToChat(sender, message) { + const chatMessages = document.getElementById('chat-messages'); + const messageDiv = document.createElement('div'); + messageDiv.className = `chat-message ${sender === 'user' ? 'text-end' : ''}`; + + const time = new Date().toLocaleTimeString(); + messageDiv.innerHTML = ` +
+
${message}
+
${time}
+
+ `; + + chatMessages.appendChild(messageDiv); + chatMessages.scrollTop = chatMessages.scrollHeight; + } + + async clearHistory() { + if (!confirm('确定要清空所有执行历史吗?')) { + return; + } + + try { + const response = await fetch('/api/agent/clear-history', { method: 'POST' }); + const data = await response.json(); + + if (data.success) { + if (window.showToast) { + window.showToast('历史已清空', 'success'); + } + this.loadActionHistory(); + } else { + if (window.showToast) { + window.showToast('清空历史失败', 'error'); + } + } + } catch (error) { + console.error('清空历史失败:', error); + if (window.showToast) { + window.showToast('网络错误', 'error'); + } + } + } + + showError(error) { + this.container.innerHTML = ` +
+
+
+
+ +

页面加载失败

+

${error.message || '未知错误'}

+ +
+
+
+
+ `; + } + + destroy() { + if (this.statusInterval) { + clearInterval(this.statusInterval); + } + } +} diff --git a/src/web/static/js/pages/alerts.js b/src/web/static/js/pages/alerts.js new file mode 100644 index 0000000..0bfb484 --- /dev/null +++ b/src/web/static/js/pages/alerts.js @@ -0,0 +1,738 @@ +/** + * 预警管理页面组件 + */ + +import { api } from '../core/api.js'; +import { formatDate, formatRelativeTime } from '../core/utils.js'; +import { confirm, alert } from '../components/modal.js'; +import store from '../core/store.js'; + +export default class Alerts { + constructor(container, route) { + this.container = container; + this.route = route; + this.filters = { + level: '', + status: '', + type: '', + page: 1, + per_page: 10 + }; + this.init(); + } + + async init() { + try { + this.render(); + await this.loadData(); + this.bindEvents(); + } catch (error) { + console.error('Alerts page init error:', error); + this.showError(error); + } + } + + render() { + this.container.innerHTML = ` + + + +
+
+
+
+
0
+
严重预警
+
+
+
+
+
+
+
0
+
警告预警
+
+
+
+
+
+
+
0
+
信息预警
+
+
+
+
+
+
+
0
+
总预警数
+
+
+
+
+ + +
+
+
监控控制
+
+
+
+
+
+ 监控状态: + + 检查中... + +
+
+
+ + +
+
+
+
+ + +
+
+
预警规则
+ +
+
+
+ + + + + + + + + + + + + + + + +
规则名称类型级别阈值状态操作
+
+
+
+
+
+ + +
+
+
预警历史
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+ + + + + + + + + + + + + + + + +
时间级别规则消息状态操作
+
+
+
+ + + +
+
+ `; + + // 渲染规则模态框 + this.renderRuleModal(); + } + + renderRuleModal() { + const modalHTML = ` + + `; + document.body.insertAdjacentHTML('beforeend', modalHTML); + } + + async loadData() { + try { + // 并行加载数据 + const [alertsRes, rulesRes, statistics, monitorStatus] = await Promise.all([ + api.alerts.list(this.filters), + api.rules.list(), + api.alerts.statistics(), + api.monitor.status() + ]); + + // 更新统计数据 + this.updateStatistics(statistics); + + // 更新监控状态 + this.updateMonitorStatus(monitorStatus); + + // 更新规则列表 + this.updateRulesList(rulesRes); + + // 更新预警列表 + this.updateAlertsList(alertsRes); + + } catch (error) { + console.error('Load alerts data error:', error); + this.showError(error); + } + } + + updateStatistics(statistics) { + document.getElementById('critical-alerts').textContent = statistics.critical || 0; + document.getElementById('warning-alerts').textContent = statistics.warning || 0; + document.getElementById('info-alerts').textContent = statistics.info || 0; + document.getElementById('total-alerts').textContent = statistics.total || 0; + } + + updateMonitorStatus(status) { + const statusEl = document.getElementById('monitor-status'); + const textEl = document.getElementById('monitor-text'); + + if (status.status === 'running') { + statusEl.className = 'status-indicator online'; + textEl.textContent = '监控运行中'; + } else { + statusEl.className = 'status-indicator offline'; + textEl.textContent = '监控已停止'; + } + } + + updateRulesList(rules) { + const tbody = document.getElementById('rules-table'); + if (!tbody) return; + + if (!rules || rules.length === 0) { + tbody.innerHTML = ` + + 暂无预警规则 + + `; + return; + } + + tbody.innerHTML = rules.map(rule => ` + + ${rule.name} + ${rule.alert_type} + ${rule.level} + ${rule.threshold} + + + ${rule.enabled ? '启用' : '禁用'} + + + +
+ + +
+ + + `).join(''); + } + + updateAlertsList(response) { + const tbody = document.getElementById('alerts-table'); + if (!tbody) return; + + const alerts = response.alerts || []; + + if (alerts.length === 0) { + tbody.innerHTML = ` + + 暂无预警记录 + + `; + return; + } + + tbody.innerHTML = alerts.map(alert => ` + + ${formatDate(alert.created_at, 'MM-DD HH:mm')} + ${alert.level} + ${alert.rule_name} + ${alert.message} + + + ${alert.is_active ? '活跃' : '已解决'} + + + + ${alert.is_active ? ` + + ` : '-'} + + + `).join(''); + + // 更新分页 + this.updatePagination(response); + } + + updatePagination(response) { + const pagination = document.getElementById('pagination'); + if (!pagination) return; + + const { page = 1, total_pages = 1 } = response; + + if (total_pages <= 1) { + pagination.innerHTML = ''; + return; + } + + let html = ''; + + // 上一页 + if (page > 1) { + html += `
  • + 上一页 +
  • `; + } + + // 页码 + for (let i = Math.max(1, page - 2); i <= Math.min(total_pages, page + 2); i++) { + html += `
  • + ${i} +
  • `; + } + + // 下一页 + if (page < total_pages) { + html += `
  • + 下一页 +
  • `; + } + + pagination.innerHTML = html; + } + + getLevelColor(level) { + const colors = { + 'critical': 'danger', + 'error': 'danger', + 'warning': 'warning', + 'info': 'info' + }; + return colors[level] || 'secondary'; + } + + bindEvents() { + // 监控控制 + document.getElementById('start-monitor')?.addEventListener('click', () => { + this.startMonitor(); + }); + + document.getElementById('stop-monitor')?.addEventListener('click', () => { + this.stopMonitor(); + }); + + document.getElementById('check-alerts')?.addEventListener('click', () => { + this.checkAlerts(); + }); + + // 规则表单 + document.getElementById('save-rule')?.addEventListener('click', () => { + this.saveRule(); + }); + + // 筛选器 + document.getElementById('filter-level')?.addEventListener('change', (e) => { + this.filters.level = e.target.value; + this.filters.page = 1; + this.loadAlerts(); + }); + + document.getElementById('filter-status')?.addEventListener('change', (e) => { + this.filters.status = e.target.value === 'active' ? 'active' : + e.target.value === 'resolved' ? 'resolved' : ''; + this.filters.page = 1; + this.loadAlerts(); + }); + + document.getElementById('filter-search')?.addEventListener('input', + this.debounce((e) => { + this.filters.search = e.target.value; + this.filters.page = 1; + this.loadAlerts(); + }, 300) + ); + + document.getElementById('reset-filters')?.addEventListener('click', () => { + this.resetFilters(); + }); + + // 分页 + document.getElementById('pagination')?.addEventListener('click', (e) => { + if (e.target.classList.contains('page-link')) { + e.preventDefault(); + const page = parseInt(e.target.dataset.page); + if (page) { + this.filters.page = page; + this.loadAlerts(); + } + } + }); + } + + debounce(func, wait) { + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; + } + + async startMonitor() { + try { + await api.monitor.start(); + await this.loadData(); + store.dispatch('showToast', { + type: 'success', + message: '监控已启动' + }); + } catch (error) { + console.error('Start monitor error:', error); + store.dispatch('showToast', { + type: 'error', + message: '启动监控失败' + }); + } + } + + async stopMonitor() { + try { + await api.monitor.stop(); + await this.loadData(); + store.dispatch('showToast', { + type: 'success', + message: '监控已停止' + }); + } catch (error) { + console.error('Stop monitor error:', error); + store.dispatch('showToast', { + type: 'error', + message: '停止监控失败' + }); + } + } + + async checkAlerts() { + try { + const result = await api.monitor.checkAlerts(); + await this.loadData(); + store.dispatch('showToast', { + type: 'success', + message: `检查完成,发现 ${result.alerts_count || 0} 个新预警` + }); + } catch (error) { + console.error('Check alerts error:', error); + store.dispatch('showToast', { + type: 'error', + message: '检查预警失败' + }); + } + } + + async saveRule() { + const form = document.getElementById('rule-form'); + const formData = new FormData(form); + + const data = { + name: formData.get('name'), + alert_type: formData.get('alert_type'), + level: formData.get('level'), + threshold: parseFloat(formData.get('threshold')), + description: formData.get('description'), + condition: formData.get('condition'), + check_interval: parseInt(formData.get('check_interval')), + cooldown: parseInt(formData.get('cooldown')), + enabled: formData.has('enabled') + }; + + try { + await api.rules.create(data); + await this.loadData(); + + // 关闭模态框 + const modal = bootstrap.Modal.getInstance(document.getElementById('ruleModal')); + modal.hide(); + + // 重置表单 + form.reset(); + + store.dispatch('showToast', { + type: 'success', + message: '规则创建成功' + }); + } catch (error) { + console.error('Save rule error:', error); + store.dispatch('showToast', { + type: 'error', + message: '创建规则失败' + }); + } + } + + async editRule(name) { + // TODO: 实现编辑规则功能 + store.dispatch('showToast', { + type: 'info', + message: '编辑功能开发中' + }); + } + + async deleteRule(name) { + const confirmed = await confirm({ + title: '删除规则', + message: `确定要删除规则 "${name}" 吗?` + }); + + if (!confirmed) return; + + try { + await api.rules.delete(name); + await this.loadData(); + store.dispatch('showToast', { + type: 'success', + message: '规则已删除' + }); + } catch (error) { + console.error('Delete rule error:', error); + store.dispatch('showToast', { + type: 'error', + message: '删除规则失败' + }); + } + } + + async resolveAlert(alertId) { + try { + await api.alerts.resolve(alertId, { resolved_by: 'admin', resolution: '手动解决' }); + await this.loadAlerts(); + store.dispatch('showToast', { + type: 'success', + message: '预警已解决' + }); + } catch (error) { + console.error('Resolve alert error:', error); + store.dispatch('showToast', { + type: 'error', + message: '解决预警失败' + }); + } + } + + resetFilters() { + this.filters = { + level: '', + status: '', + search: '', + page: 1, + per_page: 10 + }; + + // 重置筛选器UI + document.getElementById('filter-level').value = ''; + document.getElementById('filter-status').value = ''; + document.getElementById('filter-search').value = ''; + + // 重新加载数据 + this.loadAlerts(); + } + + async loadAlerts() { + try { + const response = await api.alerts.list(this.filters); + this.updateAlertsList(response); + } catch (error) { + console.error('Load alerts error:', error); + } + } + + showError(error) { + this.container.innerHTML = ` + + `; + } +} + +// 暴露到全局供内联事件使用 +window.alertsPage = null; \ No newline at end of file diff --git a/src/web/static/js/pages/chat.js b/src/web/static/js/pages/chat.js new file mode 100644 index 0000000..dfca450 --- /dev/null +++ b/src/web/static/js/pages/chat.js @@ -0,0 +1,33 @@ +/** + * 聊天页面组件 + */ + +export default class Chat { + constructor(container, route) { + this.container = container; + this.route = route; + this.init(); + } + + async init() { + this.render(); + } + + render() { + this.container.innerHTML = ` + +
    +
    +
    + +

    聊天页面

    +

    该功能正在开发中...

    +
    +
    +
    + `; + } +} \ No newline at end of file diff --git a/src/web/static/js/pages/dashboard.js b/src/web/static/js/pages/dashboard.js new file mode 100644 index 0000000..5bfba22 --- /dev/null +++ b/src/web/static/js/pages/dashboard.js @@ -0,0 +1,454 @@ +/** + * 仪表板页面组件 + */ + +import { api } from '../core/api.js'; +import { formatDate, formatRelativeTime } from '../core/utils.js'; +import store from '../core/store.js'; + +export default class Dashboard { + constructor(container, route) { + this.container = container; + this.route = route; + this.charts = {}; + this.init(); + } + + async init() { + try { + this.render(); + await this.loadData(); + this.bindEvents(); + } catch (error) { + console.error('Dashboard init error:', error); + this.showError(error); + } + } + + render() { + this.container.innerHTML = ` +
    + + +
    + + +
    +
    +
    +
    +
    0
    +
    今日已解决工单
    +
    +
    +
    +
    +
    +
    +
    0
    +
    待处理工单
    +
    +
    +
    +
    +
    +
    +
    0
    +
    活跃预警
    +
    +
    +
    +
    +
    +
    +
    0%
    +
    满意度
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    工单趋势
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    工单分类分布
    +
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    最新工单
    + 查看全部 +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    最新预警
    + 查看全部 +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + `; + } + + async loadData() { + try { + // 加载仪表板数据 + const [analytics, recentWorkorders, recentAlerts, health] = await Promise.all([ + api.monitor.analytics({ days: 30 }), + api.workorders.list({ page: 1, per_page: 5, sort: 'created_at', order: 'desc' }), + api.alerts.list({ page: 1, per_page: 5, sort: 'created_at', order: 'desc' }), + api.system.health() + ]); + + // 更新统计数据 + this.updateStats(analytics, health); + + // 更新图表 + this.updateCharts(analytics); + + // 更新最新工单列表 + this.updateRecentWorkorders(recentWorkorders.workorders || []); + + // 更新最新预警列表 + this.updateRecentAlerts(recentAlerts.alerts || []); + + } catch (error) { + console.error('Load dashboard data error:', error); + this.showError(error); + } + } + + updateStats(analytics, health) { + // 更新统计卡片 + const stats = analytics.data || {}; + + document.getElementById('resolved-orders').textContent = stats.resolved_orders || 0; + document.getElementById('pending-orders').textContent = health.open_workorders || 0; + document.getElementById('active-alerts').textContent = Object.values(health.active_alerts_by_level || {}).reduce((a, b) => a + b, 0); + + const satisfaction = stats.satisfaction_avg ? (stats.satisfaction_avg * 100).toFixed(1) : 0; + document.getElementById('satisfaction-rate').textContent = `${satisfaction}%`; + } + + updateCharts(analytics) { + const data = analytics.data || {}; + + // 更新工单趋势图 + this.updateTrendChart(data.trend || []); + + // 更新分类分布图 + this.updateCategoryChart(data.categories || {}); + } + + updateTrendChart(trendData) { + const ctx = document.getElementById('orders-trend-chart'); + if (!ctx) return; + + // 销毁旧图表 + if (this.charts.trend) { + this.charts.trend.destroy(); + } + + this.charts.trend = new Chart(ctx, { + type: 'line', + data: { + labels: trendData.map(item => item.date), + datasets: [{ + label: '工单数', + data: trendData.map(item => item.count), + borderColor: '#007bff', + backgroundColor: 'rgba(0, 123, 255, 0.1)', + tension: 0.4, + fill: true + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { + display: false + } + }, + scales: { + y: { + beginAtZero: true + } + } + } + }); + } + + updateCategoryChart(categoryData) { + const ctx = document.getElementById('category-chart'); + if (!ctx) return; + + // 销毁旧图表 + if (this.charts.category) { + this.charts.category.destroy(); + } + + const labels = Object.keys(categoryData); + const data = Object.values(categoryData); + + this.charts.category = new Chart(ctx, { + type: 'doughnut', + data: { + labels: labels, + datasets: [{ + data: data, + backgroundColor: [ + '#007bff', + '#28a745', + '#ffc107', + '#dc3545', + '#6c757d' + ] + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { + position: 'bottom' + } + } + } + }); + } + + updateRecentWorkorders(workorders) { + const container = document.getElementById('recent-workorders'); + if (!container) return; + + if (!workorders.length) { + container.innerHTML = ` +
    + +

    暂无工单

    +
    + `; + return; + } + + container.innerHTML = workorders.map(workorder => ` +
    +
    +
    +
    + + ${workorder.title} + +
    + + ${workorder.category || '未分类'} • + ${formatRelativeTime(workorder.created_at)} + +
    + + ${this.getStatusText(workorder.status)} + +
    +
    + `).join(''); + } + + updateRecentAlerts(alerts) { + const container = document.getElementById('recent-alerts'); + if (!container) return; + + if (!alerts.length) { + container.innerHTML = ` +
    + +

    暂无预警

    +
    + `; + return; + } + + container.innerHTML = alerts.map(alert => ` +
    +
    +
    +
    ${alert.message}
    + + ${alert.rule_name} • + ${formatRelativeTime(alert.created_at)} + +
    + + ${alert.level} + +
    +
    + `).join(''); + } + + getStatusColor(status) { + const colors = { + 'open': 'danger', + 'in_progress': 'warning', + 'resolved': 'success', + 'closed': 'secondary' + }; + return colors[status] || 'secondary'; + } + + getStatusText(status) { + const texts = { + 'open': '待处理', + 'in_progress': '处理中', + 'resolved': '已解决', + 'closed': '已关闭' + }; + return texts[status] || status; + } + + getLevelColor(level) { + const colors = { + 'critical': 'danger', + 'error': 'danger', + 'warning': 'warning', + 'info': 'info' + }; + return colors[level] || 'secondary'; + } + + bindEvents() { + // 刷新按钮 + const refreshBtn = document.getElementById('refresh-dashboard'); + if (refreshBtn) { + refreshBtn.addEventListener('click', () => { + this.refresh(); + }); + } + + // 趋势周期选择 + const periodSelect = document.getElementById('trend-period'); + if (periodSelect) { + periodSelect.addEventListener('change', (e) => { + this.changeTrendPeriod(e.target.value); + }); + } + + // 定时刷新(每5分钟) + this.refreshTimer = setInterval(() => { + this.refresh(); + }, 5 * 60 * 1000); + } + + async refresh() { + const refreshBtn = document.getElementById('refresh-dashboard'); + if (refreshBtn) { + refreshBtn.disabled = true; + const icon = refreshBtn.querySelector('i'); + icon.classList.add('fa-spin'); + } + + try { + await this.loadData(); + } catch (error) { + console.error('Refresh error:', error); + } finally { + if (refreshBtn) { + refreshBtn.disabled = false; + const icon = refreshBtn.querySelector('i'); + icon.classList.remove('fa-spin'); + } + } + } + + async changeTrendPeriod(days) { + try { + const analytics = await api.monitor.analytics({ days: parseInt(days) }); + this.updateTrendChart(analytics.data?.trend || []); + } catch (error) { + console.error('Change trend period error:', error); + } + } + + showError(error) { + this.container.innerHTML = ` + + `; + } + + destroy() { + // 清理图表 + Object.values(this.charts).forEach(chart => { + if (chart) chart.destroy(); + }); + + // 清理定时器 + if (this.refreshTimer) { + clearInterval(this.refreshTimer); + } + } +} \ No newline at end of file diff --git a/src/web/static/js/pages/feishu.js b/src/web/static/js/pages/feishu.js new file mode 100644 index 0000000..5c82d4e --- /dev/null +++ b/src/web/static/js/pages/feishu.js @@ -0,0 +1,451 @@ +/** + * 飞书同步页面组件 + */ + +export default class Feishu { + constructor(container, route) { + this.container = container; + this.route = route; + this.init(); + } + + async init() { + try { + this.render(); + this.bindEvents(); + this.loadSyncStatus(); + } catch (error) { + console.error('Feishu init error:', error); + this.showError(error); + } + } + + render() { + this.container.innerHTML = ` + + +
    + +
    +
    +
    +
    + 同步配置 +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + 同步状态 +
    +
    +
    +
    + 加载中... +
    +
    +
    + + +
    +
    +
    + 同步操作 +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + 字段映射 +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + 数据预览 +
    +
    +
    +
    + 点击"预览飞书数据"查看数据 +
    +
    +
    +
    +
    + `; + } + + bindEvents() { + // 配置表单提交 + const configForm = document.getElementById('feishu-config-form'); + configForm.addEventListener('submit', (e) => { + e.preventDefault(); + this.saveConfig(); + }); + + // 测试连接 + document.getElementById('test-connection-btn').addEventListener('click', () => { + this.testConnection(); + }); + + // 从飞书同步 + document.getElementById('sync-from-feishu-btn').addEventListener('click', () => { + this.syncFromFeishu(); + }); + + // 预览数据 + document.getElementById('preview-data-btn').addEventListener('click', () => { + this.previewData(); + }); + + // 发现字段 + document.getElementById('discover-fields-btn').addEventListener('click', () => { + this.discoverFields(); + }); + + // 映射状态 + document.getElementById('mapping-status-btn').addEventListener('click', () => { + this.getMappingStatus(); + }); + + // 加载配置 + this.loadConfig(); + } + + async loadConfig() { + try { + const response = await fetch('/api/feishu-sync/config'); + const data = await response.json(); + + if (data.success) { + document.getElementById('app_id').value = data.config.app_id || ''; + document.getElementById('app_secret').value = data.config.app_secret || ''; + document.getElementById('app_token').value = data.config.app_token || ''; + document.getElementById('table_id').value = data.config.table_id || ''; + } + } catch (error) { + console.error('加载配置失败:', error); + } + } + + async saveConfig() { + const formData = new FormData(document.getElementById('feishu-config-form')); + const config = { + app_id: formData.get('app_id'), + app_secret: formData.get('app_secret'), + app_token: formData.get('app_token'), + table_id: formData.get('table_id') + }; + + try { + const response = await fetch('/api/feishu-sync/config', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(config) + }); + + const data = await response.json(); + + if (data.success) { + if (window.showToast) { + window.showToast('配置保存成功', 'success'); + } + } else { + if (window.showToast) { + window.showToast(data.error || '配置保存失败', 'error'); + } + } + } catch (error) { + console.error('保存配置失败:', error); + if (window.showToast) { + window.showToast('网络错误', 'error'); + } + } + } + + async testConnection() { + try { + const response = await fetch('/api/feishu-sync/test-connection'); + const data = await response.json(); + + if (data.success) { + if (window.showToast) { + window.showToast('连接测试成功', 'success'); + } + // 显示字段信息 + if (data.fields) { + console.log('飞书表格字段:', data.fields); + } + } else { + if (window.showToast) { + window.showToast(data.message || '连接测试失败', 'error'); + } + } + } catch (error) { + console.error('测试连接失败:', error); + if (window.showToast) { + window.showToast('网络错误', 'error'); + } + } + } + + async loadSyncStatus() { + try { + const response = await fetch('/api/feishu-sync/status'); + const data = await response.json(); + + const statusDiv = document.getElementById('sync-status'); + if (data.success) { + const status = data.status; + statusDiv.innerHTML = ` +
    + 最后同步: ${status.last_sync || '从未同步'} +
    +
    + 同步状态: ${status.is_syncing ? '同步中' : '空闲'} +
    +
    + 总记录数: ${status.total_records || 0} +
    + `; + } else { + statusDiv.innerHTML = '获取状态失败'; + } + } catch (error) { + console.error('获取同步状态失败:', error); + document.getElementById('sync-status').innerHTML = '获取状态失败'; + } + } + + async syncFromFeishu() { + try { + const response = await fetch('/api/feishu-sync/sync-from-feishu', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + generate_ai_suggestions: true, + limit: 50 + }) + }); + + const data = await response.json(); + + if (data.success) { + if (window.showToast) { + window.showToast(data.message, 'success'); + } + this.loadSyncStatus(); // 重新加载状态 + } else { + if (window.showToast) { + window.showToast(data.error || '同步失败', 'error'); + } + } + } catch (error) { + console.error('同步失败:', error); + if (window.showToast) { + window.showToast('网络错误', 'error'); + } + } + } + + async previewData() { + try { + const response = await fetch('/api/feishu-sync/preview-feishu-data'); + const data = await response.json(); + + const previewDiv = document.getElementById('data-preview'); + if (data.success && data.preview_data.length > 0) { + let html = `
    `; + html += ''; + + data.preview_data.forEach(item => { + html += ` + + + `; + }); + + html += '
    记录ID字段数据
    ${item.record_id}
    ${JSON.stringify(item.fields, null, 2)}
    '; + previewDiv.innerHTML = html; + } else { + previewDiv.innerHTML = '暂无数据'; + } + } catch (error) { + console.error('预览数据失败:', error); + document.getElementById('data-preview').innerHTML = '预览失败'; + } + } + + async discoverFields() { + try { + const response = await fetch('/api/feishu-sync/field-mapping/discover', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ limit: 5 }) + }); + + const data = await response.json(); + + const resultDiv = document.getElementById('field-discovery-result'); + if (data.success) { + const report = data.discovery_report; + let html = '
    字段发现报告
    '; + + if (Object.keys(report).length > 0) { + html += '
      '; + Object.entries(report).forEach(([field, info]) => { + html += `
    • + ${field}: ${info.suggestion || '未知'} +
      置信度: ${(info.confidence * 100).toFixed(1)}% +
    • `; + }); + html += '
    '; + } else { + html += '

    未发现可映射的字段

    '; + } + + resultDiv.innerHTML = html; + } else { + resultDiv.innerHTML = '字段发现失败'; + } + } catch (error) { + console.error('字段发现失败:', error); + document.getElementById('field-discovery-result').innerHTML = '字段发现失败'; + } + } + + async getMappingStatus() { + try { + const response = await fetch('/api/feishu-sync/field-mapping/status'); + const data = await response.json(); + + const resultDiv = document.getElementById('mapping-status-result'); + if (data.success) { + const status = data.status; + let html = '
    映射状态
    '; + + if (status.mappings && status.mappings.length > 0) { + html += '
      '; + status.mappings.forEach(mapping => { + html += `
    • + ${mapping.feishu_field} → ${mapping.local_field} +
      优先级: ${mapping.priority} +
    • `; + }); + html += '
    '; + } else { + html += '

    暂无字段映射

    '; + } + + resultDiv.innerHTML = html; + } else { + resultDiv.innerHTML = '获取映射状态失败'; + } + } catch (error) { + console.error('获取映射状态失败:', error); + document.getElementById('mapping-status-result').innerHTML = '获取映射状态失败'; + } + } + + showError(error) { + this.container.innerHTML = ` +
    +
    +
    +
    + +

    页面加载失败

    +

    ${error.message || '未知错误'}

    + +
    +
    +
    +
    + `; + } +} diff --git a/src/web/static/js/pages/knowledge.js b/src/web/static/js/pages/knowledge.js new file mode 100644 index 0000000..c272c63 --- /dev/null +++ b/src/web/static/js/pages/knowledge.js @@ -0,0 +1,33 @@ +/** + * 知识库页面组件 + */ + +export default class Knowledge { + constructor(container, route) { + this.container = container; + this.route = route; + this.init(); + } + + async init() { + this.render(); + } + + render() { + this.container.innerHTML = ` + +
    +
    +
    + +

    知识库页面

    +

    该功能正在开发中...

    +
    +
    +
    + `; + } +} \ No newline at end of file diff --git a/src/web/static/js/pages/login.js b/src/web/static/js/pages/login.js new file mode 100644 index 0000000..76f0334 --- /dev/null +++ b/src/web/static/js/pages/login.js @@ -0,0 +1,216 @@ +/** + * 登录页面组件 + */ + +export default class Login { + constructor(container, route) { + this.container = container; + this.route = route; + this.init(); + } + + async init() { + try { + this.render(); + this.bindEvents(); + } catch (error) { + console.error('Login init error:', error); + this.showError(error); + } + } + + render() { + this.container.innerHTML = ` +
    + + +
    +
    +
    +
    +
    +
    + +
    + +
    + + + + +
    +
    + + +
    + +
    + + + + +
    +
    + + +
    + + +
    + + +
    + + +
    + +
    +
    +
    +
    + + +
    +

    + 还没有账号?立即注册 +

    +

    + 忘记密码? +

    +
    +
    +
    +
    + `; + } + + bindEvents() { + const form = document.getElementById('login-form'); + const loginBtn = document.getElementById('login-btn'); + const errorDiv = document.getElementById('login-error'); + + form.addEventListener('submit', async (e) => { + e.preventDefault(); + + // 获取表单数据 + const formData = new FormData(form); + const username = formData.get('username'); + const password = formData.get('password'); + const remember = formData.get('remember'); + + // 显示加载状态 + loginBtn.disabled = true; + loginBtn.innerHTML = '登录中...'; + errorDiv.classList.add('d-none'); + + try { + // 调用登录API + const response = await fetch('/api/login', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + username, + password, + remember + }), + credentials: 'same-origin' + }); + + const data = await response.json(); + + if (response.ok && data.success) { + // 登录成功 + // 保存token到sessionStorage(会话级别) + sessionStorage.setItem('token', data.token); + + // 如果选择记住我,也保存到localStorage + if (remember) { + localStorage.setItem('user', JSON.stringify(data.user)); + localStorage.setItem('token', data.token); + localStorage.setItem('remember', 'true'); + } + + // 更新应用状态 + if (window.store) { + window.store.commit('SET_USER', data.user); + window.store.commit('SET_LOGIN', true); + window.store.commit('SET_TOKEN', data.token); + } + + // 显示成功提示 + if (window.showToast) { + window.showToast('登录成功', 'success'); + } + + // 跳转到仪表板 + if (window.router) { + window.router.push('/'); + } else { + // 如果路由器还没初始化,直接跳转 + window.location.href = '/'; + } + } else { + // 登录失败 + errorDiv.textContent = data.message || '用户名或密码错误'; + errorDiv.classList.remove('d-none'); + } + } catch (error) { + console.error('Login error:', error); + errorDiv.textContent = '网络错误,请稍后重试'; + errorDiv.classList.remove('d-none'); + } finally { + // 恢复按钮状态 + loginBtn.disabled = false; + loginBtn.innerHTML = '登录'; + } + }); + + // 检查本地存储中的登录状态 + const rememberedUser = localStorage.getItem('remember'); + if (rememberedUser === 'true') { + const user = localStorage.getItem('user'); + if (user) { + try { + const userData = JSON.parse(user); + document.getElementById('username').value = userData.username || ''; + document.getElementById('remember').checked = true; + } catch (e) { + console.error('Error parsing remembered user:', e); + } + } + } + } + + showError(error) { + this.container.innerHTML = ` +
    +
    +
    +
    + +

    页面加载失败

    +

    ${error.message || '未知错误'}

    + +
    +
    +
    +
    + `; + } +} \ No newline at end of file diff --git a/src/web/static/js/pages/monitoring.js b/src/web/static/js/pages/monitoring.js new file mode 100644 index 0000000..20ecb19 --- /dev/null +++ b/src/web/static/js/pages/monitoring.js @@ -0,0 +1,33 @@ +/** + * 系统监控页面组件 + */ + +export default class Monitoring { + constructor(container, route) { + this.container = container; + this.route = route; + this.init(); + } + + async init() { + this.render(); + } + + render() { + this.container.innerHTML = ` + +
    +
    +
    + +

    系统监控页面

    +

    该功能正在开发中...

    +
    +
    +
    + `; + } +} \ No newline at end of file diff --git a/src/web/static/js/pages/notfound.js b/src/web/static/js/pages/notfound.js new file mode 100644 index 0000000..8d28478 --- /dev/null +++ b/src/web/static/js/pages/notfound.js @@ -0,0 +1,142 @@ +/** + * 404页面组件 + */ + +export default class NotFound { + constructor(container, route) { + this.container = container; + this.route = route; + this.init(); + } + + async init() { + try { + this.render(); + this.bindEvents(); + } catch (error) { + console.error('NotFound init error:', error); + this.showError(error); + } + } + + render() { + this.container.innerHTML = ` + + +
    +
    +
    +
    +
    + +
    +

    页面不存在

    +

    + 看起来您访问的页面已经被移除、名称已更改或暂时不可用。 +

    +
    + + +
    +
    +
    +
    +
    + + + + `; + } + + bindEvents() { + // 绑定导航链接事件 + const links = this.container.querySelectorAll('a[href^="#"]'); + links.forEach(link => { + link.addEventListener('click', (e) => { + e.preventDefault(); + const href = link.getAttribute('href'); + if (href === '#home' && window.router) { + window.router.push('/'); + } + }); + }); + } + + showError(error) { + this.container.innerHTML = ` +
    +
    +
    +
    + +

    页面加载失败

    +

    ${error.message || '未知错误'}

    + +
    +
    +
    +
    + `; + } +} \ No newline at end of file diff --git a/src/web/static/js/pages/settings.js b/src/web/static/js/pages/settings.js new file mode 100644 index 0000000..b25abeb --- /dev/null +++ b/src/web/static/js/pages/settings.js @@ -0,0 +1,428 @@ +/** + * 系统设置页面组件 + */ + +export default class Settings { + constructor(container, route) { + this.container = container; + this.route = route; + this.init(); + } + + async init() { + this.render(); + this.bindEvents(); + this.loadSettings(); + } + + render() { + this.container.innerHTML = ` + + +
    + +
    +
    +
    +
    + 系统信息 +
    +
    +
    +
    + 加载中... +
    +
    +
    +
    + + +
    +
    +
    +
    + 数据库状态 +
    +
    +
    +
    + 加载中... +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + 系统配置 +
    +
    +
    +
    + +
    +
    预警规则设置
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    LLM配置
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    其他设置
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + 系统操作 +
    +
    +
    +
    +
    +
    数据管理
    +
    + + +
    +
    +
    +
    系统维护
    +
    + + +
    +
    +
    +
    +
    +
    +
    + `; + } + + bindEvents() { + // 设置表单提交 + const settingsForm = document.getElementById('system-settings-form'); + settingsForm.addEventListener('submit', (e) => { + e.preventDefault(); + this.saveSettings(); + }); + + // 系统操作按钮 + document.getElementById('backup-data-btn').addEventListener('click', () => { + this.backupData(); + }); + + document.getElementById('clear-cache-btn').addEventListener('click', () => { + this.clearCache(); + }); + + document.getElementById('check-health-btn').addEventListener('click', () => { + this.checkHealth(); + }); + + document.getElementById('restart-services-btn').addEventListener('click', () => { + this.restartServices(); + }); + } + + async loadSettings() { + try { + // 加载系统信息 + const healthResponse = await fetch('/api/health'); + const healthData = await healthResponse.json(); + + const systemInfoDiv = document.getElementById('system-info'); + if (healthData) { + systemInfoDiv.innerHTML = ` +
    版本: ${healthData.version || '1.0.0'}
    +
    运行时间: ${this.formatUptime(healthData.uptime || 0)}
    +
    健康评分: ${healthData.health_score || 0}/100
    +
    活跃会话: ${healthData.active_sessions || 0}
    +
    处理中的工单: ${healthData.processing_workorders || 0}
    + `; + } + + // 加载数据库状态 + const dbStatusDiv = document.getElementById('db-status'); + if (healthData.db_status) { + const dbStatus = healthData.db_status; + dbStatusDiv.innerHTML = ` +
    状态: ${dbStatus.connection_ok ? '正常' : '异常'}
    +
    类型: ${dbStatus.type || '未知'}
    +
    版本: ${dbStatus.version || '未知'}
    +
    连接数: ${dbStatus.active_connections || 0}
    + `; + } else { + dbStatusDiv.innerHTML = '
    无法获取数据库状态
    '; + } + + // 加载配置设置 (这里应该从后端API获取) + this.loadConfigSettings(); + + } catch (error) { + console.error('加载设置失败:', error); + document.getElementById('system-info').innerHTML = '
    加载失败
    '; + document.getElementById('db-status').innerHTML = '
    加载失败
    '; + } + } + + async loadConfigSettings() { + // 这里应该从后端API加载配置设置 + // 暂时设置一些默认值 + try { + document.getElementById('check-interval').value = '300'; + document.getElementById('cooldown').value = '3600'; + document.getElementById('llm-provider').value = 'qwen'; + document.getElementById('default-model').value = 'qwen-turbo'; + document.getElementById('enable-analytics').checked = true; + document.getElementById('enable-websocket').checked = true; + document.getElementById('enable-pwa').checked = true; + document.getElementById('enable-error-reporting').checked = false; + } catch (error) { + console.error('加载配置设置失败:', error); + } + } + + async saveSettings() { + const settings = { + alert_rules: { + check_interval: parseInt(document.getElementById('check-interval').value), + cooldown: parseInt(document.getElementById('cooldown').value) + }, + llm: { + provider: document.getElementById('llm-provider').value, + model: document.getElementById('default-model').value, + api_key: document.getElementById('api-key').value + }, + features: { + analytics: document.getElementById('enable-analytics').checked, + websocket: document.getElementById('enable-websocket').checked, + pwa: document.getElementById('enable-pwa').checked, + error_reporting: document.getElementById('enable-error-reporting').checked + } + }; + + try { + // 这里应该调用后端API保存设置 + console.log('保存设置:', settings); + + if (window.showToast) { + window.showToast('设置保存成功', 'success'); + } + } catch (error) { + console.error('保存设置失败:', error); + if (window.showToast) { + window.showToast('设置保存失败', 'error'); + } + } + } + + async backupData() { + try { + // 这里应该调用后端备份API + console.log('开始备份数据...'); + + if (window.showToast) { + window.showToast('数据备份功能开发中', 'info'); + } + } catch (error) { + console.error('备份数据失败:', error); + if (window.showToast) { + window.showToast('备份失败', 'error'); + } + } + } + + async clearCache() { + if (confirm('确定要清理所有缓存吗?')) { + try { + // 清理本地存储 + localStorage.clear(); + sessionStorage.clear(); + + // 清理Service Worker缓存 + if ('caches' in window) { + const cacheNames = await caches.keys(); + await Promise.all( + cacheNames.map(cacheName => caches.delete(cacheName)) + ); + } + + if (window.showToast) { + window.showToast('缓存清理完成', 'success'); + } + + // 刷新页面 + setTimeout(() => { + window.location.reload(); + }, 1000); + } catch (error) { + console.error('清理缓存失败:', error); + if (window.showToast) { + window.showToast('清理缓存失败', 'error'); + } + } + } + } + + async checkHealth() { + try { + const response = await fetch('/api/health'); + const data = await response.json(); + + if (data) { + const healthScore = data.health_score || 0; + const status = healthScore >= 80 ? 'success' : healthScore >= 60 ? 'warning' : 'error'; + const message = `系统健康评分: ${healthScore}/100`; + + if (window.showToast) { + window.showToast(message, status); + } + } else { + if (window.showToast) { + window.showToast('健康检查失败', 'error'); + } + } + } catch (error) { + console.error('健康检查失败:', error); + if (window.showToast) { + window.showToast('健康检查失败', 'error'); + } + } + } + + async restartServices() { + if (confirm('确定要重启系统服务吗?这可能会暂时中断服务。')) { + try { + // 这里应该调用后端重启API + console.log('重启服务...'); + + if (window.showToast) { + window.showToast('服务重启功能开发中', 'info'); + } + } catch (error) { + console.error('重启服务失败:', error); + if (window.showToast) { + window.showToast('重启失败', 'error'); + } + } + } + } + + formatUptime(seconds) { + const days = Math.floor(seconds / 86400); + const hours = Math.floor((seconds % 86400) / 3600); + const minutes = Math.floor((seconds % 3600) / 60); + + if (days > 0) { + return `${days}天 ${hours}小时 ${minutes}分钟`; + } else if (hours > 0) { + return `${hours}小时 ${minutes}分钟`; + } else { + return `${minutes}分钟`; + } + } +} \ No newline at end of file diff --git a/src/web/static/js/pages/vehicle.js b/src/web/static/js/pages/vehicle.js new file mode 100644 index 0000000..9a21372 --- /dev/null +++ b/src/web/static/js/pages/vehicle.js @@ -0,0 +1,402 @@ +/** + * 车辆数据页面组件 + */ + +export default class Vehicle { + constructor(container, route) { + this.container = container; + this.route = route; + this.init(); + } + + async init() { + try { + this.render(); + this.bindEvents(); + this.loadVehicleData(); + } catch (error) { + console.error('Vehicle init error:', error); + this.showError(error); + } + } + + render() { + this.container.innerHTML = ` + + + +
    +
    +
    + 数据查询 +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + + + +
    +
    +
    +
    + + +
    +
    +
    + 车辆数据列表 +
    +
    共 0 条数据
    +
    +
    +
    + + + + + + + + + + + + + + + + + +
    ID车辆ID车架号数据类型数据内容时间戳操作
    + 加载中... +
    +
    +
    +
    + + + + `; + } + + bindEvents() { + // 查询按钮 + document.getElementById('search-btn').addEventListener('click', () => { + this.loadVehicleData(); + }); + + // 初始化示例数据 + document.getElementById('init-sample-btn').addEventListener('click', () => { + this.initSampleData(); + }); + + // 添加数据按钮 + document.getElementById('add-data-btn').addEventListener('click', () => { + this.showAddDataModal(); + }); + + // 保存数据 + document.getElementById('save-data-btn').addEventListener('click', () => { + this.saveVehicleData(); + }); + + // 输入框回车查询 + ['vehicle_id', 'vehicle_vin'].forEach(id => { + document.getElementById(id).addEventListener('keypress', (e) => { + if (e.key === 'Enter') { + this.loadVehicleData(); + } + }); + }); + } + + async loadVehicleData() { + const vehicleId = document.getElementById('vehicle_id').value.trim(); + const vehicleVin = document.getElementById('vehicle_vin').value.trim(); + const dataType = document.getElementById('data_type').value; + const limit = document.getElementById('limit').value; + + const params = new URLSearchParams(); + if (vehicleId) params.append('vehicle_id', vehicleId); + if (vehicleVin) params.append('vehicle_vin', vehicleVin); + if (dataType) params.append('data_type', dataType); + if (limit) params.append('limit', limit); + + try { + const response = await fetch(`/api/vehicle/data?${params}`); + const data = await response.json(); + + if (Array.isArray(data)) { + this.renderVehicleData(data); + document.getElementById('data-count').textContent = `共 ${data.length} 条数据`; + } else { + this.showErrorInTable('数据格式错误'); + } + } catch (error) { + console.error('加载车辆数据失败:', error); + this.showErrorInTable('加载数据失败'); + } + } + + renderVehicleData(data) { + const tbody = document.getElementById('vehicle-data-body'); + + if (data.length === 0) { + tbody.innerHTML = ` + + + 暂无数据 + + + `; + return; + } + + tbody.innerHTML = data.map(item => { + const timestamp = new Date(item.timestamp).toLocaleString(); + let dataValue = item.data_value; + + try { + const parsed = JSON.parse(dataValue); + dataValue = JSON.stringify(parsed, null, 2); + } catch (e) { + // 如果不是JSON格式,保持原样 + } + + return ` + + ${item.id} + ${item.vehicle_id} + ${item.vehicle_vin || '-'} + ${item.data_type} + +
    ${dataValue}
    + + ${timestamp} + + + + + `; + }).join(''); + } + + showErrorInTable(message) { + const tbody = document.getElementById('vehicle-data-body'); + tbody.innerHTML = ` + + + ${message} + + + `; + } + + async initSampleData() { + if (!confirm('确定要初始化示例车辆数据吗?这将会添加一些测试数据。')) { + return; + } + + try { + const response = await fetch('/api/vehicle/init-sample-data', { method: 'POST' }); + const data = await response.json(); + + if (data.success) { + if (window.showToast) { + window.showToast('示例数据初始化成功', 'success'); + } + this.loadVehicleData(); + } else { + if (window.showToast) { + window.showToast(data.message || '初始化失败', 'error'); + } + } + } catch (error) { + console.error('初始化示例数据失败:', error); + if (window.showToast) { + window.showToast('网络错误', 'error'); + } + } + } + + showAddDataModal() { + const modal = new bootstrap.Modal(document.getElementById('addDataModal')); + modal.show(); + } + + async saveVehicleData() { + const form = document.getElementById('add-data-form'); + const formData = new FormData(form); + + const data = { + vehicle_id: formData.get('vehicle_id'), + vehicle_vin: formData.get('vehicle_vin') || null, + data_type: formData.get('data_type'), + data_value: formData.get('data_value') + }; + + // 验证JSON格式 + try { + JSON.parse(data.data_value); + } catch (e) { + if (window.showToast) { + window.showToast('数据内容必须是有效的JSON格式', 'error'); + } + return; + } + + try { + const response = await fetch('/api/vehicle/data', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(data) + }); + + const result = await response.json(); + + if (result.success) { + if (window.showToast) { + window.showToast('数据添加成功', 'success'); + } + + // 关闭模态框 + const modal = bootstrap.Modal.getInstance(document.getElementById('addDataModal')); + modal.hide(); + + // 清空表单 + form.reset(); + + // 重新加载数据 + this.loadVehicleData(); + } else { + if (window.showToast) { + window.showToast(result.message || '添加失败', 'error'); + } + } + } catch (error) { + console.error('保存数据失败:', error); + if (window.showToast) { + window.showToast('网络错误', 'error'); + } + } + } + + showError(error) { + this.container.innerHTML = ` +
    +
    +
    +
    + +

    页面加载失败

    +

    ${error.message || '未知错误'}

    + +
    +
    +
    +
    + `; + } +} + +// 全局函数,用于查看数据详情 +window.showDataDetails = function(id) { + // 这里可以实现查看详细数据的功能 + console.log('查看数据详情:', id); + if (window.showToast) { + window.showToast('详情查看功能开发中', 'info'); + } +}; diff --git a/src/web/static/js/pages/workorders.js b/src/web/static/js/pages/workorders.js new file mode 100644 index 0000000..2a58516 --- /dev/null +++ b/src/web/static/js/pages/workorders.js @@ -0,0 +1,329 @@ +/** + * 工单管理页面组件 + */ + +export default class WorkOrders { + constructor(container, route) { + this.container = container; + this.route = route; + this.currentPage = 1; + this.perPage = 20; + this.currentStatus = 'all'; + this.searchQuery = ''; + this.init(); + } + + async init() { + try { + this.render(); + this.bindEvents(); + await this.loadWorkOrders(); + } catch (error) { + console.error('WorkOrders init error:', error); + this.showError(error); + } + } + + render() { + this.container.innerHTML = ` +
    + + +
    + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + +
    +
    +
    工单列表
    +
    共 0 个工单
    +
    +
    +
    + + + + + + + + + + + + + + + + + +
    ID标题类别优先级状态创建时间操作
    + 加载中... +
    +
    +
    +
    + + + +
    +
    + `; + } + + bindEvents() { + // 状态筛选 + document.getElementById('status-filter').addEventListener('change', () => { + this.currentStatus = document.getElementById('status-filter').value; + this.currentPage = 1; + this.loadWorkOrders(); + }); + + // 搜索 + document.getElementById('search-btn').addEventListener('click', () => { + this.searchQuery = document.getElementById('search-input').value.trim(); + this.currentPage = 1; + this.loadWorkOrders(); + }); + + document.getElementById('search-input').addEventListener('keypress', (e) => { + if (e.key === 'Enter') { + document.getElementById('search-btn').click(); + } + }); + + // 新建工单 + document.getElementById('create-workorder-btn').addEventListener('click', () => { + this.showCreateWorkOrderModal(); + }); + } + + async loadWorkOrders() { + try { + const params = new URLSearchParams({ + page: this.currentPage, + per_page: this.perPage, + status: this.currentStatus, + search: this.searchQuery + }); + + const response = await fetch(`/api/workorders?${params}`); + const data = await response.json(); + + if (response.ok && data.success) { + this.renderWorkOrders(data.workorders || []); + this.renderPagination(data.pagination || {}); + document.getElementById('workorder-count').textContent = `共 ${data.total || 0} 个工单`; + } else { + this.showErrorInTable(data.message || '加载工单失败'); + } + } catch (error) { + console.error('加载工单失败:', error); + this.showErrorInTable('网络错误'); + } + } + + renderWorkOrders(workorders) { + const tbody = document.getElementById('workorders-tbody'); + + if (workorders.length === 0) { + tbody.innerHTML = ` + + + 暂无工单 + + + `; + return; + } + + tbody.innerHTML = workorders.map(workorder => { + const statusBadge = this.getStatusBadge(workorder.status); + const priorityBadge = this.getPriorityBadge(workorder.priority); + const createTime = new Date(workorder.created_at).toLocaleString(); + + return ` + + ${workorder.order_id || workorder.id} + +
    ${workorder.title}
    + ${workorder.description?.substring(0, 50) || ''}... + + ${workorder.category || '未分类'} + ${priorityBadge} + ${statusBadge} + ${createTime} + +
    + + + +
    + + + `; + }).join(''); + } + + renderPagination(pagination) { + const nav = document.getElementById('pagination-nav'); + const list = document.getElementById('pagination-list'); + + if (!pagination || pagination.total_pages <= 1) { + nav.style.display = 'none'; + return; + } + + nav.style.display = 'block'; + + let html = ''; + + // 上一页 + if (pagination.has_prev) { + html += `
  • 上一页
  • `; + } + + // 页码 + for (let i = Math.max(1, pagination.page - 2); i <= Math.min(pagination.total_pages, pagination.page + 2); i++) { + const activeClass = i === pagination.page ? 'active' : ''; + html += `
  • ${i}
  • `; + } + + // 下一页 + if (pagination.has_next) { + html += `
  • 下一页
  • `; + } + + list.innerHTML = html; + } + + getStatusBadge(status) { + const statusMap = { + 'open': '待处理', + 'in_progress': '处理中', + 'resolved': '已解决', + 'closed': '已关闭' + }; + return statusMap[status] || `${status}`; + } + + getPriorityBadge(priority) { + const priorityMap = { + 'low': '', + 'medium': '', + 'high': '', + 'urgent': '紧急' + }; + return priorityMap[priority] || `${priority}`; + } + + showErrorInTable(message) { + const tbody = document.getElementById('workorders-tbody'); + tbody.innerHTML = ` + + + ${message} + + + `; + } + + showCreateWorkOrderModal() { + // 这里应该显示创建工单的模态框 + if (window.showToast) { + window.showToast('创建工单功能开发中', 'info'); + } + } + + showError(error) { + this.container.innerHTML = ` +
    +
    +
    +
    + +

    页面加载失败

    +

    ${error.message || '未知错误'}

    + +
    +
    +
    +
    + `; + } +} + +// 全局函数供表格操作使用 +window.viewWorkOrder = function(id) { + if (window.showToast) { + window.showToast(`查看工单 ${id} 功能开发中`, 'info'); + } +}; + +window.editWorkOrder = function(id) { + if (window.showToast) { + window.showToast(`编辑工单 ${id} 功能开发中`, 'info'); + } +}; + +window.deleteWorkOrder = function(id) { + if (confirm(`确定要删除工单 ${id} 吗?`)) { + if (window.showToast) { + window.showToast('删除功能开发中', 'info'); + } + } +}; + +window.changePage = function(page) { + // 重新加载当前页面实例 + const event = new CustomEvent('changePage', { detail: { page } }); + document.dispatchEvent(event); +}; \ No newline at end of file diff --git a/src/web/static/js/services/api.js b/src/web/static/js/services/api.js new file mode 100644 index 0000000..8def917 --- /dev/null +++ b/src/web/static/js/services/api.js @@ -0,0 +1,160 @@ +/** + * 统一API服务 + * 提供所有API调用的统一接口 + */ + +class ApiService { + constructor() { + this.baseURL = ''; + this.defaultTimeout = 30000; // 30秒超时 + } + + async request(endpoint, options = {}) { + const url = `${this.baseURL}${endpoint}`; + const config = { + headers: { + 'Content-Type': 'application/json', + ...options.headers + }, + timeout: options.timeout || this.defaultTimeout, + ...options + }; + + try { + const response = await fetch(url, config); + const data = await response.json(); + + if (!response.ok) { + throw new Error(data.error || `HTTP ${response.status}: ${response.statusText}`); + } + + return data; + } catch (error) { + console.error(`API请求失败: ${endpoint}`, error); + throw error; + } + } + + // 健康检查相关 + async getHealth() { + return this.request('/api/health'); + } + + // 预警相关 + async getAlerts() { + return this.request('/api/alerts'); + } + + async createAlert(alertData) { + return this.request('/api/alerts', { + method: 'POST', + body: JSON.stringify(alertData) + }); + } + + async updateAlert(alertId, alertData) { + return this.request(`/api/alerts/${alertId}`, { + method: 'PUT', + body: JSON.stringify(alertData) + }); + } + + async deleteAlert(alertId) { + return this.request(`/api/alerts/${alertId}`, { + method: 'DELETE' + }); + } + + // 规则相关 + async getRules() { + return this.request('/api/rules'); + } + + async createRule(ruleData) { + return this.request('/api/rules', { + method: 'POST', + body: JSON.stringify(ruleData) + }); + } + + async updateRule(ruleId, ruleData) { + return this.request(`/api/rules/${ruleId}`, { + method: 'PUT', + body: JSON.stringify(ruleData) + }); + } + + async deleteRule(ruleId) { + return this.request(`/api/rules/${ruleId}`, { + method: 'DELETE' + }); + } + + // 监控相关 + async getMonitorStatus() { + return this.request('/api/monitor/status'); + } + + async startMonitoring() { + return this.request('/api/monitor/start', { + method: 'POST' + }); + } + + async stopMonitoring() { + return this.request('/api/monitor/stop', { + method: 'POST' + }); + } + + // Agent相关 + async getAgentStatus() { + return this.request('/api/agent/status'); + } + + async toggleAgent(enabled) { + return this.request('/api/agent/toggle', { + method: 'POST', + body: JSON.stringify({ enabled }) + }); + } + + async getAgentHistory(limit = 50) { + return this.request(`/api/agent/action-history?limit=${limit}`); + } + + // 车辆数据相关 + async getVehicleData(params = {}) { + const queryString = new URLSearchParams(params).toString(); + return this.request(`/api/vehicle/data?${queryString}`); + } + + async addVehicleData(data) { + return this.request('/api/vehicle/data', { + method: 'POST', + body: JSON.stringify(data) + }); + } + + // 对话相关 + async createChatSession(data) { + return this.request('/api/chat/session', { + method: 'POST', + body: JSON.stringify(data) + }); + } + + async sendChatMessage(data) { + return this.request('/api/chat/message', { + method: 'POST', + body: JSON.stringify(data) + }); + } + + async getChatHistory(sessionId) { + return this.request(`/api/chat/history/${sessionId}`); + } +} + +// 创建全局API服务实例 +const apiService = new ApiService(); diff --git a/src/web/static/manifest.json b/src/web/static/manifest.json new file mode 100644 index 0000000..dd94375 --- /dev/null +++ b/src/web/static/manifest.json @@ -0,0 +1,77 @@ +{ + "name": "TSP智能助手", + "short_name": "TSP助手", + "description": "基于大语言模型的智能客服系统", + "start_url": "/", + "display": "standalone", + "background_color": "#ffffff", + "theme_color": "#007bff", + "orientation": "portrait-primary", + "icons": [ + { + "src": "/static/images/icon-72.png", + "sizes": "72x72", + "type": "image/png" + }, + { + "src": "/static/images/icon-96.png", + "sizes": "96x96", + "type": "image/png" + }, + { + "src": "/static/images/icon-128.png", + "sizes": "128x128", + "type": "image/png" + }, + { + "src": "/static/images/icon-144.png", + "sizes": "144x144", + "type": "image/png" + }, + { + "src": "/static/images/icon-152.png", + "sizes": "152x152", + "type": "image/png" + }, + { + "src": "/static/images/icon-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/static/images/icon-384.png", + "sizes": "384x384", + "type": "image/png" + }, + { + "src": "/static/images/icon-512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "shortcuts": [ + { + "name": "仪表板", + "short_name": "仪表板", + "description": "查看系统概览", + "url": "/dashboard", + "icons": [{ "src": "/static/images/icon-96.png", "sizes": "96x96" }] + }, + { + "name": "工单管理", + "short_name": "工单", + "description": "管理工单", + "url": "/workorders", + "icons": [{ "src": "/static/images/icon-96.png", "sizes": "96x96" }] + }, + { + "name": "智能对话", + "short_name": "对话", + "description": "AI智能对话", + "url": "/chat", + "icons": [{ "src": "/static/images/icon-96.png", "sizes": "96x96" }] + } + ], + "categories": ["productivity", "business", "utilities"] +} \ No newline at end of file diff --git a/src/web/static/sw.js b/src/web/static/sw.js new file mode 100644 index 0000000..bddf329 --- /dev/null +++ b/src/web/static/sw.js @@ -0,0 +1,93 @@ +/** + * Service Worker + */ + +const CACHE_NAME = 'tsp-assistant-v1.0.0'; +const urlsToCache = [ + '/', + '/static/css/main.css', + '/static/js/main.js', + '/static/js/core/utils.js', + '/static/js/core/api.js', + '/static/js/core/store.js', + '/static/js/core/websocket.js', + '/static/js/core/router.js', + '/static/js/components/navbar.js', + '/static/js/components/sidebar.js', + '/static/js/components/modal.js', + '/static/js/pages/dashboard.js', + '/static/js/pages/alerts.js', + '/static/js/pages/workorders.js', + '/static/js/pages/knowledge.js', + '/static/js/pages/chat.js', + '/static/js/pages/monitoring.js', + '/static/js/pages/settings.js' +]; + +// 安装事件 +self.addEventListener('install', (event) => { + event.waitUntil( + caches.open(CACHE_NAME) + .then((cache) => { + return cache.addAll(urlsToCache); + }) + ); +}); + +// 激活事件 +self.addEventListener('activate', (event) => { + event.waitUntil( + caches.keys().then((cacheNames) => { + return Promise.all( + cacheNames.map((cacheName) => { + if (cacheName !== CACHE_NAME) { + return caches.delete(cacheName); + } + }) + ); + }) + ); +}); + +// 请求拦截 +self.addEventListener('fetch', (event) => { + // 只缓存GET请求 + if (event.request.method !== 'GET') { + return; + } + + // 不缓存API请求 + if (event.request.url.startsWith('/api/')) { + return; + } + + event.respondWith( + caches.match(event.request) + .then((response) => { + // 缓存命中,返回缓存的资源 + if (response) { + return response; + } + + // 缓存未命中,发起网络请求 + return fetch(event.request).then( + (response) => { + // 检查是否是有效响应 + if (!response || response.status !== 200 || response.type !== 'basic') { + return response; + } + + // 克隆响应,因为响应是流,只能使用一次 + const responseToCache = response.clone(); + + caches.open(CACHE_NAME) + .then((cache) => { + cache.put(event.request, responseToCache); + }); + + return response; + } + ); + }) + ); +}); \ No newline at end of file diff --git a/src/web/templates/chat.html b/src/web/templates/chat.html index 7c0e2ac..e46166b 100644 --- a/src/web/templates/chat.html +++ b/src/web/templates/chat.html @@ -179,50 +179,6 @@ - - -
    @@ -371,7 +327,6 @@
    - diff --git a/src/web/templates/chat_http.html b/src/web/templates/chat_http.html index 7b0ea8c..c8cbf95 100644 --- a/src/web/templates/chat_http.html +++ b/src/web/templates/chat_http.html @@ -179,50 +179,6 @@ - - -
    @@ -371,7 +327,6 @@
    - diff --git a/src/web/templates/dashboard.html b/src/web/templates/dashboard.html index 6f76924..da4b558 100644 --- a/src/web/templates/dashboard.html +++ b/src/web/templates/dashboard.html @@ -387,11 +387,11 @@ 控制面板
    - +
    - +
    - +
    - +
    快速操作
    @@ -601,7 +601,7 @@
    - +
    会话信息
    @@ -611,7 +611,7 @@
    - +
    @@ -625,7 +625,7 @@
    - +
    @@ -633,10 +633,10 @@

    请点击"开始对话"按钮开始聊天

    - +
    -
    - +
    - +
    - +
    对话记忆
    @@ -2230,13 +2230,13 @@ 请先下载模板文件,按照模板格式填写工单信息,然后上传Excel文件进行导入。
    - +
    支持 .xlsx 和 .xls 格式,文件大小不超过16MB
    - +
    Excel文件列名说明: @@ -2301,7 +2301,7 @@
    - +
    @@ -2311,7 +2311,7 @@ 正在导入工单...
    - +
    @@ -2472,7 +2472,19 @@ - + + + + + + + + + + + + + diff --git a/src/web/templates/index.html b/src/web/templates/index.html index d3899bc..ceb2d86 100644 --- a/src/web/templates/index.html +++ b/src/web/templates/index.html @@ -12,43 +12,14 @@ @@ -679,7 +650,6 @@ - diff --git a/src/web/websocket_server.py b/src/web/websocket_server.py index 425cec8..6314f22 100644 --- a/src/web/websocket_server.py +++ b/src/web/websocket_server.py @@ -1,4 +1,3 @@ - # -*- coding: utf-8 -*- """ WebSocket实时通信服务器 @@ -19,30 +18,30 @@ logger = logging.getLogger(__name__) class WebSocketServer: """WebSocket服务器""" - + def __init__(self, host: str = "localhost", port: int = 8765): self.host = host self.port = port self.chat_manager = RealtimeChatManager() self.connected_clients: Set[WebSocketServerProtocol] = set() - + async def register_client(self, websocket: WebSocketServerProtocol): """注册客户端""" self.connected_clients.add(websocket) logger.info(f"客户端连接: {websocket.remote_address}") - + async def unregister_client(self, websocket: WebSocketServerProtocol): """注销客户端""" self.connected_clients.discard(websocket) logger.info(f"客户端断开: {websocket.remote_address}") - + async def handle_message(self, websocket: WebSocketServerProtocol, message: str): """处理客户端消息""" try: data = json.loads(message) message_type = data.get("type") message_id = data.get("messageId") # 获取消息ID - + if message_type == "create_session": await self._handle_create_session(websocket, data, message_id) elif message_type == "send_message": @@ -57,77 +56,77 @@ class WebSocketServer: await self._handle_end_session(websocket, data, message_id) else: await self._send_error(websocket, "未知消息类型", message_id) - + except json.JSONDecodeError: await self._send_error(websocket, "JSON格式错误") except Exception as e: logger.error(f"处理消息失败: {e}") await self._send_error(websocket, f"处理消息失败: {str(e)}") - + async def _handle_create_session(self, websocket: WebSocketServerProtocol, data: Dict, message_id: str = None): """处理创建会话请求""" user_id = data.get("user_id", "anonymous") work_order_id = data.get("work_order_id") - + session_id = self.chat_manager.create_session(user_id, work_order_id) - + response = { "type": "session_created", "session_id": session_id, "timestamp": datetime.now().isoformat() } - + if message_id: response["messageId"] = message_id - + await websocket.send(json.dumps(response, ensure_ascii=False)) - + async def _handle_send_message(self, websocket: WebSocketServerProtocol, data: Dict, message_id: str = None): """处理发送消息请求""" session_id = data.get("session_id") message = data.get("message") - + if not session_id or not message: await self._send_error(websocket, "缺少必要参数", message_id) return - + # 处理消息 result = self.chat_manager.process_message(session_id, message) - + response = { "type": "message_response", "session_id": session_id, "result": result, "timestamp": datetime.now().isoformat() } - + if message_id: response["messageId"] = message_id - + await websocket.send(json.dumps(response, ensure_ascii=False)) - + async def _handle_get_history(self, websocket: WebSocketServerProtocol, data: Dict, message_id: str = None): """处理获取历史记录请求""" session_id = data.get("session_id") - + if not session_id: await self._send_error(websocket, "缺少会话ID", message_id) return - + history = self.chat_manager.get_session_history(session_id) - + response = { "type": "history_response", "session_id": session_id, "history": history, "timestamp": datetime.now().isoformat() } - + if message_id: response["messageId"] = message_id - + await websocket.send(json.dumps(response, ensure_ascii=False)) - + async def _handle_create_work_order(self, websocket: WebSocketServerProtocol, data: Dict, message_id: str = None): """处理创建工单请求""" session_id = data.get("session_id") @@ -135,69 +134,69 @@ class WebSocketServer: description = data.get("description") category = data.get("category", "技术问题") priority = data.get("priority", "medium") - + if not session_id or not title or not description: await self._send_error(websocket, "缺少必要参数", message_id) return - + result = self.chat_manager.create_work_order(session_id, title, description, category, priority) - + response = { "type": "work_order_created", "session_id": session_id, "result": result, "timestamp": datetime.now().isoformat() } - + if message_id: response["messageId"] = message_id - + await websocket.send(json.dumps(response, ensure_ascii=False)) - + async def _handle_get_work_order_status(self, websocket: WebSocketServerProtocol, data: Dict, message_id: str = None): """处理获取工单状态请求""" work_order_id = data.get("work_order_id") - + if not work_order_id: await self._send_error(websocket, "缺少工单ID", message_id) return - + result = self.chat_manager.get_work_order_status(work_order_id) - + response = { "type": "work_order_status", "work_order_id": work_order_id, "result": result, "timestamp": datetime.now().isoformat() } - + if message_id: response["messageId"] = message_id - + await websocket.send(json.dumps(response, ensure_ascii=False)) - + async def _handle_end_session(self, websocket: WebSocketServerProtocol, data: Dict, message_id: str = None): """处理结束会话请求""" session_id = data.get("session_id") - + if not session_id: await self._send_error(websocket, "缺少会话ID", message_id) return - + success = self.chat_manager.end_session(session_id) - + response = { "type": "session_ended", "session_id": session_id, "success": success, "timestamp": datetime.now().isoformat() } - + if message_id: response["messageId"] = message_id - + await websocket.send(json.dumps(response, ensure_ascii=False)) - + async def _send_error(self, websocket: WebSocketServerProtocol, error_message: str, message_id: str = None): """发送错误消息""" response = { @@ -205,33 +204,29 @@ class WebSocketServer: "message": error_message, "timestamp": datetime.now().isoformat() } - + if message_id: response["messageId"] = message_id - + await websocket.send(json.dumps(response, ensure_ascii=False)) - + async def handle_client(self, websocket: WebSocketServerProtocol, path: str): """处理客户端连接""" - # 检查连接头(如果可用) - try: - if hasattr(websocket, 'request_headers'): - headers = websocket.request_headers - connection = headers.get("Connection", "").lower() - - # 处理不同的连接头格式 - if "upgrade" not in connection and "keep-alive" in connection: - logger.warning(f"收到非标准连接头: {connection}") - # 对于keep-alive连接头,我们仍然接受连接 - elif "upgrade" not in connection: - logger.warning(f"连接头不包含upgrade: {connection}") - # 在websockets 15.x中,连接已经在serve时验证,所以这里只记录警告 - except AttributeError: - # websockets 15.x版本可能没有request_headers属性,跳过检查 - pass - + # 检查连接头 + headers = websocket.request_headers + connection = headers.get("Connection", "").lower() + + # 处理不同的连接头格式 + if "upgrade" not in connection and "keep-alive" in connection: + logger.warning(f"收到非标准连接头: {connection}") + # 对于keep-alive连接头,我们仍然接受连接 + elif "upgrade" not in connection: + logger.warning(f"连接头不包含upgrade: {connection}") + await websocket.close(code=1002, reason="Invalid connection header") + return + await self.register_client(websocket) - + try: async for message in websocket: await self.handle_message(websocket, message) @@ -241,30 +236,44 @@ class WebSocketServer: logger.error(f"WebSocket连接错误: {e}") finally: await self.unregister_client(websocket) - + async def start_server(self): """启动WebSocket服务器""" logger.info(f"启动WebSocket服务器: ws://{self.host}:{self.port}") - + # 添加CORS支持 - async def handle_client_with_cors(websocket: WebSocketServerProtocol, path: str = None): - # CORS处理:websockets库默认允许所有来源连接 - # 如果需要限制,可以在serve时使用additional_headers参数 - await self.handle_client(websocket, path or "") - + async def handle_client_with_cors(websocket: WebSocketServerProtocol): + # 获取path,websockets在提供process_request时,不会将path传递给handler + path = websocket.path + # 设置CORS头 + if websocket.request_headers.get("Origin"): + # 允许跨域连接 + pass + await self.handle_client(websocket, path) + async with websockets.serve( - handle_client_with_cors, - self.host, - self.port + handle_client_with_cors, + self.host, + self.port, + # 添加额外的服务器选项 + process_request=self._process_request ): await asyncio.Future() # 保持服务器运行 - - def _process_request(self, path, request): + + def _process_request(self, path, request_headers): """处理HTTP请求,支持CORS""" # 检查是否是WebSocket升级请求 - if request.headers.get("Upgrade", "").lower() == "websocket": + # request_headers 可能是 Headers 对象或 Request 对象 + if hasattr(request_headers, 'get'): + upgrade_header = request_headers.get("Upgrade", "").lower() + elif hasattr(request_headers, 'headers'): + upgrade_header = request_headers.headers.get("Upgrade", "").lower() + else: + upgrade_header = "" + + if upgrade_header == "websocket": return None # 允许WebSocket连接 - + # 对于非WebSocket请求,返回简单的HTML页面 return ( 200, @@ -283,7 +292,7 @@ class WebSocketServer: """ ) - + def run(self): """运行服务器""" asyncio.run(self.start_server()) @@ -291,7 +300,7 @@ class WebSocketServer: if __name__ == "__main__": # 设置日志 logging.basicConfig(level=logging.INFO) - + # 启动服务器 server = WebSocketServer() server.run() diff --git a/start_dashboard.py b/start_dashboard.py index b19ef58..b9fab09 100644 --- a/start_dashboard.py +++ b/start_dashboard.py @@ -33,6 +33,20 @@ def start_websocket_server(): except Exception as e: print(f"WebSocket服务器启动失败: {e}") +def check_database_connection(): + """检查数据库连接""" + try: + from src.core.database import db_manager + if db_manager.check_connection(): + print("✓ 数据库连接正常") + return True + else: + print("✗ 数据库连接失败,请检查数据库配置和网络连接。") + return False + except Exception as e: + print(f"✗ 数据库连接检查出错: {e}") + return False + def main(): """主函数""" print("=" * 60) @@ -40,21 +54,27 @@ def main(): print("=" * 60) print(f"启动时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") print() - + # 设置日志 setup_logging() logger = logging.getLogger(__name__) - + try: # 检查必要目录 os.makedirs('logs', exist_ok=True) os.makedirs('data', exist_ok=True) - + logger.info("正在启动TSP智能助手综合管理平台...") - + + # 检查数据库连接 + if not check_database_connection(): + logger.error("数据库连接失败,退出启动") + print("请根据日志检查数据库配置和网络连接。") + sys.exit(1) # 数据库连接失败时直接退出 + # 跳过系统检查,直接启动(避免重复初始化) logger.info("跳过系统检查,直接启动服务...") - + # 导入并启动Flask应用 from src.web.app import app diff --git a/test_git_push.bat b/test_git_push.bat deleted file mode 100644 index a1722c5..0000000 --- a/test_git_push.bat +++ /dev/null @@ -1,79 +0,0 @@ -@echo off -chcp 65001 >nul -setlocal enabledelayedexpansion - -echo ======================================== -echo Git推送测试脚本 -echo ======================================== -echo. - -:: 检查Git状态 -echo [1] 检查Git状态... -git status --porcelain >nul 2>&1 -if %errorlevel% neq 0 ( - echo Git未初始化 - pause - exit /b 1 -) -echo Git状态正常 -echo. - -:: 获取当前分支 -echo [2] 获取当前分支... -set current_branch= -for /f "tokens=*" %%b in ('git branch --show-current 2^>nul') do set current_branch=%%b - -if "!current_branch!"=="" ( - echo 无法获取当前分支,使用默认分支main - set current_branch=main -) else ( - echo 当前分支: !current_branch! -) -echo. - -:: 检查远程仓库 -echo [3] 检查远程仓库... -git remote -v -if %errorlevel% neq 0 ( - echo 未配置远程仓库 - pause - exit /b 1 -) -echo. - -:: 尝试推送 -echo [4] 尝试推送到远程... -echo 分支: !current_branch! -echo. - -git push origin !current_branch! 2>&1 -if %errorlevel% equ 0 ( - echo. - echo 推送成功! -) else ( - echo. - echo 推送失败 - echo. - echo 可能的原因: - echo 1. 远程分支不存在,尝试设置上游... - git push -u origin !current_branch! 2>&1 - if %errorlevel% equ 0 ( - echo 推送成功(已设置上游)! - ) else ( - echo 推送仍然失败 - echo. - echo 请检查: - echo - 网络连接 - echo - 认证配置(SSH密钥或Token) - echo - 远程仓库地址 - pause - exit /b 1 - ) -) - -echo. -echo ======================================== -echo 测试完成 -echo ======================================== -pause - diff --git a/test_mysql_connection.py b/test_mysql_connection.py deleted file mode 100644 index 344ebb9..0000000 --- a/test_mysql_connection.py +++ /dev/null @@ -1,130 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -MySQL连接诊断工具 -""" - -import socket -import sys -import os -from urllib.parse import urlparse - -# 添加项目路径以导入编码工具 -sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) - -try: - from src.utils.encoding_helper import setup_utf8_output, safe_print - setup_utf8_output() -except ImportError: - # 如果导入失败,使用本地实现 - import io - if sys.platform == 'win32': - try: - sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace') - sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace') - os.system('chcp 65001 >nul 2>&1') - except: - pass - safe_print = print - -def test_port(host, port, timeout=5): - """测试端口是否开放""" - try: - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.settimeout(timeout) - result = sock.connect_ex((host, port)) - sock.close() - return result == 0 - except Exception as e: - print(f"端口测试异常: {e}") - return False - -def test_mysql_connection(): - """测试MySQL连接""" - # 从配置中提取连接信息 - db_url = "mysql+pymysql://tsp_assistant:123456@jeason.online/tsp_assistant?charset=utf8mb4" - - parsed = urlparse(db_url.replace("mysql+pymysql://", "http://")) - host = parsed.hostname - port = parsed.port or 3306 - - # 使用安全的UTF-8输出 - safe_print("=" * 60) - safe_print("MySQL连接诊断工具") - safe_print("=" * 60) - safe_print(f"主机: {host}") - safe_print(f"端口: {port}") - safe_print() - - # 1. 测试网络连通性 - safe_print("[1] 测试网络连通性 (Ping)...") - try: - import subprocess - result = subprocess.run( - ["ping", "-n", "2", host], - capture_output=True, - text=True, - timeout=10 - ) - if "TTL" in result.stdout or "TTL" in result.stderr: - safe_print("[OK] 网络连通正常") - else: - safe_print("[X] 网络不通") - except Exception as e: - safe_print(f"[!] Ping测试失败: {e}") - safe_print() - - # 2. 测试端口是否开放 - safe_print(f"[2] 测试端口 {port} 是否开放...") - if test_port(host, port, timeout=10): - safe_print(f"[OK] 端口 {port} 开放") - else: - safe_print(f"[X] 端口 {port} 无法连接") - safe_print() - safe_print("可能的原因:") - safe_print(" 1. MySQL服务器防火墙未开放3306端口") - safe_print(" 2. MySQL配置只允许localhost连接") - safe_print(" 3. 云服务商安全组规则阻止了3306端口") - safe_print(" 4. MySQL服务未启动") - safe_print() - safe_print("解决方案:") - safe_print(" 1. 检查MySQL服务器防火墙配置:") - safe_print(" - Linux: sudo ufw allow 3306/tcp") - safe_print(" - Windows: 在防火墙中添加入站规则") - safe_print(" 2. 检查MySQL配置文件 (my.cnf 或 my.ini):") - safe_print(" - 确保 bind-address = 0.0.0.0 (不是127.0.0.1)") - safe_print(" 3. 检查云服务商安全组:") - safe_print(" - 添加规则允许3306端口入站") - safe_print(" 4. 使用SSH隧道连接:") - safe_print(" ssh -L 3306:localhost:3306 user@jeason.online") - safe_print() - - # 3. 尝试使用PyMySQL连接 - safe_print("[3] 尝试使用PyMySQL连接...") - try: - import pymysql - connection = pymysql.connect( - host=host, - port=port, - user="tsp_assistant", - password="123456", - database="tsp_assistant", - connect_timeout=10, - read_timeout=10, - write_timeout=10 - ) - safe_print("[OK] MySQL连接成功!") - connection.close() - except Exception as e: - safe_print(f"[X] MySQL连接失败: {e}") - safe_print() - if "timed out" in str(e).lower() or "can't connect" in str(e).lower(): - safe_print("这是连接超时错误,说明端口无法访问。") - safe_print("请按照上面的解决方案检查服务器配置。") - safe_print() - - safe_print("=" * 60) - -if __name__ == "__main__": - test_mysql_connection() - diff --git a/test_navigation.py b/test_navigation.py deleted file mode 100644 index b6923ce..0000000 --- a/test_navigation.py +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -前端导航测试脚本 -测试所有页面路由是否正常工作 -""" - -import requests -import sys -import time - -def test_page_routes(base_url="http://localhost:5000"): - """测试所有页面路由""" - - # 测试的路由列表 - routes = [ - ("/", "仪表板"), - ("/dashboard", "仪表板"), - ("/alerts", "预警管理"), - ("/chat", "智能对话"), - ("/chat-http", "HTTP对话") - ] - - print("🔍 开始测试前端路由...") - print(f"📍 基础URL: {base_url}") - print("-" * 60) - - results = [] - - for route, name in routes: - try: - url = f"{base_url}{route}" - print(f"🧪 测试路由: {route} ({name})") - - # 发送请求 - response = requests.get(url, timeout=10) - - # 检查响应状态 - if response.status_code == 200: - print(f" ✅ 状态码: {response.status_code}") - - # 检查响应内容是否包含HTML - content_type = response.headers.get('Content-Type', '') - if 'text/html' in content_type: - print(f" ✅ 内容类型: {content_type}") - - # 检查是否包含导航栏 - if 'navbar' in response.text: - print(f" ✅ 导航栏: 存在") - else: - print(f" ⚠️ 导航栏: 缺失") - - # 检查页面大小 - size_kb = len(response.content) / 1024 - print(f" ✅ 页面大小: {size_kb:.1f} KB") - - results.append((route, name, "成功", response.status_code)) - else: - print(f" ❌ 内容类型错误: {content_type}") - results.append((route, name, "内容类型错误", response.status_code)) - else: - print(f" ❌ 状态码错误: {response.status_code}") - results.append((route, name, "状态码错误", response.status_code)) - - except requests.exceptions.ConnectionError: - print(f" ❌ 连接失败: 服务器未启动") - results.append((route, name, "连接失败", 0)) - break - except requests.exceptions.Timeout: - print(f" ❌ 请求超时") - results.append((route, name, "请求超时", 0)) - except Exception as e: - print(f" ❌ 未知错误: {str(e)}") - results.append((route, name, f"错误: {str(e)}", 0)) - - print() - - # 打印测试总结 - print("=" * 60) - print("📊 测试总结:") - - success_count = 0 - total_count = len(results) - - for route, name, status, code in results: - status_icon = "✅" if status == "成功" else "❌" - print(f" {status_icon} {route} ({name}): {status}") - if status == "成功": - success_count += 1 - - print() - print(f"📈 成功率: {success_count}/{total_count} ({success_count/total_count*100:.1f}%)") - - if success_count == total_count: - print("🎉 所有路由测试通过!") - return True - else: - print("⚠️ 部分路由存在问题") - return False - -if __name__ == "__main__": - print("TSP助手前端路由测试工具") - print("=" * 60) - - # 检查服务器是否运行 - base_url = "http://localhost:5000" - - # 如果提供了命令行参数,使用自定义URL - if len(sys.argv) > 1: - base_url = sys.argv[1] - - success = test_page_routes(base_url) - - if not success: - print("\n💡 解决建议:") - print("1. 确保Flask服务器已启动: python src/web/app.py") - print("2. 检查端口是否正确: 默认5000") - print("3. 检查防火墙设置") - print("4. 查看服务器日志了解详细错误信息") - - sys.exit(0 if success else 1) \ No newline at end of file diff --git a/test_refactor.py b/test_refactor.py new file mode 100644 index 0000000..aae763d --- /dev/null +++ b/test_refactor.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +测试重构后的应用 +""" + +import sys +import os + +# 添加项目路径 +sys.path.append('src') + +def test_blueprints(): + """测试蓝图注册""" + try: + from src.web.app import app + + print("✓ Flask应用导入成功") + + # 测试蓝图注册 + blueprints = list(app.blueprints.keys()) + print(f"✓ 已注册蓝图: {blueprints}") + + expected_blueprints = [ + 'alerts', 'workorders', 'conversations', 'knowledge', + 'monitoring', 'system', 'feishu_sync', 'core', 'auth', + 'agent', 'vehicle', 'analytics', 'test' + ] + + for bp in expected_blueprints: + if bp in blueprints: + print(f"✓ 蓝图 {bp} 已注册") + else: + print(f"✗ 蓝图 {bp} 未注册") + + # 测试路由 + routes = [str(rule) for rule in app.url_map.iter_rules()] + agent_routes = [r for r in routes if 'agent' in r] + vehicle_routes = [r for r in routes if 'vehicle' in r] + analytics_routes = [r for r in routes if 'analytics' in r] + + print(f"✓ Agent相关路由数量: {len(agent_routes)}") + print(f"✓ Vehicle相关路由数量: {len(vehicle_routes)}") + print(f"✓ Analytics相关路由数量: {len(analytics_routes)}") + + return True + + except Exception as e: + print(f"✗ 应用测试失败: {e}") + import traceback + traceback.print_exc() + return False + +def test_blueprint_imports(): + """测试蓝图模块导入""" + blueprints_to_test = [ + ('src.web.blueprints.agent', 'agent_bp'), + ('src.web.blueprints.vehicle', 'vehicle_bp'), + ('src.web.blueprints.analytics', 'analytics_bp'), + ('src.web.blueprints.test', 'test_bp'), + ] + + for module_name, bp_name in blueprints_to_test: + try: + module = __import__(module_name, fromlist=[bp_name]) + bp = getattr(module, bp_name) + print(f"✓ {module_name}.{bp_name} 导入成功") + except Exception as e: + print(f"✗ {module_name}.{bp_name} 导入失败: {e}") + return False + + return True + +if __name__ == '__main__': + print("开始测试重构后的应用...") + print("=" * 50) + + success = True + + print("\n1. 测试蓝图模块导入...") + success &= test_blueprint_imports() + + print("\n2. 测试Flask应用和蓝图注册...") + success &= test_blueprints() + + print("\n" + "=" * 50) + if success: + print("✓ 所有测试通过!重构成功!") + else: + print("✗ 部分测试失败,请检查代码") + sys.exit(1) diff --git a/部署更新指南.md b/部署更新指南.md deleted file mode 100644 index fc11538..0000000 --- a/部署更新指南.md +++ /dev/null @@ -1,355 +0,0 @@ -# TSP智能助手部署与更新指南 - -## 📋 目录 -- [部署策略](#部署策略) -- [版本控制](#版本控制) -- [更新方式](#更新方式) -- [环境管理](#环境管理) -- [备份与回滚](#备份与回滚) -- [监控与通知](#监控与通知) -- [最佳实践](#最佳实践) - -## 🚀 部署策略 - -### 1. 多环境部署架构 - -``` -开发环境 (Development) - ↓ 测试通过 -测试环境 (Staging) - ↓ 验证通过 -生产环境 (Production) -``` - -### 2. 环境配置 - -| 环境 | 路径 | 服务名 | 自动重启 | 用途 | -|------|------|--------|----------|------| -| development | `./dev_deploy` | 无 | 否 | 本地开发 | -| staging | `/opt/tsp_assistant_staging` | `tsp_assistant_staging` | 是 | 功能测试 | -| production | `/opt/tsp_assistant` | `tsp_assistant` | 是 | 生产服务 | - -## 🔄 版本控制 - -### 版本号规则 -- **主版本号 (Major)**: 重大功能变更,可能不兼容 -- **次版本号 (Minor)**: 新功能添加,向后兼容 -- **修订号 (Patch)**: 错误修复,向后兼容 - -### 版本管理命令 - -```bash -# 查看当前版本 -python version.py version - -# 增加版本号 -python version.py increment --type patch # 1.2.0 -> 1.2.1 -python version.py increment --type minor # 1.2.0 -> 1.3.0 -python version.py increment --type major # 1.2.0 -> 2.0.0 - -# 添加变更日志 -python version.py changelog --message "修复系统性能趋势图表显示问题" - -# 创建Git标签 -python version.py tag --message "Release v1.2.0" -``` - -## 🔧 更新方式 - -### 1. 热更新 (Hot Update) -**适用场景**: 前端文件、配置文件、非核心Python文件 -**优点**: 无需重启服务,用户体验好 -**缺点**: 有限制,不能更新核心逻辑 - -```bash -# 热更新 -python scripts/update_manager.py hot-update --source ./new_version --environment production -``` - -**支持热更新的文件**: -- `src/web/static/js/dashboard.js` -- `src/web/static/css/style.css` -- `src/web/templates/dashboard.html` -- `src/web/app.py` (部分) -- 配置文件 - -### 2. 完整更新 (Full Update) -**适用场景**: 核心逻辑变更、数据库结构变更、依赖更新 -**优点**: 完整更新,确保一致性 -**缺点**: 需要重启服务 - -```bash -# 完整更新 -python scripts/update_manager.py full-update --source ./new_version --environment production -``` - -### 3. 自动更新 (Auto Update) -**智能选择**: 优先尝试热更新,失败则进行完整更新 - -```bash -# 自动更新 -python scripts/update_manager.py auto-update --source ./new_version --environment production -``` - -## 🌍 环境管理 - -### 部署到不同环境 - -```bash -# 开发环境 -python scripts/update_manager.py auto-update --source ./new_version --environment development - -# 测试环境 -python scripts/update_manager.py auto-update --source ./new_version --environment staging - -# 生产环境 -python scripts/update_manager.py auto-update --source ./new_version --environment production -``` - -### 环境检查 - -```bash -# 检查更新可用性 -python scripts/update_manager.py check --source ./new_version --environment production -``` - -## 💾 备份与回滚 - -### 自动备份 -- 每次更新前自动创建备份 -- 备份包含应用文件和数据库 -- 备份信息记录在 `backup_info.json` - -### 手动备份 - -```bash -# 创建备份 -python scripts/update_manager.py create-backup --environment production -``` - -### 回滚操作 - -```bash -# 列出所有备份 -python scripts/update_manager.py list-backups - -# 回滚到指定备份 -python scripts/update_manager.py rollback --backup tsp_assistant_backup_20250916_163000 --environment production -``` - -### 备份信息 -每个备份包含: -- 应用文件完整副本 -- 数据库文件 -- 版本信息 -- Git提交哈希 -- 备份时间戳 - -## 📊 监控与通知 - -### 健康检查 -- 更新后自动执行健康检查 -- 检查服务是否正常启动 -- 验证API接口可用性 - -### 通知机制 -- 更新成功/失败通知 -- 回滚操作通知 -- 系统状态监控 - -## 🎯 最佳实践 - -### 1. 更新流程 - -```bash -# 1. 开发完成,提交代码 -git add . -git commit -m "feat: 添加新功能" -git push - -# 2. 更新版本号 -python version.py increment --type minor -python version.py changelog --message "添加新功能" - -# 3. 创建发布标签 -python version.py tag --message "Release v1.4.0" - -# 4. 部署到测试环境 -python scripts/update_manager.py auto-update --source . --environment staging - -# 5. 测试验证通过后,部署到生产环境 -python scripts/update_manager.py auto-update --source . --environment production -``` - -### 1.1. 飞书集成部署前准备 - -```bash -# 1. 配置飞书应用 -# - 在飞书开放平台创建企业自建应用 -# - 获取app_id和app_secret -# - 配置应用权限(读取多维表格) - -# 2. 更新配置文件 -# 编辑 config/integrations_config.json -{ - "feishu": { - "app_id": "your-app-id", - "app_secret": "your-app-secret", - "app_token": "your-app-token", - "table_id": "your-table-id", - "status": "active" - } -} - -# 3. 初始化数据库(包含新字段) -python init_database.py - -# 4. 测试飞书连接 -# 访问主仪表板的"飞书同步"标签页 -# 点击"测试连接"验证配置 -``` - -### 2. 安全更新 - -```bash -# 生产环境更新前先备份 -python scripts/update_manager.py create-backup --environment production - -# 使用自动更新(包含回滚机制) -python scripts/update_manager.py auto-update --source ./new_version --environment production -``` - -### 3. 紧急回滚 - -```bash -# 快速回滚到最新备份 -python scripts/update_manager.py rollback --backup $(python scripts/update_manager.py list-backups | head -1 | cut -d' ' -f2) --environment production -``` - -### 4. 版本管理最佳实践 - -- **开发阶段**: 使用patch版本号 -- **功能完成**: 使用minor版本号 -- **重大变更**: 使用major版本号 -- **每次发布**: 创建Git标签 -- **重要更新**: 记录详细变更日志 - -## 🛠️ 工具集成 - -### CI/CD 集成 - -```yaml -# GitHub Actions 示例 -name: Deploy TSP Assistant -on: - push: - tags: ['v*'] -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Deploy to Staging - run: | - python scripts/update_manager.py auto-update --source . --environment staging - - name: Run Tests - run: | - # 运行自动化测试 - - name: Deploy to Production - if: success() - run: | - python scripts/update_manager.py auto-update --source . --environment production -``` - -### Docker 集成 - -```dockerfile -# Dockerfile 示例 -FROM python:3.9-slim -WORKDIR /app -COPY requirements.txt . -RUN pip install -r requirements.txt -COPY . . -EXPOSE 5000 -CMD ["python", "start_dashboard.py"] -``` - -## 🚨 故障处理 - -### 常见问题 - -1. **更新失败** - - 检查依赖是否正确安装 - - 验证数据库迁移是否成功 - - 查看服务日志 - -2. **回滚失败** - - 确认备份文件完整性 - - 检查文件权限 - - 验证服务配置 - -3. **健康检查失败** - - 检查服务是否正常启动 - - 验证端口是否被占用 - - 查看应用日志 - -4. **飞书集成问题** - - 检查飞书应用权限配置 - - 验证app_token和table_id是否正确 - - 确认网络连接和API访问权限 - - 查看飞书同步日志 - -5. **数据库字段迁移失败** - - 检查数据库连接状态 - - 验证字段映射配置 - - 确认数据库权限 - - 查看数据库初始化日志 - -### 紧急处理 - -```bash -# 停止服务 -sudo systemctl stop tsp_assistant - -# 手动回滚 -sudo rm -rf /opt/tsp_assistant -sudo cp -r ./backups/tsp_assistant_backup_20250916_163000/app /opt/tsp_assistant -sudo chown -R www-data:www-data /opt/tsp_assistant -sudo systemctl start tsp_assistant -``` - -## 📝 更新记录 - -### v1.4.0 (2025-09-19) -- ✅ 飞书集成功能:支持飞书多维表格数据同步 -- ✅ 页面功能合并:飞书同步页面合并到主仪表板 -- ✅ 数据库架构优化:扩展工单表字段,支持飞书数据 -- ✅ 代码重构优化:大文件拆分,降低运行风险 -- ✅ 字段映射完善:智能映射飞书字段到本地数据库 -- ✅ 数据库初始化改进:集成字段迁移到初始化流程 - -### v1.3.0 (2025-09-17) -- ✅ 数据库架构优化:MySQL主数据库+SQLite备份系统 -- ✅ 工单详情API修复:解决数据库会话管理问题 -- ✅ 备份管理系统:自动备份MySQL数据到SQLite -- ✅ 数据库状态监控:实时监控MySQL和SQLite状态 -- ✅ 备份管理API:支持数据备份和恢复操作 - -### v1.2.0 (2025-09-16) -- ✅ 系统设置扩展:API管理、模型参数配置、端口管理 -- ✅ 真实数据分析:修复性能趋势图表显示 -- ✅ 工单AI建议功能 -- ✅ 知识库搜索优化 -- ✅ Agent管理改进 - -### v1.1.0 (2025-09-16) -- ✅ 工单AI建议功能 -- ✅ 知识库搜索优化 -- ✅ Agent管理改进 - -### v1.0.0 (2024-01-01) -- ✅ 初始版本发布 - ---- - -**注意**: 生产环境更新前请务必在测试环境验证,并确保有可用的备份。