|
|
ec5501fa3b
|
优化:日报卡片打磨细节
- 高发设备/告警热点只取 top2,名称超8字截断,防止文字溢出
- 已完成和待处理合并为一行,减少行数更紧凑
- 待处理为0时显示「✅ 全部清零」,有遗留才显示遗留数
- 误报率非0时才显示,0%不占位
- 副标题:清零时正面鼓励,有超时时⚠提醒
- 底部新增「查看详情」跳转链接
|
2026-04-03 16:48:29 +08:00 |
|
|
|
ecc5065c71
|
功能:日报支持群机器人Webhook模板卡片推送
通过群机器人 Webhook 发送 text_notice 模板卡片,视觉效果
远超纯 markdown:大号数字突出核心指标,键值对整齐排列。
新增:
- WECHAT_GROUP_ROBOT_KEY 配置(群机器人 Webhook key)
- send_webhook_template_card 方法
- _build_template_card 构建 text_notice 卡片
- emphasis_content: 昨日新增大号数字
- horizontal_content_list: 安保/保洁、已完成、待处理、
首响/完结、告警热点、高发设备(最多6条)
- sub_title_text: 需关注项或「运营良好」
- card_action: 点击跳转详情页
发送策略:优先 Webhook 模板卡片 → 降级 appchat markdown
|
2026-04-03 16:16:51 +08:00 |
|
|
|
8ff396641e
|
优化:日报面向领导视角重排版
- 去掉工单号等技术细节,超时项改为「位置(类型,已挂起X小时)」
- 待处理全部清零时显示绿色「全部清零」,有遗留时橙色警示
- 时长改为人话(8.0小时 而非 480分钟)
- 风险分布用「热点分布」,超时用「需关注」,措辞更汇报体
- 取消数等次要信息去掉,只保留领导关心的核心指标
|
2026-04-03 15:44:34 +08:00 |
|
|
|
af2b9bc996
|
优化:日报改回单条精排markdown,去掉textcard
textcard排版控制太弱,指标密集型日报挤成一坨。
改为单条markdown,分三个区块:
1. 核心数字(新增/完成/待处理/误报率)
2. 响应效率(首响/完结时长)
3. 风险分布(告警类型/区域/摄像头,仅有数据时展示)
4. 超时未处理(仅有遗留时展示)
去掉 textcard 和 news 相关代码,简化发送逻辑。
|
2026-04-03 15:26:46 +08:00 |
|
|
|
d6765f51f2
|
优化:日报改为单条文本卡片推送
|
2026-04-03 14:12:25 +08:00 |
|
|
|
30db9d8961
|
优化:日报升级为图文摘要加详情推送
|
2026-04-03 13:16:04 +08:00 |
|
|
|
bfcd3b9a35
|
修复:企微推送摄像头编码自动解析显示名称
|
2026-04-03 11:26:20 +08:00 |
|
|
|
533fe263e6
|
修复:Agent查询待处理工单始终为空
根因:list_orders 和 query_order_stats 默认按 create_time 过滤
今日范围,但待处理工单可能是昨天或更早创建的,导致全部漏掉。
修复内容:
1. 查询待处理状态工单时跳过时间范围过滤(skip_time_filter)
2. query_order_stats 额外返回 current_pending/current_assigned
表示当前所有未完成工单数(不限时间)
3. _query_orders 新增 tenant_id 过滤(从配置读取)
4. 系统提示词增加查询技巧引导 Agent 正确使用 status 参数
|
2026-04-02 15:00:36 +08:00 |
|
|
|
57df6a2704
|
修复:日报摄像头Top5显示代码而非名称
日报生成时直接读取IoT数据库的camera_name字段,该字段存的是
camera_code(如cam_2043d9aed65c),导致日报中摄像头名称
无法识别。
改为统一收集camera_id,通过camera_name_service批量调WVP API
解析真实名称,解析失败时降级使用camera_code。
|
2026-04-02 09:34:50 +08:00 |
|
|
|
88616f0940
|
优化:处理结果图片提交流程复用已上传图片
|
2026-04-01 09:09:30 +08:00 |
|
|
|
37d80e6c8b
|
调整:无通知区域时使用演示区域兜底
|
2026-03-31 18:42:01 +08:00 |
|
|
|
70a2f5b504
|
修复:手动建单优先于工单处理结果图片上传
|
2026-03-31 18:22:27 +08:00 |
|
|
|
4e03938334
|
功能:交互Agent支持图片驱动的手动工单创建流程
|
2026-03-31 18:07:41 +08:00 |
|
|
|
95c58e8b3f
|
添加 mysql-connector-python 依赖(IoT数据库连接需要)
|
2026-03-31 15:28:05 +08:00 |
|
|
|
fa1a0b96c0
|
修复:IoT数据库连接支持mysql-connector-python驱动
腾讯云MySQL需要use_pure+ssl_disabled参数才能认证通过,
当URL使用mysqlconnector驱动时自动添加connect_args
|
2026-03-31 15:15:32 +08:00 |
|
|
|
cd1ccd6912
|
清理旧Agent工具文件
删除已被 order_query.py / order_action.py 替代的旧文件:
- alarm_query.py
- alarm_action.py
- order_tools.py
|
2026-03-31 10:51:34 +08:00 |
|
|
|
63a8d5a8f2
|
告警-工单解耦:企微交互+Agent全面切换到工单驱动
Part A: 数据层
- 新增 WechatCardState 模型(order_id ↔ alarm_id 映射 + response_code)
- 新建 models_iot.py(IoT 工单只读 ORM:ops_order + security_ext + clean_ext)
- config.py 新增 IOT_DATABASE_URL 配置
Part B: 企微解耦(alarm_id → order_id)
- wechat_service: response_code 存储迁移到 wechat_card_state,集中 helper
- 卡片发送/更新方法改用 order_id,按钮 key: confirm_{order_id}
- wechat_callback: 按钮解析改 order_id,反查 alarm_id(可空)
- wechat_notify_api: send-card/sync-status 以 orderId 为主键
- yudao_aiot_alarm: 卡片操作改用 order_id,删重复 helper
Part C: Agent 工具全面改为工单驱动
- 新建 order_query.py(查 IoT ops_order,支持安保+保洁工单)
- 新建 order_action.py(操作工单状态 + 提交处理结果)
- 更新 prompts.py 为工单助手
- 更新工具注册(__init__.py)
Part D: 日报改为工单驱动
- daily_report_service 从查 alarm_event 改为查 IoT ops_order + 扩展表
- 支持安保+保洁工单统计
|
2026-03-31 10:49:42 +08:00 |
|
|
|
93148fe85b
|
增强:工单创建增加重试机制(最多2次重试)
IoT ops 服务偶发 500 异常(auto_complete 后状态污染),
添加 3s/6s 间隔重试,避免暂时性故障导致工单丢失。
|
2026-03-31 09:37:33 +08:00 |
|
|
|
9513951b1b
|
修复:企微群聊不发送告警截图
根因:_get_presigned_url 对完整 COS 永久 URL 直接原样返回,
未重新生成预签名 URL,导致私有桶的图片下载失败(403)。
修复:
1. _get_presigned_url 增加 COS URL 识别,提取 object key 重新签名
2. 新增 _extract_cos_object_key 解析两种 COS URL 格式
3. send-card 增加截图诊断日志(追踪 IoT/DB 来源和最终 URL)
4. upload_media_from_url 增加下载/上传诊断日志
|
2026-03-30 14:30:01 +08:00 |
|
|
|
342fbd87b5
|
修复:告警列表状态筛选映射错误 — handled应映射CLOSED,新增processing映射CONFIRMED
|
2026-03-30 11:31:14 +08:00 |
|
|
|
afa463ac65
|
修复:send-card 群聊通知三个问题
1. 告警告警重复:用 alarm_type_code 映射而非 IoT 的 title
2. 摄像头未知:从告警表查 device_id 获取摄像头名称
3. 截图403:从告警表取 object key 生成预签名 URL(IoT 传的永久URL无签名)
|
2026-03-30 11:17:21 +08:00 |
|
|
|
961a387957
|
修复:resolve_alarm 添加 vehicle_left 和 congestion_cleared 状态处理
违停车辆离开和拥堵消散的 resolve 事件没有匹配到对应的状态分支,
导致告警只更新了 duration_ms 但 alarm_status 没改为 CLOSED。
|
2026-03-27 15:20:01 +08:00 |
|
|
|
3a62202406
|
修复:恢复 send-card 接口,dispatched 只记录日志不发企微
|
2026-03-27 14:11:03 +08:00 |
|
|
|
058fc0dbaf
|
优化:edge resolve 只调 IoT 自动结单,去掉降级卡片更新
|
2026-03-27 13:16:21 +08:00 |
|
|
|
e6fd316036
|
重构 sync-status 接口:按状态分流处理,删除 send-card 接口
- dispatched: 发企微群聊+私发卡片(不更新告警)
- confirmed: 仅更新卡片到第二步(不更新告警)
- 终态(completed/false_alarm/auto_resolved): 更新告警+卡片
- 删除 send-card 接口和 SendCardRequest 类(企微由 dispatched 触发)
|
2026-03-27 13:12:29 +08:00 |
|
|
|
e8e075efd6
|
重构通知调度:去掉企微直发,工单创建后改告警为 CONFIRMED
- 删除企微群聊组合消息和降级卡片发送逻辑
- 删除 get_wechat_service、event_time_str 格式化等相关代码
- 工单创建成功后调用 _set_alarm_confirmed 将告警改为 CONFIRMED/HANDLING
- 新增 _set_alarm_confirmed 辅助函数
- 企微通知改由 IoT 工单回调驱动
|
2026-03-27 12:53:40 +08:00 |
|
|
|
f96d692dd9
|
修复:EdgeAlarmReport 添加 area_id 字段,告警创建时优先从顶层取 area_id
|
2026-03-27 11:09:47 +08:00 |
|
|
|
e7c9ee126f
|
移除调试代码,清理 send-card/wechat_service 调试日志和端点
|
2026-03-26 13:39:20 +08:00 |
|
|
|
0bde8c03a4
|
修复企微服务热重载后丢失初始化的问题
get_wechat_service() 增加 _initialized 检查,
未初始化时自动调用 init(settings.wechat),
避免 uvicorn 热重载后单例重建但未 init 导致 enabled=False。
|
2026-03-26 13:24:58 +08:00 |
|
|
|
9370c2f2ec
|
修复日报定时任务 MySQL 连接断开问题(BrokenPipe)
添加 pool_recycle=1800 和 pool_pre_ping=True,
防止 MySQL 长时间空闲后连接被服务端关闭导致 BrokenPipeError。
|
2026-03-26 09:08:06 +08:00 |
|
|
|
e874a35c12
|
调试:添加 IoT 回调请求详细日志,排查 body 为空问题
|
2026-03-25 17:11:25 +08:00 |
|
|
|
6fcd8f68bf
|
修复 IoT 回调 send-card/sync-status 返回 422 的问题
IoT Java 客户端发送的请求体格式不被 FastAPI Pydantic 自动解析,
改为手动解析 request body,兼容 JSON/form/query params 三种格式。
同时添加 dispatched 状态映射,记录请求日志便于调试。
|
2026-03-25 17:04:30 +08:00 |
|
|
|
3a9595de7c
|
切换到 IoT 工单驱动模式:所有状态变更由 IoT 回调驱动
1. notify_dispatch: 工单优先于卡片发送,创建成功则跳过直发卡片(等IoT回调send-card)
2. wechat_callback: IoT API 成功后直接返回,等 sync-status 回调更新告警+卡片
3. edge_compat: 启用工单自动结单,成功后等 sync-status 回调
4. yudao_aiot_alarm: 前端操作优先调 IoT 工单 API,降级直接更新卡片
5. wechat_notify_api: 修复 confirmed 的 card_action 为 None 导致卡片不更新的 bug
所有路径均保留降级逻辑:IoT 失败或工单未启用时直接处理告警+更新卡片
|
2026-03-25 15:38:52 +08:00 |
|
|
|
5a64e2fe11
|
功能:前端处理/误报后同步更新企微卡片到终态
handle_alarm 执行后,若为终态操作(CLOSED/FALSE),
异步调用 update_alarm_card_terminal 同步企微卡片按钮状态,
避免前端已处理但企微卡片按钮仍可点击的不一致问题。
|
2026-03-25 15:19:43 +08:00 |
|
|
|
adf8d63da6
|
回滚:移除告警处理图片字段,告警只记录状态
告警只需记录处理状态(已处理/误报),图片等信息在工单体系中管理。
移除 handle_image_url 字段、自动迁移和相关参数。
|
2026-03-25 15:10:40 +08:00 |
|
|
|
d623f6b340
|
修复:告警状态流转统一 — 前端处理直接结单(CLOSED),支持处理图片上传
1. handle接口状态映射:handled→CLOSED(而非CONFIRMED),ignored→FALSE
2. handle_status同步设置:handled→DONE,ignored→IGNORED
3. 新增handle_image_url字段支持处理图片存储
4. 自动迁移:启动时自动ALTER TABLE添加新列
|
2026-03-25 15:01:35 +08:00 |
|
|
|
369b70a1fa
|
放宽 openai 版本约束,兼容 langgraph 依赖
|
2026-03-25 14:36:18 +08:00 |
|
|
|
6848eaeabf
|
修复告警状态映射:CONFIRMED 应为 processing 而非 handled
CONFIRMED 表示"已确认接单/处理中",之前错误映射为 handled(已处理),
导致前端显示"已处理"但 Agent 仍能查到该工单为待处理。
|
2026-03-25 14:34:26 +08:00 |
|
|
|
5557ad053b
|
优化提示词:强制数据来源于工具,禁止编造
- 明确"所有数据必须来自工具调用结果"
- 不知道的直接说不知道,不要猜测
- 图片分析不清晰时不猜测
- 限定只回答安防相关问题
|
2026-03-25 14:21:54 +08:00 |
|
|
|
6087066a91
|
调低 temperature=0.1,减少大模型胡编乱造
涉及三处 LLM 调用:
- LangGraph Agent 对话(graph.py)
- VLM 图片分析(agent_dispatcher.py)
- VLM 告警复核(vlm_service.py)
|
2026-03-25 14:20:19 +08:00 |
|
|
|
836ced9270
|
移除 Legacy FC 模式,只保留 LangGraph
删除 USE_LANGGRAPH 开关、_legacy_chat、_legacy_execute_tool、
_get_legacy_tools 等全部旧代码,agent_dispatcher 精简为纯
LangGraph 入口适配层。
|
2026-03-25 13:56:24 +08:00 |
|
|
|
8156f54004
|
重构 Agent:引入 LangGraph StateGraph 替代手写 FC 循环
架构变更:
- 新增 app/services/agent/ 模块(state/prompts/graph/tools)
- 7 个工具从 _tool_xxx 方法提取为 @tool 装饰器函数
- 构建 assistant + ToolNode 的 ReAct 图
- agent_dispatcher.py 改为薄壳入口,支持 USE_LANGGRAPH 开关
- MemorySaver checkpoint 持久化对话(thread_id=wechat-{user_id})
- 新增依赖:langchain-core, langchain-openai, langgraph
向后兼容:
- USE_LANGGRAPH=false 可切回旧版 FC 循环
- LangGraph 初始化失败自动降级到 Legacy 模式
- 企微图片处理/VLM分析逻辑不变
|
2026-03-25 13:52:55 +08:00 |
|
|
|
d1aa14bb23
|
修复 submit_order_result 缺少告警存在性检查
LLM 传错 alarm_id 时 handle_alarm 静默返回 None,
但函数仍返回 success:true 误导用户。添加前置检查。
|
2026-03-25 12:41:47 +08:00 |
|
|
|
eb2d74bd4c
|
修复 Agent 对接 IoT 工单平台:状态同步、图片持久化、roiId 字段
1. agent_dispatcher: IoT 成功与否都更新本地告警状态,不再依赖回调同步
2. agent_dispatcher: submit_order_result 持久化图片 URL 到 alarm_event_ext
3. work_order_client: create_order 添加 roi_id/source_type 参数
4. notify_dispatch: 创建工单时传 scene_id 作为 roiId
|
2026-03-25 12:37:00 +08:00 |
|
|
|
7d4c916055
|
修复:IoT回调接口422错误,字段改为Optional兼容null值
|
2026-03-25 10:56:12 +08:00 |
|
|
|
5a7b098663
|
优化:日报增加按边缘节点分组汇总(各节点告警数、类型分布、Top设备)
|
2026-03-25 10:07:55 +08:00 |
|
|
|
50f016e9fb
|
功能:添加日报手动触发接口 POST /api/wechat/notify/daily-report
|
2026-03-25 09:21:36 +08:00 |
|
|
|
b13d86f0a6
|
文档:全面重写 README.md,反映当前项目架构
- 更新架构图:HTTP 上报替代 MQTT,新增 VLM/企微/工单/日报模块
- 补充完整 API 接口清单(边缘上报、告警管理、企微、工单等)
- 详述告警三表数据模型 + 工单/通知配置表
- 完善项目结构树(17 个 service + 11 个 router)
- 列出全部环境变量分组说明
- 描述告警处理全链路和企微交互流程
- 添加系统集成关系矩阵
|
2026-03-25 09:12:04 +08:00 |
|
|
|
2a36bd4ffc
|
功能:每日告警日报定时推送到企微群聊
- 新增 DailyReportConfig 配置(DAILY_REPORT_ENABLED/HOUR/MINUTE)
- 新增 daily_report_service:asyncio 定时调度,每日生成前一天告警汇总
- 日报内容:告警总数、环比变化、处理状态分布、类型分布、设备 Top5、平均响应时长
- lifespan 中启动/停止定时任务
|
2026-03-24 17:43:52 +08:00 |
|
|
|
5972d97ff9
|
修复:企微私聊卡片发送失败(card_action缺少url)
FC升级时删除了card_action中的url字段,但type=1要求必须提供url,
导致企微API拒绝发送个人卡片。恢复url兜底值。
|
2026-03-24 16:43:04 +08:00 |
|