#include #include "db/db_tool.h" #include "module_screen.h" #include "log.h" #include "common.h" #include /* * @brief 更新大屏内显示所需人员id,区域id,部门id,电池电量状态等数据 * @param 卡数据 * @return 无 * @note * @warning * @bug * * */ void module_screen::do_write(const std::map card_pos_list) { std::string p_stat = ""; char item[200] = { 0 }; for(auto it : card_pos_list) { memset(item, 0, 200*sizeof(char)); // 电量状态0表示正常,1表示电量不足, snprintf(item, 200, "%d,%d,%d,%d,%d,%d;",it.second.ID, it.second.area_id, it.second.dept_id, (it.second.battery_stat), it.second.biz_stat, it.second.level_id); p_stat += std::string(item); } if(p_stat == ""){ return; } log_info("[screen] stat info=%s", p_stat.c_str()); char sql[4096] = {0}; snprintf(sql, 4096, "update rt_screen_msg set person_stat='%s' where id=1;", p_stat.c_str()); log_info("[screen] sql=%s", sql); db_tool::PushAsync(sql); } void module_screen::start() { m_exited = false; m_thread.reset(new std::thread(std::bind(&module_screen::run, this))); m_thread->detach(); } void module_screen::run() { while(!m_exited){ do_wellhead(); std::this_thread::sleep_for(std::chrono::seconds(1)); } } /* * @brief 更新井口人员数据,并更新电量低人员:小于等于30% * @param 无 * @return 无 * @note * @warning * @bug * * */ void module_screen::do_wellhead() { std::lock_guard lg(m_mtx); if(m_card_list.size() <= 0){ return; } std::string sid = ""; char buf[12] = {0}; for(auto it = m_card_list.begin(); it != m_card_list.end();){ if(time(NULL) - it->second.m_recv_time < 120){ snprintf(buf, 12, "%ld,%d;", it->first, it->second.m_battery); sid += std::string(buf); it++; }else{ m_card_list.erase(it++); } } char sql[4096] = {0}; snprintf(sql, 4096, "update rt_screen_msg set wellhead_stat='%s' where id=1;", sid.c_str()); log_info("[screen] sql=%s", sql); db_tool::PushAsync(sql); }