area_business_count_checker.cpp 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "area.h"
  2. #include "card_base.h"
  3. #include "common_tool.h"
  4. #include "log.h"
  5. #include "event.h"
  6. #include "area_business_count_checker.h"
  7. /*
  8. 判断当前区域a中的人数是否超过设定人数,超过后告警
  9. 区域内实时人数存储在area对象中,在当前类on_enter/on_leave中进行更新
  10. 整个井下的超员和某个区域的超员都使用这个代码
  11. */
  12. //增加计数,并进行判断
  13. void area_business_count_checker::on_enter(const std::shared_ptr<area_hover>&a,
  14. const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr)
  15. {
  16. if (nullptr == a->m_area)
  17. {
  18. return ;
  19. }
  20. EVENT_TYPE ev = EVENT_TYPE::ET_OVER_COUNT_PERSON;
  21. int limitVal = 0;
  22. int curVal = 0;
  23. //uint64_t key = tool_other::type_id_to_u64(c->m_id,c->m_type);
  24. if (c->is_person())
  25. {
  26. a->m_area->m_person_count ++ ;
  27. limitVal = a->m_area->m_limit_person_count;
  28. curVal = a->m_area->m_person_count;
  29. ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ;
  30. }
  31. else if (c->is_vehicle())
  32. {
  33. a->m_area->m_vehicle_count ++ ;
  34. limitVal = a->m_area->m_limit_vehicle_count;
  35. curVal = a->m_area->m_vehicle_count;
  36. ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ;
  37. }
  38. if(curVal > limitVal)
  39. {
  40. // 超员告警
  41. /*std::string log = "";
  42. for (uint64_t id : a->m_area->m_person_list)
  43. {
  44. log += tool_other::get_string_cardid(id);
  45. log += "&";
  46. }
  47. //打印日志
  48. log_info("[lemon mp_card_list_down_person:]:%s",log.c_str());
  49. */
  50. event_tool::instance()->handle_event(a->m_area->is_mine()? OT_MINE : OT_AREA,ev,0,limitVal,curVal,true);
  51. log_info("area_business_count_checker::on_enter : Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d"
  52. ,ev,a->m_area->id(),limitVal,curVal);
  53. }
  54. }
  55. void area_business_count_checker::on_hover(const std::shared_ptr<area_hover>&a,
  56. const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
  57. {
  58. }
  59. //减少计数
  60. void area_business_count_checker::on_leave(const std::shared_ptr<area_hover>&a,
  61. const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
  62. {
  63. if (nullptr == a->m_area)
  64. {
  65. return ;
  66. }
  67. int limitVal = 0;
  68. int curVal = 0;
  69. EVENT_TYPE ev = EVENT_TYPE::ET_OVER_COUNT_PERSON;
  70. if (c->is_person())
  71. {
  72. a->m_area->m_person_count -- ;
  73. limitVal = a->m_area->m_limit_person_count;
  74. curVal = a->m_area->m_person_count;
  75. ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ;
  76. }
  77. else if (c->is_vehicle())
  78. {
  79. a->m_area->m_vehicle_count -- ;
  80. limitVal = a->m_area->m_limit_vehicle_count;
  81. curVal = a->m_area->m_vehicle_count;
  82. ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ;
  83. }
  84. else{
  85. return ;
  86. }
  87. if(curVal + 1 >= limitVal && curVal < limitVal)
  88. {
  89. log_info("area_business_count_checker::on_leave :Cancel Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d"
  90. ,ev,a->m_area->id(),limitVal,curVal);
  91. event_tool::instance()->handle_event(a->m_area->is_mine()? OT_MINE : OT_AREA,ev,a->m_area->id(),limitVal,curVal,false);
  92. }
  93. }