Files
railway_cloud/app/api/daily_diff.py

95 lines
3.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)}"
)