Просмотр исходного кода

修改场景执行时间表结构,新增查询智能场景详情,编辑智能场景接口

locky 3 лет назад
Родитель
Сommit
776ff333e4
2 измененных файлов с 90 добавлено и 17 удалено
  1. 86 14
      Controller/SensorGateway/SmartSceneController.py
  2. 4 3
      Model/models.py

+ 86 - 14
Controller/SensorGateway/SmartSceneController.py

@@ -43,6 +43,10 @@ class SmartSceneView(View):
             return self.scene_list(request_dict, user_id, response)
         elif operation == 'update-status':  # 更新智能场景状态
             return self.update_status(request_dict, response)
+        elif operation == 'detail':  # 查询智能场景详情
+            return self.scene_detail(request_dict, response)
+        elif operation == 'edit':  # 编辑智能场景
+            return self.edit_smart_scene(request_dict, response)
         else:
             return response.json(414)
 
@@ -151,23 +155,32 @@ class SmartSceneView(View):
                 smart_scene_dict['device_id'] = device_id
             else:
                 smart_scene_dict['sub_device_id'] = sub_device_id
-            if is_all_day:
+            if not is_all_day:  # 没传时间
                 SmartScene.objects.create(**smart_scene_dict)
             else:
-                start_time = request_dict.get('startTime', None)
-                end_time = request_dict.get('endTime', None)
-                repeat = request_dict.get('repeat', None)
-                if not all([start_time, end_time, repeat]):
-                    return response.json(444, {'error param': 'startTime and endTime and repeat'})
-                effective_time_qs = EffectiveTime.objects.filter(start_time=start_time, end_time=end_time,
-                                                                 repeat=repeat).values('id')
-                if effective_time_qs.exists():
-                    effective_time_id = effective_time_qs[0]['id']
+                if is_all_day == '0':
+                    effective_time_qs = EffectiveTime.objects.filter(is_all_day=True).values('id')
+                    if effective_time_qs.exists():
+                        effective_time_id = effective_time_qs[0]['id']
+                    else:
+                        effective_time_id = EffectiveTime.objects.create(is_all_day=True).id
+                    smart_scene_dict['effective_time_id'] = effective_time_id
+                    SmartScene.objects.create(**smart_scene_dict)
                 else:
-                    effective_time_id = EffectiveTime.objects.create(start_time=start_time, end_time=end_time,
-                                                                     repeat=repeat).id
-                smart_scene_dict['effective_time_id'] = effective_time_id
-                SmartScene.objects.create(**smart_scene_dict)
+                    start_time = request_dict.get('startTime', None)
+                    end_time = request_dict.get('endTime', None)
+                    repeat = request_dict.get('repeat', None)
+                    if not all([start_time, end_time, repeat]):
+                        return response.json(444, {'error param': 'startTime and endTime and repeat'})
+                    effective_time_qs = EffectiveTime.objects.filter(start_time=start_time, end_time=end_time,
+                                                                     repeat=repeat).values('id')
+                    if effective_time_qs.exists():
+                        effective_time_id = effective_time_qs[0]['id']
+                    else:
+                        effective_time_id = EffectiveTime.objects.create(start_time=start_time, end_time=end_time,
+                                                                         repeat=repeat).id
+                    smart_scene_dict['effective_time_id'] = effective_time_id
+                    SmartScene.objects.create(**smart_scene_dict)
             return response.json(0)
         except Exception as e:
             return response.json(500, repr(e))
@@ -220,3 +233,62 @@ class SmartSceneView(View):
             return response.json(0)
         except Exception as e:
             return response.json(500, repr(e))
+
+    @staticmethod
+    def scene_detail(request_dict, response):
+        """
+        查询智能场景详情
+        @param request_dict: 请求参数
+        @request_dict smartSceneId: 智能场景id
+        @param response: 响应对象
+        @return: response
+        """
+        smart_scene_id = request_dict.get('smartSceneId', None)
+
+        if not smart_scene_id:
+            return response.json(444, {'error param': 'smartSceneId'})
+        try:
+            smart_scene_qs = SmartScene.objects.filter(id=smart_scene_id).values('id', 'scene_name', 'conditions',
+                                                                                 'tasks', 'effective_time_id')
+            if not smart_scene_qs.exists():
+                return response.json(173)
+            res = {
+                'scene_name': smart_scene_qs[0]['scene_name'],
+                'condition': eval(smart_scene_qs[0]['conditions']),
+                'task': eval(smart_scene_qs[0]['tasks']),
+            }
+            effective_time_qs = EffectiveTime.objects.get(id=smart_scene_qs[0]['effective_time_id'])
+            if effective_time_qs.is_all_day:
+                time_dict = {'all_day': 1}
+            else:
+                time_dict = {
+                    'start_time': effective_time_qs.start_time,
+                    'end_time': effective_time_qs.end_time,
+                    'repeat': effective_time_qs.repeat,
+                }
+            res['time'] = time_dict
+            return response.json(0, res)
+        except Exception as e:
+            return response.json(500, repr(e))
+
+    @staticmethod
+    def edit_smart_scene(request_dict, response):
+        """
+        编辑智能场景
+        @param request_dict: 请求参数
+        @request_dict smartSceneId: 智能场景id
+        @param response: 响应对象
+        @return: response
+        """
+        smart_scene_id = request_dict.get('smartSceneId', None)
+
+        if not smart_scene_id:
+            return response.json(444, {'error param': 'smartSceneId'})
+        try:
+            smart_scene_qs = SmartScene.objects.filter(id=smart_scene_id).values('id', 'scene_name', 'conditions',
+                                                                                 'tasks', 'effective_time_id')
+            if not smart_scene_qs.exists():
+                return response.json(173)
+            return response.json(0, list(smart_scene_qs))
+        except Exception as e:
+            return response.json(500, repr(e))

+ 4 - 3
Model/models.py

@@ -2644,9 +2644,10 @@ class SmartScene(models.Model):
 
 class EffectiveTime(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记id')
-    start_time = models.CharField(default='', max_length=10, verbose_name=u'开始时间')
-    end_time = models.CharField(default='', max_length=10, verbose_name=u'结束时间')
-    repeat = models.CharField(default='', max_length=32, verbose_name=u'重复周期')
+    is_all_day = models.BooleanField(default=False, verbose_name=u'是否全天')
+    start_time = models.SmallIntegerField(default=0, verbose_name=u'开始时间')
+    end_time = models.SmallIntegerField(default=0, verbose_name=u'结束时间')
+    repeat = models.SmallIntegerField(default=0, verbose_name=u'重复周期')
 
     class Meta:
         db_table = 'effective_time'