"""重大事项 + 追问清单路由。""" from fastapi import APIRouter, Depends, Query, status from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.core.database import get_db from app.core.dependencies import get_current_user from app.models.company import Company from app.models.inquiry import InquiryList from app.models.major_event import MajorEvent from app.models.user import User from app.schemas.common import ApiResponse, success from app.services.event_detector import detect_major_events from app.services.inquiry_generator import generate_inquiry_questions router = APIRouter(prefix="/events", tags=["events"]) @router.get("", response_model=ApiResponse[list]) async def list_events( company_id: str | None = Query(default=None), db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user), ): """获取重大事项列表。""" query = ( select(MajorEvent) .join(Company, MajorEvent.company_id == Company.id) .where(Company.tenant_id == user.tenant_id) ) if company_id: query = query.where(MajorEvent.company_id == company_id) result = await db.execute(query.order_by(MajorEvent.created_at.desc())) items = result.scalars().all() return success(data=[ { "id": str(i.id), "company_id": str(i.company_id), "event_type": i.event_type, "title": i.title, "description": i.description, "severity": i.severity, "source": i.source, "evidence": i.evidence, "status": i.status, "occurred_at": i.occurred_at.isoformat() if i.occurred_at else None, } for i in items ]) @router.post("/detect", response_model=ApiResponse[list]) async def detect_events( req: dict, user: User = Depends(get_current_user), ): """AI 从月报中识别重大事项。""" events = await detect_major_events(req.get("report_content", "")) return success(data=events) router_inquiries = APIRouter(prefix="/inquiries", tags=["inquiries"]) @router_inquiries.get("", response_model=ApiResponse[list]) async def list_inquiries( company_id: str | None = Query(default=None), db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user), ): """获取追问清单列表。""" query = ( select(InquiryList) .join(Company, InquiryList.company_id == Company.id) .where(Company.tenant_id == user.tenant_id) ) if company_id: query = query.where(InquiryList.company_id == company_id) result = await db.execute(query.order_by(InquiryList.sent_at.desc())) items = result.scalars().all() return success(data=[ { "id": str(i.id), "company_id": str(i.company_id), "report_id": i.report_id, "questions": i.questions, "status": i.status, "sent_at": i.sent_at.isoformat(), "answered_at": i.answered_at.isoformat() if i.answered_at else None, } for i in items ]) @router_inquiries.post("/generate", response_model=ApiResponse[list]) async def generate_inquiries( req: dict, user: User = Depends(get_current_user), ): """AI 生成追问清单。""" questions = await generate_inquiry_questions( req.get("report_content", ""), req.get("structured_data"), ) return success(data=questions)