pansen
2019-01-28 8bfd4cc90f25f1800eb5e61d50d4fa74854e0f2a
布控上传修改
2个文件已添加
9个文件已修改
698 ■■■■ 已修改文件
QiaoJiaSystem/DataManagerServer/http_configserver.cpp 81 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/http_configserver.h 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/uploadDataInterface.md 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/web-server接口.txt 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/StructureApp/AppPipeController.h 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/StructureApp/PerimeterElement.cpp 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/DataWebServer 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/config.json 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/build/configjson说明.md 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
syncDBTool/ErlangDbTool.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -1873,6 +1873,8 @@
        std::string Enabled = value["enabled"].asString();
        Enabled = Enabled.empty() ? "1" : Enabled;
        std::string createBy = value["createBy"].asString();
        bool ret = false;
        FieldValues fieldValues;
        fieldValues.insert(std::make_pair("uuid", Uuid));
@@ -1908,6 +1910,10 @@
            return "";
        }
        {
//            #todo ä¸Šä¼ ã€‚仅黑名单。
//            #TODO æ ¹æ®createBy判断是否需要上传
        }
        erlangDbTool->sendMessage();
        std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
@@ -1941,6 +1947,8 @@
        std::string TableName = value["TableName"].asString();
        int SyncType = atoi(value["SyncType"].asCString());
        std::string createBy = value["createBy"].asString();
        bool ret = false;
        if (TableType == "person") {
            if (SyncType == 1) {
@@ -1962,6 +1970,10 @@
            return "";
        }
        {
//            #todo ä¸Šä¼ ã€‚仅黑名单。
//            #TODO æ ¹æ®createBy判断是否需要上传
        }
        erlangDbTool->sendMessage();
        std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
        return str_result;
@@ -2051,7 +2063,7 @@
            subJson.append("\"IsSync\":\"" + item.uploadFlag + "\",");
            subJson.append("\"threshold\":\"" + item.cmpThreshold + "\",");
            subJson.append("\"create_by\":\"" + item.createBy + "\",");
            subJson.append("\"enabled\":\"" + item.enabled + "\",");
            subJson.append("\"enabled\":\"" + item.enabled + "\"");
            subJson.append("},");
            json.append(subJson);
        }
@@ -2092,6 +2104,7 @@
        std::string SyncType = value["SyncType"].asString();
        std::string TableId = value["TableId"].asString();
        std::string BwType = value["BwType"].asString();
        std::string createBy = value["createBy"].asString();
        std::string UploadFlag = "-1";
        if (SyncType == "1") {
@@ -2108,12 +2121,12 @@
        DBG("content: " << TableName << "," << img_url << "," << idcard << "," << strUUID << "," << UploadFlag << ","
                        << Enabled << "," << TableType << "," << SyncType << "," << TableId);
        cv::Mat image;
        getMat(img_url, img_base64, image);
        if (image.empty()) {
            response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"not found img\"}");
            return "";
//            return "{\"error\":\"not found img\"}";
        }
        thread::id pid = std::this_thread::get_id();
@@ -2181,15 +2194,15 @@
//            usleep(100);
            erlangDbTool->sendMessage();
            if (UploadFlag == "1") {
            if (createBy == "analyDev" && UploadFlag == "1") {
//                #todo db queue upload to server
                if (BwType == "0") {
                    UploadPersonToUserCenter(img_url, idcard, strUUID, feature_base64);
                } else {
                    //todo send person to backServer
//#TODO é»‘名单上传
                } else if (BwType == "1") {
                    UploadPersonToMonitorCenter(img_url, idcard, strUUID, feature_base64, TableId, Enabled);
                }
            } else {
//                ä¸ä¸Šä¼ 
            }
            return str_result;
        } else {
@@ -2338,6 +2351,10 @@
//                } else {
//                    //todo send person to backServer
////#TODO é»‘名单上传
            {
//            #todo ä¸Šä¼ ã€‚仅黑名单。
//            #TODO æ ¹æ®createBy判断是否需要上传
            }
//                }
//            }
            return str_result;
@@ -2417,10 +2434,11 @@
devHttpServer_c::UploadPersonToUserCenter(string &img_url, string &idcard, string &strUUID, string &feature_base64) {
    string str_serIp = GET_STR_CONFIG("mainServerIp");
    string str_serPort = GET_STR_CONFIG("mainServerPort");
    string str_serUrl = GET_STR_CONFIG("mainServerrUrl");
//  string sendUrl = "192.168.1.203:3697/addPerson/uploadToTemporary";
    string sendUrl = str_serIp;
    sendUrl.append(":").append(str_serPort).append("/addPerson/uploadToTemporary");
    sendUrl.append(":").append(str_serPort).append(str_serUrl);
    Json::Value perInfos;
    Json::Value perInfo;
@@ -2434,6 +2452,39 @@
    perInfo["photos"] = img_url;
    perInfo["featureBase64"] = feature_base64;
    perInfo["cardId"] = idcard;//图片描述
    perInfos.append(perInfo);
    thread sendPerson(uploadServer, this, sendUrl, perInfos.toStyledString());
    sendPerson.detach();
}
void
devHttpServer_c::UploadPersonToMonitorCenter(string &img_url, string &idcard, string &strUUID, string &feature_base64,
                                             string &strTableId, string &strControl) {
//  string sendUrl = "192.168.1.203:3697/addPerson/uploadToTemporary";
    string sendUrl = GET_STR_CONFIG("addFromAnalyUrl");
    if (sendUrl.empty()) {
        ERR("");
        return;
    }
    Json::Value perInfos;
    Json::Value perInfo;
//                #todo get string from config.json file
    perInfo["id"] = strUUID;
    perInfo["distributionIds"] = m_cluster_id;
    perInfo["distributionNames"] = m_cluster_name;
    auto rec = db_c.searchConfigTableWithinServerInfo();
    perInfo["deviceId"] = rec.dev_id.toStdString();
    perInfo["photos"] = img_url;
    perInfo["featureBase64"] = feature_base64;
    perInfo["cardId"] = idcard; // å›¾ç‰‡æè¿°
    perInfo["taskId"] = strTableId; // åº•库id
    perInfo["isControl"] = strControl; // å¸ƒæŽ§çŠ¶æ€ï¼ˆ0为未布控,1为已布控)
    perInfos.append(perInfo);
    thread sendPerson(uploadServer, this, sendUrl, perInfos.toStyledString());
@@ -2469,6 +2520,7 @@
                    subJson.append("\"uuid\":\"" + item.second.uuid + "\",");
                    subJson.append("\"tableName\":\"" + TableName + "\",");
                    subJson.append("\"idcard\":\"" + t_faceInfoCache[item.second.uuid].idCard + "\",");
                    subJson.append("\"enable\":\"" + item.second.enable + "\",");
                    subJson.append("\"imgUrl\":\"" + item.second.faceurl + "\"");
//                subJson.append("\"feature\":\"" + item.second.feature + "\",");
                    //#todo modifysvn upda  svn comm
@@ -2490,6 +2542,7 @@
                    subJson.append("\"uuid\":\"" + item.second.id + "\",");
                    subJson.append("\"tableName\":\"" + TableName + "\",");
                    subJson.append("\"idcard\":\"" + item.second.idcard + "\",");
                    subJson.append("\"enable\":\"" + item.second.enable + "\",");
                    subJson.append("\"imgUrl\":\"" + item.second.img + "\"");
//                subJson.append("\"feature\":\"" + item.second.feature + "\",");
                    //#todo modifysvn upda  svn comm
@@ -2541,6 +2594,8 @@
        std::string UploadFlag = value["IsSync"].asString();
        std::string CmpThreshold = value["threshold"].asString();
        std::string Enabled = value["enabled"].asString();
        Enabled = Enabled.empty() ? "1" : Enabled;
        std::string createBy = value["createBy"].asString();
        bool ret = false;
        //#更新底库管理表
@@ -2580,6 +2635,10 @@
            return "";
        }
        {
//            #todo ä¸Šä¼ ã€‚仅黑名单。
//            #TODO æ ¹æ®createBy判断是否需要上传
        }
        erlangDbTool->sendMessage();
        std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
@@ -2607,6 +2666,7 @@
    if (reader.parse(content, value)) {
        std::string TableName = value["TableName"].asString();
        std::string strUUID = value["uuid"].asString();
        std::string createBy = value["createBy"].asString();
        bool ret = false;
        if (TableName.find("lt_") == 0) {
@@ -2614,7 +2674,10 @@
        } else {
            ret = erlangDbTool->delPerson(strUUID, TableName);
        }
        {
//            #todo ä¸Šä¼ ã€‚仅黑名单。
//            #TODO æ ¹æ®createBy判断是否需要上传
        }
        erlangDbTool->sendMessage();
        std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
        return str_result;
QiaoJiaSystem/DataManagerServer/http_configserver.h
@@ -192,6 +192,9 @@
    void devHttpServer_c::UploadPersonToUserCenter(string &img_url, string &idcard, string &strUUID,
                                                   string &feature_base64);
    void devHttpServer_c::UploadPersonToMonitorCenter(string &img_url, string &idcard, string &strUUID,
                                                      string &feature_base64, string &strTableId, string &strControl);
    void
    addPersonMToDB(const string &TableName, const string &img_url, const string &SyncType, const string &feature_base64,
                   const Features &faceResults, string &idcard, string &strUUID, bool &ret_addPerson) const;
QiaoJiaSystem/DataManagerServer/uploadDataInterface.md
New file
@@ -0,0 +1,98 @@
----
#1.调用创建布控报警底库任务
192.168.1.184:3699/addTaskByNode
    {
        "TableName": "test",                //表名
        "SyncType": "1",                    //同步类型  1同步/0本地库
        "StartTime": "2018-01-01 01:02:00", //开始时间
        "EndTime": "2018-12-31 01:02:00"    //结束时间
        "IsSync":"",                           //  æ˜¯å¦åŒæ­¥åˆ°åŽå°ä¸´æ—¶åº“ 1 æ˜¯ 0 ä¸æ˜¯
        "threshold":0-100,                    // å›¾ç‰‡é˜ˆå€¼   0-100
        "enabled":"1",                      // æ˜¯å¦å¯ç”¨  1启用 0未启用
        "uuid":"uuid-底库id",
        "cluId":"",
        "devId":""
    }
//表类型为 person çš„æ•°æ®ç›®å‰è°ƒç”¨å¸ƒæŽ§  "TableType": "person",
//黑白名单  1黑名单 "BwType": "1",   å¸ƒæŽ§åªè¦é»‘名单
----
#2.调用上传布控人员接口
   åˆ†æžè®¾å¤‡ä¸Šä¼ å¸ƒæŽ§äººå‘˜
    path:ip:3699/data/api-c/taskUser/addFromAnaly
    å‚数:
    userId     äººå‘˜ID(必需)
    userName   å§“名 ï¼ˆå¯ç©ºï¼‰
    idCard     èº«ä»½è¯å·ï¼ˆå¯ä»¥ä¸å‡†ï¼‰
    sex        (0为女,1为男) æ€§åˆ«ï¼ˆå¯ç©ºï¼‰
    mobile     æ‰‹æœºå·ï¼ˆå¯ç©ºï¼‰
    taskId     åº•库id
    imgUrl     å›¾ç‰‡çš„fstdfs路径(必需)
    featureBase64   å›¾ç‰‡çš„特征值(必需)  ï¼ˆä»¥base64格式穿过来)
    isControl   å¸ƒæŽ§çŠ¶æ€ï¼ˆ0为未布控,1为已布控)
    è¯·æ±‚类型:httpMethod = "POST"(json)
----
#3.人员管理上传人员接口
    äººå‘˜ID(必需): id   ä¾‹å¦‚:PSSVR010120181208175534014
    å§“名(可空)  name
    èº«ä»½è¯å·ï¼ˆå¯ä»¥ä¸å‡†ï¼‰cardId
    æ€§åˆ«ï¼ˆå¯ç©ºï¼‰gender
    æ‰‹æœºå·ï¼ˆå¯ç©ºï¼‰phone
    é›†ç¾¤id(必需)distributionIds
    é›†ç¾¤åç§°ï¼ˆå¿…需)distributionNames
    å›¾ç‰‡çš„fstdfs路径(必需)photos
    å›¾ç‰‡çš„特征值(必需)featureBase64  ï¼ˆä»¥base64格式穿过来)
    æ•°æ®ç±»åž‹ï¼Œæ²¡æ ‡æ³¨çš„都是字符串
    æ³¨æ„ä¼ è¾“时的驼峰式命名
传参举例:
        [
            {
                "name":“张三”,
                "cardId":"130430199809090876",
                "gender":"男",
                "phone":"13700678954",
                "deviceId":"DSPAD010120181101",
                â€distributionIds“:"fcjaw-soifaw-2134-432",
                "distributionNames":"pad1",
                "photos":"group1/M00/01/90/wKgBy1wLa-qAA5cJAABHxJUyH0A935.jpg",
                "featureBase64  ":"kQZbUt48zxqUQfwv/r2mYfCz/VU5K7lg3KIgBdrc/+=="
            },
            {
                "name":“里斯”,
                "cardId":"130430199809090876",
                "gender":"男",
                "phone":"13700678954",
                â€distributionIds“:"fcjaw-soifaw-2134-432",
                "distributionNames":"pad1",
                "photos":"group1/M00/01/90/wKgBy1wLa-qAA5cJAABHxJUyH0A935.jpg",
                "featureBase64  ":"kQZbUt48zxqUQfwv/r2mYfCz//+=="
            }
        ]
请求方法为post,以json格式传输,支持批量上传
目前的ip为203
接口路径:IP:3697/addPerson/uploadToTemporary
---
QiaoJiaSystem/DataManagerServer/web-server½Ó¿Ú.txt
@@ -393,29 +393,36 @@
    "error": ["erlang is null"]
}
#TODO å¸ƒæŽ§
创建底库 createDatabase
下发:
{
    "createBy","",                        //创建者/分析设备analyDev.布控平台conCemter
    "TableType": "person",              //表类型person/car
    "TableName": "test",                //表名
    "SyncType": "1",                    //同步类型1同步/0本地库
    "BwType": "1",                      //黑白名单1黑名单/0白名单
    "SyncType": "1",                    //同步类型  1同步/0本地库
    "BwType": "1",                      //黑白名单  1黑名单/0白名单
    "StartTime": "2018-01-01 01:02:00", //开始时间
    "EndTime": "2018-12-31 01:02:00"    //结束时间
    "IsSync":"",                           //  æ˜¯å¦åŒæ­¥åˆ°åŽå°ä¸´æ—¶åº“ 1 æ˜¯ 0 ä¸æ˜¯
    "threshold":0-100,                        // å›¾ç‰‡é˜ˆå€¼   0-100
    "enabled":"1",                      // æ˜¯å¦å¯ç”¨  1启用 0未启用
    "uuid":"uuid-底库id"
}
返回:
{
    "results": "1" //0失败1成功
    "results": "1", //0失败1成功
}
错误:
{
    "error": ["erlang is null"||"err_json"]
    "error": "erlang is null/err_json/底库已存在"
}
#TODO å¸ƒæŽ§
更新底库 updateDatabase
下发:
{
    "createBy","",                        //创建者/分析设备analyDev.布控平台conCemter
    "uuid":"",                          //表uuid
    "TableType": "person",              //表类型person/car
    "TableName": "test",                //表名
@@ -423,19 +430,26 @@
    "BwType": "1",                      //黑白名单1黑名单/0白名单
    "StartTime": "2018-01-01 01:02:00", //开始时间
    "EndTime": "2018-12-31 01:02:00"    //结束时间
    "IsSync":"",                           //是否同步到后台临时库 1 æ˜¯ 0 ä¸æ˜¯
    "threshold":0-100,                    // å›¾ç‰‡é˜ˆå€¼   0-100
    "enabled":"1"                        // æ˜¯å¦å¯ç”¨  1启用 0未启用
}
// æ›´æ–° éž null å­—段值
// åœæ­¢å¯ç”¨æ—¶ï¼Œè¿™è¾¹ åªä¼šä¼   {"enabled":"0","uuid":""},所以需要上面的条件
返回:
{
    "results": "1" //0失败1成功
}
错误:
{
    "error": ["erlang is null"||"err_json"]
    "error": "erlang is null/err_json"
}
#TODO å¸ƒæŽ§
删除底库 deleteDatabase
下发:
{
    "createBy","",            //创建者/分析设备analyDev.布控平台conCemter
    "uuid":"",              //表uuid
    "TableType": "car",     //表类型person/car
    "TableName": "test2",   //表名
@@ -447,87 +461,26 @@
}
错误:
{
    "error": ["erlang is null"||"err_json"]
    "error": "erlang is null/err_json/底库已存在"
}
#删除修改表时,表名不加 lt_;需要传SyncType å­—段
#删除修改添加查询底库人员数据时,需要底库名称加  lt_
# åˆ é™¤ä¿®æ”¹æ·»åŠ æŸ¥è¯¢åº•åº“äººå‘˜æ•°æ®æ—¶,需要底库名称加  lt_
查找同步底库 findAllDatabase
下发:
返回:
[{
    "uuid": "e92a005e-fc19-56b5-8a23-53570bc270ae", //表uuid
    "tableName": "test",                            //表名
    "tableType": "person",                          //表类型
    "bwType": "1",                                  //黑白名单类型
    "start_time": "2018-01-01 01:02:00",            //开始时间
    "end_time": "2018-12-31 01:02:00"               //结束时间
}]
错误:
{
    "error": "erlang is null"
}
查找同步底库 findLocalDatabase
下发:无
返回:
[{
    "uuid": "e92a005e-fc19-56b5-8a23-53570bc270ae", //表uuid
    "tableName": "test",                            //表名
    "tableType": "person",                          //表类型
    "bwType": "1",                                  //黑白名单类型
    "start_time": "2018-01-01 01:02:00",            //开始时间
    "end_time": "2018-12-31 01:02:00"               //结束时间
}]
错误:
{
    "error": "erlang is null"
}
#d
加载底库数据 loadFaceFeaData
#TODO å¸ƒæŽ§
添加人员 addPerson  ï¼ˆimg_url和img_base64二选一)
下发:
{
    "TableName":"test"  //表名
}
返回:
[{
        "uuid": "00b429d6-3746-57b9-8123-0dbf134731d2",         //UUID
        "tableName": "test",                                    //表名
        "idcard": "123456789012345678",                         //身份证号
        "imgUrl": "http://192.168.1.188/group1/M00/00/01/wKgBvFuOcuCAbYeQAB86k1llhSw841.jpg"
    },
    {
        "uuid": "0148cb5c-2232-5b02-9a00-f1f9a6b71de7",
        "tableName": "test",
        "idcard": "123456789012345678",
        "imgUrl": "http://192.168.1.188/group1/M00/00/01/wKgBvFuOcuCADeQUABVsWlPEN7w947.jpg"
    },
    {
        "uuid": "01f20455-32bf-5c6e-b7b8-dea1395049a0",
        "tableName": "test",
        "idcard": "123456789012345678",
        "imgUrl": "http://192.168.1.188/group1/M00/00/01/wKgBvFuOct-Aaz39ACP45aaRJUY002.jpg"
    }
]
错误:
{
    "error": ["erlang is null"||"err_json"]
}
添加或者更新人员 addPerson
下发:
{
    "createBy","",                            //创建者/分析设备analyDev.布控平台conCemter
    "enabled":"1",                      // æ˜¯å¦å¯ç”¨  1启用 0未启用
    "uuid": "",             //添加人员时请为空""
    "TableName": "test",    //表名
    "img_url ": "http: //192.168.1.188/group1/M00/00/01/wKgBvFuOcuGADRA_ABzanOgXxUE975.jpg",
    "idcard : 123456789012345678",  //身份证id
    "img_base64 ": ""               //图片base64
    "TableId": "test",    //表id
    "TableName":"",          //表名
    "TableType":"person",         //person
    "BwType":"",           //黑白名单1黑名单/0白名单
    "SyncType":"1",                    //同步类型1同步/0本地库
    "img_url":"http: //192.168.1.188/group1/M00/00/01/wKgBvFuOcuGADRA_ABzanOgXxUE975.jpg",
    "idcard":"123456789012345678",  //身份证描述
    "img_base64": ""               //图片base64码
}
返回:
{
@@ -539,12 +492,116 @@
    "error": ["erlang is null"||"err_json"]
}
#TODO å¸ƒæŽ§
更新人员 updatePerson
下发:
{
    "createBy","",                            //创建者/分析设备analyDev.布控平台conCemter
    "enabled":"1",                      // æ˜¯å¦å¯ç”¨  1启用 0未启用
    "uuid": "",
    "TableId": "test",    //表id
    "TableName":"",          //表名
    "TableType":"person",
    "BwType":"",                    //黑白名单1黑名单/0白名单
    "SyncType":"1",                 //同步类型1同步/0本地库
    "img_url":"http: //192.168.1.188/group1/M00/00/01/wKgBvFuOcuGADRA_ABzanOgXxUE975.jpg",
    "idcard":"123456789012345678",  //身份证id
    "img_base64": ""               //图片base64码
}
返回:
{
    "uuid": "82ee3b83-da2c-5d18-8cfa-f15e3ec4c9d4",
    "img_url": "http://192.168.1.188/group1/M00/00/01/wKgBvFuOcuGADRA_ABzanOgXxUE975.jpg"
}
错误:
{
    "error": ["erlang is null"||"err_json"]
}
#TODO å¸ƒæŽ§
查找同步底库 findAllDatabase
下发:
返回:
[{
    "uuid": "e92a005e-fc19-56b5-8a23-53570bc270ae", //表uuid
    "tableName": "test",                            //表名
    "tableType": "person",                          //表类型
    "bwType": "1",                                  //黑白名单类型
    "start_time": "2018-01-01 01:02:00",            //开始时间
    "end_time": "2018-12-31 01:02:00",              //结束时间
    "IsSync":"",                           //是否同步到后台临时库 1 æ˜¯ 0 ä¸æ˜¯
    "threshold":0-100,                    // å›¾ç‰‡é˜ˆå€¼   0-100
    "enabled":"1",                      // æ˜¯å¦å¯ç”¨  1启用 0未启用
    "createBy",""                        //创建者/分析设备analyDev.布控平台conCemter
}]
错误:
{
    "error": "erlang is null"
}
#TODO å¸ƒæŽ§
查找同步底库 findLocalDatabase
下发:无
返回:
[{
    "uuid": "e92a005e-fc19-56b5-8a23-53570bc270ae", //表uuid
    "tableName": "test",                            //表名
    "tableType": "person",                          //表类型
    "bwType": "1",                                  //黑白名单类型
    "start_time": "2018-01-01 01:02:00",            //开始时间
    "end_time": "2018-12-31 01:02:00",              //结束时间
    "IsSync":"",                           //是否同步到后台临时库 1 æ˜¯ 0 ä¸æ˜¯
    "threshold":0-100,                    // å›¾ç‰‡é˜ˆå€¼   0-100
    "enabled":"1",                      // æ˜¯å¦å¯ç”¨  1启用 0未启用
    "createBy",""                        //创建者/分析设备analyDev.布控平台conCemter
}]
错误:
{
    "error": "erlang is null"
}
#TODO å¸ƒæŽ§
加载底库数据 loadFaceFeaData
下发:
{
    "TableName":"test"  //表名
}
返回:
[{
        "uuid": "00b429d6-3746-57b9-8123-0dbf134731d2",         //UUID
        "tableName": "test",                                    //表名
        "idcard": "123456789012345678",                         //身份证号
        "enabled":"1",                      // æ˜¯å¦å¯ç”¨  1启用 0未启用
        "imgUrl": "http://192.168.1.188/group1/M00/00/01/wKgBvFuOcuCAbYeQAB86k1llhSw841.jpg"
    },
    {
        "uuid": "0148cb5c-2232-5b02-9a00-f1f9a6b71de7",
        "tableName": "test",
        "idcard": "123456789012345678",
        "enabled":"1",                      // æ˜¯å¦å¯ç”¨  1启用 0未启用
        "imgUrl": "http://192.168.1.188/group1/M00/00/01/wKgBvFuOcuCADeQUABVsWlPEN7w947.jpg"
    },
    {
        "uuid": "01f20455-32bf-5c6e-b7b8-dea1395049a0",
        "tableName": "test",
        "idcard": "123456789012345678",
        "enabled":"1",                      // æ˜¯å¦å¯ç”¨  1启用 0未启用
        "imgUrl": "http://192.168.1.188/group1/M00/00/01/wKgBvFuOct-Aaz39ACP45aaRJUY002.jpg"
    }
]
错误:
{
    "error": ["erlang is null"||"err_json"]
}
#TODO å¸ƒæŽ§
添加或者更新人员 delPerson
下发:
{
    "TableId": "test",    //表id
    "uuid": "",
    "TableName": "test"    //表名
    "createBy","",           //创建者/分析设备analyDev.布控平台conCemter
}
返回:
{
QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp
@@ -107,8 +107,12 @@
                //#todo éžåŒæ­¥åº“是否需要比较?
                DBG("m_faceFCMAP compare start " << it.first);
//                å¯¹æ¯”分数,摄像机分数和布控库分数,谁低按谁?暂时不做
//                if(){
//                }
//                score
//                å¯¹æ¯”函数
                t_FaceFC->compare(key, &featureData, topN);
                t_FaceFC->compare(key, &featureData, topN,);
                DBG("m_faceFCMAP compare end " << it.first);
//                èŽ·å–å¯¹æ¯”ç»“æžœ
                auto t_results = t_FaceFC->getTopResult(key);
QiaoJiaSystem/StructureApp/AppPipeController.h
@@ -27,14 +27,14 @@
     * @param folderPath ä»»åŠ¡æ ¹ç›®å½•ï¼Œç”¨äºŽåšå…±äº«å†…å­˜id
     * @param json å‚数为rtsp流地址 sdk是否启用的标识
     */
  //  AppPipeController(std::string folderPath, const Json::Value &json);
    AppPipeController(std::string folderPath, const SdkRuleMap& ruleMap);
    //  AppPipeController(std::string folderPath, const Json::Value &json);
    AppPipeController(std::string folderPath, const SdkRuleMap &ruleMap);
  //  AppPipeController(int index, const Json::Value &json, bool RecordVideoEnable = false);
    //  AppPipeController(int index, const Json::Value &json, bool RecordVideoEnable = false);
  //  AppPipeController(std::string camId, const Json::Value &json, bool RecordVideoEnable);
    //  AppPipeController(std::string camId, const Json::Value &json, bool RecordVideoEnable);
    AppPipeController(std::string camId, const SdkRuleMap& ruleMap, bool RecordVideoEnable);
    AppPipeController(std::string camId, const SdkRuleMap &ruleMap, bool RecordVideoEnable);
    virtual ~AppPipeController();
@@ -46,12 +46,14 @@
    void setfdfsClient(FastFdsWithLock *p_fdfsClient);
    void setWeekRule(const std::map<int, std::vector<LActRuleWeekRecord>>& weekRuleMap);
    void setWeekRule(const std::map<int, std::vector<LActRuleWeekRecord>> &weekRuleMap);
private:
    void init();
private://Perimete
    PerimeterElement perimeterElement;
   // TriggerElement peTriggerElement;
    // TriggerElement peTriggerElement;
    void initPerimeter();
@@ -72,14 +74,16 @@
private:
    PerStaticElement perStaticElement;
    void initPerStatic();
private://Perimete
    PerimeterElement perHubElement;
   // TriggerElement peTriggerElement;
    // TriggerElement peTriggerElement;
    void initPerHub();
private:
    ffmpeg::VideoCaptureElement videoCaptureElement;
    YoloRpcElement yoloRpcElement;
    FaceRpcElement faceRpcElement;
    FaceExtractElement faceExtractElement;
@@ -108,7 +112,9 @@
    std::map<int, std::vector<LActRuleWeekRecord>> m_weekRuleMap;
    SdkRuleMap m_sdkRuleMap;
    std::string m_localIp;
    std::string getFullFileName();
    std::mutex mutex;
};
QiaoJiaSystem/StructureApp/PerimeterElement.cpp
@@ -14,15 +14,15 @@
#include <jsoncpp/json/json.h>
#define ALARM_PERCENT (10)  //10%
PerimeterElement::PerimeterElement(const SdkRule &rule) :
    m_sdkRule(rule),
    PipeElement(true),
    trackingTrigger(nullptr),
    mRealNum(0),
    m_triggerElement(rule.nTriggerDelay*8,0),
    m_triggerElement(rule.nTriggerDelay * 8, 0),
    pManagerEsDB(nullptr),
    m_bIsMask(true)
{
    m_bIsMask(true) {
    pManagerEsDB = new EsDBTool(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort"));
}
@@ -64,37 +64,32 @@
            // DBG("picDate="<<picDate);
        }
        if (m_sdkRule.nSdkType == PerimeterSdk)
        {
        if (m_sdkRule.nSdkType == PerimeterSdk) {
            if(m_bIsMask)
            {
                   std::vector<Point> poly2;
                   std::vector<Point> interPoly;
                   poly2.push_back(Point(rect.x(),rect.y()));
                   poly2.push_back(Point(rect.x()+rect.width(),rect.y()));
                   poly2.push_back(Point(rect.x()+rect.width(),rect.y()+rect.height()));
                   poly2.push_back(Point(rect.x(),rect.y()+rect.height()));
                   IntAreaCalcUtil::PolygonClip(poly1,poly2,interPoly);
                   float inter = IntAreaCalcUtil::intAreaCalc(interPoly);
                   float total1 =IntAreaCalcUtil::intAreaCalc(poly1);
                   float total2 = IntAreaCalcUtil::intAreaCalc(poly2);
                   int per1 = (int)(inter / total1 * 100);
                   int per2 = (int)(inter / total2 * 100);
                   int per=std::max(per1,per2);
            if (m_bIsMask) {
                std::vector<Point> poly2;
                std::vector<Point> interPoly;
                poly2.push_back(Point(rect.x(), rect.y()));
                poly2.push_back(Point(rect.x() + rect.width(), rect.y()));
                poly2.push_back(Point(rect.x() + rect.width(), rect.y() + rect.height()));
                poly2.push_back(Point(rect.x(), rect.y() + rect.height()));
                IntAreaCalcUtil::PolygonClip(poly1, poly2, interPoly);
                float inter = IntAreaCalcUtil::intAreaCalc(interPoly);
                float total1 = IntAreaCalcUtil::intAreaCalc(poly1);
                float total2 = IntAreaCalcUtil::intAreaCalc(poly2);
                int per1 = (int) (inter / total1 * 100);
                int per2 = (int) (inter / total2 * 100);
                int per = std::max(per1, per2);
                   if(ALARM_PERCENT <= per)
                   {
                       //DBG("per 1="<<per1<<" per2="<<per2<<" per="<<per);
                       m_recVec.push_back(obj.rect);
                       num++;
                   }
                if (ALARM_PERCENT <= per) {
                    //DBG("per 1="<<per1<<" per2="<<per2<<" per="<<per);
                    m_recVec.push_back(obj.rect);
                    num++;
                }
            }
        }
        else if (mPolygon.containsPoint(center, Qt::OddEvenFill) || !m_bIsMask)
        {
        } else if (mPolygon.containsPoint(center, Qt::OddEvenFill) || !m_bIsMask) {
            m_recVec.push_back(obj.rect);
@@ -102,23 +97,22 @@
        }
    }
    switch (m_sdkRule.nSdkType) {
        case PerimeterSdk:
            //state = num > 0 ;
            state =( num !=mRealNum);
          //  DBG("num="<<num<< "time="<< picDate);
            state = (num != mRealNum);
            //  DBG("num="<<num<< "time="<< picDate);
            break;
        case CrowdSdk:
            state = num > m_sdkRule.nAlarmNumLowerLimit && num !=mRealNum;
            state = num > m_sdkRule.nAlarmNumLowerLimit && num != mRealNum;
            break;
        case PerHubSdk:
            state = num > m_sdkRule.nAlarmNumLowerLimit && num < m_sdkRule.nAlarmNumUpperLimit && num !=mRealNum;
            state = num > m_sdkRule.nAlarmNumLowerLimit && num < m_sdkRule.nAlarmNumUpperLimit && num != mRealNum;
//         if(m_sdkRule.nAlarmNumLowerLimit>=0)
@@ -154,12 +148,10 @@
    m_triggerElement.setState(state);
    m_triggerElement.triggerOnce();
    if (m_triggerElement.getTriggerState() )
    {
        if(num > 0) {
    if (m_triggerElement.getTriggerState()) {
        if (num > 0) {
            cv::Mat t_image = image(CutMask()).clone();
            if(t_image.empty())
            {
            if (t_image.empty()) {
                DBG("t_image empty");
                return;
            }
@@ -230,7 +222,7 @@
void PerimeterElement::setMask(std::string mask) {
    QJsonArray arrayAreas = getJsonArrayFromQString(QString::fromStdString(mask));
    if (arrayAreas.isEmpty() && m_sdkRule.nSdkType != PerimeterSdk) {
        m_bIsMask=false;
        m_bIsMask = false;
        return;//do not detect
    }
    int size = arrayAreas.size();
@@ -241,15 +233,11 @@
        QJsonObject obj = jsonValue.toObject();
        int x = obj.value("x").toDouble() * 4;
        int y = obj.value("y").toDouble() * 4;
        if(m_sdkRule.nSdkType == PerimeterSdk)
        {
             poly1.push_back(Point(x,y));
        if (m_sdkRule.nSdkType == PerimeterSdk) {
            poly1.push_back(Point(x, y));
        } else {
            mPolygon << (QPoint(x, y));
        }
        else
        {
             mPolygon << (QPoint(x, y));
        }
    }
@@ -284,7 +272,7 @@
        CvUtil::cvMat2Buffer(image, buffer);
        std::string strImgUrlTmp = "";
        fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg");
      //  strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp);
        //  strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp);
        strImgUrl.clear();
        strImgUrl = strImgUrlTmp;
//                    strImgUrl.append("/").append(strImgUrlTmp);
@@ -318,13 +306,13 @@
    t_json["ChannlId"] = getProperty("ch_id"); // é€šé“id
    t_json["likeDate"] = AppUtil::getTimeSecString(); // æ¯”对时间
    t_json["picAddress"] = m_sdkRule.strAddr.toStdString();// æŠ“拍地址
    DBG("picAddress="<<m_sdkRule.strAddr.toStdString());
    DBG("picAddress=" << m_sdkRule.strAddr.toStdString());
    t_json["picMaxUrl"] = "wait todo"; // å¤§å›¾è·¯å¾„
    //   t_json["Age"] ="wait todo";
    t_json["picDate"] = time; // æŠ“拍时间,必须有
     DBG("picDate="<<time);
    DBG("picDate=" << time);
    t_json["picLocalUrl"] = "wait todo";  // æœ¬åœ°è·¯å¾„
    t_json["isDelete"] = "1";//默认1 ,0无效 1有效
@@ -416,7 +404,7 @@
//   DBG("RECT x="<<rect.x<<"y"<<rect.y<<"w"<<rect.width<<"h"<<rect.height);
    return rect;
}
bool PerimeterElement::isAnd()
{
bool PerimeterElement::isAnd() {
}
QiaoJiaSystem/build/DataWebServer
Binary files differ
QiaoJiaSystem/build/config.json
@@ -1,26 +1,28 @@
{
   "DEV_ID" : "DSVAD010120181119",
   "ES_IP" : "192.168.1.122",
   "ES_PORT" : 9200,
   "FaceDetectionSampleSize" : 720,
   "FaceSeachSleepTime" : 60,
   "TotalLoadSize" : "500",
   "buildAddr" : "/home/bsk/Apps/QiaoJiaSystem/build/",
   "clusterID" : "",
   "cutPath" : "/home/bsk/work/qiaojia/cut",
   "encode_thread_num" : 3,
   "erlCookie" : "123",
   "erlFatherNode" : " ",
   "erlNode" : "f6d7d984-858e-4235-a657-644927b3a628@192.168.1.148",
   "erlPath" : "/opt/erlang/f6d7d984-858e-4235-a657-644927b3a628",
   "loadPath" : "/home/bsk/work/qiaojia/load",
   "localPasswd" : "123456",
   "logPath" : "/home/bsk/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
  "DEV_ID": "DSVAD010120181119",
  "ES_IP": "192.168.1.122",
  "ES_PORT": 9200,
  "FaceDetectionSampleSize": 720,
  "FaceSeachSleepTime": 60,
  "TotalLoadSize": "500",
  "buildAddr": "/home/bsk/Apps/QiaoJiaSystem/build/",
  "clusterID": "",
  "cutPath": "/home/bsk/work/qiaojia/cut",
  "encode_thread_num": 3,
  "erlCookie": "123",
  "erlFatherNode": " ",
  "erlNode": "f6d7d984-858e-4235-a657-644927b3a628@192.168.1.148",
  "erlPath": "/opt/erlang/f6d7d984-858e-4235-a657-644927b3a628",
  "loadPath": "/home/bsk/work/qiaojia/load",
  "localPasswd": "123456",
  "logPath": "/home/bsk/work/log/",
  "mainServerIp": "192.168.1.182",
  "mainServerPort": "3697",
  "mainServerrUrl": "/addPerson/uploadToTemporary",
  "addFromAnalyUrl":"192.168.1.182:3699/data/api-c/taskUser/addFromAnaly",
  "netIfName": "enp3s0",
  "redis_buf_len": 750,
  "redis_ip": "127.0.0.1",
  "srsAddr": "rtmp://192.168.1.122:1934/live/",
  "webPort": 11111
}
QiaoJiaSystem/build/configjson˵Ã÷.md
New file
@@ -0,0 +1,121 @@
##json文件模板及参数含义
    {
       "DEV_ID" : "DSVAD010120181119",
       "clusterID" : "",
       "webPort" : 11111,
       "netIfName" : "enp3s0",
       "localPasswd" : "123456",
       "ES_IP" : "192.168.1.122",
       "ES_PORT" : 9200,
       "mainServerIp" : "192.168.1.182",
       "mainServerPort" : "3697",
       "mainServerrUrl" : "/addPerson/uploadToTemporary",
       "TotalLoadSize" : "500",
       "buildAddr" : "/home/bsk/Apps/QiaoJiaSystem/build/",
       "cutPath" : "/home/bsk/work/qiaojia/cut",
       "loadPath" : "/home/bsk/work/qiaojia/load",
       "logPath" : "/home/bsk/work/log/",
       "FaceDetectionSampleSize" : 720,
       "FaceSeachSleepTime" : 60,
       "encode_thread_num" : 3,
       "erlCookie" : "123",
       "erlFatherNode" : " ",
       "erlNode" : "f6d7d984-858e-4235-a657-644927b3a628@192.168.1.148",
       "erlPath" : "/opt/erlang/f6d7d984-858e-4235-a657-644927b3a628",
       "redis_buf_len" : 750,
       "redis_ip" : "127.0.0.1",
       "srsAddr" : "rtmp://192.168.1.122:1934/live/"
    }
----
----
* DEV_ID
    >设备id
* clusterID
    >集群id
* webPort
    >webserver给java接口的端口
* netIfName
    >当前机器的网络名,便于查询ip地址等
* localPasswd
    >当前机器的用户名的密码?
---
* ES_IP
    >es集群的ip
* ES_PORT
    >es集群的端口
---
---
* mainServerIp
    >人员上传的ip
* mainServerPort
    >人员上传的端口
* mainServerrUrl
    >人员上传的接口url
---
---
* TotalLoadSize
    >下载文件的最大存储空间
* buildAddr
    >执行文件的路径
* cutPath
    >裁剪文件存储目录
* loadPath
    >下载文件存储目录
* logPath
    >日志路径
---
* FaceDetectionSampleSize
    > down sample size(image down sample) for detect image,if it is 0,will detect by original image.
    >
    > äººè„¸æ£€æµ‹
* FaceSeachSleepTime
    >人脸对比服务数据刷新延迟时间
---
* encode_thread_num
    >编码线程个数
* erlCookie
    >erlang集群的cookie
* erlFatherNode
    >erlang集群主节点
* erlNode
    >erlang节点名称
* erlPath
    >erlang节点所在路径
---
* redis_buf_len
    >redis buf é•¿åº¦ï¼Ÿ
* redis_ip
    >redis ip
* srsAddr
    >rtmp推流的基础地址
syncDBTool/ErlangDbTool.cpp
@@ -1643,7 +1643,7 @@
                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(4).toString().toStdString();
                t_feature_info.enable = query.value(3).toString().toStdString();
                dataCache.insert(std::make_pair(t_feature_info.id, t_feature_info));
            }