From 439a23896bda9c4e954092816354914e645579b6 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期一, 10 六月 2019 09:37:13 +0800
Subject: [PATCH] 替换这个文件

---
 QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp |   49 ++++++++++++++++++++++++++-----------------------
 1 files changed, 26 insertions(+), 23 deletions(-)

diff --git a/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp b/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp
index 4cab786..3281d1c 100644
--- a/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp
+++ b/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp
@@ -54,11 +54,15 @@
 
 //#todo map 1->2 modify 2->1
 bool FaceDBCompareServer::compare(thread::id key, AlarmData *alarmData, int topN) {
+    m_dbRWLocks_Lock.wrlock();
     if (m_dbRWLocks.find(key) == m_dbRWLocks.end()) {
         m_dbRWLocks[key] = RWLock();
     }
     RWLock &t_rwl = m_dbRWLocks[key];
+    DBG("m_dbRWLocks ok");
+    m_dbRWLocks_Lock.unlock();
 //    ClockTimer clockTimer("compare ");
+    //淇濇姢 t_compareResults
     RWLock t_rwLock;
 
     m_rwLock.rdlock();
@@ -77,12 +81,15 @@
             FaceResult tface{0, data.uuid, alarmData->tableName, sc, data.faceUrl, data.idcard, ""};
             t_rwLock.wrlock();
             //#todo
+            // 瀵规瘮缁撴灉淇濆瓨
             if (sc < t_compareResults.end()->second.confidence) {
                 t_rwLock.unlock();
                 return;
             }
+            // 淇濆瓨瀵规瘮缁撴灉
             t_compareResults.insert(make_pair(tface.confidence, tface));
             //#todo 10
+            // 鍙繚鐣欐渶楂樼殑n涓姣旂粨鏋�
             if (t_compareResults.size() > topN) {
                 t_compareResults.erase((--t_compareResults.end()), t_compareResults.end());
             }
@@ -116,8 +123,11 @@
     int maxSearchFaces = alarmData->num;
 
     t_rwl.wrlock();
+    DBG("topResult[key] before");
     auto &t_topResult = topResult[key];
+    DBG("topResult[key] ok");
     t_topResult.clear();
+    // 瀵规瘮缁撴灉杞崲
     for (auto &item : t_compareResults) {
         auto &it = item.second;
         //#todo
@@ -191,44 +201,37 @@
 
         m_rwLock.wrlock();
         if (t_json["\"syncTpye\""].type() == Json::nullValue) {
+            //            鍚屾搴�/鐗瑰緛鏄痓ase64
+//            #todo sqlite search data from file
             auto str_tab = t_json["\"tableName\""].asString();
+            DBG("str_tab is  " << str_tab);
             m_tableName = str_tab.substr(1, str_tab.length() - 2);//.append("_fea");
+            DBG("m_tableName is  " << m_tableName);
 
-            string tet = "./syncDBClient ";
-            string str_json = writer.write(t_json);
-            tet.append("\"" + str_json.substr(0, str_json.length() - 1) + "\" ");
-            INFO(tet);
-            system(tet.c_str());
             dataMap.clear();
             try {
-                // init
-                BISTL::BiMapFeaData biMapFeaData(m_tableName);
-                auto mymap = biMapFeaData.getMap();
-                auto size = mymap->size();
-                //#todo
-                for (auto it = mymap->begin(); it != mymap->end(); it++) {
-                    string str_uuid(it->second.m_id.data());
-                    string ft(it->second.m_feature.data());
-                    string imgUrl(it->second.m_imgUrl.data());
-                    string strIdCard(it->second.m_idcard.data());
+
+                auto mymap = m_erlangDbTool->loadFaceFeaData(m_tableName);
+                DBG(m_tableName << "  db size is  " << mymap.size());
+                for (auto &item : mymap) {
+                    auto &it = item.second;
                     string str2;
-                    str2 = base64.Decode(ft.data(), ft.length());
+                    str2 = base64.Decode(it.feature.data(), it.feature.size());
                     std::vector<unsigned char> t_fea;
                     t_fea.resize(str2.size());
                     memcpy(t_fea.data(), str2.data(), str2.size());
-                    auto &test = dataMap[str_uuid];
-                    test.uuid = str_uuid;
+                    auto &test = dataMap[it.id];
+                    test.uuid = it.id;
                     test.features.push_back(t_fea);
-                    test.faceUrl = imgUrl;
-                    test.idcard = strIdCard;
+                    test.faceUrl = it.img;
+                    test.idcard = it.idcard;
+                    test.enabled = it.enable;
+                    test.monLevel = it.monLevel;
                 }
             } catch (const std::exception &e) {
                 printf("Exception:%s\n", e.what());
-                BISTL::shared_memory_object::remove(m_tableName.c_str());
             }
-            BISTL::shared_memory_object::remove(m_tableName.c_str());
             appPref.setIntData(m_tableName, 1);
-            DBG(m_tableName << " size is " << dataMap.size());
         } else {
             //#todo get sqlite3 data
             m_tableName = t_json["tableName"].asCString();

--
Gitblit v1.8.0