DeviceManagementController.py 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import json
  4. import time
  5. from django.db import transaction
  6. from django.db.models import Q
  7. from Object.ResponseObject import ResponseObject
  8. from Object.TokenObject import TokenObject
  9. from django.views.generic.base import View
  10. from Service.ModelService import ModelService
  11. from Service.CommonService import CommonService
  12. from Model.models import Device_Info, UidSetModel, LogModel, UID_Bucket, Unused_Uid_Meal, Order_Model, StsCrdModel, \
  13. VodHlsModel, ExperienceContextModel, DeviceTypeModel
  14. class DeviceManagement(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. tko = TokenObject(
  27. request.META.get('HTTP_AUTHORIZATION'),
  28. returntpye='pc')
  29. if tko.code != 0:
  30. return response.json(tko.code)
  31. response.lang = tko.lang
  32. userID = tko.userID
  33. if not userID:
  34. return response.json(444, 'userID')
  35. if operation == 'getDeviceInfoList':
  36. return self.getDeviceInfoList(request_dict, response)
  37. elif operation == 'deleteDevice':
  38. return self.deleteDevice(request_dict, response)
  39. elif operation == 'resetVod':
  40. return self.resetVod(request, request_dict, response)
  41. elif operation == 'resetPrimaryUser':
  42. return self.resetPrimaryUser(request, request_dict, response)
  43. elif operation == 'getDeviceTypeList':
  44. return self.getDeviceTypeList(request_dict, response)
  45. else:
  46. return response.json(444, 'operation')
  47. # 获取设备信息数据
  48. def getDeviceInfoList(self, request_dict, response):
  49. pageNo = request_dict.get('pageNo', None)
  50. pageSize = request_dict.get('pageSize', None)
  51. UID = request_dict.get('UID', None)
  52. NickName = request_dict.get('NickName', None)
  53. username = request_dict.get('username', None)
  54. if not all([pageNo, pageSize]):
  55. return response.json(444)
  56. page = int(pageNo)
  57. line = int(pageSize)
  58. try:
  59. if UID or NickName or username: # 条件查询
  60. if UID:
  61. device_info_qs = Device_Info.objects.filter(UID__contains=UID)
  62. if NickName:
  63. device_info_qs = Device_Info.objects.filter(NickName__contains=NickName)
  64. if username:
  65. device_info_qs = Device_Info.objects.filter(Q(userID__username__contains=username) |
  66. Q(userID__userEmail__contains=username) |
  67. Q(userID__phone__contains=username))
  68. total = len(device_info_qs)
  69. if not total:
  70. return response.json(0, {'list': {}, 'total': 0})
  71. device_info_qs = device_info_qs[(page - 1) * line:page * line]
  72. else: # 查询全部
  73. total = Device_Info.objects.filter().count()
  74. device_info_qs = Device_Info.objects.filter()[(page - 1) * line:page * line]
  75. if not device_info_qs.exists():
  76. return response.json(0, {'list': {}, 'total': 0})
  77. device_info_list = CommonService.qs_to_dict(device_info_qs)
  78. for k, v in enumerate(device_info_list["datas"]):
  79. for device_info in device_info_qs:
  80. if v['pk'] == device_info.id:
  81. # 设备的用户名和主用户
  82. username = ModelService.get_user_name(device_info_list["datas"][k]['fields']['userID'])
  83. device_info_list["datas"][k]['fields']['username'] = username
  84. device_info_list["datas"][k]['fields']['vodPrimaryMaster'] = device_info_list["datas"][k]['fields']['vodPrimaryMaster']
  85. # 设备类型,是否支持Alexa和ip
  86. type = device_info_list["datas"][k]['fields']['Type']
  87. device_type_qs = DeviceTypeModel.objects.filter(type=type).values('name')
  88. if device_type_qs.exists():
  89. device_info_list["datas"][k]['fields']['Type'] = device_type_qs[0]['name']
  90. uid_set_qs = UidSetModel.objects.filter(uid=device_info_list["datas"][k]['fields']['UID']).values('is_alexa', 'ip')
  91. if uid_set_qs.exists():
  92. isAlexa = '是' if uid_set_qs[0]['is_alexa'] else '否'
  93. device_info_list["datas"][k]['fields']['isAlexa'] = isAlexa
  94. device_info_list["datas"][k]['fields']['ip'] = uid_set_qs[0]['ip']
  95. return response.json(0, {'list': device_info_list, 'total': total})
  96. except Exception as e:
  97. print(e)
  98. return response.json(500, repr(e))
  99. # 根据id删除设备
  100. def deleteDevice(self, request_dict, response):
  101. deviceID = request_dict.get('deviceID', None)
  102. if not deviceID:
  103. return response.json(444)
  104. try:
  105. Device_Info.objects.filter(id=deviceID).delete()
  106. return response.json(0)
  107. except Exception as e:
  108. print(e)
  109. return response.json(500, repr(e))
  110. # 重置设备主用户
  111. def resetPrimaryUser(self, request, request_dict, response):
  112. uid = request_dict.get('uid', None)
  113. if not uid:
  114. return response.json(404)
  115. try:
  116. # 记录操作日志
  117. ip = CommonService.get_ip_address(request)
  118. content = json.loads(json.dumps(request_dict))
  119. log = {
  120. 'ip': ip,
  121. 'user_id': 2,
  122. 'status': 200,
  123. 'time': int(time.time()),
  124. 'url': 'deviceManagement/resetPrimaryUser',
  125. 'content': json.dumps(content),
  126. 'operation': '{}重置设备主用户'.format(uid),
  127. }
  128. LogModel.objects.create(**log)
  129. Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
  130. return response.json(0)
  131. except Exception as e:
  132. return response.json(500, repr(e))
  133. # 重置设备云存
  134. def resetVod(self, request, request_dict, response):
  135. uid = request_dict.get('uid', None)
  136. if not uid:
  137. return response.json(404)
  138. try:
  139. # 记录操作日志
  140. ip = CommonService.get_ip_address(request)
  141. content = json.loads(json.dumps(request_dict))
  142. log = {
  143. 'ip': ip,
  144. 'user_id': 2,
  145. 'status': 200,
  146. 'time': int(time.time()),
  147. 'url': 'deviceManagement/resetVod',
  148. 'content': json.dumps(content),
  149. 'operation': '{}重置设备云存'.format(uid),
  150. }
  151. with transaction.atomic():
  152. LogModel.objects.create(**log)
  153. # 删除和更新设备云存相关数据
  154. UID_Bucket.objects.filter(uid=uid).delete()
  155. Unused_Uid_Meal.objects.filter(uid=uid).delete()
  156. Order_Model.objects.filter(UID=uid).delete()
  157. StsCrdModel.objects.filter(uid=uid).delete()
  158. VodHlsModel.objects.filter(uid=uid).delete()
  159. ExperienceContextModel.objects.filter(uid=uid).delete()
  160. Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
  161. return response.json(0)
  162. except Exception as e:
  163. print(e)
  164. return response.json(500, repr(e))
  165. # 获取设备类型数据
  166. def getDeviceTypeList(self, request_dict, response):
  167. deviceType = request_dict.get('deviceType', None)
  168. try:
  169. return response.json(0)
  170. except Exception as e:
  171. print(e)
  172. return response.json(500, repr(e))