95 lines
3.2 KiB
Python
95 lines
3.2 KiB
Python
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)}"
|
||
)
|