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