| 
					
				 | 
			
			
				@@ -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 = [] 
			 |