Browse Source

update

master
zhaohe 2 years ago
parent
commit
e2dc55b80c
  1. 4
      README.md
  2. 47
      src/db/db_service.cpp
  3. 11
      src/db/db_service.hpp
  4. 8
      src/db/user_behavior_des.cpp
  5. 24
      src/db/user_behavior_des.hpp
  6. 67
      src/main_control_service.cpp

4
README.md

@ -24,6 +24,8 @@
通过getState可以获得到log,小数 OK
数据库操作加锁 OK
--------------------------------
记录用户操作 (TODO)
添加U盘数据导出
@ -31,7 +33,7 @@
排液自动停止
水禁传感器测试
磁盘管理(磁盘容量不足时,弹出提示,且停止记录数据)
```

47
src/db/db_service.cpp

@ -191,7 +191,7 @@ void DBService::addUser(string uid, string passwd, int permission_level) {
logger->info("add user: {} {} {}", uid, passwd, permission_level);
usertable.insert(User{-1, uid, passwd, permission_level, true});
}
void DBService::delUser(int id) {
shared_ptr<db::User> DBService::delUser(int id) {
lock_guard<recursive_mutex> lock(lock_);
auto usertable = make_storage(USER_DB_STRUCT);
@ -203,18 +203,19 @@ void DBService::delUser(int id) {
ZCHECK(admin.size() == 1, "admin user not found");
if (admin[0].id == id) {
logger->error("can not delete admin user");
return;
return nullptr;
}
auto remove_user = usertable.get_all<User>(where(c(&User::id) == id));
if (remove_user.size() == 0) {
logger->error("remove user fail, user not found");
return;
return nullptr;
}
logger->info("delete user: {}:{}", id, remove_user[0].uid);
usertable.remove_all<User>(where(c(&User::id) == id));
return make_shared<User>(remove_user[0]);
}
void DBService::updateUserPermissionLevel(int id, int permission_level) {
shared_ptr<db::User> DBService::updateUserPermissionLevel(int id, int permission_level) {
lock_guard<recursive_mutex> lock(lock_);
auto usertable = make_storage(USER_DB_STRUCT);
@ -223,14 +224,15 @@ void DBService::updateUserPermissionLevel(int id, int permission_level) {
auto user = usertable.get_all<User>(where(c(&User::id) == id));
if (user.size() == 0) {
logger->error("update user permission level fail, user not found");
return;
return nullptr;
}
logger->info("update user permission level: {} {} -> {}", id, user[0].permission_level, permission_level);
user[0].permission_level = permission_level;
usertable.update(user[0]);
return make_shared<User>(user[0]);
}
void DBService::changePasswd(string uid, string passwd) {
shared_ptr<db::User> DBService::changePasswd(string uid, string passwd) {
lock_guard<recursive_mutex> lock(lock_);
auto usertable = make_storage(USER_DB_STRUCT);
@ -238,11 +240,28 @@ void DBService::changePasswd(string uid, string passwd) {
auto user = usertable.get_all<User>(where(c(&User::uid) == uid));
if (user.size() == 0) {
logger->error("change passwd fail, user not found");
return;
return nullptr;
}
logger->info("change passwd: {} {} -> {}", uid, user[0].passwd, passwd);
user[0].passwd = passwd;
usertable.update(user[0]);
return make_shared<User>(user[0]);
}
shared_ptr<db::User> DBService::updateUserUid(int id, string uid, string& olduid) {
lock_guard<recursive_mutex> lock(lock_);
auto usertable = make_storage(USER_DB_STRUCT);
usertable.sync_schema();
auto user = usertable.get_all<User>(where(c(&User::id) == id));
if (user.size() == 0) {
logger->error("change user uid fail, user not found");
return nullptr;
}
olduid = user[0].uid;
logger->info("change user uid: {} {} -> {}", id, user[0].uid, uid);
user[0].uid = uid;
usertable.update(user[0]);
return make_shared<User>(user[0]);
}
json DBService::getAllUserJson() {
@ -457,23 +476,30 @@ void DBService::addFormula(string formula_id, int stoped_gs, int continued_gs, i
addFormula(formula_id, to_string(stoped_gs), to_string(continued_gs), to_string(stoped_satur), to_string(continued_satur), to_string(stoped_humi),
to_string(continued_humi), to_string(injection_pump_speed));
}
void DBService::delFormula(int id) {
shared_ptr<db::Formula> DBService::delFormula(int id) {
lock_guard<recursive_mutex> lock(lock_);
// remove_all
auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT);
formulatable.sync_schema();
auto formula = formulatable.get_all<Formula>(where(c(&Formula::id) == id));
formulatable.remove_all<Formula>(where(c(&Formula::id) == id));
formulatable.sync_schema();
if (formula.size() == 0) {
return nullptr;
}
return make_shared<Formula>(formula[0]);
}
void DBService::updateFormula(int id, string column, string val) {
shared_ptr<db::Formula> DBService::updateFormula(int id, string column, string val) {
lock_guard<recursive_mutex> lock(lock_);
auto formulatable = make_storage(FORMULA_DB, FORMULA_DB_STRUCT);
formulatable.sync_schema();
auto formula = formulatable.get_all<Formula>(where(c(&Formula::id) == id));
if (formula.size() == 0) {
return;
return nullptr;
}
if (column == "formula_id") {
formula[0].formula_id = val;
@ -494,6 +520,7 @@ void DBService::updateFormula(int id, string column, string val) {
}
formulatable.update(formula[0]);
formulatable.sync_schema();
return make_shared<Formula>(formula[0]);
}
int DBService::getUserBehaviorRecordCount() {

11
src/db/db_service.hpp

@ -127,9 +127,10 @@ class DBService : public enable_shared_from_this<DBService> {
* @param permission_level ,0 3
*/
void addUser(string uid, string passwd, int permission_level);
void delUser(int id);
void updateUserPermissionLevel(int id, int permission_level);
void changePasswd(string uid, string passwd);
shared_ptr<db::User> delUser(int id);
shared_ptr<db::User> updateUserPermissionLevel(int id, int permission_level);
shared_ptr<db::User> changePasswd(string uid, string passwd);
shared_ptr<db::User> updateUserUid(int id, string uid, string& olduid);
public:
/*******************************************************************************
@ -152,8 +153,8 @@ class DBService : public enable_shared_from_this<DBService> {
string continued_humi, string injection_pump_speed);
void addFormula(string formula_id, int stoped_gs, int continued_gs, int stoped_satur, int continued_satur, int stoped_humi, int continued_humi,
int injection_pump_speed);
void delFormula(int id);
void updateFormula(int id, string column, string val);
shared_ptr<db::Formula> delFormula(int id);
shared_ptr<db::Formula> updateFormula(int id, string column, string val);
shared_ptr<db::Formula> getFormula(int id);

8
src/db/user_behavior_des.cpp

@ -20,6 +20,8 @@ string user_behavior_to_str(user_behavior_t behavior) {
return "更新用户权限";
case kbehavior_update_user_passwd:
return "更新用户密码";
case kbehavior_update_user_uid:
return "更新用户ID";
case kbehavior_set_setting_val:
return "设置参数";
case kbehavior_add_formula:
@ -36,8 +38,10 @@ string user_behavior_to_str(user_behavior_t behavior) {
return "执行配方";
case kbehavior_update_setting_val_on_disinfection:
return "消毒中更新参数";
case kbehavior_export_data:
return "导出数据";
case kbehavior_export_disinfection_data:
return "导出消毒数据";
case kbehavior_export_user_action_data:
return "导出用户操作数据";
default:
break;
}

24
src/db/user_behavior_des.hpp

@ -18,17 +18,19 @@ typedef enum {
kbehavior_logout = 1,
kbehavior_add_user = 2,
kbehavior_del_user = 3,
kbehavior_update_user_permission_level = 4,
kbehavior_update_user_passwd = 5,
kbehavior_set_setting_val = 6,
kbehavior_add_formula = 7,
kbehavior_del_formula = 8,
kbehavior_update_formula = 9,
kbehavior_do_disinfection = 10,
kbehavior_stop_disinfection = 11,
kbehavior_do_formula = 12,
kbehavior_update_setting_val_on_disinfection = 13,
kbehavior_export_data = 14,
kbehavior_update_user_uid = 5,
kbehavior_update_user_permission_level = 6,
kbehavior_update_user_passwd = 7,
kbehavior_set_setting_val = 8,
kbehavior_add_formula = 9,
kbehavior_del_formula = 10,
kbehavior_update_formula = 11,
kbehavior_do_disinfection = 12,
kbehavior_stop_disinfection = 13,
kbehavior_do_formula = 14,
kbehavior_update_setting_val_on_disinfection = 15,
kbehavior_export_disinfection_data = 16,
kbehavior_export_user_action_data = 17,
} user_behavior_t;
string user_behavior_to_str(user_behavior_t behavior);

67
src/main_control_service.cpp

@ -199,6 +199,7 @@ void MainControlService::processFrontEndMessage_userOperate(weak_ptr<WebSocket>
return;
}
m_deviceStateService->setLoginState(uid, m_dbService->getUser(uid)->permission_level, m_dbService->getUser(uid)->visible);
m_dbService->addUserBehaviorRecord(uid, kbehavior_login, "");
logger->info("user {} login success", uid);
}
@ -211,6 +212,7 @@ void MainControlService::processFrontEndMessage_userOperate(weak_ptr<WebSocket>
if (cmdstr == "unlogin") {
m_deviceStateService->unlogin();
logger->info("user unlogin success");
m_dbService->addUserBehaviorRecord(m_deviceStateService->getLoginUid(), kbehavior_logout, "");
return;
}
@ -232,7 +234,10 @@ void MainControlService::processFrontEndMessage_userOperate(weak_ptr<WebSocket>
receipt["ackcodeInfo"] = err::error_code_get_desc(err::kce, err::kpasswd_error, "");
return;
}
m_dbService->changePasswd(uid, newpasswd);
auto user = m_dbService->changePasswd(uid, newpasswd);
// kbehavior_update_user_passwd
m_dbService->addUserBehaviorRecord(m_deviceStateService->getLoginUid(), kbehavior_update_user_passwd, fmt::format("({})", uid));
return;
}
@ -241,19 +246,45 @@ void MainControlService::processFrontEndMessage_userOperate(weak_ptr<WebSocket>
string passwd = cmd["passwd"];
int permission_level = jsonGet<int>(cmd["permission_level"]);
m_dbService->addUser(uid, passwd, permission_level);
m_dbService->addUserBehaviorRecord(m_deviceStateService->getLoginUid(), kbehavior_add_user, fmt::format("({})", uid));
return;
}
if (cmdstr == "delUser") {
int id = jsonGet<int>(cmd["id"]);
m_dbService->delUser(id);
auto user = m_dbService->delUser(id);
if (!user) {
receipt["ackcode"] = err::error_code_get_get_ecode(err::kce, err::kuser_not_exist);
receipt["ackcodeInfo"] = err::error_code_get_desc(err::kce, err::kuser_not_exist, "");
return;
}
m_dbService->addUserBehaviorRecord(m_deviceStateService->getLoginUid(), kbehavior_del_user, fmt::format("({})", user->uid));
return;
}
if (cmdstr == "updateUserPermissionLevel") {
int id = jsonGet<int>(cmd["id"]);
int permission_level = jsonGet<int>(cmd["permission_level"]);
m_dbService->updateUserPermissionLevel(id, permission_level);
auto user = m_dbService->updateUserPermissionLevel(id, permission_level);
if (!user) {
receipt["ackcode"] = err::error_code_get_get_ecode(err::kce, err::kuser_not_exist);
receipt["ackcodeInfo"] = err::error_code_get_desc(err::kce, err::kuser_not_exist, "");
return;
}
m_dbService->addUserBehaviorRecord(m_deviceStateService->getLoginUid(), kbehavior_update_user_permission_level,
fmt::format("({},{})", user->uid, permission_level));
return;
}
if (cmdstr == "updateUserUid") {
int id = jsonGet<int>(cmd["id"]);
string uid = cmd["uid"];
string olduid;
auto user = m_dbService->updateUserUid(id, uid, olduid);
if (!user) {
receipt["ackcode"] = err::error_code_get_get_ecode(err::kce, err::kuser_not_exist);
receipt["ackcodeInfo"] = err::error_code_get_desc(err::kce, err::kuser_not_exist, "");
return;
}
m_dbService->addUserBehaviorRecord(m_deviceStateService->getLoginUid(), kbehavior_update_user_uid, fmt::format("({}->{})", olduid, uid));
}
if (cmdstr == "getAllUser") {
auto users = m_dbService->getAllUserJson();
receipt["dbval"] = users;
@ -334,6 +365,8 @@ void MainControlService::processFrontEndMessage_Disinfection(weak_ptr<WebSocket>
m_dbService->getSettingVal("continued_satur"), //
m_dbService->getSettingVal("stoped_humi"), //
m_dbService->getSettingVal("continued_humi"));
// kbehavior_do_disinfection
m_dbService->addUserBehaviorRecord(m_deviceStateService->getLoginUid(), kbehavior_do_disinfection, fmt::format("({})", jsonGet<int>(cmd["loglevel"])));
return;
}
if (cmdstr == "changeDisinfectionParameter") {
@ -349,6 +382,7 @@ void MainControlService::processFrontEndMessage_Disinfection(weak_ptr<WebSocket>
if (cmdstr == "stopDisinfection") {
m_disinfectionCtrlService->stopDisinfection();
m_dbService->addUserBehaviorRecord(m_deviceStateService->getLoginUid(), kbehavior_stop_disinfection, "");
return;
}
@ -436,12 +470,14 @@ void MainControlService::processFrontEndMessage_setting(weak_ptr<WebSocket> webS
string settingName = cmd["settingName"];
int settingVal = jsonGet<int>(cmd["settingVal"]);
bool suc = m_dbService->setSettingVal(settingName, settingVal);
if (!suc) {
receipt["ackcode"] = err::error_code_get_get_ecode(err::kce, err::kdb_operate_error);
receipt["ackcodeInfo"] = err::error_code_get_desc(err::kce, err::kdb_operate_error, "setSettingVal fail");
}
return;
}
m_dbService->addUserBehaviorRecord(m_deviceStateService->getLoginUid(), kbehavior_set_setting_val, fmt::format("({},{})", settingName, settingVal));
}
}
void MainControlService::processFrontEndMessage_processFormulaCmd(weak_ptr<WebSocket> webSocket, json& cmd, json& receipt) {
@ -466,6 +502,9 @@ void MainControlService::processFrontEndMessage_processFormulaCmd(weak_ptr<WebSo
atoi(formul->continued_satur.c_str()), //
atoi(formul->stoped_humi.c_str()), //
atoi(formul->continued_humi.c_str())); //
m_dbService->addUserBehaviorRecord(m_deviceStateService->getLoginUid(), kbehavior_do_formula, fmt::format("({})", formul->formula_id));
return;
}
if (cmdstr == "getAllFormula") {
@ -474,6 +513,7 @@ void MainControlService::processFrontEndMessage_processFormulaCmd(weak_ptr<WebSo
}
if (cmdstr == "addFormula") {
string formula_id = cmd["formula_id"];
m_dbService->addFormula(cmd["formula_id"], //
jsonGet<int>(cmd["stoped_gs"]), //
jsonGet<int>(cmd["continued_gs"]), //
@ -482,11 +522,16 @@ void MainControlService::processFrontEndMessage_processFormulaCmd(weak_ptr<WebSo
jsonGet<int>(cmd["stoped_humi"]), //
jsonGet<int>(cmd["continued_humi"]), //
jsonGet<int>(cmd["injection_pump_speed"]));
// kbehavior_add_formula
m_dbService->addUserBehaviorRecord(m_deviceStateService->getLoginUid(), kbehavior_add_formula, fmt::format("({})", formula_id));
return;
}
if (cmdstr == "delFormula") {
m_dbService->delFormula(jsonGet<int>(cmd["id"]));
auto formula = m_dbService->delFormula(jsonGet<int>(cmd["id"]));
if (formula) {
m_dbService->addUserBehaviorRecord(m_deviceStateService->getLoginUid(), kbehavior_del_formula, fmt::format("({})", formula->formula_id));
}
return;
}
@ -497,7 +542,11 @@ void MainControlService::processFrontEndMessage_processFormulaCmd(weak_ptr<WebSo
} else {
val_str = std::to_string(cmd["val"].get<int>());
}
m_dbService->updateFormula(jsonGet<int>(cmd["id"]), cmd["column"], val_str);
auto formula = m_dbService->updateFormula(jsonGet<int>(cmd["id"]), cmd["column"], val_str);
if (formula) {
m_dbService->addUserBehaviorRecord(m_deviceStateService->getLoginUid(), kbehavior_update_formula,
fmt::format("({},{},{})", formula->formula_id, cmd["column"], val_str));
}
return;
}
}
@ -521,16 +570,20 @@ void MainControlService::processFrontEndMessage_processBehaviorRecordCmd(weak_pt
m_dbService->addUserBehaviorRecord("admin", kbehavior_add_user, "(zhaohe)");
m_dbService->addUserBehaviorRecord("admin", kbehavior_del_user, "(zhaohe)");
m_dbService->addUserBehaviorRecord("admin", kbehavior_update_user_permission_level, "(zhaohe,3)");
// kbehavior_update_user_uid
m_dbService->addUserBehaviorRecord("admin", kbehavior_update_user_passwd, "()");
m_dbService->addUserBehaviorRecord("admin", kbehavior_set_setting_val, "(....)");
m_dbService->addUserBehaviorRecord("admin", kbehavior_add_formula, "(....)");
m_dbService->addUserBehaviorRecord("admin", kbehavior_del_formula, "(....)");
m_dbService->addUserBehaviorRecord("admin", kbehavior_update_formula, "(....)");
m_dbService->addUserBehaviorRecord("admin", kbehavior_do_disinfection, "(....)");
m_dbService->addUserBehaviorRecord("admin", kbehavior_stop_disinfection, "(....)");
m_dbService->addUserBehaviorRecord("admin", kbehavior_do_formula, "(....)");
m_dbService->addUserBehaviorRecord("admin", kbehavior_update_setting_val_on_disinfection, "(....)");
m_dbService->addUserBehaviorRecord("admin", kbehavior_export_data, "(....)");
m_dbService->addUserBehaviorRecord("admin", kbehavior_export_disinfection_data, "(....)");
m_dbService->addUserBehaviorRecord("admin", kbehavior_export_user_action_data, "(....)");
}
return;
}

Loading…
Cancel
Save