// // Created by Administrator on 2019/3/5. // #include "forbid_staff_down_mine.h" #include "log.h" #include "tool_time.h" #include "db_api/CDBSingletonDefine.h" std::string forbid_staff_down_mine::m_updateTime = ""; void forbid_staff_down_mine::init_forbid_staff(int id /* = -1*/) { std::string sql = "select id,staff_id,start_time,end_time,status,oper_time,lastupdate from rt_person_forbid_down_mine "; sql += " where status = 1 and end_time > now() "; if (id != -1) { sql += " and id = " + std::to_string(id) + ";"; } else { sql += ";"; m_map.clear(); } std::string Error; YADB::CDBResultSet DBRes; sDBConnPool.Query(sql.c_str(),DBRes,Error); int nCount = DBRes.GetRecordCount( Error ); if (nCount < 1) { log_error("增加或修改失败,数据库中找不到: sql", sql.c_str()); return ; } forbid_staff_down_mine::instance()->update_forbid_data(DBRes,true); } //更新数据 void forbid_staff_down_mine::update_forbid_data(YADB::CDBResultSet & DBRes,bool bInsert) { std::string Error; while ( DBRes.GetNextRecod(Error) ) { int key = 0; DBRes.GetField("id", key, Error); unsigned int staff_id = 0; DBRes.GetField("staff_id", staff_id, Error); std::string start_time; DBRes.GetField("start_time", start_time, Error); std::string end_time; DBRes.GetField("end_time", end_time, Error); int state; DBRes.GetField("status", state, Error); std::string create_time; DBRes.GetField("oper_time", create_time, Error); std::string update_time; DBRes.GetField("lastupdate", update_time, Error); forbid_staff_down_mine::updatetime(create_time); forbid_staff_down_mine::updatetime(update_time); std::shared_ptr s = forbid_staff_down_mine::instance()->get(staff_id); if (s != nullptr) { if(!bInsert) { for (SForbidStaffInfo &info : s->forbidList) { if (info.db_id == key) //已有记录,修改完成 { info.start_time = tool_time::to_time(start_time); info.end_time = tool_time::to_time(end_time); info.state = state; log_info("Check Forbid_staff_down_mine DBID:%d Staff:%d State:%d Time:%s -> %s . " ,key,staff_id,state,start_time.c_str(),end_time.c_str()); continue; } } } } else { s = std::make_shared(); forbid_staff_down_mine::instance()->add(staff_id,s); } s->staff_id = staff_id; SForbidStaffInfo info ; info.staff_id = staff_id; info.db_id = key; info.start_time = tool_time::to_time(start_time); info.end_time = tool_time::to_time(end_time); info.state = state; log_info("Init Forbid_staff_down_mine DBID:%d Staff:%d State:%d Time:%s -> %s . " ,key,staff_id,state,start_time.c_str(),end_time.c_str()); s->forbidList.push_back(info); } } //重新加载数据更新时间> m_updateTime void forbid_staff_down_mine::on_load_data() { std::string sql = "select id,staff_id,start_time,end_time,status,oper_time,lastupdate from rt_person_forbid_down_mine"; sql += " where status = 1 and (oper_time > '" + m_updateTime + "' or lastupdate > '" + m_updateTime + "') ;"; std::string Error; YADB::CDBResultSet DBRes; sDBConnPool.Query(sql.c_str(),DBRes,Error); int nCount = DBRes.GetRecordCount( Error ); if (nCount < 1) { return ; } forbid_staff_down_mine::instance()->update_forbid_data(DBRes,false); } void forbid_staff_down_mine::del_forbid_staff(int staff_id) { forbid_staff_down_mine::instance()->remove(staff_id); } void forbid_staff_down_mine::del_forbid_data(int id,int staff_id) { auto s = forbid_staff_down_mine::instance()->get(staff_id); if (s != nullptr) { log_info(" remove Forbid Staff:%d Down mine.DBID=%d",s->staff_id,id); for(auto it = s->forbidList.begin(); it != s->forbidList.end() ; ++it) { SForbidStaffInfo & info = *it; if (info.db_id == id) { s->forbidList.erase(it); break; } } if(s->forbidList.size() == 0) { forbid_staff_down_mine::instance()->remove(staff_id); } } } //是否禁止状态 bool forbid_staff_down_mine::IsForbid(int staff_id,time_t cur_time) { auto flist = m_map; auto it = flist.find(staff_id); if (it != flist.end()) { for (auto &info : it->second->forbidList) { if (info.state == 1 && cur_time > info.start_time && cur_time < info.end_time) { return true; } } } return false; } void forbid_staff_down_mine::updatetime(const std::string & t) { if (t.length() > 0 && t > m_updateTime) { log_info("forbid_staff_down_mine::updatetime :LastTime: %s -> t:%s ",t.c_str(),m_updateTime.c_str()); m_updateTime = t; } }