area_business_count_checker.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #include "event.h"
  2. #include "area.h"
  3. #include "card_base.h"
  4. #include "common_tool.h"
  5. #include "log.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_load_his(const std::shared_ptr<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr)
  14. {
  15. if (nullptr == a->m_area )
  16. return ;
  17. if (c->is_person() && !a->m_area->m_event_person_count)
  18. {
  19. EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ;
  20. auto ev_ptr_temp = event_list::instance()->get_event_area(a->m_area->id(),ev);
  21. if (ev_ptr_temp && !ev_ptr_temp->is_end())
  22. a->m_area->m_event_person_count = true;
  23. }
  24. else if (c->is_vehicle() && !a->m_area->m_event_vehicle_count)
  25. {
  26. EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ;
  27. auto ev_ptr_temp = event_list::instance()->get_event_area(a->m_area->id(),ev);
  28. if (ev_ptr_temp && !ev_ptr_temp->is_end())
  29. {
  30. a->m_area->m_event_vehicle_count = true;
  31. }
  32. }
  33. on_enter(a,c,ptr);
  34. }
  35. //增加计数,并进行判断
  36. void area_business_count_checker::on_enter(const std::shared_ptr<area_hover>&a,
  37. const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr)
  38. {
  39. if (nullptr == a->m_area )//|| !a->m_area->is_mine())
  40. {
  41. return ;
  42. }
  43. if (c->is_person())
  44. {
  45. a->m_area->m_person_count ++ ;
  46. if (!a->m_area->m_event_person_count && a->m_area->m_person_count > a->m_area->m_limit_person_count)
  47. {
  48. a->m_area->m_event_person_count = true;
  49. EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ;
  50. event_tool::instance()->handle_event(OT_AREA,ev,a->m_area->id(),a->m_area->m_limit_person_count,a->m_area->m_person_count,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(),a->m_area->m_limit_person_count,(int)a->m_area->m_person_count);
  53. }
  54. }
  55. else if (c->is_vehicle())
  56. {
  57. a->m_area->m_vehicle_count ++ ;
  58. if (a->m_area->m_vehicle_count > a->m_area->m_limit_vehicle_count && !a->m_area->m_event_vehicle_count)
  59. {
  60. a->m_area->m_event_vehicle_count = true;
  61. EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ;
  62. event_tool::instance()->handle_event(OT_AREA,ev,a->m_area->id(),a->m_area->m_limit_vehicle_count,a->m_area->m_vehicle_count,true);
  63. log_info("area_business_count_checker::on_enter : Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d"
  64. ,ev,a->m_area->id(),a->m_area->m_limit_vehicle_count,(int)a->m_area->m_vehicle_count);
  65. }
  66. }
  67. }
  68. void area_business_count_checker::on_hover(const std::shared_ptr<area_hover>&a,
  69. const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
  70. {
  71. }
  72. //减少计数
  73. void area_business_count_checker::on_leave(const std::shared_ptr<area_hover>&a,
  74. const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
  75. {
  76. if (nullptr == a->m_area )
  77. {
  78. return ;
  79. }
  80. int limitVal = 0;
  81. int curVal = 0;
  82. bool tmp_event = false;
  83. EVENT_TYPE ev = EVENT_TYPE::ET_OVER_COUNT_PERSON;
  84. if (c->is_person())
  85. {
  86. a->m_area->m_person_count -- ;
  87. limitVal = a->m_area->m_limit_person_count;
  88. curVal = a->m_area->m_person_count;
  89. tmp_event = a->m_area->m_event_person_count;
  90. ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ;
  91. if(tmp_event && curVal < limitVal)
  92. {
  93. a->m_area->m_event_person_count = false;
  94. log_info("area_business_count_checker::on_leave :Cancel Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d"
  95. ,ev,a->m_area->id(),limitVal,curVal);
  96. event_tool::instance()->handle_event(OT_AREA,ev,a->m_area->id(),limitVal,curVal,false);
  97. }
  98. }
  99. else if (c->is_vehicle())
  100. {
  101. a->m_area->m_vehicle_count -- ;
  102. limitVal = a->m_area->m_limit_vehicle_count;
  103. curVal = a->m_area->m_vehicle_count;
  104. tmp_event = a->m_area->m_event_vehicle_count;
  105. ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ;
  106. if(tmp_event && curVal < limitVal)
  107. {
  108. a->m_area->m_event_vehicle_count = false;
  109. log_info("area_business_count_checker::on_leave :Cancel Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d"
  110. ,ev,a->m_area->id(),limitVal,curVal);
  111. event_tool::instance()->handle_event(OT_AREA,ev,a->m_area->id(),limitVal,curVal,false);
  112. }
  113. }
  114. }