123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #include "special_area.h"
- #include "db_api/CDBSingletonDefine.h"
- #include "log.h"
- special_area_list * special_area_list::instance()
- {
- static special_area_list spl;
- return &spl;
- }
- int32_t special_area_list::get_special_id(uint32_t cardid,const point p,int32_t categoryid)
- {
- int32_t f = -1;
- for(const auto s:m_v)
- {
- if(p.x<=std::max(s.start_point.x,s.end_point.x)
- &&p.x>=std::min(s.start_point.x,s.end_point.x)
- &&p.y<=std::max(s.start_point.y,s.end_point.y)
- &&p.y>=std::min(s.start_point.y,s.end_point.y))
- //&&p.z<=std::max(s.start_point.z,s.end_point.z)
- //&&p.z>=std::min(s.start_point.z,s.end_point.z))
- {
- if(!s.car_type.empty())
- if(s.car_type.find(std::to_string(categoryid)) == std::string::npos)
- continue;
- if(m_m.find(s.special_area_id) != m_m.end())
- {
- auto v=m_m[s.special_area_id];
- if(std::find(v.begin(),v.end(),cardid)==v.end())
- continue;
- }
- f=s.special_area_id;
- }
- }
- return f;
- }
- void special_area_list::init_from_db()
- {
- init_special_area_entry();
- init_special_card();
- }
- void special_area_list::init_special_area_entry()
- {
- const char * sql = "SELECT serial_num, start_point_x, start_point_y, start_point_z, end_point_x, end_point_y, \
- end_point_z, special_area_id,car_type FROM dat_special_area_entry;";
- std::string Error;
- YADB::CDBResultSet DBRes;
- sDBConnPool.Query(sql,DBRes,Error);
- int nCount = DBRes.GetRecordCount( Error );
- if (nCount > 0)
- {
- log_info( "init_special_area. The record count=%d\n", nCount );
- while ( DBRes.GetNextRecod(Error) )
- {
- double start_x=0;
- DBRes.GetField( "start_point_x",start_x, Error );
- double start_y=0;
- DBRes.GetField( "start_point_y",start_y, Error );
- double start_z=0;
- DBRes.GetField( "start_point_z",start_z, Error );
- double end_x=0;
- DBRes.GetField( "end_point_x",end_x, Error );
- double end_y=0;
- DBRes.GetField( "end_point_y",end_y, Error );
- double end_z=0;
- DBRes.GetField( "end_point_z",end_z, Error );
- int areaid = 0;
- DBRes.GetField( "special_area_id",areaid, Error );
- std::string categoryid;
- DBRes.GetField( "car_type",categoryid, Error );
-
- m_v.emplace_back(start_x,start_y,start_z,end_x,end_y,end_z,areaid,categoryid);
- log_info("special area .....areaid:%d,categoryid:%s",areaid,categoryid.c_str());
- }
- }
- }
- void special_area_list::init_special_card()
- {
- const char * sql = "SELECT b.vehicle_id,a.special_area FROM dat_special_card a , dat_vehicle b WHERE a.card_name = b.name;";
- std::string Error;
- YADB::CDBResultSet DBRes;
- sDBConnPool.Query(sql,DBRes,Error);
- int nCount = DBRes.GetRecordCount( Error );
- if (nCount > 0)
- {
- log_info( "init_special_card. The record count=%d\n", nCount );
- while ( DBRes.GetNextRecod(Error) )
- {
- int vehicle_id = 0;
- DBRes.GetField( "vehicle_id",vehicle_id, Error );
-
- int areaid=0;
- DBRes.GetField( "special_area",areaid, Error );
- auto iter = m_m.find(areaid);
- if(iter != m_m.end())
- iter->second.push_back(vehicle_id);
- else
- m_m[areaid].push_back(vehicle_id);
- log_info("special card .....areaid:%d,categoryid:%d %d ..... %d",areaid,vehicle_id,m_m.size(),m_m[areaid].size());
- }
- }
- }
|