|
@@ -38,9 +38,36 @@ def _parse_result_payload(payload: Optional[str]) -> Any:
|
|
|
return payload
|
|
return payload
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+def _parse_web_url(web_url: Optional[str]) -> Optional[Dict[str, str]]:
|
|
|
|
|
+ """解析结果表中的 web_url 字段,拆分出 pointUrl 和 weightUrl"""
|
|
|
|
|
+ if not web_url:
|
|
|
|
|
+ return None
|
|
|
|
|
+
|
|
|
|
|
+ segments = [segment.strip() for segment in web_url.split(",") if segment.strip()]
|
|
|
|
|
+ if not segments:
|
|
|
|
|
+ return None
|
|
|
|
|
+
|
|
|
|
|
+ point_url: Optional[str] = None
|
|
|
|
|
+ weight_url: Optional[str] = None
|
|
|
|
|
+
|
|
|
|
|
+ for segment in segments:
|
|
|
|
|
+ if "weight_visualization" in segment:
|
|
|
|
|
+ weight_url = segment
|
|
|
|
|
+ else:
|
|
|
|
|
+ point_url = segment
|
|
|
|
|
+
|
|
|
|
|
+ if not point_url and not weight_url:
|
|
|
|
|
+ return None
|
|
|
|
|
+
|
|
|
|
|
+ return {
|
|
|
|
|
+ "pointUrl": point_url or "",
|
|
|
|
|
+ "weightUrl": weight_url or ""
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
def _fetch_decode_result(task_id: str) -> Optional[Dict[str, Any]]:
|
|
def _fetch_decode_result(task_id: str) -> Optional[Dict[str, Any]]:
|
|
|
"""获取解构任务结果"""
|
|
"""获取解构任务结果"""
|
|
|
- sql = "SELECT result_payload, error_message FROM workflow_decode_task_result WHERE task_id = %s"
|
|
|
|
|
|
|
+ sql = "SELECT result_payload, error_message, web_url FROM workflow_decode_task_result WHERE task_id = %s"
|
|
|
result_record = mysql.fetchone(sql, (task_id,))
|
|
result_record = mysql.fetchone(sql, (task_id,))
|
|
|
|
|
|
|
|
if not result_record:
|
|
if not result_record:
|
|
@@ -48,19 +75,32 @@ def _fetch_decode_result(task_id: str) -> Optional[Dict[str, Any]]:
|
|
|
|
|
|
|
|
return {
|
|
return {
|
|
|
"result": _parse_result_payload(result_record.get("result_payload")),
|
|
"result": _parse_result_payload(result_record.get("result_payload")),
|
|
|
- "error_message": result_record.get("error_message")
|
|
|
|
|
|
|
+ "error_message": result_record.get("error_message"),
|
|
|
|
|
+ "url": _parse_web_url(result_record.get("web_url"))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
-def _build_result_data(task_id: str, status: int, result: Any = None, reason: Optional[str] = None) -> Dict[str, Any]:
|
|
|
|
|
|
|
+def _build_result_data(
|
|
|
|
|
+ task_id: str,
|
|
|
|
|
+ status: int,
|
|
|
|
|
+ result: Any = None,
|
|
|
|
|
+ reason: Optional[str] = None,
|
|
|
|
|
+ url: Optional[Dict[str, str]] = None
|
|
|
|
|
+) -> Dict[str, Any]:
|
|
|
"""构建结果数据"""
|
|
"""构建结果数据"""
|
|
|
- return {
|
|
|
|
|
|
|
+ data: Dict[str, Any] = {
|
|
|
"taskId": task_id,
|
|
"taskId": task_id,
|
|
|
"status": status,
|
|
"status": status,
|
|
|
"result": result,
|
|
"result": result,
|
|
|
"reason": reason
|
|
"reason": reason
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ # 对于解构任务,增加 url 字段(data.url.pointUrl / data.url.weightUrl)
|
|
|
|
|
+ if url is not None:
|
|
|
|
|
+ data["url"] = url
|
|
|
|
|
+
|
|
|
|
|
+ return data
|
|
|
|
|
+
|
|
|
|
|
|
|
|
def _handle_success_status(task_id: str, capability: int) -> Dict[str, Any]:
|
|
def _handle_success_status(task_id: str, capability: int) -> Dict[str, Any]:
|
|
|
"""处理成功状态(status=2)"""
|
|
"""处理成功状态(status=2)"""
|
|
@@ -77,7 +117,8 @@ def _handle_success_status(task_id: str, capability: int) -> Dict[str, Any]:
|
|
|
task_id=task_id,
|
|
task_id=task_id,
|
|
|
status=STATUS_SUCCESS,
|
|
status=STATUS_SUCCESS,
|
|
|
result=decode_result.get("result"),
|
|
result=decode_result.get("result"),
|
|
|
- reason=decode_result.get("error_message")
|
|
|
|
|
|
|
+ reason=decode_result.get("error_message"),
|
|
|
|
|
+ url=decode_result.get("url")
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
return _build_response(
|
|
return _build_response(
|