From b6c9f1297932297dc37b957355faa21dba44e81d Mon Sep 17 00:00:00 2001 From: pansen <pansen626@sina.com> Date: 星期四, 28 二月 2019 14:21:01 +0800 Subject: [PATCH] ????? --- syncDBTool/ErlangDbTool.h | 29 +++++++ syncDBTool/SyncDB.hpp | 35 ++++++++ syncDBTool/ErlangDbTool.cpp | 147 +++++++++++++++++++++++++++++++++++- 3 files changed, 205 insertions(+), 6 deletions(-) diff --git a/syncDBTool/ErlangDbTool.cpp b/syncDBTool/ErlangDbTool.cpp index 8c3e12a..319d361 100755 --- a/syncDBTool/ErlangDbTool.cpp +++ b/syncDBTool/ErlangDbTool.cpp @@ -639,6 +639,14 @@ return false; } +bool ErlangTool::ErlangDbTool::createDatabase(std::string t_tableName, FieldValues &fieldValues) { +// #todo 璁板緱娴嬭瘯涓枃 + std::string strSql = getCreateFaceTableSql(t_tableName); + strSql.append(getInsertSql("sys_o_tables", fieldValues)); + getExecSqlResult(strSql); +} + + bool ErlangTool::ErlangDbTool::updateDatabase(std::string UUID, std::string TableType, std::string TableName, bool SyncType, std::string BwType, std::string StartTime, std::string EndTime) { @@ -722,6 +730,86 @@ return false; } +bool ErlangTool::ErlangDbTool::updateDatabase(std::string t_tableName, FieldValues &fieldValues) { + // #todo 璁板緱娴嬭瘯涓枃 + std::string strSql = getUpdateFaceTableSql(t_tableName, fieldValues); + return getExecSqlResult(strSql); + +} + +bool ErlangTool::ErlangDbTool::getExecSqlResult(const std::string &strSql) { + ErlangTool::LockG lock(m_mutex); +// m_mutex.lock(); + m_ret = resetConn(); + if (!m_ret) { + //#todo error message + std::cout << __FILE__ << __FUNCTION__ << __LINE__ << " error " << this->m_ret << " " << this->m_fd + << std::endl; + return false; + } + + ErlMessage emsg; /* Incoming message */ + int ret = -1; + ETERM *arrlist[7]; + arrlist[0] = erl_mk_string(strSql.c_str()); + ETERM *list = erl_mk_list(arrlist, 1); + + ret = erl_rpc_to(m_fd, "syncDB", "exeSomeSql", list); + if (ret == ERL_TICK) { + ret = erl_rpc_from(m_fd, TIMEOUT, &emsg); + //erl_close_connection(m_fd); +// m_mutex.unlock(); + if (ret == ERL_MSG) { + std::map<std::__cxx11::string, std::__cxx11::string> t_results; + + ETERM *tail_list; + ETERM *list_ret[1000], *arr_ret[2]; + ETERM *key, *value; + ETERM *tuplep[6]; + + arr_ret[0] = erl_element(2, emsg.msg); + int erlLength = erl_length(arr_ret[0]); + printf("arr_ret[0]:%d\n", erlLength); + list_ret[0] = erl_hd(arr_ret[0]); + tail_list = erl_tl(arr_ret[0]); + for (int i = 0; i < erlLength; i++) { + if (i > 0) { + list_ret[i] = erl_hd(tail_list); + tail_list = erl_tl(tail_list); + } +// printf("list_ret[%d]:%d\n", i, erl_length(list_ret[i])); + tuplep[0] = erl_hd(list_ret[i]); + key = erl_element(1, list_ret[i]); + value = erl_element(2, list_ret[i]); +// printf("key:%s\n", ERL_ATOM_PTR(key)); + + switch (ErlangTool::checkETERMType(value)) { + case ERL_ATOM: { +// int atomSize = ERL_ATOM_SIZE(value); + char *atomValue = ERL_ATOM_PTR(value); +// printf("value is a atom: atomSize:%d, atomValue:%s \n\r", atomSize, atomValue); + t_results.insert(std::make_pair(ERL_ATOM_PTR(key), atomValue)); + break; + } + default: + printf("error add case todo \n\r"); + } + ErlangTool::erlangFreeEterm(4, key, value, tuplep[0], list_ret[i]); + } + ErlangTool::erlangFreeEterm(2, tail_list, arr_ret[0]); + erl_eterm_release(); + auto it = t_results.find("atomic"); + if (t_results.size() > 0 && t_results.end() != it && it->second == "ok") { + return true; + } + } + } + erl_free_array(arrlist, 1); +// erlangFreeEterm(4, emsg.to, emsg.msg, emsg.from, list); + erl_eterm_release(); + return false; +} + bool ErlangTool::ErlangDbTool::deleteDatabase(std::string TableType, std::string TableName, bool SyncType) { LockG lock(m_mutex); // m_mutex.lock(); @@ -791,6 +879,19 @@ erl_free_array(arrlist, 2); erlangFreeEterm(4, emsg.to, emsg.msg, emsg.from, list); return false; +} + + +bool ErlangTool::ErlangDbTool::deleteDatabase(std::string t_tableName) { + + FieldValues fieldValues; + fieldValues.insert(std::make_pair("uuid", t_tableName)); + fieldValues.insert(std::make_pair("del_flag", "1")); + std::string strSql = getUpdateFaceTableSql("sys_o_tables", fieldValues); + strSql.append("DROP TABLE '" + t_tableName + "';DROP TABLE '" + t_tableName + "_fea';"); + // #todo 璁板緱娴嬭瘯涓枃 + return getExecSqlResult(strSql); + } // 鍜宔rlang浜や簰 @@ -894,7 +995,7 @@ map_TabDataCache tabDataCache; QString sql = QString::fromStdString( - "SELECT uuid,tableName,tableType,bwType,startTime,endTime FROM sys_o_tables where del_flag=0;"); + "SELECT uuid,tableName,tableType,bwType,startTime,endTime,uploadFlag,cmpThreshold,enabled,create_by FROM sys_o_tables where del_flag=0;"); QSqlQuery query(g_syncDbFile); query.prepare(sql); if (!query.exec()) { @@ -908,6 +1009,10 @@ t_table_info.bwType = query.value(3).toString().toStdString(); t_table_info.startTime = query.value(4).toString().toStdString(); t_table_info.endTime = query.value(5).toString().toStdString(); + t_table_info.uploadFlag = query.value(6).toString().toStdString(); + t_table_info.cmpThreshold = query.value(7).toString().toStdString(); + t_table_info.enabled = query.value(8).toString().toStdString(); + t_table_info.create_by = query.value(9).toString().toStdString(); tabDataCache.insert(std::make_pair(t_table_info.uuid, t_table_info)); } @@ -1080,6 +1185,35 @@ return false; } +bool ErlangTool::ErlangDbTool::addPerson(std::string t_tableName, AddFaceData &faceData, FieldValues &fieldValues) { +// #todo 璁板緱娴嬭瘯涓枃 + std::string strSql = getInsertSql(t_tableName, fieldValues); + fieldValues.clear(); + fieldValues.insert(make_pair("uuid", faceData.uuid)); + fieldValues.insert(make_pair("faceUrl", faceData.faceUrl)); + fieldValues.insert(make_pair("feature", faceData.feature_base64)); + + std::string strSqlFea = getInsertSql(t_tableName + "_fea", fieldValues); + strSql.append(strSqlFea); + // #todo 璁板緱娴嬭瘯涓枃 鍙湁浜哄憳淇℃伅琛ㄦ洿鏂帮紝鐗瑰緛鏇存柊鏆傛椂娌″仛 + + return getExecSqlResult(strSql); +} + +bool ErlangTool::ErlangDbTool::updatePerson(std::string t_tableName, AddFaceData &faceData, FieldValues &fieldValues) { +// #todo 璁板緱娴嬭瘯涓枃 + std::string strSql = getUpdateFaceTableSql(t_tableName, fieldValues); + fieldValues.clear(); + fieldValues.insert(make_pair("uuid", faceData.uuid)); + fieldValues.insert(make_pair("faceUrl", faceData.faceUrl)); + + fieldValues.insert(make_pair("feature", faceData.feature_base64)); + + std::string strSqlFea = getInsertSql(t_tableName + "_fea", fieldValues); + strSql.append(strSqlFea); + + return getExecSqlResult(strSql); +} ErlangTool::vec_AddDataCache ErlangTool::ErlangDbTool::addPersons(std::string TableUuid, std::vector<SyncDB::AddPersonInfo> &tmpPer) { @@ -1480,7 +1614,8 @@ } if (str_tableUuid.size() > 0) { QString sql = QString::fromStdString( - "Select a.uuid as id ,a.faceUrl as img,a.feature,b.idCard as idcard from '" + str_tableUuid + + "Select a.uuid as id ,a.faceUrl as img,a.feature,b.idCard as idcard,b.enable,b.monitorLevel from '" + + str_tableUuid + "_fea' as a ,'" + str_tableUuid + "' as b where a.uuid = b.uuid and ( a.del_flag=0 AND b.del_flag=0);"); QSqlQuery query(g_syncDbFile); query.prepare(sql); @@ -1493,6 +1628,8 @@ t_feature_info.img = query.value(1).toString().toStdString(); t_feature_info.feature = query.value(2).toString().toStdString(); t_feature_info.idcard = query.value(3).toString().toStdString(); + t_feature_info.enable = query.value(4).toString().toStdString(); + t_feature_info.monLevel = query.value(5).toString().toStdString(); dataCache.insert(std::make_pair(t_feature_info.id, t_feature_info)); } @@ -1518,8 +1655,8 @@ } if (str_tableUuid.size() > 0) { QString sql = QString::fromStdString( - "Select b.uuid as id,b.faceUrl as img,a.idCard as idcard from '" + str_tableUuid + "' as a, '" + - str_tableUuid + "_fea' As b where a.uuid = b.uuid and ( a.del_flag=0 AND b.del_flag=0);"); + "Select b.uuid as id,b.faceUrl as img,a.idCard as idcard,a.enable,a.monitorLevel from '" + str_tableUuid + + "' as a, '" + str_tableUuid + "_fea' As b where a.uuid = b.uuid and ( a.del_flag=0 AND b.del_flag=0);"); QSqlQuery query(g_syncDbFile); query.prepare(sql); if (!query.exec()) { @@ -1530,6 +1667,8 @@ t_feature_info.id = query.value(0).toString().toStdString(); t_feature_info.img = query.value(1).toString().toStdString(); t_feature_info.idcard = query.value(2).toString().toStdString(); + t_feature_info.enable = query.value(3).toString().toStdString(); + t_feature_info.monLevel = query.value(4).toString().toStdString(); dataCache.insert(std::make_pair(t_feature_info.id, t_feature_info)); } diff --git a/syncDBTool/ErlangDbTool.h b/syncDBTool/ErlangDbTool.h index 76ce646..72cebcd 100755 --- a/syncDBTool/ErlangDbTool.h +++ b/syncDBTool/ErlangDbTool.h @@ -21,6 +21,7 @@ #include <stdarg.h> #include <jsoncpp/json/json.h> #include <arpa/inet.h> +#include <SqliteToolkit.hpp> #include "erl_interface.h" #include "ei.h" @@ -135,6 +136,8 @@ private: void initCNode(); + bool getExecSqlResult(const std::string &strSql); + public: //#todo setCNodeName @@ -189,10 +192,27 @@ * @param TableName * @param SyncType true 1||false 0 * @param BwType "Black"1||"White"0 + * @param StartTime + * @param EndTime * @return 鍒涘缓鐘舵�� */ bool createDatabase(std::string TableType, std::string TableName, bool SyncType, std::string BwType, std::string StartTime = "", std::string EndTime = ""); + + /*** + * 鍒涘缓搴曞簱琛� + * @param TableType TableType car||person + * @param TableName + * @param SyncType true 1||false 0 + * @param BwType "Black"1||"White"0 + * @param UploadFlag 鏄惁涓婁紶 + * @param CmpThreshold 瀵规瘮闃堝�� + * @param Enabled 鏄惁鍚敤 + * @param StartTime + * @param EndTime + * @return + */ + bool createDatabase(std::string t_tableName, FieldValues &fieldValues); /*** * 鏇存柊搴曞簱琛� @@ -205,6 +225,8 @@ bool updateDatabase(std::string UUID, std::string TableType, std::string TableName, bool SyncType, std::string BwType, std::string StartTime = "", std::string EndTime = ""); + bool updateDatabase(std::string t_tableName, FieldValues &fieldValues); + /*** * 鍒犻櫎鏁版嵁琛� * @param TableType car||person @@ -213,6 +235,8 @@ * @return */ bool deleteDatabase(std::string TableType, std::string TableName, bool SyncType); + + bool deleteDatabase(std::string t_tableName); /*** * 鏌ヨ鎵�鏈夋暟鎹〃 @@ -242,6 +266,11 @@ std::string IdCard = " ", std::string PersonName = " ", std::string Age = " ", std::string Sex = " ", std::string PhoneNum = " "); + bool + ErlangTool::ErlangDbTool::addPerson(std::string t_tableName, AddFaceData &faceData, FieldValues &fieldValues); + + bool updatePerson(std::string t_tableName, AddFaceData &faceData, FieldValues &fieldValues); + vec_AddDataCache addPersons(std::string TableUuid, std::vector<SyncDB::AddPersonInfo> &tmpPer); /*** diff --git a/syncDBTool/SyncDB.hpp b/syncDBTool/SyncDB.hpp index 82919ca..20edb66 100755 --- a/syncDBTool/SyncDB.hpp +++ b/syncDBTool/SyncDB.hpp @@ -21,6 +21,8 @@ update_time, img, idcard, + enable, + monLevel, evEnd }; @@ -36,6 +38,8 @@ map_Fea_InfoString2Values["update_time"] = Feature_InfoStringValue::update_time; map_Fea_InfoString2Values["img"] = Feature_InfoStringValue::img; map_Fea_InfoString2Values["idcard"] = Feature_InfoStringValue::idcard; + map_Fea_InfoString2Values["enable"] = Feature_InfoStringValue::enable; + map_Fea_InfoString2Values["monitorLevel"] = Feature_InfoStringValue::monLevel; map_Fea_InfoString2Values["end"] = evEnd; } @@ -81,6 +85,12 @@ case Feature_InfoStringValue::idcard: idcard = value; break; + case Feature_InfoStringValue::enable: + enable = value; + break; + case Feature_InfoStringValue::monLevel: + monLevel = value; + break; default: ERR(key << " is an invalid string. s_mapStringValues now contains " << map_Fea_InfoString2Values.size() << " entries."); @@ -102,6 +112,9 @@ std::string update_time; std::string img; std::string idcard; + std::string enable; + std::string monLevel; + // value is a atom: atomSize:19, atomValue:test@192.168.50.216 // value is a list:2018-08-08 20:17:11 @@ -271,6 +284,9 @@ tab_uuid, tab_startTime, tab_endTime, + tab_uploadFlag, + tab_cmpThreshold, + tab_enabled, tab_evEnd }; @@ -290,6 +306,9 @@ map_Tab_InfoString2Values["uuid"] = Table_InfoStringValue::tab_uuid; map_Tab_InfoString2Values["startTime"] = Table_InfoStringValue::tab_startTime; map_Tab_InfoString2Values["endTime"] = Table_InfoStringValue::tab_endTime; + map_Tab_InfoString2Values["uploadFlag"] = Table_InfoStringValue::tab_uploadFlag; + map_Tab_InfoString2Values["cmpThreshold"] = Table_InfoStringValue::tab_cmpThreshold; + map_Tab_InfoString2Values["enabled"] = Table_InfoStringValue::tab_enabled; map_Tab_InfoString2Values["end"] = Table_InfoStringValue::tab_evEnd; } @@ -299,8 +318,8 @@ struct Table_Info { public: Table_Info() : - create_by(""), create_time(""), del_flag(""), tableDesc(""), tableName(""), tableType(""), - update_time(""), uuid(""), bwType(""), startTime(""), endTime("") { + create_by(""), create_time(""), del_flag(""), tableDesc(""), tableName(""), tableType(""), update_time(""), + uuid(""), bwType(""), startTime(""), endTime(""), uploadFlag(""), cmpThreshold(""), enabled("") { // Initialize(); } @@ -351,6 +370,15 @@ case Table_InfoStringValue::tab_endTime: endTime = value; break; + case Table_InfoStringValue::tab_uploadFlag: + uploadFlag = value; + break; + case Table_InfoStringValue::tab_cmpThreshold: + cmpThreshold = value; + break; + case Table_InfoStringValue::tab_enabled: + enabled = value; + break; default: ERR(key << " is an invalid string. s_mapStringValues now contains " << map_Fea_InfoString2Values.size() << " entries."); @@ -376,6 +404,9 @@ std::string bwType; std::string startTime; std::string endTime; + std::string uploadFlag; + std::string cmpThreshold; + std::string enabled; private: }; -- Gitblit v1.8.0