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)