|
@@ -1068,8 +1068,14 @@ class SmartSceneView(View):
|
|
|
cls.del_aps_job(scene_data_dict)
|
|
|
task_list = []
|
|
|
mqtt_task_list = []
|
|
|
+ total_delay_time = 0
|
|
|
+
|
|
|
+ # 组织条件数据
|
|
|
+ condition = cls.get_condition(conditions_dict, now_time, tz)
|
|
|
+
|
|
|
for task in tasks_list:
|
|
|
sensor_type = int(task['device_type'])
|
|
|
+ total_delay_time += task['delay_time']
|
|
|
# 处理插座数据
|
|
|
# 不用添加到设备的任务列表,添加到mqtt任务列表
|
|
|
if sensor_type == DEVICE_TYPE['socket']:
|
|
@@ -1089,7 +1095,7 @@ class SmartSceneView(View):
|
|
|
repeat = conditions_dict['time']['repeat']
|
|
|
|
|
|
task_temp['task_id'] = cls.create_aps_job(
|
|
|
- minutes, delay_time, tz, now_time, repeat, sensor_type, event_type, serial_number)
|
|
|
+ condition, minutes, total_delay_time, tz, repeat, sensor_type, event_type, serial_number)
|
|
|
mqtt_task_list.append(task_temp)
|
|
|
else:
|
|
|
task_temp = {
|
|
@@ -1123,7 +1129,7 @@ class SmartSceneView(View):
|
|
|
scene_data = ''
|
|
|
if mqtt_task_list:
|
|
|
scene_data = {
|
|
|
- 'condition': cls.get_condition(conditions_dict, now_time, tz),
|
|
|
+ 'condition': condition,
|
|
|
'task_list': mqtt_task_list
|
|
|
}
|
|
|
|
|
@@ -1239,14 +1245,14 @@ class SmartSceneView(View):
|
|
|
return False
|
|
|
|
|
|
@classmethod
|
|
|
- def create_aps_job(cls, minutes, delay_time, tz, now_time, repeat, device_type, event_type, serial_number):
|
|
|
+ def create_aps_job(cls, condition, minutes, total_delay_time, tz, repeat, device_type, event_type, serial_number):
|
|
|
"""
|
|
|
创建定时任务
|
|
|
返回任务id和时间
|
|
|
+ @param condition: 条件数据
|
|
|
@param minutes: 分钟时间
|
|
|
- @param delay_time: 延迟时间
|
|
|
+ @param total_delay_time: 总延迟时间
|
|
|
@param tz: 时区
|
|
|
- @param now_time: 当前时间
|
|
|
@param repeat: 星期周期的十进制数
|
|
|
@param device_type: 设备类型
|
|
|
@param event_type: 事件类型
|
|
@@ -1257,21 +1263,13 @@ class SmartSceneView(View):
|
|
|
apscheduler_obj = ApschedulerObject(tz)
|
|
|
# 一次性任务
|
|
|
if repeat == 0:
|
|
|
- # 根据时间戳和时区获取年月日,拼接由分钟转换出来的时间
|
|
|
- time_string = CommonService.get_date_from_timestamp(now_time, tz)
|
|
|
- hour, minute = divmod(minutes, 60)
|
|
|
- time_string += ' {:02d}:{:02d}:00'.format(hour, minute)
|
|
|
- time_stamp = CommonService.convert_to_timestamp(tz, time_string)
|
|
|
- # 加上延时,如果执行时间小于当前时间,延迟24小时执行
|
|
|
- time_stamp += delay_time
|
|
|
- if time_stamp < now_time:
|
|
|
- time_stamp += 24 * 60 * 60
|
|
|
+ time_stamp = condition['time_dict']['time_stamp'] + total_delay_time
|
|
|
task_id += str(time_stamp)
|
|
|
apscheduler_obj.create_date_job(func=cls.pub_mqtt, task_id=task_id, time_stamp=time_stamp,
|
|
|
args=(device_type, event_type, serial_number))
|
|
|
# 周期任务
|
|
|
else:
|
|
|
- hour, minute, second, is_next_day = cls.handle_delay_time(minutes, delay_time)
|
|
|
+ hour, minute, second, is_next_day = cls.handle_delay_time(minutes, total_delay_time)
|
|
|
# 加上延时,如果执行时间超过23:59,隔天执行
|
|
|
weeks = cls.int_to_weeks(repeat, is_next_day)
|
|
|
time_str = weeks + '_{:02d}{:02d}{:02d}'.format(hour, minute, second)
|