modify: 上报接口 422 问题
This commit is contained in:
@@ -14,6 +14,8 @@ from pydantic import BaseModel, Field
|
|||||||
|
|
||||||
class GpsInfo(BaseModel):
|
class GpsInfo(BaseModel):
|
||||||
"""GPS 位置信息"""
|
"""GPS 位置信息"""
|
||||||
|
model_config = {"extra": "allow"}
|
||||||
|
|
||||||
available: bool = Field(default=False, description="是否有 GPS 功能")
|
available: bool = Field(default=False, description="是否有 GPS 功能")
|
||||||
kSpeed: float = Field(default=0.0, description="对地速度 (km/h)")
|
kSpeed: float = Field(default=0.0, description="对地速度 (km/h)")
|
||||||
nSpeed: float = Field(default=0.0, description="对地速率 (节)")
|
nSpeed: float = Field(default=0.0, description="对地速率 (节)")
|
||||||
@@ -24,6 +26,8 @@ class GpsInfo(BaseModel):
|
|||||||
|
|
||||||
class MediaInfo(BaseModel):
|
class MediaInfo(BaseModel):
|
||||||
"""视频通道信息"""
|
"""视频通道信息"""
|
||||||
|
model_config = {"extra": "allow"}
|
||||||
|
|
||||||
MediaName: str = Field(default="", description="通道标识")
|
MediaName: str = Field(default="", description="通道标识")
|
||||||
MediaDesc: str = Field(default="", description="通道描述")
|
MediaDesc: str = Field(default="", description="通道描述")
|
||||||
MediaUrl: str = Field(default="", description="通道视频流地址")
|
MediaUrl: str = Field(default="", description="通道视频流地址")
|
||||||
@@ -37,6 +41,8 @@ class MediaInfo(BaseModel):
|
|||||||
|
|
||||||
class ResultProperty(BaseModel):
|
class ResultProperty(BaseModel):
|
||||||
"""告警 Result 中的属性项"""
|
"""告警 Result 中的属性项"""
|
||||||
|
model_config = {"extra": "allow"}
|
||||||
|
|
||||||
property: str = Field(default="", description="属性标识")
|
property: str = Field(default="", description="属性标识")
|
||||||
desc: str = Field(default="", description="属性描述")
|
desc: str = Field(default="", description="属性描述")
|
||||||
value: Any = Field(default=None, description="属性值(String/Int/Float)")
|
value: Any = Field(default=None, description="属性值(String/Int/Float)")
|
||||||
@@ -90,7 +96,7 @@ class AlarmReportRequest(BaseModel):
|
|||||||
LocalLabeledPath: str = Field(default="", description="有标注告警图在盒子中的相对路径")
|
LocalLabeledPath: str = Field(default="", description="有标注告警图在盒子中的相对路径")
|
||||||
|
|
||||||
# 通道信息
|
# 通道信息
|
||||||
Media: MediaInfo = Field(default_factory=MediaInfo, description="配置的媒体通道")
|
Media: Optional[MediaInfo] = Field(default=None, description="配置的媒体通道")
|
||||||
|
|
||||||
# 违规描述
|
# 违规描述
|
||||||
Summary: str = Field(default="", description="违规类型(NoHelmet / Intrude / PeopleCross 等)")
|
Summary: str = Field(default="", description="违规类型(NoHelmet / Intrude / PeopleCross 等)")
|
||||||
@@ -109,10 +115,10 @@ class AlarmReportRequest(BaseModel):
|
|||||||
VideoFile: str = Field(default="", description="关联的视频标识(视频上传接口返回)")
|
VideoFile: str = Field(default="", description="关联的视频标识(视频上传接口返回)")
|
||||||
|
|
||||||
# GPS
|
# GPS
|
||||||
GPS: GpsInfo = Field(default_factory=GpsInfo, description="当前位置信息")
|
GPS: Optional[GpsInfo] = Field(default=None, description="当前位置信息")
|
||||||
|
|
||||||
# 违规结果
|
# 违规结果
|
||||||
Result: AlarmResult = Field(default_factory=AlarmResult, description="违规检测结果")
|
Result: Optional[AlarmResult] = Field(default=None, description="违规检测结果")
|
||||||
|
|
||||||
# 预留字段
|
# 预留字段
|
||||||
Type: int = Field(default=0, description="预留字段")
|
Type: int = Field(default=0, description="预留字段")
|
||||||
|
|||||||
@@ -116,8 +116,8 @@ async def alarm_report(body: AlarmReportRequest) -> AlarmReportResponse:
|
|||||||
返回格式:{"Result": {"Code": 0, "Desc": ""}}
|
返回格式:{"Result": {"Code": 0, "Desc": ""}}
|
||||||
仅当 HTTP 200 + Code 非 0 时,盒子认为上报失败。
|
仅当 HTTP 200 + Code 非 0 时,盒子认为上报失败。
|
||||||
"""
|
"""
|
||||||
# 获取完整报文(含 extra 字段)
|
# 获取完整报文(含 extra 字段,排除 None 值以生成整洁 JSON)
|
||||||
full_data = body.model_dump()
|
full_data = body.model_dump(exclude_none=True)
|
||||||
|
|
||||||
board_id = full_data.get("BoardId", "")
|
board_id = full_data.get("BoardId", "")
|
||||||
board_ip = full_data.get("BoardIp", "")
|
board_ip = full_data.get("BoardIp", "")
|
||||||
|
|||||||
Reference in New Issue
Block a user