123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- struct rect
- {
- };
- struct area_interface
- {
- uint32_t m_id;
- std::string m_name;
- std::atomic<int> m_card_count;
- int id();
- std::string name();
- int get_card_count();
- double get_limit_speed();
- double get_limit_time_second();
- double get_limit_card_count();
- virtual int type()=0;//site:0,normal:1
- void inc_card_count(int deta)
- {
-
- }
- virtual ~area_interface(){}
- };
- struct normal_area:area_interface
- {
- rect m_bound;
- };
- struct site_area:area_interface
- {
- uint32_t m_site_id;
- };
- struct area_main
- {
- std::vector<area_interface*> m_normal_list,m_site_list;
- area_interface*get_normal_area(int id);
- area_interface*get_normal_area(const point&pt);
- area_interface*get_site_area(int site_id);
- };
- struct area_hover
- {
- area* m_area;
- time_t m_enter_time,m_last_time,m_leave_time;
- };
- struct card_area_tool
- {
- area_hover m_prev,m_last;
- area_hover m_prev_site,m_last_site;
- void on_point(const char* card_id,int site_id,const point&pt,double speed)
- {
- {
- area_interface *a=area_main_inst->get_site_area(site_id);
- on_site_area_point(a,card_id);
- }
- {
- area_interface *a=area_main_inst->get_normal_area(pt);
- on_site_area_point(a,card_id);
- }
- }
- //插入进入新分站记录 //离开分站时更新记录//本版本只在数据库生成记录
- void on_site_area_point(a,card_id,site_id,speed)
- {
- if(enter) do_att_biz(a,card_id);
- }
- //人卡考勤
- void do_att_biz(a,card_id)
- {
-
-
- }
- //生成卡进入区域、在区域活跃和离开区域的调用
- void on_normal_area_point(a,card_id,pt,speed)
- {
- if(hover) do_hover_biz(a,card_id,pt,speed);
- if(enter) do_enter_biz(a,card_id,pt,speed);
- }
- //检测是否超时
- void on_timer(card_id)
- {
-
- }
- void do_hover_biz(a,card_id,pt,speed)
- {
- //区域超时超时检测
- //区域超速检测
- //电子围栏检测
- }
- void do_enter_biz(a,card_id,pt,speed)
- {
- //当前区域超员检测
- //车卡考勤逻辑检测
- //电子围栏检测
- }
- };
- struct person_card:card
- {
- card_area_tool*m_area_tool;
- void on_point(int site_id,const point&pt,double speed)
- {
- m_area_tool->on_point(m_id,site_id,pt,speed);
- }
- };
|