diff --git a/uappbase/bean/dbtype/acid_distrubt_record.hpp b/uappbase/bean/dbtype/acid_distrubt_record.hpp index c9f3762..34ab2ab 100644 --- a/uappbase/bean/dbtype/acid_distrubt_record.hpp +++ b/uappbase/bean/dbtype/acid_distrubt_record.hpp @@ -9,7 +9,8 @@ typedef struct { zdate_t date; uint8_t distrubtAcidUsrid; uint8_t takeAcidUsrid; - uint16_t distrubtCh; + uint8_t distribuCh; + uint16_t distribuVolume; } acid_distrubt_record_t; } // namespace iflytop diff --git a/uappbase/bean/dbtype/device_acid_volume.hpp b/uappbase/bean/dbtype/device_acid_volume.hpp new file mode 100644 index 0000000..95aea2b --- /dev/null +++ b/uappbase/bean/dbtype/device_acid_volume.hpp @@ -0,0 +1,9 @@ +#pragma once +#include "uappbase/appdep.hpp" + +namespace iflytop { +typedef struct { + uint8_t id; + float acidVolume[4]; +} device_acid_volume_t; +} // namespace iflytop diff --git a/ui/ui.h b/ui/ui.h index e46ab89..722c343 100644 --- a/ui/ui.h +++ b/ui/ui.h @@ -14,7 +14,7 @@ #define pg_muDeviceInfo 12 #define pg_muReCtlerBind 13 #define pg_muAcidUseRecd 14 -#define pg_muAcidTakeMgr 15 +#define pg_muAcidDistMgr 15 #define pg_popwin 16 #define pg_keybdB 17 #define pg_keybdAP 18 @@ -367,68 +367,68 @@ #define ob_muAcidUseRecd_pageIndex 60 #define ob_muAcidUseRecd_t1 61 #define ob_muAcidUseRecd_clearRecord 62 -//muAcidTakeMgr.objs -#define ob_muAcidTakeMgr_muAcidTakeMgr 0 -#define ob_muAcidTakeMgr_til 1 -#define ob_muAcidTakeMgr_bak 2 -#define ob_muAcidTakeMgr_chTil 3 -#define ob_muAcidTakeMgr_chId 4 -#define ob_muAcidTakeMgr_val01 5 -#define ob_muAcidTakeMgr_h1 6 -#define ob_muAcidTakeMgr_volumeVal 7 -#define ob_muAcidTakeMgr_volumeTil 8 -#define ob_muAcidTakeMgr_volumeUint 9 -#define ob_muAcidTakeMgr_addNew 10 -#define ob_muAcidTakeMgr_takePers 11 -#define ob_muAcidTakeMgr_takePersTil 12 -#define ob_muAcidTakeMgr_distPersoTil 13 -#define ob_muAcidTakeMgr_distPerso 14 -#define ob_muAcidTakeMgr_h2 15 -#define ob_muAcidTakeMgr_h3 16 -#define ob_muAcidTakeMgr_h4 17 -#define ob_muAcidTakeMgr_h0 18 -#define ob_muAcidTakeMgr_val04 19 -#define ob_muAcidTakeMgr_val00 20 -#define ob_muAcidTakeMgr_val10 21 -#define ob_muAcidTakeMgr_val20 22 -#define ob_muAcidTakeMgr_val30 23 -#define ob_muAcidTakeMgr_val40 24 -#define ob_muAcidTakeMgr_val50 25 -#define ob_muAcidTakeMgr_val60 26 -#define ob_muAcidTakeMgr_val70 27 -#define ob_muAcidTakeMgr_val11 28 -#define ob_muAcidTakeMgr_val21 29 -#define ob_muAcidTakeMgr_val31 30 -#define ob_muAcidTakeMgr_val41 31 -#define ob_muAcidTakeMgr_val51 32 -#define ob_muAcidTakeMgr_val61 33 -#define ob_muAcidTakeMgr_val71 34 -#define ob_muAcidTakeMgr_val02 35 -#define ob_muAcidTakeMgr_val12 36 -#define ob_muAcidTakeMgr_val22 37 -#define ob_muAcidTakeMgr_val32 38 -#define ob_muAcidTakeMgr_val42 39 -#define ob_muAcidTakeMgr_val52 40 -#define ob_muAcidTakeMgr_val62 41 -#define ob_muAcidTakeMgr_val72 42 -#define ob_muAcidTakeMgr_val03 43 -#define ob_muAcidTakeMgr_val13 44 -#define ob_muAcidTakeMgr_val23 45 -#define ob_muAcidTakeMgr_val33 46 -#define ob_muAcidTakeMgr_val43 47 -#define ob_muAcidTakeMgr_val53 48 -#define ob_muAcidTakeMgr_val63 49 -#define ob_muAcidTakeMgr_val73 50 -#define ob_muAcidTakeMgr_val14 51 -#define ob_muAcidTakeMgr_val24 52 -#define ob_muAcidTakeMgr_val34 53 -#define ob_muAcidTakeMgr_val44 54 -#define ob_muAcidTakeMgr_val54 55 -#define ob_muAcidTakeMgr_val64 56 -#define ob_muAcidTakeMgr_val74 57 -#define ob_muAcidTakeMgr_export 58 -#define ob_muAcidTakeMgr_clearRecord 59 -#define ob_muAcidTakeMgr_t1 60 +//muAcidDistMgr.objs +#define ob_muAcidDistMgr_muAcidDistMgr 0 +#define ob_muAcidDistMgr_til 1 +#define ob_muAcidDistMgr_bak 2 +#define ob_muAcidDistMgr_chTil 3 +#define ob_muAcidDistMgr_val01 4 +#define ob_muAcidDistMgr_h1 5 +#define ob_muAcidDistMgr_volumeVal 6 +#define ob_muAcidDistMgr_volumeTil 7 +#define ob_muAcidDistMgr_volumeUint 8 +#define ob_muAcidDistMgr_addNew 9 +#define ob_muAcidDistMgr_takePersTil 10 +#define ob_muAcidDistMgr_distPersoTil 11 +#define ob_muAcidDistMgr_distPerso 12 +#define ob_muAcidDistMgr_h2 13 +#define ob_muAcidDistMgr_h3 14 +#define ob_muAcidDistMgr_h4 15 +#define ob_muAcidDistMgr_h0 16 +#define ob_muAcidDistMgr_val04 17 +#define ob_muAcidDistMgr_val00 18 +#define ob_muAcidDistMgr_val10 19 +#define ob_muAcidDistMgr_val20 20 +#define ob_muAcidDistMgr_val30 21 +#define ob_muAcidDistMgr_val40 22 +#define ob_muAcidDistMgr_val50 23 +#define ob_muAcidDistMgr_val60 24 +#define ob_muAcidDistMgr_val70 25 +#define ob_muAcidDistMgr_val11 26 +#define ob_muAcidDistMgr_val21 27 +#define ob_muAcidDistMgr_val31 28 +#define ob_muAcidDistMgr_val41 29 +#define ob_muAcidDistMgr_val51 30 +#define ob_muAcidDistMgr_val61 31 +#define ob_muAcidDistMgr_val71 32 +#define ob_muAcidDistMgr_val02 33 +#define ob_muAcidDistMgr_val12 34 +#define ob_muAcidDistMgr_val22 35 +#define ob_muAcidDistMgr_val32 36 +#define ob_muAcidDistMgr_val42 37 +#define ob_muAcidDistMgr_val52 38 +#define ob_muAcidDistMgr_val62 39 +#define ob_muAcidDistMgr_val72 40 +#define ob_muAcidDistMgr_val03 41 +#define ob_muAcidDistMgr_val13 42 +#define ob_muAcidDistMgr_val23 43 +#define ob_muAcidDistMgr_val33 44 +#define ob_muAcidDistMgr_val43 45 +#define ob_muAcidDistMgr_val53 46 +#define ob_muAcidDistMgr_val63 47 +#define ob_muAcidDistMgr_val73 48 +#define ob_muAcidDistMgr_val14 49 +#define ob_muAcidDistMgr_val24 50 +#define ob_muAcidDistMgr_val34 51 +#define ob_muAcidDistMgr_val44 52 +#define ob_muAcidDistMgr_val54 53 +#define ob_muAcidDistMgr_val64 54 +#define ob_muAcidDistMgr_val74 55 +#define ob_muAcidDistMgr_export 56 +#define ob_muAcidDistMgr_clearRecord 57 +#define ob_muAcidDistMgr_t1 58 +#define ob_muAcidDistMgr_takePers 59 +#define ob_muAcidDistMgr_chId 60 //popwin.objs #define ob_popwin_popwin 0 #define ob_popwin_p0 1 diff --git a/usrc/db/dao/acid_ch_cfg_dao.cpp b/usrc/db/dao/acid_ch_cfg_dao.cpp index 0f67b26..b0dda6b 100644 --- a/usrc/db/dao/acid_ch_cfg_dao.cpp +++ b/usrc/db/dao/acid_ch_cfg_dao.cpp @@ -85,3 +85,15 @@ void AcidChCfgDao::updateAcidEachDistriVal(int chIndex, float acidEachDistriVal) tabledata->item[chIndex].acidEachDistriVal = acidEachDistriVal; storgeTableData(); } + +const char** AcidChCfgDao::getAcidCHNameList() { + static char nameTableStr[4][30]; + static const char* nameTable[4 + 1]; + memset(nameTable, 0, sizeof(nameTable)); + nameTable[4] = NULL; + for (int i = 0; i < 4; i++) { + sprintf(&nameTableStr[i][0], "%s(%d)", tabledata->item[i].acidChooseName, i); + nameTable[i] = &nameTableStr[i][0]; + } + return nameTable; +} diff --git a/usrc/db/dao/acid_ch_cfg_dao.hpp b/usrc/db/dao/acid_ch_cfg_dao.hpp index 77fcd59..4428eb8 100644 --- a/usrc/db/dao/acid_ch_cfg_dao.hpp +++ b/usrc/db/dao/acid_ch_cfg_dao.hpp @@ -1,8 +1,7 @@ #pragma once -#include "uappbase/base.hpp" - #include "error/errno.hpp" +#include "uappbase/base.hpp" namespace iflytop { @@ -15,6 +14,8 @@ class AcidChCfgDao { static void updatekCfgAcidChooseName(int chIndex, const char* acidChooseName); static void updateAcidEachDistriVal(int chIndex, float acidEachDistriVal); static void syncCfg(); + + static const char** getAcidCHNameList(); }; } // namespace iflytop \ No newline at end of file diff --git a/usrc/db/dao/acid_distrubt_record_dao.cpp b/usrc/db/dao/acid_distrubt_record_dao.cpp index 04a377c..0ffb26f 100644 --- a/usrc/db/dao/acid_distrubt_record_dao.cpp +++ b/usrc/db/dao/acid_distrubt_record_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 "acid_distrubt_record_table" /*********************************************************************************************************************** @@ -24,6 +24,10 @@ static acid_distrubt_record_table_t* acid_distrubt_record_table; * FUNCTION * ***********************************************************************************************************************/ static void storgeTableData() { ZHDB::storageData((uint8_t*)acid_distrubt_record_table, sizeof(*acid_distrubt_record_table)); } +static void storgeItem(int offset) { + ZHDB::storageData((uint8_t*)&acid_distrubt_record_table->record[offset], sizeof(acid_distrubt_record_t)); + ZHDB::storageData((uint8_t*)acid_distrubt_record_table, sizeof(*acid_distrubt_record_table) - sizeof(acid_distrubt_record_table->record)); +} // void AcidDistrubtRecordDao::init() { // @@ -52,12 +56,18 @@ void AcidDistrubtRecordDao::addRecord(const acid_distrubt_record_t& record) { return; } - acid_distrubt_record_table->record[acid_distrubt_record_table->recordNum++] = 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++; - ZLOGI(TAG, "add record %d", record.id); - storgeTableData(); + ZLOGI(TAG, "add record %d/%d/%d %02d:%02d:%02d distruUid:%d takeAcidUid:%d ch:%d volume:%d (%d/%d)", // + record.date.year, record.date.month, record.date.day, // + record.date.hours, record.date.minutes, record.date.seconds, // + record.distrubtAcidUsrid, record.takeAcidUsrid, record.distribuCh, record.distribuVolume, // + acid_distrubt_record_table->recordNum, ACID_DISTRUBT_RECORD_NUM); + storgeItem(recordNum); } acid_distrubt_record_table_t* AcidDistrubtRecordDao::getRecordTable() { diff --git a/usrc/db/dao/acid_distrubt_record_dao.hpp b/usrc/db/dao/acid_distrubt_record_dao.hpp index ec649ce..6c93e0e 100644 --- a/usrc/db/dao/acid_distrubt_record_dao.hpp +++ b/usrc/db/dao/acid_distrubt_record_dao.hpp @@ -20,8 +20,8 @@ class AcidDistrubtRcordPage { typedef struct { uint32_t version; uint32_t maxid; - acid_distrubt_record_t record[ACID_DISTRUBT_RECORD_NUM]; int recordNum; + acid_distrubt_record_t record[ACID_DISTRUBT_RECORD_NUM]; uint32_t end; } acid_distrubt_record_table_t; @@ -31,6 +31,7 @@ class AcidDistrubtRecordDao { static acid_distrubt_record_table_t* getRecordTable(); static void addRecord(const acid_distrubt_record_t& record); + static void sync(); static void getRecord(int pageNum, AcidDistrubtRcordPage* page); static bool isAlmostFull(); static bool isFull(); diff --git a/usrc/db/dao/acid_use_record_dao.cpp b/usrc/db/dao/acid_use_record_dao.cpp index 976f8a9..e15b0b5 100644 --- a/usrc/db/dao/acid_use_record_dao.cpp +++ b/usrc/db/dao/acid_use_record_dao.cpp @@ -9,7 +9,7 @@ using namespace iflytop; /*********************************************************************************************************************** * MARCO * ***********************************************************************************************************************/ -#define TABLE_VERSION (TABLE_BASE_VERSION + 5) +#define TABLE_VERSION (TABLE_BASE_VERSION + 6) #define TABLE_NAME "acid_use_record_table" /*********************************************************************************************************************** diff --git a/usrc/db/dao/acid_use_record_dao.hpp b/usrc/db/dao/acid_use_record_dao.hpp index ff9cb98..8a8ef41 100644 --- a/usrc/db/dao/acid_use_record_dao.hpp +++ b/usrc/db/dao/acid_use_record_dao.hpp @@ -20,8 +20,8 @@ class AcidUseRcordPage { typedef struct { uint32_t version; uint32_t maxid; - acid_use_record_t record[ACIDUSERCORD_RECORD_NUM]; int recordNum; + acid_use_record_t record[ACIDUSERCORD_RECORD_NUM]; uint32_t end; } acid_use_record_table_t; diff --git a/usrc/db/dao/device_acid_volume_dao.cpp b/usrc/db/dao/device_acid_volume_dao.cpp new file mode 100644 index 0000000..f5a282f --- /dev/null +++ b/usrc/db/dao/device_acid_volume_dao.cpp @@ -0,0 +1,70 @@ +#include "device_acid_volume_dao.hpp" + +#include "uappbase/zhdb/zhdb.hpp" + +#define TAG "DeviceAcidVolume" + +using namespace iflytop; + +/*********************************************************************************************************************** + * MARCO * + ***********************************************************************************************************************/ +#define TABLE_VERSION TABLE_BASE_VERSION +#define TABLE_NAME "device_acid_vlume" + +/*********************************************************************************************************************** + * STATIC VAR * + ***********************************************************************************************************************/ + +static zhdb_table_t* table; +static bool module_inited; +static struct { + uint32_t version; + uint32_t maxid; + device_acid_volume_t item[1]; + uint32_t end; +}* tabledata; + +/*********************************************************************************************************************** + * FUNCTION * + ***********************************************************************************************************************/ +static void storgeTableData() { ZHDB::storageData((uint8_t*)tabledata, sizeof(*tabledata)); } +void DeviceAcidVolume::init() { + // + table = ZHDB::allocTable(TABLE_NAME, sizeof(*tabledata)); + ASSERT(table != NULL, "alloc table failed"); + tabledata = (decltype(tabledata))table->add; + + if (TABLE_VERSION != tabledata->version || TABLE_VERSION != tabledata->end) { + ZLOGI(TAG, "%s table version not match, reset table", TABLE_NAME); + + tabledata->version = TABLE_VERSION; + tabledata->end = TABLE_VERSION; + + // 初始化酸液名称 + tabledata->item[0].id = tabledata->maxid++; + memset(tabledata->item[0].acidVolume, 0, sizeof(tabledata->item[0].acidVolume)); + } + storgeTableData(); + module_inited = true; + + ZLOGI(TAG, "init success"); +} + +void DeviceAcidVolume::updateAcidVolume(int index, float volume) { + ZASSERT_INFO(module_inited, "device acid volume dao not inited"); + if (index < 0 || index >= sizeof(tabledata->item[0].acidVolume) / sizeof(tabledata->item[0].acidVolume[0])) { + ZLOGE(TAG, "updateAcidVolume fail,index out of range index=%d", index); + return; + } + tabledata->item[0].acidVolume[index] = volume; + storgeTableData(); +} +float DeviceAcidVolume::getAcidVolume(int index) { + ZASSERT_INFO(module_inited, "device acid volume dao not inited"); + if (index < 0 || index >= sizeof(tabledata->item[0].acidVolume) / sizeof(tabledata->item[0].acidVolume[0])) { + ZLOGE(TAG, "getAcidVolume fail,index out of range index=%d", index); + return 0; + } + return tabledata->item[0].acidVolume[index]; +} \ No newline at end of file diff --git a/usrc/db/dao/device_acid_volume_dao.hpp b/usrc/db/dao/device_acid_volume_dao.hpp new file mode 100644 index 0000000..3582d1e --- /dev/null +++ b/usrc/db/dao/device_acid_volume_dao.hpp @@ -0,0 +1,15 @@ +#pragma once +#include "error/errno.hpp" +#include "uappbase/base.hpp" +#include "uappbase/bean/dbtype/device_acid_volume.hpp" + +namespace iflytop { + +class DeviceAcidVolume { + public: + static void init(); + static void updateAcidVolume(int index, float volume); + static float getAcidVolume(int index); +}; + +} // 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 f2b0764..0612293 100644 --- a/usrc/db/dao/user_dao.cpp +++ b/usrc/db/dao/user_dao.cpp @@ -247,3 +247,17 @@ void UserDao::updateUser(uint8_t userId, const char* name, const char* passwd, u sortUsr(); storgeTableData(); } + +const char** UserDao::getUsrNameTable() { + static const char* nameTable[MAX_USR_NUM + 1]; + memset(nameTable, 0, sizeof(nameTable)); + for (int i = 0; i < MAX_USR_NUM; i++) { + if (usr_table_data->user[i].effective) { + nameTable[i] = usr_table_data->user[i].name; + } else { + nameTable[i] = nullptr; + } + } + nameTable[MAX_USR_NUM] = nullptr; + return nameTable; +} diff --git a/usrc/db/dao/user_dao.hpp b/usrc/db/dao/user_dao.hpp index 745e760..ba08539 100644 --- a/usrc/db/dao/user_dao.hpp +++ b/usrc/db/dao/user_dao.hpp @@ -23,9 +23,9 @@ class UserDao { static Errno addUser(); static void delUser(uint8_t userId); + static user_t* getUserByIdNotNull(int32_t id); -static user_t* getUserByIdNotNull(int32_t id); - + static const char** getUsrNameTable(); }; } // namespace iflytop \ No newline at end of file diff --git a/usrc/service/app_core.cpp b/usrc/service/app_core.cpp index 43b2e81..43750ee 100644 --- a/usrc/service/app_core.cpp +++ b/usrc/service/app_core.cpp @@ -21,6 +21,7 @@ #include "db/dao/acid_distrubt_record_dao.hpp" #include "db/dao/acid_name_dao.hpp" #include "db/dao/acid_use_record_dao.hpp" +#include "db/dao/device_acid_volume_dao.hpp" #include "db/dao/device_setting_dao.hpp" #include "db/dao/user_dao.hpp" @@ -117,6 +118,7 @@ void AppCore::initialize() { DeviceSettingDao::init(); AcidUseRecordDao::init(); AcidDistrubtRecordDao::init(); + DeviceAcidVolume::init(); ZLOGI(TAG, "load zhdb end"); // @@ -155,7 +157,7 @@ void AppCore::initialize() { GStateMgr::ins()->setLogin(0, "admin", kadmin); AppEventBus::ins()->pushSimpleEvent(kAE_LoginEvent); - UIControler::ins()->chpage(pg_muAcidUseRecd, true); + UIControler::ins()->chpage(pg_muAcidDistMgr, true); /*********************************************************************************************************************** * 统计内存使用情况 * diff --git a/usrc/service/remote_controler_event_processer.cpp b/usrc/service/remote_controler_event_processer.cpp index 361eeea..d320ef0 100644 --- a/usrc/service/remote_controler_event_processer.cpp +++ b/usrc/service/remote_controler_event_processer.cpp @@ -155,7 +155,7 @@ void RemoteControlerEventProcesser::processKeyEventFromRemoter(hand_acid_remoter case pg_muChangePasswd: case pg_muCHSetting: case pg_muDeviceInfo: - case pg_muAcidTakeMgr: + case pg_muAcidDistMgr: case pg_muAcidUseRecd: UIS->popWarningWin("请先切换到首页,在控制设备"); break; diff --git a/usrc/uicontroler/page/mupage/muAcidTakeMgr_page.cpp b/usrc/uicontroler/page/mupage/muAcidTakeMgr_page.cpp new file mode 100644 index 0000000..681e74a --- /dev/null +++ b/usrc/uicontroler/page/mupage/muAcidTakeMgr_page.cpp @@ -0,0 +1,207 @@ + +#include "db/dao/acid_distrubt_record_dao.hpp" +#include "db/dao/acid_name_dao.hpp" +#include "db/dao/user_dao.hpp" +#include "uappbase/apphal/apphal.hpp" +#include "ui/ui.h" +#include "uicontroler/base/page_processer.hpp" +#include "usrc/db/dao/acid_ch_cfg_dao.hpp" +// +#include "db/dao/acid_ch_cfg_dao.hpp" +#include "db/dao/acid_use_record_dao.hpp" +#include "db/dao/device_acid_volume_dao.hpp" +#include "db/dao/device_setting_dao.hpp" +// +#include "service/pump_ctrl_service.hpp" +#include "service/remote_controler.hpp" + +namespace iflytop { +using namespace std; +#define TAG "MuAcidDistMgrPage" + +typedef struct { + uint8_t val[5]; // 时间 +} table_iterm_t; + +static table_iterm_t cfgbid_table[] = { + {ob_muAcidDistMgr_h0, ob_muAcidDistMgr_h1, ob_muAcidDistMgr_h2, ob_muAcidDistMgr_h3, ob_muAcidDistMgr_h4}, + {ob_muAcidDistMgr_val00, ob_muAcidDistMgr_val01, ob_muAcidDistMgr_val02, ob_muAcidDistMgr_val03, ob_muAcidDistMgr_val04}, + {ob_muAcidDistMgr_val10, ob_muAcidDistMgr_val11, ob_muAcidDistMgr_val12, ob_muAcidDistMgr_val13, ob_muAcidDistMgr_val14}, + {ob_muAcidDistMgr_val20, ob_muAcidDistMgr_val21, ob_muAcidDistMgr_val22, ob_muAcidDistMgr_val23, ob_muAcidDistMgr_val24}, + {ob_muAcidDistMgr_val30, ob_muAcidDistMgr_val31, ob_muAcidDistMgr_val32, ob_muAcidDistMgr_val33, ob_muAcidDistMgr_val34}, + {ob_muAcidDistMgr_val40, ob_muAcidDistMgr_val41, ob_muAcidDistMgr_val42, ob_muAcidDistMgr_val43, ob_muAcidDistMgr_val44}, + {ob_muAcidDistMgr_val50, ob_muAcidDistMgr_val51, ob_muAcidDistMgr_val52, ob_muAcidDistMgr_val53, ob_muAcidDistMgr_val54}, + {ob_muAcidDistMgr_val60, ob_muAcidDistMgr_val61, ob_muAcidDistMgr_val62, ob_muAcidDistMgr_val63, ob_muAcidDistMgr_val64}, + {ob_muAcidDistMgr_val70, ob_muAcidDistMgr_val71, ob_muAcidDistMgr_val72, ob_muAcidDistMgr_val73, ob_muAcidDistMgr_val74}, +}; + +static int m_takePers = 0; +static int m_chId = 0; +static int m_volumeVal = 0; + +class MuAcidDistMgrPage : public IPageProcesser { + public: + MuAcidDistMgrPage() : IPageProcesser(TAG, pg_muAcidDistMgr) {} + + virtual void initialize() override { + IPageProcesser::initialize(); + + setText(cfgbid_table[0].val[0], "时间"); + setText(cfgbid_table[0].val[1], "发放人"); + setText(cfgbid_table[0].val[2], "领酸人"); + setText(cfgbid_table[0].val[3], "酸液名称"); + setText(cfgbid_table[0].val[4], "容量"); + + for (int i = 0; i < 8; i++) { + setText(cfgbid_table[i + 1].val[0], ""); + setText(cfgbid_table[i + 1].val[1], ""); + setText(cfgbid_table[i + 1].val[2], ""); + setText(cfgbid_table[i + 1].val[3], ""); + setText(cfgbid_table[i + 1].val[4], ""); + } + } + + /*********************************************************************************************************************** + * CALL_BAK * + ***********************************************************************************************************************/ + + virtual void onPageLoad(OnPageLoadContext* cxt) override { return; }; + /** + * @brief 返回上一页 + */ + virtual void onBackKey() override { UIControler::ins()->chpage(pg_navi, true); } + virtual void onChangePageEvent() override { + resetForm(); + updateTableVolume(); + } + virtual void onClickRelease(uint8_t bid, uint8_t val, const char* text) override { + /*********************************************************************************************************************** + * 添加记录 * + ***********************************************************************************************************************/ + /** + * 绑定键盘 + */ + if (bid == ob_muAcidDistMgr_takePers) { + UIControler::ins()->popKeyBMutSel(thisPage, bid, 0, UserDao::getUsrNameTable()); + } else if (bid == ob_muAcidDistMgr_chId) { + UIControler::ins()->popKeyBMutSel(thisPage, bid, 0, AcidChCfgDao::getAcidCHNameList()); + } else if (bid == ob_muAcidDistMgr_volumeVal) { + UIControler::ins()->popNumKeyBoard(thisPage, bid, 4, ""); + } + + if (bid == ob_muAcidDistMgr_addNew) { + if (m_volumeVal <= 0) { + UIControler::ins()->popWarningWin("请输入容量"); + return; + } + if (m_takePers < 0) { + UIControler::ins()->popWarningWin("请选择发放人"); + return; + } + + if (m_chId < 0) { + UIControler::ins()->popWarningWin("请选择酸液名称"); + return; + } + + { + UILoadingCxt ctx; + acid_distrubt_record_t record; + AppHal::rtc_get(&record.date); + record.distrubtAcidUsrid = GStateMgr::ins()->getUserId(); + record.takeAcidUsrid = m_takePers; + record.distribuCh = m_chId; + record.distribuVolume = m_volumeVal; + AcidDistrubtRecordDao::addRecord(record); + + DeviceAcidVolume::updateAcidVolume(m_chId, m_volumeVal); + GStateMgr::ins()->setAcidRemain(m_chId, m_volumeVal); + resetForm(); + } + } + + /*********************************************************************************************************************** + * 表格操作 * + ***********************************************************************************************************************/ + + if (bid == ob_muAcidDistMgr_clearRecord) { + UIControler::ins()->popConfirmWin("您确定要清空领酸记录?", [this](bool isOk) { + if (isOk) { + UILoadingCxt loadingCxt; + AcidUseRecordDao::clearRecord(); + AcidUseRecordDao::sync(); + UIControler::ins()->chpage(thisPage, true); + } + }); + } + + if (bid == ob_muAcidDistMgr_export) { + } + } + virtual void onInputFieldContentChange(uint8_t bid, uint8_t slecId, const char* text) override { + if (bid == ob_muAcidDistMgr_takePers) { + m_takePers = slecId; + setText(bid, "%s", UserDao::getUserByIdNotNull(slecId)->name); + } else if (bid == ob_muAcidDistMgr_chId) { + if (slecId < 0 || slecId > 3) { + ZLOGI(TAG, "slecId out of range"); + return; + } + m_chId = slecId; + setText(bid, "%s(%d)", AcidChCfgDao::getCfg(slecId)->acidChooseName, slecId); + } else if (bid == ob_muAcidDistMgr_volumeVal) { + float val = atof(text); + if (val < 0) { + UIControler::ins()->popInfoWin("体积不能小于0"); + return; + } + + m_volumeVal = val; + setText(bid, "%d", (int)val); + } + } + + /*********************************************************************************************************************** + * UTILS * + ***********************************************************************************************************************/ + + void updateTableVolume() { + // set val + UIControler::ins()->chpage(thisPage, false); + + AcidDistrubtRcordPage page; + AcidDistrubtRecordDao::getRecord(0, &page); + for (int i = 0; i < page.recordNum; i++) { + setText(cfgbid_table[i + 1].val[0], "%d/%d/%d %02d:%02d:%02d", page.record[i]->date.year, page.record[i]->date.month, page.record[i]->date.day, page.record[i]->date.hours, page.record[i]->date.minutes, page.record[i]->date.seconds); + setText(cfgbid_table[i + 1].val[1], "%s", UserDao::getUserByIdNotNull(page.record[i]->distrubtAcidUsrid)->name); + setText(cfgbid_table[i + 1].val[2], "%s", UserDao::getUserByIdNotNull(page.record[i]->takeAcidUsrid)->name); + setText(cfgbid_table[i + 1].val[3], "%s", AcidChCfgDao::getCfg(page.record[i]->distribuCh)->acidChooseName); + setText(cfgbid_table[i + 1].val[4], "%d", page.record[i]->distribuVolume); + } + + for (int i = page.recordNum; i < 8; i++) { + setText(cfgbid_table[i + 1].val[0], ""); + setText(cfgbid_table[i + 1].val[1], ""); + setText(cfgbid_table[i + 1].val[2], ""); + setText(cfgbid_table[i + 1].val[3], ""); + setText(cfgbid_table[i + 1].val[4], ""); + } + } + + void resetForm() { + m_takePers = -1; + m_chId = -1; + m_volumeVal = -1; + + updateTableVolume(); + setText(ob_muAcidDistMgr_distPerso, "%s", GStateMgr::ins()->getLoginUsr()); + setText(ob_muAcidDistMgr_takePers, ""); + setText(ob_muAcidDistMgr_chId, ""); + setText(ob_muAcidDistMgr_volumeVal, ""); + } +}; + +// 实例化Page, 使其自动注册 +static MuAcidDistMgrPage instance; + +} // namespace iflytop diff --git a/usrc/uicontroler/page/navi_page.cpp b/usrc/uicontroler/page/navi_page.cpp index b336e75..db4a69e 100644 --- a/usrc/uicontroler/page/navi_page.cpp +++ b/usrc/uicontroler/page/navi_page.cpp @@ -59,7 +59,7 @@ static muInfoTable_t storeKeeperMuInfoTable = // .maxPageNum = 1, .muInfo = { {ob_navi_muChangePwd, pg_muChangePasswd}, // 修改密码 - {ob_navi_muAcidTakeMgr, pg_muAcidTakeMgr}, // 领酸管理 + {ob_navi_muAcidTakeMgr, pg_muAcidDistMgr}, // 领酸管理 {ob_navi_muAcidUseRecd, pg_muAcidUseRecd}, // 用酸记录 {ob_navi_muLoginOut, 0} // 退出登录 }}; @@ -74,7 +74,7 @@ static muInfoTable_t adminMuInfoTable = // {ob_navi_muAcidType, pg_muAcidType}, // 酸类型管理 {ob_navi_muUsrMgr, pg_muUsrMgr}, // 用户管理 {ob_navi_muDateMgr, pg_muDateMgr}, // 修改时间 - {ob_navi_muAcidTakeMgr, pg_muAcidTakeMgr}, // 领酸管理 + {ob_navi_muAcidTakeMgr, pg_muAcidDistMgr}, // 领酸管理 {ob_navi_muAcidUseRecd, pg_muAcidUseRecd}, // 用酸记录 {ob_navi_muReCtlerBind, pg_muReCtlerBind}, // 手柄绑定 {ob_navi_muChangePwd, pg_muChangePasswd}, // 修改密码 diff --git a/usrc/uicontroler/ui_controler.cpp b/usrc/uicontroler/ui_controler.cpp index 5b9a526..c31c416 100644 --- a/usrc/uicontroler/ui_controler.cpp +++ b/usrc/uicontroler/ui_controler.cpp @@ -259,6 +259,8 @@ bool UIControler::setTxt(uint8_t pid, uint8_t bid, const char* txt, ...) { bool UIControler::setTxt(uint8_t pid, uint8_t bid, const char* txt, va_list args) { zlock_guard lg(m_cmdlock); static char buf[256]; + memset(buf, 0, sizeof(buf)); + vsprintf(buf, txt, args); sendcmd("p[%d].b[%d].txt=\"%s\"", pid, bid, buf); return true; @@ -312,7 +314,7 @@ void UIControler::popWin(UIPopWinType_t type, const char* info, functionchangePage(page); - AppEventBus::ins()->pushPageChangeEvent(page); + if (triggerEvent) AppEventBus::ins()->pushPageChangeEvent(page); sendcmd("page %d", page); } void UIControler::sendcmd(const char* format, ...) { @@ -326,6 +328,8 @@ void UIControler::sendcmd(const char* format, ...) { void UIControler::sendcmd(const char* format, va_list args) { static char buf[256]; + memset(buf, 0, sizeof(buf)); + vsprintf(buf, format, args); #if MODULE_DEBUG ZLOGI(TAG, "tx:%s", buf); @@ -492,6 +496,7 @@ void UIControler::popNumKeyBoard(uint8_t fromPid, uint8_t fromBid, int limitLeng void UIControler::popKeyBMutSel(uint8_t fromPid, uint8_t fromBid, int selectvalindex, const char** selectvals) { zlock_guard lg(m_cmdlock); static char contentbus[128]; + memset(contentbus, 0, sizeof(contentbus)); for (int i = 0;; i++) { // \r\n 拼接字符串数组 if (selectvals[i] == nullptr) break;