Browse Source

修复一人多卡告警时没有地图id的bug

lixioayao 5 years ago
parent
commit
fbe0705369
2 changed files with 20 additions and 10 deletions
  1. 2 2
      bindmorecard.h
  2. 18 8
      event.cpp

+ 2 - 2
bindmorecard.h

@@ -105,7 +105,7 @@ struct TcardInterface
 			}
 			else if(tsp>=tmp_tsp_max)
 			{
-				if(timeout())
+				if(timeout() && !empty_slop())//达到数量,而且最后一个slop是非空的则继续判断,否则,不判断。
 				{
 					auto tp = get();
 					stp = check(std::get<0>(tp),std::get<1>(tp));
@@ -179,7 +179,7 @@ struct TcardInterface
 	}
 	bool timeout()
 	{
-		return (size()==SIZE) && !empty_slop();
+		return size()==SIZE;
 	}
 	std::string getInfo_1()
 	{

+ 18 - 8
event.cpp

@@ -103,7 +103,7 @@ void Event::handle_alarm_event(EVENT_TYPE et,uint64_t id,double limit_value,doub
         {
             uint64_t _id=id;
             log_info("Create_Event:desc[%s],id:%d,et:%d",desc.c_str(),id,et);
-            if(et == ET_VEHICLE_REAR_END&&!desc.empty())
+            if((et==ET_UWB_MORE_CARD||et == ET_VEHICLE_REAR_END)&&!desc.empty())//防追尾告警特殊处理
             {
                 std::string cardid = desc.substr(0,desc.find_first_of('&'));
                 _id = tool_other::card_id_to_u64(cardid);
@@ -115,7 +115,7 @@ void Event::handle_alarm_event(EVENT_TYPE et,uint64_t id,double limit_value,doub
                 ev_ptr->m_desc=desc;
                 ev_ptr->m_id=eid;
                 ev_ptr->m_dis_type=edt;
-                if(et==ET_UWB_MORE_CARD)
+                if(et==ET_UWB_MORE_CARD)//一人多卡特殊处理
                 {
                     ev_ptr->m_obj_id=desc;
                     ev_ptr->m_cur_time=std::chrono::system_clock::time_point(std::chrono::milliseconds((time_t)limit_value * 1000));
@@ -148,8 +148,20 @@ void Event::handle_alarm_event(EVENT_TYPE et,uint64_t id,double limit_value,doub
 std::shared_ptr<ya_event> mine_event::on_message(EVENT_TYPE et,uint64_t id,bool f)
 {
     std::shared_ptr<ya_event> event_ptr=nullptr;
-    if(f)
+    if(f){
         event_ptr=create_event(std::to_string(id), et);
+        auto card_ptr = card_list::instance()->get(id);
+        if(!card_ptr)
+        {
+            event_ptr->m_map_id=5;
+            return event_ptr;
+        }
+	    if(auto site_ptr=card_ptr->get_area_tool()->m_site)
+        {
+            event_ptr->m_area_id = site_ptr->m_area_id;
+            event_ptr->m_map_id = site_ptr->m_map_id;
+        }
+    }
     return event_ptr;
 }
 
@@ -208,12 +220,10 @@ std::shared_ptr<ya_event> card_event::on_message(EVENT_TYPE et,uint64_t id,bool
         event_ptr->y = card_ptr->y;
         //event_ptr->m_is_display = card_ptr->m_display;
 
-        auto area_info_map = card_ptr->get_area_tool()->m_area_info;
-        if(!area_info_map.empty())
+	    if(auto site_ptr=card_ptr->get_area_tool()->m_site)
         {
-            auto lm = area_info_map.begin()->second;
-            event_ptr->m_area_id = std::get<0>(lm);
-            event_ptr->m_map_id = card_ptr->get_area_tool()->get_mapid();
+            event_ptr->m_area_id = site_ptr->m_area_id;
+            event_ptr->m_map_id = site_ptr->m_map_id;
         }
     }
     return event_ptr;