123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #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<area_hover>&a,const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&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<area_hover>&a,
- const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data>&ptr)
- {
- if (nullptr == a->m_area )//|| !a->m_area->is_mine())
- {
- return ;
- }
- if (c->is_person())
- {
- a->m_area->m_person_count ++ ;
- //printf("Person=%d On Enter Aread=%d! CurPersonCount=%d,LimitCount=%d, IsEvent=%d \n"
- // ,c->m_id,a->m_area->m_id, (int)a->m_area->m_person_count , a->m_area->m_limit_person_count,a->m_area->m_event_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 ++ ;
- printf("Vehicle=%d On Enter Aread=%d! CurVehicleCount=%d,LimitCount=%d, IsEvent=%d \n"
- ,c->m_id,a->m_area->m_id, (int)a->m_area->m_vehicle_count , a->m_area->m_limit_vehicle_count,a->m_area->m_event_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_VEHICLE : EVENT_TYPE::ET_AREA_OVER_COUNT_VEHICLE ;
- 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<area_hover>&a,
- const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> ptr)
- {
- }
- //减少计数
- void area_business_count_checker::on_leave(const std::shared_ptr<area_hover>&a,
- const std::shared_ptr<card_location_base>&c,std::shared_ptr<business_data> 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);
- }
- }
- }
|