area_business_count_checker.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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 )//|| !a->m_area->is_mine())
  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. if (c->is_vehicle())
  41. {
  42. a->m_area->m_event_vehicle_count = true;
  43. }
  44. else
  45. {
  46. a->m_area->m_event_person_count = true;
  47. }
  48. event_tool::instance()->handle_event(a->m_area->is_mine()? OT_MINE : OT_AREA,ev,a->m_area->id(),limitVal,curVal,true);
  49. log_info("area_business_count_checker::on_enter : Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d"
  50. ,ev,a->m_area->id(),limitVal,curVal);
  51. }
  52. }
  53. void area_business_count_checker::on_hover(const std::shared_ptr<area_hover>&a,
  54. const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
  55. {
  56. }
  57. //减少计数
  58. void area_business_count_checker::on_leave(const std::shared_ptr<area_hover>&a,
  59. const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
  60. {
  61. if (nullptr == a->m_area )//|| !a->m_area->is_mine())
  62. {
  63. return ;
  64. }
  65. int limitVal = 0;
  66. int curVal = 0;
  67. bool tmp_event = false;
  68. EVENT_TYPE ev = EVENT_TYPE::ET_OVER_COUNT_PERSON;
  69. if (c->is_person())
  70. {
  71. a->m_area->m_person_count -- ;
  72. limitVal = a->m_area->m_limit_person_count;
  73. curVal = a->m_area->m_person_count;
  74. tmp_event = a->m_area->m_event_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. tmp_event = a->m_area->m_event_vehicle_count;
  83. ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ;
  84. }
  85. else{
  86. return ;
  87. }
  88. if(tmp_event && curVal < limitVal)
  89. {
  90. if (c->is_vehicle())
  91. {
  92. a->m_area->m_event_vehicle_count = false;
  93. }
  94. else
  95. {
  96. a->m_area->m_event_person_count = false;
  97. }
  98. log_info("area_business_count_checker::on_leave :Cancel Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d"
  99. ,ev,a->m_area->id(),limitVal,curVal);
  100. event_tool::instance()->handle_event(a->m_area->is_mine()? OT_MINE : OT_AREA,ev,a->m_area->id(),limitVal,curVal,false);
  101. }
  102. }