187 lines
5.9 KiB
Python
187 lines
5.9 KiB
Python
|
|
"""
|
|||
|
|
全局术语注册中心(Single Source of Truth)
|
|||
|
|
|
|||
|
|
所有业务术语、状态映射、类型映射集中在此文件定义。
|
|||
|
|
其他模块一律从这里 import,禁止各自重复定义。
|
|||
|
|
|
|||
|
|
修改告警类型、工单状态、保洁类型等业务术语时,只需改这一个文件。
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
from enum import Enum
|
|||
|
|
from typing import Dict
|
|||
|
|
|
|||
|
|
|
|||
|
|
# ============================================================
|
|||
|
|
# 摄像头 ID 统一说明
|
|||
|
|
# ============================================================
|
|||
|
|
# 全系统的摄像头唯一标识统一叫 camera_code,格式为 cam_{hash}
|
|||
|
|
# 不同系统的字段名映射关系:
|
|||
|
|
# - security-ai-edge: camera_id → 实际是 camera_code
|
|||
|
|
# - wvp-platform: camera_code → 数据库字段就叫这个
|
|||
|
|
# - IoT 工单表: camera_id → 实际存的是 camera_code
|
|||
|
|
# - vsp-service: device_id → AlarmEvent 表,历史原因叫 device_id
|
|||
|
|
#
|
|||
|
|
# Python 代码中对外接口(API 参数、工具参数)统一使用 device_id,
|
|||
|
|
# 因为 AlarmEvent 主表和 EdgeAlarmReport schema 已用此名。
|
|||
|
|
# 内部传递和显示时,用 camera_name_service 解析为人类可读名称。
|
|||
|
|
|
|||
|
|
|
|||
|
|
# ============================================================
|
|||
|
|
# 告警类型 (alarm_type)
|
|||
|
|
# ============================================================
|
|||
|
|
class AlarmType(str, Enum):
|
|||
|
|
LEAVE_POST = "leave_post"
|
|||
|
|
INTRUSION = "intrusion"
|
|||
|
|
ILLEGAL_PARKING = "illegal_parking"
|
|||
|
|
VEHICLE_CONGESTION = "vehicle_congestion"
|
|||
|
|
|
|||
|
|
|
|||
|
|
ALARM_TYPE_NAMES: Dict[str, str] = {
|
|||
|
|
AlarmType.LEAVE_POST: "人员离岗",
|
|||
|
|
AlarmType.INTRUSION: "周界入侵",
|
|||
|
|
AlarmType.ILLEGAL_PARKING: "车辆违停",
|
|||
|
|
AlarmType.VEHICLE_CONGESTION: "车辆拥堵",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# VLM 场景下的简短名称(用于截图分析提示词,尽量精炼)
|
|||
|
|
ALARM_TYPE_SHORT_NAMES: Dict[str, str] = {
|
|||
|
|
AlarmType.LEAVE_POST: "离岗",
|
|||
|
|
AlarmType.INTRUSION: "入侵",
|
|||
|
|
AlarmType.ILLEGAL_PARKING: "违停",
|
|||
|
|
AlarmType.VEHICLE_CONGESTION: "拥堵",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_alarm_type_name(code: str) -> str:
|
|||
|
|
"""获取告警类型中文名,未知类型原样返回"""
|
|||
|
|
return ALARM_TYPE_NAMES.get(code, code)
|
|||
|
|
|
|||
|
|
|
|||
|
|
# ============================================================
|
|||
|
|
# 告警状态 (alarm_status) — vsp-service 内部使用
|
|||
|
|
# ============================================================
|
|||
|
|
class AlarmStatus(str, Enum):
|
|||
|
|
NEW = "NEW" # 新告警
|
|||
|
|
CONFIRMED = "CONFIRMED" # 已确认(已创建工单)
|
|||
|
|
FALSE = "FALSE" # 误报
|
|||
|
|
CLOSED = "CLOSED" # 已关闭
|
|||
|
|
|
|||
|
|
|
|||
|
|
ALARM_STATUS_NAMES: Dict[str, str] = {
|
|||
|
|
AlarmStatus.NEW: "待处理",
|
|||
|
|
AlarmStatus.CONFIRMED: "处理中",
|
|||
|
|
AlarmStatus.FALSE: "误报",
|
|||
|
|
AlarmStatus.CLOSED: "已关闭",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 芋道前端兼容映射(前端期望的状态值)
|
|||
|
|
ALARM_STATUS_TO_YUDAO: Dict[str, str] = {
|
|||
|
|
AlarmStatus.NEW: "pending",
|
|||
|
|
AlarmStatus.CONFIRMED: "processing",
|
|||
|
|
AlarmStatus.FALSE: "false_alarm",
|
|||
|
|
AlarmStatus.CLOSED: "completed",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
YUDAO_TO_ALARM_STATUS: Dict[str, str] = {
|
|||
|
|
v: k for k, v in ALARM_STATUS_TO_YUDAO.items()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
# ============================================================
|
|||
|
|
# 处理状态 (handle_status) — vsp-service 内部使用
|
|||
|
|
# ============================================================
|
|||
|
|
class HandleStatus(str, Enum):
|
|||
|
|
UNHANDLED = "UNHANDLED" # 未处理
|
|||
|
|
HANDLING = "HANDLING" # 处理中
|
|||
|
|
DONE = "DONE" # 已完成
|
|||
|
|
IGNORED = "IGNORED" # 已忽略
|
|||
|
|
|
|||
|
|
|
|||
|
|
HANDLE_STATUS_NAMES: Dict[str, str] = {
|
|||
|
|
HandleStatus.UNHANDLED: "未处理",
|
|||
|
|
HandleStatus.HANDLING: "处理中",
|
|||
|
|
HandleStatus.DONE: "已完成",
|
|||
|
|
HandleStatus.IGNORED: "已忽略",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
# ============================================================
|
|||
|
|
# IoT 工单状态 (order status) — 来自芋道 ops_order 表
|
|||
|
|
# ============================================================
|
|||
|
|
class OrderStatus(str, Enum):
|
|||
|
|
PENDING = "PENDING" # 待处理
|
|||
|
|
ASSIGNED = "ASSIGNED" # 已派单
|
|||
|
|
ARRIVED = "ARRIVED" # 已到岗
|
|||
|
|
PAUSED = "PAUSED" # 已暂停
|
|||
|
|
COMPLETED = "COMPLETED" # 已完成
|
|||
|
|
CANCELLED = "CANCELLED" # 已取消
|
|||
|
|
|
|||
|
|
|
|||
|
|
ORDER_STATUS_NAMES: Dict[str, str] = {
|
|||
|
|
OrderStatus.PENDING: "待处理",
|
|||
|
|
OrderStatus.ASSIGNED: "已派单",
|
|||
|
|
OrderStatus.ARRIVED: "已到岗",
|
|||
|
|
OrderStatus.PAUSED: "已暂停",
|
|||
|
|
OrderStatus.COMPLETED: "已完成",
|
|||
|
|
OrderStatus.CANCELLED: "已取消",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 未完成状态集合(用于查询"待处理"工单)
|
|||
|
|
ORDER_OPEN_STATUSES = frozenset({
|
|||
|
|
OrderStatus.PENDING, OrderStatus.ASSIGNED,
|
|||
|
|
OrderStatus.ARRIVED, OrderStatus.PAUSED,
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
|
|||
|
|
# ============================================================
|
|||
|
|
# 告警等级 (alarm_level)
|
|||
|
|
# ============================================================
|
|||
|
|
ALARM_LEVEL_NAMES: Dict[int, str] = {
|
|||
|
|
0: "紧急",
|
|||
|
|
1: "重要",
|
|||
|
|
2: "普通",
|
|||
|
|
3: "轻微",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 各算法的默认告警等级
|
|||
|
|
ALARM_TYPE_DEFAULT_LEVEL: Dict[str, int] = {
|
|||
|
|
AlarmType.INTRUSION: 1, # 重要
|
|||
|
|
AlarmType.LEAVE_POST: 2, # 普通
|
|||
|
|
AlarmType.ILLEGAL_PARKING: 2, # 普通
|
|||
|
|
AlarmType.VEHICLE_CONGESTION: 2, # 普通
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
# ============================================================
|
|||
|
|
# 工单优先级 (priority)
|
|||
|
|
# ============================================================
|
|||
|
|
PRIORITY_NAMES: Dict[int, str] = {
|
|||
|
|
0: "低",
|
|||
|
|
1: "中",
|
|||
|
|
2: "高",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
# ============================================================
|
|||
|
|
# 保洁类型 (cleaning_type)
|
|||
|
|
# ============================================================
|
|||
|
|
class CleaningType(str, Enum):
|
|||
|
|
ROUTINE = "ROUTINE"
|
|||
|
|
DEEP = "DEEP"
|
|||
|
|
SPOT = "SPOT"
|
|||
|
|
EMERGENCY = "EMERGENCY"
|
|||
|
|
|
|||
|
|
|
|||
|
|
CLEANING_TYPE_NAMES: Dict[str, str] = {
|
|||
|
|
CleaningType.ROUTINE: "日常保洁",
|
|||
|
|
CleaningType.DEEP: "深度保洁",
|
|||
|
|
CleaningType.SPOT: "点状保洁",
|
|||
|
|
CleaningType.EMERGENCY: "应急保洁",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
# ============================================================
|
|||
|
|
# 通用常量
|
|||
|
|
# ============================================================
|
|||
|
|
WEEKDAY_NAMES = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
|