|
@@ -12,7 +12,8 @@ from django.db import transaction
|
|
|
from django.db.models import F, Q
|
|
|
from django.views import View
|
|
|
|
|
|
-from Model.models import FamilyRoomDevice, GatewaySubDevice, FamilyRoom, SmartScene, EffectiveTime, Device_Info
|
|
|
+from Model.models import FamilyRoomDevice, GatewaySubDevice, FamilyRoom, SmartScene, EffectiveTime, Device_Info, \
|
|
|
+ SceneLog
|
|
|
from Service.CommonService import CommonService
|
|
|
|
|
|
|
|
@@ -49,6 +50,8 @@ class SmartSceneView(View):
|
|
|
return self.edit_smart_scene(request_dict, user_id, response)
|
|
|
elif operation == 'delete': # 删除智能场景
|
|
|
return self.delete_smart_scene(request_dict, response)
|
|
|
+ elif operation == 'log': # 查询智能场景日志
|
|
|
+ return self.scene_log(request_dict, response)
|
|
|
else:
|
|
|
return response.json(414)
|
|
|
|
|
@@ -191,8 +194,8 @@ class SmartSceneView(View):
|
|
|
tasks = request_dict.get('tasks', None)
|
|
|
is_all_day = request_dict.get('isAllDay', None)
|
|
|
|
|
|
- if not all([conditions, tasks]):
|
|
|
- return response.json(444, {'error param': 'conditions and tasks'})
|
|
|
+ if not all([scene_name, conditions, tasks]):
|
|
|
+ return response.json(444, {'error param': 'scene_name and conditions and tasks'})
|
|
|
|
|
|
now_time = int(time.time())
|
|
|
conditions_dict = eval(conditions)
|
|
@@ -453,7 +456,7 @@ class SmartSceneView(View):
|
|
|
tasks_list = eval(tasks)
|
|
|
now_time = int(time.time())
|
|
|
|
|
|
- smart_scene_qs = SmartScene.objects.filter(user_id=user_id, scene_name=scene_name)
|
|
|
+ smart_scene_qs = SmartScene.objects.filter(user_id=user_id, scene_name=scene_name).filter(~Q(id=smart_scene_id))
|
|
|
if smart_scene_qs.exists():
|
|
|
return response.json(174)
|
|
|
|
|
@@ -506,7 +509,6 @@ class SmartSceneView(View):
|
|
|
task_list.append(task_temp)
|
|
|
msg['task'] = task_list
|
|
|
|
|
|
-
|
|
|
with transaction.atomic():
|
|
|
smart_scene_qs.update(scene_name=scene_name, conditions=conditions, tasks=tasks,
|
|
|
device_data=json.dumps(msg), updated_time=now_time, device_id=device_id,
|
|
@@ -557,3 +559,54 @@ class SmartSceneView(View):
|
|
|
return response.json(500, repr(e))
|
|
|
else:
|
|
|
return response.json(0)
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def scene_log(request_dict, response):
|
|
|
+ """
|
|
|
+ 查询场景日志
|
|
|
+ @param request_dict: 请求参数
|
|
|
+ @request_dict gatewaySubId: 子设备id
|
|
|
+ @request_dict page: 页数
|
|
|
+ @request_dict size: 条数
|
|
|
+ @request_dict startTime: 开始时间
|
|
|
+ @request_dict endTime: 结束时间
|
|
|
+ @param response: 响应对象
|
|
|
+ @return: response
|
|
|
+ """
|
|
|
+ device_id = request_dict.get('deviceId', None)
|
|
|
+ sub_device_id = request_dict.get('subDeviceId', 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 any([device_id, sub_device_id]):
|
|
|
+ return response.json(444, {'error param': 'deviceId or subDeviceId'})
|
|
|
+ if not all([page, size]):
|
|
|
+ return response.json(444, {'error param': 'page or size'})
|
|
|
+
|
|
|
+ device_dict = {}
|
|
|
+ if device_id:
|
|
|
+ device_dict['device_id'] = device_id
|
|
|
+ else:
|
|
|
+ device_dict['sub_device_id'] = sub_device_id
|
|
|
+
|
|
|
+ try:
|
|
|
+ page, size = int(page), int(size)
|
|
|
+ if start_time and end_time:
|
|
|
+ sensor_record_qs = SceneLog.objects.filter(**device_dict, created_time__range=(start_time, end_time)). \
|
|
|
+ values('scene_id', 'scene_log', 'status', 'created_time').order_by(
|
|
|
+ '-created_time')[(page - 1) * size:page * size]
|
|
|
+ else:
|
|
|
+ sensor_record_qs = SceneLog.objects.filter(**device_dict).values('scene_id', 'scene_log', 'status',
|
|
|
+ 'created_time').order_by(
|
|
|
+ '-created_time')[(page - 1) * size:page * size]
|
|
|
+ if not sensor_record_qs.exists():
|
|
|
+ return response.json(0, [])
|
|
|
+ for item in sensor_record_qs:
|
|
|
+ scene_id = item['scene_id']
|
|
|
+ scene_name = SmartScene.objects.filter(id=scene_id)[0].scene_name
|
|
|
+ item['scene_name'] = scene_name
|
|
|
+ return response.json(0, list(sensor_record_qs))
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, repr(e))
|