module_over_speed_vehicle.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #include "module_over_speed_vehicle.h"
  2. #include "event.h"
  3. #include"log.h"
  4. #include"db/db_api/CDBSingletonDefine.h"
  5. #include"mine.h"
  6. void module_over_speed_vehicle::on_hover(std::shared_ptr<card_location_base> card_ptr, int vehicle_category_id)
  7. {
  8. auto mine_tool_ptr = card_ptr->get_mine_tool();
  9. if(is_over_speed(vehicle_category_id, card_ptr->m_speed))//超速
  10. {
  11. mine_tool_ptr->m_over_speed_count++;
  12. }
  13. else//速度正常
  14. {
  15. mine_tool_ptr->m_normal_speed_count++;
  16. }
  17. //确定超速
  18. if(SPEED_COUNT_LIMIT <= mine_tool_ptr->m_over_speed_count)
  19. {
  20. mine_tool_ptr->m_over_speed_count=SPEED_COUNT_LIMIT;
  21. auto ev_ptr = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ET_CARD_OVER_SPEED);
  22. if(ev_ptr)
  23. {
  24. event_list::copy_event(card_ptr, ev_ptr);
  25. ev_ptr->m_limit_value=limit_speed(vehicle_category_id);
  26. ev_ptr->m_cur_value=card_ptr->m_speed;
  27. }
  28. else//从没有告警状态转化为告警状态
  29. {
  30. mine_tool_ptr->m_normal_speed_count=0;
  31. auto ev_ptr = event_list::create_event_card(card_ptr->m_id, card_ptr->m_type, ET_CARD_OVER_SPEED);
  32. event_list::copy_event(card_ptr, ev_ptr);
  33. ev_ptr->m_limit_value = limit_speed(vehicle_category_id);
  34. ev_ptr->m_cur_value = card_ptr->m_speed;
  35. //保存到数据库
  36. event_list::save_event(ev_ptr);
  37. event_list::instance()->add(ev_ptr->get_list_id(),ev_ptr);
  38. log_info("车卡矿井内超速开始:卡id=%d,卡type=%d,卡速=%f,卡category_id=%d,卡速门限=%f",
  39. card_ptr->m_id, card_ptr->m_type,card_ptr->m_speed,vehicle_category_id,
  40. limit_speed(vehicle_category_id));
  41. }
  42. }
  43. //确定速度正常
  44. if(SPEED_COUNT_LIMIT <= mine_tool_ptr->m_normal_speed_count)
  45. {
  46. mine_tool_ptr->m_normal_speed_count=SPEED_COUNT_LIMIT;
  47. auto ev_ptr = event_list::instance()->get_event_card(card_ptr->m_id, card_ptr->m_type, ET_CARD_OVER_SPEED);
  48. if(ev_ptr && !ev_ptr->is_end())
  49. {
  50. mine_tool_ptr->m_over_speed_count=0;
  51. event_list::copy_event(card_ptr, ev_ptr);
  52. ev_ptr->m_limit_value = limit_speed(vehicle_category_id);
  53. ev_ptr->m_cur_value = card_ptr->m_speed;
  54. ev_ptr->m_status = ES_END;
  55. //保存到数据库
  56. event_list::save_event(ev_ptr);
  57. log_info("车卡矿井内超速结束:卡id=%d,卡type=%d,卡速=%f,卡category_id=%d,卡速门限=%f",
  58. card_ptr->m_id, card_ptr->m_type,card_ptr->m_speed,vehicle_category_id,
  59. limit_speed(vehicle_category_id));
  60. }
  61. }
  62. }
  63. void module_over_speed_vehicle::init_vehicle_category_from_db()
  64. {
  65. const char *sql = "SELECT vehicle_category_id, over_speed FROM dat_vehicle_category;";
  66. std::string Error;
  67. YADB::CDBResultSet DBRes;
  68. sDBConnPool.Query(sql,DBRes,Error);
  69. if(!Error.empty())
  70. log_error("init_vehicle_category Error,%s",Error.c_str());
  71. int64_t nCount = DBRes.GetRecordCount( Error );
  72. if (nCount < 1)
  73. {
  74. log_error("错误,init_vehicle_category. The record count=%ld\n", nCount );
  75. return;
  76. }
  77. log_info( "init_vehicle_category. The record count=%ld\n", nCount );
  78. _vehicle_category_map.clear();
  79. while ( DBRes.GetNextRecod(Error) )
  80. {
  81. int vehicle_category_id = 0;
  82. DBRes.GetField( "vehicle_category_id",vehicle_category_id, Error );
  83. double over_speed = 0;
  84. DBRes.GetField( "over_speed",over_speed, Error );
  85. _vehicle_category_map.insert({vehicle_category_id,over_speed});
  86. }
  87. for(const auto &p : _vehicle_category_map)
  88. std_debug("dat_vehicle_category:category_id:%d--over_speed:%.2f",p.first,p.second);
  89. }