views.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. # coding=utf-8
  2. import traceback
  3. from django.db import transaction
  4. from rest_framework import generics
  5. from rest_framework.exceptions import NotFound
  6. from rest_framework.views import APIView
  7. from rest_framework.viewsets import ModelViewSet
  8. from rest_framework.decorators import action
  9. from util import response_ok, response_error
  10. from util.wx.wechat import WeChat
  11. from util.permission import IsCustomerUser
  12. from util.exceptions import CustomError
  13. from apps.foundation.models import BizLog
  14. from apps.customer.order.serializers import OrderSerializer, MemberOrderSerializer, ActivityOrderSerializer
  15. from apps.activity.models import Activity, Order
  16. from apps.pay.models import Pay
  17. from apps.activity.filters import OrderFilter
  18. class OrderViewSet(ModelViewSet):
  19. permission_classes = [IsCustomerUser, ]
  20. serializer_class = OrderSerializer
  21. def create(self, request, *args, **kwargs):
  22. try:
  23. with transaction.atomic():
  24. serializer = self.get_serializer(data=request.data)
  25. serializer.is_valid(raise_exception=True)
  26. serializer.save()
  27. instance = serializer.instance
  28. validated_data = serializer.validated_data
  29. if instance.amount == 0:
  30. instance.status = Order.FINISH
  31. BizLog.objects.addnew(request.customer.user, BizLog.INSERT, u"添加商品订单,id=%d" % instance.id, validated_data)
  32. else:
  33. openid = request.POST.get('openid', None)
  34. if not openid:
  35. raise CustomError(u'未获取openid!')
  36. appid = request.POST.get('appid', None)
  37. WeChat.checkAppid(appid)
  38. pay, query_string = Pay.wechatPay(instance.branch, instance.member, instance.amount, openid)
  39. instance.pay = pay
  40. BizLog.objects.addnew(request.customer.user, BizLog.INSERT, u'添加商品订单,id=%d' % instance.id, validated_data)
  41. if query_string:
  42. return response_ok(query_string)
  43. except CustomError as e:
  44. return response_error(e.get_error_msg())
  45. except Exception as e:
  46. traceback.print_exc()
  47. return response_error(str(e))
  48. return response_ok()
  49. @action(methods=['post'], detail=True)
  50. def pay_order(self, request, pk):
  51. openid = request.POST.get('openid')
  52. appid = request.POST.get('appid')
  53. try:
  54. if not openid:
  55. raise CustomError(u'未获取openid!')
  56. WeChat.checkAppid(appid)
  57. order = Order.objects.filter(id=pk).first()
  58. if not order:
  59. raise CustomError(u'未找到相应的订单')
  60. order.activity.checkStatus()
  61. # 要不要设置一个时间 时间过了订单不能再支付 提示订单已过期 请重新下单 然后把订单状态改成失败
  62. with transaction.atomic():
  63. data = order.payOrder(openid)
  64. BizLog.objects.addnew(request.customer.user, BizLog.INSERT, u'支付订单,id=%d' % order.id, request.data)
  65. return response_ok(data)
  66. except CustomError as e:
  67. return response_error(e.get_error_msg())
  68. except Exception as e:
  69. traceback.print_exc()
  70. return response_error(str(e))
  71. class ActivityOrderListView(generics.ListAPIView):
  72. '''
  73. 小程序显示已有人购买订单列表-- 查询这个活动的订单记录(删除的也显示)
  74. '''
  75. queryset = Order.objects.filter(status=Order.FINISH)
  76. serializer_class = ActivityOrderSerializer
  77. def filter_queryset(self, queryset):
  78. activity_id = self.request.GET.get('activity_id')
  79. appid = self.request.GET.get('appid')
  80. activity = Activity.getById(activity_id)
  81. WeChat.checkAppid(appid)
  82. queryset = queryset.filter(activity=activity)
  83. f = OrderFilter(self.request.GET, queryset=queryset)
  84. return f.qs
  85. def list(self, request, *args, **kwargs):
  86. try:
  87. data = super(ActivityOrderListView, self).list(request)
  88. except NotFound:
  89. return response_ok([])
  90. return data
  91. class OrderListView(generics.ListAPIView):
  92. '''
  93. 小程序显示拼团订单--显示用户所有订单信息(删除的不显示)
  94. '''
  95. permission_classes = [IsCustomerUser, ]
  96. queryset = Order.objects.filter(delete=False)
  97. serializer_class = MemberOrderSerializer
  98. def filter_queryset(self, queryset):
  99. queryset = queryset.filter(member=self.request.customer)
  100. f = OrderFilter(self.request.GET, queryset=queryset)
  101. return f.qs