#include "event.h" #include "area.h" #include "card_base.h" #include "common_tool.h" #include "log.h" #include "area_business_count_checker.h" /* 判断当前区域a中的人数是否超过设定人数,超过后告警 区域内实时人数存储在area对象中,在当前类on_enter/on_leave中进行更新 整个井下的超员和某个区域的超员都使用这个代码 */ //服务器重启加载数据 void area_business_count_checker::on_load_his(const std::shared_ptr&a,const std::shared_ptr&c,std::shared_ptr&ptr) { if (nullptr == a->m_area ) return ; if (c->is_person() && !a->m_area->m_event_person_count) { EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ; auto ev_ptr_temp = event_list::instance()->get_event_area(a->m_area->id(),ev); if (ev_ptr_temp && !ev_ptr_temp->is_end()) a->m_area->m_event_person_count = true; } else if (c->is_vehicle() && !a->m_area->m_event_vehicle_count) { EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ; auto ev_ptr_temp = event_list::instance()->get_event_area(a->m_area->id(),ev); if (ev_ptr_temp && !ev_ptr_temp->is_end()) { a->m_area->m_event_vehicle_count = true; } } on_enter(a,c,ptr); } //增加计数,并进行判断 void area_business_count_checker::on_enter(const std::shared_ptr&a, const std::shared_ptr&c,std::shared_ptr&ptr) { if (nullptr == a->m_area )//|| !a->m_area->is_mine()) { return ; } if (c->is_person()) { a->m_area->m_person_count ++ ; if (!a->m_area->m_event_person_count && a->m_area->m_person_count > a->m_area->m_limit_person_count) { a->m_area->m_event_person_count = true; EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ; 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); log_info("area_business_count_checker::on_enter : Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d" ,ev,a->m_area->id(),a->m_area->m_limit_person_count,(int)a->m_area->m_person_count); } } else if (c->is_vehicle()) { a->m_area->m_vehicle_count ++ ; if (a->m_area->m_vehicle_count > a->m_area->m_limit_vehicle_count && !a->m_area->m_event_vehicle_count) { a->m_area->m_event_vehicle_count = true; EVENT_TYPE ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ; 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); log_info("area_business_count_checker::on_enter : Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d" ,ev,a->m_area->id(),a->m_area->m_limit_vehicle_count,(int)a->m_area->m_vehicle_count); } } } void area_business_count_checker::on_hover(const std::shared_ptr&a, const std::shared_ptr&c,std::shared_ptr ptr) { } //减少计数 void area_business_count_checker::on_leave(const std::shared_ptr&a, const std::shared_ptr&c,std::shared_ptr ptr) { if (nullptr == a->m_area ) { return ; } int limitVal = 0; int curVal = 0; bool tmp_event = false; EVENT_TYPE ev = EVENT_TYPE::ET_OVER_COUNT_PERSON; if (c->is_person()) { a->m_area->m_person_count -- ; limitVal = a->m_area->m_limit_person_count; curVal = a->m_area->m_person_count; tmp_event = a->m_area->m_event_person_count; ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_PERSON : EVENT_TYPE::ET_AREA_OVER_COUNT_PERSON ; if(tmp_event && curVal < limitVal) { a->m_area->m_event_person_count = false; log_info("area_business_count_checker::on_leave :Cancel Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d" ,ev,a->m_area->id(),limitVal,curVal); event_tool::instance()->handle_event(OT_AREA,ev,a->m_area->id(),limitVal,curVal,false); } } else if (c->is_vehicle()) { a->m_area->m_vehicle_count -- ; limitVal = a->m_area->m_limit_vehicle_count; curVal = a->m_area->m_vehicle_count; tmp_event = a->m_area->m_event_vehicle_count; ev = a->m_area->is_mine()?EVENT_TYPE::ET_OVER_COUNT_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ; if(tmp_event && curVal < limitVal) { a->m_area->m_event_vehicle_count = false; log_info("area_business_count_checker::on_leave :Cancel Event OVER_COUNT=%d AreaId=%d,Limit=%d,CurNum=%d" ,ev,a->m_area->id(),limitVal,curVal); event_tool::instance()->handle_event(OT_AREA,ev,a->m_area->id(),limitVal,curVal,false); } } }