ServeManagementController.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import hashlib
  4. import json
  5. import time
  6. import urllib
  7. import uuid
  8. import boto3
  9. import threading
  10. import logging
  11. from boto3.session import Session
  12. from django.http import JsonResponse, HttpResponseRedirect, HttpResponse, StreamingHttpResponse
  13. from django.views.generic.base import View
  14. from Model.models import Device_Info, Role, MenuModel, VodBucketModel, CDKcontextModel, Store_Meal
  15. from Object.ResponseObject import ResponseObject
  16. from Object.TokenObject import TokenObject
  17. from Object.UidTokenObject import UidTokenObject
  18. from Service.CommonService import CommonService
  19. from django.db.models import Q, F
  20. from time import strftime
  21. class serveManagement(View):
  22. def get(self, request, *args, **kwargs):
  23. request.encoding = 'utf-8'
  24. operation = kwargs.get('operation')
  25. return self.validation(request.GET, request, operation)
  26. def post(self, request, *args, **kwargs):
  27. request.encoding = 'utf-8'
  28. operation = kwargs.get('operation')
  29. return self.validation(request.POST, request, operation)
  30. def validation(self, request_dict, request, operation):
  31. language = request_dict.get('language', 'en')
  32. response = ResponseObject(language, 'pc')
  33. if operation == '??':
  34. return 0
  35. else:
  36. tko = TokenObject(
  37. request.META.get('HTTP_AUTHORIZATION'),
  38. returntpye='pc')
  39. if tko.code != 0:
  40. return response.json(tko.code)
  41. response.lang = tko.lang
  42. userID = tko.userID
  43. if operation == 'getVodBucketList':
  44. return self.getVodBucketList(userID, request_dict, response)
  45. elif operation == 'addOrEditVodBucket':
  46. return self.addOrEditVodBucket(userID, request_dict, response)
  47. elif operation == 'getCdkList':
  48. return self.getCdkList(userID, request_dict, response)
  49. elif operation == 'createCdk':
  50. return self.createCdk(request_dict, response)
  51. elif operation == 'deleteCdk':
  52. return self.deleteCdk(request_dict, response)
  53. elif operation == 'downloadCDK':
  54. return self.downloadCDK(request_dict, response)
  55. else:
  56. return response.json(404)
  57. def getVodBucketList(self, userID, request_dict, response):
  58. # 获取存储桶列表
  59. pageNo = request_dict.get('pageNo', None)
  60. pageSize = request_dict.get('pageSize', None)
  61. if not all([pageNo, pageSize]):
  62. return response.json(444)
  63. page = int(pageNo)
  64. line = int(pageSize)
  65. try:
  66. vod_bucket_qs = VodBucketModel.objects.filter().all()
  67. count = vod_bucket_qs.count()
  68. vod_buckets = vod_bucket_qs[(page - 1) * line:page * line]
  69. vod_bucket_list = []
  70. for vod_bucket in vod_buckets:
  71. vod_bucket_list.append({
  72. 'bucket': vod_bucket.bucket,
  73. 'storeDay': vod_bucket.storeDay,
  74. 'content': vod_bucket.content,
  75. 'endpoint': vod_bucket.endpoint,
  76. 'area': vod_bucket.area,
  77. 'region': vod_bucket.region,
  78. 'is_free': vod_bucket.is_free,
  79. 'mold': vod_bucket.mold,
  80. 'region_id': vod_bucket.region_id,
  81. 'addTime': time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(vod_bucket.addTime)),
  82. 'updTime': time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(vod_bucket.updTime)),
  83. })
  84. print('vod_bucket_list: ', vod_bucket_list)
  85. return response.json(
  86. 0, {'list': vod_bucket_list, 'total': count})
  87. except Exception as e:
  88. print(e)
  89. return response.json(500, repr(e))
  90. def addOrEditVodBucket(self, userID, request_dict, response):
  91. # 添加/编辑存储桶
  92. print('request_dict: ', request_dict)
  93. try:
  94. return response.json(0)
  95. except Exception as e:
  96. print(e)
  97. return response.json(500, repr(e))
  98. def getCdkList(self, userID, request_dict, response):
  99. # 获取激活码列表
  100. pageNo = request_dict.get('pageNo', None)
  101. pageSize = request_dict.get('pageSize', None)
  102. cdk = request_dict.get('cdk', None)
  103. order = request_dict.get('order', None)
  104. is_activate = request_dict.get('is_activate', None)
  105. mold = request_dict.get('mold', None)
  106. lang = request_dict.get('lang', 'cn')
  107. if not all([pageNo, pageSize]):
  108. return response.json(444)
  109. page = int(pageNo)
  110. line = int(pageSize)
  111. try:
  112. if cdk:
  113. searchVal = cdk.strip()
  114. if order:
  115. searchVal = order.strip()
  116. if is_activate:
  117. searchVal = is_activate.strip()
  118. cdk_qs = CDKcontextModel.objects.filter().all()
  119. if cdk:
  120. cdk_qs = cdk_qs.filter(cdk__contains=searchVal)
  121. if order:
  122. cdk_qs = cdk_qs.filter(order__contains=searchVal)
  123. if is_activate:
  124. cdk_qs = cdk_qs.filter(is_activate=searchVal)
  125. if mold:
  126. cdk_qs = cdk_qs.filter(rank__bucket__mold=mold)
  127. cdk_qs = cdk_qs.filter(rank__lang__lang=lang)
  128. cdk_qs = cdk_qs.annotate(rank__title=F('rank__lang__title'))
  129. cdk_qs = cdk_qs.values('id', 'cdk', 'create_time', 'valid_time', 'is_activate', 'rank__id', 'rank__title',
  130. 'order',
  131. 'create_time','rank__bucket__mold')
  132. cdk_qs = cdk_qs.order_by('-create_time') # 根据CDK创建时间降序排序
  133. count = cdk_qs.count()
  134. cdk_qs = cdk_qs[(page - 1) * line:page * line]
  135. return response.json(
  136. 0, {'list': list(cdk_qs), 'total': count})
  137. except Exception as e:
  138. print(e)
  139. return response.json(500, repr(e))
  140. def createCdk(self, request_dict, response):
  141. cdk_num = request_dict.get("cdknum", None)
  142. mold = request_dict.get('mold', None)
  143. order = request_dict.get('order', None)
  144. cdk_list = []
  145. sm_qs = Store_Meal.objects.filter(pay_type__payment='cdk_pay',bucket__mold=mold)
  146. if sm_qs.exists:
  147. rank = sm_qs[0].id
  148. for i in range(int(cdk_num)):
  149. nowTime = int(time.time())
  150. cdk = hashlib.md5((str(uuid.uuid1()) + str(nowTime)).encode('utf-8')).hexdigest()
  151. cdk_model = CDKcontextModel(
  152. cdk=cdk,
  153. create_time=nowTime,
  154. valid_time=0,
  155. is_activate=0,
  156. rank_id=rank,
  157. order=order,
  158. )
  159. cdk_list.append(cdk_model)
  160. try:
  161. CDKcontextModel.objects.bulk_create(cdk_list)
  162. except Exception as e:
  163. print(repr(e))
  164. return response.json(404, repr(e))
  165. else:
  166. return response.json(0)
  167. return response.json(0)
  168. def deleteCdk(self, request_dict, response):
  169. cdk_id = request_dict.get("id", None)
  170. try:
  171. CDKcontextModel.objects.get(id=cdk_id).delete()
  172. return response.json(0)
  173. except Exception as e:
  174. return response.json(500, repr(e))
  175. def downloadCDK(self,request_dict, response):
  176. region = request_dict.get('region', None)
  177. content = ''
  178. if region == 'cn':
  179. # 下载国内未使用激活码
  180. content += '激活码(国内)\n'
  181. cdk_inactivate_qs = CDKcontextModel.objects.filter(is_activate=0, rank__bucket__mold=0).values('cdk')
  182. else:
  183. # 下载国外未使用激活码
  184. content += '激活码(国外)\n'
  185. cdk_inactivate_qs = CDKcontextModel.objects.filter(is_activate=0, rank__bucket__mold=1).values('cdk')
  186. for cdk_inactivate in cdk_inactivate_qs:
  187. content += cdk_inactivate['cdk'] + '\n'
  188. # print(content)
  189. response = StreamingHttpResponse(content)
  190. response['Content-Type'] = 'application/octet-stream'
  191. response['Content-Disposition'] = 'attachment;filename="CDK.txt"'
  192. return response