VodBucket.py 10 KB

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