Просмотр исходного кода

feat: 任务查询接口新增可视化链接字段返回

jihuaqiang 1 месяц назад
Родитель
Сommit
ea5689ca80
1 измененных файлов с 46 добавлено и 5 удалено
  1. 46 5
      tasks/detail.py

+ 46 - 5
tasks/detail.py

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