VodBucket.py 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  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 time
  16. import math
  17. from django.utils.decorators import method_decorator
  18. from django.views.decorators.csrf import csrf_exempt
  19. from django.views.generic.base import View
  20. from Model.models import VodBucketModel, UID_Bucket, Store_Meal,Device_Info
  21. from Object.ResponseObject import ResponseObject
  22. from Object.TokenObject import TokenObject
  23. from Service.ModelService import ModelService
  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. tko.valid()
  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_permission(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_dict, 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. tko.valid()
  113. response.lang = tko.lang
  114. if tko.code != 0:
  115. return response.json(tko.code)
  116. userID = tko.userID
  117. own_perm = ModelService.check_permission(userID, 50)
  118. if not own_perm:
  119. return response.json(404)
  120. if operation == 'add':
  121. return self.do_add(request_dict, response)
  122. elif operation == 'delete':
  123. return self.do_delete(request_dict, response)
  124. elif operation == 'update':
  125. return self.do_update(request_dict, response)
  126. elif operation == 'query':
  127. return self.do_query(request_dict, response)
  128. else:
  129. return response.json(414)
  130. def do_add(self, request_dict, response):
  131. rank = request_dict.get('rank', None)
  132. uid = request_dict.get('uid', None)
  133. channel = request_dict.get('channel', None)
  134. if not rank:
  135. return response.json(444, 'rank')
  136. dvqs = Device_Info.objects.filter(UID=uid)
  137. if not dvqs.exists():
  138. return response.json(10,'设备不存在')
  139. try:
  140. smqs = Store_Meal.objects.filter(id=rank).values("bucket__storeDay", "day", "bucket_id")
  141. if not smqs.exists():
  142. return response.json(10, '套餐信息不存在')
  143. bucketId = smqs[0]['bucket_id']
  144. addDay = smqs[0]['day']
  145. addTime = addDay * 3600 * 24
  146. nowTime = int(time.time())
  147. ubqs = UID_Bucket.objects.filter(uid=uid, channel=channel).values("bucket_id", "endTime",
  148. "bucket__storeDay")
  149. if ubqs.exists():
  150. if nowTime > ubqs[0]['endTime']:
  151. endTime = nowTime + addTime
  152. ubqs.update(endTime=nowTime + addTime)
  153. else:
  154. # 同一个bucket续费
  155. if bucketId == ubqs[0]['bucket_id']:
  156. endTime = ubqs[0]['endTime'] + addTime
  157. ubqs.update(endTime=endTime)
  158. else:
  159. if ubqs[0]['bucket__storeDay'] > smqs[0]['bucket__storeDay']:
  160. return response.json(10, '不可降级')
  161. else:
  162. origin_storeDay = int(ubqs[0]['bucket__storeDay'])
  163. upgrade_storeDay = int(smqs[0]['bucket__storeDay'])
  164. ctcTime = ubqs[0]['endTime'] - nowTime
  165. multiple = math.ceil(upgrade_storeDay / origin_storeDay)
  166. ubqs.update(endTime=ctcTime / multiple + addTime + ubqs[0]['endTime'])
  167. else:
  168. endTime = nowTime + addTime
  169. UID_Bucket.objects.create(uid=uid, channel=channel, bucket_id=bucketId, endTime=endTime)
  170. except Exception as e:
  171. return response.json(10, repr(e))
  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 = list(ubqs[(page - 1) * line:page * line])
  183. return response.json(0, res)
  184. def do_update(self, request_dict, response):
  185. status = request_dict.get('status', None)
  186. id = request_dict.get('id', None)
  187. ubqs = UID_Bucket.objects.filter(id=id).values('endTime')
  188. nowTime = int(time.time())
  189. endTime = ubqs[0]['endTime']
  190. if not ubqs.exists():
  191. return response.json(10, '未购买')
  192. if endTime > nowTime:
  193. ubqs.update(status=status)
  194. return response.json(0)
  195. else:
  196. return response.json(10, '过期了')
  197. def do_delete(self, request_dict, response):
  198. id = request_dict.get('id', None)
  199. try:
  200. page = int(request_dict.get('page', None))
  201. line = int(request_dict.get('line', None))
  202. UID_Bucket.objects.filter(id=id).delete()
  203. except Exception as e:
  204. return response.json(10, repr(e))
  205. uid = request_dict.get('uid', None)
  206. ubqs = UID_Bucket.objects
  207. if uid:
  208. ubqs = ubqs.filter(uid=uid)
  209. ubqs = ubqs.values('id', 'uid', 'channel', 'status', 'endTime', 'bucket__bucket',
  210. 'bucket__storeDay', 'bucket__area')
  211. res = list(ubqs[(page - 1) * line:page * line])
  212. return response.json(0, res)