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

修改添加智能场景task列表没有传子设备id情况

peng 3 лет назад
Родитель
Сommit
308353d1b0
1 измененных файлов с 31 добавлено и 29 удалено
  1. 31 29
      Controller/SensorGateway/SmartSceneController.py

+ 31 - 29
Controller/SensorGateway/SmartSceneController.py

@@ -202,35 +202,35 @@ class SmartSceneView(View):
         conditions_dict = eval(conditions)
         tasks_list = eval(tasks)
         try:
-            with transaction.atomic():
-                # 判断是否已存在该场景名
-                smart_scene_qs = SmartScene.objects.filter(user_id=user_id, scene_name=scene_name)
-                if smart_scene_qs.exists():
-                    return response.json(174)
-
-                smart_scene_dict = {
-                    'user_id': user_id,
-                    'scene_name': scene_name,
-                    'conditions': conditions,
-                    'tasks': tasks,
-                    'created_time': now_time,
-                    'updated_time': now_time,
-                }
+            # 判断是否已存在该场景名
+            smart_scene_qs = SmartScene.objects.filter(user_id=user_id, scene_name=scene_name)
+            if smart_scene_qs.exists():
+                return response.json(174)
+
+            smart_scene_dict = {
+                'user_id': user_id,
+                'scene_name': scene_name,
+                'conditions': conditions,
+                'tasks': tasks,
+                'created_time': now_time,
+                'updated_time': now_time,
+            }
 
-                # 处理传网关设备id和子设备id的情况
-                if device_id:
-                    smart_scene_dict['device_id'] = device_id
-                    device_info_qs = Device_Info.objects.filter(id=device_id).values('serial_number')
-                    if not device_info_qs.exists():
-                        return response.json(173)
-                    serial_number = device_info_qs[0]['serial_number']
-                else:
-                    smart_scene_dict['sub_device_id'] = sub_device_id
-                    sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('device__serial_number')
-                    if not sub_device_qs.exists():
-                        return response.json(173)
-                    serial_number = sub_device_qs[0]['device__serial_number']
+            # 处理传网关设备id和子设备id的情况
+            if device_id:
+                smart_scene_dict['device_id'] = device_id
+                device_info_qs = Device_Info.objects.filter(id=device_id).values('serial_number')
+                if not device_info_qs.exists():
+                    return response.json(173)
+                serial_number = device_info_qs[0]['serial_number']
+            else:
+                smart_scene_dict['sub_device_id'] = sub_device_id
+                sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id).values('device__serial_number')
+                if not sub_device_qs.exists():
+                    return response.json(173)
+                serial_number = sub_device_qs[0]['device__serial_number']
 
+            with transaction.atomic():
                 if not is_all_day:  # 没传时间
                     smart_scene_qs = SmartScene.objects.create(**smart_scene_dict)
                 else:
@@ -241,7 +241,7 @@ class SmartSceneView(View):
                         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)
+                        smart_scene_qs = SmartScene.objects.create(**smart_scene_dict)
                     else:
                         start_time = int(request_dict.get('startTime', None))
                         end_time = int(request_dict.get('endTime', None))
@@ -277,7 +277,9 @@ class SmartSceneView(View):
                         task_temp['sensor_src'] = int(sub_device_qs['src_addr'], 16)
                     task_list.append(task_temp)
                 msg['task'] = task_list
-                smart_scene_qs.update(device_data=json.dumps(msg))
+                # smart_scene_qs.update(device_data=json.dumps(msg))
+                smart_scene_qs.device_data = json.dumps(msg)
+                smart_scene_qs.save()
                 # 发布MQTT消息通知网关设备
                 thing_name = serial_number
                 topic_name = 'loocam/gateway_sensor/{}/smart_scene'.format(serial_number)