CouponController.py 4.4 KB

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