IcloudManagementController.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import time
  4. from django.db.models import F, Q, Sum
  5. from django.views.generic.base import View
  6. from Model.models import Lang, ICloudStoreMeal, AiService, Order_Model, Device_User, CountryModel, UidSetModel, \
  7. Device_Info, VodBucketModel, IcloudUseDetails, IcloudService, IcloudStorageRecord
  8. from Object.AWS.AmazonS3Util import AmazonS3Util
  9. from Object.ResponseObject import ResponseObject
  10. from Object.TokenObject import TokenObject
  11. from Service.CommonService import CommonService
  12. from Ansjer.config import ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME, SERVER_DOMAIN, AWS_ACCESS_KEY_ID, \
  13. AWS_SECRET_ACCESS_KEY, SERVER_DOMAIN_SSL, OAUTH_ACCESS_TOKEN_SECRET
  14. class IcloudServeView(View):
  15. def get(self, request, *args, **kwargs):
  16. request.encoding = 'utf-8'
  17. operation = kwargs.get('operation')
  18. return self.validation(request.GET, request, operation)
  19. def post(self, request, *args, **kwargs):
  20. request.encoding = 'utf-8'
  21. operation = kwargs.get('operation')
  22. return self.validation(request.POST, request, operation)
  23. def validation(self, request_dict, request, operation):
  24. language = request_dict.get('language', 'en')
  25. response = ResponseObject(language, 'pc')
  26. if operation == 'xxx': # 不认证token接口
  27. pass
  28. else:
  29. tko = TokenObject(
  30. request.META.get('HTTP_AUTHORIZATION'),
  31. returntpye='pc')
  32. if tko.code != 0:
  33. return response.json(tko.code)
  34. response.lang = tko.lang
  35. user_id = tko.userID
  36. # ai套餐信息相关
  37. if operation == 'getIcloudStoreMealList':
  38. return self.get_icloud_store_meal_list(request_dict, response)
  39. elif operation == 'addOrEditIcloudStoreMeal':
  40. return self.add_or_edit_icloud_store_meal(request_dict, response)
  41. elif operation == 'getMealLang':
  42. return self.get_meal_lang(request_dict, response)
  43. # ai套餐语言相关
  44. elif operation == 'addOrEditLang':
  45. return self.add_or_edit_lang(request_dict, response)
  46. elif operation == 'deleteMeal':
  47. return self.delete_meal(request_dict, response)
  48. elif operation == 'getUserIcloudInfo':
  49. return self.get_user_icloud_info(request_dict, response)
  50. # 设备ai套餐相关
  51. elif operation == 'resetIcloud':
  52. return self.reset_icloud(request_dict, response)
  53. # ai用户信息相关
  54. elif operation == 'getAiUserList':
  55. return self.getAiUserList(request_dict, response)
  56. # ai服务开通数量数据
  57. elif operation == 'getAiDataList':
  58. return self.getAiDataList(request_dict, response)
  59. else:
  60. return response.json(404)
  61. @staticmethod
  62. def get_icloud_store_meal_list(request_dict, response):
  63. is_select = request_dict.get('isSelect', None)
  64. page = request_dict.get('pageNo', None)
  65. line = request_dict.get('pageSize', None)
  66. if is_select:
  67. # 获取套餐ID作为选项
  68. icloud_meal_qs = ICloudStoreMeal.objects.filter().values('id')
  69. return response.json(0, {'list': CommonService.qs_to_list(icloud_meal_qs)})
  70. if not all([page, line]):
  71. return response.json(444)
  72. page = int(page)
  73. line = int(line)
  74. try:
  75. icloud_meal_qs = ICloudStoreMeal.objects.values()
  76. total = icloud_meal_qs.count()
  77. icloud_meals = icloud_meal_qs[(page - 1) * line:page * line]
  78. icloud_meal_list = []
  79. for icloud_meal in icloud_meals:
  80. # 获取支付方式列表
  81. pay_type_list = list(
  82. ICloudStoreMeal.objects.filter(id=icloud_meal['id']).values('pay_type__id', 'pay_type__payment'))
  83. # 获取存储桶信息
  84. vod_bucket_qs = VodBucketModel.objects.filter(id=icloud_meal['bucket_id']).values('bucket')
  85. # 组织响应数据
  86. icloud_meal_list.append({
  87. 'IcloudMealID': icloud_meal['id'],
  88. 'price': icloud_meal['price'],
  89. 'symbol': icloud_meal['symbol'],
  90. 'currency': icloud_meal['currency'],
  91. 'is_show': icloud_meal['is_show'],
  92. 'is_delete': icloud_meal['is_delete'],
  93. 'expire': icloud_meal['expire'],
  94. 'pay_type': pay_type_list,
  95. 'size': icloud_meal['size'],
  96. 'bucket': vod_bucket_qs[0]['bucket'],
  97. 'addTime': icloud_meal['add_time'].strftime("%Y-%m-%d %H:%M:%S"),
  98. 'updTime': icloud_meal['update_time'].strftime("%Y-%m-%d %H:%M:%S"),
  99. })
  100. return response.json(0, {'list': icloud_meal_list, 'total': total})
  101. except Exception as e:
  102. return response.json(500, repr(e))
  103. @staticmethod
  104. def add_or_edit_icloud_store_meal(request_dict, response):
  105. # 添加/编辑套餐
  106. meal_id = request_dict.get('MealID', None)
  107. expire = int(request_dict.get('expire', None))
  108. price = request_dict.get('price', None)
  109. currency = request_dict.get('currency', None)
  110. symbol = request_dict.get('symbol', None)
  111. pay_type = request_dict.get('pay_type', None)
  112. is_show = int(request_dict.get('is_show', 1))
  113. is_delete = int(request_dict.get('is_delete', 0))
  114. size = float(request_dict.get('size', None))
  115. is_edit = request_dict.get('isEdit', None)
  116. if not all([expire, price, currency, symbol, pay_type, size]):
  117. return response.json(444)
  118. pay_type = pay_type.split(',')
  119. try:
  120. icloud_store_meal_data = {
  121. 'expire': expire,
  122. 'price': price,
  123. 'currency': currency,
  124. 'symbol': symbol,
  125. 'is_show': is_show,
  126. 'size': size,
  127. 'is_delete': is_delete
  128. }
  129. if is_edit:
  130. if not meal_id:
  131. return response.json(444)
  132. ICloudStoreMeal.objects.filter(id=meal_id).update(**icloud_store_meal_data)
  133. ICloudStoreMeal.objects.get(id=meal_id).pay_type.set(pay_type)
  134. else:
  135. icloud_meal_qs = ICloudStoreMeal.objects.create(**icloud_store_meal_data)
  136. icloud_meal_qs.pay_type.set(pay_type)
  137. return response.json(0)
  138. except Exception as e:
  139. print(e)
  140. return response.json(500, repr(e))
  141. @staticmethod
  142. def delete_meal(request_dict, response):
  143. meal_id = request_dict.get('meal_id', None)
  144. if not meal_id:
  145. return response.json(444)
  146. icloud_meal_qs = ICloudStoreMeal.objects.filter(id=meal_id).values('lang__id')
  147. lang = Lang.objects.filter(id=icloud_meal_qs[0]['lang__id'])
  148. icloud_meal_qs = ICloudStoreMeal.objects.get(id=meal_id)
  149. icloud_meal_qs.lang.remove(*lang)
  150. icloud_meal_qs.delete()
  151. return response.json(0)
  152. @staticmethod
  153. def get_meal_lang(request_dict, response):
  154. is_select = request_dict.get('isSelect', None)
  155. meal_id = request_dict.get('mealId', None)
  156. page = request_dict.get('pageNo', None)
  157. line = request_dict.get('pageSize', None)
  158. if not all([page, line]):
  159. return response.json(444)
  160. icloud_meal_qs = ICloudStoreMeal.objects.all()
  161. if is_select:
  162. icloud_meal_qs = icloud_meal_qs.values('id', 'lang__title')
  163. else:
  164. if meal_id:
  165. icloud_meal_qs = icloud_meal_qs.filter(id=meal_id).values('id', 'lang__id', 'lang__lang', 'lang__title',
  166. 'lang__content')
  167. else:
  168. icloud_meal_qs = icloud_meal_qs.values('id', 'lang__id', 'lang__lang', 'lang__title',
  169. 'lang__content')[(page - 1) * line:page * line]
  170. total = icloud_meal_qs.count()
  171. return response.json(0, {'langList': list(icloud_meal_qs), 'total': total})
  172. @staticmethod
  173. def add_or_edit_lang(request_dict, response):
  174. lang_id = request_dict.get('lang_id', None)
  175. lang = request_dict.get('lang', 'en')
  176. title = request_dict.get('title', None)
  177. content = request_dict.get('content', None)
  178. try:
  179. if lang_id:
  180. Lang.objects.filter(id=lang_id).update(lang=lang, title=title, content=content)
  181. else:
  182. Lang.objects.create(lang=lang, title=title, content=content, type=3)
  183. return response.json(0)
  184. except Exception as e:
  185. return response.json(500)
  186. @staticmethod
  187. def delete_lang(request_dict, response):
  188. lang_id = request_dict.get('lang_id', None)
  189. meal_id = request_dict.get('meal_id', None)
  190. if not all([lang_id, meal_id]):
  191. return response.json(444)
  192. try:
  193. lang = Lang.objects.filter(id=lang_id)
  194. icloud_meal_qs = ICloudStoreMeal.objects.get(id=meal_id)
  195. icloud_meal_qs.lang.remove(*lang)
  196. lang.delete()
  197. return response.json(0)
  198. except Exception as e:
  199. return response.json(500)
  200. @staticmethod
  201. def get_user_icloud_info(request_dict, response):
  202. user_id = request_dict.get('user_id', None)
  203. page = request_dict.get('pageNo', None)
  204. line = request_dict.get('pageSize', None)
  205. if not all([page, line]):
  206. return response.json(444)
  207. now_time = int(time.time())
  208. try:
  209. icloud_user_qs = IcloudUseDetails.objects.all()
  210. if user_id:
  211. icloud_user_qs = icloud_user_qs.filter(user_id=user_id)
  212. icloud_user_qs = icloud_user_qs.values('use_size', 'user_id', 'detect_status', 'bucket_id',
  213. 'id')
  214. for item in icloud_user_qs:
  215. use_details_id = item['id']
  216. user_id = item['user_id']
  217. bucket_id = item['bucket_id']
  218. user_qs = Device_User.objects.filter(userID=user_id).values('NickName')
  219. item['username'] = user_qs[0]['NickName']
  220. bucket_qs = VodBucketModel.objects.filter(id=bucket_id).values('bucket')
  221. item['bucket_name'] = bucket_qs[0]['bucket']
  222. all_size = IcloudService.objects.filter(Q(use_details_id=use_details_id), Q(use_status=0),
  223. Q(end_time__gt=now_time) | Q(end_time=0)).values(
  224. 'size').aggregate(total_size=Sum('size'))['total_size']
  225. item['all_size'] = float(all_size * 1024) if all_size else 0 # 转换单位为MB
  226. return response.json(0, list(icloud_user_qs))
  227. except Exception as e:
  228. return response.json(500)
  229. @staticmethod
  230. def reset_icloud(request_dict, response):
  231. use_details_id = request_dict.get('id', None)
  232. if not all([use_details_id]):
  233. return response.json(444)
  234. try:
  235. icloud_use_qs = IcloudUseDetails.objects.filter(id=use_details_id).values('user_id')
  236. user_id = icloud_use_qs[0]['user_id']
  237. icloud_record = IcloudStorageRecord.objects.filter(user_id=user_id).values('bucket_id',)
  238. bucket_id = icloud_record[0]['bucket_id']
  239. bucket_qs = VodBucketModel.objects.filter(id=bucket_id).values('bucket', 'region', 'mold')
  240. if not bucket_qs.exists():
  241. return response.json(173)
  242. bucket_name = bucket_qs[0]['bucket']
  243. bucket_region = bucket_qs[0]['region']
  244. mold = bucket_qs[0]['mold']
  245. s3_obj = AmazonS3Util(
  246. AWS_ACCESS_KEY_ID[mold],
  247. AWS_SECRET_ACCESS_KEY[mold],
  248. bucket_region
  249. )
  250. key_name = '{user_id}'.format(user_id=user_id)
  251. object_list = s3_obj.get_object_list(bucket_name, key_name)
  252. for obj in object_list:
  253. s3_obj.delete_obj(bucket_name, obj['Key'])
  254. icloud_record.delete()
  255. icloud_use_qs.update(use_size=0)
  256. return response.json(0)
  257. except Exception as e:
  258. return response.json(500)