VodBucket.py 10 KB

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