From 779dac2808a1990f46b261102d3a3bbe086ee721 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Tue, 3 Dec 2024 16:33:54 +0800 Subject: [PATCH] fix some bug --- uappbase/bean/dbtype/user.hpp | 2 +- ui/hand_acid_mainboard_ui.HMI | Bin 18438360 -> 18438360 bytes usrc/db/dao/acid_distrubt_record_dao.cpp | 31 +++++++++++++++---- usrc/db/dao/acid_distrubt_record_dao.hpp | 2 ++ usrc/db/dao/acid_use_record_dao.cpp | 13 ++++++++ usrc/db/dao/acid_use_record_dao.hpp | 2 ++ usrc/db/dao/user_dao.cpp | 2 +- usrc/uicontroler/page/login_page.cpp | 8 ++--- usrc/uicontroler/page/mupage/muAcidType_page.cpp | 36 +++++++++++++---------- usrc/uicontroler/page/mupage/muUsrMgr_page.cpp | 23 +++++++++++---- usrc/uicontroler/page/popwin_page.cpp | 2 +- 11 files changed, 85 insertions(+), 36 deletions(-) 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 f29e6758fdd84ff15e7a279ae802458a388ea82a..08f8f1b5684c7c1b93b9864a69a1f735b1f1c8e1 100644 GIT binary patch delta 2737 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 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) {