Browse Source

修改超速告警逻辑

daiyueteng 6 years ago
parent
commit
ecb86cd07e
1 changed files with 23 additions and 9 deletions
  1. 23 9
      module_service/area_business_speed_checker.cpp

+ 23 - 9
module_service/area_business_speed_checker.cpp

@@ -17,11 +17,13 @@ struct over_speed_data:business_data
         m_over_speed_count=0;
         m_normal_speed_count=0;
         m_limit_speed=0;
+        m_is_warning=false;
     }
 
     int m_over_speed_count;
     int m_normal_speed_count;
     double m_limit_speed;
+    bool m_is_warning;
 };
 
 area_business_speed_checker::area_business_speed_checker()
@@ -55,6 +57,18 @@ void area_business_speed_checker::on_enter(const std::shared_ptr<area_hover>&are
     {
         ptr_temp->m_over_speed_count++;
     }
+    else
+    {
+        ptr_temp->m_normal_speed_count++;
+    }
+
+    EVENT_TYPE ev_type = ET_CARD_AREA_OVER_SPEED;
+    if(area_hover_ptr->m_area->is_mine())
+    {
+        ev_type = ET_CARD_OVER_SPEED;
+    }
+    auto ev_ptr_temp = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ev_type);
+    ptr_temp->m_is_warning = (nullptr != ev_ptr_temp && !ev_ptr_temp->is_end());
 }
 
 void area_business_speed_checker::on_hover(const std::shared_ptr<area_hover>&area_hover_ptr,
@@ -75,10 +89,12 @@ void area_business_speed_checker::on_hover(const std::shared_ptr<area_hover>&are
     if(limit < card_ptr->m_speed)//超速
     {
         ptr_temp->m_over_speed_count++;
+        ptr_temp->m_normal_speed_count=0;
     }
     else//速度正常
     {
         ptr_temp->m_normal_speed_count++;
+        ptr_temp->m_over_speed_count=0;
     }
 
     EVENT_TYPE ev_type = ET_CARD_AREA_OVER_SPEED;
@@ -92,14 +108,13 @@ void area_business_speed_checker::on_hover(const std::shared_ptr<area_hover>&are
     {
         ptr_temp->m_over_speed_count=SPEED_COUNT_LIMIT;
 
-        auto ev_ptr_temp = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ev_type);
-        if(!ev_ptr_temp)//从没有告警状态转化为告警状态
+        if(!ptr_temp->m_is_warning)
         {
-            ptr_temp->m_normal_speed_count=0;
-        }
+            ptr_temp->m_is_warning = true;
 
-        uint64_t id = tool_other::type_id_to_u64(card_ptr->m_type, card_ptr->m_id);
-        event_tool::instance()->handle_event(OT_CARD, ev_type, id, limit, card_ptr->m_speed, true);
+            uint64_t id = tool_other::type_id_to_u64(card_ptr->m_type, card_ptr->m_id);
+            event_tool::instance()->handle_event(OT_CARD, ev_type, id, limit, card_ptr->m_speed, true);
+        }
     }
 
     //确定正常
@@ -107,10 +122,9 @@ void area_business_speed_checker::on_hover(const std::shared_ptr<area_hover>&are
     {
         ptr_temp->m_normal_speed_count=SPEED_COUNT_LIMIT;
 
-        auto ev_ptr_temp = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ev_type);
-        if(ev_ptr_temp && !ev_ptr_temp->is_end())
+        if(ptr_temp->m_is_warning)
         {
-            ptr_temp->m_over_speed_count=0;
+            ptr_temp->m_is_warning=false;
 
             uint64_t id = tool_other::type_id_to_u64(card_ptr->m_type, card_ptr->m_id);
             event_tool::instance()->handle_event(OT_CARD, ev_type, id, limit, card_ptr->m_speed, false);