|
@@ -495,8 +495,8 @@ class SmartSceneView(View):
|
|
|
except Exception as e:
|
|
|
return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
|
|
|
- @staticmethod
|
|
|
- def update_status(request_dict, response):
|
|
|
+ @classmethod
|
|
|
+ def update_status(cls, request_dict, response):
|
|
|
"""
|
|
|
更新智能场景状态
|
|
|
@param request_dict: 请求参数
|
|
@@ -519,7 +519,8 @@ class SmartSceneView(View):
|
|
|
'scene_status': scene_status
|
|
|
}
|
|
|
# 查询序列号
|
|
|
- smart_scene_qs = SmartScene.objects.filter(id=smart_scene_id).values('device_id', 'sub_device_id')
|
|
|
+ smart_scene_qs = SmartScene.objects.filter(id=smart_scene_id).\
|
|
|
+ values('device_id', 'sub_device_id', 'mqtt_tasks')
|
|
|
device_id = smart_scene_qs[0]['device_id']
|
|
|
if device_id:
|
|
|
serial_number = Device_Info.objects.filter(id=device_id).values('serial_number')[0]['serial_number']
|
|
@@ -528,6 +529,10 @@ class SmartSceneView(View):
|
|
|
serial_number = GatewaySubDevice.objects.filter(id=sub_device_id).values('device__serial_number')[0][
|
|
|
'device__serial_number']
|
|
|
|
|
|
+ # 如果存在定时任务,暂停或恢复任务
|
|
|
+ mqtt_tasks = smart_scene_qs[0]['mqtt_tasks']
|
|
|
+ cls.pause_or_resume_job(scene_status, mqtt_tasks)
|
|
|
+
|
|
|
topic_name = SMART_SCENE_TOPIC.format(serial_number)
|
|
|
|
|
|
with transaction.atomic():
|
|
@@ -1273,9 +1278,32 @@ class SmartSceneView(View):
|
|
|
"""
|
|
|
apscheduler_obj = ApschedulerObject()
|
|
|
for mqtt_task in mqtt_tasks_list:
|
|
|
- task_id = mqtt_task['task_id']
|
|
|
+ task_id = mqtt_task.get('task_id')
|
|
|
+ if not task_id:
|
|
|
+ # 如果task_id不存在,则跳过该任务
|
|
|
+ continue
|
|
|
apscheduler_obj.del_job(task_id)
|
|
|
|
|
|
+ @staticmethod
|
|
|
+ def pause_or_resume_job(scene_status, mqtt_tasks):
|
|
|
+ """
|
|
|
+ 暂停或恢复定时任务
|
|
|
+ @param scene_status: 场景状态
|
|
|
+ @param mqtt_tasks: mqtt任务列表
|
|
|
+ @return:
|
|
|
+ """
|
|
|
+ if not mqtt_tasks:
|
|
|
+ return
|
|
|
+ apscheduler_obj = ApschedulerObject()
|
|
|
+ job_func = apscheduler_obj.resume_job if scene_status else apscheduler_obj.pause_job
|
|
|
+ mqtt_tasks_list = eval(mqtt_tasks)
|
|
|
+ for mqtt_task in mqtt_tasks_list:
|
|
|
+ task_id = mqtt_task.get('task_id')
|
|
|
+ if not task_id:
|
|
|
+ # 如果task_id不存在,则跳过该任务
|
|
|
+ continue
|
|
|
+ job_func(task_id)
|
|
|
+
|
|
|
|
|
|
#
|
|
|
# ___====-_ _-====___
|