chenshijun
2019-04-22 291dbcd9331cd0df41addef74defa4654ee034fb
QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -262,6 +262,8 @@
    VssDomainUnitTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
    VssLocalSettingTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
    CamDevController::instance()->registerHttpServices(_HttpSrvRetRecieve);
    //todo
    CamDevController::instance()->nsqMsgProducerSet(nsqMsgProducer);
    VssUpperSvrTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
@@ -1164,11 +1166,11 @@
                                        std::string brand) const {
    if (brand == "haikang") {
        bool ret = getHKDevSerialNumber(ip.c_str(), port, username.c_str(), passwd.c_str());
        if (!ret) {
            ERR("getHKDevSerialNumber ERR");
            return false;
        }
//        bool ret = getHKDevSerialNumber(ip.c_str(), port, username.c_str(), passwd.c_str());
//        if (!ret) {
//            ERR("getHKDevSerialNumber ERR");
//            return false;
//        }
        //调用rtsp流rtsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream
        port = 554;//TODO
//        std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
@@ -1218,11 +1220,11 @@
        return false;//TODO
    } else if (brand == "yushi") {
//        rtsp://admin:admin@192.168.8.8:554/video1
        bool ret = getUVDevSerialNumber(ip.c_str(), username.c_str(), passwd.c_str());
        if (!ret) {
            ERR("getUVDevSerialNumber ERR");
            return false;
        }
//        bool ret = getUVDevSerialNumber(ip.c_str(), username.c_str(), passwd.c_str());
//        if (!ret) {
//            ERR("getUVDevSerialNumber ERR");
//            return false;
//        }
        port = 554;
//        std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":" + std::to_string(port) +
@@ -1294,6 +1296,7 @@
            if (m_rtmp[ip].userCounter == 0) {
                m_rtmp[ip].appPC->stop();
                m_rtmp[ip].appPC->wait();
                delete m_rtmp[ip].appPC;
                m_rtmp.erase(ip);
            }
        }
@@ -1373,6 +1376,7 @@
    Json::Value value;
    if (value_reader.isMember("id")) {
        value["ret_status"] = "ok_ack";
        cam_connect_video_stop(value_reader["str_ip"].asString());
        {
            std::string topic = "VideoToImageMulth";
            Json::Value json_cfg;
@@ -1759,6 +1763,13 @@
    return out;
}
//{
//   "cookie": "abc",                        //集群cookie
//   "fatherNodeName": "main@192.168.1.186", //引导节点名称,添加引导节点时该值为" "(内为空格)
//   "culID" : "uuid",                       //集群id
//   "culName" : "name",                     //集群名称
//   "devID" : "uuid"                        //设备id
//}
std::string devHttpServer_c::addNode(std::string ip, unsigned int port, std::string content, PResponse &response) {
    DBG("ip:" << ip << "; port:" << port);
    DBG("content: " << content);
@@ -1771,25 +1782,32 @@
        //#todo nodes have counter?
        //#todo nodeName Automatic generated?
        //#todo devId+num
        // 生成节点id - uuid
        std::string uuid = GetUUId::getUUID();
        // 获取当前机器ip
        unsigned char ip_old[15] = {0};
        std::string str_netIfName = appConfig.getStringProperty("netIfName");
        GetIpAddress(str_netIfName.c_str(), ip_old);
        std::string str_ip((char *) ip_old);
        // 节点名称
        std::string nodeName = uuid.append("@" + str_ip);
        std::string cookie = value["cookie"].asString();
        // 引导节点
        std::string FatherNodeName = value["fatherNodeName"].asString();
        //#todo ClusterID ClusterName
        // 集群id
        std::string clusterID = value["culID"].asString();
        // 为空则生成,否则直接使用
        clusterID = clusterID.size() > 0 ? clusterID : GetUUId::getUUID();
        std::string clusterName = value["culName"].asString();
        std::string devID = value["devID"].asString();
        std::string devName = value["devName"].asString();
        // erlang节点保存路径/opt/erlang/${uuid}
        std::string path = std::string("/opt/erlang/").append(nodeName.substr(0, nodeName.find("@")));
        if (erlangDbTool != nullptr) {
            //gaunbi node
@@ -1801,6 +1819,7 @@
        if (cookie.size() > 0 && (clusterID.size() > 0 || clusterName.size() > 0)) {
//            erlangDbTool = new ErlangTool::ErlangDbTool(path, nodeName, cookie);
            // #todo 进程名 -> get from argv[0]
            string str_tmp = "DataWebserver";
            erlangDbTool = new ErlangTool::ErlangDbTool(path, nodeName, cookie, clusterID, clusterName, str_tmp);
            bool ret = erlangDbTool->initErlang();
@@ -1809,6 +1828,7 @@
            ret = erlangDbTool->startNodeDb(FatherNodeName, devID);
            if (ret) {
                //如果成功则更新配置文件
                appConfig.setStringProperty("erlNode", nodeName);
                appConfig.setStringProperty("erlCookie", cookie);
                appConfig.setStringProperty("erlPath", path);
@@ -1821,6 +1841,7 @@
                runAllApp();
//                sleep(4);
            } else {
                // 否则则置空配置文件
                appConfig.setStringProperty("erlNode", "");
                appConfig.setStringProperty("erlCookie", "");
                appConfig.setStringProperty("erlPath", "");
@@ -1853,6 +1874,7 @@
        ret = erlangDbTool->removeNode();
        // 置空配置文件
        appConfig.setStringProperty("erlNode", "");
        appConfig.setStringProperty("erlCookie", "");
        appConfig.setStringProperty("erlPath", "");
@@ -1970,15 +1992,20 @@
        std::string Uuid = value["uuid"].asString();
        std::string TableType = value["TableType"].asString();
        std::string TableName = value["TableName"].asString();
        //  集群内同步
        int SyncType = atoi(value["SyncType"].asCString());
        std::string BwType = value["BwType"].asString();
        std::string StartTime = value["StartTime"].asString();
        std::string EndTime = value["EndTime"].asString();
        // 是否上传
        std::string UploadFlag = value["IsSync"].asString();
        UploadFlag = UploadFlag.empty() ? "0" : UploadFlag;
        // 底库阈值
        std::string CmpThreshold = value["threshold"].asString();
        CmpThreshold = CmpThreshold.empty() ? "60" : CmpThreshold;
        // 是否启用
        std::string Enabled = value["enabled"].asString();
        Enabled = Enabled.empty() ? "1" : Enabled;
@@ -2010,9 +2037,7 @@
        fieldValues.insert(std::make_pair("bwType", BwType));
        fieldValues.insert(std::make_pair("startTime", StartTime));
        fieldValues.insert(std::make_pair("endTime", EndTime));
//        #todo
        fieldValues.insert(std::make_pair("create_by", createBy));
        fieldValues.insert(std::make_pair("uploadFlag", UploadFlag));
        fieldValues.insert(std::make_pair("cmpThreshold", CmpThreshold));
        fieldValues.insert(std::make_pair("enabled", Enabled));
@@ -2037,7 +2062,6 @@
            return "";
        }
////            #todo 上传。仅黑名单。
////            #TODO 根据createBy判断是否需要上传
//        if (createBy == "analyDev" && BwType == "1") {
@@ -2048,7 +2072,7 @@
//                                      Enabled);
//        }
        // send message to other CNode
        erlangDbTool->sendMessage();
        std::string str_result = std::string("{\"result\":").append("\"" + std::to_string(ret) + "\"}");
        return str_result;
@@ -2118,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 + "\",");
@@ -3005,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 {
@@ -3311,6 +3349,10 @@
        rule.strExAreas = value["strExAreas"].asCString();
        rule.strLine = value["strLine"].asCString();
        rule.strExLine = value["strExLine"].asCString();
        if (!value["strPerimeterObjType"].empty()) {
            rule.strPerimeterObjType = value["strPerimeterObjType"].asCString();
        }
        if (rule.strCamId.isEmpty()) {
            return "{\"ret_status\":\"内容有误,请检查!\"}";
        }
@@ -3387,6 +3429,7 @@
                obj["strExAreas"] = rule.second.strExAreas.toStdString();
                obj["strLine"] = rule.second.strLine.toStdString();
                obj["strExLine"] = rule.second.strExLine.toStdString();
                obj["strPerimeterObjType"] = rule.second.strPerimeterObjType.toStdString();
                Json::Value weekRuleArray;