From aed07807a66c03b591dbb83ef08adb457f27e6f5 Mon Sep 17 00:00:00 2001 From: Krad Date: Fri, 10 Dec 2021 10:16:41 +0800 Subject: [PATCH] New method for User --- src/models/User.cpp | 107 +++++++++++++++++++++++++++++++++++++++++--- src/models/User.h | 7 ++- 2 files changed, 107 insertions(+), 7 deletions(-) diff --git a/src/models/User.cpp b/src/models/User.cpp index 4eb66d3..75721a9 100644 --- a/src/models/User.cpp +++ b/src/models/User.cpp @@ -5,6 +5,7 @@ #include "User.h" #include "db/SQLHelper.h" #include +#include #include User* User::currentUser = nullptr; @@ -66,15 +67,109 @@ bool User::QueryUser(QString userID, QString Pwd) { return false; } + +bool User::existsUser(QString userCode) { + QString sql = QString("select * from Account where UserCode=:userID"); + QMap map; + QMap params; + params[":userID"] = userCode; + SQLHelper::QueryFirst(sql, map, ¶ms); + return !map.isEmpty(); +} + +bool User::getUser(QString userUID, User& user) { + QString sql = QString("select * from Account where UserID=:userUID"); + QMap map; + QMap params; + params[":userUID"] = userUID; + SQLHelper::QueryFirst(sql, map, ¶ms); + if(!map.isEmpty()) + { +#define USER_READONLY_PROPERTY(name) user.m_##name = map[#name].toString(); +#define USER_PROPERTY(name) user.mf_##name = false;\ + USER_READONLY_PROPERTY(name) + USER_PROPERTIES_MACRO() +#undef USER_PROPERTY +#undef USER_READONLY_PROPERTY + return true; + } + return false; +} + bool User::isAdmin() { if (isAdminFlag<0) { - QString sql = QString("select RoleName from Role where RoleID=:RoleID"); - QMap map; - QMap params; - params[":RoleID"] = this->m_RoleID; - SQLHelper::QueryFirst(sql, map, ¶ms); - isAdminFlag = map["RoleName"].toString() == "admin"?1:0 ; + auto RoleName = getRoleName(this->m_RoleID); + isAdminFlag = RoleName == "admin"?1:0 ; } return isAdminFlag; } + +static bool LOAD_ALL_ROLE = false; +static QMap roleCache; + +QString User::getRoleName(QString RoleID) { + if (roleCache.contains(RoleID)) return roleCache[RoleID]; + QString sql = QString("select RoleName from Role where RoleID=:RoleID"); + QMap map; + QMap params; + params[":RoleID"] = RoleID; + SQLHelper::QueryFirst(sql, map, ¶ms); + roleCache[RoleID] = map["RoleName"].toString(); + return map["RoleName"].toString(); +} + +QString User::getRoleID(QString RoleName) { + if (roleCache.values().contains(RoleName)) { + int index = roleCache.values().indexOf(RoleName); + return roleCache.keys()[index]; + } + QString sql = QString("select RoleID from Role where RoleName=:RoleName"); + QMap map; + QMap params; + params[":RoleName"] = RoleName; + SQLHelper::QueryFirst(sql, map, ¶ms); + roleCache[map["RoleID"].toString()] = RoleName; + return map["RoleID"].toString(); +} + +QStringList User::getAllRoleName() { + if (!LOAD_ALL_ROLE) + { + auto table = SQLHelper::getTable("Role"); + table->select(); + for (int i = 0; i < table->rowCount(); i++) + { + + roleCache[table->data(table->index(i, 0)).toString()] = + table->data(table->index(i,1)).toString(); + qDebug()<data(table->index(i, 0)).toString()<<", " + <data(table->index(i,1)).toString(); + } + } + return roleCache.values(); +} + +bool User::insertUser(QString UserCode, User &user) { + user.m_UserID = QUuid::createUuid().toString(); + user.m_UserCode = UserCode; + static QString updateSQL = "insert into Account (%1) values (%2)"; + QString namesString = ""; + QString valuesString = ""; + QMap params; + #define USER_READONLY_PROPERTY(name)\ + namesString += QString((!namesString.isEmpty())?", %1":"%1").arg(#name);\ + valuesString += QString((!valuesString.isEmpty())?", :%1":":%1").arg(#name);\ + params[":" #name] = user.m_##name; + #define USER_PROPERTY(name)\ + USER_READONLY_PROPERTY(name) + USER_PROPERTIES_MACRO() +#undef USER_PROPERTY +#undef USER_READONLY_PROPERTY + bool result = 1 == SQLHelper::ExecuteNoQuery(updateSQL.arg(namesString,valuesString),¶ms); + return result; +} + + + + diff --git a/src/models/User.h b/src/models/User.h index ab8a523..11ac48d 100644 --- a/src/models/User.h +++ b/src/models/User.h @@ -21,6 +21,7 @@ class User:public QObject { Q_OBJECT public: static bool QueryUser(QString userID, QString Pwd); + static bool existsUser(QString userCode); static QString getEncryptedPassword(const QString& password) { QByteArray bytePwd = password.toLatin1(); @@ -30,6 +31,8 @@ public: static User* Current(){ return currentUser; } + static bool getUser(QString userUID,User& user); + static bool insertUser(QString UserCode,User& user); explicit User(QObject *parent=nullptr); ~User(); QString getIndexName(){ @@ -60,9 +63,11 @@ public: } bool submitChange(); bool isAdmin(); + static QString getRoleName(QString RoleID); + static QString getRoleID(QString RoleName); + static QStringList getAllRoleName(); private: static User* currentUser; - // add properties store and modify flag #define USER_READONLY_PROPERTY(name) QString m_##name; #define USER_PROPERTY(name)\