ShuanghongS 7 månader sedan
förälder
incheckning
9d233e01a3
2 ändrade filer med 37 tillägg och 12 borttagningar
  1. 26 12
      service/tools.class.php
  2. 11 0
      utils/utils.class.php

+ 26 - 12
service/tools.class.php

@@ -384,6 +384,8 @@ class tools {
             
             //数据转换前端需要的显示的格式
             $rules["shipment_transport_mode"] = utils::converModeToDisplay($rules["shipment_transport_mode"]);
+            $rules["daily_time_zone"] = utils::comvertutcinfo($rules["daily_time_zone"]);
+            $rules["weekly_time_zone"] = utils::comvertutcinfo($rules["weekly_time_zone"]);
 
             $monitoring_data[$rules_type] = $rules;
             common::echo_json_encode(200,$monitoring_data);
@@ -606,10 +608,11 @@ class tools {
 		                                timezone(ni.daily_time_zone,ni.insert_date)::date < timezone(ni.daily_time_zone, NOW())::date - '1 days'::INTERVAL
 	                                end))
                             or (ni.frequency_type = 'Weekly' 
-                                and (case when (timezone(ni.weekly_time_zone, NOW())::time > ni.weekly_time::time)
-                                        then timezone(ni.weekly_time_zone,ni.insert_date)::date <= (timezone(ni.weekly_time_zone,ni.insert_date)::date + (((ni.weekly_week::integer - EXTRACT(dow FROM timezone(ni.weekly_time_zone,ni.insert_date)::date)::integer + 7) % 7)-1 + CASE WHEN EXTRACT(DOW FROM timezone(ni.weekly_time_zone,ni.insert_date)::date)::integer=ni.weekly_week::integer THEN 7 ELSE 0 END ||' days')::INTERVAL)::date
+                                and (case when (timezone(ni.weekly_time_zone, NOW())::time < ni.weekly_time::time 
+                                            and timezone(ni.weekly_time_zone,NOW())::date = (timezone(ni.weekly_time_zone,NOW())::date - (((EXTRACT(dow FROM timezone(ni.weekly_time_zone,NOW())::date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL)::date)
+                                        then timezone(ni.weekly_time_zone,ni.insert_date)::date < ((timezone(ni.weekly_time_zone,NOW())::date - (((EXTRACT(dow FROM timezone(ni.weekly_time_zone,NOW())::date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL)::date - '7 days'::INTERVAL)::date
                                     else 
-                                        timezone(ni.weekly_time_zone,ni.insert_date)::date < (timezone(ni.weekly_time_zone,ni.insert_date)::date - (((EXTRACT(dow FROM timezone(ni.weekly_time_zone,ni.insert_date)::date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL)::date
+                                        timezone(ni.weekly_time_zone,ni.insert_date)::date < (timezone(ni.weekly_time_zone,NOW())::date - (((EXTRACT(dow FROM timezone(ni.weekly_time_zone,NOW())::date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL)::date
                                     end))) 
                       group by ni.notifiation_type,insert_date_format 
             union all
@@ -718,10 +721,11 @@ class tools {
 		                                timezone(ni.daily_time_zone,ni.insert_date)::date < timezone(ni.daily_time_zone, NOW())::date - '1 days'::INTERVAL
 	                                end))
                             or (ni.frequency_type = 'Weekly' 
-                                and (case when (timezone(ni.weekly_time_zone, NOW())::time > ni.weekly_time::time)
-                                        then timezone(ni.weekly_time_zone,ni.insert_date)::date <= (timezone(ni.weekly_time_zone,ni.insert_date)::date + (((ni.weekly_week::integer - EXTRACT(dow FROM timezone(ni.weekly_time_zone,ni.insert_date)::date)::integer + 7) % 7)-1 + CASE WHEN EXTRACT(DOW FROM timezone(ni.weekly_time_zone,ni.insert_date)::date)::integer=ni.weekly_week::integer THEN 7 ELSE 0 END ||' days')::INTERVAL)::date
+                                and (case when (timezone(ni.weekly_time_zone, NOW())::time < ni.weekly_time::time 
+                                            and timezone(ni.weekly_time_zone,NOW())::date = (timezone(ni.weekly_time_zone,NOW())::date - (((EXTRACT(dow FROM timezone(ni.weekly_time_zone,NOW())::date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL)::date)
+                                        then timezone(ni.weekly_time_zone,ni.insert_date)::date < ((timezone(ni.weekly_time_zone,NOW())::date - (((EXTRACT(dow FROM timezone(ni.weekly_time_zone,NOW())::date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL)::date - '7 days'::INTERVAL)::date
                                     else 
-                                        timezone(ni.weekly_time_zone,ni.insert_date)::date < (timezone(ni.weekly_time_zone,ni.insert_date)::date - (((EXTRACT(dow FROM timezone(ni.weekly_time_zone,ni.insert_date)::date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL)::date
+                                        timezone(ni.weekly_time_zone,ni.insert_date)::date < (timezone(ni.weekly_time_zone,NOW())::date - (((EXTRACT(dow FROM timezone(ni.weekly_time_zone,NOW())::date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL)::date
                                     end))) 
                         and ni.notifications_method = true and is_send_message is null limit 1";
             $unread = common::excuteObjectSql($checkUnread); 
@@ -945,10 +949,12 @@ class tools {
         if(strtolower($frequency_type) == "daily"){
             $daily_time = "'".common::check_input($_POST['daily_time'])."'";
             $daily_time_zone = common::check_input($_POST['daily_time_zone']);
+            $daily_time_zone = utils::comvertutcinfo($daily_time_zone);
         } elseif (strtolower($frequency_type) == "weekly"){
             $weekly_week = common::check_input($_POST['weekly_week']);
             $weekly_time = "'".common::check_input($_POST['weekly_time'])."'";
             $weekly_time_zone = common::check_input($_POST['weekly_time_zone']);
+            $weekly_time_zone = utils::comvertutcinfo($weekly_time_zone);
         }
 
         
@@ -1289,10 +1295,11 @@ class tools {
 	                                end))
                                     
                             or (ni.frequency_type = 'Weekly' 
-                                and (case when (timezone(ni.weekly_time_zone, NOW())::time > ni.weekly_time::time)
-                                        then timezone(ni.weekly_time_zone,ni.insert_date)::date <= (timezone(ni.weekly_time_zone,ni.insert_date)::date + (((ni.weekly_week::integer - EXTRACT(dow FROM timezone(ni.weekly_time_zone,ni.insert_date)::date)::integer + 7) % 7)-1 + CASE WHEN EXTRACT(DOW FROM timezone(ni.weekly_time_zone,ni.insert_date)::date)::integer=ni.weekly_week::integer THEN 7 ELSE 0 END ||' days')::INTERVAL)::date
+                                and (case when (timezone(ni.weekly_time_zone, NOW())::time < ni.weekly_time::time 
+                                            and timezone(ni.weekly_time_zone,NOW())::date = (timezone(ni.weekly_time_zone,NOW())::date - (((EXTRACT(dow FROM timezone(ni.weekly_time_zone,NOW())::date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL)::date)
+                                        then timezone(ni.weekly_time_zone,ni.insert_date)::date < ((timezone(ni.weekly_time_zone,NOW())::date - (((EXTRACT(dow FROM timezone(ni.weekly_time_zone,NOW())::date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL)::date - '7 days'::INTERVAL)::date
                                     else 
-                                        timezone(ni.weekly_time_zone,ni.insert_date)::date < (timezone(ni.weekly_time_zone,ni.insert_date)::date - (((EXTRACT(dow FROM timezone(ni.weekly_time_zone,ni.insert_date)::date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL)::date
+                                        timezone(ni.weekly_time_zone,ni.insert_date)::date < (timezone(ni.weekly_time_zone,NOW())::date - (((EXTRACT(dow FROM timezone(ni.weekly_time_zone,NOW())::date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL)::date
                                     end)))";
         } elseif($frequency_type == "Daily"){
             $sql_where = " and (ni.frequency_type = 'Daily'  
@@ -1303,11 +1310,18 @@ class tools {
 	                                end))";
 
         } elseif($frequency_type == "Weekly"){
+            //当前now()的配置是周2。 如今天是4-17,最小边界值是4.15- 4.21
+            //                     如今天是4-15(这个是周二),最小边界值是4.15- 4.21
+            //                     如今天是4-14,最小边界值是4.8- 4.14
+            //   当 前时间是 4.15时,但没到规定的time,取4.8,但此时的边界值4.15- 4.21(这个是一个例外,除此之外,可以直接用当前now的最小边界值);
+            //   当 前时间是 4.15时,但到规定的time,取4.15
+
             $sql_where = " and (ni.frequency_type = 'Weekly' 
-                                and (case when (timezone(ni.weekly_time_zone, NOW())::time > ni.weekly_time::time)
-                                        then timezone(ni.weekly_time_zone,ni.insert_date)::date <= (timezone(ni.weekly_time_zone,ni.insert_date)::date + (((ni.weekly_week::integer - EXTRACT(dow FROM timezone(ni.weekly_time_zone,ni.insert_date)::date)::integer + 7) % 7)-1 + CASE WHEN EXTRACT(DOW FROM timezone(ni.weekly_time_zone,ni.insert_date)::date)::integer=ni.weekly_week::integer THEN 7 ELSE 0 END ||' days')::INTERVAL)::date
+                                and (case when (timezone(ni.weekly_time_zone, NOW())::time < ni.weekly_time::time 
+                                            and timezone(ni.weekly_time_zone,NOW())::date = (timezone(ni.weekly_time_zone,NOW())::date - (((EXTRACT(dow FROM timezone(ni.weekly_time_zone,NOW())::date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL)::date)
+                                        then timezone(ni.weekly_time_zone,ni.insert_date)::date < ((timezone(ni.weekly_time_zone,NOW())::date - (((EXTRACT(dow FROM timezone(ni.weekly_time_zone,NOW())::date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL)::date - '7 days'::INTERVAL)::date
                                     else 
-                                        timezone(ni.weekly_time_zone,ni.insert_date)::date < (timezone(ni.weekly_time_zone,ni.insert_date)::date - (((EXTRACT(dow FROM timezone(ni.weekly_time_zone,ni.insert_date)::date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL)::date
+                                        timezone(ni.weekly_time_zone,ni.insert_date)::date < (timezone(ni.weekly_time_zone,NOW())::date - (((EXTRACT(dow FROM timezone(ni.weekly_time_zone,NOW())::date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL)::date
                                     end))";
         }
         if (!empty($_REQUEST['current_time'])){

+ 11 - 0
utils/utils.class.php

@@ -838,5 +838,16 @@ class utils {
             return false;
         }
     }
+
+    public static function comvertutcinfo($time_zone){
+        if(!empty($time_zone)){
+            if(utils::checkExist($time_zone,"+")){
+                $time_zone = str_replace('+', '-', $time_zone);
+            }else{
+                $time_zone = str_replace('-', '+', $time_zone);
+            }
+        }
+        return  $time_zone;
+    }
 }
 ?>