module_area.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #include "module_area.h"
  2. #include"module_area_overman.h"
  3. #include"module_area_timeout.h"
  4. #include"module_attendance_vehicle.h"
  5. #include"module_const.h"
  6. #include"module_area_over_speed.h"
  7. void module_area::on_enter(uint64_t card_id,std::shared_ptr<area_hover>&c,double speed)
  8. {
  9. //与考勤,卡数统计,超员,超时无关的区域 直接返回
  10. if(AT_OTHER == c->m_area->m_area_type)
  11. {
  12. return;
  13. }
  14. auto card_ptr=card_list::instance()->get(card_id);
  15. if(!card_ptr)
  16. {
  17. log_error("卡不存在card_id=%d", card_id);
  18. return;
  19. }
  20. std::lock_guard<std::mutex> lock(_mutex);
  21. c->m_enter_time = std::chrono::system_clock::now();
  22. if(CT_PERSON == card_ptr->m_type)//统计人卡
  23. {
  24. c->m_area->m_person_count++;
  25. //区域人卡超员
  26. module_area_overman::instance()->on_enter(card_ptr, c, speed);
  27. //区域人卡超时
  28. module_area_timeout::instance()->on_enter(card_ptr, c, speed);
  29. }
  30. if(CT_VEHICLE == card_ptr->m_type)//统计车卡
  31. {
  32. c->m_area->m_vehicle_count++;
  33. //区域车卡超速
  34. module_area_over_speed::instance()->on_enter(card_ptr, c, speed);
  35. //车卡考勤
  36. module_attendance_vehicle::instance()->on_enter(card_ptr, c, speed);
  37. }
  38. }
  39. void module_area::on_hover(uint64_t card_id,std::shared_ptr<area_hover>&c,double speed)
  40. {
  41. //与考勤,卡数统计,超员,超时无关的区域 直接返回
  42. if(AT_OTHER == c->m_area->m_area_type)
  43. {
  44. return;
  45. }
  46. auto card_ptr=card_list::instance()->get(card_id);
  47. if(!card_ptr)
  48. {
  49. log_error("卡不存在card_id=%d", card_id);
  50. return;
  51. }
  52. std::lock_guard<std::mutex> lock(_mutex);
  53. if(CT_PERSON == card_ptr->m_type)//统计人卡
  54. {
  55. //区域人卡超员
  56. module_area_overman::instance()->on_hover(card_ptr, c, speed, _map);
  57. //区域人卡超时
  58. module_area_timeout::instance()->on_hover(card_ptr, c, speed, _map);
  59. }
  60. if(CT_VEHICLE == card_ptr->m_type)//统计车卡
  61. {
  62. //区域车卡超速
  63. module_area_over_speed::instance()->on_hover(card_ptr, c, speed, _map);
  64. //车卡考勤
  65. module_attendance_vehicle::instance()->on_hover(card_ptr, c, speed, _map);
  66. }
  67. }
  68. void module_area::on_leave(uint64_t card_id,std::shared_ptr<area_hover>&c,double speed)
  69. {
  70. //与考勤,卡数统计,超员,超时无关的区域 直接返回
  71. if(AT_OTHER == c->m_area->m_area_type)
  72. {
  73. return;
  74. }
  75. auto card_ptr=card_list::instance()->get(card_id);
  76. if(!card_ptr)
  77. {
  78. log_error("卡不存在card_id=%d", card_id);
  79. return;
  80. }
  81. std::lock_guard<std::mutex> lock(_mutex);
  82. if(CT_PERSON == card_ptr->m_type)//统计人卡
  83. {
  84. c->m_area->m_person_count--;
  85. //区域人卡超员
  86. module_area_overman::instance()->on_leave(card_ptr, c, speed);
  87. //区域人卡超时
  88. module_area_timeout::instance()->on_leave(card_ptr, c, speed);
  89. }
  90. if(CT_VEHICLE == card_ptr->m_type)//统计车卡
  91. {
  92. c->m_area->m_vehicle_count--;
  93. //区域车卡超速
  94. module_area_over_speed::instance()->on_leave(card_ptr, c, speed);
  95. //车卡考勤
  96. module_attendance_vehicle::instance()->on_leave(card_ptr, c, speed);
  97. }
  98. }