8f307aecba
- GET /api/document-types: returns {id, name, code} from
leaudit_document_types, with optional ?ids=1,2,3 filter
- GET /api/documents/list: added userId, dateFrom, dateTo
query params for filtering by uploading user and date range
87 lines
3.8 KiB
Python
87 lines
3.8 KiB
Python
"""文档控制器。"""
|
|
|
|
from typing import Any
|
|
|
|
from fastapi import File, Form, Query, UploadFile
|
|
|
|
from fastapi_common.fastapi_common_web.controller import BaseController
|
|
from fastapi_common.fastapi_common_web.domain.responses import Result
|
|
|
|
from fastapi_modules.fastapi_leaudit.domian.vo.documentVo import DocumentListPageVO, DocumentTypeItemVO, DocumentUploadVO
|
|
from fastapi_modules.fastapi_leaudit.services import IDocumentService
|
|
from fastapi_modules.fastapi_leaudit.services.impl.documentServiceImpl import DocumentServiceImpl
|
|
|
|
|
|
class DocumentController(BaseController):
|
|
"""文档控制器。"""
|
|
|
|
def __init__(self):
|
|
super().__init__(prefix="", tags=["文档"])
|
|
self.DocumentService: IDocumentService = DocumentServiceImpl()
|
|
|
|
@self.router.post("/upload", response_model=Result[DocumentUploadVO])
|
|
async def UploadDocument(
|
|
file: UploadFile = File(..., description="上传文档"),
|
|
typeId: int | None = Form(None, description="文档类型ID"),
|
|
typeCode: str | None = Form(None, description="文档类型编码"),
|
|
region: str = Form("default", description="所属地区"),
|
|
fileRole: str = Form("primary", description="文件角色"),
|
|
createdBy: int | None = Form(None, description="上传用户ID"),
|
|
autoRun: bool = Form(False, description="是否上传后自动触发评查"),
|
|
speed: str = Form("normal", description="执行速度档位:urgent/normal"),
|
|
):
|
|
"""上传文档并建立评查输入。"""
|
|
Content = await file.read()
|
|
Data = await self.DocumentService.Upload(
|
|
FileName=file.filename or "upload.bin",
|
|
FileContent=Content,
|
|
ContentType=file.content_type,
|
|
TypeId=typeId,
|
|
TypeCode=typeCode,
|
|
Region=region,
|
|
FileRole=fileRole,
|
|
CreatedBy=createdBy,
|
|
AutoRun=autoRun,
|
|
Speed=speed,
|
|
)
|
|
return Result.success(data=Data)
|
|
|
|
@self.router.get("/documents/list", response_model=Result[DocumentListPageVO])
|
|
async def ListDocuments(
|
|
page: int = 1,
|
|
pageSize: int = 20,
|
|
keyword: str | None = None,
|
|
typeCode: str | None = None,
|
|
region: str | None = None,
|
|
processingStatus: str | None = None,
|
|
resultStatus: str | None = None,
|
|
userId: int | None = Query(None, description="按用户ID过滤"),
|
|
dateFrom: str | None = Query(None, description="起始日期 (YYYY-MM-DD)"),
|
|
dateTo: str | None = Query(None, description="结束日期 (YYYY-MM-DD)"),
|
|
):
|
|
"""获取文档列表(仅返回最新版本,附历史版本摘要)。"""
|
|
Data = await self.DocumentService.ListDocuments(
|
|
Page=page,
|
|
PageSize=pageSize,
|
|
Keyword=keyword,
|
|
TypeCode=typeCode,
|
|
Region=region,
|
|
ProcessingStatus=processingStatus,
|
|
ResultStatus=resultStatus,
|
|
UserId=userId,
|
|
DateFrom=dateFrom,
|
|
DateTo=dateTo,
|
|
)
|
|
return Result.success(data=Data)
|
|
|
|
@self.router.get("/document-types", response_model=Result[list[DocumentTypeItemVO]])
|
|
async def ListDocumentTypes(
|
|
ids: str | None = Query(None, description="逗号分隔的ID列表,不传则返回全部"),
|
|
):
|
|
"""获取文档类型列表。"""
|
|
idList: list[int] | None = None
|
|
if ids:
|
|
idList = [int(x.strip()) for x in ids.split(",") if x.strip().isdigit()]
|
|
Data = await self.DocumentService.ListDocumentTypes(Ids=idList)
|
|
return Result.success(data=Data)
|