from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from ..core.database import get_db from ..core.response_code import ResponseCode from ..schemas.daily_diff import ( BatchCreateRequest, BatchCreateResponse, DailyDiffQueryRequest, DailyDiffListResponse, DailyDiffResponse, BatchDeleteRequest, BatchDeleteResponse ) from ..services.daily_diff import DailyDiffService router = APIRouter(prefix="/daily_diff", tags=["每日差异数据"]) @router.post("/batch_create", response_model=BatchCreateResponse) def batch_create(request: BatchCreateRequest, db: Session = Depends(get_db)): """ 批量新增数据 使用check_time和linecode检查重复,重复则跳过该条数据 """ try: service = DailyDiffService() # 转换为字典列表 data_list = [item.model_dump() for item in request.data] result = service.batch_create(db, data_list) return BatchCreateResponse( code=ResponseCode.SUCCESS if result['success'] else ResponseCode.IMPORT_FAILED, message=result['message'], total_count=result['total_count'], success_count=result['success_count'], skip_count=result['skip_count'] ) except Exception as e: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"批量新增失败: {str(e)}" ) @router.post("/query", response_model=DailyDiffListResponse) def query(request: DailyDiffQueryRequest, db: Session = Depends(get_db)): """ 多条件查询 支持account_id、account_name、check_time、check_time范围、linecode等条件 """ try: service = DailyDiffService() data, total = service.query_by_conditions( db, account_id=request.account_id, account_name=request.account_name, check_time=request.check_time, check_time_start=request.check_time_start, check_time_end=request.check_time_end, linecode=request.linecode, linecodes=request.linecodes, page=request.page, page_size=request.page_size ) return DailyDiffListResponse( code=ResponseCode.SUCCESS, message="查询成功", total=total, data=[DailyDiffResponse.model_validate(item) for item in data] ) except Exception as e: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"查询失败: {str(e)}" ) @router.post("/batch_delete", response_model=BatchDeleteResponse) def batch_delete(request: BatchDeleteRequest, db: Session = Depends(get_db)): """ 批量删除数据 """ try: service = DailyDiffService() deleted_count = service.batch_delete(db, request.ids) return BatchDeleteResponse( code=ResponseCode.SUCCESS, message="删除成功", deleted_count=deleted_count ) except Exception as e: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"删除失败: {str(e)}" )