""" 财务数据路由 """ from fastapi import APIRouter, Depends, Query from sqlalchemy.orm import Session from app.db.session import get_db from app.schemas.base import ResponseModel from app.services.finance_service import FinanceService from app.core.security import get_current_user from app.models.user import User from app.utils.date_utils import parse_date router = APIRouter() @router.get("/balance-sheet", response_model=ResponseModel) async def get_balance_sheet( codes: str = Query(..., description="股票代码,多个用逗号分隔"), start_date: str = Query(..., description="开始报告期(YYYYMMDD)"), end_date: str = Query(..., description="结束报告期(YYYYMMDD)"), db: Session = Depends(get_db), current_user: User = Depends(get_current_user) ): """获取资产负债表""" service = FinanceService(db) code_list = [c.strip() for c in codes.split(",")] start = parse_date(start_date) end = parse_date(end_date) data = service.get_balance_sheet(code_list, start, end) return ResponseModel(data=data) @router.get("/cash-flow", response_model=ResponseModel) async def get_cash_flow( codes: str = Query(..., description="股票代码,多个用逗号分隔"), start_date: str = Query(..., description="开始报告期(YYYYMMDD)"), end_date: str = Query(..., description="结束报告期(YYYYMMDD)"), db: Session = Depends(get_db), current_user: User = Depends(get_current_user) ): """获取现金流量表""" service = FinanceService(db) code_list = [c.strip() for c in codes.split(",")] start = parse_date(start_date) end = parse_date(end_date) data = service.get_cash_flow(code_list, start, end) return ResponseModel(data=data) @router.get("/income", response_model=ResponseModel) async def get_income( codes: str = Query(..., description="股票代码,多个用逗号分隔"), start_date: str = Query(..., description="开始报告期(YYYYMMDD)"), end_date: str = Query(..., description="结束报告期(YYYYMMDD)"), db: Session = Depends(get_db), current_user: User = Depends(get_current_user) ): """获取利润表""" service = FinanceService(db) code_list = [c.strip() for c in codes.split(",")] start = parse_date(start_date) end = parse_date(end_date) data = service.get_income_statement(code_list, start, end) return ResponseModel(data=data) @router.get("/profit-express", response_model=ResponseModel) async def get_profit_express( codes: str = Query(..., description="股票代码,多个用逗号分隔"), start_date: str = Query(..., description="开始报告期(YYYYMMDD)"), end_date: str = Query(..., description="结束报告期(YYYYMMDD)"), db: Session = Depends(get_db), current_user: User = Depends(get_current_user) ): """获取业绩快报""" service = FinanceService(db) code_list = [c.strip() for c in codes.split(",")] start = parse_date(start_date) end = parse_date(end_date) # 从SDK获取业绩快报 try: adapter = service.base_service._get_adapter() data = adapter.get_profit_express(code_list, start, end) return ResponseModel(data=data.to_dict("records") if not data.empty else []) except Exception as e: return ResponseModel(data=[], message=str(e)) @router.get("/profit-notice", response_model=ResponseModel) async def get_profit_notice( codes: str = Query(..., description="股票代码,多个用逗号分隔"), start_date: str = Query(..., description="开始报告期(YYYYMMDD)"), end_date: str = Query(..., description="结束报告期(YYYYMMDD)"), db: Session = Depends(get_db), current_user: User = Depends(get_current_user) ): """获取业绩预告""" service = FinanceService(db) code_list = [c.strip() for c in codes.split(",")] start = parse_date(start_date) end = parse_date(end_date) try: adapter = service.base_service._get_adapter() data = adapter.get_profit_notice(code_list, start, end) return ResponseModel(data=data.to_dict("records") if not data.empty else []) except Exception as e: return ResponseModel(data=[], message=str(e))