/* * @Description: 车位模块数据库管理类,提供接口实现特定的数据库操作 * @Author: yct * @Date: 2020-07-19 09:44:17 * @LastEditTime: 2020-07-21 16:22:12 * @LastEditors: yct */ #ifndef PARKSPACE_DB_MANAGER_HH #define PARKSPACE_DB_MANAGER_HH #include "../tool/singleton.h" #include "../error_code/error_code.h" #include "../communication/communication_message.h" #include "../message/parkspace_allocation_message.pb.h" #include "parkspace_parameter.pb.h" #include "database_controller.h" #include class Parkspace_db_manager : public Singleton { // 子类必须把父类设定为友元函数,这样父类才能使用子类的私有构造函数。 friend class Singleton; public: // 必须关闭拷贝构造和赋值构造,只能通过 get_instance 函数来进行操作唯一的实例。 Parkspace_db_manager(const Parkspace_db_manager &) = delete; Parkspace_db_manager &operator=(const Parkspace_db_manager &) = delete; ~Parkspace_db_manager() = default; // 车位数据库管理初始化 Error_manager Parkspace_db_manager_init(parkspace_proto::database_config config); // 车位数据库管理反初始化 Error_manager Parkspace_db_manager_uninit(); // 连接状态 bool is_connected(); // 初始化状态 bool is_initialized(); // ******** 数据库具体操作函数 ********* // 从数据库获得所有车位信息,用于车位模块初始化 Error_manager get_all_parkspace_info(message::Parkspace_allocation_status_msg &all_parkspace_info); // 更新数据库中所有车位信息 Error_manager update_all_parkspace_info(message::Parkspace_allocation_status_msg all_parkspace_info); // 更新数据库中车位状态 Error_manager update_parkspace_status(message::Parkspace_info parkspace_info); // 更新数据库车辆状态,车位信息中包含车辆信息用于匹配更新 Error_manager update_vehicle_status(message::Parkspace_info parkspace_info, message::Vehicle_status &vehicle_status); // 插入车辆 Error_manager insert_vehicle(message::Parkspace_info parkspace_info, message::Vehicle_status &vehicle_status); // 插入停车记录 Error_manager insert_parking_record(message::Parkspace_info parkspace_info); // 更新停车记录,待计费系统加入后完善!!! Error_manager update_parking_record(message::Parkspace_info parkspace_info, int record_id); // 根据车位编号查询车位状态 Error_manager query_parkspace(int parkspace_id, message::Parkspace_info &parkspace_info); // 查询车辆状态,暂时不使用 Error_manager query_vehicle(std::string license, message::Vehicle_status &vehicle_status, int &park_record_id); // 查询停车记录 Error_manager query_parking_record(message::Parkspace_info &parkspace_info, int &record_id); private: // 父类的构造函数必须保护,子类的构造函数必须私有。 Parkspace_db_manager() = default; // 数据库操作单例句柄 boost::shared_ptr mp_db_controller; // 初始化状态 std::atomic_bool mb_initialized; // 连接状态 std::atomic_bool mb_connected; }; #endif // !PARKSPACE_DB_MANAGER_HH