diff --git a/README.md b/README.md index bbd162e..a2086d8 100644 --- a/README.md +++ b/README.md @@ -20,14 +20,14 @@ 添加审计数据库接口 OK 添加审计 OK -添加U盘数据导出 OK -添加审计数据导出 OK -记录用户操作 (TODO) - -通过getState可以获得到log,小数 +通过getState可以获得到log,小数 OK +数据库操作加锁 OK -数据库操作加锁 +-------------------------------- +记录用户操作 (TODO) +添加U盘数据导出 +添加审计数据导出 排液自动停止 水禁传感器测试 diff --git a/src/db/db_service.cpp b/src/db/db_service.cpp index da475e9..c73f205 100644 --- a/src/db/db_service.cpp +++ b/src/db/db_service.cpp @@ -172,6 +172,8 @@ void DBService::init_formula_db() { } list> DBService::getAllUser() { + lock_guard lock(lock_); + list> users; auto usertable = make_storage(USER_DB_STRUCT); usertable.sync_schema(); @@ -182,12 +184,16 @@ list> DBService::getAllUser() { return users; } void DBService::addUser(string uid, string passwd, int permission_level) { + lock_guard lock(lock_); + auto usertable = make_storage(USER_DB_STRUCT); usertable.sync_schema(); logger->info("add user: {} {} {}", uid, passwd, permission_level); usertable.insert(User{-1, uid, passwd, permission_level, true}); } void DBService::delUser(int id) { + lock_guard lock(lock_); + auto usertable = make_storage(USER_DB_STRUCT); usertable.sync_schema(); /** @@ -209,6 +215,8 @@ void DBService::delUser(int id) { } void DBService::updateUserPermissionLevel(int id, int permission_level) { + lock_guard lock(lock_); + auto usertable = make_storage(USER_DB_STRUCT); usertable.sync_schema(); @@ -223,6 +231,8 @@ void DBService::updateUserPermissionLevel(int id, int permission_level) { } void DBService::changePasswd(string uid, string passwd) { + lock_guard lock(lock_); + auto usertable = make_storage(USER_DB_STRUCT); usertable.sync_schema(); auto user = usertable.get_all(where(c(&User::uid) == uid)); @@ -236,6 +246,8 @@ void DBService::changePasswd(string uid, string passwd) { } json DBService::getAllUserJson() { + lock_guard lock(lock_); + json j_users; auto usertable = make_storage(USER_DB_STRUCT); usertable.sync_schema(); @@ -253,6 +265,8 @@ json DBService::getAllUserJson() { } shared_ptr DBService::getUser(string uid) { + lock_guard lock(lock_); + auto usertable = make_storage(USER_DB_STRUCT); usertable.sync_schema(); auto user = usertable.get_all(where(c(&User::uid) == uid)); @@ -263,6 +277,8 @@ shared_ptr DBService::getUser(string uid) { } list> DBService::getAllSetting() { + lock_guard lock(lock_); + list> settings; auto settingtable = make_storage(SETTING_DB, SETTING_DB_STRUCT); settingtable.sync_schema(); @@ -273,6 +289,8 @@ list> DBService::getAllSetting() { return settings; } json DBService::getAllSettingJson() { + lock_guard lock(lock_); + json j_settings; auto settingtable = make_storage(SETTING_DB, SETTING_DB_STRUCT); settingtable.sync_schema(); @@ -293,6 +311,8 @@ json DBService::getAllSettingJson() { } bool DBService::isUserExist(string uid) { + lock_guard lock(lock_); + auto usertable = make_storage(USER_DB_STRUCT); usertable.sync_schema(); auto user = usertable.get_all(where(c(&User::uid) == uid)); @@ -302,6 +322,8 @@ bool DBService::isUserExist(string uid) { return true; } bool DBService::ispasswdCorrect(string uid, string passwd) { + lock_guard lock(lock_); + auto usertable = make_storage(USER_DB_STRUCT); usertable.sync_schema(); auto user = usertable.get_all(where(c(&User::uid) == uid)); @@ -315,6 +337,8 @@ bool DBService::ispasswdCorrect(string uid, string passwd) { } bool DBService::setSettingVal(int id, int val) { + lock_guard lock(lock_); + auto settingtable = make_storage(SETTING_DB, SETTING_DB_STRUCT); settingtable.sync_schema(); auto setting = settingtable.get_all(where(c(&Setting::id) == id)); @@ -329,6 +353,8 @@ bool DBService::setSettingVal(int id, int val) { return true; } bool DBService::setSettingVal(string setting_name, int val) { + lock_guard lock(lock_); + logger->info("set setting val: {} {}", setting_name, val); auto settingtable = make_storage(SETTING_DB, SETTING_DB_STRUCT); settingtable.sync_schema(); @@ -349,6 +375,8 @@ bool DBService::setSettingVal(string setting_name, int val) { } int DBService::getSettingVal(string name) { + lock_guard lock(lock_); + auto settingtable = make_storage(SETTING_DB, SETTING_DB_STRUCT); settingtable.sync_schema(); auto setting = settingtable.get_all(where(c(&Setting::name) == name)); @@ -359,6 +387,8 @@ int DBService::getSettingVal(string name) { } list> DBService::getAllFormula() { + lock_guard lock(lock_); + list> formulas; auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT); formulatable.sync_schema(); @@ -369,6 +399,8 @@ list> DBService::getAllFormula() { return formulas; } shared_ptr DBService::getFormula(int id) { + lock_guard lock(lock_); + auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT); formulatable.sync_schema(); auto formula = formulatable.get_all(where(c(&Formula::id) == id)); @@ -379,6 +411,8 @@ shared_ptr DBService::getFormula(int id) { } json DBService::getAllFormulaJson() { + lock_guard lock(lock_); + json j_formulas; auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT); formulatable.sync_schema(); @@ -400,6 +434,8 @@ json DBService::getAllFormulaJson() { } void DBService::addFormula(string formula_id, string stoped_gs, string continued_gs, string stoped_satur, string continued_satur, string stoped_humi, string continued_humi, string injection_pump_speed) { + lock_guard lock(lock_); + auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT); formulatable.sync_schema(); Formula f; @@ -422,6 +458,8 @@ void DBService::addFormula(string formula_id, int stoped_gs, int continued_gs, i to_string(continued_humi), to_string(injection_pump_speed)); } void DBService::delFormula(int id) { + lock_guard lock(lock_); + // remove_all auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT); formulatable.sync_schema(); @@ -429,6 +467,8 @@ void DBService::delFormula(int id) { formulatable.sync_schema(); } void DBService::updateFormula(int id, string column, string val) { + lock_guard lock(lock_); + auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT); formulatable.sync_schema(); auto formula = formulatable.get_all(where(c(&Formula::id) == id)); @@ -457,11 +497,15 @@ void DBService::updateFormula(int id, string column, string val) { } int DBService::getUserBehaviorRecordCount() { + lock_guard lock(lock_); + auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT); user_behavior_record_table.sync_schema(); return user_behavior_record_table.count(where(c(&UserBehaviorRecord::id) > 0)); } int DBService::getUserBehaviorRecordTheFirstId() { + lock_guard lock(lock_); + auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT); user_behavior_record_table.sync_schema(); auto all = user_behavior_record_table.get_all(order_by(&UserBehaviorRecord::id).asc()); @@ -472,6 +516,8 @@ int DBService::getUserBehaviorRecordTheFirstId() { } json DBService::getUserBehaviorRecordDescJson(int page, int page_size) { + lock_guard lock(lock_); + json j_user_behavior_records; auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT); @@ -520,6 +566,8 @@ static string getTime() { } void DBService::addUserBehaviorRecord(string uid, int behavior, string behaviorinfo) { + lock_guard lock(lock_); + auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT); user_behavior_record_table.sync_schema(); UserBehaviorRecord u; @@ -540,4 +588,7 @@ void DBService::addUserBehaviorRecord(string uid, int behavior, string behaviori } return; } -void DBService::cleanUserBehaviorRecord() { system(fmt::format("rm -rf {}", USER_BEHAVIOR_RECORD_DB).c_str()); } \ No newline at end of file +void DBService::cleanUserBehaviorRecord() { + lock_guard lock(lock_); + system(fmt::format("rm -rf {}", USER_BEHAVIOR_RECORD_DB).c_str()); +} \ No newline at end of file diff --git a/src/db/db_service.hpp b/src/db/db_service.hpp index f7bef52..3ba310b 100644 --- a/src/db/db_service.hpp +++ b/src/db/db_service.hpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -97,11 +98,11 @@ struct UserBehaviorRecord { string behaviorinfo; }; - } // namespace db using namespace db; class DBService : public enable_shared_from_this { ENABLE_LOGGER(DBService); + recursive_mutex lock_; public: DBService();