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)
|