pansen
2019-01-30 dd5adf6383819915967b2a76b18ca6e4d88d60cd
QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -1873,6 +1873,25 @@
        std::string Enabled = value["enabled"].asString();
        Enabled = Enabled.empty() ? "1" : Enabled;
        std::string createBy = value["createBy"].asString();
        string str_uuid;
        uuid_t t_uuid;
        char str[36];
        uuid_generate(t_uuid);
        uuid_unparse(t_uuid, str);
        str_uuid = str;
        Uuid = Uuid.empty() ? str_uuid : Uuid;
        if (createBy == "analyDev") {
            Uuid = Uuid.empty() ? str_uuid : Uuid;
        } else if (createBy == "conCemter") {
            if (Uuid.empty()) {
                response->write(SimpleWeb::StatusCode::client_error_bad_request, "{\"error\":\"参数错误! \"}");
                return "";
            }
        }
        bool ret = false;
        FieldValues fieldValues;
        fieldValues.insert(std::make_pair("uuid", Uuid));
@@ -1883,7 +1902,7 @@
        fieldValues.insert(std::make_pair("startTime", StartTime));
        fieldValues.insert(std::make_pair("endTime", EndTime));
//        #todo
        fieldValues.insert(std::make_pair("create_by", "who"));
        fieldValues.insert(std::make_pair("create_by", createBy));
        fieldValues.insert(std::make_pair("uploadFlag", UploadFlag));
        fieldValues.insert(std::make_pair("cmpThreshold", CmpThreshold));
@@ -1906,6 +1925,17 @@
        } else {
            response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"类型错误,未识别! \"}");
            return "";
        }
//            #todo 上传。仅黑名单。
//            #TODO 根据createBy判断是否需要上传
        if (createBy == "analyDev" && BwType == "1") {
//            string &Uuid, string &TableName, string &SyncType, string &StartTime,string &EndTime,
//            string &UploadFlag, string &CmpThreshold, string &Enabled
            string str_SyncType(to_string(SyncType));
            UploadTaskToMonitorCenter(Uuid, TableName, str_SyncType, StartTime, EndTime, UploadFlag, CmpThreshold,
                                      Enabled);
        }
@@ -1941,6 +1971,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 +1994,10 @@
            return "";
        }
        {
//            #todo 上传。仅黑名单。
//            #TODO 根据createBy判断是否需要上传
        }
        erlangDbTool->sendMessage();
        std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
        return str_result;
@@ -2051,7 +2087,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);
        }
@@ -2088,10 +2124,13 @@
        std::string strUUID = value["uuid"].asString();
        std::string Enabled = value["enabled"].asString();
        Enabled = Enabled.empty() ? "1" : Enabled;
        std::string TableType = value["TableType"].asString();
        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 monLevel = value["monLevel"].asString();
        std::string UploadFlag = "-1";
        if (SyncType == "1") {
@@ -2108,12 +2147,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();
@@ -2173,7 +2212,8 @@
//        std::string uuid = "";
        bool ret_addPerson = false;
        addPersonMToDB(TableName, img_url, SyncType, feature_base64, faceResults, idcard, strUUID, ret_addPerson);
        addPersonMToDB(TableName, img_url, SyncType, feature_base64, faceResults, idcard, strUUID, monLevel, Enabled,
                       ret_addPerson);
        if (ret_addPerson && strUUID.size() > 0) {
            std::string str_result = std::string("{\"uuid\":").append(
@@ -2181,15 +2221,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 {
@@ -2230,7 +2270,21 @@
        std::string TableId = value["TableId"].asString();
        std::string BwType = value["BwType"].asString();
        std::string CreateBy = value["createBy"].asString();
        std::string monLevel = value["monLevel"].asString();
//        std::string BwType = value["BwType"].asString();
        std::string UploadFlag = "-1";
        if (SyncType == "1") {
            UploadFlag = erlangDbTool->findAllDatabase()[TableId].uploadFlag;
        } else {
            auto its = m_SqliteFaceEncap.getTableInfos();
            for (auto &item : its) {
                if (item.uuid == TableId) {
                    UploadFlag = item.uploadFlag;
                    break;
                }
            }
        }
        DBG("content: " << TableName << "," << img_url << "," << idcard << "," << strUUID << ","
                        << Enabled << "," << TableType << "," << SyncType << "," << TableId);
@@ -2314,12 +2368,14 @@
                fieldValues.insert(make_pair("uuid", strUUID));
                fieldValues.insert(make_pair("idCard", idcard));
                fieldValues.insert(make_pair("enabled", Enabled));
                fieldValues.insert(make_pair("monitorLevel", monLevel));
                ret_addPerson = m_SqliteFaceEncap.updateFace(TableName, addFaceData, fieldValues);
            }
        } else {
            fieldValues.insert(make_pair("uuid", strUUID));
            fieldValues.insert(make_pair("idCard", idcard));
            fieldValues.insert(make_pair("enabled", Enabled));
            fieldValues.insert(make_pair("monitorLevel", monLevel));
            ret_addPerson = erlangDbTool->updatePerson(strUUID, addFaceData, fieldValues);
        }
@@ -2329,17 +2385,17 @@
//            usleep(100);
            erlangDbTool->sendMessage();
//           #todo  CreateBy == ""???
//            #TODO黑名单更新需要上传
//            if (UploadFlag == "1") {
////                #todo db queue upload to server
//                if (BwType == "0") {
            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") {
                    UpdatePersonToMonitorCenter(img_url, idcard, strUUID, TableId, Enabled);
                }
            } else {
//                不上传
            }
            return str_result;
        } else {
            std::string str_result = std::string("{\"error\":\"addPerson error\"}");
@@ -2375,41 +2431,48 @@
void devHttpServer_c::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 {
                                     string &strUUID, string &monLevel, string &Enabled, bool &ret_addPerson) {
    FieldValues fieldValues;
    AddFaceData addFaceData;
    addFaceData.uuid = strUUID;
    addFaceData.faceUrl = img_url;
    fieldValues.insert(make_pair("monitorLevel", monLevel));
    fieldValues.insert(make_pair("enabled", Enabled));
    fieldValues.insert(make_pair("idCard", idcard));
    if (SyncType == "0") {
        FieldValues fieldValues;
        AddFaceData addFaceData;
        addFaceData.feature.resize(faceResults[0].feature.size());
        memcpy(addFaceData.feature.data(), faceResults[0].feature.data(), faceResults[0].feature.size());
        //#todo uuid have value is update
        if (strUUID.size() <= 0) {
            // get Person id
            strUUID = AppUtil::getPersonId(m_batch, m_SerialNumber);
            addFaceData.uuid = strUUID;
            addFaceData.faceUrl = img_url;
            fieldValues.insert(make_pair("uuid", strUUID));
            fieldValues.insert(make_pair("idCard", idcard));
            auto t_id = m_SqliteFaceEncap.addFace(TableName, addFaceData, fieldValues);
            ret_addPerson = t_id.size() > 0 ? true : false;
        } else {
            //#todo update table
            addFaceData.uuid = strUUID;
            addFaceData.faceUrl = img_url;
            fieldValues.insert(make_pair("uuid", strUUID));
            fieldValues.insert(make_pair("idCard", idcard));
            ret_addPerson = m_SqliteFaceEncap.updateFace(TableName, addFaceData, fieldValues);
        }
    } else {
        //#todo update data
        // get Person id
        strUUID = strUUID.size() > 0 ? strUUID : AppUtil::getPersonId(m_batch, m_SerialNumber);
        ret_addPerson = ret_addPerson = erlangDbTool->addPerson(strUUID, TableName, feature_base64, img_url,
                                                                idcard);
        if (strUUID.size() <= 0) {
//                insert
            strUUID = AppUtil::getPersonId(m_batch, m_SerialNumber);
//            ret_addPerson = ret_addPerson = erlangDbTool->addPerson(strUUID, TableName, feature_base64, img_url,
//                                                                    idcard);
            fieldValues.insert(make_pair("uuid", strUUID));
            addFaceData.feature_base64 = feature_base64;
            ret_addPerson = erlangDbTool->addPerson(TableName, addFaceData, fieldValues);
        } else {
//                update
            fieldValues.insert(make_pair("uuid", strUUID));
            addFaceData.feature_base64 = feature_base64;
            ret_addPerson = erlangDbTool->updatePerson(strUUID, addFaceData, fieldValues);
        }
    }
}
@@ -2417,11 +2480,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 = "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;
@@ -2433,12 +2496,111 @@
    auto rec = db_c.searchConfigTableWithinServerInfo();
    perInfo["deviceId"] = rec.dev_id.toStdString();
    perInfo["photos"] = img_url;
//                perInfo["featureBase"] = feature_base64;
    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());
    sendPerson.detach();
}
void
devHttpServer_c::UpdatePersonToMonitorCenter(string &img_url, string &idcard, string &strUUID,
                                             string &strTableId, string &strControl) {
//  string sendUrl = "ip:3699/data/api-c/taskUser/updateFromC";
    string sendUrl = GET_STR_CONFIG("updateFromAnalyUrl");
    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["cardId"] = idcard; // 图片描述
    perInfo["taskId"] = strTableId; // 底库id
    perInfo["isControl"] = strControl; // 布控状态(0为未布控,1为已布控)
    perInfos.append(perInfo);
    thread sendPerson(uploadServer, this, sendUrl, perInfos.toStyledString());
    sendPerson.detach();
}
void
devHttpServer_c::UploadTaskToMonitorCenter(string &Uuid, string &TableName, string &SyncType, string &StartTime,
                                           string &EndTime, string &UploadFlag, string &CmpThreshold, string &Enabled) {
//  string sendUrl = "192.168.1.184:3699/addTaskByNode";
    string sendUrl = GET_STR_CONFIG("addTaskAnalyUrl");
    if (sendUrl.empty()) {
        ERR("");
        return;
    }
//    Json::Value perInfos;
    Json::Value perInfo;
    perInfo["uuid"] = Uuid;
    perInfo["TableName"] = TableName;
    perInfo["SyncType"] = SyncType;
    perInfo["StartTime"] = StartTime;
    perInfo["EndTime"] = EndTime;
    perInfo["IsSync"] = UploadFlag;
    perInfo["threshold"] = CmpThreshold;
    perInfo["enabled"] = Enabled;
    perInfo["distributionIds"] = m_cluster_id;
    perInfo["distributionNames"] = m_cluster_name;
    auto rec = db_c.searchConfigTableWithinServerInfo();
    perInfo["deviceId"] = rec.dev_id.toStdString();
//    perInfos.append(perInfo);
    thread sendPerson(uploadServer, this, sendUrl, perInfo.toStyledString());
    sendPerson.detach();
}
@@ -2471,6 +2633,8 @@
                    subJson.append("\"uuid\":\"" + item.second.uuid + "\",");
                    subJson.append("\"tableName\":\"" + TableName + "\",");
                    subJson.append("\"idcard\":\"" + t_faceInfoCache[item.second.uuid].idCard + "\",");
                    subJson.append("\"enable\":\"" + t_faceInfoCache[item.second.uuid].enable + "\",");
                    subJson.append("\"monLevel\":\"" + t_faceInfoCache[item.second.uuid].monLevel + "\",");
                    subJson.append("\"imgUrl\":\"" + item.second.faceurl + "\"");
//                subJson.append("\"feature\":\"" + item.second.feature + "\",");
                    //#todo modifysvn upda  svn comm
@@ -2492,6 +2656,8 @@
                    subJson.append("\"uuid\":\"" + item.second.id + "\",");
                    subJson.append("\"tableName\":\"" + TableName + "\",");
                    subJson.append("\"idcard\":\"" + item.second.idcard + "\",");
                    subJson.append("\"enable\":\"" + item.second.enable + "\",");
                    subJson.append("\"monLevel\":\"" + item.second.monLevel + "\",");
                    subJson.append("\"imgUrl\":\"" + item.second.img + "\"");
//                subJson.append("\"feature\":\"" + item.second.feature + "\",");
                    //#todo modifysvn upda  svn comm
@@ -2543,6 +2709,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;
        //#更新底库管理表
@@ -2554,7 +2722,7 @@
        fieldValues.insert(std::make_pair("startTime", StartTime));
        fieldValues.insert(std::make_pair("endTime", EndTime));
//        #todo
        fieldValues.insert(std::make_pair("create_by", "who"));
        fieldValues.insert(std::make_pair("create_by", createBy));
        fieldValues.insert(std::make_pair("uploadFlag", UploadFlag));
        fieldValues.insert(std::make_pair("cmpThreshold", CmpThreshold));
@@ -2580,6 +2748,15 @@
        } else {
            response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"类型错误,未识别! \"}");
            return "";
        }
//            #todo 上传。仅黑名单。
//            #TODO 根据createBy判断是否需要上传
        if (createBy == "analyDev" && BwType == "1") {
//            UploadTaskToMonitorCenter(Uuid, TableName, SyncType, StartTime, EndTime, SyncType, Enabled);
            string str_SyncType(to_string(SyncType));
            UploadTaskToMonitorCenter(Uuid, TableName, str_SyncType, StartTime, EndTime, UploadFlag, CmpThreshold,
                                      Enabled);
        }
@@ -2609,6 +2786,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) {
@@ -2616,7 +2794,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;
@@ -3296,7 +3477,10 @@
        str_imgName += "-";
        str_imgName += "snapshot.jpg";
        //admin:a1234567@192.168.1.201:554/h264/ch1/main/av_stream -r 1/25 -f image2 -s 1920*1080 /home/basic/work_src/a.jpg
        std::string cmd("ffmpeg -i " + rtsp_url + " -r 1/25  -f image2 -s 1920*1080 -y " + str_imgName);
        std::string cmd(
            "ffmpeg -i " + rtsp_url + " -vf select='eq(pict_type\\,I)',setpts='N/(25*TB)' -f image2 -s 1920*1080 -y " +
            str_imgName);
//        std::string cmd("ffmpeg -i " + rtsp_url + " -r 1/25  -f image2 -s 1920*1080 -y " + str_imgName);
        DBG(cmd);
        system(cmd.c_str());
@@ -3313,13 +3497,14 @@
            CvUtil::cvMat2Buffer(img, 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;
        }
        fdfsClient.rwLock.unlock();
        Json::Value result;
        result["imgUrl"] = strImgUrl;
        db_c.updateCamDevSnapshot(QString::fromStdString(ip), QString::fromStdString(strImgUrl));
        return result.toStyledString();