123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- # coding=utf-8
- from django.db import transaction
- from django.db.models import Sum
- from rest_framework.views import APIView
- from rest_framework_jwt.views import VerifyJSONWebToken,RefreshJSONWebToken
- from rest_framework.serializers import ValidationError
- from rest_framework.decorators import action
- from utils import response_ok, response_error
- from utils.permission import IsCustomer, IsEmployee
- from utils.custom_modelviewset import CustomModelViewSet
- from apps.customer.serializers import WechatLoginSerializer, WechatBindSerializer, CustomerSerializer
- from apps.customer.models import Customer
- from apps.customer.filters import CustomerFilter
- from apps.log.models import BizLog
- from apps.base import Formater
- class WxLoginView(APIView):
- serializer_class = WechatLoginSerializer
- def post(self, request, *args, **kwargs):
- ser = self.serializer_class(data=request.data)
- if ser.is_valid():
- return response_ok(ser.validated_data)
- else:
- return response_error('参数错误')
- class WxBindView(APIView):
- serializer_class = WechatBindSerializer
- def post(self, request, *args, **kwargs):
- ser = self.serializer_class(data=request.data)
- if ser.is_valid():
- return response_ok(ser.validated_data)
- else:
- return response_error('参数错误')
- class SetUserInfoView(APIView):
- permission_classes = [IsCustomer, ]
- def post(self, request, *args, **kwargs):
- appid = request.POST.get('appid')
- openid = request.POST.get('openid')
- encryptedData = request.POST.get('encryptedData')
- iv = request.POST.get('iv')
- with transaction.atomic():
- face, name = request.customer.setInfo(appid, openid, encryptedData, iv)
- return response_ok({'face': face, 'name': name})
- class CustomerRefreshTokenView(RefreshJSONWebToken):
- def post(self, request, *args, **kwargs):
- try:
- ser = self.serializer_class(data=request.data)
- if ser.is_valid(raise_exception=True):
- return response_ok({'token': ser.validated_data['token']})
- except ValidationError as e:
- return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
- class CustomerVerifyTokenView(VerifyJSONWebToken):
- def post(self, request, *args, **kwargs):
- try:
- ser = self.serializer_class(data=request.data)
- if ser.is_valid(raise_exception=True):
- return response_ok({'token': ser.validated_data['token']})
- except ValidationError as e:
- return response_error(u'登录状态失效,请重新登录[' + e.detail['error'][0] + ']')
- class CustomerViewSet(CustomModelViewSet):
- permission_classes = [IsEmployee, ]
- queryset = Customer.objects.filter()
- serializer_class = CustomerSerializer
- def filter_queryset(self, queryset):
- queryset = queryset.filter()
- f = CustomerFilter(self.request.GET, queryset=queryset)
- return f.qs
- def list(self, request, *args, **kwargs):
- footer = {}
- queryset = self.filter_queryset(self.get_queryset())
- total_row = queryset.aggregate(
- balance=Sum('balance'), points=Sum('points'), success_count=Sum('success_count'),
- total_amount=Sum('total_amount'), total_point=Sum('total_point')
- )
- footer['total_balance'] = Formater.formatValueShow(total_row['balance'] or 0)
- footer['total_points'] = str(total_row['points'] or 0)
- footer['total_success_count'] = str(total_row['success_count'] or 0)
- footer['all_total_amount'] = Formater.formatValueShow(total_row['total_amount'] or 0)
- footer['all_total_point'] = str(total_row['total_point'] or 0)
- page = self.paginate_queryset(queryset)
- if page is not None:
- serializer = self.get_serializer(page, many=True)
- return self.get_paginated_response({'data': serializer.data, 'footer': footer})
- serializer = self.get_serializer(queryset, many=True)
- return response_ok({'data': serializer.data, 'footer': footer})
- @action(methods=['get'], detail=False)
- def export(self, request):
- queryset = self.filter_queryset(self.queryset)
- serializer = self.get_serializer(queryset, many=True)
- return response_ok(serializer.data)
|