优化:edge resolve 只调 IoT 自动结单,去掉降级卡片更新

This commit is contained in:
2026-03-27 13:16:21 +08:00
parent e6fd316036
commit 058fc0dbaf

View File

@@ -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)