Browse Source

家庭关联设备查询,家庭房间增、修改、查询。权限列表查询

zhangdongming 3 years ago
parent
commit
89fe3770d7
1 changed files with 188 additions and 5 deletions
  1. 188 5
      SensorGateway/EquipmentFamilyController.py

+ 188 - 5
SensorGateway/EquipmentFamilyController.py

@@ -10,6 +10,7 @@
 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
@@ -54,18 +55,28 @@ class EquipmentFamilyView(View):
         # 手机端添加设备,查询,修改
         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)
 
@@ -82,6 +93,8 @@ class EquipmentFamilyView(View):
         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'})
@@ -102,7 +115,9 @@ class EquipmentFamilyView(View):
                                            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:
@@ -171,12 +186,15 @@ class EquipmentFamilyView(View):
         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)
+        # 获取设备信息列表
         device_info_list = cls.get_device_info_list(user_id, nick_name, uid,
-                                                    page, line)
+                                                    page, line, family_id, room_id)
         uid_list = []
         # 判断是否是主用户 isPrimaryUser=0:否,1:是
         for dvl in device_info_list:
@@ -200,9 +218,11 @@ class EquipmentFamilyView(View):
         return response.json(0, items)
 
     @classmethod
-    def get_device_info_list(cls, user_id, nick_name, uid, page, line):
+    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: 条数
@@ -218,6 +238,9 @@ class EquipmentFamilyView(View):
             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',
@@ -225,10 +248,54 @@ class EquipmentFamilyView(View):
                                                    '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):
         """
@@ -452,16 +519,83 @@ class EquipmentFamilyView(View):
                 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 = LoocamFamilyMember.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 = LoocamUserFamily.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
+                LoocamUserFamily.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 = LoocamFamilyRoomDevice.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 LoocamFamilyRoom.objects.filter(id=room_id).exists():
+                data['room_id'] = room_id
+        LoocamFamilyRoomDevice.objects.create(**data)
+        return True
+
     @classmethod
     def family_device_binding(cls, user_id, family_id):
         """
-        根据用户设备与家庭进行绑定
+        用户设备与默认家庭进行绑定
         @param user_id:
         @param family_id:
         @return: True
@@ -522,11 +656,18 @@ class EquipmentFamilyView(View):
         """
         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():
-            room_qs = LoocamFamilyRoom.objects.filter(family_id=family_id, name=room_name)
             now_time = int(time.time())
+            if room_id:
+                room_qs = LoocamFamilyRoom.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 = LoocamFamilyRoom.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)
@@ -549,3 +690,45 @@ class EquipmentFamilyView(View):
             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 = LoocamFamilyMember.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 = LoocamFamilyMemberPermission.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