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 + 扩展表
- 支持安保+保洁工单统计
22 lines
565 B
Python
22 lines
565 B
Python
"""
|
||
摄像头查询工具
|
||
"""
|
||
|
||
import json
|
||
from langchain_core.tools import tool
|
||
|
||
from .order_query import _get_camera_display_name
|
||
|
||
|
||
@tool
|
||
def query_camera(camera_id: str) -> str:
|
||
"""查询摄像头信息(名称、位置、状态等)
|
||
|
||
Args:
|
||
camera_id: 摄像头ID(device_id)
|
||
"""
|
||
name = _get_camera_display_name(camera_id)
|
||
if name and name != camera_id:
|
||
return json.dumps({"camera_id": camera_id, "name": name}, ensure_ascii=False)
|
||
return json.dumps({"error": f"未找到摄像头: {camera_id}"}, ensure_ascii=False)
|