chenshijun
2019-04-16 080afae264fe7ff89a54886f28dff208fe5a06c4
整合代码

19个文件已修改
315 ■■■■ 已修改文件
QiaoJiaSystem/DataManagerServer/http_configserver.cpp 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/http_configserver.h 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.h 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.h 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/DataWebServer 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/FaceDetectResourcesTest 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/FaceDetectServer 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/FaceExtractServer 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/FaceSearchServer 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/VideoAnalysFromHC 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/YoloDetectClientTest 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/YoloServer 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/config.json 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/killAll.sh 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/syncDBClient 补丁 | 查看 | 原始文档 | blame | 历史
syncDBTool/ErlangDbTool.cpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -2142,9 +2142,12 @@
//        auto resType = erlangDbTool->findAllTypeInfo();
        string json = "[";
        for (auto &item : resDB) {
            //-------------------maybe delete ?------------------------
            if (item.second.tableName.find("lt_") == 0) {
                continue;
            }
            //-------------------maybe delete end----------------------
            string subJson = "{ ";
            subJson.append("\"uuid\":\"" + item.second.uuid + "\",");
            subJson.append("\"tableName\":\"" + item.second.tableName + "\",");
@@ -3029,8 +3032,19 @@
        }
    }
    if (videoStVec.size() >= 1) {
        std::string strVideoName = strPath + videoStVec[0].ToVideoName();
    std::vector<VideoName_s_t> videoStVec_;
    auto imgTm_ = AppUtil::ParseFromHypenTimeStr(imgSt.m_timeStamp);
    for (auto &item : videoStVec) {
        auto resTime_ = AppUtil::ParseFromHypenTimeStr(item.m_timeStamp);
        auto timeRes = difftime(mktime(&resTime_), mktime(&imgTm_));
        if ((timeRes < 0 && difftime(mktime(&imgTm_), mktime(&resTime_)) >= 30) || (timeRes / 60 >= 3)) {
            continue;
        }
        videoStVec_.emplace_back(item);
    }
    if (videoStVec_.size() >= 1) {
        std::string strVideoName = strPath + videoStVec_[0].ToVideoName();
        INFO("ImageName: " << imgKey << "  SingleMatchVideo: " << strVideoName);
        return strVideoName;
    } else {
@@ -3336,8 +3350,7 @@
        rule.strLine = value["strLine"].asCString();
        rule.strExLine = value["strExLine"].asCString();
        if(!value["strPerimeterObjType"].empty())
        {
        if (!value["strPerimeterObjType"].empty()) {
            rule.strPerimeterObjType = value["strPerimeterObjType"].asCString();
        }
        if (rule.strCamId.isEmpty()) {
QiaoJiaSystem/DataManagerServer/http_configserver.h
@@ -121,7 +121,7 @@
    std::string createDatabase(std::string ip, unsigned int port, std::string content, PResponse &response);
    /**
     *
     * 删除数据 底库
     * @param ip
     * @param port
     * @param content
@@ -130,23 +130,97 @@
     */
    std::string deleteDatabase(std::string ip, unsigned int port, std::string content, PResponse &response);
    /***
     * 更新数据 底库
     * @param ip
     * @param port
     * @param content
     * @param response
     * @return
     */
    std::string updateDatabase(std::string ip, unsigned int port, std::string content, PResponse &response);
    /**
     * 查询所有同步库
     * @param ip
     * @param port
     * @param content
     * @param response
     * @return
     */
    std::string findAllDatabase(std::string ip, unsigned int port, std::string content, PResponse &response);
    /**
     * 查询所有本地库
     * @param ip
     * @param port
     * @param content
     * @param response
     * @return
     */
    std::string findLocalDatabase(std::string ip, unsigned int port, std::string content, PResponse &response);
    /***
     * 上传人员
     * @param ip
     * @param port
     * @param content
     * @param response
     * @return
     */
    std::string addPerson(std::string ip, unsigned int port, std::string content, PResponse &response);
    //#todo 批量添加人员借口
    /***
     * 向同步库批量添加人员及更新人员
     * feature_addPersonTracking 分支中更新功能分离为新借口
     * @param ip
     * @param port
     * @param content
     * @param response
     * @return
     */
    std::string addPersons(std::string ip, unsigned int port, std::string content, PResponse &response);
    /***
     * 判断同步库中人员是否存在
     * @param ip
     * @param port
     * @param content
     * @param response
     * @return
     */
    std::string personIsExists(std::string ip, unsigned int port, std::string content, PResponse &response);
    /**
     * 更新同步库中的人员
     * @param ip
     * @param port
     * @param content
     * @param response
     * @return
     */
    std::string updatePersonByOldId(std::string ip, unsigned int port, std::string content, PResponse &response);
    /**
     * 删除人员
     * @param ip
     * @param port
     * @param content
     * @param response
     * @return
     */
    std::string delPerson(std::string ip, unsigned int port, std::string content, PResponse &response);
    /**
     * 加载特征
     * @param ip
     * @param port
     * @param content
     * @param response
     * @return
     */
    std::string loadFaceFeaData(std::string ip, unsigned int port, std::string content, PResponse &response);
QiaoJiaSystem/FaceDetectServer/FaceDetectServerI.h
@@ -10,6 +10,10 @@
    ~FaceDetectServerI();
    // FaceDetectServer interface
public:
    /**
     * 人脸检测
     * @return
     */
    virtual FaceDetect::Faces faceDetect(Ice::Int, Ice::Int, const std::string &, const Ice::Current &) override;
private:
@@ -19,6 +23,10 @@
    // FaceDetectServer interface
public:
    /**
     * 人脸二次属性提取
     * @return
     */
    virtual FaceDetect::ThftResult faceProperty(Ice::Int, Ice::Int, const FaceDetect::FacePos &, const std::string &, const Ice::Current &) override;
private:
QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp
@@ -62,6 +62,7 @@
    DBG("m_dbRWLocks ok");
    m_dbRWLocks_Lock.unlock();
//    ClockTimer clockTimer("compare ");
    //保护 t_compareResults
    RWLock t_rwLock;
    m_rwLock.rdlock();
@@ -80,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());
            }
@@ -123,6 +127,7 @@
    auto &t_topResult = topResult[key];
    DBG("topResult[key] ok");
    t_topResult.clear();
    // 对比结果转换
    for (auto &item : t_compareResults) {
        auto &it = item.second;
        //#todo
@@ -203,16 +208,8 @@
            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 mymap = m_erlangDbTool->loadFaceFeaData(m_tableName);
                DBG(m_tableName << "  db size is  " << mymap.size());
@@ -231,29 +228,10 @@
                    test.enabled = it.enable;
                    test.monLevel = it.monLevel;
                }
//                //#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());
//                    string str2;
//                    str2 = base64.Decode(ft.data(), ft.length());
//                    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;
//                    test.features.push_back(t_fea);
//                    test.faceUrl = imgUrl;
//                    test.idcard = strIdCard;
//                }
            } catch (const std::exception &e) {
                printf("Exception:%s\n", e.what());
//                BISTL::shared_memory_object::remove(m_tableName.c_str());
            }
            appPref.setIntData(m_tableName, 1);
//            BISTL::shared_memory_object::remove(m_tableName.c_str());
        } else {
            //#todo get sqlite3 data
            m_tableName = t_json["tableName"].asCString();
QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h
@@ -21,19 +21,35 @@
public:
    FaceDBCompareServer();
    /**
     * 本地库构造
     */
    FaceDBCompareServer(SqliteFaceEncap *);
    /***
     * 同步库构造
     */
    FaceDBCompareServer(ErlangTool::ErlangDbTool *);
    ~FaceDBCompareServer();
    virtual bool compare(std::thread::id key, AlarmData *alarmData, int topN);
    /***
     * @deprecated
     * @param key
     * @param alarmData
     * @return
     */
    bool compare(std::thread::id key, AlarmData *alarmData);
    FaceResults getTopResult(std::thread::id key);
private:
    /**
     * 加载特征
     * @param str_config
     */
    virtual void loadDBData(std::string str_config);
protected:
@@ -41,10 +57,14 @@
    std::string m_tableName;
    int fea_size;
    // 保护父类的dataMap
    RWLock m_rwLock;
    std::mutex topResultMtx;
    std::map<std::thread::id, FaceResults> topResult;
    // 保护m_dbRWLocks
    RWLock m_dbRWLocks_Lock;
    // 保护 topResult
    std::map<std::thread::id, RWLock> m_dbRWLocks;
    ErlangTool::ErlangDbTool *m_erlangDbTool;
@@ -54,8 +74,9 @@
static bool getRet(std::string startTime, std::string endTime) {
    auto crrentTime = AppUtil::getTimeSecString();
    if (crrentTime.compare(startTime) > 0 && (crrentTime.compare(endTime) < 0 || endTime == "0000-00-00 00:00:00")) {
    // 根据当前时间是否在设置的时间内或永久生效
    if (crrentTime.compare(startTime) > 0 && (crrentTime.compare(endTime) < 0
                                              || endTime == "0000-00-00 00:00:00")) {
        return true;
    }
    return false;
QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp
@@ -123,14 +123,25 @@
}
//#todo 优化
/**
 *
 * @param feature 需要对比的特征
 * @param info_json 需要插入数据库的json字段
 * @param topN 获取前几位
 * @param score 对比的阈值
 * @return
 */
::FaceSearch::FaceResults
FaceFeatureSearchServerI::faceSearchTopN(const ::FaceSearch::Data &feature, const ::std::string &info_json,
                                         ::Ice::Int topN, ::Ice::Float score, const ::Ice::Current &) {
    ClockTimer clockTimer("faceSearchTopN  " + to_string(score) + "  :");
    INFO("faceSearchTopN start");
    // 获取当前线程id
    thread::id key = std::this_thread::get_id();
    ::FaceSearch::FaceResults results;
    FaceResults t_TableCompareResult;
    // 进行对比的数据结构
    AlarmData featureData;
    featureData.num = topN;
    featureData.feature.resize(feature.size());
@@ -142,14 +153,19 @@
    if (reader.parse(info_json, value)) {
        //#todo
        m_rwLock.rdlock();
        // 特征转化为base64存入到json中
        std::string feature_base64;
        feature_base64 = base64.Encode(feature.data(), feature.size());
        value["FaceFeature"] = feature_base64;
        //---------------------------
        DBG("auto &it : m_faceFCMAP start " << m_faceFCMAP.size());
        //#todo lock
        // 遍历不同的底库进行比对
        for (auto &it : m_faceFCMAP) {
            auto &t_FaceFC = it.second;
            auto t_tableInfo = m_tableType[it.first];
            // 获取底库的报警状态
            bool ret = getRet(t_tableInfo.startTime, t_tableInfo.endTime);
            if (ret) {
                string t_alarmRet = t_tableInfo.bwType;
@@ -157,10 +173,12 @@
                //#todo 非同步库是否需要比较?
                DBG("m_faceFCMAP compare start " << it.first);
                // 对比
                t_FaceFC->compare(key, &featureData, topN);
                DBG("m_faceFCMAP compare end " << it.first);
                // 根据当前线程id获取对比结果
                auto t_results = t_FaceFC->getTopResult(key);
                // 对比结果转换
                for (auto &t_item : t_results) {
                    t_item.tableName = it.first;
                    t_item.alarmRet = t_alarmRet;
@@ -176,6 +194,7 @@
        DBG("t_TableCompareResult size" << t_TableCompareResult.size());
        //sort_all_results
        // 排序
        for (auto itor = t_TableCompareResult.begin(); itor != t_TableCompareResult.end(); ++itor) {
            float new_confidence = itor->confidence;
            auto rtTR = results.rbegin();
@@ -194,6 +213,7 @@
                ERR("topResult is null");
            }
            auto itTR(rtTR.base());
            // 数据转化
            ::FaceSearch::FaceResult t_faceCR;
            t_faceCR.id = itor->id;
            t_faceCR.uuid = itor->uuid;
@@ -208,9 +228,10 @@
            results.insert(itTR, t_faceCR);
        }
        bool retface = true;
//        cout << __FUNCTION__ << " -> " << __LINE__ << " ->  " << results.size() << endl;
        //#todo send message
        if (results.size() > 0) {
            // 根据传入的对比阈值做筛选
            // 本分支只保存了第一个对比结果
            for (auto &item : results) {
                //#todo 得分比较,应该在compare中进行
                if (item.confidence < score) {
@@ -226,15 +247,6 @@
                    break;
                }
                value["personId"] = item.uuid.size() > 0 ? item.uuid : "";//关联底库人员id,人脸id
//                string tmp_tableName = item.tableName;
//                if (tmp_tableName.find("lt_") == 0) {
//                    tmp_tableName = tmp_tableName.insert(tmp_tableName.find("lt_") + 3, "::");
//                    value["BaseName"] = tmp_tableName;//关联底库表名
//                } else {
//                    value["BaseName"] = item.tableName.size() > 0 ? item.tableName : "";//关联底库表名
//                }
                value["BaseName"] = item.tableName.size() > 0 ? item.tableName : "";//关联底库表名
                value["likePer"] = item.confidence > 0 ? item.confidence : 0.0;
@@ -244,10 +256,8 @@
                value["personIsHub"] = item.alarmRet.size() > 0 ? item.alarmRet : "4";
                auto str_uuid = value["Id"].asString();
//                DBG(value.toStyledString());
                cout << __FUNCTION__ << " -> " << __LINE__ << " ->  " << "value.toStyledString()  "
                     << value.toStyledString() << "\n score   " << score << endl;
                DBG("value.toStyledString()  " << value.toStyledString() << "\n score   " << score);
//                DBG("score  " << score);
                retface = pManagerEsDB.insertData("videopersons", "perVideoPicture", value.toStyledString(),
                                                  str_uuid);
@@ -258,37 +268,35 @@
            value["personIsHub"] = "4";
            value["likePer"] = 0.0;
            DBG(value.toStyledString());
//            cout << __FUNCTION__ << " -> " << __LINE__ << " ->  " << "value.toStyledString()  "
//                 << value.toStyledString() << endl;
            retface = pManagerEsDB.insertData("videopersons", "perVideoPicture", value.toStyledString(),
                                              str_uuid);
        }
        if (!retface) {
            ERR("insert error");
        } else {
            cout << __FUNCTION__ << " -> " << __LINE__ << " ->  " << "retface  " << retface << endl;
            ERR("retface  " << retface);
        };
    } else {
        ERR("json is error" << info_json);
    }
//    for (auto &item : t_tables) {
//        DBG(item);
//    }
    return results;
}
bool FaceFeatureSearchServerI::loadFeatureData(FaceFeatureSearchServerI *faceFea) {
    // 加载底库数据
    ErlangTool::map_TabDataCache dataBaseCache = faceFea->m_erlangDbTool.findAllDatabase();
    if (dataBaseCache.size() < 0 && faceFea->m_retUpdatePthread) {
        // 这里进不来吧?
        faceFea->m_retUpdatePthread = false;
        //控制下方线程只启动一次
        std::thread thd(dataUpdate, faceFea);
        thd.detach();
    }
    // 获取表信息
    auto typeInfoCache = faceFea->m_erlangDbTool.findAllTypeInfo();
    //清除旧数据
    faceFea->m_tableType.clear();
    string str_config = faceFea->m_erlangDbTool.getConfigJsonString();
@@ -368,6 +376,7 @@
    faceFea->m_inTime = getTimeLong();
    if (faceFea->m_retUpdatePthread) {
        faceFea->m_retUpdatePthread = false;
        //控制下方线程只启动一次
        std::thread thd(dataUpdate, faceFea);
//        faceFea->m_erlangDbTool.test(faceFea, erlangCallBackFunc);
@@ -418,6 +427,10 @@
//    pthread_mutex_unlock(&(func_cond_mutex));
//}
/**
 * 等待底库加载完成,并等待信号触发新的数据刷新
 * @param faceFea
 */
void FaceFeatureSearchServerI::dataUpdate(FaceFeatureSearchServerI *faceFea) {
    long inTime = faceFea->m_inTime;
    // modify all db ready start update, <10s
QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.h
@@ -24,6 +24,8 @@
//};
static bool t_live_ret = true;
//全局的信号量,如果数据刷新延迟过高可以改为使用nsq消息队列。
static pthread_cond_t func_cond(PTHREAD_COND_INITIALIZER);
static pthread_mutex_t func_cond_mutex(PTHREAD_MUTEX_INITIALIZER);
@@ -39,44 +41,71 @@
    virtual ~FaceFeatureSearchServerI();
public:
    /**
     * @deprecated
     * @return
     */
    virtual ::FaceSearch::FaceResults faceSearchMax(const ::FaceSearch::Data &, const ::std::string &,
                                                    const ::Ice::Current & = ::Ice::emptyCurrent);
    /***
     * 对比获取第n大的人员
     * @return
     */
    virtual ::FaceSearch::FaceResults
    faceSearchTopN(const ::FaceSearch::Data &, const ::std::string &, ::Ice::Int, ::Ice::Float,
                   const ::Ice::Current & = ::Ice::emptyCurrent);
private:
    /**
     * @deprecated
     * @param nodeName
     * @param cookie
     * @return
     */
    bool initErlang(std::string nodeName, std::string cookie);
    //#todo delete cache
    //#todo loadData
    /**
     * 加载人脸属性
     * @param faceFea
     * @return
     */
    static bool loadFeatureData(FaceFeatureSearchServerI *faceFea);
    /**
     * 数据更新线程,有信号触发才会更新
     * @param faceFea
     */
    static void dataUpdate(FaceFeatureSearchServerI *faceFea);
    /***
     * 等待底库表加载成功
     * @param faceFea
     * @param loop
     */
    static void waitTables(FaceFeatureSearchServerI *faceFea, int loop = -1);
//    void erlangCallBackFunc(std::string);
private:
    long m_inTime;
    // 特征对比类
    std::map<std::string, FaceDBCompareServer *> m_faceFCMAP;
    // 底库类型,生效时间等
    std::map<std::string, TableInfo> m_tableType;
    // 对 m_faceFCMAP 加读写锁
    // 当对比时,数据刷新会等待
    RWLock m_rwLock;
    ErlangTool::ErlangDbTool m_erlangDbTool;
    SqliteFaceEncap m_sqliteFaceEncap;
    std::mutex m_mutex;
    bool m_retUpdatePthread;
    Base64 base64;
//    Ice::ObjectPrx base_FaceMemoryData;
//    IceRpcClient<::FaceSearch::FaceMemoryDataPrx> m_faceMemoryClient;
//    ::FaceSearch::FaceMemoryDataPrx serverFaceMemoryData;
//    func_cond_mutex(PTHREAD_MUTEX_INITIALIZER), func_cond(PTHREAD_COND_INITIALIZER)
    EsDBTool pManagerEsDB;//(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort"));
};
QiaoJiaSystem/build/DataWebServer
Binary files differ
QiaoJiaSystem/build/FaceDetectResourcesTest
Binary files differ
QiaoJiaSystem/build/FaceDetectServer
Binary files differ
QiaoJiaSystem/build/FaceExtractServer
Binary files differ
QiaoJiaSystem/build/FaceSearchServer
Binary files differ
QiaoJiaSystem/build/VideoAnalysFromHC
Binary files differ
QiaoJiaSystem/build/YoloDetectClientTest
Binary files differ
QiaoJiaSystem/build/YoloServer
Binary files differ
QiaoJiaSystem/build/config.json
@@ -1,26 +1,26 @@
{
  "mainServerIp": "192.168.1.182",
  "mainServerPort": "3697",
  "logPath": "/home/basic/work/log/",
  "DEV_ID": "DSVAD010120181119",
  "ES_IP": "192.168.1.182",
  "ES_PORT": 9200,
  "FaceSeachSleepTime": 60,
  "TotalLoadSize": "500",
  "buildAddr": "/home/basic/Apps/QiaoJiaSystem/build/",
  "cutPath": "/home/basic/work/qiaojia/cut",
  "erlCookie": "",
  "erlFatherNode": "",
  "erlNode": "",
  "erlPath": "",
  "loadPath": "/home/basic/work/qiaojia/load",
  "localPasswd": "123456",
  "netIfName": "enp3s0",
  "srsAddr": "rtmp://192.168.1.122:1934/live/",
  "webPort": 11111,
  "redis_ip": "127.0.0.1",
  "redis_buf_len": 750,
  "encode_thread_num": 2,
  "FaceDetectionSampleSize": 720,
  "clusterID" : "sssss"
   "DEV_ID" : "DSVAD010120181119",
   "ES_IP" : "192.168.1.182",
   "ES_PORT" : 9200,
   "FaceDetectionSampleSize" : 720,
   "FaceSeachSleepTime" : 60,
   "TotalLoadSize" : "500",
   "buildAddr" : "/home/basic/Apps/QiaoJiaSystem/build/",
   "clusterID" : "sssss",
   "cutPath" : "/home/basic/work/qiaojia/cut",
   "encode_thread_num" : 2,
   "erlCookie" : "",
   "erlFatherNode" : "",
   "erlNode" : "",
   "erlPath" : "",
   "loadPath" : "/home/basic/work/qiaojia/load",
   "localPasswd" : "123456",
   "logPath" : "/home/basic/work/log/",
   "mainServerIp" : "192.168.1.182",
   "mainServerPort" : "3697",
   "netIfName" : "enp3s0",
   "redis_buf_len" : 750,
   "redis_ip" : "127.0.0.1",
   "srsAddr" : "rtmp://192.168.1.122:1934/live/",
   "webPort" : 11111
}
QiaoJiaSystem/build/killAll.sh
old mode 100644 new mode 100755
QiaoJiaSystem/build/syncDBClient
Binary files differ
syncDBTool/ErlangDbTool.cpp
@@ -1621,6 +1621,7 @@
            "Select a.uuid as id ,a.faceUrl as img,a.feature,b.idCard as idcard,b.enabled,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);");
        //Select a.uuid as id ,a.faceUrl as img,a.feature,b.idCard as idcard,b.enabled,b.monitorLevel from '0cd82a8b-5285-5737-ab19-8c07247c797e_fea' as a ,'0cd82a8b-5285-5737-ab19-8c07247c797e' 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()) {