CouponController.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import base64
  4. import json
  5. import os
  6. import time
  7. import math
  8. from django.views.generic.base import View
  9. from Model.models import CouponModel, Device_User, CouponConfigModel, CouponLang
  10. from Object.ResponseObject import ResponseObject
  11. from Object.TokenObject import TokenObject
  12. from django.db.models import Q, F, Count
  13. from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
  14. from Service.CommonService import CommonService
  15. # 优惠券
  16. class CouponView(View):
  17. def get(self, request, *args, **kwargs):
  18. request.encoding = 'utf-8'
  19. operation = kwargs.get('operation')
  20. return self.validation(request.GET, request, operation)
  21. def post(self, request, *args, **kwargs):
  22. request.encoding = 'utf-8'
  23. operation = kwargs.get('operation')
  24. return self.validation(request.POST, request, operation)
  25. def validation(self, request_dict, request, operation):
  26. response = ResponseObject()
  27. if operation is None:
  28. return response.json(444, 'error path')
  29. if operation == 'generateCoupon': # 用户优惠券
  30. return self.generate_coupon(request_dict, response)
  31. else:
  32. token = request_dict.get('token', None)
  33. tko = TokenObject(token)
  34. response.lang = tko.lang
  35. if tko.code != 0:
  36. return response.json(tko.code)
  37. userID = tko.userID
  38. if operation == 'UserCoupon': # 用户优惠券
  39. return self.query_user_coupon(request_dict, userID, response)
  40. else:
  41. return response.json(414)
  42. def generate_coupon(self, request_dict, response):
  43. username = request_dict.get('username', None)
  44. num = request_dict.get('num', None)
  45. userID = Device_User.objects.filter(username=username).values('userID')[0]['userID']
  46. coupon_config_id = request_dict.get('coupon_config_id', 1)
  47. try:
  48. data = []
  49. # CouponConfigModel.objects.create(type=1, use_range=1, coupon_discount=8)
  50. # CouponLangObj = CouponLang.objects.create(
  51. # lang='cn',
  52. # instruction='用于自动续费套餐的首月',
  53. # quota='八',
  54. # unit='折',
  55. # remark='每台摄像机上只能用一次'
  56. # )
  57. # CouponConfigModel.objects.get(id=1).lang.add(CouponLangObj.id)
  58. now_time = int(time.time())
  59. CouponModel.objects.create(
  60. use_status=0,
  61. distribute_time=now_time,
  62. valid_time=now_time+10000000,
  63. userID=userID,
  64. coupon_config_id=coupon_config_id,
  65. update_time=now_time,
  66. create_time=now_time
  67. )
  68. return HttpResponse('success')
  69. except Exception as e:
  70. return HttpResponse(
  71. "错误行数:{errLine}, 错误信息: {errmsg}".format(errLine=e.__traceback__.tb_lineno, errmsg=repr(e)))
  72. def query_user_coupon(self, request_dict, userID, response): # 用户优惠券列表
  73. now_time = int(time.time())
  74. lang = request_dict.get('lang', 'en')
  75. # couponObj = CouponModel.objects.filter(userID_id=userID, use_status=0, distributeTime__lte=now_time,
  76. # valid_time__gt=now_time).annotate(coupon_id=F('id')).values(
  77. # "coupon_id", "type", "coupon_discount", "valid_time")
  78. coupon_obj = CouponModel.objects.filter(
  79. userID=userID,
  80. use_status=0,
  81. distribute_time__lte=now_time,
  82. valid_time__gt=now_time,
  83. coupon_config__lang__lang=lang,
  84. ).annotate(
  85. coupon_id=F('id'),
  86. type=F('coupon_config__type'),
  87. coupon_discount=F('coupon_config__coupon_discount'),
  88. instruction=F('coupon_config__lang__instruction'),
  89. remark=F('coupon_config__lang__remark'),
  90. quota=F('coupon_config__lang__quota'),
  91. unit=F('coupon_config__lang__unit'),
  92. ).values(
  93. "coupon_id",
  94. "type",
  95. "coupon_discount",
  96. "valid_time",
  97. "instruction",
  98. "remark",
  99. "quota",
  100. "unit",
  101. )
  102. for couponList in coupon_obj:
  103. couponList['valid_time'] = CommonService.timestamp_to_str(couponList['valid_time'])
  104. result = {
  105. 'count': coupon_obj.count(),
  106. 'couponList': list(coupon_obj),
  107. }
  108. return response.json(0, result)