diff --git a/uappbase/bean/dbtype/user.hpp b/uappbase/bean/dbtype/user.hpp index b8bcac0..aac605d 100644 --- a/uappbase/bean/dbtype/user.hpp +++ b/uappbase/bean/dbtype/user.hpp @@ -8,7 +8,7 @@ namespace iflytop { typedef struct { uint32_t id; char name[MAX_USR_NAME_SIZE]; - char passwd[6]; + char passwd[6 + 1]; uint8_t role; bool effective; bool builtIn; diff --git a/ui/hand_acid_mainboard_ui.HMI b/ui/hand_acid_mainboard_ui.HMI index f29e675..08f8f1b 100644 Binary files a/ui/hand_acid_mainboard_ui.HMI and b/ui/hand_acid_mainboard_ui.HMI differ diff --git a/usrc/db/dao/acid_distrubt_record_dao.cpp b/usrc/db/dao/acid_distrubt_record_dao.cpp index 9ad31a0..511319d 100644 --- a/usrc/db/dao/acid_distrubt_record_dao.cpp +++ b/usrc/db/dao/acid_distrubt_record_dao.cpp @@ -19,7 +19,7 @@ using namespace iflytop; static zhdb_table_t* table; static bool module_inited; static acid_distrubt_record_table_t* acid_distrubt_record_table; -static zmutex lock(TABLE_NAME); +static zmutex lock(TABLE_NAME); /*********************************************************************************************************************** * FUNCTION * @@ -50,6 +50,24 @@ void AcidDistrubtRecordDao::init() { ZLOGI(TAG, "init success"); } + +bool AcidDistrubtRecordDao::isHasRecordRelevantThisUser(uint8_t userid) { + zlock_guard l(lock); + ZASSERT_INFO(module_inited, "%s not inited", TABLE_NAME); + + for (int i = 0; i < acid_distrubt_record_table->recordNum; i++) { + if (acid_distrubt_record_table->record[i].distrubtAcidUsrid == userid) { + return true; + } + + if(acid_distrubt_record_table->record[i].takeAcidUsrid == userid) { + return true; + } + + } + return false; +} + void AcidDistrubtRecordDao::addRecordSync(const acid_distrubt_record_t& record) { zlock_guard l(lock); ZASSERT_INFO(module_inited, "%s not inited", TABLE_NAME); @@ -60,7 +78,7 @@ void AcidDistrubtRecordDao::addRecordSync(const acid_distrubt_record_t& record) } int recordNum = acid_distrubt_record_table->recordNum; - + acid_distrubt_record_table->record[recordNum] = record; acid_distrubt_record_table->maxid++; acid_distrubt_record_table->recordNum++; @@ -73,7 +91,6 @@ void AcidDistrubtRecordDao::addRecordSync(const acid_distrubt_record_t& record) storgeItem(recordNum); } - acid_distrubt_record_table_t* AcidDistrubtRecordDao::getRecordTable() { zlock_guard l(lock); ZASSERT_INFO(module_inited, "%s not inited", TABLE_NAME); @@ -117,10 +134,12 @@ void AcidDistrubtRecordDao::clearRecord() { } bool AcidDistrubtRecordDao::isAlmostFull() { zlock_guard l(lock); - return acid_distrubt_record_table->recordNum >= ACID_DISTRUBT_ALMOST_FULL; } -bool AcidDistrubtRecordDao::isFull() { + return acid_distrubt_record_table->recordNum >= ACID_DISTRUBT_ALMOST_FULL; +} +bool AcidDistrubtRecordDao::isFull() { zlock_guard l(lock); - return acid_distrubt_record_table->recordNum >= ACID_DISTRUBT_RECORD_NUM; } + return acid_distrubt_record_table->recordNum >= ACID_DISTRUBT_RECORD_NUM; +} int AcidDistrubtRecordDao::getRecordNum() { zlock_guard l(lock); diff --git a/usrc/db/dao/acid_distrubt_record_dao.hpp b/usrc/db/dao/acid_distrubt_record_dao.hpp index 5a369d6..6617363 100644 --- a/usrc/db/dao/acid_distrubt_record_dao.hpp +++ b/usrc/db/dao/acid_distrubt_record_dao.hpp @@ -36,6 +36,8 @@ class AcidDistrubtRecordDao { static bool isFull(); static void clearRecord(); static int getRecordNum(); + + static bool isHasRecordRelevantThisUser(uint8_t userid); }; } // namespace iflytop \ No newline at end of file diff --git a/usrc/db/dao/acid_use_record_dao.cpp b/usrc/db/dao/acid_use_record_dao.cpp index 1cef3e2..5c0e28e 100644 --- a/usrc/db/dao/acid_use_record_dao.cpp +++ b/usrc/db/dao/acid_use_record_dao.cpp @@ -51,6 +51,19 @@ void AcidUseRecordDao::init() { ZLOGI(TAG, "init success"); } + +bool AcidUseRecordDao::isHasRecordRelevantThisUser(uint8_t userid) { + zlock_guard l(lock); + ZASSERT_INFO(module_inited, "acid use record dao not inited"); + + for (int i = 0; i < m_table->recordNum; i++) { + if (m_table->record[i].usrid == userid) { + return true; + } + } + return false; +} + void AcidUseRecordDao::addRecord(const acid_use_record_t& record) { zlock_guard l(lock); ZASSERT_INFO(module_inited, "acid use record dao not inited"); diff --git a/usrc/db/dao/acid_use_record_dao.hpp b/usrc/db/dao/acid_use_record_dao.hpp index 9dc42d3..50a348b 100644 --- a/usrc/db/dao/acid_use_record_dao.hpp +++ b/usrc/db/dao/acid_use_record_dao.hpp @@ -43,6 +43,8 @@ class AcidUseRecordDao { static bool isFull(); static void clearRecord(); static int getRecordNum(); + + static bool isHasRecordRelevantThisUser(uint8_t userid); }; } // namespace iflytop \ No newline at end of file diff --git a/usrc/db/dao/user_dao.cpp b/usrc/db/dao/user_dao.cpp index e8b48c4..53ea034 100644 --- a/usrc/db/dao/user_dao.cpp +++ b/usrc/db/dao/user_dao.cpp @@ -9,7 +9,7 @@ using namespace iflytop; /*********************************************************************************************************************** * MARCO * ***********************************************************************************************************************/ -#define TABLE_VERSION (TABLE_BASE_VERSION + 4) +#define TABLE_VERSION (TABLE_BASE_VERSION + 5) #define TABLE_NAME "user_table" /*********************************************************************************************************************** diff --git a/usrc/uicontroler/page/login_page.cpp b/usrc/uicontroler/page/login_page.cpp index d5a7475..2761347 100644 --- a/usrc/uicontroler/page/login_page.cpp +++ b/usrc/uicontroler/page/login_page.cpp @@ -9,8 +9,6 @@ namespace iflytop { using namespace std; #define TAG "LoginPage" - - class LoginPage : public IPageProcesser { private: char userName[20] = {0}; @@ -26,7 +24,7 @@ class LoginPage : public IPageProcesser { private: virtual void onPageLoad(OnPageLoadContext* cxt) override {} - virtual void onChangePageEvent() override{ + virtual void onChangePageEvent() override { resetPage(); return; }; @@ -58,14 +56,13 @@ class LoginPage : public IPageProcesser { UIS->setTxt(thisPage, ob_login_uNameEMsg, "用户名不存在"); return; } + ZLOGI(TAG, "login %s(%d) role:%d passwd:%s", userName, user->id, user->role, user->passwd); if (strcmp(user->passwd, passwd) != 0) { UIS->setTxt(thisPage, ob_login_pwdEMsg, "密码错误"); return; } - - login(user); } } @@ -86,7 +83,6 @@ class LoginPage : public IPageProcesser { GStateMgr::ins()->setLogin(user->id, userName, (user_role_t)user->role); AppEventBus::ins()->pushSimpleEvent(kAE_LoginEvent); UIControler::ins()->chpage(pg_home, true); - } }; diff --git a/usrc/uicontroler/page/mupage/muAcidType_page.cpp b/usrc/uicontroler/page/mupage/muAcidType_page.cpp index 856a58a..02674a4 100644 --- a/usrc/uicontroler/page/mupage/muAcidType_page.cpp +++ b/usrc/uicontroler/page/mupage/muAcidType_page.cpp @@ -46,37 +46,43 @@ class MuAcidType : public IPageProcesser { virtual void onBackKey() override { UIControler::ins()->chpage(pg_navi, true); }; virtual void onChangePageEvent() override {}; + + void updateAcidName(int bid, int id, const char* text) { + AcidNameDao::updateAcidName(id, text); + setText(bid, AcidNameDao::getAcidName(id)); + } + virtual void onInputFieldContentChange(uint8_t bid, uint8_t slecId, const char* text) { if (bid == ob_muAcidType_t1) { - AcidNameDao::updateAcidName(1 - 1, text); + updateAcidName(bid, 1 - 1, text); } else if (bid == ob_muAcidType_t2) { - AcidNameDao::updateAcidName(2 - 1, text); + updateAcidName(bid, 2 - 1, text); } else if (bid == ob_muAcidType_t3) { - AcidNameDao::updateAcidName(3 - 1, text); + updateAcidName(bid, 3 - 1, text); } else if (bid == ob_muAcidType_t4) { - AcidNameDao::updateAcidName(4 - 1, text); + updateAcidName(bid, 4 - 1, text); } else if (bid == ob_muAcidType_t5) { - AcidNameDao::updateAcidName(5 - 1, text); + updateAcidName(bid, 5 - 1, text); } else if (bid == ob_muAcidType_t6) { - AcidNameDao::updateAcidName(6 - 1, text); + updateAcidName(bid, 6 - 1, text); } else if (bid == ob_muAcidType_t7) { - AcidNameDao::updateAcidName(7 - 1, text); + updateAcidName(bid, 7 - 1, text); } else if (bid == ob_muAcidType_t8) { - AcidNameDao::updateAcidName(8 - 1, text); + updateAcidName(bid, 8 - 1, text); } else if (bid == ob_muAcidType_t9) { - AcidNameDao::updateAcidName(9 - 1, text); + updateAcidName(bid, 9 - 1, text); } else if (bid == ob_muAcidType_t10) { - AcidNameDao::updateAcidName(10 - 1, text); + updateAcidName(bid, 10 - 1, text); } else if (bid == ob_muAcidType_t11) { - AcidNameDao::updateAcidName(11 - 1, text); + updateAcidName(bid, 11 - 1, text); } else if (bid == ob_muAcidType_t12) { - AcidNameDao::updateAcidName(12 - 1, text); + updateAcidName(bid, 12 - 1, text); } else if (bid == ob_muAcidType_t13) { - AcidNameDao::updateAcidName(13 - 1, text); + updateAcidName(bid, 13 - 1, text); } else if (bid == ob_muAcidType_t14) { - AcidNameDao::updateAcidName(14 - 1, text); + updateAcidName(bid, 14 - 1, text); } else if (bid == ob_muAcidType_t15) { - AcidNameDao::updateAcidName(15 - 1, text); + updateAcidName(bid, 15 - 1, text); } }; virtual void onClickRelease(uint8_t bid, uint8_t val, const char* text) override { diff --git a/usrc/uicontroler/page/mupage/muUsrMgr_page.cpp b/usrc/uicontroler/page/mupage/muUsrMgr_page.cpp index ac8b6ca..1eccad1 100644 --- a/usrc/uicontroler/page/mupage/muUsrMgr_page.cpp +++ b/usrc/uicontroler/page/mupage/muUsrMgr_page.cpp @@ -151,10 +151,6 @@ class MuUsrMgr : public IPageProcesser { } else if (bid == ob_muUsrMgr_save) { saveUsr(); } else if (bid == ob_muUsrMgr_del) { - if (AcidDistrubtRecordDao::getRecordNum() > 0 || AcidUseRecordDao::getRecordNum() > 1) { - UIControler::ins()->popWarningWin("无法删除用户名,领酸记录或用酸记录不为空"); - return; - } delUsr(); } } @@ -222,6 +218,16 @@ class MuUsrMgr : public IPageProcesser { return; } + if (AcidDistrubtRecordDao::isHasRecordRelevantThisUser(user->id)) { + UIControler::ins()->popWarningWin("无法删除用户,部分领酸记录与这个用户相关."); + return; + } + + if (AcidUseRecordDao::isHasRecordRelevantThisUser(user->id)) { + UIControler::ins()->popWarningWin("无法删除用户,部分用酸记录与这个用户相关."); + return; + } + UIControler::ins()->doBlockWork("删除用户...", [this, user]() { UserDao::delUser(user->id); fillUsrStateUICache(); @@ -258,8 +264,13 @@ class MuUsrMgr : public IPageProcesser { } if (strcmp(m_editContext.name, user->name) != 0) { - if (AcidDistrubtRecordDao::getRecordNum() > 0 || AcidUseRecordDao::getRecordNum() > 1) { - UIControler::ins()->popWarningWin("无法修改用户名,领酸记录或用酸记录不为空."); + if (AcidDistrubtRecordDao::isHasRecordRelevantThisUser(user->id)) { + UIControler::ins()->popWarningWin("无法修改用户名,部分领酸记录与这个用户相关."); + return; + } + + if (AcidUseRecordDao::isHasRecordRelevantThisUser(user->id)) { + UIControler::ins()->popWarningWin("无法修改用户名,部分用酸记录与这个用户相关."); return; } } diff --git a/usrc/uicontroler/page/popwin_page.cpp b/usrc/uicontroler/page/popwin_page.cpp index ba138d2..6371838 100644 --- a/usrc/uicontroler/page/popwin_page.cpp +++ b/usrc/uicontroler/page/popwin_page.cpp @@ -81,8 +81,8 @@ class PopWinPage : public IPageProcesser { handupInfoFlag = true; if (UIControler::ins()->getNowPage() != thisPage) { lastPage = UIControler::ins()->getNowPage(); + UIControler::ins()->chpage(pg_popwin, false); } - UIControler::ins()->chpage(pg_popwin, false); } void visPopWin(bool state) {