Browse Source

加载告警,在区域逻辑初始化加上 告警判断

chensongchao 6 years ago
parent
commit
678b007cc8

+ 16 - 4
module_service/area_business_count_checker.cpp

@@ -23,7 +23,13 @@ void area_business_count_checker::on_load_his(const std::shared_ptr<area_hover>&
 		a->m_area->m_person_count ++ ;
 		if (a->m_area->m_person_count > a->m_area->m_limit_person_count)
 		{
-			a->m_area->m_event_person_count = true;
+			EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ;
+			auto ev_ptr_temp = event_list::instance()->get_event_area(a->m_area->id(),ev);
+			a->m_area->m_event_person_count = false;
+			if (ev_ptr_temp && !ev_ptr_temp->is_end())
+			{
+				a->m_area->m_event_person_count = true;
+			}
 		}
 	}
 	else if (c->is_vehicle())
@@ -31,7 +37,13 @@ void area_business_count_checker::on_load_his(const std::shared_ptr<area_hover>&
 		a->m_area->m_vehicle_count ++ ;
 		if (a->m_area->m_vehicle_count > a->m_area->m_limit_vehicle_count)
 		{
-			a->m_area->m_event_vehicle_count = true;
+			EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ;
+			a->m_area->m_event_vehicle_count = false;
+			auto ev_ptr_temp = event_list::instance()->get_event_area(a->m_area->id(),ev);
+			if (ev_ptr_temp && !ev_ptr_temp->is_end())
+			{
+				a->m_area->m_event_vehicle_count = true;
+			}
 		}
 	}
 }
@@ -72,7 +84,7 @@ void area_business_count_checker::on_enter(const std::shared_ptr<area_hover>&a,
 		{
 			a->m_area->m_event_person_count = true;
 		}
-		event_tool::instance()->handle_event(a->m_area->is_mine()? OT_MINE : OT_AREA,ev,a->m_area->id(),limitVal,curVal,true);
+		event_tool::instance()->handle_event(OT_AREA,ev,a->m_area->id(),limitVal,curVal,true);
 		log_info("area_business_count_checker::on_enter : Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d"
 		            ,ev,a->m_area->id(),limitVal,curVal);
 	}
@@ -128,7 +140,7 @@ void area_business_count_checker::on_leave(const std::shared_ptr<area_hover>&a,
 		}
         log_info("area_business_count_checker::on_leave :Cancel Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d"
         ,ev,a->m_area->id(),limitVal,curVal);
-		event_tool::instance()->handle_event(a->m_area->is_mine()? OT_MINE : OT_AREA,ev,a->m_area->id(),limitVal,curVal,false);
+		event_tool::instance()->handle_event(OT_AREA,ev,a->m_area->id(),limitVal,curVal,false);
 	}
 }
 

+ 35 - 19
module_service/area_business_person_dwell_checker.cpp

@@ -14,15 +14,9 @@
 
 struct SPersonDwellChecker : business_data
 {
-    int m_enter_time;
-    point m_enter_point;
-    int m_level_time;
-    point m_level_point;
-    bool m_send_event;  // 是否发生告警
+    bool m_send_event;  // 是否发生告警 ture=已发生告警 false=没有
     SPersonDwellChecker()
     {
-        m_enter_time = 0;
-        m_level_time = 0;
         m_send_event = false;
     }
 };
@@ -32,6 +26,24 @@ void area_business_person_dwell_checker::on_load_his(const std::shared_ptr<area_
     std::shared_ptr<SPersonDwellChecker> p = std::make_shared<SPersonDwellChecker>();
     p->m_send_event = false;
     ptr = p;
+    EVENT_TYPE evType = EVENT_TYPE::ET_CARD_OVER_TIME_PERSON;
+    if(c->is_person())
+    {
+        evType = a->m_area->is_mine() ? EVENT_TYPE::ET_CARD_OVER_TIME_PERSON : EVENT_TYPE::ET_CARD_AREA_OVER_TIME_PERSON;
+    }
+    else if (c->is_vehicle())
+    {
+        return ;
+    }
+    else
+    {
+        return;
+    }
+    auto ev_ptr_temp = event_list::instance()->get_event_card(c->m_id,c->m_type,evType);
+    if (ev_ptr_temp && !ev_ptr_temp->is_end())
+    {
+        p->m_send_event = true;
+    }
 }
 
 //进入区域,记录进入时间
@@ -49,12 +61,12 @@ void area_business_person_dwell_checker::on_hover(const std::shared_ptr<area_hov
 							const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
 {
     auto ptr_temp = dynamic_cast<SPersonDwellChecker*>(ptr.get());
-    if(nullptr == ptr_temp || ptr_temp->m_enter_time == 0)
+    if(nullptr == ptr_temp || a->m_enter_time == 0)
     {
         return ;
     }
 	double limit_val = 0;
-	double cur_val = ( tool_time::now_to_seconds() - ptr_temp->m_enter_time);
+	double cur_val = ( tool_time::now_to_seconds() - a->m_enter_time / 1000);
 	EVENT_TYPE evType = EVENT_TYPE::ET_CARD_AREA_OVER_TIME_PERSON;
 	if(c->is_person())
     {
@@ -88,17 +100,21 @@ void area_business_person_dwell_checker::on_leave(const std::shared_ptr<area_hov
     {
         return ;
     }
-    ptr_temp->m_send_event = false;
-    EVENT_TYPE evType = EVENT_TYPE::ET_CARD_AREA_OVER_TIME_PERSON;
-    if(c->is_person())
-    {
-        evType = a->m_area->is_mine() ? EVENT_TYPE::ET_CARD_OVER_TIME_PERSON : EVENT_TYPE::ET_CARD_AREA_OVER_TIME_PERSON;
-    }
-    else
+    if(ptr_temp->m_send_event)
     {
-        return ;
+        ptr_temp->m_send_event = false;
+        EVENT_TYPE evType = EVENT_TYPE::ET_CARD_AREA_OVER_TIME_PERSON;
+        if (c->is_person())
+        {
+            evType = a->m_area->is_mine() ? EVENT_TYPE::ET_CARD_OVER_TIME_PERSON
+                                          : EVENT_TYPE::ET_CARD_AREA_OVER_TIME_PERSON;
+        }
+        else
+        {
+            return;
+        }
+        uint64_t id = tool_other::type_id_to_u64(c->m_type, c->m_id);
+        event_tool::instance()->handle_event(OT_CARD, evType, id, 0, 0, false);
     }
-    uint64_t id = tool_other::type_id_to_u64(c->m_type, c->m_id);
-    event_tool::instance()->handle_event(OT_CARD,evType,id,0,0,false);
 }