parkspace_db_manager.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. * @Description: 车位模块数据库管理类,提供接口实现特定的数据库操作
  3. * @Author: yct
  4. * @Date: 2020-07-19 09:44:17
  5. * @LastEditTime: 2020-07-21 16:22:12
  6. * @LastEditors: yct
  7. */
  8. #ifndef PARKSPACE_DB_MANAGER_HH
  9. #define PARKSPACE_DB_MANAGER_HH
  10. #include "../tool/singleton.h"
  11. #include "../error_code/error_code.h"
  12. #include "../communication/communication_message.h"
  13. #include "../message/parkspace_allocation_message.pb.h"
  14. #include "parkspace_parameter.pb.h"
  15. #include "database_controller.h"
  16. #include <atomic>
  17. class Parkspace_db_manager : public Singleton<Parkspace_db_manager>
  18. {
  19. // 子类必须把父类设定为友元函数,这样父类才能使用子类的私有构造函数。
  20. friend class Singleton<Parkspace_db_manager>;
  21. public:
  22. // 必须关闭拷贝构造和赋值构造,只能通过 get_instance 函数来进行操作唯一的实例。
  23. Parkspace_db_manager(const Parkspace_db_manager &) = delete;
  24. Parkspace_db_manager &operator=(const Parkspace_db_manager &) = delete;
  25. ~Parkspace_db_manager() = default;
  26. // 车位数据库管理初始化
  27. Error_manager Parkspace_db_manager_init(parkspace_proto::database_config config);
  28. // 车位数据库管理反初始化
  29. Error_manager Parkspace_db_manager_uninit();
  30. // 连接状态
  31. bool is_connected();
  32. // 初始化状态
  33. bool is_initialized();
  34. // ******** 数据库具体操作函数 *********
  35. // 从数据库获得所有车位信息,用于车位模块初始化
  36. Error_manager get_all_parkspace_info(message::Parkspace_allocation_status_msg &all_parkspace_info);
  37. // 更新数据库中所有车位信息
  38. Error_manager update_all_parkspace_info(message::Parkspace_allocation_status_msg all_parkspace_info);
  39. // 更新数据库中车位状态
  40. Error_manager update_parkspace_status(message::Parkspace_info parkspace_info);
  41. // 更新数据库车辆状态,车位信息中包含车辆信息用于匹配更新
  42. Error_manager update_vehicle_status(message::Parkspace_info parkspace_info, message::Vehicle_status &vehicle_status);
  43. // 插入车辆
  44. Error_manager insert_vehicle(message::Parkspace_info parkspace_info, message::Vehicle_status &vehicle_status);
  45. // 插入停车记录
  46. Error_manager insert_parking_record(message::Parkspace_info parkspace_info);
  47. // 更新停车记录,待计费系统加入后完善!!!
  48. Error_manager update_parking_record(message::Parkspace_info parkspace_info, int record_id);
  49. // 根据车位编号查询车位状态
  50. Error_manager query_parkspace(int parkspace_id, message::Parkspace_info &parkspace_info);
  51. // 查询车辆状态,暂时不使用
  52. Error_manager query_vehicle(std::string license, message::Vehicle_status &vehicle_status, int &park_record_id);
  53. // 查询停车记录
  54. Error_manager query_parking_record(message::Parkspace_info &parkspace_info, int &record_id);
  55. private:
  56. // 父类的构造函数必须保护,子类的构造函数必须私有。
  57. Parkspace_db_manager() = default;
  58. // 数据库操作单例句柄
  59. boost::shared_ptr<Database_controller> mp_db_controller;
  60. // 初始化状态
  61. std::atomic_bool mb_initialized;
  62. // 连接状态
  63. std::atomic_bool mb_connected;
  64. };
  65. #endif // !PARKSPACE_DB_MANAGER_HH