Forráskód Böngészése

修复防追尾bug

lixioayao 6 éve
szülő
commit
8222190a1b

+ 15 - 11
area.cpp

@@ -74,7 +74,7 @@ area::area(int id,int limit_count_person, int limit_time_person,double scale,int
      ,m_person_count(0)
      ,m_vehicle_count(0)
     {
-		m_area_business_list=area_business::get_instance_list(m_area_type);
+		m_area_business_list=area_business::get_instance_list(m_area_type,id);
 		m_event_person_count = false;
 		m_event_vehicle_count = false;
     }
@@ -232,11 +232,11 @@ void area_list::init_monkeycar_area(int id)
         {
             std::shared_ptr<db_area>  da = std::make_shared<db_area>();
             da->m_default_speed = monkeycar_speed;
-            da->m_point = init_path(monkeycar_coor);
+            da->m_point = init_path(monkeycar_coor,area_id);
             std::shared_ptr<area> ap = std::make_shared<monkey_area>(da,area_id,over_count_person, over_time_person,scale,map_id,b_type);
             ap->update(over_count_person, over_time_person,scale,map_id,area_type_id, over_count_vehicle,over_time_vehicle);
 
-            ap->m_bound=init_path(path);
+            ap->m_bound=init_path(path,area_id);
             for(const auto &p : ap->m_bound)
               log_info("point:monkey:area_id:%d--x:%.2f,y:%.2f",area_id,p.x,p.y);
             for(const auto &p : da->m_point)
@@ -249,14 +249,14 @@ void area_list::init_monkeycar_area(int id)
 			//这里后续需要把猴车得信息传递过去
             std::shared_ptr<db_area>  da = std::make_shared<db_area>();
             da->m_default_speed = monkeycar_speed;
-            da->m_point = init_path(monkeycar_coor);
+            da->m_point = init_path(monkeycar_coor,area_id);
 			std::shared_ptr<area> ap = std::make_shared<monkey_area>(da,area_id,over_count_person, over_time_person,scale,map_id,b_type);
 			if(auto area_=area_list::instance()->get(id))
 				area_=ap;
 			else
 				area_list::instance()->add(area_id,ap);
 
-            ap->m_bound=init_path(path);
+            ap->m_bound=init_path(path,area_id);
             ap->update(over_count_person, over_time_person,scale,map_id,area_type_id, over_count_vehicle,over_time_vehicle);
             for(const auto &p : ap->m_bound)
               log_info("point:monkey:area_id:%d--x:%.2f,y:%.2f",area_id,p.x,p.y);
@@ -366,7 +366,7 @@ void area_list::init_from_db(int id/*=-1*/)
 
         log_info("init_area : id:%d,path:%s..speed:%s",area_id, path.c_str(),over_speed_vehicle.c_str());
         std::map<int,double> map_;
-        auto vp=init_path(over_speed_vehicle);
+        auto vp=init_path(over_speed_vehicle,area_id);
         for(const auto &v:vp)
             map_.insert({v.x,v.y});
         if(-1 == id)
@@ -377,7 +377,7 @@ void area_list::init_from_db(int id/*=-1*/)
             ap->m_speed=std::move(map_);
             ap->m_is_work_area = is_work_area;
 
-            ap->m_bound=init_path(path);
+            ap->m_bound=init_path(path,area_id);
             for(const auto &p : ap->m_bound)
               log_info("point:area_id:%d--x:%.2f,y:%.2f",area_id,p.x,p.y);
             map.insert({area_id,ap});
@@ -391,8 +391,8 @@ void area_list::init_from_db(int id/*=-1*/)
                 area_list::instance()->add(id, tmp_ptr);
             }
             tmp_ptr->update(over_count_person, over_time_person,scale,map_id,area_type_id, over_count_vehicle,over_time_vehicle);
-            tmp_ptr->m_bound=init_path(path);
             tmp_ptr->m_speed=std::move(map_);
+            tmp_ptr->m_bound=init_path(path,area_id);
             tmp_ptr->m_is_work_area = is_work_area;
             for(const auto &p : tmp_ptr->m_bound)
                 log_info("point:area_id:%d--x:%.2f,y:%.2f",area_id,p.x,p.y);
@@ -412,10 +412,12 @@ void area_list::init_from_db(int id/*=-1*/)
     init_monkeycar_area(id);
 }
 
-std::vector<point> area_list::init_path(std::string &str)
+std::vector<point> area_list::init_path(std::string &str,int area_id)
 {
 	if(str.empty())
-	  log_error("area path empty()...");
+	{
+	  log_error("area path is empty,area_id=%d.",area_id);
+	}
 	std::vector<point> vp;
 	std::vector<std::string> vs;
 	std::vector<std::string> vs1;
@@ -426,7 +428,9 @@ std::vector<point> area_list::init_path(std::string &str)
 		  continue;
 		boost::split(vs1,s,boost::is_any_of(","));
 		if(vs1.size()!=2)
-		  log_error("area path data Error.pls check data table.");
+		{
+		  log_error("area path data Error.pls check data table,area_id=%d",area_id);
+		}
 		vp.emplace_back(atof(vs1[0].c_str()),atof(vs1[1].c_str()));
 	}
 	return std::move(vp);

+ 1 - 1
area.h

@@ -114,7 +114,7 @@ struct area_list:single_base<area_list,int,std::shared_ptr<area>>
 
 	//根据分站、所在点找出所在区域列表
 	std::vector<std::shared_ptr<area>> get_area(const std::shared_ptr<site>& s,const std::shared_ptr<card_location_base> &c,const point&pt,int &);
-    std::vector<point> init_path(std::string  &str);
+    std::vector<point> init_path(std::string  &str,int area_id);
     ///id=-1为初始化所有
     void init_from_db(int id=-1);
     void init_monkeycar_area(int id=-1);

+ 17 - 10
area_business.cpp

@@ -1,5 +1,6 @@
 
 #include <assert.h>
+#include "log.h"
 #include "area_business.h"
 #include "area_business_car_attendance.h"
 #include "area_business_card_enter_or_leave.h"
@@ -29,7 +30,7 @@ struct area_business_factory
 		m_check_list[type].reset(ab);
 	}
 
-	std::vector<area_business*> get_check_list(int business_type)
+	std::vector<area_business*> get_check_list(int business_type,int area_id)
 	{
 		std::vector<area_business*> check_list;
 		for(int i=0;i<32;i++)
@@ -38,13 +39,19 @@ struct area_business_factory
 				break;
 
 			if((business_type&1)==0)
-            {
-                business_type >>= 1;
+			{
+				business_type >>= 1;
 				continue;
-            }
+			}
 
 			business_type >>= 1;
 
+			if(!m_check_list[i])
+			{
+				log_error("区域业务项目不存在:%d,area_id=%d",i,area_id);
+				continue;
+			}
+
 			check_list.push_back(m_check_list[i].get());
 		}
 
@@ -56,7 +63,7 @@ struct area_business_factory
 		static area_business_factory _instance;
 		return _instance;
 	}
-private:
+	private:
 	std::vector<std::unique_ptr<area_business>> m_check_list;
 	area_business_factory()
 	{
@@ -70,15 +77,15 @@ private:
 		//regist(8,new area_business_monkey_area);
 		regist(9,new area_business_card_enter_or_leave);
 
-        regist(10, new area_business_motionless_persion);
-        regist(11, new area_business_geofault);
-        regist(12, new area_business_work_rate);
+		regist(10, new area_business_motionless_persion);
+		regist(11, new area_business_geofault);
+		regist(12, new area_business_work_rate);
 	}
 
 };
 
-std::vector<area_business*> area_business::get_instance_list(int business_type)
+std::vector<area_business*> area_business::get_instance_list(int business_type,int area_id)
 {
-	return area_business_factory::instance().get_check_list(business_type);
+	return area_business_factory::instance().get_check_list(business_type,area_id);
 }
 

+ 1 - 1
area_business.h

@@ -22,7 +22,7 @@ struct area_business
 
 	virtual ~area_business(){};
 
-	static std::vector<area_business*> get_instance_list(int business_type);
+	static std::vector<area_business*> get_instance_list(int business_type,int area_id);
 };
 #endif
 

+ 2 - 2
card.cpp

@@ -351,8 +351,8 @@ void card_list::on_message(zloop<task*> *loop,const message_locinfo&loc,bool is_
 		log_warn("数据库中未定义该卡的信息,card_id=%d, card_type=%d,cardid:%lld",loc.m_card_id,loc.m_card_type,cardid);
 		return;
 	}
-	logn_info(3,"card_message:site=%d,ant=%d,card=%d,ct=%d,tof=%lld,rav=%02X,acc=%02X,rssi=%d,stamp=%llu",
-			loc.m_site_id,loc.m_ant_id,loc.m_card_id,loc.m_card_ct,loc.m_tof,loc.m_rav,loc.m_acc,loc.m_rssi,loc.m_time_stamp);
+	logn_info(3,"card_message:site=%d,ant=%d,type=%lu,card=%d,ct=%d,tof=%lld,rav=%02X,acc=%02X,rssi=%d,stamp=%llu",
+			loc.m_site_id,loc.m_ant_id,loc.m_card_type,loc.m_card_id,loc.m_card_ct,loc.m_tof,loc.m_rav,loc.m_acc,loc.m_rssi,loc.m_time_stamp);
 
 	c->on_message(loop,loc,is_history);
 }

+ 1 - 1
event.cpp

@@ -104,7 +104,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_READER_LOCATION_REVERSAL&&!desc.empty())
+            if(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);

+ 4 - 4
mine_business.cpp

@@ -394,7 +394,7 @@ void card_sensor_mgr::for_each()
         int nCount = DBRes.GetRecordCount( Error );
         if (nCount < 1)
         {
-            log_error("load_sensor_data..failed[%s]", strsql);
+            log_warn("load_sensor_data..failed[%s]", strsql);
             continue;
         }
 
@@ -547,7 +547,7 @@ void rear_end_collision_prevented_business::handle_message()
         {
             log_info("vehicle_alarm_time_ %s",vvid.c_str());
             if (vinfo.is_alarm){
-                event_tool::instance()->handle_event(OT_CARD,ET_READER_LOCATION_REVERSAL,id,0,0,false,vvid);
+                event_tool::instance()->handle_event(OT_CARD,ET_VEHICLE_REAR_END,id,0,0,false,vvid);
             }
             it_cv = m_CloserVehicle.erase(it_cv);
             continue;
@@ -568,7 +568,7 @@ void rear_end_collision_prevented_business::handle_message()
             {
                 log_info("vehicle_alarm_backfired_timeout %s",vvid.c_str());
                 if(vinfo.is_alarm){
-                    event_tool::instance()->handle_event(OT_CARD,ET_READER_LOCATION_REVERSAL,id,CYaSetting::m_sys_setting.rear_end_d,dis,false,vvid);
+                    event_tool::instance()->handle_event(OT_CARD,ET_VEHICLE_REAR_END,id,CYaSetting::m_sys_setting.rear_end_d,dis,false,vvid);
                 }
                 it_cv = m_CloserVehicle.erase(it_cv);
                 continue;
@@ -585,7 +585,7 @@ void rear_end_collision_prevented_business::handle_message()
                 if (!vinfo.is_alarm)
                 {
                     log_info("vehicle_alarm_real_end_timeout_exec %s",vvid.c_str());
-                    event_tool::instance()->handle_event(OT_CARD,ET_READER_LOCATION_REVERSAL,id,CYaSetting::m_sys_setting.rear_end_d,dis,true,vvid);
+                    event_tool::instance()->handle_event(OT_CARD,ET_VEHICLE_REAR_END,id,CYaSetting::m_sys_setting.rear_end_d,dis,true,vvid);
                     vinfo.is_alarm = true;
                 }
             }

+ 0 - 1
module_service/area_business_card_enter_or_leave.cpp

@@ -19,7 +19,6 @@ void area_business_card_enter_or_leave::on_enter(const std::shared_ptr<area_hove
 {
     char sql[LENGTH_SQL]{0};
     std::string start_time = tool_time::to_str(a->m_enter_time/1000);
-//    std::string card_id = tool_other::type_id_to_str(c->m_type,c->m_id);
     const auto &p=a->m_enter_point;
     snprintf(sql,LENGTH_SQL,"INSERT INTO his_location_area (obj_id,card_type_id,ident,area_id,map_id,enter_time,start_point) \
 	                         VALUES ('%d','%lu','%d',%d,%d,'%s','%.2f,%.2f');",

+ 0 - 1
module_service/area_business_geofault.cpp

@@ -47,7 +47,6 @@ void area_business_geofault::on_enter(const std::shared_ptr<area_hover>&area_hov
 
     auto ptr_temp = std::make_shared<geofault_data>();
     ptr = ptr_temp;
-    area_hover_ptr->m_data[area_business_type()] = ptr_temp;
 
     double dist=0;
     if(_is_near(area_hover_ptr->m_area, card_ptr->x, card_ptr->y, dist))