|
@@ -0,0 +1,174 @@
|
|
|
+# coding=utf-8
|
|
|
+
|
|
|
+import requests
|
|
|
+from django.db import transaction
|
|
|
+from rest_framework.views import APIView
|
|
|
+from rest_framework import generics
|
|
|
+from rest_framework.decorators import action
|
|
|
+from rest_framework_jwt.views import ObtainJSONWebToken,VerifyJSONWebToken,RefreshJSONWebToken
|
|
|
+from rest_framework.serializers import ValidationError
|
|
|
+from rest_framework import permissions
|
|
|
+
|
|
|
+from utils import response_ok, response_error
|
|
|
+from utils.exceptions import CustomError
|
|
|
+from utils.custom_modelviewset import CustomModelViewSet
|
|
|
+from utils.wx.WXBizDataCrypt import WXBizDataCrypt
|
|
|
+from utils.permission import IsCustomerUser
|
|
|
+from apps.images.models import Images
|
|
|
+from apps.customer.models import CustomerAddress
|
|
|
+from apps.customer.filters import CustomerAddressFilter
|
|
|
+from apps.foundation.models import Config
|
|
|
+from apps.account import tenant_log
|
|
|
+
|
|
|
+
|
|
|
+from .serializers import *
|
|
|
+
|
|
|
+
|
|
|
+class CustomerLoginView(APIView):
|
|
|
+ serializer_class = CustomerMobileSignSerializer
|
|
|
+
|
|
|
+ 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 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 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 = [IsCustomerUser, ]
|
|
|
+
|
|
|
+ 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')
|
|
|
+
|
|
|
+ customer_wechat = CustomerWechat.objects.filter(openid=openid, wechat_app__authorizer_appid=appid).first()
|
|
|
+ if not customer_wechat:
|
|
|
+ raise CustomError(u'未找到相应的微信客户!')
|
|
|
+ customer = request.customer
|
|
|
+ if customer_wechat.customer and customer_wechat.customer.id != customer.id:
|
|
|
+ raise CustomError(u'该微信已同步其他客户!')
|
|
|
+ if not customer_wechat.customer:
|
|
|
+ customer_wechat.customer = customer
|
|
|
+ customer_wechat.save()
|
|
|
+ pc = WXBizDataCrypt(customer_wechat.wechat_app.authorizer_appid, customer_wechat.session_key)
|
|
|
+ result = pc.decrypt(encryptedData, iv)
|
|
|
+ with transaction.atomic():
|
|
|
+ customer.setInfo(result['nickName'], result['gender'], result['avatarUrl'])
|
|
|
+ tenant_log(customer.user, BizLog.INSERT, u'客户设置信息,id=%d' % customer.id, result)
|
|
|
+ return response_ok()
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+class CustomerInfoView(generics.RetrieveAPIView):
|
|
|
+ permission_classes = [IsCustomerUser, ]
|
|
|
+ # queryset = Customer.objects.filter()
|
|
|
+ serializer_class = CustomerSerializer
|
|
|
+
|
|
|
+ def get_object(self):
|
|
|
+ # queryset = self.filter_queryset(self.get_queryset())
|
|
|
+ # obj = queryset.filter(id=self.request.customer.id).first()
|
|
|
+ obj = self.request.customer
|
|
|
+ return obj
|
|
|
+
|
|
|
+ def retrieve(self, request, *args, **kwargs):
|
|
|
+ instance = self.get_object()
|
|
|
+ serializer = self.get_serializer(instance)
|
|
|
+ return response_ok(serializer.data)
|
|
|
+
|
|
|
+
|
|
|
+class CustomerAddressViewSet(CustomModelViewSet):
|
|
|
+ permission_classes = [IsCustomerUser, ]
|
|
|
+ queryset = CustomerAddress.objects.filter(delete=False)
|
|
|
+ serializer_class = CustomerAddressSerializer
|
|
|
+
|
|
|
+ def filter_queryset(self, queryset):
|
|
|
+ queryset = queryset.filter(customer=self.request.customer)
|
|
|
+ f = CustomerAddressFilter(self.request.GET, queryset=queryset)
|
|
|
+ return f.qs
|
|
|
+
|
|
|
+ def list(self, request, *args, **kwargs):
|
|
|
+ queryset = self.filter_queryset(self.get_queryset())
|
|
|
+ serializer = self.get_serializer(queryset, many=True)
|
|
|
+ return response_ok(serializer.data)
|
|
|
+
|
|
|
+ def perform_create(self, serializer):
|
|
|
+ super(CustomerAddressViewSet, self).perform_create(serializer)
|
|
|
+ instance = serializer.instance
|
|
|
+ validated_data = serializer.validated_data
|
|
|
+ tenant_log(instance.customer.user, BizLog.INSERT, u'客户添加收货地址,id=%d' % instance.id, validated_data)
|
|
|
+
|
|
|
+ @action(methods=['post'], detail=True)
|
|
|
+ def addr_update(self, request, *args, **kwargs):
|
|
|
+ with transaction.atomic():
|
|
|
+ instance = self.get_object()
|
|
|
+ serializer = self.get_serializer(instance, data=request.data)
|
|
|
+ serializer.is_valid(raise_exception=True)
|
|
|
+ serializer.save()
|
|
|
+ instance = serializer.instance
|
|
|
+ validated_data = serializer.validated_data
|
|
|
+ tenant_log(instance.customer.user, BizLog.UPDATE, u'客户修改收货地址,id=%d' % instance.id, validated_data)
|
|
|
+ return response_ok()
|
|
|
+
|
|
|
+ @action(methods=['get'], detail=True)
|
|
|
+ def addr_destroy(self, request, *args, **kwargs):
|
|
|
+ with transaction.atomic():
|
|
|
+ instance = self.get_object()
|
|
|
+ queryset = self.get_queryset().filter(customer=self.request.customer).exclude(id=instance.id)
|
|
|
+ instance.destory(queryset)
|
|
|
+ tenant_log(instance.customer.user, BizLog.INSERT, u'客户删除收货地址,id=%d' % instance.id)
|
|
|
+ return response_ok()
|
|
|
+
|
|
|
+ @action(methods=['get'], detail=True)
|
|
|
+ def set_default(self, request, *args, **kwargs):
|
|
|
+ with transaction.atomic():
|
|
|
+ instance = self.get_object()
|
|
|
+ self.get_queryset().filter(customer=self.request.customer, default=True).update(default=False)
|
|
|
+ instance.default = True
|
|
|
+ instance.save()
|
|
|
+ tenant_log(instance.customer.user, BizLog.INSERT, u'客户设置默认收货地址,id=%d' % instance.id)
|
|
|
+ return response_ok()
|