MineCardManager.cpp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. #include "MineCardManager.h"
  2. #include "ya_setting.h"
  3. #include <time.h>
  4. CMineCardManager::CMineCardManager()
  5. {
  6. m_minecards = std::make_shared<mine_card_info>();
  7. }
  8. std::shared_ptr<mine_card_info> CMineCardManager::GetMineCards()
  9. {
  10. return m_minecards;
  11. }
  12. /**
  13. * @brief 获取事件ID
  14. **/
  15. uint64_t CMineCardManager::GetMineEventId(int evType)
  16. {
  17. return event_list::to_list_id(static_cast<EVENT_TYPE>(evType),OT_MINE,0,0);
  18. }
  19. bool CMineCardManager::Exist(SET_CARDID &list,uint64_t id)
  20. {
  21. if (list.find(id) == list.end())
  22. {
  23. return false;
  24. }
  25. return true;
  26. }
  27. bool CMineCardManager::Exist(SET_CARDID &list,int card_id,int card_type)
  28. {
  29. return Exist(list,card_list::to_id64(card_type,card_id));
  30. }
  31. /**
  32. * @brief 创建警告开始事件
  33. * @param evType 警告类型
  34. * @param limitVal 限制数据(阀门值)
  35. * @param curVal 当前数据
  36. **/
  37. void CMineCardManager::StartEvent(int evType,int limitVal,int curVal)
  38. {
  39. int oldState = EVENT_STATUS::ES_END;
  40. uint64_t evid = this->GetMineEventId(evType);
  41. auto ev_ptr = event_list::instance()->get(evid);
  42. if (nullptr != ev_ptr)
  43. {
  44. oldState = ev_ptr->m_status;
  45. }
  46. else
  47. {
  48. ev_ptr = event_list::instance()->create_event_mine(0,(EVENT_TYPE)evType);
  49. if (nullptr == ev_ptr)
  50. {
  51. //打印日志
  52. log_error("CMineCardManager::StartEvent: Create Event Fail.evid=%ulld evType=%d,evState=ES_START ",evid,evType);
  53. return ;
  54. }
  55. ev_ptr->m_obj_id = "0";
  56. event_list::instance()->add(ev_ptr->get_list_id(),ev_ptr);
  57. }
  58. ev_ptr->m_status = EVENT_STATUS::ES_START;
  59. ev_ptr->m_cur_value= curVal;
  60. ev_ptr->m_limit_value = limitVal;
  61. ev_ptr->m_is_display = false;
  62. ev_ptr->m_cur_time = std::chrono::system_clock::now();;
  63. if (oldState == EVENT_STATUS::ES_END)
  64. {
  65. event_list::instance()->save_event(ev_ptr);
  66. }
  67. if (evType < MAX_MINE_EVENT_NUM)
  68. {
  69. m_evlist[evType] = evid;
  70. }
  71. log_info("CMineCardManager::StartEvent: Create Success .id=%ulld-%ulld evType=%d,evState=ES_START ",evid,ev_ptr->get_list_id(),evType);
  72. }
  73. /**
  74. * @brief 取消警告事件
  75. * @param evType 警告类型
  76. * @param curVal 当前数据
  77. **/
  78. void CMineCardManager::CancelEvent(int evType,int curVal)
  79. {
  80. uint64_t evid = this->GetMineEventId(evType);
  81. auto ev_ptr = event_list::instance()->get(evid);
  82. if (nullptr == ev_ptr)
  83. {
  84. //打印日志
  85. log_errno("CMineCardManager::CancelEvent: Not Find Event.id=%ulld evType=%d,evState=ES_END ",evid,evType);
  86. return ;
  87. }
  88. if (ev_ptr->m_status == EVENT_STATUS::ES_END)
  89. {
  90. return ;
  91. }
  92. ev_ptr->m_status = EVENT_STATUS::ES_END;
  93. ev_ptr->m_cur_value= curVal;
  94. ev_ptr->m_is_display = false;
  95. ev_ptr->m_cur_time = std::chrono::system_clock::now();;
  96. event_list::instance()->save_event(ev_ptr);
  97. if (evType < MAX_MINE_EVENT_NUM)
  98. {
  99. m_evlist[evType] = 0;
  100. }
  101. log_info("CMineCardManager::CancelEvent: Success .id=%ulld evType=%d,evState=ES_END ",evid,evType);
  102. }
  103. /**
  104. * @brief 人员下井
  105. * @param card 卡
  106. **/
  107. void CMineCardManager::OnPersonDown(std::shared_ptr<card> card)
  108. {
  109. if (nullptr == card)
  110. {
  111. return ;
  112. }
  113. //设置卡的状态
  114. card->m_is_attendance = EAttendanceState::Down;
  115. uint64_t key = card_list::to_id64(card->m_id,card->m_type);
  116. if (this->Exist(m_minecards->m_down_person,key))
  117. {
  118. return ;
  119. }
  120. //移除升井中的状态
  121. m_minecards->m_up_person.erase(key);
  122. //加入到井下列表中
  123. m_minecards->m_down_person.insert(key);
  124. int max_person = CYaSetting::m_sys_setting.over_count_person;
  125. //井下超员判断
  126. if (max_person != 0 && (int)m_minecards->m_down_person.size() > max_person )
  127. {
  128. std::string log = "";
  129. for (uint64_t id : m_minecards->m_down_person)
  130. {
  131. std::shared_ptr<card_location_base> pitcard = card_list::instance()->get(id);
  132. if (nullptr != pitcard)
  133. {
  134. log += card_list::to_id64_str(pitcard->m_type,pitcard->m_id);
  135. log += "&";
  136. }
  137. }
  138. //打印日志
  139. log_info("[lemon mp_card_list_down_person:]:%s",log.c_str());
  140. this->StartEvent(EVENT_TYPE::ET_OVER_COUNT_PERSON,max_person,(int)m_minecards->m_down_person.size());
  141. }
  142. }
  143. /**
  144. * @brief 人员升井
  145. * @param card 卡
  146. **/
  147. void CMineCardManager::OnPersonUp(std::shared_ptr<card> card)
  148. {
  149. if (nullptr == card)
  150. {
  151. return ;
  152. }
  153. card->m_is_attendance = EAttendanceState::Up;
  154. uint64_t key = card_list::to_id64(card->m_id,card->m_type);
  155. if (this->Exist(m_minecards->m_up_person,key))
  156. {
  157. return ;
  158. }
  159. //移除井下列表
  160. m_minecards->m_down_person.erase(key);
  161. //加入到升井列表中
  162. m_minecards->m_up_person.insert(key);
  163. int max_person = CYaSetting::m_sys_setting.over_count_person;
  164. //井下超员判断--取消
  165. if (max_person != 0 && (int)m_minecards->m_down_person.size() < max_person )
  166. {
  167. this->CancelEvent(EVENT_TYPE::ET_OVER_COUNT_PERSON,(int)m_minecards->m_down_person.size());
  168. }
  169. }
  170. /**
  171. * @brief 车下井
  172. * @param card 卡
  173. **/
  174. void CMineCardManager::OnVehicleDown(std::shared_ptr<card> card)
  175. {
  176. if (nullptr == card)
  177. {
  178. return ;
  179. }
  180. }
  181. /**
  182. * @brief 车升井
  183. * @param card 卡
  184. **/
  185. void CMineCardManager::OnVehicleUp(std::shared_ptr<card> card)
  186. {
  187. if (nullptr == card)
  188. {
  189. return ;
  190. }
  191. }