Browse Source

Merge remote-tracking branch 'remotes/origin/peng' into test

Ansjer 3 years ago
parent
commit
ad3755fb92
2 changed files with 76 additions and 5 deletions
  1. 58 5
      Controller/SensorGateway/SmartSceneController.py
  2. 18 0
      Model/models.py

+ 58 - 5
Controller/SensorGateway/SmartSceneController.py

@@ -12,7 +12,8 @@ from django.db import transaction
 from django.db.models import F, Q
 from django.db.models import F, Q
 from django.views import View
 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
 from Service.CommonService import CommonService
 
 
 
 
@@ -49,6 +50,8 @@ class SmartSceneView(View):
             return self.edit_smart_scene(request_dict, user_id, response)
             return self.edit_smart_scene(request_dict, user_id, response)
         elif operation == 'delete':  # 删除智能场景
         elif operation == 'delete':  # 删除智能场景
             return self.delete_smart_scene(request_dict, response)
             return self.delete_smart_scene(request_dict, response)
+        elif operation == 'log':  # 查询智能场景日志
+            return self.scene_log(request_dict, response)
         else:
         else:
             return response.json(414)
             return response.json(414)
 
 
@@ -191,8 +194,8 @@ class SmartSceneView(View):
         tasks = request_dict.get('tasks', None)
         tasks = request_dict.get('tasks', None)
         is_all_day = request_dict.get('isAllDay', 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())
         now_time = int(time.time())
         conditions_dict = eval(conditions)
         conditions_dict = eval(conditions)
@@ -453,7 +456,7 @@ class SmartSceneView(View):
         tasks_list = eval(tasks)
         tasks_list = eval(tasks)
         now_time = int(time.time())
         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():
         if smart_scene_qs.exists():
             return response.json(174)
             return response.json(174)
 
 
@@ -506,7 +509,6 @@ class SmartSceneView(View):
                 task_list.append(task_temp)
                 task_list.append(task_temp)
             msg['task'] = task_list
             msg['task'] = task_list
 
 
-
             with transaction.atomic():
             with transaction.atomic():
                 smart_scene_qs.update(scene_name=scene_name, conditions=conditions, tasks=tasks,
                 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,
                                       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))
             return response.json(500, repr(e))
         else:
         else:
             return response.json(0)
             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))

+ 18 - 0
Model/models.py

@@ -2657,6 +2657,22 @@ class EffectiveTime(models.Model):
         verbose_name_plural = verbose_name
         verbose_name_plural = verbose_name
 
 
 
 
+class SceneLog(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增标记ID')
+    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='场景日志')
+    status = models.SmallIntegerField(default=0, verbose_name='场景状态')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+
+    class Meta:
+        db_table = 'scene_log'
+        verbose_name = '场景日志'
+        verbose_name_plural = verbose_name
+        app_label = 'PushModel'
+
+
 class UnicomCombo(models.Model):
 class UnicomCombo(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记Id')
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记Id')
     package_id = models.CharField(default='', max_length=32, verbose_name=u'联通套餐id')
     package_id = models.CharField(default='', max_length=32, verbose_name=u'联通套餐id')
@@ -2796,3 +2812,5 @@ class UnicomFlowPush(models.Model):
         verbose_name = '联通流量用量推送'
         verbose_name = '联通流量用量推送'
         verbose_name_plural = verbose_name
         verbose_name_plural = verbose_name
         app_label = "PushModel"
         app_label = "PushModel"
+
+