Эх сурвалжийг харах

修改编辑智能场景接口

peng 3 жил өмнө
parent
commit
62d925088e

+ 70 - 5
Controller/SensorGateway/SmartSceneController.py

@@ -389,15 +389,80 @@ class SmartSceneView(View):
         @return: response
         """
         smart_scene_id = request_dict.get('smartSceneId', None)
+        scene_name = request_dict.get('sceneName', None)
+        conditions = request_dict.get('conditions', None)
+        tasks = request_dict.get('tasks', None)
+        is_all_day = request_dict.get('isAllDay', None)
 
-        if not smart_scene_id:
-            return response.json(444, {'error param': 'smartSceneId'})
+        conditions_dict = eval(conditions)
+        tasks_list = eval(tasks)
+        res = {
+            'scene_name': scene_name,
+            'conditions': conditions_dict,
+            'tasks': tasks_list
+        }
+        effective_time = {}
+
+        if is_all_day:
+            is_all_day = int(is_all_day)
+            effective_time['is_all_day'] = is_all_day
+        else:
+            is_all_day = 0
+
+        if not all([smart_scene_id, scene_name, conditions, tasks]):
+            return response.json(444, {'error param': 'smartSceneId,sceneName,conditions or tasks'})
         try:
-            smart_scene_qs = SmartScene.objects.filter(id=smart_scene_id).values('id', 'scene_name', 'conditions',
-                                                                                 'tasks', 'effective_time_id')
+            smart_scene_qs = SmartScene.objects.filter(id=smart_scene_id)
             if not smart_scene_qs.exists():
                 return response.json(173)
-            return response.json(0, list(smart_scene_qs))
+            msg = {}
+            if conditions_dict['type'] == 2:  # 条件为选择子设备
+                sub_device_id = conditions_dict['sensor']['subDeviceId']
+                sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('src_addr').first()
+                msg['smart_scene_id'] = smart_scene_id
+                msg['scene_status'] = 1
+                msg['sensor_type'] = conditions_dict['sensor']['device_type']
+                msg['sensor_src'] = int(sub_device_qs['src_addr'], 16)
+                msg['sensor_status'] = int(conditions_dict['sensor']['eventValues'][0]['event_type'])
+
+            task_list = []
+            for task in tasks_list:
+                task_temp = {
+                    'sensor_type': task['device_type'],
+                    'sensor_action': task['event_type']
+                }
+                sub_device_id = task.get('subDeviceId', None)
+                if sub_device_id:
+                    sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('src_addr').first()
+                    task_temp['sensor_src'] = int(sub_device_qs['src_addr'], 16)
+                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))
+                if is_all_day == 0 or is_all_day == 1:  # 不设置时间或全天
+                    smart_scene_qs.update(effective_time_id=0, is_all_day=is_all_day)
+                else:
+                    start_time = int(request_dict.get('startTime', None))
+                    end_time = int(request_dict.get('endTime', None))
+                    repeat = int(request_dict.get('repeat', None))
+                    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_qs.update(effective_time_id=effective_time_id, is_all_day=is_all_day)
+                    effective_time = {
+                        'isAllDay': is_all_day,
+                        'startTime': start_time,
+                        'endTime': end_time,
+                        'repeat': repeat
+                    }
+            res['effectiveTime'] = effective_time
+            return response.json(0, res)
 
         except Exception as e:
             return response.json(500, repr(e))