diff --git a/lsfx-mock-server/requirements.txt b/lsfx-mock-server/requirements.txt index ca3203e..75b7aa5 100644 --- a/lsfx-mock-server/requirements.txt +++ b/lsfx-mock-server/requirements.txt @@ -1,6 +1,7 @@ fastapi==0.104.1 uvicorn[standard]==0.24.0 pydantic==2.5.0 +pydantic-settings==2.1.0 python-multipart==0.0.6 pytest>=7.0.0 pytest-cov>=4.0.0 diff --git a/lsfx-mock-server/routers/__init__.py b/lsfx-mock-server/routers/__init__.py new file mode 100644 index 0000000..873f7bb --- /dev/null +++ b/lsfx-mock-server/routers/__init__.py @@ -0,0 +1 @@ +# Routers package diff --git a/lsfx-mock-server/routers/__pycache__/__init__.cpython-313.pyc b/lsfx-mock-server/routers/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..c1ef67c Binary files /dev/null and b/lsfx-mock-server/routers/__pycache__/__init__.cpython-313.pyc differ diff --git a/lsfx-mock-server/routers/__pycache__/api.cpython-313.pyc b/lsfx-mock-server/routers/__pycache__/api.cpython-313.pyc new file mode 100644 index 0000000..a1e8c8f Binary files /dev/null and b/lsfx-mock-server/routers/__pycache__/api.cpython-313.pyc differ diff --git a/lsfx-mock-server/routers/api.py b/lsfx-mock-server/routers/api.py new file mode 100644 index 0000000..7f68495 --- /dev/null +++ b/lsfx-mock-server/routers/api.py @@ -0,0 +1,99 @@ +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)