From 058fc0dbaf0a858cdad146a645b36745b9fefc7d Mon Sep 17 00:00:00 2001 From: 16337 <1633794139@qq.com> Date: Fri, 27 Mar 2026 13:16:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9Aedge=20resolve=20?= =?UTF-8?q?=E5=8F=AA=E8=B0=83=20IoT=20=E8=87=AA=E5=8A=A8=E7=BB=93=E5=8D=95?= =?UTF-8?q?=EF=BC=8C=E5=8E=BB=E6=8E=89=E9=99=8D=E7=BA=A7=E5=8D=A1=E7=89=87?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/routers/edge_compat.py | 62 ++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 36 deletions(-) diff --git a/app/routers/edge_compat.py b/app/routers/edge_compat.py index df2d765..0f67d49 100644 --- a/app/routers/edge_compat.py +++ b/app/routers/edge_compat.py @@ -176,47 +176,37 @@ async def edge_device_heartbeat(request: Request, _auth=Depends(_verify_edge_tok async def _resolve_card_update(alarm_id: str, resolve_type: str): - """边缘端 resolve 后异步处理:工单自动结单 + 更新卡片""" + """边缘端 resolve 后:调 IoT 自动结单,等 sync-status 回调更新告警+卡片""" try: from app.services.work_order_client import get_work_order_client - from app.services.wechat_service import get_wechat_service from app.models import get_session, AlarmEventExt - # 工单自动结单 wo_client = get_work_order_client() - if wo_client.enabled: - db = get_session() - try: - ext = db.query(AlarmEventExt).filter( - AlarmEventExt.alarm_id == alarm_id, - AlarmEventExt.ext_type == "WORK_ORDER", - ).first() - order_id = ext.ext_data.get("order_id", "") if ext and ext.ext_data else "" - finally: - db.close() - if order_id: - remark_map = { - "person_returned": "人员回岗自动关闭", - "non_work_time": "非工作时间自动关闭", - "intrusion_cleared": "入侵消失自动关闭", - } - remark = remark_map.get(resolve_type, f"边缘端自动结单: {resolve_type}") - success = await wo_client.auto_complete_order(order_id, remark) - if success: - logger.info(f"IoT工单已自动结单,等待sync-status回调: alarm={alarm_id}, order={order_id}") - return # IoT 回调 sync-status 会更新告警+卡片 + if not wo_client.enabled: + return - # 降级:直接更新企微卡片到终态 - wechat = get_wechat_service() - if wechat.enabled: - response_code = wechat.get_response_code(alarm_id) - if response_code: - await wechat.update_alarm_card_terminal( - response_code=response_code, - user_ids=[], - alarm_id=alarm_id, - action="auto_resolve", - ) + db = get_session() + try: + ext = db.query(AlarmEventExt).filter( + AlarmEventExt.alarm_id == alarm_id, + AlarmEventExt.ext_type == "WORK_ORDER", + ).first() + order_id = ext.ext_data.get("order_id", "") if ext and ext.ext_data else "" + finally: + db.close() + + if order_id: + remark_map = { + "person_returned": "人员回岗自动关闭", + "non_work_time": "非工作时间自动关闭", + "intrusion_cleared": "入侵消失自动关闭", + } + remark = remark_map.get(resolve_type, f"边缘端自动结单: {resolve_type}") + success = await wo_client.auto_complete_order(order_id, remark) + if success: + logger.info(f"IoT工单已自动结单,等待回调: alarm={alarm_id}, order={order_id}") + else: + logger.warning(f"IoT自动结单失败: alarm={alarm_id}, order={order_id}") except Exception as e: - logger.error(f"边缘端resolve后处理失败: alarm={alarm_id}, error={e}", exc_info=True) + logger.error(f"边缘端resolve处理失败: alarm={alarm_id}, error={e}", exc_info=True)