Browse Source

修改设备分类排序逻辑

peng 3 years ago
parent
commit
177d617f11

+ 14 - 2
Controller/SensorGateway/EquipmentFamilyController.py

@@ -151,6 +151,7 @@ class EquipmentFamilyView(View):
         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, isShare=False)
+        device_type = int(device_type)
         if device_info_qs:
             qs = device_info_qs.values('NickName', 'userID_id', 'userID__userEmail', 'userID__phone',
                                        'userID__username', 'userID__NickName')
@@ -186,7 +187,7 @@ 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)
+                boole = cls.family_room_device_save(family_id, room_id, device_id, device_type)
                 if not boole:
                     return response.json(15)
                 # 判断是否有用户绑定
@@ -728,7 +729,7 @@ class EquipmentFamilyView(View):
             return response.json(444)
 
     @classmethod
-    def family_room_device_save(cls, family_id, room_id, device_id):
+    def family_room_device_save(cls, family_id, room_id, device_id, device_type):
         """
         设备与家庭房间保存
         @param family_id: 家庭id
@@ -746,6 +747,17 @@ class EquipmentFamilyView(View):
             'updated_time': now_time,
             'created_time': now_time
         }
+
+        if device_type == 200:
+            category = 0
+        else:
+            category = 1
+        data['category'] = category
+        # 查询类别排序
+        family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=int(family_id), category=category).values(
+            'category_sort')
+        if family_room_device_qs.exists():
+            data['category_sort'] = family_room_device_qs[0]['category_sort']
         if room_id:
             room_id = int(room_id)
             if FamilyRoom.objects.filter(id=room_id).exists():

+ 72 - 5
Controller/SensorGateway/GatewayFamilyRoomController.py

@@ -54,6 +54,10 @@ class GatewayFamilyRoomView(View):
             return self.all_devices(request_dict, response)
         elif operation == 'devices-sort':  # 家庭设备排序
             return self.devices_sort(request_dict, response)
+        elif operation == 'device-category':  # 获取设备类别
+            return self.device_category(request_dict, response)
+        elif operation == 'category-sort':  # 设备类别排序
+            return self.category_sort(request_dict, response)
         else:
             return response.json(414)
 
@@ -234,19 +238,29 @@ class GatewayFamilyRoomView(View):
                                                                                                 'device__Type',
                                                                                                 'device__NickName',
                                                                                                 'room_id',
-                                                                                                'sub_device').order_by(
+                                                                                                'sub_device',
+                                                                                                'category',
+                                                                                                ).order_by(
                 'sort')
+
             if not family_room_device_qs.exists():
                 return response.json(0, [])
-
+            sort = FamilyRoomDevice.objects.filter(family_id=family_id).values('category').annotate(
+                count=Count('category')).values('category', 'category_sort')
+            for item in sort:
+                if item['category'] == 0:
+                    item['category_name'] = '网关子设备类'
+                else:
+                    item['category_name'] = '摄像头类'
             gateways = []
             cameras = []
             # 查询房间名称
             for device in family_room_device_qs:
                 room_id = device['room_id']
                 device_type = device['device__Type']
+                category = device['category']
                 room_name = FamilyRoom.objects.filter(id=room_id)
-                if device_type == 200:  # 网关设备
+                if category == 0:  # 网关设备
                     if not device['sub_device']:
                         device_dict = {
                             'deviceId': device['device_id'],
@@ -256,7 +270,7 @@ class GatewayFamilyRoomView(View):
                         }
                     else:
                         sub_device_qs = GatewaySubDevice.objects.filter(id=device['sub_device']).values('device_type',
-                                                                                                    'nickname')
+                                                                                                        'nickname')
                         device_dict = {
                             'deviceId': device['sub_device'],
                             'deviceType': sub_device_qs[0]['device_type'],
@@ -265,6 +279,7 @@ class GatewayFamilyRoomView(View):
                         }
 
                     gateways.append(device_dict)
+
                 else:  # 摄像头设备
                     cameras.append({
                         'deviceId': device['device_id'],
@@ -274,7 +289,8 @@ class GatewayFamilyRoomView(View):
                     })
             device_room = {
                 'gateways': gateways,
-                'cameras': cameras
+                'cameras': cameras,
+                'sort': list(sort)
             }
             return response.json(0, device_room)
         except Exception as e:
@@ -306,3 +322,54 @@ class GatewayFamilyRoomView(View):
             return response.json(0)
         except Exception as e:
             return response.json(500, repr(e))
+
+    @staticmethod
+    def device_category(request_dict, response):
+        """
+        获取设备类别排序
+        @param request_dict: 请求参数
+        @request_dict 家庭id: family_id
+        @param response: 响应参数
+        @return:
+        """
+        family_id = request_dict.get('familyId', None)
+        if not family_id:
+            return response.json(444)
+        try:
+            family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id).values('category').annotate(
+                count=Count('category')).values('category', 'category_sort')
+            for item in family_room_device_qs:
+                if item['category'] == 0:
+                    item['category_name'] = '网关子设备类'
+                else:
+                    item['category_name'] = '摄像头类'
+            return response.json(0, list(family_room_device_qs))
+        except Exception as e:
+            return response.json(500, repr(e))
+
+    @staticmethod
+    def category_sort(request_dict, response):
+        """
+        家庭设备排序
+        @param request_dict: 请求参数
+        @request_dict 家庭id: family_id
+        @request_dict 排序列表: category_sort
+        @param response: 响应参数
+        @return:
+        """
+        family_id = request_dict.get('familyId', None)
+        category_sort = request_dict.get('categorySort', None)
+        if not all([family_id, category_sort]):
+            return response.json(444)
+        try:
+            category_sort_list = eval(category_sort)
+            family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id)
+            if family_room_device_qs.exists():
+                with transaction.atomic():
+                    for item in category_sort_list:
+                        category = item['category']
+                        category_sort = item['category_sort']
+                        family_room_device_qs.filter(category=category).update(category_sort=category_sort)
+            return response.json(0)
+        except Exception as e:
+            return response.json(500, repr(e))

+ 15 - 2
Controller/SensorGateway/SubDeviceController.py

@@ -113,8 +113,21 @@ class GatewaySubDeviceView(View):
                                                              firmware_version=firmware_version, is_tampered=is_tampered,
                                                              hardware_version=hardware_version,
                                                              created_time=now_time, updated_time=now_time)
-                FamilyRoomDevice.objects.create(family_id=family_id, room_id=room_id, device_id=device_id,
-                                                sub_device=sub_device.id, created_time=now_time, updated_time=now_time)
+                if device_type == 216:
+                    sub_device.is_tampered = 1
+                    sub_device.save()
+                family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id, category=0).values(
+                    'category_sort')
+                if family_room_device_qs.exists():
+                    FamilyRoomDevice.objects.create(family_id=family_id, room_id=room_id, device_id=device_id,
+                                                    sub_device=sub_device.id, created_time=now_time,
+                                                    updated_time=now_time,
+                                                    category_sort=family_room_device_qs[0]['category_sort'])
+                else:
+                    FamilyRoomDevice.objects.create(family_id=family_id, room_id=room_id, device_id=device_id,
+                                                    sub_device=sub_device.id, created_time=now_time,
+                                                    updated_time=now_time)
+
             return response.json(0)
         except Exception as e:
             return response.json(500, repr(e))

+ 2 - 0
Model/models.py

@@ -2564,6 +2564,8 @@ class FamilyRoomDevice(models.Model):
                                verbose_name='关联设备信息id')
     sub_device = models.IntegerField(default=0, blank=True, verbose_name='关联子设备信息id')
     sort = models.IntegerField(default=0, blank=True, verbose_name=u'排序,越小越靠前')
+    category = models.SmallIntegerField(default=0, verbose_name='类别{0:网关传感器类;1:摄像头类}')
+    category_sort = models.IntegerField(default=0, blank=True, verbose_name='类别排序')
     updated_time = models.IntegerField(default=0, verbose_name='更新时间')
     created_time = models.IntegerField(default=0, verbose_name='创建时间')