1
0

MineCardManager.cpp 4.6 KB

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