告警-工单解耦:企微交互+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 + 扩展表
- 支持安保+保洁工单统计
This commit is contained in:
2026-03-31 10:49:42 +08:00
parent 93148fe85b
commit 63a8d5a8f2
14 changed files with 1019 additions and 343 deletions

View File

@@ -404,13 +404,22 @@ def _get_permanent_url(snapshot_url: str) -> str:
def _save_order_id(alarm_id: str, order_id: str):
"""将工单ID保存到 alarm_event_extext_type=WORK_ORDER"""
"""将工单ID保存到 wechat_card_state + alarm_event_ext"""
db = get_session()
try:
# 写 wechat_card_stateorder_id ↔ alarm_id 映射)
from app.models import WechatCardState
card_state = WechatCardState(
order_id=str(order_id),
alarm_id=alarm_id,
)
db.merge(card_state)
# 写 alarm_event_ext保持兼容
ext = AlarmEventExt(
alarm_id=alarm_id,
ext_type="WORK_ORDER",
ext_data={"order_id": order_id},
ext_data={"order_id": str(order_id)},
)
db.add(ext)
db.commit()