// // Created by Krad on 2021/11/11. // #include "User.h" #include "db/SQLHelper.h" #include #include User* User::currentUser = nullptr; User::User(QObject *parent) : QObject(parent) { } User::~User() { } bool User::submitChange() { static QString updateSQL = "update Account %1 %2"; QString setString = ""; QMap params; #define USER_READONLY_PROPERTY(name) #define USER_PROPERTY(name)\ USER_READONLY_PROPERTY(name)\ if (mf_##name){\ setString += QString((!setString.isEmpty())?", ":"") + QString(QString("set %1=%2").arg(#name, ":" #name));\ params[":" #name] = m_##name;\ } USER_PROPERTIES_MACRO() #undef USER_PROPERTY #undef USER_READONLY_PROPERTY QString whereString = " where "+getIndexName()+" = '"+getIndexValue()+"'"; bool result = 1 == SQLHelper::ExecuteNoQuery(updateSQL.arg(setString,whereString),¶ms); if (result) { #define USER_READONLY_PROPERTY(name) #define USER_PROPERTY(name) USER_READONLY_PROPERTY(name) mf_##name = false; USER_PROPERTIES_MACRO() #undef USER_PROPERTY #undef USER_READONLY_PROPERTY } return result; } bool User::QueryUser(QString userID, QString Pwd) { QString sql = QString("select * from Account where UserCode=:userID and Password=:pwd"); QMap map; QMap params; params[":userID"] = userID; params[":pwd"] = Pwd; SQLHelper::QueryFirst(sql, map, ¶ms); if(!map.isEmpty()) { if (!currentUser) currentUser = new User; #define USER_READONLY_PROPERTY(name) currentUser->m_##name = map[#name].toString(); #define USER_PROPERTY(name) currentUser->mf_##name = false;\ USER_READONLY_PROPERTY(name) USER_PROPERTIES_MACRO() #undef USER_PROPERTY #undef USER_READONLY_PROPERTY currentUser->isAdminFlag = -1; 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 ; } return isAdminFlag; }