Jelajahi Sumber

根据家庭id查询智能场景日志、日志日期

peng 3 tahun lalu
induk
melakukan
0a3b370868
2 mengubah file dengan 40 tambahan dan 25 penghapusan
  1. 38 24
      Controller/SensorGateway/SmartSceneController.py
  2. 2 1
      Model/models.py

+ 38 - 24
Controller/SensorGateway/SmartSceneController.py

@@ -574,7 +574,7 @@ class SmartSceneView(View):
                 if not device_id:
                     return response.json(444, {'error param': 'deviceId'})
                 sub_device_id = 0
-                device_qs = Device_Info.objects.filter(id=device_id).value('serial_number')
+                device_qs = Device_Info.objects.filter(id=device_id).values('serial_number')
                 if not device_qs.exists():
                     return response.json(173)
                 serial_number = device_qs[0]['serial_number']
@@ -705,39 +705,54 @@ class SmartSceneView(View):
         @param response: 响应对象
         @return: response
         """
+        family_id = request_dict.get('familyId', None)
         page = request_dict.get('page', None)
         size = request_dict.get('size', None)
         start_time = request_dict.get('startTime', None)
         end_time = request_dict.get('endTime', None)
 
-        if not all([page, size]):
+        if not all([family_id, page, size]):
             return response.json(444, {'error param': 'page or size'})
 
+        device_list = []
+        sub_device_list = []
+        family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id).values('device_id', 'sub_device')
+        for item in family_room_device_qs:
+            if item['sub_device'] and item['sub_device'] not in sub_device_list:
+                sub_device_list.append(item['sub_device'])
+            if item['device_id'] not in device_list:
+                device_list.append(item['device_id'])
+
         try:
             page, size = int(page), int(size)
+            scene_log_qs = SceneLog.objects.filter(
+                Q(device_id__in=device_list) | Q(sub_device_id__in=sub_device_list))
             if start_time and end_time:
-                scene_log_qs = SceneLog.objects.filter(created_time__range=(start_time, end_time)). \
-                                   values('scene_id', 'status', 'created_time').order_by(
+                scene_log_qs = scene_log_qs.filter(created_time__range=(start_time, end_time)).values(
+                    'status',
+                    'created_time',
+                    'device_id',
+                    'sub_device_id',
+                    'scene_name',
+                    'tasks').order_by(
                     '-created_time')[(page - 1) * size:page * size]
             else:
-                scene_log_qs = SceneLog.objects.all().values('scene_id', 'status',
-                                                             'created_time').order_by(
+                scene_log_qs = scene_log_qs.values('status',
+                                                   'created_time', 'device_id', 'sub_device_id', 'scene_name',
+                                                   'tasks').order_by(
                     '-created_time')[(page - 1) * size:page * size]
             if not scene_log_qs.exists():
                 return response.json(0, [])
             for item in scene_log_qs:
-                scene_id = item['scene_id']
-                smart_scene_qs = SmartScene.objects.filter(id=scene_id).values('scene_name', 'device_id', 'sub_device_id', 'tasks')
-                device_id = smart_scene_qs[0]['device_id']
-                sub_device_id = smart_scene_qs[0]['sub_device_id']
+                device_id = item['device_id']
+                sub_device_id = item['sub_device_id']
                 if device_id:
                     qs = Device_Info.objects.filter(id=device_id).values('Type')
                     item['device_type'] = qs[0]['Type']
                 else:
                     qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('device_type')
                     item['device_type'] = qs[0]['device_type']
-                item['scene_name'] = smart_scene_qs[0]['scene_name']
-                item['tasks'] = eval(smart_scene_qs[0]['tasks'])
+                item['tasks'] = eval(item['tasks'])
             return response.json(0, list(scene_log_qs))
         except Exception as e:
             print(repr(e))
@@ -753,24 +768,23 @@ class SmartSceneView(View):
         @param response: 响应对象
         @return: response
         """
-        device_id = request_dict.get('deviceId', None)
-        sub_device_id = request_dict.get('subDeviceId', None)
+        family_id = request_dict.get('familyId', None)
 
-        if device_id:
-            device_dict = {
-                'device_id': device_id
-            }
-        else:
-            device_dict = {
-                'sub_device_id': sub_device_id
-            }
-        if not any([device_id, sub_device_id]):
+        if not family_id:
             return response.json(444, {'error param': 'device_id and gatewaySubId'})
+        device_list = []
+        sub_device_list = []
+        family_room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id).values('device_id', 'sub_device')
+        for item in family_room_device_qs:
+            if item['sub_device'] and item['sub_device'] not in sub_device_list:
+                sub_device_list.append(item['sub_device'])
+            if item['device_id'] not in device_list:
+                device_list.append(item['device_id'])
 
         try:
             scene_log_qs = SceneLog.objects.extra(
                 select={'date': "FROM_UNIXTIME(created_time,'%%Y-%%m-%%d')"}).values('date'). \
-                               filter(**device_dict). \
+                               filter(Q(device_id__in=device_list) | Q(sub_device_id__in=sub_device_list)). \
                                annotate(count=Count('created_time')). \
                                order_by('-date')[:31]
             log_date_list = []

+ 2 - 1
Model/models.py

@@ -2658,10 +2658,11 @@ class EffectiveTime(models.Model):
 
 class SceneLog(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='自增标记ID')
+    scene_name = models.CharField(default='', max_length=100, verbose_name='场景名称')
     scene_id = models.IntegerField(default=0, verbose_name='关联场景id')
     device_id = models.CharField(default='', max_length=32, verbose_name='关联网关id')
     sub_device_id = models.IntegerField(default=0, verbose_name='关联子设备id')
-    scene_log = models.TextField(default='', verbose_name='场景日志')
+    tasks = models.TextField(default='', verbose_name=u'任务')
     status = models.SmallIntegerField(default=0, verbose_name='场景状态')
     created_time = models.IntegerField(default=0, verbose_name='场景触发时间')