|
@@ -13,6 +13,7 @@
|
|
|
#include <boost/algorithm/string/classification.hpp>
|
|
|
|
|
|
#include"module_service/module_area.h"
|
|
|
+#include "area_business.h"
|
|
|
|
|
|
template<> std::shared_ptr<area_list>
|
|
|
single_base<area_list, int, std::shared_ptr<area>>::m_instance=std::make_shared<area_list>();
|
|
@@ -58,7 +59,7 @@ void area::on_hover(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_
|
|
|
{
|
|
|
for(auto i:m_area_business_list)
|
|
|
{
|
|
|
- i->on_hover(a,c,a->get_business_data(i->business_type()));
|
|
|
+ i->on_hover(a,c,a->get_business_data(i->area_business_type()));
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -67,7 +68,7 @@ void area::on_enter(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_
|
|
|
log_info("on_enter..%d areaId:%d",c->m_id,m_id);
|
|
|
for(auto i:m_area_business_list)
|
|
|
{
|
|
|
- i->on_enter(a,c,a->get_business_data(i->business_type()));
|
|
|
+ i->on_enter(a,c,a->get_business_data(i->area_business_type()));
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -76,7 +77,7 @@ void area::on_leave(std::shared_ptr<area_hover>&a,std::shared_ptr<card_location_
|
|
|
log_info("on_leave..%d areaId:%d",c->m_id,m_id);
|
|
|
for(auto i:m_area_business_list)
|
|
|
{
|
|
|
- i->on_leave(a,c,a->get_business_data(i->business_type()));
|
|
|
+ i->on_leave(a,c,a->get_business_data(i->area_business_type()));
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -111,86 +112,11 @@ bool area::in_area(const std::shared_ptr<site>&s, const point & p)
|
|
|
area_list::area_list()
|
|
|
{
|
|
|
}
|
|
|
-#if 0
|
|
|
-void area_list::init_monkeycar_area()
|
|
|
-{
|
|
|
- std::unordered_map<int,std::shared_ptr<area>> map;
|
|
|
- const char *sql = "SELECT a.area_id, a.name, a.map_id, a.area_type_id, a.path, c.scale,\
|
|
|
- over_count_person, over_count_vehicle, over_time_person, over_time_vehicle, over_speed_vehicle, is_attendance ,b.monkeycar_coordinate,b.monkeycar_speed \
|
|
|
- FROM dat_area a ,dat_monkeycar_base_info b ,dat_map c\
|
|
|
- where a.area_id = b.monkeycar_base_info_id and a.map_id = c.map_id;";
|
|
|
- std::string Error;
|
|
|
- YADB::CDBResultSet DBRes;
|
|
|
- sDBConnPool.Query(sql,DBRes,Error);
|
|
|
- if(!Error.empty())
|
|
|
- log_error("monkeycar area init Error,%s",Error.c_str());
|
|
|
- int nCount = DBRes.GetRecordCount( Error );
|
|
|
- if (nCount > 0)
|
|
|
- {
|
|
|
- log_info( "init_monkey area. The record count=%d", nCount );
|
|
|
-
|
|
|
- while ( DBRes.GetNextRecod(Error) )
|
|
|
- {
|
|
|
- int area_id = 0;
|
|
|
- DBRes.GetField( "area_id",area_id, Error );
|
|
|
-
|
|
|
- int map_id = 0;
|
|
|
- DBRes.GetField( "map_id",map_id, Error );
|
|
|
-
|
|
|
- unsigned int area_type_id = 0;
|
|
|
- DBRes.GetField( "area_type_id",area_type_id, Error );
|
|
|
-
|
|
|
- int over_count_person = 0;
|
|
|
- DBRes.GetField( "over_count_person",over_count_person, Error );
|
|
|
-
|
|
|
- int over_count_vehicle = 0;
|
|
|
- DBRes.GetField( "over_count_vehicle",over_count_vehicle, Error );
|
|
|
-
|
|
|
- int over_time_person = 0;
|
|
|
- DBRes.GetField( "over_time_person",over_time_person, Error );
|
|
|
-
|
|
|
- int over_time_vehicle = 0;
|
|
|
- DBRes.GetField( "over_time_vehicle",over_time_vehicle, Error );
|
|
|
-
|
|
|
- std::string path;
|
|
|
- DBRes.GetField( "path",path, Error );
|
|
|
-
|
|
|
- float monkeycar_speed = 0;
|
|
|
- DBRes.GetField( "monkeycar_speed",monkeycar_speed, Error );
|
|
|
-
|
|
|
- std::string monkeycar_coor;
|
|
|
- DBRes.GetField( "monkeycar_coordinate",monkeycar_coor, Error );
|
|
|
-
|
|
|
- float scale=0;
|
|
|
- DBRes.GetField( "scale",scale, Error );
|
|
|
-
|
|
|
-
|
|
|
- log_info("init_area : id:%d,path:%s",area_id, path.c_str());
|
|
|
-
|
|
|
- std::shared_ptr<db_area> da = std::make_shared<db_area>();
|
|
|
- da->m_default_speed = monkeycar_speed;
|
|
|
- da->m_point = init_path(monkeycar_coor);
|
|
|
-
|
|
|
- std::shared_ptr<area> ap = std::make_shared<monkey_area>(da,area_id,over_count_person,over_time_person,scale,map_id,area_type_id);
|
|
|
-
|
|
|
- ap->m_bound=init_path(path);
|
|
|
- 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)
|
|
|
- log_info("point:monkey_coor:area_id:%d--x:%.2f,y:%.2f",area_id,p.x,p.y);
|
|
|
-
|
|
|
- map.insert({area_id,ap});
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- area_list::instance()->add(map);
|
|
|
-}
|
|
|
-#endif
|
|
|
void area_list::init_monkeycar_area(int id)
|
|
|
{
|
|
|
std::string sql = "SELECT a.area_id, a.name, a.map_id, a.area_type_id, a.path, c.scale,\
|
|
|
over_count_person, over_count_vehicle, over_time_person, over_time_vehicle,\
|
|
|
- over_speed_vehicle, is_attendance ,b.monkeycar_coordinate,b.monkeycar_speed \
|
|
|
+ over_speed_vehicle, is_attendance ,b.monkeycar_coordinate,b.monkeycar_speed,a.business_type \
|
|
|
FROM dat_area a ,dat_monkeycar_base_info b ,dat_map c\
|
|
|
where a.area_id = b.monkeycar_base_info_id and a.map_id = c.map_id";
|
|
|
|
|
@@ -254,6 +180,9 @@ void area_list::init_monkeycar_area(int id)
|
|
|
double scale=0;
|
|
|
DBRes.GetField( "scale",scale, Error );
|
|
|
|
|
|
+ uint32_t b_type =0;
|
|
|
+ DBRes.GetField( "business_type",b_type, Error );
|
|
|
+
|
|
|
log_info("monkeycar area init_area : id:%d,path:%s",area_id, path.c_str());
|
|
|
|
|
|
if(-1 == id)
|
|
@@ -262,8 +191,9 @@ void area_list::init_monkeycar_area(int id)
|
|
|
da->m_default_speed = monkeycar_speed;
|
|
|
da->m_point = init_path(monkeycar_coor);
|
|
|
|
|
|
- std::shared_ptr<area> ap = std::make_shared<monkey_area>(da,area_id,over_count_person,
|
|
|
- over_time_person,scale,map_id,area_type_id);
|
|
|
+ std::shared_ptr<area> ap = std::make_shared<monkey_area>(da,area_id,over_count_person, over_time_person,scale,map_id,area_type_id);
|
|
|
+ //初始化区域逻辑
|
|
|
+ ap->m_area_business_list=std::move(area_business::get_instance_list(b_type));
|
|
|
|
|
|
ap->m_bound=init_path(path);
|
|
|
for(const auto &p : ap->m_bound)
|
|
@@ -275,35 +205,29 @@ void area_list::init_monkeycar_area(int id)
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ //这里后续需要把猴车得信息传递过去
|
|
|
std::shared_ptr<db_area> da = std::make_shared<db_area>();
|
|
|
da->m_default_speed = monkeycar_speed;
|
|
|
da->m_point = init_path(monkeycar_coor);
|
|
|
-
|
|
|
- std::shared_ptr<area> ap = std::make_shared<monkey_area>(da,area_id,over_count_person,
|
|
|
- over_time_person,scale,map_id,area_type_id);
|
|
|
+ std::shared_ptr<area> ap = area_list::instance()->get(id);
|
|
|
+ if(!ap)
|
|
|
+ {
|
|
|
+ ap = std::make_shared<monkey_area>(da,area_id,over_count_person, over_time_person,scale,map_id,area_type_id);
|
|
|
+ area_list::instance()->add(id, ap);
|
|
|
+ }
|
|
|
+ ap->m_area_business_list=std::move(area_business::get_instance_list(b_type));
|
|
|
|
|
|
ap->m_bound=init_path(path);
|
|
|
+ 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);
|
|
|
for(const auto &p : da->m_point)
|
|
|
log_info("point:monkey_coor:area_id:%d--x:%.2f,y:%.2f",area_id,p.x,p.y);
|
|
|
|
|
|
- auto tmp_ptr = area_list::instance()->get(id);
|
|
|
- if(tmp_ptr)
|
|
|
- {
|
|
|
- area_list::instance()->remove(id);
|
|
|
- }
|
|
|
-
|
|
|
- area_list::instance()->add(id, ap);
|
|
|
-
|
|
|
log_info("基础数据 monkeycar area增加或修改区域成功:区域id:%d,over_count_person:%d over_time_person:%d,\
|
|
|
scale:%.2f,map_id:%d,area_type_id:%d,over_count_vehicle:%d,over_time_vehicle:%d",
|
|
|
id,over_count_person, over_time_person,scale,map_id,area_type_id,
|
|
|
over_count_vehicle,over_time_vehicle);
|
|
|
- std_debug("基础数据 monkeycar area增加或修改区域成功:区域id:%d,over_count_person:%d over_time_person:%d,\
|
|
|
- scale:%.2f,map_id:%d,area_type_id:%d,over_count_vehicle:%d,over_time_vehicle:%d",
|
|
|
- id,over_count_person, over_time_person,scale,map_id,area_type_id,
|
|
|
- over_count_vehicle,over_time_vehicle);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -318,7 +242,7 @@ void area_list::init_from_db(int id/*=-1*/)
|
|
|
{
|
|
|
std::string sql = "SELECT a.area_id, a.name, a.map_id, a.area_type_id, a.path,b.scale, \
|
|
|
over_count_person, over_count_vehicle, over_time_person, over_time_vehicle, \
|
|
|
- over_speed_vehicle, is_attendance \
|
|
|
+ over_speed_vehicle, is_attendance,business_type \
|
|
|
FROM dat_area a,dat_map b\
|
|
|
where a.map_id = b.map_id and area_id not in \
|
|
|
(select monkeycar_base_info_id from dat_monkeycar_base_info)";
|
|
@@ -376,6 +300,9 @@ void area_list::init_from_db(int id/*=-1*/)
|
|
|
double scale = 0;
|
|
|
DBRes.GetField( "scale",scale, Error );
|
|
|
|
|
|
+ uint32_t b_type =0;
|
|
|
+ DBRes.GetField( "business_type",b_type, Error );
|
|
|
+
|
|
|
log_info("init_area : id:%d,path:%s",area_id, path.c_str());
|
|
|
|
|
|
if(-1 == id)
|
|
@@ -389,6 +316,8 @@ void area_list::init_from_db(int id/*=-1*/)
|
|
|
ap->m_bound=init_path(path);
|
|
|
for(const auto &p : ap->m_bound)
|
|
|
log_info("point:area_id:%d--x:%.2f,y:%.2f",area_id,p.x,p.y);
|
|
|
+
|
|
|
+ ap->m_area_business_list=std::move(area_business::get_instance_list(b_type));
|
|
|
|
|
|
map.insert({area_id,ap});
|
|
|
|
|
@@ -397,30 +326,17 @@ void area_list::init_from_db(int id/*=-1*/)
|
|
|
else
|
|
|
{
|
|
|
auto tmp_ptr = area_list::instance()->get(id);
|
|
|
- if(tmp_ptr)
|
|
|
+ if(!tmp_ptr)
|
|
|
{
|
|
|
-// CheckAreaType(tmp_ptr,area_type_id,tmp_ptr->m_area_type);
|
|
|
-
|
|
|
- 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);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- std::shared_ptr<area> ap = std::make_shared<area>(area_id,over_count_person,over_time_person,
|
|
|
- scale,map_id,area_type_id);
|
|
|
-
|
|
|
- ap->m_limit_vehicle_second = over_time_vehicle;
|
|
|
- ap->m_limit_vehicle_count = over_count_vehicle;
|
|
|
-
|
|
|
- ap->m_bound=init_path(path);
|
|
|
- for(const auto &p : ap->m_bound)
|
|
|
- log_info("point:area_id:%d--x:%.2f,y:%.2f",area_id,p.x,p.y);
|
|
|
-
|
|
|
- area_list::instance()->add(id, ap);
|
|
|
-
|
|
|
-// CheckAreaType(ap,area_type_id,0);
|
|
|
+ tmp_ptr= std::make_shared<area>(area_id,over_count_person,over_time_person,scale,map_id,area_type_id);
|
|
|
+ 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_area_business_list=std::move(area_business::get_instance_list(b_type));
|
|
|
+ for(const auto &p : tmp_ptr->m_bound)
|
|
|
+ log_info("point:area_id:%d--x:%.2f,y:%.2f",area_id,p.x,p.y);
|
|
|
+// CheckAreaType(tmp_ptr,area_type_id,tmp_ptr->m_area_type);
|
|
|
|
|
|
log_info("基础数据 增加或修改区域成功:区域id:%d,over_count_person:%d over_time_person:%d,scale:%.2f,map_id:%d\
|
|
|
,area_type_id:%d,over_count_vehicle:%d,over_time_vehicle:%d",
|
|
@@ -433,7 +349,6 @@ void area_list::init_from_db(int id/*=-1*/)
|
|
|
{
|
|
|
log_info( "init_area. The record count=%d\n", nCount );
|
|
|
area_list::instance()->add(map);
|
|
|
-
|
|
|
init_monkeycar_area();
|
|
|
}
|
|
|
}
|
|
@@ -519,74 +434,6 @@ void area_list::CheckAreaType( std::shared_ptr<area> pArea,int new_area_type,int
|
|
|
card_list::instance()->accept(lv);
|
|
|
}
|
|
|
|
|
|
-#endif
|
|
|
-
|
|
|
-#if 0
|
|
|
-void area_list::init_from_db()
|
|
|
-{
|
|
|
- std::unordered_map<int,std::shared_ptr<area>> map;
|
|
|
- const char *sql = "SELECT a.area_id, a.name, a.map_id, a.area_type_id, a.path,b.scale, \
|
|
|
- over_count_person, over_count_vehicle, over_time_person, over_time_vehicle, over_speed_vehicle, is_attendance \
|
|
|
- FROM dat_area a,dat_map b\
|
|
|
- where a.map_id = b.map_id and area_id not in (select monkeycar_base_info_id from dat_monkeycar_base_info);";
|
|
|
- std::string Error;
|
|
|
- YADB::CDBResultSet DBRes;
|
|
|
- sDBConnPool.Query(sql,DBRes,Error);
|
|
|
- if(!Error.empty())
|
|
|
- log_error("monkeycar area init Error,%s",Error.c_str());
|
|
|
- int nCount = DBRes.GetRecordCount( Error );
|
|
|
- if (nCount > 0)
|
|
|
- {
|
|
|
- log_info( "init_area. The record count=%d\n", nCount );
|
|
|
-
|
|
|
- while ( DBRes.GetNextRecod(Error) )
|
|
|
- {
|
|
|
- int area_id = 0;
|
|
|
- DBRes.GetField( "area_id",area_id, Error );
|
|
|
-
|
|
|
- int map_id = 0;
|
|
|
- DBRes.GetField( "map_id",map_id, Error );
|
|
|
-
|
|
|
- unsigned int area_type_id = 0;
|
|
|
- DBRes.GetField( "area_type_id",area_type_id, Error );
|
|
|
-
|
|
|
- int over_count_person = 0;
|
|
|
- DBRes.GetField( "over_count_person",over_count_person, Error );
|
|
|
-
|
|
|
- int over_count_vehicle = 0;
|
|
|
- DBRes.GetField( "over_count_vehicle",over_count_vehicle, Error );
|
|
|
-
|
|
|
- int over_time_person = 0;
|
|
|
- DBRes.GetField( "over_time_person",over_time_person, Error );
|
|
|
-
|
|
|
- int over_time_vehicle = 0;
|
|
|
- DBRes.GetField( "over_time_vehicle",over_time_vehicle, Error );
|
|
|
-
|
|
|
- std::string path;
|
|
|
- DBRes.GetField( "path",path, Error );
|
|
|
-
|
|
|
- double scale = 0;
|
|
|
- DBRes.GetField( "scale",scale, Error );
|
|
|
-
|
|
|
- log_info("init_area : id:%d,path:%s",area_id, path.c_str());
|
|
|
-
|
|
|
- std::shared_ptr<area> ap = std::make_shared<area>(area_id,over_count_person,over_time_person,scale,map_id,area_type_id);
|
|
|
-
|
|
|
- ap->m_limit_vehicle_second = over_time_vehicle;
|
|
|
- ap->m_limit_vehicle_count = over_count_vehicle;
|
|
|
-
|
|
|
- ap->m_bound=init_path(path);
|
|
|
- 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});
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- area_list::instance()->add(map);
|
|
|
-
|
|
|
- init_monkeycar_area();
|
|
|
-}
|
|
|
#endif
|
|
|
std::vector<point> area_list::init_path(std::string &str)
|
|
|
{
|
|
@@ -615,12 +462,8 @@ std::vector<std::shared_ptr<area>> area_list::get_area(const std::shared_ptr<sit
|
|
|
auto map = area_list::instance()->m_map;
|
|
|
|
|
|
for(const auto &a:map)
|
|
|
- {
|
|
|
if(a.second->in_area(s, pt))
|
|
|
- {
|
|
|
ret.push_back(a.second);
|
|
|
- }
|
|
|
- }
|
|
|
//区域覆盖不完全地图,很多车辆人行驶在地图外,如何确认.
|
|
|
return std::move(ret);
|
|
|
}
|
|
@@ -628,11 +471,16 @@ std::vector<std::shared_ptr<area>> area_list::get_area(const std::shared_ptr<sit
|
|
|
void area_tool::on_point(const std::shared_ptr<site>&s,std::shared_ptr<card_location_base> c,const point&pt)
|
|
|
{
|
|
|
log_info("on_point...cardid:%d,type:%d",c->m_id,c->m_type);
|
|
|
-
|
|
|
setLandmark(pt);
|
|
|
|
|
|
std::vector<std::shared_ptr<area>> areas=area_list::instance()->get_area(s, pt);//找出所有的区域
|
|
|
- std::sort(areas.begin(),areas.end(),[](std::shared_ptr<area>&l,std::shared_ptr<area>&r){
|
|
|
+ int sa = c->get_area();
|
|
|
+ if(sa!=-1)
|
|
|
+ {
|
|
|
+ auto area_=area_list::instance()->get(sa);
|
|
|
+ areas.push_back(area_);
|
|
|
+ }
|
|
|
+ std::sort(areas.begin(),areas.end(),[](const std::shared_ptr<area>&l,const std::shared_ptr<area>&r){
|
|
|
return l->id()<r->id();
|
|
|
});
|
|
|
|