"""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 )