Explorar el Código

处理矢量数据获取失败bug

drggboy hace 1 mes
padre
commit
638f1dba6f
Se han modificado 1 ficheros con 36 adiciones y 2 borrados
  1. 36 2
      app/services/vector_service.py

+ 36 - 2
app/services/vector_service.py

@@ -23,7 +23,23 @@ def get_vector_data(db: Session, vector_id: int):
     vector_data = db.query(VectorData).filter(VectorData.id == vector_id).first()
     if not vector_data:
         raise HTTPException(status_code=404, detail="矢量数据不存在")
-    return vector_data
+    
+    # 手动构建返回字典
+    result = {}
+    for column in vector_data.__table__.columns:
+        value = getattr(vector_data, column.name)
+        # 处理特殊类型
+        if isinstance(value, Decimal):
+            value = float(value)
+        elif isinstance(value, datetime):
+            value = value.isoformat()
+        elif str(column.type).startswith('geometry'):
+            # 如果是几何类型,直接使用字符串表示
+            if value is not None:
+                value = str(value)
+        result[column.name] = value
+    
+    return result
 
 
 def get_vector_data_batch(db: Session, vector_ids: List[int]):
@@ -31,7 +47,25 @@ def get_vector_data_batch(db: Session, vector_ids: List[int]):
     vector_data_list = db.query(VectorData).filter(VectorData.id.in_(vector_ids)).all()
     if not vector_data_list:
         raise HTTPException(status_code=404, detail="未找到指定的矢量数据")
-    return vector_data_list
+    
+    result = []
+    for vector_data in vector_data_list:
+        item = {}
+        for column in vector_data.__table__.columns:
+            value = getattr(vector_data, column.name)
+            # 处理特殊类型
+            if isinstance(value, Decimal):
+                value = float(value)
+            elif isinstance(value, datetime):
+                value = value.isoformat()
+            elif str(column.type).startswith('geometry'):
+                # 如果是几何类型,直接使用字符串表示
+                if value is not None:
+                    value = str(value)
+            item[column.name] = value
+        result.append(item)
+    
+    return result
 
 
 async def import_vector_data(file: UploadFile, db: Session) -> dict: