from fastapi import APIRouter, BackgroundTasks, UploadFile, File, Form from models.request import ( GetTokenRequest, FetchInnerFlowRequest, CheckParseStatusRequest, GetBankStatementRequest, DeleteFilesRequest, ) from services.token_service import TokenService from services.file_service import FileService from services.statement_service import StatementService from utils.error_simulator import ErrorSimulator from typing import List # 创建路由器 router = APIRouter() # 初始化服务实例 token_service = TokenService() file_service = FileService() statement_service = StatementService() # ==================== 接口1:获取Token ==================== @router.post("/account/common/getToken") async def get_token(request: GetTokenRequest): """创建项目并获取访问Token 如果 projectNo 包含 error_XXXX 标记,将返回对应的错误响应 """ # 检测错误标记 error_code = ErrorSimulator.detect_error_marker(request.projectNo) if error_code: return ErrorSimulator.build_error_response(error_code) # 正常流程 return token_service.create_token(request) # ==================== 接口2:上传文件 ==================== @router.post("/watson/api/project/remoteUploadSplitFile") async def upload_file( background_tasks: BackgroundTasks, groupId: int = Form(..., description="项目ID"), file: UploadFile = File(..., description="流水文件"), ): """上传流水文件 文件将立即返回,并在后台延迟4秒完成解析 """ return await file_service.upload_file(groupId, file, background_tasks) # ==================== 接口3:拉取行内流水 ==================== @router.post("/watson/api/project/getJZFileOrZjrcuFile") async def fetch_inner_flow(request: FetchInnerFlowRequest): """拉取行内流水 如果 customerNo 包含 error_XXXX 标记,将返回对应的错误响应 """ # 检测错误标记 error_code = ErrorSimulator.detect_error_marker(request.customerNo) if error_code: return ErrorSimulator.build_error_response(error_code) # 正常流程 return file_service.fetch_inner_flow(request) # ==================== 接口4:检查文件解析状态 ==================== @router.post("/watson/api/project/upload/getpendings") async def check_parse_status(request: CheckParseStatusRequest): """检查文件解析状态 返回文件是否还在解析中(parsing字段) """ return file_service.check_parse_status( request.groupId, request.inprogressList ) # ==================== 接口5:删除文件 ==================== @router.post("/watson/api/project/batchDeleteUploadFile") async def delete_files(request: DeleteFilesRequest): """批量删除上传的文件 根据logIds列表删除对应的文件记录 """ return file_service.delete_files(request.groupId, request.logIds, request.userId) # ==================== 接口6:获取银行流水 ==================== @router.post("/watson/api/project/getBSByLogId") async def get_bank_statement(request: GetBankStatementRequest): """获取银行流水列表 支持分页查询(pageNow, pageSize) """ return statement_service.get_bank_statement(request)