#include "MineCardManager.h" #include "ya_setting.h" #include "common_tool.h" #include "mine.h" #include "event.h" #include "tool_time.h" CMineCardManager::CMineCardManager() { m_minecards = std::make_shared(); } std::shared_ptr CMineCardManager::GetMineCards() { return m_minecards; } bool CMineCardManager::Exist(SET_CARDID &list,uint64_t id) { return !(list.end() == list.find(id)); } bool CMineCardManager::Exist(SET_CARDID &list,int card_id,int card_type) { return Exist(list,tool_other::type_id_to_u64(card_type,card_id)); } /** * @brief 人员下井 * @param card 卡 **/ void CMineCardManager::OnPersonDown(std::shared_ptr card,bool bInit/* = false*/) { if (nullptr == card) { return ; } //设置卡的状态 card->m_is_attendance = EAttendanceState::MineDown; uint64_t key = tool_other::type_id_to_u64(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); if(!bInit) { //井下超员判断 this->OnPersonOvercrowdingWarning(); } } /** * @brief 人员升井 * @param card 卡 **/ void CMineCardManager::OnPersonUp(std::shared_ptr card) { if (nullptr == card) { return ; } card->m_is_attendance = EAttendanceState::MineUp; uint64_t key = tool_other::type_id_to_u64(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 人员超员警告 **/ void CMineCardManager::OnPersonOvercrowdingWarning() { 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 += tool_other::type_id_to_str(pitcard->m_type,pitcard->m_id); log += "&"; } } //打印日志 log_info("[lemon mp_card_list_down_person:]:%s",log.c_str()); event_tool::instance()->handle_event(0,EVENT_TYPE::ET_OVER_COUNT_PERSON,max_person,(double)m_minecards->m_down_person.size(),true); //this->StartEvent(EVENT_TYPE::ET_OVER_COUNT_PERSON,max_person,(int)m_minecards->m_down_person.size()); } } /** * @brief 人员井下超时 **/ void CMineCardManager::OnPersonInMineOverTime(int card_id,int card_type) { std::shared_ptr card = card_list::instance()->get(tool_other::type_id_to_u64(card_type, card_id)); if (nullptr == card) { return ; } std::shared_ptr mine = card->get_mine_tool(); if(nullptr == mine ) { return ; } int sec= tool_time::to_ms(std::chrono::system_clock::now()) - mine->get_work_time(); if (!mine->m_is_overtime && sec > (int)CYaSetting::m_sys_setting.over_time_person) { //人员超时 mine->m_is_overtime = true; mine->m_overtime = std::chrono::system_clock::now(); } else if (mine->m_is_overtime && sec < (int)CYaSetting::m_sys_setting.over_time_person) { mine->m_is_overtime = false; mine->m_overtime = std::chrono::system_clock::now(); } else { return ; } // 发送警告 event_tool::instance()->handle_event(0,EVENT_TYPE::ET_CARD_OVER_TIME_PERSON,0,0, mine->m_is_overtime); log_info("OnPersonInMineOverTime: send Event=ET_CARD_OVER_TIME_PERSON card=id,eventState=%d",card->m_id, mine->m_is_overtime); } /** * @brief 车下井 * @param card 卡 **/ void CMineCardManager::OnVehicleDown(std::shared_ptr card,bool bInit/* = false*/) { if (nullptr == card) { return ; } } /** * @brief 车升井 * @param card 卡 **/ void CMineCardManager::OnVehicleUp(std::shared_ptr card) { if (nullptr == card) { return ; } } /** * @brief 车辆超员警告 **/ void CMineCardManager::OnVehicleOvercrowdingWarning() { }