1
0
forked from erp-dev/erp

feat: settlement first api beta

This commit is contained in:
2026-02-27 18:26:12 +08:00
parent c564b1af32
commit 86f5dab32b
16 changed files with 1854 additions and 10 deletions

View File

@@ -0,0 +1,75 @@
"""Settlement API views"""
import logging
import re
from datetime import datetime, date
from django.utils import timezone
from rest_framework import status
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from settlement.services import get_plate_order_summary_by_customer
logger = logging.getLogger(__name__)
class PlateOrderSummaryView(APIView):
"""
开版订单统计 API
GET /api/v1/settlement/plate-orders/summary/
参数:
date: 统计日期YYYY-MM-DD
"""
permission_classes = [IsAuthenticated]
def get(self, request):
"""
获取开版订单统计
"""
date_str = request.query_params.get('date')
if not date_str:
return Response(
{'error': '缺少 date 参数'},
status=status.HTTP_400_BAD_REQUEST
)
if not re.match(r'^\d{4}-\d{2}-\d{2}$', date_str):
return Response(
{'error': '日期格式错误,请使用 YYYY-MM-DD 格式'},
status=status.HTTP_400_BAD_REQUEST
)
try:
settlement_date = date.fromisoformat(date_str)
except ValueError:
return Response(
{'error': '日期不存在'},
status=status.HTTP_403_FORBIDDEN
)
emp = getattr(request.user, 'employee', None)
if emp is None or emp.merchant is None:
return Response(
{'error': '用户未关联商户'},
status=status.HTTP_403_FORBIDDEN
)
try:
data = get_plate_order_summary_by_customer(
merchant_id=emp.merchant.id,
settlement_date=settlement_date,
user=request.user
)
return Response({'data': data})
except Exception as e:
logger.exception(
f'[settlement.views] 获取开版订单统计失败: {e}'
)
return Response(
{'error': '获取统计数据失败'},
status=status.HTTP_500_INTERNAL_SERVER_ERROR
)