MineCardManager.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #include "MineCardManager.h"
  2. #include "ya_setting.h"
  3. #include "common_tool.h"
  4. #include "mine.h"
  5. #include "event.h"
  6. #include "tool_time.h"
  7. CMineCardManager::CMineCardManager()
  8. {
  9. m_minecards = std::make_shared<mine_card_info>();
  10. }
  11. std::shared_ptr<mine_card_info> CMineCardManager::GetMineCards()
  12. {
  13. return m_minecards;
  14. }
  15. bool CMineCardManager::Exist(SET_CARDID &list,uint64_t id)
  16. {
  17. return !(list.end() == list.find(id));
  18. }
  19. bool CMineCardManager::Exist(SET_CARDID &list,int card_id,int card_type)
  20. {
  21. return Exist(list,tool_other::type_id_to_u64(card_type,card_id));
  22. }
  23. /**
  24. * @brief 人员下井
  25. * @param card 卡
  26. **/
  27. void CMineCardManager::OnPersonDown(std::shared_ptr<card> card,bool bInit/* = false*/)
  28. {
  29. if (nullptr == card)
  30. {
  31. return ;
  32. }
  33. //设置卡的状态
  34. card->m_is_attendance = EAttendanceState::MineDown;
  35. uint64_t key = tool_other::type_id_to_u64(card->m_id,card->m_type);
  36. if (this->Exist(m_minecards->m_down_person,key))
  37. {
  38. return ;
  39. }
  40. //移除升井中的状态
  41. m_minecards->m_up_person.erase(key);
  42. //加入到井下列表中
  43. m_minecards->m_down_person.insert(key);
  44. if(!bInit)
  45. {
  46. //井下超员判断
  47. this->OnPersonOvercrowdingWarning();
  48. }
  49. }
  50. /**
  51. * @brief 人员升井
  52. * @param card 卡
  53. **/
  54. void CMineCardManager::OnPersonUp(std::shared_ptr<card> card)
  55. {
  56. if (nullptr == card)
  57. {
  58. return ;
  59. }
  60. card->m_is_attendance = EAttendanceState::MineUp;
  61. uint64_t key = tool_other::type_id_to_u64(card->m_id,card->m_type);
  62. if (this->Exist(m_minecards->m_up_person,key))
  63. {
  64. return ;
  65. }
  66. //移除井下列表
  67. m_minecards->m_down_person.erase(key);
  68. //加入到升井列表中
  69. m_minecards->m_up_person.insert(key);
  70. int max_person = CYaSetting::m_sys_setting.over_count_person;
  71. //井下超员判断--取消
  72. if (max_person != 0 && (int)m_minecards->m_down_person.size() < max_person )
  73. {
  74. this->CancelEvent(EVENT_TYPE::ET_OVER_COUNT_PERSON,(int)m_minecards->m_down_person.size());
  75. }
  76. }
  77. /**
  78. * @brief 人员超员警告
  79. **/
  80. void CMineCardManager::OnPersonOvercrowdingWarning()
  81. {
  82. int max_person = CYaSetting::m_sys_setting.over_count_person;
  83. //井下超员判断
  84. if (max_person != 0 && (int)m_minecards->m_down_person.size() > max_person )
  85. {
  86. std::string log = "";
  87. for (uint64_t id : m_minecards->m_down_person)
  88. {
  89. std::shared_ptr<card_location_base> pitcard = card_list::instance()->get(id);
  90. if (nullptr != pitcard)
  91. {
  92. log += tool_other::type_id_to_str(pitcard->m_type,pitcard->m_id);
  93. log += "&";
  94. }
  95. }
  96. //打印日志
  97. log_info("[lemon mp_card_list_down_person:]:%s",log.c_str());
  98. event_tool::instance()->handle_event(0,EVENT_TYPE::ET_OVER_COUNT_PERSON,max_person,(double)m_minecards->m_down_person.size(),true);
  99. //this->StartEvent(EVENT_TYPE::ET_OVER_COUNT_PERSON,max_person,(int)m_minecards->m_down_person.size());
  100. }
  101. }
  102. /**
  103. * @brief 人员井下超时
  104. **/
  105. void CMineCardManager::OnPersonInMineOverTime(int card_id,int card_type)
  106. {
  107. std::shared_ptr<card_location_base> card = card_list::instance()->get(tool_other::type_id_to_u64(card_type, card_id));
  108. if (nullptr == card)
  109. {
  110. return ;
  111. }
  112. std::shared_ptr<mine_tool> mine = card->get_mine_tool();
  113. if(nullptr == mine )
  114. {
  115. return ;
  116. }
  117. int sec= tool_time::to_ms(std::chrono::system_clock::now()) - mine->get_work_time();
  118. if (!mine->m_is_overtime && sec > (int)CYaSetting::m_sys_setting.over_time_person)
  119. {
  120. //人员超时
  121. mine->m_is_overtime = true;
  122. mine->m_overtime = std::chrono::system_clock::now();
  123. }
  124. else if (mine->m_is_overtime && sec < (int)CYaSetting::m_sys_setting.over_time_person)
  125. {
  126. mine->m_is_overtime = false;
  127. mine->m_overtime = std::chrono::system_clock::now();
  128. }
  129. else
  130. {
  131. return ;
  132. }
  133. // 发送警告
  134. event_tool::instance()->handle_event(0,EVENT_TYPE::ET_CARD_OVER_TIME_PERSON,0,0, mine->m_is_overtime);
  135. log_info("OnPersonInMineOverTime: send Event=ET_CARD_OVER_TIME_PERSON card=id,eventState=%d",card->m_id, mine->m_is_overtime);
  136. }
  137. /**
  138. * @brief 车下井
  139. * @param card 卡
  140. **/
  141. void CMineCardManager::OnVehicleDown(std::shared_ptr<card> card,bool bInit/* = false*/)
  142. {
  143. if (nullptr == card)
  144. {
  145. return ;
  146. }
  147. }
  148. /**
  149. * @brief 车升井
  150. * @param card 卡
  151. **/
  152. void CMineCardManager::OnVehicleUp(std::shared_ptr<card> card)
  153. {
  154. if (nullptr == card)
  155. {
  156. return ;
  157. }
  158. }
  159. /**
  160. * @brief 车辆超员警告
  161. **/
  162. void CMineCardManager::OnVehicleOvercrowdingWarning()
  163. {
  164. }