#include "MineCardManager.h" #include "ya_setting.h" #include CMineCardManager::CMineCardManager() { m_minecards = std::make_shared(); } std::shared_ptr CMineCardManager::GetMineCards() { return m_minecards; } /** * @brief 获取事件ID **/ uint64_t CMineCardManager::GetMineEventId(int evType) { return event_list::to_list_id(static_cast(evType),OT_MINE,0,0); } bool CMineCardManager::Exist(SET_CARDID &list,uint64_t id) { if (list.find(id) == list.end()) { return false; } return true; } bool CMineCardManager::Exist(SET_CARDID &list,int card_id,int card_type) { return Exist(list,card_list::to_id64(card_type,card_id)); } /** * @brief 创建警告开始事件 * @param evType 警告类型 * @param limitVal 限制数据(阀门值) * @param curVal 当前数据 **/ void CMineCardManager::StartEvent(int evType,int limitVal,int curVal) { int oldState = EVENT_STATUS::ES_END; uint64_t evid = this->GetMineEventId(evType); auto ev_ptr = event_list::instance()->get(evid); if (nullptr != ev_ptr) { oldState = ev_ptr->m_status; } else { ev_ptr = event_list::instance()->create_event_mine(0,(EVENT_TYPE)evType); if (nullptr == ev_ptr) { //打印日志 log_error("CMineCardManager::StartEvent: Create Event Fail.evid=%ulld evType=%d,evState=ES_START ",evid,evType); return ; } ev_ptr->m_obj_id = "0"; event_list::instance()->add(ev_ptr->get_list_id(),ev_ptr); } ev_ptr->m_status = EVENT_STATUS::ES_START; ev_ptr->m_cur_value= curVal; ev_ptr->m_limit_value = limitVal; ev_ptr->m_is_display = false; ev_ptr->m_cur_time = std::chrono::system_clock::now();; if (oldState == EVENT_STATUS::ES_END) { event_list::instance()->save_event(ev_ptr); } if (evType < MAX_MINE_EVENT_NUM) { m_evlist[evType] = evid; } log_info("CMineCardManager::StartEvent: Create Success .id=%ulld-%ulld evType=%d,evState=ES_START ",evid,ev_ptr->get_list_id(),evType); } /** * @brief 取消警告事件 * @param evType 警告类型 * @param curVal 当前数据 **/ void CMineCardManager::CancelEvent(int evType,int curVal) { uint64_t evid = this->GetMineEventId(evType); auto ev_ptr = event_list::instance()->get(evid); if (nullptr == ev_ptr) { //打印日志 log_errno("CMineCardManager::CancelEvent: Not Find Event.id=%ulld evType=%d,evState=ES_END ",evid,evType); return ; } if (ev_ptr->m_status == EVENT_STATUS::ES_END) { return ; } ev_ptr->m_status = EVENT_STATUS::ES_END; ev_ptr->m_cur_value= curVal; ev_ptr->m_is_display = false; ev_ptr->m_cur_time = std::chrono::system_clock::now();; event_list::instance()->save_event(ev_ptr); if (evType < MAX_MINE_EVENT_NUM) { m_evlist[evType] = 0; } log_info("CMineCardManager::CancelEvent: Success .id=%ulld evType=%d,evState=ES_END ",evid,evType); } /** * @brief 人员下井 * @param card 卡 **/ void CMineCardManager::OnPersonDown(std::shared_ptr card) { if (nullptr == card) { return ; } //设置卡的状态 card->m_is_attendance = EAttendanceState::Down; uint64_t key = card_list::to_id64(card->m_id,card->m_type); if (this->Exist(m_minecards->m_down_person,key)) { return ; } //移除升井中的状态 m_minecards->m_up_person.erase(key); //加入到井下列表中 m_minecards->m_down_person.insert(key); int max_person = CYaSetting::m_sys_setting.over_count_person; //井下超员判断 if (max_person != 0 && (int)m_minecards->m_down_person.size() > max_person ) { std::string log = ""; for (uint64_t id : m_minecards->m_down_person) { std::shared_ptr pitcard = card_list::instance()->get(id); if (nullptr != pitcard) { log += card_list::to_id64_str(pitcard->m_type,pitcard->m_id); log += "&"; } } //打印日志 log_info("[lemon mp_card_list_down_person:]:%s",log.c_str()); this->StartEvent(EVENT_TYPE::ET_OVER_COUNT_PERSON,max_person,(int)m_minecards->m_down_person.size()); } } /** * @brief 人员升井 * @param card 卡 **/ void CMineCardManager::OnPersonUp(std::shared_ptr card) { if (nullptr == card) { return ; } card->m_is_attendance = EAttendanceState::Up; uint64_t key = card_list::to_id64(card->m_id,card->m_type); if (this->Exist(m_minecards->m_up_person,key)) { return ; } //移除井下列表 m_minecards->m_down_person.erase(key); //加入到升井列表中 m_minecards->m_up_person.insert(key); int max_person = CYaSetting::m_sys_setting.over_count_person; //井下超员判断--取消 if (max_person != 0 && (int)m_minecards->m_down_person.size() < max_person ) { this->CancelEvent(EVENT_TYPE::ET_OVER_COUNT_PERSON,(int)m_minecards->m_down_person.size()); } } /** * @brief 车下井 * @param card 卡 **/ void CMineCardManager::OnVehicleDown(std::shared_ptr card) { if (nullptr == card) { return ; } } /** * @brief 车升井 * @param card 卡 **/ void CMineCardManager::OnVehicleUp(std::shared_ptr card) { if (nullptr == card) { return ; } }