#ifndef MODULE_MGR_H #define MODULE_MGR_H /** * @brief 业务模块的管理类,包括: * 1、初始化(init:注册web回调函数,读数据库初始化事件列表) * 2、启动线程start:向web发送事件 * 3、结束线程stop * @author 戴月腾 * @date 2018-08-25 */ #include"module_web.h" #include"module_area.h" #include"module_call_help.h" #include"module_call.h" #include"module_over_speed_vehicle.h" class module_mgr: public singleton_base { private: friend class singleton_base; module_mgr() { } public: /** * @brief 注册web回调函数,读配置文件,启动向web发送线程 */ static void init(config_file& config, std::map& MsgFuncList) { module_web::instance()->init(config, MsgFuncList); module_call::instance()->init(config); } /** * @brief 启动线程start:向web发送事件 */ static void start() { module_over_speed_vehicle::instance()->init_vehicle_category_from_db(); init_attendance_from_db(); module_web::instance()->start(); module_call::instance()->start(); } /** * @brief 结束线程stop */ static void stop() { module_web::instance()->stop(); module_call::instance()->stop(); } static void do_status(STATUS_CARD st, uint32_t card_id, int32_t type) { auto card_ptr=card_list::instance()->get(card_list::to_id64(type, card_id)); if(!card_ptr) { log_error("卡不存在card_id=%d", card_id); return; } if(STATUS_HELP == st) { module_call_help::instance()->rev_from_card_help(card_ptr); } else if(STATUS_CALL == st) { module_call::instance()->rev_from_card_resp(card_ptr); } } private: static void init_attendance_from_db() { const char *sql = "select card_id, start_time, end_time from rt_att_staff;"; std::string Error; YADB::CDBResultSet DBRes; sDBConnPool.Query(sql,DBRes,Error); int nCount = DBRes.GetRecordCount( Error ); if (nCount > 0) { log_info( "init_attendance. The record count=%d\n", nCount ); while ( DBRes.GetNextRecod(Error) ) { std::string card_id; DBRes.GetField( "card_id",card_id, Error ); std::string end_time; DBRes.GetField( "end_time",end_time, Error ); if(end_time.empty()) { uint32_t id = tool_other::id64_to_id(card_id); int32_t type = tool_other::id64_to_type(card_id); auto card_ptr = card_list::instance()->get(card_list::to_id64(type, id)); if(card_ptr) { std::string start_time; DBRes.GetField( "start_time",start_time, Error ); auto site_area_ptr = card_ptr->get_site_area(); site_area_ptr->m_attendance_start_time = tool_time::to_time_ex(start_time); site_area_ptr->m_stat_attendance = AS_ATTENDANCE; //std_debug("%s", // tool_time::to_str_ex(tool_time::to_ms(site_area_ptr->m_attendance_start_time)).c_str()); } } } } } }; #endif // MODULE_MGR_H