1
0

area_business_count_checker.cpp 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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. static void check_event(bool &event_flag,EVENT_TYPE et,EVENT_DIS_TYPE edt,int id)
  13. {
  14. if(!event_flag)
  15. {
  16. auto ev_p = event_list::instance()->get_event_area(id,et,edt);
  17. if (ev_p && !ev_p->is_end())
  18. event_flag = true;
  19. }
  20. }
  21. //服务器重启加载数据
  22. 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)
  23. {
  24. if (nullptr == a->m_area )
  25. return ;
  26. if (c->is_person())
  27. {
  28. EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ;
  29. check_event(a->m_area->m_event_person_count,ev,DT_NORMAL,a->m_area->id());
  30. check_event(a->m_area->m_event_person_show_count,ev,DT_SPECIAL,a->m_area->id());
  31. }
  32. else if (c->is_vehicle())
  33. {
  34. EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ;
  35. check_event(a->m_area->m_event_vehicle_count,ev,DT_NORMAL,a->m_area->id());
  36. check_event(a->m_area->m_event_vehicle_show_count,ev,DT_SPECIAL,a->m_area->id());
  37. }
  38. on_enter(a,c,ptr);
  39. }
  40. //增加计数,并进行判断
  41. void area_business_count_checker::on_enter(const std::shared_ptr<area_hover>&a,
  42. const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr)
  43. {
  44. if (nullptr == a->m_area )
  45. return ;
  46. if (c->is_person())
  47. {
  48. a->m_area->m_person_count ++ ;
  49. if(c->m_display)
  50. a->m_area->m_person_show_count ++ ;
  51. int pc=a->m_area->m_person_count.load();
  52. int pc_=a->m_area->m_person_show_count.load();
  53. int limit_val=a->m_area->m_limit_person_count;
  54. int aid=a->m_area->id();
  55. EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ;
  56. if(pc>limit_val){
  57. event_tool::instance()->handle_event(OT_AREA,ev,aid,limit_val,pc,a->m_area->m_event_person_count=true,DT_NORMAL);
  58. log_info("person_count_enter:%d,v_count:%d limit:%d",aid,pc,limit_val);
  59. }
  60. if(pc_>limit_val){
  61. event_tool::instance()->handle_event(OT_AREA,ev,aid,limit_val,pc_,a->m_area->m_event_person_show_count=true,DT_SPECIAL);
  62. log_info("person_count_enter_show:%d,v_count:%d limit:%d",aid,pc,limit_val);
  63. }
  64. }
  65. else if (c->is_vehicle())
  66. {
  67. a->m_area->m_vehicle_count ++ ;
  68. if(c->m_display)
  69. a->m_area->m_vehicle_show_count ++ ;
  70. int vc=a->m_area->m_vehicle_count.load();
  71. int vc_=a->m_area->m_vehicle_show_count.load();
  72. int limit_val=a->m_area->m_limit_vehicle_count;
  73. int aid=a->m_area->id();
  74. EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ;
  75. if(vc>limit_val){
  76. event_tool::instance()->handle_event(OT_AREA,ev,aid,limit_val,vc,a->m_area->m_event_vehicle_count=true,DT_NORMAL);
  77. log_info("vehicle_count_enter:%d,v_count:%d limit:%d",aid,vc,limit_val);
  78. }
  79. if(vc_>limit_val){
  80. event_tool::instance()->handle_event(OT_AREA,ev,aid,limit_val,vc_,a->m_area->m_event_vehicle_show_count=true,DT_SPECIAL);
  81. log_info("vehicle_count_enter_show:%d,v_count:%d limit:%d",aid,vc,limit_val);
  82. }
  83. }
  84. }
  85. void area_business_count_checker::on_hover(const std::shared_ptr<area_hover>&a,
  86. const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
  87. {
  88. }
  89. //减少计数
  90. void area_business_count_checker::on_leave(const std::shared_ptr<area_hover>&a,
  91. const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
  92. {
  93. if (nullptr == a->m_area )
  94. return ;
  95. if (c->is_person())
  96. {
  97. a->m_area->m_person_count -- ;
  98. if(c->m_display)
  99. a->m_area->m_person_show_count -- ;
  100. int pc=a->m_area->m_person_count.load();
  101. int pc_=a->m_area->m_person_show_count.load();
  102. int limit_val=a->m_area->m_limit_person_count;
  103. int aid=a->m_area->id();
  104. EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ;
  105. if(a->m_area->m_event_person_count&& pc <= limit_val){
  106. event_tool::instance()->handle_event(OT_AREA,ev,aid,limit_val,pc,a->m_area->m_event_person_count=false,DT_NORMAL);
  107. log_info("person_count_leave:%d,v_count:%d limit:%d",aid,pc,limit_val);
  108. }
  109. if(a->m_area->m_event_person_show_count&& pc_ <= limit_val){
  110. event_tool::instance()->handle_event(OT_AREA,ev,aid,limit_val,pc_,a->m_area->m_event_person_show_count=false,DT_SPECIAL);
  111. log_info("person_count_leave_show:%d,v_count:%d limit:%d",aid,pc,limit_val);
  112. }
  113. }
  114. else if (c->is_vehicle())
  115. {
  116. a->m_area->m_vehicle_count -- ;
  117. if(c->m_display)
  118. a->m_area->m_vehicle_show_count -- ;
  119. int pc=a->m_area->m_vehicle_count.load();
  120. int pc_=a->m_area->m_vehicle_show_count.load();
  121. int limit_val=a->m_area->m_limit_vehicle_count;
  122. int aid=a->m_area->id();
  123. EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ;
  124. if(a->m_area->m_event_vehicle_count&& pc <= limit_val){
  125. event_tool::instance()->handle_event(OT_AREA,ev,aid,limit_val,pc,a->m_area->m_event_vehicle_count=false,DT_NORMAL);
  126. log_info("vehicle_count_leave:%d,v_count:%d limit:%d",aid,pc,limit_val);
  127. }
  128. if(a->m_area->m_event_vehicle_show_count&& pc_ <= limit_val){
  129. event_tool::instance()->handle_event(OT_AREA,ev,aid,limit_val,pc_,a->m_area->m_event_vehicle_show_count=false,DT_SPECIAL);
  130. log_info("vehicle_count_leave_show:%d,v_count:%d limit:%d",aid,pc,limit_val);
  131. }
  132. }
  133. }