ShuanghongS vor 7 Monaten
Ursprung
Commit
cd21b68b43
1 geänderte Dateien mit 55 neuen und 26 gelöschten Zeilen
  1. 55 26
      service/tools.class.php

+ 55 - 26
service/tools.class.php

@@ -590,9 +590,9 @@ class tools {
                     case when COALESCE(ni.frequency_type,'') = 'Daily'
                             then to_char(timezone(ni.daily_time_zone, ni.insert_date),'Mon DD, YYYY')
                     when COALESCE(ni.frequency_type,'') = 'Weekly' 
-                            then to_char(ni.insert_date::date - (((EXTRACT(dow FROM ni.insert_date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL,'Mon DD, YYYY')
+                            then to_char(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,'Mon DD, YYYY')
                             || ' - ' ||
-                            to_char(ni.insert_date::date + (((ni.weekly_week::integer - EXTRACT(dow FROM ni.insert_date)::integer + 7) % 7)-1 + CASE WHEN EXTRACT(DOW FROM ni.insert_date)::integer=ni.weekly_week::integer THEN 7 ELSE 0 END ||' days')::INTERVAL,'Mon DD, YYYY')
+                            to_char(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,'Mon DD, YYYY')
                     else '' 
                     end  as insert_date_format  
                 from  public.kln_notifiation_info ni
@@ -600,11 +600,17 @@ class tools {
                     and ni.notifications_method = 'true' and ni.is_send_message is null
                     and lower(ni.user_login) = '".strtolower(_getLoginName())."'
                     and ((ni.frequency_type = 'Daily'  
-                                and timezone(ni.daily_time_zone, NOW()::time) > ni.daily_time::time 
-                                and ni.insert_date::timestamp <= CURRENT_DATE + ni.daily_time::time)
-                            or (ni.frequency_type = 'Weekly' and timezone(ni.weekly_time_zone, NOW()::time) > ni.weekly_time::time 
-                                    and  ni.weekly_week ilike '%'|| EXTRACT(dow FROM timezone(ni.weekly_time_zone, NOW())) ||'%'
-                                    and  ni.insert_date::timestamp  <= CURRENT_DATE + ni.weekly_time::time)) 
+                                and (case  when (timezone(ni.daily_time_zone, NOW())::time > ni.daily_time::time)
+		                                then timezone(ni.daily_time_zone,ni.insert_date)::date < timezone(ni.daily_time_zone, NOW())::date
+	                                else
+		                                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
+                                    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
+                                    end))) 
                       group by ni.notifiation_type,insert_date_format 
             union all
                 select ni.notifiation_type, '' as insert_date_format  
@@ -705,11 +711,18 @@ class tools {
                 from public.kln_notifiation_info ni  
                     where lower(ni.user_login) in ('".strtolower(_getLoginName())."','all_user')
                         and (ni.frequency_type = 'Instant' 
-                            or (ni.frequency_type = 'Daily'  and timezone(ni.daily_time_zone, NOW()::time) > ni.daily_time::time
-                                and ni.insert_date::timestamp  <= CURRENT_DATE + ni.daily_time::time)
-                            or (ni.frequency_type = 'Weekly' and timezone(ni.weekly_time_zone, NOW()::time) > ni.weekly_time::time 
-                                    and  ni.weekly_week ilike '%'|| EXTRACT(dow FROM timezone(ni.weekly_time_zone, NOW())) ||'%'
-                                    and  ni.insert_date::timestamp  <= CURRENT_DATE + ni.weekly_time::time)) 
+                            or (ni.frequency_type = 'Daily'  
+                                and (case  when (timezone(ni.daily_time_zone, NOW())::time > ni.daily_time::time)
+		                                then timezone(ni.daily_time_zone,ni.insert_date)::date < timezone(ni.daily_time_zone, NOW())::date
+	                                else
+		                                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
+                                    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
+                                    end))) 
                         and ni.notifications_method = true and is_send_message is null limit 1";
             $unread = common::excuteObjectSql($checkUnread); 
             $returnData = array("has_message" =>!empty($unread));
@@ -1265,28 +1278,43 @@ class tools {
 
     public function getNotifications($notifiation_type,$frequency_type,$insert_date_format = null){
         if ($frequency_type == "all"){
+            //Daily 频率:超过昨天的数据,不在限制提醒的daily_time,全部应该查出来
+            //比如今天周四 17号, 上第一周截止是10号, 10号以后的数据,不在做weekly_time和weekly_week 的限制,直接查出来
             $sql_where = " and (ni.frequency_type = 'Instant' 
                             or (ni.frequency_type = 'Daily'  
-                                and timezone(ni.daily_time_zone, NOW()::time) > ni.daily_time::time 
-                                and ni.insert_date::timestamp  <= CURRENT_DATE + ni.daily_time::time)
-                            or (ni.frequency_type = 'Weekly' and timezone(ni.weekly_time_zone, NOW()::time) > ni.weekly_time::time 
-                                    and  ni.weekly_week ilike '%'|| EXTRACT(dow FROM timezone(ni.weekly_time_zone, NOW())) ||'%'
-                                    and  ni.insert_date::timestamp  <= CURRENT_DATE + ni.weekly_time::time))";
+                                and (case  when (timezone(ni.daily_time_zone, NOW())::time > ni.daily_time::time)
+		                                then timezone(ni.daily_time_zone,ni.insert_date)::date < timezone(ni.daily_time_zone, NOW())::date
+	                                else
+		                                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
+                                    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
+                                    end)))";
         } elseif($frequency_type == "Daily"){
             $sql_where = " and (ni.frequency_type = 'Daily'  
-                    and timezone(ni.daily_time_zone, NOW()::time) >= ni.daily_time::time 
-                    and ni.insert_date::timestamp  <= CURRENT_DATE + ni.daily_time::time)";
+                                and (case  when (timezone(ni.daily_time_zone, NOW())::time > ni.daily_time::time)
+		                                then timezone(ni.daily_time_zone,ni.insert_date)::date < timezone(ni.daily_time_zone, NOW())::date
+	                                else
+		                                timezone(ni.daily_time_zone,ni.insert_date)::date < timezone(ni.daily_time_zone, NOW())::date - '1 days'::INTERVAL
+	                                end))";
+
         } elseif($frequency_type == "Weekly"){
-            $sql_where = " and (ni.frequency_type = 'Weekly' and timezone(ni.weekly_time_zone, NOW()::time) > ni.weekly_time::time 
-                                    and  ni.weekly_week ilike '%'|| EXTRACT(dow FROM timezone(ni.weekly_time_zone, NOW())) ||'%'
-                                    and  ni.insert_date::timestamp  <= CURRENT_DATE + ni.weekly_time::time)";
+            $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
+                                    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
+                                    end))";
         }
         if (!empty($_REQUEST['current_time'])){
             // $sql_where .= " and ni.insert_date >= TO_TIMESTAMP('".$_REQUEST['current_time']."', 'MM/DD/YYYY HH24:MI:SS') - interval '5 minutes'
             //     and ni.is_send_message is null";
             //这里都以服务器时间,检查标准
-            $sql_where .= " and ni.insert_date >= now() - interval '5 minutes'
-                 and ni.is_send_message is null";
+            $sql_where .= " and ni.is_send_message is null";
         }
         if (!empty($_REQUEST['info_type']) && $_REQUEST['info_type'] == 'true'){
             $sql_where .= " and ni.is_send_message is null";
@@ -1311,9 +1339,9 @@ class tools {
                     case when COALESCE(ni.frequency_type,'') = 'Daily'
                             then to_char(timezone(ni.daily_time_zone, ni.insert_date),'Mon DD, YYYY')
                         when COALESCE(ni.frequency_type,'') = 'Weekly' 
-                            then to_char(ni.insert_date::date - (((EXTRACT(dow FROM ni.insert_date)::integer - ni.weekly_week::integer + 7) % 7) ||' days')::INTERVAL,'Mon DD, YYYY')
+                            then to_char(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,'Mon DD, YYYY')
                             || ' - ' ||
-                            to_char(ni.insert_date::date + (((ni.weekly_week::integer - EXTRACT(dow FROM ni.insert_date)::integer + 7) % 7)-1 + CASE WHEN EXTRACT(DOW FROM ni.insert_date)::integer=ni.weekly_week::integer THEN 7 ELSE 0 END ||' days')::INTERVAL,'Mon DD, YYYY')
+                            to_char(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,'Mon DD, YYYY')
                         else '' 
                     end  as insert_date_format,
 
@@ -1339,6 +1367,7 @@ class tools {
                             from public.kln_ocean oo 
                             where oo.serial_no = ni.serial_no limit 1) ccc on true
                 where lower(ni.user_login) in ('".strtolower(_getLoginName())."','all_user')
+                        and ni.insert_date > NOW() - INTERVAL '1 year' 
                         and lower(ni.notifiation_type) in ($more_param)
                     ".$sql_where." and ni.notifications_method = true order by ni.insert_date desc) aa $aa_where";
         error_log($sql);