VodBucket.py 10 KB

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