Browse Source

更新首页获取数据V3接口代码

zhangdongming 2 năm trước cách đây
mục cha
commit
677d85b639

+ 35 - 151
Controller/EquipmentManagerV3.py

@@ -16,12 +16,14 @@ from Controller.CheckUserData import RandomStr
 from Controller.DeviceConfirmRegion import Device_Region
 from Controller.DeviceConfirmRegion import Device_Region
 from Controller.SensorGateway.EquipmentFamilyController import EquipmentFamilyView
 from Controller.SensorGateway.EquipmentFamilyController import EquipmentFamilyView
 from Model.models import Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidChannelSetModel, \
 from Model.models import Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidChannelSetModel, \
-    Device_User, iotdeviceInfoModel, UIDCompanySerialModel, UIDModel, UnicomDeviceInfo, CountryModel
+    Device_User, iotdeviceInfoModel, UIDCompanySerialModel, UnicomDeviceInfo, CountryModel, \
+    DeviceCloudPhotoInfo
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 from Service.EquipmentInfoService import EquipmentInfoService
 from Service.EquipmentInfoService import EquipmentInfoService
 from Service.ModelService import ModelService
 from Service.ModelService import ModelService
+from Service.UserDeviceService import UserDeviceService
 
 
 LOGGER = logging.getLogger('info')
 LOGGER = logging.getLogger('info')
 
 
@@ -606,15 +608,19 @@ class EquipmentManagerV3(View):
         UidChannelSetModel.objects.filter(uid__uid=uid).update(channel_name=channel_name)
         UidChannelSetModel.objects.filter(uid__uid=uid).update(channel_name=channel_name)
         return response.json(0)
         return response.json(0)
 
 
-    # 新查询设备字段
     def do_query(self, userID, request_dict, response):
     def do_query(self, userID, request_dict, response):
+        """
+        首页查询设备列表
+        @param userID: 用户id
+        @param request_dict: 请求参数
+        @param response: 响应结果
+        """
         token = request_dict.get('token', None)
         token = request_dict.get('token', None)
         page = request_dict.get('page', None)
         page = request_dict.get('page', None)
         line = request_dict.get('line', None)
         line = request_dict.get('line', None)
         NickName = request_dict.get('NickName', None)
         NickName = request_dict.get('NickName', None)
         if not token or not page or not line:
         if not token or not page or not line:
             return response.json(444)
             return response.json(444)
-
         page = int(page)
         page = int(page)
         line = int(line)
         line = int(line)
         uid = request_dict.get('uid', None)
         uid = request_dict.get('uid', None)
@@ -625,116 +631,21 @@ class EquipmentManagerV3(View):
         if tko.code != 0:
         if tko.code != 0:
             return response.json(tko.code)
             return response.json(tko.code)
         userID = tko.userID
         userID = tko.userID
-        dvqs = Device_Info.objects.filter(userID_id=userID)
-        # # 过滤已重置的设备
-        dvqs = dvqs.filter(~Q(isExist=2))
-        if NickName:
-            dvqs = dvqs.filter(NickName=NickName)
-        if uid:
-            dvqs = dvqs.filter(UID=uid)
-        dvql = dvqs.values('id', 'userID', 'NickName', 'UID', 'View_Account', 'View_Password', 'ChannelIndex',
-                           'Type', 'isShare', 'primaryUserID', 'primaryMaster', 'data_joined', 'vodPrimaryUserID',
-                           'vodPrimaryMaster', 'userID__userEmail', 'version', 'isVod', 'isExist', 'NotificationMode',
-                           'isCameraOpenCloud', 'serial_number')[(page - 1) * line:page * line]
-        dvls = CommonService.qs_to_list(dvql)
-        uid_list = []
-        for dvl in dvls:
-            if dvl['primaryUserID'] and dvl['id'] == dvl['primaryUserID']:
-                dvl['isPrimaryUser'] = 1
-            else:
-                dvl['isPrimaryUser'] = 0
-            uid_list.append(dvl['UID'])
-
-        ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
-            values('bucket__content', 'status', 'channel', 'endTime', 'uid')
-        upqs = UID_Preview.objects.filter(uid__in=uid_list).order_by('channel').values('id', 'uid', 'channel')
+        # 查询设备列表以及设备uid集合
+        dv_list, uid_list = UserDeviceService.query_device_list(userID, uid, NickName, page, line)
+        ub_qs = UserDeviceService.query_device_uid_bucket(uid_list)  # 根据uid集合查询云存套餐
+        up_qs = UserDeviceService.query_device_preview(uid_list)  # 根据uid集合查询设备预览图
         auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
         auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
         bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
         bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
         nowTime = int(time.time())
         nowTime = int(time.time())
         data = []
         data = []
-        # 设备拓展信息表
-        us_qs = UidSetModel.objects.filter(uid__in=uid_list).values('id', 'uid', 'version', 'nickname', 'ucode',
-                                                                    'detect_status', 'detect_group',
-                                                                    'detect_interval', 'isSupportFourPoint',
-                                                                    'region_alexa', 'is_alexa', 'deviceModel',
-                                                                    'TimeZone', 'TimeStatus', 'SpaceUsable',
-                                                                    'SpaceSum', 'MirrorType', 'RecordType',
-                                                                    'OutdoorModel', 'WIFIName', 'isDetector',
-                                                                    'DetectorRank', 'is_human', 'is_custom_voice',
-                                                                    'is_ptz', 'double_wifi', 'is_ai', 'mobile_4g',
-                                                                    'ai_type')
-        uv_dict = {}
-        for us in us_qs:
-            uv_dict[us['uid']] = {
-                'version': us['version'],
-                'nickname': us['nickname'],
-                'ucode': us['ucode'],
-                'detect_interval': us['detect_interval'],
-                'detect_group': us['detect_group'],
-                'detect_status': us['detect_status'],
-                'region_alexa': us['region_alexa'],
-                'is_alexa': us['is_alexa'],
-                'deviceModel': us['deviceModel'],
-                'TimeZone': us['TimeZone'],
-                'TimeStatus': us['TimeStatus'],
-                'SpaceUsable': us['SpaceUsable'],
-                'SpaceSum': us['SpaceSum'],
-                'MirrorType': us['MirrorType'],
-                'RecordType': us['RecordType'],
-                'OutdoorModel': us['OutdoorModel'],
-                'WIFIName': us['WIFIName'],
-                'isDetector': us['isDetector'],
-                'DetectorRank': us['DetectorRank'],
-                'is_human': us['is_human'],
-                'is_custom_voice': us['is_custom_voice'],
-                'is_ptz': us['is_ptz'],
-                'double_wifi': us['double_wifi'],
-                'mobile4G': us['mobile_4g'],
-                'is_ai': us['is_ai'],
-                'ai_type': us['ai_type'],
-                'isSupportFourPoint': us['isSupportFourPoint'],
-            }
-            # 从uid_channel里面取出通道配置信息
-            ucs_qs = UidChannelSetModel.objects.filter(uid__id=us['id']).values('channel', 'channel_name',
-                                                                                'pir_audio', 'mic_audio',
-                                                                                'battery_status', 'battery_level',
-                                                                                'sleep_status', 'sleep_time',
-                                                                                'light_night_model',
-                                                                                'light_alarm_type',
-                                                                                'light_alarm_level',
-                                                                                'light_alarm_man_en',
-                                                                                'light_alarm_vol',
-                                                                                'light_long_light'
-                                                                                )
-            channels = []
-            for ucs in ucs_qs:
-                channels_dict = {
-                    'channel': ucs['channel'],
-                    'channel_name': ucs['channel_name'],
-                    'pir_audio': ucs['pir_audio'],
-                    'mic_audio': ucs['mic_audio'],
-                    'battery_status': ucs['battery_status'],
-                    'battery_level': ucs['battery_level'],
-                    'sleep_status': ucs['sleep_status'],
-                    'sleep_time': ucs['sleep_time'],
-                    'light_night_model': ucs['light_night_model'],
-                    'light_alarm_type': ucs['light_alarm_type'],
-                    'light_alarm_level': ucs['light_alarm_level'],
-                    'light_alarm_man_en': ucs['light_alarm_man_en'],
-                    'light_alarm_vol': ucs['light_alarm_vol'],
-                    'light_long_light': ucs['light_long_light']
-                }
-                channels.append(channels_dict)
-            uv_dict[us['uid']]['channels'] = channels
-
-        for p in dvls:
+        uv_dict = UserDeviceService.query_device_channel(uid_list)  # 查询设备uid通道配置属性
+        # 遍历设备列表,查询设备关联数据详情
+        for p in dv_list:
             p['UID'] = p['UID'].replace('\n', '').replace('\r', '')
             p['UID'] = p['UID'].replace('\n', '').replace('\r', '')
             p_uid = p['UID'].upper()
             p_uid = p['UID'].upper()
-            if p['serial_number']:
-                u_device_info_qs = UnicomDeviceInfo.objects.filter(serial_no=p['serial_number'])
-                if u_device_info_qs.exists():
-                    p['iccid'] = u_device_info_qs.first().iccid
-
+            UserDeviceService.get_sim_by_serial_number(p)  # 获取SIM卡属性
+            p['cloudPhoto'] = self.get_cloud_photo_status(p['UID'])
             # 获取iot_deviceInfo表的endpoint和token_iot_number
             # 获取iot_deviceInfo表的endpoint和token_iot_number
             p['iot'] = []
             p['iot'] = []
             if p['serial_number']:  # 存在序列号根据序列号查询
             if p['serial_number']:  # 存在序列号根据序列号查询
@@ -749,60 +660,21 @@ class EquipmentManagerV3(View):
                 })
                 })
 
 
             p['vod'] = []
             p['vod'] = []
-            for dm in ubqs:
+            for dm in ub_qs:
                 if p_uid == dm['uid']:
                 if p_uid == dm['uid']:
                     if dm['endTime'] > nowTime:
                     if dm['endTime'] > nowTime:
                         p['vod'].append(dm)
                         p['vod'].append(dm)
             p['preview'] = []
             p['preview'] = []
-            for up in upqs:
+            for up in up_qs:
                 if p_uid == up['uid']:
                 if p_uid == up['uid']:
                     obj = 'uid_preview/{uid}/channel_{channel}.png'.format(uid=up['uid'], channel=up['channel'])
                     obj = 'uid_preview/{uid}/channel_{channel}.png'.format(uid=up['uid'], channel=up['channel'])
                     img_sign = bucket.sign_url('GET', obj, 300)
                     img_sign = bucket.sign_url('GET', obj, 300)
                     p['preview'].append(img_sign)
                     p['preview'].append(img_sign)
-
-            # 返回设备初始化字符
-            uid_qs = UIDModel.objects.filter(uid=p_uid).values('platform', 'init_string', 'init_string_app')
-            if uid_qs.exists():
-                p['platform'] = uid_qs[0]['platform']
-                p['initString'] = uid_qs[0]['init_string']
-                p['initStringApp'] = uid_qs[0]['init_string_app']
+            UserDeviceService.get_uid_info(p, p_uid)  # 获取uid初始化信息
 
 
             if p_uid in uv_dict:
             if p_uid in uv_dict:
-                # 设备版本号
-                uidversion = uv_dict[p_uid]['version']
-                if len(uidversion) > 6:
-                    uidversion = uidversion[0: uidversion.rfind('.')]
-                p['uid_version'] = uidversion
-                p['ucode'] = '72V201233AA' if uv_dict[p_uid]['mobile4G'] == 1 else uv_dict[p_uid]['ucode']
-                p['detect_interval'] = uv_dict[p_uid]['detect_interval']
-                p['detect_status'] = uv_dict[p_uid]['detect_status']
-                p['detect_group'] = uv_dict[p_uid]['detect_group']
-                p['region_alexa'] = uv_dict[p_uid]['region_alexa']
-                p['is_alexa'] = uv_dict[p_uid]['is_alexa']
-                p['deviceModel'] = uv_dict[p_uid]['deviceModel']
-                p['TimeZone'] = uv_dict[p_uid]['TimeZone']
-                p['TimeStatus'] = uv_dict[p_uid]['TimeStatus']
-                p['SpaceUsable'] = uv_dict[p_uid]['SpaceUsable']
-                p['SpaceSum'] = uv_dict[p_uid]['SpaceSum']
-                p['MirrorType'] = uv_dict[p_uid]['MirrorType']
-                p['RecordType'] = uv_dict[p_uid]['RecordType']
-                p['OutdoorModel'] = uv_dict[p_uid]['OutdoorModel']
-                p['WIFIName'] = uv_dict[p_uid]['WIFIName']
-                p['isDetector'] = uv_dict[p_uid]['isDetector']
-                p['DetectorRank'] = uv_dict[p_uid]['DetectorRank']
-                p['is_human'] = uv_dict[p_uid]['is_human']
-                p['is_custom_voice'] = uv_dict[p_uid]['is_custom_voice']
-                p['is_ptz'] = uv_dict[p_uid]['is_ptz']
-                p['channels'] = uv_dict[p_uid]['channels']
-                p['double_wifi'] = uv_dict[p_uid]['double_wifi']
-                p['mobile4G'] = uv_dict[p_uid]['mobile4G']
-                p['isCameraOpenCloud'] = 0 if uv_dict[p_uid]['mobile4G'] == 1 else p['isCameraOpenCloud']
-                p['is_ai'] = uv_dict[p_uid]['is_ai']
-                p['ai_type'] = uv_dict[p_uid]['ai_type']
-                p['isSupportFourPoint'] = uv_dict[p_uid]['isSupportFourPoint']
-                # 设备昵称 调用影子信息昵称,先阶段不可
-                if uv_dict[p_uid]['nickname']:
-                    p['NickName'] = uv_dict[p_uid]['nickname']
+                # 获取设备信息DTO
+                UserDeviceService.get_device_info_dto(p, p_uid, uv_dict)
             else:
             else:
                 # 设备版本号
                 # 设备版本号
                 p['uid_version'] = ''
                 p['uid_version'] = ''
@@ -812,6 +684,18 @@ class EquipmentManagerV3(View):
         result = data
         result = data
         return response.json(0, result)
         return response.json(0, result)
 
 
+    @staticmethod
+    def get_cloud_photo_status(uid):
+        """
+        根据UID获取云相册开关状态
+        @param uid: 设备uid
+        @return: 0 or 1
+        """
+        cloud_photo_qs = DeviceCloudPhotoInfo.objects.filter(uid=uid).values('status')
+        if not cloud_photo_qs.exists():
+            return 0
+        return cloud_photo_qs[0]['status']
+
     def do_fuzzy_query(self, userID, request_dict, response):
     def do_fuzzy_query(self, userID, request_dict, response):
         fuzzy = request_dict.get('fuzzy', None)
         fuzzy = request_dict.get('fuzzy', None)
         page = request_dict.get('page', None)
         page = request_dict.get('page', None)

+ 238 - 0
Service/UserDeviceService.py

@@ -0,0 +1,238 @@
+# -*- encoding: utf-8 -*-
+"""
+@File    : UserDeviceService.py
+@Time    : 2022/11/18 11:40
+@Author  : stephen
+@Email   : zhangdongming@asj6.wecom.work
+@Software: PyCharm
+"""
+from django.db.models import Q
+
+from Model.models import Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidChannelSetModel, UnicomDeviceInfo, \
+    UIDModel
+from Service.CommonService import CommonService
+
+
+class UserDeviceService:
+
+    @classmethod
+    def query_device_list(cls, user_id, uid, nickname, page, line):
+        """
+        查询设备列表
+        @param user_id: 用户user_id
+        @param uid: uid
+        @param nickname: 昵称
+        @param page: 页数
+        @param line: 每页条数
+        @return: dv_list, uid_list
+        """
+        dv_qs = Device_Info.objects.filter(userID_id=user_id)
+        # 过滤已重置的设备
+        dv_qs = dv_qs.filter(~Q(isExist=2))
+        if nickname:
+            dv_qs = dv_qs.filter(NickName=nickname)
+        if uid:
+            dv_qs = dv_qs.filter(UID=uid)
+        dv_qs = dv_qs.values('id', 'userID', 'NickName', 'UID', 'View_Account', 'View_Password', 'ChannelIndex',
+                             'Type', 'isShare', 'primaryUserID', 'primaryMaster', 'data_joined', 'vodPrimaryUserID',
+                             'vodPrimaryMaster', 'userID__userEmail', 'version', 'isVod', 'isExist', 'NotificationMode',
+                             'isCameraOpenCloud', 'serial_number')[(page - 1) * line:page * line]
+        dv_list = CommonService.qs_to_list(dv_qs)
+        uid_list = []
+        for item in dv_list:
+            if item['primaryUserID'] and item['id'] == item['primaryUserID']:
+                item['isPrimaryUser'] = 1
+            else:
+                item['isPrimaryUser'] = 0
+            uid_list.append(item['UID'])
+        return dv_list, uid_list
+
+    @classmethod
+    def query_device_uid_bucket(cls, uid_list):
+        """
+        查询uid关联存储桶套餐
+        @param uid_list: uid集合
+        @return: UID_Bucket
+        """
+        return UID_Bucket.objects.filter(uid__in=uid_list). \
+            values('bucket__content', 'status', 'channel', 'endTime', 'uid')
+
+    @classmethod
+    def query_device_preview(cls, uid_list):
+        """
+        查询设备uid预览图
+        @param uid_list: uid集合
+        @return: UID_Preview
+        """
+        return UID_Preview.objects.filter(uid__in=uid_list).order_by('channel') \
+            .values('id', 'uid', 'channel')
+
+    @classmethod
+    def query_device_uid_set(cls, uid_list):
+        """
+        查询设备属性
+        @return: UidSetModel
+        """
+        return UidSetModel.objects.filter(uid__in=uid_list) \
+            .values('id', 'uid', 'version', 'nickname', 'ucode',
+                    'detect_status', 'detect_group',
+                    'detect_interval', 'isSupportFourPoint',
+                    'region_alexa', 'is_alexa', 'deviceModel',
+                    'TimeZone', 'TimeStatus', 'SpaceUsable',
+                    'SpaceSum', 'MirrorType', 'RecordType',
+                    'OutdoorModel', 'WIFIName', 'isDetector',
+                    'DetectorRank', 'is_human', 'is_custom_voice',
+                    'is_ptz', 'double_wifi', 'is_ai', 'mobile_4g',
+                    'ai_type')
+
+    @classmethod
+    def query_device_channel(cls, uid_list):
+        """
+        获取设备通道配置属性
+        @param uid_list: uid集合
+        @return: uv_dict
+        """
+        us_qs = cls.query_device_uid_set(uid_list)
+        uv_dict = {}
+        for us in us_qs:
+            uv_dict[us['uid']] = {
+                'version': us['version'],
+                'nickname': us['nickname'],
+                'ucode': us['ucode'],
+                'detect_interval': us['detect_interval'],
+                'detect_group': us['detect_group'],
+                'detect_status': us['detect_status'],
+                'region_alexa': us['region_alexa'],
+                'is_alexa': us['is_alexa'],
+                'deviceModel': us['deviceModel'],
+                'TimeZone': us['TimeZone'],
+                'TimeStatus': us['TimeStatus'],
+                'SpaceUsable': us['SpaceUsable'],
+                'SpaceSum': us['SpaceSum'],
+                'MirrorType': us['MirrorType'],
+                'RecordType': us['RecordType'],
+                'OutdoorModel': us['OutdoorModel'],
+                'WIFIName': us['WIFIName'],
+                'isDetector': us['isDetector'],
+                'DetectorRank': us['DetectorRank'],
+                'is_human': us['is_human'],
+                'is_custom_voice': us['is_custom_voice'],
+                'is_ptz': us['is_ptz'],
+                'double_wifi': us['double_wifi'],
+                'mobile4G': us['mobile_4g'],
+                'is_ai': us['is_ai'],
+                'ai_type': us['ai_type'],
+                'isSupportFourPoint': us['isSupportFourPoint'],
+            }
+            uv_dict[us['uid']]['channels'] = cls.query_device_channel_set(us['id'])
+        return uv_dict
+
+    @classmethod
+    def query_device_channel_set(cls, uid):
+        """
+        查询通道配置
+        @param uid: 设备uid
+        @return: channels
+        """
+        ucs_qs = UidChannelSetModel.objects.filter(uid__id=uid)
+        ucs_qs = ucs_qs.values('channel', 'channel_name',
+                               'pir_audio', 'mic_audio',
+                               'battery_status', 'battery_level',
+                               'sleep_status', 'sleep_time',
+                               'light_night_model',
+                               'light_alarm_type',
+                               'light_alarm_level',
+                               'light_alarm_man_en',
+                               'light_alarm_vol',
+                               'light_long_light'
+                               )
+        channels = []
+        for ucs in ucs_qs:
+            channels_dict = {
+                'channel': ucs['channel'],
+                'channel_name': ucs['channel_name'],
+                'pir_audio': ucs['pir_audio'],
+                'mic_audio': ucs['mic_audio'],
+                'battery_status': ucs['battery_status'],
+                'battery_level': ucs['battery_level'],
+                'sleep_status': ucs['sleep_status'],
+                'sleep_time': ucs['sleep_time'],
+                'light_night_model': ucs['light_night_model'],
+                'light_alarm_type': ucs['light_alarm_type'],
+                'light_alarm_level': ucs['light_alarm_level'],
+                'light_alarm_man_en': ucs['light_alarm_man_en'],
+                'light_alarm_vol': ucs['light_alarm_vol'],
+                'light_long_light': ucs['light_long_light']
+            }
+            channels.append(channels_dict)
+        return channels
+
+    @classmethod
+    def get_sim_by_serial_number(cls, p_vo):
+        """
+        根据序列号获取SIM卡属性
+        @param p_vo:
+        @return:
+        """
+        if p_vo['serial_number']:
+            u_device_info_qs = UnicomDeviceInfo.objects.filter(serial_no=p_vo['serial_number'])
+            if u_device_info_qs.exists():
+                p_vo['iccid'] = u_device_info_qs.first().iccid
+                p_vo['iccidType'] = u_device_info_qs.first().card_type
+
+    @classmethod
+    def get_uid_info(cls, p_vo, uid):
+        """
+        获取uid信息
+        @param p_vo: 设备对象
+        @param uid: 设备uid
+        @return:
+        """
+        uid_qs = UIDModel.objects.filter(uid=uid).values('platform', 'init_string', 'init_string_app')
+        if uid_qs.exists():
+            p_vo['platform'] = uid_qs[0]['platform']
+            p_vo['initString'] = uid_qs[0]['init_string']
+            p_vo['initStringApp'] = uid_qs[0]['init_string_app']
+
+    @classmethod
+    def get_device_info_dto(cls, p_vo, p_uid, uv_dict):
+        """
+        获取设备信息DTO
+        @param p_vo: 设备对象
+        @param p_uid: 设备uid
+        @param uv_dict: 设备通道字典
+        """
+        uidversion = uv_dict[p_uid]['version']
+        if len(uidversion) > 6:
+            uidversion = uidversion[0: uidversion.rfind('.')]
+        p_vo['uid_version'] = uidversion
+        p_vo['ucode'] = '72V201233AA' if uv_dict[p_uid]['mobile4G'] == 1 else uv_dict[p_uid]['ucode']
+        p_vo['detect_interval'] = uv_dict[p_uid]['detect_interval']
+        p_vo['detect_status'] = uv_dict[p_uid]['detect_status']
+        p_vo['detect_group'] = uv_dict[p_uid]['detect_group']
+        p_vo['region_alexa'] = uv_dict[p_uid]['region_alexa']
+        p_vo['is_alexa'] = uv_dict[p_uid]['is_alexa']
+        p_vo['deviceModel'] = uv_dict[p_uid]['deviceModel']
+        p_vo['TimeZone'] = uv_dict[p_uid]['TimeZone']
+        p_vo['TimeStatus'] = uv_dict[p_uid]['TimeStatus']
+        p_vo['SpaceUsable'] = uv_dict[p_uid]['SpaceUsable']
+        p_vo['SpaceSum'] = uv_dict[p_uid]['SpaceSum']
+        p_vo['MirrorType'] = uv_dict[p_uid]['MirrorType']
+        p_vo['RecordType'] = uv_dict[p_uid]['RecordType']
+        p_vo['OutdoorModel'] = uv_dict[p_uid]['OutdoorModel']
+        p_vo['WIFIName'] = uv_dict[p_uid]['WIFIName']
+        p_vo['isDetector'] = uv_dict[p_uid]['isDetector']
+        p_vo['DetectorRank'] = uv_dict[p_uid]['DetectorRank']
+        p_vo['is_human'] = uv_dict[p_uid]['is_human']
+        p_vo['is_custom_voice'] = uv_dict[p_uid]['is_custom_voice']
+        p_vo['is_ptz'] = uv_dict[p_uid]['is_ptz']
+        p_vo['channels'] = uv_dict[p_uid]['channels']
+        p_vo['double_wifi'] = uv_dict[p_uid]['double_wifi']
+        p_vo['mobile4G'] = uv_dict[p_uid]['mobile4G']
+        p_vo['isCameraOpenCloud'] = 0 if uv_dict[p_uid]['mobile4G'] == 1 else p_vo['isCameraOpenCloud']
+        p_vo['is_ai'] = uv_dict[p_uid]['is_ai']
+        p_vo['ai_type'] = uv_dict[p_uid]['ai_type']
+        p_vo['isSupportFourPoint'] = uv_dict[p_uid]['isSupportFourPoint']
+        # 设备昵称 调用影子信息昵称,先阶段不可
+        if uv_dict[p_uid]['nickname']:
+            p_vo['NickName'] = uv_dict[p_uid]['nickname']