xuguoyang 4 meses atrás
pai
commit
bd98cb10be
1 arquivos alterados com 36 adições e 33 exclusões
  1. 36 33
      routers/api/dataFilling/__init__.py

+ 36 - 33
routers/api/dataFilling/__init__.py

@@ -1,7 +1,7 @@
 from fastapi import FastAPI, HTTPException, Depends, APIRouter,Query,Body
 from sqlalchemy.engine.reflection import Inspector
 from common.security import valid_access_token
-from pydantic import BaseModel,Extra
+from pydantic import BaseModel,Extra,Field
 from datetime import datetime
 from typing import List, Optional,Any,Dict
 from sqlalchemy import create_engine, Column, Integer, String, Boolean, MetaData, Table, inspect, exists,or_,text,insert
@@ -163,7 +163,7 @@ def create_dynamic_table(table_name: str, field_names: List[str], db: Session):
 
 class ReportCreate(BaseModel):
     table_name: str
-    start_time: str
+    #start_time: str
     end_time: str
     status: str
     issued_status: str
@@ -195,8 +195,8 @@ def create_report_and_table(report: ReportCreate, db: Session = Depends(get_db),
             report_id=get_next_event_id(db),
             table_name=report.table_name,
             data_table_name=data_table_name,
-            start_time=start_time,
-            end_time=datetime.now(),
+            start_time=datetime.now(),
+            end_time=report.end_time,
             status=report.status,
             issued_status=report.issued_status,
             collection_status=0,#未收取
@@ -226,47 +226,50 @@ def create_report_and_table(report: ReportCreate, db: Session = Depends(get_db),
         raise HTTPException(status_code=400, detail=str(e))
 
 
+# 定义请求体的 Pydantic 模型
 class ReportQuery(BaseModel):
-    # creator_id: str  # 创建者ID,必须提供
-    table_name: Optional[str] = None
-    status: Optional[List[int]] = None
-    start_time: Optional[datetime] = None
-    end_time: Optional[datetime] = None
-    issued_status: Optional[List[int]] = None
-    page_num: int = 1
-    page_size: int = 10
+    table_name: Optional[str] = Field(None, description="Table name filter")
+    status: Optional[str] = Field(None, description="Status filter (comma-separated values, e.g., '1,2,3')")
+    start_time: Optional[datetime] = Field(None, description="Start time filter")
+    end_time: Optional[datetime] = Field(None, description="End time filter")
+    issued_status: Optional[str] = Field(None, description="Issued status filter (comma-separated values, e.g., '0,1')")
+    page: int = Field(1, gt=0, description="Page number for pagination")
+    pageSize: int = Field(10, gt=0, description="Page size for pagination")
 
 @router.post("/select")
-@router.get("/select")
 async def select_report(
-        db: Session = Depends(get_db),
-        query: ReportQuery = Depends(),
-        creator_id = Depends(valid_access_token)
+    db: Session = Depends(get_db),
+    query: ReportQuery = Body(..., description="Report query parameters in the request body"),
+    creator_id: str = Depends(valid_access_token)
 ):
-
-
+    # 构建查询
     data_query = db.query(ReportManagement).filter(ReportManagement.creator_id == creator_id)
 
-    # 过滤条件
+    # 应用过滤条件
     if query.table_name:
         data_query = data_query.filter(ReportManagement.table_name.ilike(f"%{query.table_name}%"))
 
     if query.start_time and query.end_time:
-        data_query = data_query.filter(ReportManagement.start_time >= query.start_time,
-                                       ReportManagement.end_time <= query.end_time)
+        data_query = data_query.filter(
+            ReportManagement.start_time >= query.start_time,
+            ReportManagement.end_time <= query.end_time
+        )
 
+    # 处理 status 和 issued_status 的逗号分隔字符串
     if query.status:
-        data_query = data_query.filter(ReportManagement.status.in_(query.status))
+        status_list = [int(s) for s in query.status.split(",")]
+        data_query = data_query.filter(ReportManagement.status.in_(status_list))
 
     if query.issued_status:
-        data_query = data_query.filter(ReportManagement.issued_status.in_(query.issued_status))
+        issued_status_list = [int(s) for s in query.issued_status.split(",")]
+        data_query = data_query.filter(ReportManagement.issued_status.in_(issued_status_list))
 
     # 计算总数
     total_count = data_query.count()
 
     # 分页查询
-    offset = (query.page_num - 1) * query.page_size
-    data = data_query.offset(offset).limit(query.page_size).all()
+    offset = (query.page - 1) * query.pageSize
+    data = data_query.offset(offset).limit(query.pageSize).all()
 
     # 构造结果
     result_items = []
@@ -292,12 +295,12 @@ async def select_report(
 
     result = {
         "code": 200,
-        'msg': '查询成功',
-        'pages': (total_count + query.page_size - 1) // query.page_size,
-        'total': total_count,
-        "currentPage": query.page_num,
-        "pageSize": query.page_size,
-        'data': result_items
+        "msg": "查询成功",
+        "total": total_count,
+        "pages": (total_count + query.pageSize - 1) // query.pageSize,
+        "currentPage": query.page,
+        "pageSize": query.pageSize,
+        "data": result_items
     }
 
     return result
@@ -711,8 +714,8 @@ def has_matching_column_comments(
     return bool(get_columns_with_comment_like(inspector, table_name, comment_like))
 
 
-@router.post("/reports_by_creator/")
-@router.get("/reports_by_creator/")
+@router.post("/reports_by_creator")
+@router.get("/reports_by_creator")
 async def get_reports_by_creator(
     field_comment: Optional[str] = Query(None, description="Optional comment of the field to match"),
     page: int = Query(default=1, gt=0),  # 分页参数:当前页码,默认为1