增加daily_diff 增删查业务

This commit is contained in:
2026-01-07 11:10:41 +08:00
parent 904bf9a6c4
commit 37e4d5b2e0
5 changed files with 353 additions and 0 deletions

94
app/api/daily_diff.py Normal file
View File

@@ -0,0 +1,94 @@
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)}"
)