浏览代码

任务延时叠加

locky 1 年之前
父节点
当前提交
98e5aadf17
共有 1 个文件被更改,包括 13 次插入15 次删除
  1. 13 15
      Controller/SensorGateway/SmartSceneController.py

+ 13 - 15
Controller/SensorGateway/SmartSceneController.py

@@ -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)