Преглед на файлове

调整智能场景表结构,优化添加条件-查询设备接口

locky преди 3 години
родител
ревизия
260d55e801
променени са 2 файла, в които са добавени 42 реда и са изтрити 12 реда
  1. 36 8
      Controller/SensorGateway/SmartSceneController.py
  2. 6 4
      Model/models.py

+ 36 - 8
Controller/SensorGateway/SmartSceneController.py

@@ -4,10 +4,12 @@
 @Time : 2022/6/29 9:31
 @File :SmartSceneController.py
 """
+import time
+
 from django.core.exceptions import ObjectDoesNotExist
 from django.views import View
 
-from Model.models import FamilyRoomDevice, GatewaySubDevice, FamilyRoom
+from Model.models import FamilyRoomDevice, GatewaySubDevice, FamilyRoom, SmartScene, EffectiveTime
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 
@@ -36,7 +38,7 @@ class SmartSceneView(View):
         if operation == 'task-devices':  # 添加任务-查询设备
             return self.task_devices(request_dict, user_id, response)
         elif operation == 'create':  # 创建智能场景
-            return self.create_smart_scene(request_dict, response)
+            return self.create_smart_scene(request_dict, user_id, response)
         else:
             return response.json(414)
 
@@ -46,18 +48,22 @@ class SmartSceneView(View):
         添加条件-查询设备
         @param request_dict: 请求参数
         @request_dict deviceId: 网关设备id
+        @request_dict subDeviceId: 子设备id
         @param response: 响应对象
         @return: response
         """
         device_id = request_dict.get('deviceId', None)
-
-        if not all([device_id]):
+        sub_device_id = request_dict.get('subDeviceId', None)
+        if not any([device_id, sub_device_id]):
             return response.json(444)
         try:
-            gateway_sub_device_qs = GatewaySubDevice.objects.filter(device_id=device_id).values('id', 'device_type',
-                                                                                                'nickname', 'status')
+            if device_id:
+                gateway_sub_device_qs = GatewaySubDevice.objects.filter(device_id=device_id)
+            else:
+                gateway_sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id)
             if not gateway_sub_device_qs.exists():
                 return response.json(173)
+            gateway_sub_device_qs = gateway_sub_device_qs.values('id', 'device_type', 'nickname', 'status')
             sub_device_list = []
             for gateway_sub_device in gateway_sub_device_qs:
                 room_id = FamilyRoomDevice.objects.filter(sub_device=gateway_sub_device['id']).values('room_id')[0][
@@ -93,19 +99,41 @@ class SmartSceneView(View):
             return response.json(500, repr(e))
 
     @staticmethod
-    def create_smart_scene(request_dict, response):
+    def create_smart_scene(request_dict, user_id, response):
         """
         创建智能场景
         @param request_dict: 请求参数
+        @param user_id: 用户id
         @request_dict gatewaySubId: 子设备id
         @param response: 响应对象
         @return: response
         """
         sub_device_id = request_dict.get('gatewaySubId', None)
+        scene_name = request_dict.get('sceneName', None)
+        conditions = request_dict.get('conditions', None)
+        tasks = request_dict.get('tasks', None)
+        all_day = request_dict.get('allDay', None)
 
-        if not all([sub_device_id]):
+        if not all([sub_device_id, conditions, tasks]):
             return response.json(444)
+        now_time = int(time.time())
         try:
+            if all_day:
+                SmartScene.objects.create(user_id=user_id, scene_name=scene_name, conditions=conditions, tasks=tasks,
+                                          created_time=now_time, updated_time=now_time)
+            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)
+                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
+                SmartScene.objects.create(user_id=user_id, scene_name=scene_name, conditions=conditions, tasks=tasks,
+                                          effective_time_id=effective_time_id, created_time=now_time, updated_time=now_time)
             return response.json(0)
         except Exception as e:
             return response.json(500, repr(e))

+ 6 - 4
Model/models.py

@@ -2624,14 +2624,16 @@ class SensorRecord(models.Model):
 
 class SmartScene(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记id')
+    user = models.ForeignKey(Device_User, to_field='userID', default='', on_delete=models.CASCADE,
+                             verbose_name='关联用户表id')
+    device_id = models.IntegerField(default=0, verbose_name=u'关联设备信息id')
+    sub_device_id = models.IntegerField(default=0, verbose_name=u'关联子设备表id')
     scene_name = models.CharField(default='', max_length=100, verbose_name=u'场景名称')
-    device = models.ForeignKey(Device_Info, to_field='id', default='', on_delete=models.CASCADE,
-                               verbose_name='关联设备信息id')
     conditions = models.CharField(default='', max_length=255, verbose_name=u'条件')
     tasks = models.CharField(default='', max_length=255, verbose_name=u'任务')
     effective_time_id = models.IntegerField(default=0, verbose_name=u'关联场景执行时间id')
-    updated_time = models.IntegerField(default=0, verbose_name='更新时间')
     created_time = models.IntegerField(default=0, verbose_name='创建时间')
+    updated_time = models.IntegerField(default=0, verbose_name='更新时间')
 
     class Meta:
         db_table = 'smart_scene'
@@ -2643,7 +2645,7 @@ 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'重复')
+    repeat = models.CharField(default='', max_length=32, verbose_name=u'重复周期')
 
     class Meta:
         db_table = 'effective_time'