Browse Source

优化插座开关日志查询

zhangdongming 1 year ago
parent
commit
4d7a2e591f
1 changed files with 30 additions and 16 deletions
  1. 30 16
      Controller/SensorGateway/SmartSocketController.py

+ 30 - 16
Controller/SensorGateway/SmartSocketController.py

@@ -13,7 +13,7 @@ import time
 
 
 import requests
 import requests
 from dateutil.parser import parse
 from dateutil.parser import parse
-from django.db import transaction
+from django.db import transaction, connection, connections
 from django.db.models import Sum, Count
 from django.db.models import Sum, Count
 from django.http import QueryDict
 from django.http import QueryDict
 from django.views import View
 from django.views import View
@@ -578,25 +578,39 @@ class SmartSocketView(View):
         page, size = int(page), int(size)
         page, size = int(page), int(size)
 
 
         try:
         try:
-            scene_log_qs = SceneLog.objects.filter(device_id=serial_number).values('tasks', 'status',
-                                                                                   'created_time')
-            if startTime is None and endTime is None:
-                scene_log_qs = scene_log_qs.order_by('-created_time')[(page - 1) * size:page * size]
-                if not scene_log_qs.exists():
-                    return response.json(0, [])
+            sql_query = """
+                        SELECT DISTINCT 
+                            tasks,
+                            status,
+                            created_time
+                        FROM scene_log
+                        WHERE device_id = %s {}
+                        ORDER BY created_time,id DESC
+                        LIMIT %s, %s;
+                    """
+
+            params = [serial_number]
+
+            if startTime is not None and endTime is not None:
+                sql_query = sql_query.format(
+                    "AND created_time >= %s AND created_time < %s ")
+                params.extend([startTime, endTime])
             else:
             else:
-                scene_log_qs = scene_log_qs.filter(device_id=serial_number, created_time__gte=startTime,
-                                                   created_time__lt=endTime).order_by(
-                    '-created_time', '-id')[(page - 1) * size:page * size]
-                if not scene_log_qs.exists():
-                    return response.json(0, [])
+                sql_query = sql_query.format(" ")
+            params.extend([(page - 1) * size, size])
+            cursor = connections['mysql02'].cursor()
+            cursor.execute(sql_query, params)
+            results = cursor.fetchall()
+            # 关闭游标
+            cursor.close()
+            connections.close_all()
             log_list = []
             log_list = []
-            for scene_log in scene_log_qs:
+            for result in results:
                 data = {
                 data = {
                     'serialNumber': serial_number,
                     'serialNumber': serial_number,
-                    'tasks': scene_log['tasks'] if scene_log['tasks'] else '',
-                    'status': scene_log['status'],
-                    'createdTime': scene_log['created_time'],
+                    'tasks': result[0] if result[0] else '',
+                    'status': result[1],
+                    'createdTime': result[2],
                 }
                 }
                 log_list.append(data)
                 log_list.append(data)
             return response.json(0, log_list)
             return response.json(0, log_list)