VodBucket.py 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
  5. @AUTHOR: ASJRD018
  6. @NAME: AnsjerFormal
  7. @software: PyCharm
  8. @DATE: 2018/12/15 15:30
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. @file: VodBucket.py
  12. @Contact: chanjunkai@163.com
  13. """
  14. import json
  15. import math
  16. from django.utils.decorators import method_decorator
  17. from django.views.decorators.csrf import csrf_exempt
  18. from django.views.generic.base import View
  19. from Model.models import VodBucketModel, UID_Bucket, Store_Meal, Device_Info
  20. from Object.ResponseObject import ResponseObject
  21. from Object.TokenObject import TokenObject
  22. from Service.CommonService import CommonService
  23. from Service.ModelService import ModelService
  24. import time
  25. class VodBucketView(View):
  26. @method_decorator(csrf_exempt)
  27. def dispatch(self, *args, **kwargs):
  28. return super(VodBucketView, self).dispatch(*args, **kwargs)
  29. def get(self, request, *args, **kwargs):
  30. request.encoding = 'utf-8'
  31. operation = kwargs.get('operation')
  32. return self.validation(request.GET, operation)
  33. def post(self, request, *args, **kwargs):
  34. request.encoding = 'utf-8'
  35. operation = kwargs.get('operation')
  36. request_dict = json.loads(request.body.decode('utf-8'))
  37. return self.validation(request_dict, operation)
  38. def validation(self, request_dict, operation):
  39. response = ResponseObject()
  40. if operation is None:
  41. return response.json(444, 'error path')
  42. token = request_dict.get('token', None)
  43. # 设备主键uid
  44. tko = TokenObject(token)
  45. response.lang = tko.lang
  46. if tko.code != 0:
  47. return response.json(tko.code)
  48. userID = tko.userID
  49. own_perm = ModelService.check_perm(userID, 50)
  50. if not own_perm:
  51. return response.json(404)
  52. if operation == 'add':
  53. return self.do_add(request_dict, response)
  54. elif operation == 'delete':
  55. return self.do_delete(request_dict, response)
  56. elif operation == 'update':
  57. return self.do_update(request_dict, response)
  58. elif operation == 'query':
  59. return self.do_query(response)
  60. else:
  61. return response.json(414)
  62. def do_add(self, request_dict, response):
  63. request_dict.pop('token')
  64. nowTime = int(time.time())
  65. try:
  66. VodBucketModel.objects.create(addTime=nowTime, updTime=nowTime, **request_dict)
  67. except Exception as e:
  68. return response.json(10, repr(e))
  69. res = list(VodBucketModel.objects.values())
  70. return response.json(0, res)
  71. def do_query(self, response):
  72. res = list(VodBucketModel.objects.values())
  73. return response.json(0, res)
  74. def do_update(self, request_dict, response):
  75. request_dict.pop('token')
  76. nowTime = int(time.time())
  77. id = request_dict.get('id', None)
  78. try:
  79. VodBucketModel.objects.filter(id=id).update(updTime=nowTime, **request_dict)
  80. except Exception as e:
  81. return response.json(10, repr(e))
  82. # res = list(VodBucketModel.objects.values())
  83. return response.json(0, {'updTime': nowTime})
  84. def do_delete(self, request, response):
  85. id = request.get('id', None)
  86. try:
  87. VodBucketModel.objects.filter(id=id).delete()
  88. except Exception as e:
  89. return response.json(10, repr(e))
  90. res = list(VodBucketModel.objects.values())
  91. return response.json(0, res)
  92. class UidBucketView(View):
  93. @method_decorator(csrf_exempt)
  94. def dispatch(self, *args, **kwargs):
  95. return super(UidBucketView, self).dispatch(*args, **kwargs)
  96. def get(self, request, *args, **kwargs):
  97. request.encoding = 'utf-8'
  98. operation = kwargs.get('operation')
  99. return self.validation(request.GET, operation)
  100. def post(self, request, *args, **kwargs):
  101. request.encoding = 'utf-8'
  102. operation = kwargs.get('operation')
  103. # request_dict = json.loads(request.body.decode('utf-8'))
  104. return self.validation(request.POST, operation)
  105. def validation(self, request_dict, operation):
  106. response = ResponseObject()
  107. if operation is None:
  108. return response.json(444, 'error path')
  109. token = request_dict.get('token', None)
  110. # 设备主键uid
  111. tko = TokenObject(token)
  112. response.lang = tko.lang
  113. if tko.code != 0:
  114. return response.json(tko.code)
  115. userID = tko.userID
  116. own_perm = ModelService.check_perm(userID, 50)
  117. if not own_perm:
  118. return response.json(404)
  119. if operation == 'add':
  120. return self.do_add(request_dict, response)
  121. elif operation == 'delete':
  122. return self.do_delete(request_dict, response)
  123. elif operation == 'update':
  124. return self.do_update(request_dict, response)
  125. elif operation == 'query':
  126. return self.do_query(request_dict, response)
  127. else:
  128. return response.json(414)
  129. def do_add(self, request_dict, response):
  130. rank = request_dict.get('rank', None)
  131. uid = request_dict.get('uid', None)
  132. channel = request_dict.get('channel', None)
  133. if not rank:
  134. return response.json(444, 'rank')
  135. dvqs = Device_Info.objects.filter(UID=uid)
  136. if not dvqs.exists():
  137. return response.json(10, '设备不存在')
  138. try:
  139. smqs = Store_Meal.objects.filter(id=rank).values("bucket__storeDay", "day", "bucket_id")
  140. if not smqs.exists():
  141. return response.json(10, '套餐信息不存在')
  142. bucketId = smqs[0]['bucket_id']
  143. addDay = smqs[0]['day']
  144. addTime = addDay * 3600 * 24
  145. nowTime = int(time.time())
  146. ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel).values("bucket_id", "endTime",
  147. "bucket__storeDay")
  148. if ubqs.exists():
  149. if nowTime > ubqs[0]['endTime']:
  150. endTime = nowTime + addTime
  151. ubqs.update(endTime=nowTime + addTime)
  152. else:
  153. # 同一个bucket续费
  154. if bucketId == ubqs[0]['bucket_id']:
  155. endTime = ubqs[0]['endTime'] + addTime
  156. ubqs.update(endTime=endTime)
  157. else:
  158. if ubqs[0]['bucket__storeDay'] > smqs[0]['bucket__storeDay']:
  159. return response.json(10, '不可降级')
  160. else:
  161. origin_storeDay = int(ubqs[0]['bucket__storeDay'])
  162. upgrade_storeDay = int(smqs[0]['bucket__storeDay'])
  163. ctcTime = ubqs[0]['endTime'] - nowTime
  164. multiple = math.ceil(upgrade_storeDay / origin_storeDay)
  165. ubqs.update(endTime=ctcTime / multiple + addTime + ubqs[0]['endTime'])
  166. else:
  167. endTime = nowTime + addTime
  168. UID_Bucket.objects.create(uid=uid, channel=channel, bucket_id=bucketId, endTime=endTime)
  169. except Exception as e:
  170. return response.json(10, repr(e))
  171. else:
  172. return response.json(0, {'endTime': endTime})
  173. def do_query(self, request_dict, response):
  174. page = int(request_dict.get('page', None))
  175. line = int(request_dict.get('line', None))
  176. uid = request_dict.get('uid', None)
  177. ubqs = UID_Bucket.objects
  178. if uid:
  179. ubqs = ubqs.filter(uid=uid)
  180. ubqs = ubqs.values('id', 'uid', 'channel', 'status', 'endTime', 'bucket__bucket',
  181. 'bucket__storeDay', 'bucket__area')
  182. res = {
  183. 'datas': list(ubqs[(page - 1) * line:page * line]),
  184. 'count': ubqs.count()
  185. }
  186. return response.json(0, res)
  187. def do_update(self, request_dict, response):
  188. status = request_dict.get('status', None)
  189. id = request_dict.get('id', None)
  190. ubqs = UID_Bucket.objects.filter(id=id).values('endTime')
  191. nowTime = int(time.time())
  192. endTime = ubqs[0]['endTime']
  193. if not ubqs.exists():
  194. return response.json(10, '未购买')
  195. if endTime > nowTime:
  196. ubqs.update(status=status)
  197. return response.json(0)
  198. else:
  199. return response.json(10, '过期了')
  200. def do_delete(self, request_dict, response):
  201. id = request_dict.get('id', None)
  202. try:
  203. page = int(request_dict.get('page', None))
  204. line = int(request_dict.get('line', None))
  205. UID_Bucket.objects.filter(id=id).delete()
  206. except Exception as e:
  207. return response.json(10, repr(e))
  208. uid = request_dict.get('uid', None)
  209. ubqs = UID_Bucket.objects
  210. if uid:
  211. ubqs = ubqs.filter(uid=uid)
  212. ubqs = ubqs.values('id', 'uid', 'channel', 'status', 'endTime', 'bucket__bucket',
  213. 'bucket__storeDay', 'bucket__area')
  214. res = {
  215. 'datas': list(ubqs[(page - 1) * line:page * line]),
  216. 'count': ubqs.count()
  217. }
  218. return response.json(0, res)