VodBucket.py 9.3 KB

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