Browse Source

新增app获取设备图标接口

locky 3 years ago
parent
commit
d992f13fc3
1 changed files with 44 additions and 16 deletions
  1. 44 16
      AdminController/DeviceManagementController.py

+ 44 - 16
AdminController/DeviceManagementController.py

@@ -5,18 +5,18 @@ import time
 
 import oss2
 from django.db import transaction
-from django.db.models import Q
+from django.db.models import Q, F
+from django.views.generic.base import View
 
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
+from Model.models import Device_Info, UidSetModel, LogModel, UID_Bucket, Unused_Uid_Meal, Order_Model, StsCrdModel, \
+    VodHlsModel, ExperienceContextModel, DeviceTypeModel, Equipment_Info, UidUserModel, ExperienceAiModel, AiService, \
+    AppBundle
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
-from django.views.generic.base import View
-
+from Service.CommonService import CommonService
 from Service.EquipmentInfoService import EquipmentInfoService
 from Service.ModelService import ModelService
-from Service.CommonService import CommonService
-from Model.models import Device_Info, UidSetModel, LogModel, UID_Bucket, Unused_Uid_Meal, Order_Model, StsCrdModel, \
-    VodHlsModel, ExperienceContextModel, DeviceTypeModel, Equipment_Info, UidUserModel, ExperienceAiModel, AiService
 
 
 class DeviceManagement(View):
@@ -37,6 +37,8 @@ class DeviceManagement(View):
             return self.addDeviceType(request, request_dict, response)
         elif operation == 'delDeviceData':  # 删除设备数据
             return self.del_device_data(request_dict, response)
+        elif operation == 'getDeviceIcon':  # app获取设备图标
+            return self.get_device_icon(request_dict, response)
         else:
             tko = TokenObject(
                 request.META.get('HTTP_AUTHORIZATION'),
@@ -47,13 +49,13 @@ class DeviceManagement(View):
             userID = tko.userID
             if not userID:
                 return response.json(444, 'userID')
-            if operation == 'getDeviceInfoList':    # 获取设备信息数据
+            if operation == 'getDeviceInfoList':  # 获取设备信息数据
                 return self.get_device_info_list(request_dict, response)
             elif operation == 'deleteDevice':
                 return self.deleteDevice(request_dict, response)
-            elif operation == 'resetVod':   # 重置云存
+            elif operation == 'resetVod':  # 重置云存
                 return self.resetVod(request, request_dict, response)
-            elif operation == 'resetAi':    # 重置AI
+            elif operation == 'resetAi':  # 重置AI
                 return self.reset_ai(request, request_dict, response)
             elif operation == 'resetPrimaryUser':
                 return self.resetPrimaryUser(request, request_dict, response)
@@ -80,7 +82,7 @@ class DeviceManagement(View):
         line = int(pageSize)
 
         try:
-            if UID or serialNumber or NickName or username:    # 条件查询
+            if UID or serialNumber or NickName or username:  # 条件查询
                 if UID:
                     device_info_qs = Device_Info.objects.filter(UID__contains=UID)
                 if serialNumber:
@@ -95,7 +97,7 @@ class DeviceManagement(View):
                 if not total:
                     return response.json(0, {'list': {}, 'total': 0})
                 device_info_qs = device_info_qs[(page - 1) * line:page * line]
-            else:   # 查询全部
+            else:  # 查询全部
                 total = Device_Info.objects.filter().count()
                 device_info_qs = Device_Info.objects.filter()[(page - 1) * line:page * line]
                 if not device_info_qs.exists():
@@ -108,13 +110,15 @@ class DeviceManagement(View):
                         # 设备的用户名和主用户
                         username = ModelService.get_user_name(device_info_list["datas"][k]['fields']['userID'])
                         device_info_list["datas"][k]['fields']['username'] = username
-                        device_info_list["datas"][k]['fields']['vodPrimaryMaster'] = device_info_list["datas"][k]['fields']['vodPrimaryMaster']
+                        device_info_list["datas"][k]['fields']['vodPrimaryMaster'] = \
+                            device_info_list["datas"][k]['fields']['vodPrimaryMaster']
                         # 设备类型,是否支持Alexa和ip
                         type = device_info_list["datas"][k]['fields']['Type']
                         device_type_qs = DeviceTypeModel.objects.filter(type=type).values('name')
                         if device_type_qs.exists():
                             device_info_list["datas"][k]['fields']['Type'] = device_type_qs[0]['name']
-                        uid_set_qs = UidSetModel.objects.filter(uid=device_info_list["datas"][k]['fields']['UID']).values('is_alexa', 'ip', 'version')
+                        uid_set_qs = UidSetModel.objects.filter(
+                            uid=device_info_list["datas"][k]['fields']['UID']).values('is_alexa', 'ip', 'version')
                         if uid_set_qs.exists():
                             isAlexa = '是' if uid_set_qs[0]['is_alexa'] else '否'
                             device_info_list["datas"][k]['fields']['isAlexa'] = isAlexa
@@ -138,7 +142,7 @@ class DeviceManagement(View):
                 Device_Info.objects.filter(id=deviceID).delete()
                 # 删除推送消息
                 for val in range(1, 8):
-                    EquipmentInfoService.get_equipment_info_model('', val).\
+                    EquipmentInfoService.get_equipment_info_model('', val). \
                         filter(device_user_id=userID, device_uid=uid).delete()
             return response.json(0)
         except Exception as e:
@@ -294,7 +298,7 @@ class DeviceManagement(View):
             # 上传文件到阿里云OSS
             auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
             bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'ansjer-static-resources')
-            key = 'device_type/' + icon     # 图片文件存放于 device_type 目录下
+            key = 'device_type/' + icon  # 图片文件存放于 device_type 目录下
             # https://oss.console.aliyun.com/bucket/oss-cn-shenzhen/ansjer-static-resources/object?path=device_type%2F
             bucket.put_object(key=key, data=iconFile)
             DeviceTypeModel.objects.create(name=name, model=model, type=type, ptz_type=ptz_type, icon=icon,
@@ -313,7 +317,7 @@ class DeviceManagement(View):
             return response.json(444)
         try:
             with transaction.atomic():
-                uidList = uidList.splitlines()      # 按行('\r', '\r\n', \n')切割字符串返回列表
+                uidList = uidList.splitlines()  # 按行('\r', '\r\n', \n')切割字符串返回列表
                 # 根据删除项删除相关数据
                 if '设备信息数据' in delDataOptions:
                     Device_Info.objects.filter(UID__in=uidList).delete()
@@ -338,3 +342,27 @@ class DeviceManagement(View):
         except Exception as e:
             print(e)
             return response.json(500, repr(e))
+
+    @staticmethod
+    def get_device_icon(request_dict, response):
+        lang = request_dict.get('lang', None)
+        app_bundle_id = request_dict.get('app_bundle_id', None)
+
+        if not all([lang, app_bundle_id]):
+            return response.json(444)
+        try:
+            app_bundle_qs = AppBundle.objects.filter(app_bundle_id=app_bundle_id,
+                                                     app_device_type__devicenamelanguage__lang=lang).annotate(
+                model=F('app_device_type__model'), type=F('app_device_type__type'), icon=F('app_device_type__icon'),
+                name=F('app_device_type__devicenamelanguage__name'), sort=F('app_device_type__devicenamelanguage__sort')).values('model', 'type', 'icon', 'name', 'sort')
+            dvr_list = [app_bundle for app_bundle in app_bundle_qs if app_bundle['model'] == 1]
+            ipc_list = [app_bundle for app_bundle in app_bundle_qs if app_bundle['model'] == 2]
+            print(dvr_list, ipc_list)
+            res = {
+                'deviceDvr': dvr_list,
+                'deviceIpc': ipc_list,
+            }
+            return response.json(0, res)
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))