100 lines
3.2 KiB
Python
100 lines
3.2 KiB
Python
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)
|