zhangdongming 3 년 전
부모
커밋
324f88872c
4개의 변경된 파일846개의 추가작업 그리고 846개의 파일을 삭제
  1. 1 1
      Ansjer/server_urls/loocam_url.py
  2. 1 1
      Ansjer/urls.py
  3. 96 96
      Model/models.py
  4. 748 748
      SensorGateway/EquipmentFamilyController.py

+ 1 - 1
Ansjer/server_urls/loocam_url.py

@@ -11,5 +11,5 @@ from django.conf.urls import url
 from SensorGateway import EquipmentFamilyController
 
 urlpatterns = [
-    url(r'^sensor/gateway/(?P<operation>.*)$', EquipmentFamilyController.EquipmentFamilyView.as_view()),
+    # url(r'^sensor/gateway/(?P<operation>.*)$', EquipmentFamilyController.EquipmentFamilyView.as_view()),
 ]

+ 1 - 1
Ansjer/urls.py

@@ -364,7 +364,7 @@ urlpatterns = [
     url(r'^api/surveys/(?P<operation>.*)$', CloudStorageController.CloudStorageView.as_view()),
 
     # 网关家庭模块
-    url(r'^app/sensor/gateway/(?P<operation>.*)$', EquipmentFamilyController.EquipmentFamilyView.as_view()),
+    # url(r'^app/sensor/gateway/(?P<operation>.*)$', EquipmentFamilyController.EquipmentFamilyView.as_view()),
     url(r'^loocam/', include("Ansjer.server_urls.loocam_url")),
 
     # 传感器网关

+ 96 - 96
Model/models.py

@@ -2379,99 +2379,99 @@ class PaypalWebHookEvent(models.Model):
         ordering = ('id',)
 
 
-class UserFamily(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
-    user = models.ForeignKey(Device_User, to_field='userID', default='', on_delete=models.CASCADE,
-                             verbose_name='关联用户表ID')
-    name = models.CharField(max_length=50, db_index=True, verbose_name=u'家庭名称', default='', blank=True)
-    location = models.CharField(max_length=100, verbose_name='位置', blank=True, default='')
-    sort = models.IntegerField(default=99, blank=True, verbose_name=u'排序,越小越靠前')
-    updated_time = models.IntegerField(default=0, db_index=True, verbose_name='更新时间')
-    created_time = models.IntegerField(default=0, db_index=True, verbose_name='创建时间')
-
-    class Meta:
-        db_table = 'user_family'
-        verbose_name = '用户家庭'
-        verbose_name_plural = verbose_name
-
-
-class FamilyMemberPermission(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
-    no = models.CharField(max_length=10, unique=True, verbose_name='编号', default=0)
-    name = models.CharField(max_length=50, verbose_name=u'权限名称', default='')
-    sort = models.IntegerField(default=99, blank=True, verbose_name=u'排序,越小越靠前')
-    describe = models.CharField(max_length=128, blank=True, verbose_name='权限描述', default=0)
-    updated_time = models.IntegerField(default=0, db_index=True, verbose_name='更新时间')
-    created_time = models.IntegerField(default=0, db_index=True, verbose_name='创建时间')
-
-    class Meta:
-        db_table = 'family_member_permission'
-        verbose_name = '家庭成员权限'
-        verbose_name_plural = verbose_name
-
-
-class FamilyMember(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
-    user = models.ForeignKey(Device_User, to_field='userID', default='', on_delete=models.CASCADE,
-                             verbose_name='关联用户表id')
-    user_name = models.CharField(max_length=64, db_index=True, verbose_name=u'用户名', default='', blank=True)
-    family = models.ForeignKey(UserFamily, to_field='id', default='', on_delete=models.CASCADE,
-                               verbose_name='关联用户家庭id')
-    sort = models.IntegerField(default=99, blank=True, verbose_name=u'排序,越小越靠前')
-    identity = models.SmallIntegerField(default=0, verbose_name='状态{0:普通成员,1:屋主}')
-    permission = models.ForeignKey(FamilyMemberPermission, to_field='id', default='', on_delete=models.CASCADE,
-                                   verbose_name='关联用户家庭id')
-    updated_time = models.IntegerField(default=0, db_index=True, verbose_name='更新时间')
-    created_time = models.IntegerField(default=0, db_index=True, verbose_name='创建时间')
-
-    class Meta:
-        db_table = 'family_member'
-        verbose_name = '家庭成员'
-        verbose_name_plural = verbose_name
-
-
-class FamilyRoom(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
-    name = models.CharField(max_length=128, verbose_name=u'房间名称', default='', blank=True)
-    family = models.ForeignKey(UserFamily, to_field='id', default='', on_delete=models.CASCADE,
-                               verbose_name='关联用户家庭id')
-    sort = models.IntegerField(default=99, blank=True, verbose_name=u'排序,越小越靠前')
-    updated_time = models.IntegerField(default=0, db_index=True, verbose_name='更新时间')
-    created_time = models.IntegerField(default=0, db_index=True, verbose_name='创建时间')
-
-    class Meta:
-        db_table = 'family_room'
-        verbose_name = '家庭房间'
-        verbose_name_plural = verbose_name
-
-
-class FamilyRoomDevice(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
-    room_id = models.IntegerField(default=0, blank=True, verbose_name=u'房间id')
-    family_id = models.IntegerField(default=0, blank=True, verbose_name=u'家庭id')
-    device = models.ForeignKey(Device_Info, to_field='id', default='', on_delete=models.CASCADE,
-                               verbose_name='关联设备信息id')
-    sort = models.IntegerField(default=0, blank=True, verbose_name=u'排序,越小越靠前')
-    updated_time = models.IntegerField(default=0, db_index=True, verbose_name='更新时间')
-    created_time = models.IntegerField(default=0, db_index=True, verbose_name='创建时间')
-
-    class Meta:
-        db_table = 'family_room_device'
-        verbose_name = '家庭房间关联设备'
-        verbose_name_plural = verbose_name
-
-
-class FamilyMemberJoin(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
-    user = models.ForeignKey(Device_User, to_field='userID', default='', on_delete=models.CASCADE,
-                             verbose_name='关联用户表id')
-    family = models.ForeignKey(UserFamily, to_field='id', default='', on_delete=models.CASCADE,
-                               verbose_name='关联用户家庭id')
-    status = models.SmallIntegerField(default=0, verbose_name='状态{0:未确认,1:拒绝,2:同意}')
-    updated_time = models.IntegerField(default=0, db_index=True, verbose_name='更新时间')
-    created_time = models.IntegerField(default=0, db_index=True, verbose_name='创建时间')
-
-    class Meta:
-        db_table = 'family_member_join'
-        verbose_name = '家庭成员加入'
-        verbose_name_plural = verbose_name
+# class UserFamily(models.Model):
+#     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
+#     user = models.ForeignKey(Device_User, to_field='userID', default='', on_delete=models.CASCADE,
+#                              verbose_name='关联用户表ID')
+#     name = models.CharField(max_length=50, db_index=True, verbose_name=u'家庭名称', default='', blank=True)
+#     location = models.CharField(max_length=100, verbose_name='位置', blank=True, default='')
+#     sort = models.IntegerField(default=99, blank=True, verbose_name=u'排序,越小越靠前')
+#     updated_time = models.IntegerField(default=0, db_index=True, verbose_name='更新时间')
+#     created_time = models.IntegerField(default=0, db_index=True, verbose_name='创建时间')
+#
+#     class Meta:
+#         db_table = 'user_family'
+#         verbose_name = '用户家庭'
+#         verbose_name_plural = verbose_name
+#
+#
+# class FamilyMemberPermission(models.Model):
+#     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
+#     no = models.CharField(max_length=10, unique=True, verbose_name='编号', default=0)
+#     name = models.CharField(max_length=50, verbose_name=u'权限名称', default='')
+#     sort = models.IntegerField(default=99, blank=True, verbose_name=u'排序,越小越靠前')
+#     describe = models.CharField(max_length=128, blank=True, verbose_name='权限描述', default=0)
+#     updated_time = models.IntegerField(default=0, db_index=True, verbose_name='更新时间')
+#     created_time = models.IntegerField(default=0, db_index=True, verbose_name='创建时间')
+#
+#     class Meta:
+#         db_table = 'family_member_permission'
+#         verbose_name = '家庭成员权限'
+#         verbose_name_plural = verbose_name
+#
+#
+# class FamilyMember(models.Model):
+#     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
+#     user = models.ForeignKey(Device_User, to_field='userID', default='', on_delete=models.CASCADE,
+#                              verbose_name='关联用户表id')
+#     user_name = models.CharField(max_length=64, db_index=True, verbose_name=u'用户名', default='', blank=True)
+#     family = models.ForeignKey(UserFamily, to_field='id', default='', on_delete=models.CASCADE,
+#                                verbose_name='关联用户家庭id')
+#     sort = models.IntegerField(default=99, blank=True, verbose_name=u'排序,越小越靠前')
+#     identity = models.SmallIntegerField(default=0, verbose_name='状态{0:普通成员,1:屋主}')
+#     permission = models.ForeignKey(FamilyMemberPermission, to_field='id', default='', on_delete=models.CASCADE,
+#                                    verbose_name='关联用户家庭id')
+#     updated_time = models.IntegerField(default=0, db_index=True, verbose_name='更新时间')
+#     created_time = models.IntegerField(default=0, db_index=True, verbose_name='创建时间')
+#
+#     class Meta:
+#         db_table = 'family_member'
+#         verbose_name = '家庭成员'
+#         verbose_name_plural = verbose_name
+#
+#
+# class FamilyRoom(models.Model):
+#     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
+#     name = models.CharField(max_length=128, verbose_name=u'房间名称', default='', blank=True)
+#     family = models.ForeignKey(UserFamily, to_field='id', default='', on_delete=models.CASCADE,
+#                                verbose_name='关联用户家庭id')
+#     sort = models.IntegerField(default=99, blank=True, verbose_name=u'排序,越小越靠前')
+#     updated_time = models.IntegerField(default=0, db_index=True, verbose_name='更新时间')
+#     created_time = models.IntegerField(default=0, db_index=True, verbose_name='创建时间')
+#
+#     class Meta:
+#         db_table = 'family_room'
+#         verbose_name = '家庭房间'
+#         verbose_name_plural = verbose_name
+#
+#
+# class FamilyRoomDevice(models.Model):
+#     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
+#     room_id = models.IntegerField(default=0, blank=True, verbose_name=u'房间id')
+#     family_id = models.IntegerField(default=0, blank=True, verbose_name=u'家庭id')
+#     device = models.ForeignKey(Device_Info, to_field='id', default='', on_delete=models.CASCADE,
+#                                verbose_name='关联设备信息id')
+#     sort = models.IntegerField(default=0, blank=True, verbose_name=u'排序,越小越靠前')
+#     updated_time = models.IntegerField(default=0, db_index=True, verbose_name='更新时间')
+#     created_time = models.IntegerField(default=0, db_index=True, verbose_name='创建时间')
+#
+#     class Meta:
+#         db_table = 'family_room_device'
+#         verbose_name = '家庭房间关联设备'
+#         verbose_name_plural = verbose_name
+#
+#
+# class FamilyMemberJoin(models.Model):
+#     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
+#     user = models.ForeignKey(Device_User, to_field='userID', default='', on_delete=models.CASCADE,
+#                              verbose_name='关联用户表id')
+#     family = models.ForeignKey(UserFamily, to_field='id', default='', on_delete=models.CASCADE,
+#                                verbose_name='关联用户家庭id')
+#     status = models.SmallIntegerField(default=0, verbose_name='状态{0:未确认,1:拒绝,2:同意}')
+#     updated_time = models.IntegerField(default=0, db_index=True, verbose_name='更新时间')
+#     created_time = models.IntegerField(default=0, db_index=True, verbose_name='创建时间')
+#
+#     class Meta:
+#         db_table = 'family_member_join'
+#         verbose_name = '家庭成员加入'
+#         verbose_name_plural = verbose_name

+ 748 - 748
SensorGateway/EquipmentFamilyController.py

@@ -1,748 +1,748 @@
-# -*- encoding: utf-8 -*-
-"""
-@File    : EquipmentFamilyController.py
-@Time    : 2022/5/13 15:50
-@Author  : stephen
-@Email   : zhangdongming@asj6.wecom.work
-@Software: PyCharm
-"""
-
-import time
-
-import oss2
-from django.db import connection
-from django.db import transaction
-from django.db.models import Q
-from django.views.generic.base import View
-
-from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY
-from Controller.DeviceConfirmRegion import Device_Region
-from Model.models import Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidChannelSetModel, \
-    iotdeviceInfoModel, UIDModel, Device_User, UserFamily, FamilyMember, FamilyMemberPermission, \
-    FamilyRoomDevice, FamilyRoom
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-from Service.CommonService import CommonService
-
-
-# 家庭设备管理
-class EquipmentFamilyView(View):
-
-    def get(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-        operation = kwargs.get('operation')
-        return self.validation(request.GET, request, operation)
-
-    def post(self, request, *args, **kwargs):
-        request.encoding = 'utf-8'
-
-        operation = kwargs.get('operation')
-        return self.validation(request.POST, request, operation)
-
-    def validation(self, request_dict, request, operation):
-
-        token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
-        lang = request_dict.get('lang', None)
-        if lang:
-            response = ResponseObject(lang)
-        else:
-            response = ResponseObject(token.lang) if token.lang else ResponseObject()
-
-        if token.code != 0:
-            return response.json(token.code)
-        user_id = token.userID
-
-        # 手机端添加设备,查询,修改
-        if operation == 'add':
-            return self.do_save(user_id, request_dict, response, request)
-        # 分页获取设备
-        if operation == 'page':
-            return self.do_device_page(user_id, request_dict, response)
-        # 条件查询设备列表
-        if operation == 'query':
-            return self.do_device_query(user_id, request_dict, response)
-        # 获取家庭列表
-        if operation == 'family-list':
-            return self.get_family_list(user_id, request_dict, response)
-        # 家庭保存
-        if operation == 'family-save':
-            return self.family_save(user_id, request_dict, response)
-        # 获取房间列表
-        if operation == 'room-list':
-            return self.get_family_room_list(request_dict, response)
-        # 房间保存
-        if operation == 'room-save':
-            return self.room_save(request_dict, response)
-        if operation == 'room-sort':
-            return self.room_sort_save(request_dict, response)
-        if operation == 'permission-list':
-            return self.get_member_permission_list(user_id, request_dict, response)
-        else:
-            return response.json(414)
-
-    @classmethod
-    def do_save(cls, user_id, request_dict, response, request):
-        """
-        添加设备
-        @param request:
-        @param user_id:
-        @param request_dict:
-        @param response:
-        @return:
-        """
-        nick_name = request_dict.get('nickName', None)
-        serial_number = request_dict.get('serialNumber', None)
-        device_type = request_dict.get('deviceType', None)
-        family_id = request_dict.get('familyId', None)
-        room_id = request_dict.get('roomId', None)
-        # type 可能为0
-        if not all([nick_name, serial_number, device_type]):
-            return response.json(444, {'param': 'nick_name, serial_number, device_type'})
-        device_info_qs = Device_Info.objects.filter(serial_number=serial_number, userID_id=user_id)
-        if device_info_qs:
-            # 判断设备是否已存在
-            if device_info_qs[0].isExist == 1:
-                return response.json(174)
-            else:
-                device_info_qs.delete()
-        try:
-            with transaction.atomic():
-                # 格式化后的日期时间
-                now_time = CommonService.timestamp_to_str(int(time.time()))
-                device_id = CommonService.getUserID(getUser=False)
-                Device_Info.objects.create(id=device_id, userID_id=user_id, NickName=nick_name,
-                                           Type=device_type,
-                                           UID=serial_number,
-                                           serial_number=serial_number, data_joined=now_time,
-                                           update_time=now_time)
-                boole = cls.family_room_device_save(family_id, room_id, device_id)
-                if not boole:
-                    return response.json(15)
-                # 判断是否有用户绑定
-                us_qs = UidSetModel.objects.filter(uid=serial_number)
-                if not us_qs:
-                    n_time = int(time.time())
-                    ip = CommonService.get_ip_address(request)
-                    region_id = Device_Region().get_device_region(ip)
-                    region_alexa = 'CN' if region_id == 1 else 'ALL'
-                    uid_set_create_dict = {
-                        'uid': serial_number,
-                        'addTime': n_time,
-                        'updTime': n_time,
-                        'ip': CommonService.get_ip_address(request_dict),
-                        'nickname': nick_name,
-                        'region_alexa': region_alexa,
-                    }
-                    UidSetModel.objects.create(**uid_set_create_dict)
-                return response.json(0)
-        except Exception as e:
-            print(e)
-            return response.json(177, repr(e))
-
-    @classmethod
-    def do_device_page(cls, user_id, request_dict, response):
-        """
-        查询设备列表
-        @param user_id:
-        @param request_dict:
-        @param response:
-        @return:
-        """
-        page_no = request_dict.get('pageNo', None)
-        page_size = request_dict.get('pageSize', None)
-        if not all([page_no, page_size]):
-            return response.json(444)
-
-        page = int(page_no)
-        line = int(page_size)
-        device_info_qs = Device_Info.objects.filter(userID=user_id)
-        device_info_qs = device_info_qs.filter(~Q(isExist=0))
-        total = device_info_qs.count()
-        device_info_qs = device_info_qs.values("id", "userID_id", "NickName", "Type", "serial_number",
-                                               "data_joined",
-                                               "update_time")[(page - 1) * line: page * line]
-        data = []
-        for item in device_info_qs:
-            data.append({
-                'id': item['id'],
-                'userId': item['userID_id'],
-                'nickName': item['NickName'],
-                'type': item['Type'],
-                'serialNumber': item['serial_number'],
-                'dataJoined': item['data_joined'].strftime("%Y-%m-%d %H:%M:%S"),
-                'updateTime': item['update_time'].strftime("%Y-%m-%d %H:%M:%S")
-            })
-        return response.json(0, {'list': data, 'total': total})
-
-    @classmethod
-    def do_device_query(cls, user_id, request_dict, response):
-        """
-        查询用户设备信息
-        @param user_id: 用户id
-        @param request_dict: 请求参数
-        @param response: 响应对象
-        @return: response
-        """
-        page = request_dict.get('page', None)
-        line = request_dict.get('line', None)
-        nick_name = request_dict.get('NickName', None)
-        family_id = request_dict.get('familyId', None)
-        room_id = request_dict.get('roomId', None)
-
-        page = int(page)
-        line = int(line)
-        uid = request_dict.get('uid', None)
-        if family_id:
-            permission = cls.get_member_permission_details(user_id, int(family_id))
-            if not permission or permission == '003':
-                return response.json(404)
-        # 获取设备信息列表
-        device_info_list = cls.get_device_info_list(user_id, nick_name, uid,
-                                                    page, line, family_id, room_id)
-        uid_list = []
-        # 判断是否是主用户 isPrimaryUser=0:否,1:是
-        for dvl in device_info_list:
-            if dvl['primaryUserID'] and dvl['id'] == dvl['primaryUserID']:
-                dvl['isPrimaryUser'] = 1
-            else:
-                dvl['isPrimaryUser'] = 0
-            uid_list.append(dvl['UID'])
-        # 设备关联套餐,设备预览图
-        uid_bucket_qs, uid_preview_qs = cls.get_bucket_and_preview_by_uid(uid_list)
-        # 设备配置信息
-        uid_set_dict = cls.get_uid_set_dict(uid_list)
-        # 设备详情信息
-        result = cls.get_device_details(device_info_list, uid_bucket_qs, uid_preview_qs, uid_set_dict)
-        items = []
-        for index, item in enumerate(result):
-            # 加密
-            if item['View_Password']:
-                item['View_Password'] = CommonService.encode_data(item['View_Password'], 1, 4)
-            items.append(item)
-        return response.json(0, items)
-
-    @classmethod
-    def get_device_info_list(cls, user_id, nick_name, uid, page, line, family_id, room_id):
-        """
-        根据用户id获取设备信息
-        @param room_id: 家庭id
-        @param family_id: 房间id
-        @param uid: uid
-        @param nick_name: 设备名称
-        @param line: 条数
-        @param page: 页数
-        @param user_id: 用户id
-        @return: device_info_list 设备信息列表
-        """
-        # 获取用户设备信息
-        device_info_qs = Device_Info.objects.filter(userID_id=user_id)
-        # 过滤已重置的设备
-        device_info_qs = device_info_qs.filter(~Q(isExist=2))
-        if nick_name:
-            device_info_qs = device_info_qs.filter(NickName__icontains=nick_name)
-        if uid:
-            device_info_qs.filter(UID=uid)
-        if family_id or room_id:
-            # 根据家庭id获取房间id关联查询设备
-            return cls.get_family_device_list(user_id, page, line, family_id, room_id)
-        device_info_values = device_info_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')
-
-        device_info_values = device_info_values[(page - 1) * line:page * line]
-        device_info_list = CommonService.qs_to_list(device_info_values)
-        return device_info_list
-
-    @classmethod
-    def get_family_device_list(cls, user_id, page_no, page_size, family_id, room_id):
-        """
-        获取关联家庭设备列表
-        @param user_id: 用户id
-        @param page_no: 页数
-        @param page_size: 分页大小
-        @param family_id: 家庭id
-        @param room_id: 房间id
-        @return: result_list
-        """
-        cursor = connection.cursor()
-        sql = 'SELECT d.id,d.userID_id as userID,d.NickName,d.UID,d.View_Account,d.View_Password,d.ChannelIndex,' \
-              'd.Type,d.isShare,d.primaryUserID,d.primaryMaster,d.data_joined,d.vodPrimaryUserID,d.vodPrimaryMaster, ' \
-              'd.version,d.isVod,d.isExist,d.NotificationMode,d.isCameraOpenCloud,d.serial_number '
-        sql += 'FROM device_info d INNER JOIN loocam_family_room_device l ON d.id = l.device_id '
-        sql += 'WHERE d.userID_id = %s AND d.isExist != %s '
-        if family_id:
-            sql += ' AND l.family_id = %s '
-        if room_id:
-            sql += ' AND l.room_id = %s '
-        sql += ' order by d.data_joined DESC,d.id DESC LIMIT %s,%s '
-        cursor.execute(sql, [user_id, 2, int(family_id) if family_id else int(room_id), ((page_no - 1) * page_size),
-                             page_size, ])
-        data_obj = cursor.fetchall()
-        cursor.close()  # 执行完,关闭
-        connection.close()
-        result_list = []
-        col_names = [desc[0] for desc in cursor.description]
-        for item in data_obj:
-            val = dict(zip(col_names, item))
-            user_id = val['userID']
-            device_user_qs = Device_User.objects.filter(userID=user_id)
-            val['userID__userEmail'] = device_user_qs.first().userEmail
-            val['isShare'] = False if val['isShare'] == 0 else True
-            if 'data_joined' in val:
-                if val['data_joined']:
-                    val['data_joined'] = val['data_joined'].strftime("%Y-%m-%d %H:%M:%S")
-                else:
-                    val['data_joined'] = ''
-            result_list.append(val)
-        return result_list
-
-    @classmethod
-    def get_bucket_and_preview_by_uid(cls, uid_list):
-        """
-        根据uid列表查询套餐
-        @param uid_list: uid列表
-        @return: uid_bucket_qs
-        """
-        uid_bucket_qs = UID_Bucket.objects.filter(uid__in=uid_list).values('bucket__content', 'status', 'channel',
-                                                                           'endTime', 'uid')
-        uid_preview_qs = UID_Preview.objects.filter(uid__in=uid_list).order_by('channel').values('id', 'uid', 'channel')
-        return uid_bucket_qs, uid_preview_qs
-
-    @classmethod
-    def get_uid_set_dict(cls, uid_list):
-        """
-        获取uid配置信息
-        @param uid_list: uid列表
-        @return: uid_set_dict uid配置信息
-        """
-        uid_set_qs = UidSetModel.objects.filter(uid__in=uid_list) \
-            .values('id', 'uid', 'version', 'nickname', 'ucode',
-                    'detect_status', 'detect_group',
-                    'detect_interval',
-                    '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')
-        uid_set_dict = {}
-        for us in uid_set_qs:
-            uid_set_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'],
-                'is_ai': us['is_ai']
-            }
-            # 从uid_channel里面取出通道配置信息
-            uid_channel_set_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_list = []
-            for ucs in uid_channel_set_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_list.append(channels_dict)
-            uid_set_dict[us['uid']]['channels'] = channels_list
-        return uid_set_dict
-
-    @classmethod
-    def get_device_details(cls, device_info_list, uid_bucket_qs, uid_preview_qs, uid_set_dict):
-        """
-        设备详情
-        @param device_info_list: 设备信息列表
-        @param uid_bucket_qs: 套餐对象
-        @param uid_preview_qs:
-        @param uid_set_dict:
-        @return:
-        """
-        now_time = int(time.time())
-        data = []
-        for p in device_info_list:
-            # 获取iotDeviceInfo表的endpoint和tokenIotNumber
-            p['iot'] = []
-            if p['serial_number']:  # 存在序列号根据序列号查询
-                iot_device_info_qs = iotdeviceInfoModel.objects.filter(serial_number=p['serial_number'][0:6])
-            else:  # 根据uid查询
-                iot_device_info_qs = iotdeviceInfoModel.objects.filter(uid=p['UID'])
-            if iot_device_info_qs.exists():
-                iot_device_Info = iot_device_info_qs.values('endpoint', 'token_iot_number')
-                p['iot'].append({
-                    'endpoint': iot_device_Info[0]['endpoint'],
-                    'token_iot_number': iot_device_Info[0]['token_iot_number']
-                })
-
-            p['vod'] = []
-            for dm in uid_bucket_qs:
-                if p['UID'] == dm['uid']:
-                    if dm['endTime'] > now_time:
-                        p['vod'].append(dm)
-            p['preview'] = []
-
-            auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
-            bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
-
-            for up in uid_preview_qs:
-                if p['UID'] == up['uid']:
-                    obj = 'uid_preview/{uid}/channel_{channel}.png'.format(uid=up['uid'], channel=up['channel'])
-                    img_sign = bucket.sign_url('GET', obj, 300)
-                    p['preview'].append(img_sign)
-
-            p_uid = p['UID']
-
-            # 返回设备初始化字符
-            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']
-
-            if p_uid in uid_set_dict:
-                # 设备版本号
-                uidversion = uid_set_dict[p_uid]['version']
-                if len(uidversion) > 6:
-                    uidversion = uidversion[0: uidversion.rfind('.')]
-                p['uid_version'] = uidversion
-                p['ucode'] = uid_set_dict[p_uid]['ucode']
-                p['detect_interval'] = uid_set_dict[p_uid]['detect_interval']
-                p['detect_status'] = uid_set_dict[p_uid]['detect_status']
-                p['detect_group'] = uid_set_dict[p_uid]['detect_group']
-                p['region_alexa'] = uid_set_dict[p_uid]['region_alexa']
-                p['is_alexa'] = uid_set_dict[p_uid]['is_alexa']
-                p['deviceModel'] = uid_set_dict[p_uid]['deviceModel']
-                p['TimeZone'] = uid_set_dict[p_uid]['TimeZone']
-                p['TimeStatus'] = uid_set_dict[p_uid]['TimeStatus']
-                p['SpaceUsable'] = uid_set_dict[p_uid]['SpaceUsable']
-                p['SpaceSum'] = uid_set_dict[p_uid]['SpaceSum']
-                p['MirrorType'] = uid_set_dict[p_uid]['MirrorType']
-                p['RecordType'] = uid_set_dict[p_uid]['RecordType']
-                p['OutdoorModel'] = uid_set_dict[p_uid]['OutdoorModel']
-                p['WIFIName'] = uid_set_dict[p_uid]['WIFIName']
-                p['isDetector'] = uid_set_dict[p_uid]['isDetector']
-                p['DetectorRank'] = uid_set_dict[p_uid]['DetectorRank']
-                p['is_human'] = uid_set_dict[p_uid]['is_human']
-                p['is_custom_voice'] = uid_set_dict[p_uid]['is_custom_voice']
-                p['is_ptz'] = uid_set_dict[p_uid]['is_ptz']
-                p['channels'] = uid_set_dict[p_uid]['channels']
-                p['double_wifi'] = uid_set_dict[p_uid]['double_wifi']
-                p['is_ai'] = uid_set_dict[p_uid]['is_ai']
-                # 设备昵称 调用影子信息昵称,先阶段不可
-                if uid_set_dict[p_uid]['nickname']:
-                    p['NickName'] = uid_set_dict[p_uid]['nickname']
-            else:
-                # 设备版本号
-                p['uid_version'] = ''
-                p['ucode'] = ''
-            data.append(p)
-        return data
-
-    @classmethod
-    def get_family_list(cls, user_id, request_dict, response):
-        """
-        查询家庭列表
-        @param user_id: 用户id
-        @param request_dict: 请求
-        @param response: 响应
-        @return: 家庭列表items
-        """
-        lang = request_dict.get('lang', 'cn')
-        if user_id:
-            with transaction.atomic():
-                user_family_qs = UserFamily.objects.filter(user_id=user_id)
-                if not user_family_qs.exists():
-                    n_time = int(time.time())
-                    device_user = Device_User.objects.get(userID=user_id)
-                    # 创建默认家庭使用用户名或者邮箱作为名称
-                    family_name = device_user.username if device_user.username else device_user.userEmail
-                    family_name = family_name + "的家" if lang == 'cn' else family_name + " home"
-                    user_family = UserFamily.objects.create(user_id=user_id, name=family_name,
-                                                            updated_time=n_time,
-                                                            created_time=n_time)
-                    if user_family.id:
-                        member_permission_qs = FamilyMemberPermission.objects.filter(no='001').values('id')
-                        permission_id = member_permission_qs.first()['id']
-                        FamilyMember.objects.create(family_id=user_family.id, user_id=user_id,
-                                                    user_name=device_user.username, identity=1,
-                                                    permission_id=int(permission_id), sort=1, updated_time=n_time,
-                                                    created_time=n_time)
-                        cls.family_device_binding(user_id, family_id=user_family.id)
-
-            family_member_qs = FamilyMember.objects.filter(user_id=user_id) \
-                .order_by('sort').values('identity', 'family_id', 'family__name', 'permission__no', 'family__location')
-            items = []
-            data = {}
-            for item in family_member_qs:
-                data['familyId'] = item['family_id']
-                data['identity'] = item['identity']
-                data['familyName'] = item['family__name']
-                data['permissionId'] = item['permission_id']
-                data['permissionNo'] = item['permission__no']
-                data['familyLocation'] = item['family__location']
-                items.append(data)
-            return response.json(0, items)
-        return response.json(309)
-
-    @classmethod
-    def family_save(cls, user_id, request_dict, response):
-        """
-        家庭保存
-        @param user_id: 用户id
-        @param request_dict: 参数
-        @param response: 响应
-        @return:
-        """
-        family_id = request_dict.get('familyId', None)
-        family_name = request_dict.get('familyName', None)
-        location = request_dict.get('location', None)
-        with transaction.atomic():
-            now_time = int(time.time())
-            if family_id:
-                family_member = FamilyMember.objects.filter(family_id=family_id, user_id=user_id)
-                if family_member.exists():
-                    family_member = family_member.first()
-                    if family_member.identity == 0:
-                        return response.json(404)
-                    family_qs = UserFamily.objects.filter(id=family_id)
-                    if family_qs.exists():
-                        data = {
-                            'updated_time': now_time
-                        }
-                        if family_name:
-                            data['name'] = family_name
-                        if location:
-                            data['location'] = location
-                        family_qs.update(**data)
-                        return response.json(0)
-            data = {'user_id': user_id, 'updated_time': now_time, 'created_time': now_time}
-            if family_name:
-                data['name'] = family_name
-                if location:
-                    data['location'] = location
-                UserFamily.objects.create(**data)
-                return response.json(0)
-            return response.json(444)
-
-    @classmethod
-    def family_room_device_save(cls, family_id, room_id, device_id):
-        """
-        设备与家庭房间保存
-        @param family_id: 家庭id
-        @param room_id: 房间id
-        @param device_id: 设备id
-        @return: Boole
-        """
-        now_time = int(time.time())
-        family_room_device = FamilyRoomDevice.objects.filter(device_id=device_id)
-        if family_room_device.exists():
-            return False
-        data = {
-            'family_id': int(family_id),
-            'device_id': device_id,
-            'updated_time': now_time,
-            'created_time': now_time
-        }
-        if room_id:
-            room_id = int(room_id)
-            if FamilyRoom.objects.filter(id=room_id).exists():
-                data['room_id'] = room_id
-        FamilyRoomDevice.objects.create(**data)
-        return True
-
-    @classmethod
-    def family_device_binding(cls, user_id, family_id):
-        """
-        用户旧设备与默认家庭进行绑定
-        @param user_id:
-        @param family_id:
-        @return: True
-        """
-        device_info_qs = Device_Info.objects.filter(userID=user_id)
-        device_info_qs = device_info_qs.filter(~Q(isExist=0)).values('id')
-        if device_info_qs.exists():
-            with transaction.atomic():
-                not_time = time.time()
-                device_list = []
-                for item in device_info_qs:
-                    device_id = item['id']
-                    family_device_qs = FamilyRoomDevice.objects.filter(device_id=device_id)
-                    if not family_device_qs.exists():
-                        # 设备绑定家庭
-                        device_list.append(FamilyRoomDevice(family_id=family_id, device_id=device_id,
-                                                            created_time=not_time,
-                                                            updated_time=not_time))
-                if device_list:
-                    FamilyRoomDevice.objects.bulk_create(device_list)
-        return True
-
-    @classmethod
-    def get_family_room_list(cls, request_dict, response):
-        """
-        获取房间列表并统计该房间下有几台设备
-        @param request_dict: 请求参数
-        @param response: 响应参数
-        @return: total;data
-        """
-        family_id = request_dict.get('familyId', None)
-        if not family_id:
-            return response.json(444)
-        page_no = request_dict.get('pageNo', None)
-        page_size = request_dict.get('pageSize', None)
-        if not all([page_no, page_size]):
-            return response.json(444)
-        page_no = int(page_no)
-        page_size = int(page_size)
-        room_qs = FamilyRoom.objects.filter(family_id=family_id).order_by('sort')
-        total = room_qs.count()
-        room_qs = room_qs.values('id', 'name', 'sort')[(page_no - 1) * page_size: page_no * page_size]
-        room_list = []
-        if not room_qs.exists():
-            return response.json(0, room_list)
-        for item in room_qs:
-            item['deviceCount'] = FamilyRoomDevice.objects.filter(family_id=family_id, room_id=item['id']).count()
-            room_list.append(item)
-        return response.json(0, {'total': total, 'data': room_list})
-
-    @classmethod
-    def room_save(cls, request_dict, response):
-        """
-        房间保存
-        @param request_dict: 请求参数
-        @param response: 响应参数
-        @return:
-        """
-        family_id = request_dict.get('familyId', None)
-        room_name = request_dict.get('roomName', None)
-        room_id = request_dict.get('roomId', None)
-        if not all([family_id, room_name]):
-            return response.json(444)
-        with transaction.atomic():
-            now_time = int(time.time())
-            if room_id:
-                room_qs = FamilyRoom.objects.filter(id=int(room_id))
-                if room_qs.exists():
-                    room_qs.update(name=room_name, updated_time=now_time)
-                    return response.json(0)
-            room_qs = FamilyRoom.objects.filter(family_id=family_id, name=room_name)
-
-            if room_qs.exists():
-                room_dict = {'updated_time': now_time, 'name': room_name}
-                room_qs.update(**room_dict)
-            FamilyRoom.objects.create(family_id=family_id, name=room_name, updated_time=now_time,
-                                      created_time=now_time)
-        return response.json(0)
-
-    @classmethod
-    def room_sort_save(cls, request_dict, response):
-        """
-        房间排序
-        @param request_dict: 请求参数
-        @param response: 响应参数
-        @return:
-        """
-        ids = request_dict.getlist('ids', None)
-        if not ids:
-            return response.json(444)
-        for i, item in ids:
-            id_sort = item[i]
-            print(id_sort)
-        return response.json(0)
-
-    @classmethod
-    def get_member_permission_list(cls, user_id, request_dict, response):
-        """
-        获取用户权限列表
-        @param user_id:
-        @param request_dict:
-        @param response:
-        @return:
-        """
-        family_id = request_dict.get('familyId')
-        user_id = request_dict.get('userId', user_id)
-        if not family_id:
-            return response.json(404)
-        result = cls.get_member_permission_by_family_id(user_id, family_id)
-        return response.json(0, result)
-
-    @classmethod
-    def get_member_permission_by_family_id(cls, user_id, family_id):
-        """
-        获取权限列表并返回当前user_id所在家庭中权限
-        @param user_id:
-        @param family_id:
-        @return:
-        """
-        member_qs = FamilyMember.objects.filter(family_id=family_id)
-        if user_id:
-            member_qs = member_qs.filter(user_id=user_id).values()
-            if member_qs.exists():
-                member_qs = member_qs.first()
-        permission = FamilyMemberPermission.objects.all().values('id', 'no')
-        data_list = []
-        this_permission = {}
-        result = {}
-        for item in permission:
-            if item['id'] == member_qs['permission_id']:
-                this_permission['id'] = item['id']
-                this_permission['no'] = item['no']
-            data_list.append(item)
-        result['memberPermission'] = this_permission
-        result['permissionList'] = data_list
-        return result
-
-    @classmethod
-    def get_member_permission_details(cls, user_id, family_id):
-        member_qs = FamilyMember.objects.filter(family_id=family_id, user_id=user_id).values()
-        if member_qs.exists():
-            member_qs = member_qs.first()
-            permission_id = member_qs['permission_id']
-            permission_qs = FamilyMemberPermission.objects.filter(id=permission_id).values('no')
-            return permission_qs.first()['no']
-        return ''
+# # -*- encoding: utf-8 -*-
+# """
+# @File    : EquipmentFamilyController.py
+# @Time    : 2022/5/13 15:50
+# @Author  : stephen
+# @Email   : zhangdongming@asj6.wecom.work
+# @Software: PyCharm
+# """
+#
+# import time
+#
+# import oss2
+# from django.db import connection
+# from django.db import transaction
+# from django.db.models import Q
+# from django.views.generic.base import View
+#
+# from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY
+# from Controller.DeviceConfirmRegion import Device_Region
+# from Model.models import Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidChannelSetModel, \
+#     iotdeviceInfoModel, UIDModel, Device_User, UserFamily, FamilyMember, FamilyMemberPermission, \
+#     FamilyRoomDevice, FamilyRoom
+# from Object.ResponseObject import ResponseObject
+# from Object.TokenObject import TokenObject
+# from Service.CommonService import CommonService
+#
+#
+# # 家庭设备管理
+# class EquipmentFamilyView(View):
+#
+#     def get(self, request, *args, **kwargs):
+#         request.encoding = 'utf-8'
+#         operation = kwargs.get('operation')
+#         return self.validation(request.GET, request, operation)
+#
+#     def post(self, request, *args, **kwargs):
+#         request.encoding = 'utf-8'
+#
+#         operation = kwargs.get('operation')
+#         return self.validation(request.POST, request, operation)
+#
+#     def validation(self, request_dict, request, operation):
+#
+#         token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
+#         lang = request_dict.get('lang', None)
+#         if lang:
+#             response = ResponseObject(lang)
+#         else:
+#             response = ResponseObject(token.lang) if token.lang else ResponseObject()
+#
+#         if token.code != 0:
+#             return response.json(token.code)
+#         user_id = token.userID
+#
+#         # 手机端添加设备,查询,修改
+#         if operation == 'add':
+#             return self.do_save(user_id, request_dict, response, request)
+#         # 分页获取设备
+#         if operation == 'page':
+#             return self.do_device_page(user_id, request_dict, response)
+#         # 条件查询设备列表
+#         if operation == 'query':
+#             return self.do_device_query(user_id, request_dict, response)
+#         # 获取家庭列表
+#         if operation == 'family-list':
+#             return self.get_family_list(user_id, request_dict, response)
+#         # 家庭保存
+#         if operation == 'family-save':
+#             return self.family_save(user_id, request_dict, response)
+#         # 获取房间列表
+#         if operation == 'room-list':
+#             return self.get_family_room_list(request_dict, response)
+#         # 房间保存
+#         if operation == 'room-save':
+#             return self.room_save(request_dict, response)
+#         if operation == 'room-sort':
+#             return self.room_sort_save(request_dict, response)
+#         if operation == 'permission-list':
+#             return self.get_member_permission_list(user_id, request_dict, response)
+#         else:
+#             return response.json(414)
+#
+#     @classmethod
+#     def do_save(cls, user_id, request_dict, response, request):
+#         """
+#         添加设备
+#         @param request:
+#         @param user_id:
+#         @param request_dict:
+#         @param response:
+#         @return:
+#         """
+#         nick_name = request_dict.get('nickName', None)
+#         serial_number = request_dict.get('serialNumber', None)
+#         device_type = request_dict.get('deviceType', None)
+#         family_id = request_dict.get('familyId', None)
+#         room_id = request_dict.get('roomId', None)
+#         # type 可能为0
+#         if not all([nick_name, serial_number, device_type]):
+#             return response.json(444, {'param': 'nick_name, serial_number, device_type'})
+#         device_info_qs = Device_Info.objects.filter(serial_number=serial_number, userID_id=user_id)
+#         if device_info_qs:
+#             # 判断设备是否已存在
+#             if device_info_qs[0].isExist == 1:
+#                 return response.json(174)
+#             else:
+#                 device_info_qs.delete()
+#         try:
+#             with transaction.atomic():
+#                 # 格式化后的日期时间
+#                 now_time = CommonService.timestamp_to_str(int(time.time()))
+#                 device_id = CommonService.getUserID(getUser=False)
+#                 Device_Info.objects.create(id=device_id, userID_id=user_id, NickName=nick_name,
+#                                            Type=device_type,
+#                                            UID=serial_number,
+#                                            serial_number=serial_number, data_joined=now_time,
+#                                            update_time=now_time)
+#                 boole = cls.family_room_device_save(family_id, room_id, device_id)
+#                 if not boole:
+#                     return response.json(15)
+#                 # 判断是否有用户绑定
+#                 us_qs = UidSetModel.objects.filter(uid=serial_number)
+#                 if not us_qs:
+#                     n_time = int(time.time())
+#                     ip = CommonService.get_ip_address(request)
+#                     region_id = Device_Region().get_device_region(ip)
+#                     region_alexa = 'CN' if region_id == 1 else 'ALL'
+#                     uid_set_create_dict = {
+#                         'uid': serial_number,
+#                         'addTime': n_time,
+#                         'updTime': n_time,
+#                         'ip': CommonService.get_ip_address(request_dict),
+#                         'nickname': nick_name,
+#                         'region_alexa': region_alexa,
+#                     }
+#                     UidSetModel.objects.create(**uid_set_create_dict)
+#                 return response.json(0)
+#         except Exception as e:
+#             print(e)
+#             return response.json(177, repr(e))
+#
+#     @classmethod
+#     def do_device_page(cls, user_id, request_dict, response):
+#         """
+#         查询设备列表
+#         @param user_id:
+#         @param request_dict:
+#         @param response:
+#         @return:
+#         """
+#         page_no = request_dict.get('pageNo', None)
+#         page_size = request_dict.get('pageSize', None)
+#         if not all([page_no, page_size]):
+#             return response.json(444)
+#
+#         page = int(page_no)
+#         line = int(page_size)
+#         device_info_qs = Device_Info.objects.filter(userID=user_id)
+#         device_info_qs = device_info_qs.filter(~Q(isExist=0))
+#         total = device_info_qs.count()
+#         device_info_qs = device_info_qs.values("id", "userID_id", "NickName", "Type", "serial_number",
+#                                                "data_joined",
+#                                                "update_time")[(page - 1) * line: page * line]
+#         data = []
+#         for item in device_info_qs:
+#             data.append({
+#                 'id': item['id'],
+#                 'userId': item['userID_id'],
+#                 'nickName': item['NickName'],
+#                 'type': item['Type'],
+#                 'serialNumber': item['serial_number'],
+#                 'dataJoined': item['data_joined'].strftime("%Y-%m-%d %H:%M:%S"),
+#                 'updateTime': item['update_time'].strftime("%Y-%m-%d %H:%M:%S")
+#             })
+#         return response.json(0, {'list': data, 'total': total})
+#
+#     @classmethod
+#     def do_device_query(cls, user_id, request_dict, response):
+#         """
+#         查询用户设备信息
+#         @param user_id: 用户id
+#         @param request_dict: 请求参数
+#         @param response: 响应对象
+#         @return: response
+#         """
+#         page = request_dict.get('page', None)
+#         line = request_dict.get('line', None)
+#         nick_name = request_dict.get('NickName', None)
+#         family_id = request_dict.get('familyId', None)
+#         room_id = request_dict.get('roomId', None)
+#
+#         page = int(page)
+#         line = int(line)
+#         uid = request_dict.get('uid', None)
+#         if family_id:
+#             permission = cls.get_member_permission_details(user_id, int(family_id))
+#             if not permission or permission == '003':
+#                 return response.json(404)
+#         # 获取设备信息列表
+#         device_info_list = cls.get_device_info_list(user_id, nick_name, uid,
+#                                                     page, line, family_id, room_id)
+#         uid_list = []
+#         # 判断是否是主用户 isPrimaryUser=0:否,1:是
+#         for dvl in device_info_list:
+#             if dvl['primaryUserID'] and dvl['id'] == dvl['primaryUserID']:
+#                 dvl['isPrimaryUser'] = 1
+#             else:
+#                 dvl['isPrimaryUser'] = 0
+#             uid_list.append(dvl['UID'])
+#         # 设备关联套餐,设备预览图
+#         uid_bucket_qs, uid_preview_qs = cls.get_bucket_and_preview_by_uid(uid_list)
+#         # 设备配置信息
+#         uid_set_dict = cls.get_uid_set_dict(uid_list)
+#         # 设备详情信息
+#         result = cls.get_device_details(device_info_list, uid_bucket_qs, uid_preview_qs, uid_set_dict)
+#         items = []
+#         for index, item in enumerate(result):
+#             # 加密
+#             if item['View_Password']:
+#                 item['View_Password'] = CommonService.encode_data(item['View_Password'], 1, 4)
+#             items.append(item)
+#         return response.json(0, items)
+#
+#     @classmethod
+#     def get_device_info_list(cls, user_id, nick_name, uid, page, line, family_id, room_id):
+#         """
+#         根据用户id获取设备信息
+#         @param room_id: 家庭id
+#         @param family_id: 房间id
+#         @param uid: uid
+#         @param nick_name: 设备名称
+#         @param line: 条数
+#         @param page: 页数
+#         @param user_id: 用户id
+#         @return: device_info_list 设备信息列表
+#         """
+#         # 获取用户设备信息
+#         device_info_qs = Device_Info.objects.filter(userID_id=user_id)
+#         # 过滤已重置的设备
+#         device_info_qs = device_info_qs.filter(~Q(isExist=2))
+#         if nick_name:
+#             device_info_qs = device_info_qs.filter(NickName__icontains=nick_name)
+#         if uid:
+#             device_info_qs.filter(UID=uid)
+#         if family_id or room_id:
+#             # 根据家庭id获取房间id关联查询设备
+#             return cls.get_family_device_list(user_id, page, line, family_id, room_id)
+#         device_info_values = device_info_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')
+#
+#         device_info_values = device_info_values[(page - 1) * line:page * line]
+#         device_info_list = CommonService.qs_to_list(device_info_values)
+#         return device_info_list
+#
+#     @classmethod
+#     def get_family_device_list(cls, user_id, page_no, page_size, family_id, room_id):
+#         """
+#         获取关联家庭设备列表
+#         @param user_id: 用户id
+#         @param page_no: 页数
+#         @param page_size: 分页大小
+#         @param family_id: 家庭id
+#         @param room_id: 房间id
+#         @return: result_list
+#         """
+#         cursor = connection.cursor()
+#         sql = 'SELECT d.id,d.userID_id as userID,d.NickName,d.UID,d.View_Account,d.View_Password,d.ChannelIndex,' \
+#               'd.Type,d.isShare,d.primaryUserID,d.primaryMaster,d.data_joined,d.vodPrimaryUserID,d.vodPrimaryMaster, ' \
+#               'd.version,d.isVod,d.isExist,d.NotificationMode,d.isCameraOpenCloud,d.serial_number '
+#         sql += 'FROM device_info d INNER JOIN loocam_family_room_device l ON d.id = l.device_id '
+#         sql += 'WHERE d.userID_id = %s AND d.isExist != %s '
+#         if family_id:
+#             sql += ' AND l.family_id = %s '
+#         if room_id:
+#             sql += ' AND l.room_id = %s '
+#         sql += ' order by d.data_joined DESC,d.id DESC LIMIT %s,%s '
+#         cursor.execute(sql, [user_id, 2, int(family_id) if family_id else int(room_id), ((page_no - 1) * page_size),
+#                              page_size, ])
+#         data_obj = cursor.fetchall()
+#         cursor.close()  # 执行完,关闭
+#         connection.close()
+#         result_list = []
+#         col_names = [desc[0] for desc in cursor.description]
+#         for item in data_obj:
+#             val = dict(zip(col_names, item))
+#             user_id = val['userID']
+#             device_user_qs = Device_User.objects.filter(userID=user_id)
+#             val['userID__userEmail'] = device_user_qs.first().userEmail
+#             val['isShare'] = False if val['isShare'] == 0 else True
+#             if 'data_joined' in val:
+#                 if val['data_joined']:
+#                     val['data_joined'] = val['data_joined'].strftime("%Y-%m-%d %H:%M:%S")
+#                 else:
+#                     val['data_joined'] = ''
+#             result_list.append(val)
+#         return result_list
+#
+#     @classmethod
+#     def get_bucket_and_preview_by_uid(cls, uid_list):
+#         """
+#         根据uid列表查询套餐
+#         @param uid_list: uid列表
+#         @return: uid_bucket_qs
+#         """
+#         uid_bucket_qs = UID_Bucket.objects.filter(uid__in=uid_list).values('bucket__content', 'status', 'channel',
+#                                                                            'endTime', 'uid')
+#         uid_preview_qs = UID_Preview.objects.filter(uid__in=uid_list).order_by('channel').values('id', 'uid', 'channel')
+#         return uid_bucket_qs, uid_preview_qs
+#
+#     @classmethod
+#     def get_uid_set_dict(cls, uid_list):
+#         """
+#         获取uid配置信息
+#         @param uid_list: uid列表
+#         @return: uid_set_dict uid配置信息
+#         """
+#         uid_set_qs = UidSetModel.objects.filter(uid__in=uid_list) \
+#             .values('id', 'uid', 'version', 'nickname', 'ucode',
+#                     'detect_status', 'detect_group',
+#                     'detect_interval',
+#                     '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')
+#         uid_set_dict = {}
+#         for us in uid_set_qs:
+#             uid_set_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'],
+#                 'is_ai': us['is_ai']
+#             }
+#             # 从uid_channel里面取出通道配置信息
+#             uid_channel_set_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_list = []
+#             for ucs in uid_channel_set_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_list.append(channels_dict)
+#             uid_set_dict[us['uid']]['channels'] = channels_list
+#         return uid_set_dict
+#
+#     @classmethod
+#     def get_device_details(cls, device_info_list, uid_bucket_qs, uid_preview_qs, uid_set_dict):
+#         """
+#         设备详情
+#         @param device_info_list: 设备信息列表
+#         @param uid_bucket_qs: 套餐对象
+#         @param uid_preview_qs:
+#         @param uid_set_dict:
+#         @return:
+#         """
+#         now_time = int(time.time())
+#         data = []
+#         for p in device_info_list:
+#             # 获取iotDeviceInfo表的endpoint和tokenIotNumber
+#             p['iot'] = []
+#             if p['serial_number']:  # 存在序列号根据序列号查询
+#                 iot_device_info_qs = iotdeviceInfoModel.objects.filter(serial_number=p['serial_number'][0:6])
+#             else:  # 根据uid查询
+#                 iot_device_info_qs = iotdeviceInfoModel.objects.filter(uid=p['UID'])
+#             if iot_device_info_qs.exists():
+#                 iot_device_Info = iot_device_info_qs.values('endpoint', 'token_iot_number')
+#                 p['iot'].append({
+#                     'endpoint': iot_device_Info[0]['endpoint'],
+#                     'token_iot_number': iot_device_Info[0]['token_iot_number']
+#                 })
+#
+#             p['vod'] = []
+#             for dm in uid_bucket_qs:
+#                 if p['UID'] == dm['uid']:
+#                     if dm['endTime'] > now_time:
+#                         p['vod'].append(dm)
+#             p['preview'] = []
+#
+#             auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
+#             bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
+#
+#             for up in uid_preview_qs:
+#                 if p['UID'] == up['uid']:
+#                     obj = 'uid_preview/{uid}/channel_{channel}.png'.format(uid=up['uid'], channel=up['channel'])
+#                     img_sign = bucket.sign_url('GET', obj, 300)
+#                     p['preview'].append(img_sign)
+#
+#             p_uid = p['UID']
+#
+#             # 返回设备初始化字符
+#             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']
+#
+#             if p_uid in uid_set_dict:
+#                 # 设备版本号
+#                 uidversion = uid_set_dict[p_uid]['version']
+#                 if len(uidversion) > 6:
+#                     uidversion = uidversion[0: uidversion.rfind('.')]
+#                 p['uid_version'] = uidversion
+#                 p['ucode'] = uid_set_dict[p_uid]['ucode']
+#                 p['detect_interval'] = uid_set_dict[p_uid]['detect_interval']
+#                 p['detect_status'] = uid_set_dict[p_uid]['detect_status']
+#                 p['detect_group'] = uid_set_dict[p_uid]['detect_group']
+#                 p['region_alexa'] = uid_set_dict[p_uid]['region_alexa']
+#                 p['is_alexa'] = uid_set_dict[p_uid]['is_alexa']
+#                 p['deviceModel'] = uid_set_dict[p_uid]['deviceModel']
+#                 p['TimeZone'] = uid_set_dict[p_uid]['TimeZone']
+#                 p['TimeStatus'] = uid_set_dict[p_uid]['TimeStatus']
+#                 p['SpaceUsable'] = uid_set_dict[p_uid]['SpaceUsable']
+#                 p['SpaceSum'] = uid_set_dict[p_uid]['SpaceSum']
+#                 p['MirrorType'] = uid_set_dict[p_uid]['MirrorType']
+#                 p['RecordType'] = uid_set_dict[p_uid]['RecordType']
+#                 p['OutdoorModel'] = uid_set_dict[p_uid]['OutdoorModel']
+#                 p['WIFIName'] = uid_set_dict[p_uid]['WIFIName']
+#                 p['isDetector'] = uid_set_dict[p_uid]['isDetector']
+#                 p['DetectorRank'] = uid_set_dict[p_uid]['DetectorRank']
+#                 p['is_human'] = uid_set_dict[p_uid]['is_human']
+#                 p['is_custom_voice'] = uid_set_dict[p_uid]['is_custom_voice']
+#                 p['is_ptz'] = uid_set_dict[p_uid]['is_ptz']
+#                 p['channels'] = uid_set_dict[p_uid]['channels']
+#                 p['double_wifi'] = uid_set_dict[p_uid]['double_wifi']
+#                 p['is_ai'] = uid_set_dict[p_uid]['is_ai']
+#                 # 设备昵称 调用影子信息昵称,先阶段不可
+#                 if uid_set_dict[p_uid]['nickname']:
+#                     p['NickName'] = uid_set_dict[p_uid]['nickname']
+#             else:
+#                 # 设备版本号
+#                 p['uid_version'] = ''
+#                 p['ucode'] = ''
+#             data.append(p)
+#         return data
+#
+#     @classmethod
+#     def get_family_list(cls, user_id, request_dict, response):
+#         """
+#         查询家庭列表
+#         @param user_id: 用户id
+#         @param request_dict: 请求
+#         @param response: 响应
+#         @return: 家庭列表items
+#         """
+#         lang = request_dict.get('lang', 'cn')
+#         if user_id:
+#             with transaction.atomic():
+#                 user_family_qs = UserFamily.objects.filter(user_id=user_id)
+#                 if not user_family_qs.exists():
+#                     n_time = int(time.time())
+#                     device_user = Device_User.objects.get(userID=user_id)
+#                     # 创建默认家庭使用用户名或者邮箱作为名称
+#                     family_name = device_user.username if device_user.username else device_user.userEmail
+#                     family_name = family_name + "的家" if lang == 'cn' else family_name + " home"
+#                     user_family = UserFamily.objects.create(user_id=user_id, name=family_name,
+#                                                             updated_time=n_time,
+#                                                             created_time=n_time)
+#                     if user_family.id:
+#                         member_permission_qs = FamilyMemberPermission.objects.filter(no='001').values('id')
+#                         permission_id = member_permission_qs.first()['id']
+#                         FamilyMember.objects.create(family_id=user_family.id, user_id=user_id,
+#                                                     user_name=device_user.username, identity=1,
+#                                                     permission_id=int(permission_id), sort=1, updated_time=n_time,
+#                                                     created_time=n_time)
+#                         cls.family_device_binding(user_id, family_id=user_family.id)
+#
+#             family_member_qs = FamilyMember.objects.filter(user_id=user_id) \
+#                 .order_by('sort').values('identity', 'family_id', 'family__name', 'permission__no', 'family__location')
+#             items = []
+#             data = {}
+#             for item in family_member_qs:
+#                 data['familyId'] = item['family_id']
+#                 data['identity'] = item['identity']
+#                 data['familyName'] = item['family__name']
+#                 data['permissionId'] = item['permission_id']
+#                 data['permissionNo'] = item['permission__no']
+#                 data['familyLocation'] = item['family__location']
+#                 items.append(data)
+#             return response.json(0, items)
+#         return response.json(309)
+#
+#     @classmethod
+#     def family_save(cls, user_id, request_dict, response):
+#         """
+#         家庭保存
+#         @param user_id: 用户id
+#         @param request_dict: 参数
+#         @param response: 响应
+#         @return:
+#         """
+#         family_id = request_dict.get('familyId', None)
+#         family_name = request_dict.get('familyName', None)
+#         location = request_dict.get('location', None)
+#         with transaction.atomic():
+#             now_time = int(time.time())
+#             if family_id:
+#                 family_member = FamilyMember.objects.filter(family_id=family_id, user_id=user_id)
+#                 if family_member.exists():
+#                     family_member = family_member.first()
+#                     if family_member.identity == 0:
+#                         return response.json(404)
+#                     family_qs = UserFamily.objects.filter(id=family_id)
+#                     if family_qs.exists():
+#                         data = {
+#                             'updated_time': now_time
+#                         }
+#                         if family_name:
+#                             data['name'] = family_name
+#                         if location:
+#                             data['location'] = location
+#                         family_qs.update(**data)
+#                         return response.json(0)
+#             data = {'user_id': user_id, 'updated_time': now_time, 'created_time': now_time}
+#             if family_name:
+#                 data['name'] = family_name
+#                 if location:
+#                     data['location'] = location
+#                 UserFamily.objects.create(**data)
+#                 return response.json(0)
+#             return response.json(444)
+#
+#     @classmethod
+#     def family_room_device_save(cls, family_id, room_id, device_id):
+#         """
+#         设备与家庭房间保存
+#         @param family_id: 家庭id
+#         @param room_id: 房间id
+#         @param device_id: 设备id
+#         @return: Boole
+#         """
+#         now_time = int(time.time())
+#         family_room_device = FamilyRoomDevice.objects.filter(device_id=device_id)
+#         if family_room_device.exists():
+#             return False
+#         data = {
+#             'family_id': int(family_id),
+#             'device_id': device_id,
+#             'updated_time': now_time,
+#             'created_time': now_time
+#         }
+#         if room_id:
+#             room_id = int(room_id)
+#             if FamilyRoom.objects.filter(id=room_id).exists():
+#                 data['room_id'] = room_id
+#         FamilyRoomDevice.objects.create(**data)
+#         return True
+#
+#     @classmethod
+#     def family_device_binding(cls, user_id, family_id):
+#         """
+#         用户旧设备与默认家庭进行绑定
+#         @param user_id:
+#         @param family_id:
+#         @return: True
+#         """
+#         device_info_qs = Device_Info.objects.filter(userID=user_id)
+#         device_info_qs = device_info_qs.filter(~Q(isExist=0)).values('id')
+#         if device_info_qs.exists():
+#             with transaction.atomic():
+#                 not_time = time.time()
+#                 device_list = []
+#                 for item in device_info_qs:
+#                     device_id = item['id']
+#                     family_device_qs = FamilyRoomDevice.objects.filter(device_id=device_id)
+#                     if not family_device_qs.exists():
+#                         # 设备绑定家庭
+#                         device_list.append(FamilyRoomDevice(family_id=family_id, device_id=device_id,
+#                                                             created_time=not_time,
+#                                                             updated_time=not_time))
+#                 if device_list:
+#                     FamilyRoomDevice.objects.bulk_create(device_list)
+#         return True
+#
+#     @classmethod
+#     def get_family_room_list(cls, request_dict, response):
+#         """
+#         获取房间列表并统计该房间下有几台设备
+#         @param request_dict: 请求参数
+#         @param response: 响应参数
+#         @return: total;data
+#         """
+#         family_id = request_dict.get('familyId', None)
+#         if not family_id:
+#             return response.json(444)
+#         page_no = request_dict.get('pageNo', None)
+#         page_size = request_dict.get('pageSize', None)
+#         if not all([page_no, page_size]):
+#             return response.json(444)
+#         page_no = int(page_no)
+#         page_size = int(page_size)
+#         room_qs = FamilyRoom.objects.filter(family_id=family_id).order_by('sort')
+#         total = room_qs.count()
+#         room_qs = room_qs.values('id', 'name', 'sort')[(page_no - 1) * page_size: page_no * page_size]
+#         room_list = []
+#         if not room_qs.exists():
+#             return response.json(0, room_list)
+#         for item in room_qs:
+#             item['deviceCount'] = FamilyRoomDevice.objects.filter(family_id=family_id, room_id=item['id']).count()
+#             room_list.append(item)
+#         return response.json(0, {'total': total, 'data': room_list})
+#
+#     @classmethod
+#     def room_save(cls, request_dict, response):
+#         """
+#         房间保存
+#         @param request_dict: 请求参数
+#         @param response: 响应参数
+#         @return:
+#         """
+#         family_id = request_dict.get('familyId', None)
+#         room_name = request_dict.get('roomName', None)
+#         room_id = request_dict.get('roomId', None)
+#         if not all([family_id, room_name]):
+#             return response.json(444)
+#         with transaction.atomic():
+#             now_time = int(time.time())
+#             if room_id:
+#                 room_qs = FamilyRoom.objects.filter(id=int(room_id))
+#                 if room_qs.exists():
+#                     room_qs.update(name=room_name, updated_time=now_time)
+#                     return response.json(0)
+#             room_qs = FamilyRoom.objects.filter(family_id=family_id, name=room_name)
+#
+#             if room_qs.exists():
+#                 room_dict = {'updated_time': now_time, 'name': room_name}
+#                 room_qs.update(**room_dict)
+#             FamilyRoom.objects.create(family_id=family_id, name=room_name, updated_time=now_time,
+#                                       created_time=now_time)
+#         return response.json(0)
+#
+#     @classmethod
+#     def room_sort_save(cls, request_dict, response):
+#         """
+#         房间排序
+#         @param request_dict: 请求参数
+#         @param response: 响应参数
+#         @return:
+#         """
+#         ids = request_dict.getlist('ids', None)
+#         if not ids:
+#             return response.json(444)
+#         for i, item in ids:
+#             id_sort = item[i]
+#             print(id_sort)
+#         return response.json(0)
+#
+#     @classmethod
+#     def get_member_permission_list(cls, user_id, request_dict, response):
+#         """
+#         获取用户权限列表
+#         @param user_id:
+#         @param request_dict:
+#         @param response:
+#         @return:
+#         """
+#         family_id = request_dict.get('familyId')
+#         user_id = request_dict.get('userId', user_id)
+#         if not family_id:
+#             return response.json(404)
+#         result = cls.get_member_permission_by_family_id(user_id, family_id)
+#         return response.json(0, result)
+#
+#     @classmethod
+#     def get_member_permission_by_family_id(cls, user_id, family_id):
+#         """
+#         获取权限列表并返回当前user_id所在家庭中权限
+#         @param user_id:
+#         @param family_id:
+#         @return:
+#         """
+#         member_qs = FamilyMember.objects.filter(family_id=family_id)
+#         if user_id:
+#             member_qs = member_qs.filter(user_id=user_id).values()
+#             if member_qs.exists():
+#                 member_qs = member_qs.first()
+#         permission = FamilyMemberPermission.objects.all().values('id', 'no')
+#         data_list = []
+#         this_permission = {}
+#         result = {}
+#         for item in permission:
+#             if item['id'] == member_qs['permission_id']:
+#                 this_permission['id'] = item['id']
+#                 this_permission['no'] = item['no']
+#             data_list.append(item)
+#         result['memberPermission'] = this_permission
+#         result['permissionList'] = data_list
+#         return result
+#
+#     @classmethod
+#     def get_member_permission_details(cls, user_id, family_id):
+#         member_qs = FamilyMember.objects.filter(family_id=family_id, user_id=user_id).values()
+#         if member_qs.exists():
+#             member_qs = member_qs.first()
+#             permission_id = member_qs['permission_id']
+#             permission_qs = FamilyMemberPermission.objects.filter(id=permission_id).values('no')
+#             return permission_qs.first()['no']
+#         return ''