c2.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. struct rect
  2. {
  3. };
  4. struct area_interface
  5. {
  6. uint32_t m_id;
  7. std::string m_name;
  8. std::atomic<int> m_card_count;
  9. int id();
  10. std::string name();
  11. int get_card_count();
  12. double get_limit_speed();
  13. double get_limit_time_second();
  14. double get_limit_card_count();
  15. virtual int type()=0;//site:0,normal:1
  16. void inc_card_count(int deta)
  17. {
  18. }
  19. virtual ~area_interface(){}
  20. };
  21. struct normal_area:area_interface
  22. {
  23. rect m_bound;
  24. };
  25. struct site_area:area_interface
  26. {
  27. uint32_t m_site_id;
  28. };
  29. struct area_main
  30. {
  31. std::vector<area_interface*> m_normal_list,m_site_list;
  32. area_interface*get_normal_area(int id);
  33. area_interface*get_normal_area(const point&pt);
  34. area_interface*get_site_area(int site_id);
  35. };
  36. struct area_hover
  37. {
  38. area* m_area;
  39. time_t m_enter_time,m_last_time,m_leave_time;
  40. };
  41. struct card_area_tool
  42. {
  43. area_hover m_prev,m_last;
  44. area_hover m_prev_site,m_last_site;
  45. void on_point(const char* card_id,int site_id,const point&pt,double speed)
  46. {
  47. {
  48. area_interface *a=area_main_inst->get_site_area(site_id);
  49. on_site_area_point(a,card_id);
  50. }
  51. {
  52. area_interface *a=area_main_inst->get_normal_area(pt);
  53. on_site_area_point(a,card_id);
  54. }
  55. }
  56. //插入进入新分站记录 //离开分站时更新记录//本版本只在数据库生成记录
  57. void on_site_area_point(a,card_id,site_id,speed)
  58. {
  59. if(enter) do_att_biz(a,card_id);
  60. }
  61. //人卡考勤
  62. void do_att_biz(a,card_id)
  63. {
  64. }
  65. //生成卡进入区域、在区域活跃和离开区域的调用
  66. void on_normal_area_point(a,card_id,pt,speed)
  67. {
  68. if(hover) do_hover_biz(a,card_id,pt,speed);
  69. if(enter) do_enter_biz(a,card_id,pt,speed);
  70. }
  71. //检测是否超时
  72. void on_timer(card_id)
  73. {
  74. }
  75. void do_hover_biz(a,card_id,pt,speed)
  76. {
  77. //区域超时超时检测
  78. //区域超速检测
  79. //电子围栏检测
  80. }
  81. void do_enter_biz(a,card_id,pt,speed)
  82. {
  83. //当前区域超员检测
  84. //车卡考勤逻辑检测
  85. //电子围栏检测
  86. }
  87. };
  88. struct person_card:card
  89. {
  90. card_area_tool*m_area_tool;
  91. void on_point(int site_id,const point&pt,double speed)
  92. {
  93. m_area_tool->on_point(m_id,site_id,pt,speed);
  94. }
  95. };