From b8c5eb8048b566d632b25391a79ccbd6ce33c010 Mon Sep 17 00:00:00 2001
From: chenshijun <csj_sky@126.com>
Date: 星期六, 30 三月 2019 16:10:01 +0800
Subject: [PATCH] 1.3 增加nsq消息,解决进程重启

---
 QiaoJiaSystem/DataManagerServer/http_configserver.cpp |  204 ++++++++++++++++++++++++++++++++------------------
 1 files changed, 129 insertions(+), 75 deletions(-)

diff --git a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
index 260c97a..b53818f 100644
--- a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
+++ b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -22,17 +22,19 @@
 #include <time.h>
 #include <dirent.h>
 #include "basic/pipe_element/ffmpeg/basic_struct_for_video_image.h"
+#include <basic/timer_counter/Clocktimer.h>
 
 #include "vss/controller/VssDevTblController.h"
 #include "vss/controller/VssChannelTblController.h"
 #include "vss/controller/VssDomainUnitTblController.h"
 #include "vss/controller/VssLocalSettingTblController.h"
 #include "vss/controller/VssUpperSvrTblController.h"
+#include "vss/controller/CamDevController.h"
 
 using namespace std;
 
 devHttpServer_c::devHttpServer_c()
-    : _HttpSrvRetRecieve("0.0.0.0", 8083, 1), erlangDbTool(nullptr), m_SqliteFaceEncap("LocalDataDB") {
+    : _HttpSrvRetRecieve("0.0.0.0", 8083, 1), erlangDbTool(nullptr), m_SqliteFaceEncap("LocalDataDB"){
     init();
 }
 
@@ -72,6 +74,10 @@
 void devHttpServer_c::init(void) {
 
     std::string strDevId = appConfig.getStringProperty("DEV_ID");
+
+    //nsq
+    nsqMsgProducer = new BasicMsg::Nsq::NsqMsgProducer("127.0.0.1", "4150");
+    nsqMsgProducer->init();
 
 //    DSVAD010120181119
     m_batch = strDevId.substr(5, 2);
@@ -250,12 +256,14 @@
 
 
     BaseDao::initConnection();
-    VssLocalSettingTblSqliteDao::instance()->setLDBTool(&db_c);
+    BaseSqliteDao::setLDBTool(&db_c);
     VssDevTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
     VssChannelTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
     VssDomainUnitTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
     VssLocalSettingTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
+    CamDevController::instance()->registerHttpServices(_HttpSrvRetRecieve);
     VssUpperSvrTblController::instance()->registerHttpServices(_HttpSrvRetRecieve);
+
 
     _HttpSrvRetRecieve.start();
     _HttpSrvRetRecieve.waitForShutDown();
@@ -289,10 +297,10 @@
         elem["n_duration"] = iter->n_duration;
         elem["str_brand"] = iter->str_brand.toStdString();
         elem["str_reserved"] = iter->str_reserved.toStdString();
-        cout << elem.toStyledString() << endl;
+        DBG(elem.toStyledString());
         value.append(elem);
     }
-    cout << value.toStyledString() << endl;
+    DBG(value.toStyledString());
 //    std::string out = value.toStyledString();
     std::string out = value.size() > 0 ? value.toStyledString() : "[]";
 
@@ -693,7 +701,7 @@
         }
 
         dev_rec.str_storage_dev_id = QString::fromLatin1((const char *) serialnumber);//鑾峰彇纾佺洏闃靛垪鐨勮澶噄d
-        std::cout << dev_rec.str_storage_dev_id.toStdString() << std::endl;
+        DBG(dev_rec.str_storage_dev_id.toStdString());
         ret = db_c.updateDeviceTable(dev_rec);
     } else {
         return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
@@ -740,7 +748,7 @@
     std::string str_result;
     std::string str_tmp;
     for (int i = 0; i < lvecUsefulChans.size(); i++) {
-        std::cout << lvecUsefulChans.at(i) << std::endl;
+        DBG(lvecUsefulChans.at(i));
         str_tmp = std::to_string(lvecUsefulChans.at(i));
         str_result += str_tmp;
         str_result += ",";
@@ -885,17 +893,17 @@
                 }
             }
 
-            cout << elem.toStyledString() << endl;
+            DBG(elem.toStyledString());
             value.append(elem);
         }
 
         for (std::vector<int>::iterator it1 = chns.begin(); it1 != chns.end(); it1++) {
             chn_unused["n_chn"] = *it1;
-            cout << "*it1" << *it1 << endl;
+            DBG("*it1" << *it1);
             value.append(chn_unused);
         }
 
-        cout << value.toStyledString() << endl;
+        DBG(value.toStyledString());
 //        std::string out = value.toStyledString();
         std::string out = value.size() > 0 ? value.toStyledString() : "[]";
         return out;
@@ -1000,22 +1008,35 @@
         elem["str_latitude"] = iter->str_latitude.toStdString();
         elem["str_ip"] = iter->str_ip.toStdString();
         elem["n_port"] = iter->n_port;
+        elem["type"] = iter->type;
         elem["str_username"] = iter->str_username.toStdString();
         elem["str_password"] = iter->str_password.toStdString();
         elem["str_brand"] = iter->str_brand.toStdString();
         elem["str_reserved"] = iter->str_reserved.toStdString();
 
+        SdkRuleMap ruleMap = db_c.searchSdkRuleByCamId(iter->str_cam_dev_id);
+
+        int count = ruleMap.size();
+        elem["nSdkTypes"] = Json::arrayValue;
+
+        if (count > 0) {
+            for (auto rule:ruleMap) {
+                if (rule.second.nIsRun == 1) {
+                    elem["nSdkTypes"].append(rule.second.nSdkType);
+                }
+            }
+        }
 //        Record_Cam_Sdk rec_sdk = db_c.searchCamSdkTableByCamId(iter->str_cam_dev_id);
 //        elem["str_sdks"] = rec_sdk.str_sdks.toStdString();
 //        elem["str_det_thr"] = rec_sdk.str_det_thr.toStdString();
 //        elem["str_cmp_thr"] = rec_sdk.str_cmp_thr.toStdString();
 
-        cout << elem.toStyledString() << endl;
+        DBG(elem.toStyledString());
 
         value.append(elem);
     }
 
-    cout << value.toStyledString() << endl;
+    DBG(value.toStyledString());
     std::string out = value.size() > 0 ? value.toStyledString() : "[]";
     return out;
 }
@@ -1049,7 +1070,7 @@
         if ((!ret) || (serialnumber[0] == 0)) {
             return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
         }
-
+        rec.type = 0;
         rec.str_cam_dev_id = QString::fromLatin1((const char *) serialnumber);//鎽勫儚鏈篿d cam_mac
         rec.str_name = QString::fromStdString(value["str_name"].asString());
         rec.str_addr = QString::fromStdString(value["str_addr"].asString());
@@ -1151,8 +1172,8 @@
         std::string publish_basepath = rtmpAddr + "cam" + str_uuid;
         DBG("publish_basepath:" << publish_basepath);
         appPref.setStringData("publish.basepath", publish_basepath);
-        appPref.setIntData("pulish.width", 640);
-        appPref.setIntData("pulish.height", 360);
+//        appPref.setIntData("pulish.width", 1920);
+//        appPref.setIntData("pulish.height", 1080);
 
         if (m_rtmp.find(ip) != m_rtmp.end()) {
             if (m_rtmp[ip].appPC == nullptr) {
@@ -1204,8 +1225,8 @@
         std::string publish_basepath = rtmpAddr + "cam" + str_uuid;
         DBG("publish_basepath:" << publish_basepath);
         appPref.setStringData("publish.basepath", publish_basepath);
-        appPref.setIntData("pulish.width", 640);
-        appPref.setIntData("pulish.height", 360);
+//        appPref.setIntData("pulish.width", 1920);
+//        appPref.setIntData("pulish.height", 1080);
 
         if (m_rtmp.find(ip) != m_rtmp.end()) {
             if (m_rtmp[ip].appPC == nullptr) {
@@ -1269,26 +1290,35 @@
 
     Json::Reader reader;
     Json::Value value_reader;
-
+    std::string out;
     if (!reader.parse(content, value_reader)) {
         return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
     }
+    Json::Value value;
+    if (value_reader.isMember("id")) {
+        if (value_reader["id"].isNull()) return "{\"ret_status\": \"id鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+        value["connect_status"] = "True";
+        std::string rtmp_url = appConfig.getStringProperty("srsAddr");
+        rtmp_url.append("cam").append(value_reader["id"].asCString());
+        value["video_url"] = rtmp_url;
+        out = value.toStyledString();
 
-    //TODO
-    //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream
+    } else {
+        //TODO
+        //璋冪敤rtsp娴乺tsp://admin:a1234567@192.168.1.215:554/h264/ch1/main/av_stream
 //    std::string rtsp_url = "rtsp://" + username + ":" + passwd + "@" + ip + ":"  + std::to_string(port) + "/h264/ch1/main/av_stream";
-    bool ret = cam_connect_video_start(value_reader["str_ip"].asString(), value_reader["n_port"].asInt(), \
+        bool ret = cam_connect_video_start(value_reader["str_ip"].asString(), value_reader["n_port"].asInt(), \
                             value_reader["str_username"].asString(), value_reader["str_password"].asString(), \
                             value_reader["str_brand"].asString());
-    if (!ret) {
-        return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
-    }
+        if (!ret) {
+            return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+        }
 
-    std::string rtmp_url = m_rtmp[value_reader["str_ip"].asCString()].appPC->getRtmp();
-    Json::Value value;
-    value["connect_status"] = "True";
-    value["video_url"] = rtmp_url;
-    std::string out = value.toStyledString();
+        std::string rtmp_url = m_rtmp[value_reader["str_ip"].asCString()].appPC->getRtmp();
+        value["connect_status"] = "True";
+        value["video_url"] = rtmp_url;
+        out = value.toStyledString();
+    }
 
     return out;
 }
@@ -1422,7 +1452,7 @@
                 "sed -i '/tracker_server=/d' ./WebFDSClient.conf  && sed -i  '/\\\"host:port\\\"/atracker_server=" + \
                               value["web_pic_ip"].asString() + ":" + std::to_string(value["web_pic_port"].asInt()) + \
                               "' ./WebFDSClient.conf";//
-            std::cout << "cmd_web:" << cmd_web << std::endl;
+            DBG("cmd_web:" << cmd_web);
             system(cmd_web.c_str());
 
             //#todo fastDfsClient
@@ -1431,7 +1461,7 @@
                 "sed -i '/tracker_server=/d' ./fastDfsClient.conf  && sed -i  '/\\\"host:port\\\"/atracker_server=" + \
                               value["es_pic_ip"].asString() + ":" + std::to_string(value["es_pic_port"].asInt()) + \
                               "' ./fastDfsClient.conf";
-            std::cout << "cmd_es:" << cmd_es << std::endl;
+            DBG("cmd_es:" << cmd_es);
             system(cmd_es.c_str());
 
             //#todo config
@@ -1444,12 +1474,12 @@
                 fdfsClient.rwLock.unlock();
             }
 
-            //# http client 127.0.0.1:9999/resetFdfs
-            std::string http_cmd = "http://127.0.0.1:9999/resetFdfs";
-            HttpRequestWithCrul httpRequestWithCrul;
-            std::string response_bak = "";
-            std::string postParams_bak = "";
-            httpRequestWithCrul.curl_post_req("http://127.0.0.1:9999/resetFdfs", postParams_bak, response_bak);
+//            //# http client 127.0.0.1:9999/resetFdfs
+//            std::string http_cmd = "http://127.0.0.1:9999/resetFdfs";
+//            HttpRequestWithCrul httpRequestWithCrul;
+//            std::string response_bak = "";
+//            std::string postParams_bak = "";
+//            httpRequestWithCrul.curl_post_req("http://127.0.0.1:9999/resetFdfs", postParams_bak, response_bak);
         }
     } else {
         return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}";
@@ -1504,9 +1534,13 @@
     }
 
     if (ret) {
-        killVideoAnalysFromHCApp();
-        sleep(1);
-        runAllApp();
+        //todo
+        {
+            std::string topic = "cut_dura_edit";
+            std::string msg = content;
+            DBG("msg:" << msg);
+            nsqMsgProducer->Publish(topic, (void *) (&msg));
+        }
         return "{\"ret_status\": \"ok_ack\"}";
     } else {
         return "{\"ret_status\": \"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
@@ -1586,7 +1620,7 @@
 //            system("sed -i 's/address .*$/address 192.168.1.111/g' test");
             std::string cmd_ip =
                 "sed -i 's/address .*$/address " + ip_addr + "/g' /etc/network/interfaces";
-            std::cout << "cmd_ip:" << cmd_ip << std::endl;
+            DBG("cmd_ip:" << cmd_ip);
             system(cmd_ip.c_str());
 
             //淇敼config.json
@@ -1860,7 +1894,8 @@
 }
 
 std::string devHttpServer_c::createDatabase(std::string ip, unsigned int port, std::string content,
-                                            PResponse &response) {    DBG("ip:" << ip << "; port:" << port);
+                                            PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
     DBG("content: " << content);
     if (erlangDbTool == nullptr) {
         response->write(SimpleWeb::StatusCode::server_error_not_implemented, "{\"error\":\"鑺傜偣涓嶅瓨鍦� \"}");
@@ -1930,6 +1965,7 @@
                 ret = erlangDbTool->createDatabase(Uuid, fieldValues);
             } else if (SyncType == 0) {
                 TableName.insert(0, "lt_");
+                fieldValues["tableName"] = TableName;
                 //鏈湴搴�
                 ret = m_SqliteFaceEncap.createTable(TableName, fieldValues);
             }
@@ -2246,7 +2282,7 @@
 
                 fieldValues.insert(std::make_pair("uuid", strUUID));
                 fieldValues.insert(std::make_pair("idCard", idcard));
-                m_SqliteFaceEncap.updateFace(TableName, addFaceData, fieldValues);
+                ret_addPerson = m_SqliteFaceEncap.updateFace(TableName, addFaceData, fieldValues);
             }
 
         } else {
@@ -2404,26 +2440,27 @@
         std::string BwType = value["BwType"].asString();
         std::string StartTime = value["StartTime"].asString();
         std::string EndTime = value["EndTime"].asString();
-
+        //#鏇存柊搴曞簱绠$悊琛�
+        FieldValues fieldValues;
+        fieldValues.insert(std::make_pair("uuid", Uuid));
+        fieldValues.insert(std::make_pair("tableName", TableName));
+//            fieldValues.insert(std::make_pair("tableDesc", "ceshi2"));
+        fieldValues.insert(std::make_pair("tableType", TableType));
+        fieldValues.insert(std::make_pair("bwType", BwType));
+        fieldValues.insert(std::make_pair("startTime", StartTime));
+        fieldValues.insert(std::make_pair("endTime", EndTime));
+//            fieldValues.insert(std::make_pair("create_by", "who"));
         bool ret = false;
         if (SyncType == 1) {
             //鍚屾搴�
-            ret = erlangDbTool->updateDatabase(Uuid, TableType, TableName, SyncType, BwType, StartTime, EndTime);
+            ret = erlangDbTool->updateDatabase("sys_o_tables", fieldValues);
         } else if (SyncType == 0) {
             //鏈湴搴�
-            //#鏇存柊搴曞簱绠$悊琛�
-            FieldValues fieldValues;
-            fieldValues.insert(std::make_pair("uuid", Uuid));
             if (TableName.find("lt_") != 0) {
                 TableName.insert(0, "lt_");
             }
-            fieldValues.insert(std::make_pair("tableName", TableName));
-//            fieldValues.insert(std::make_pair("tableDesc", "ceshi2"));
-            fieldValues.insert(std::make_pair("tableType", TableType));
-            fieldValues.insert(std::make_pair("bwType", BwType));
-            fieldValues.insert(std::make_pair("startTime", StartTime));
-            fieldValues.insert(std::make_pair("endTime", EndTime));
-//            fieldValues.insert(std::make_pair("create_by", "who"));
+            fieldValues["tableName"] = TableName;
+
             ret = m_SqliteFaceEncap.updateTable("sys_o_tables", fieldValues);
         }
 
@@ -2643,6 +2680,7 @@
             std::string strSelectTemplate = R"#( -vf "select=eq(n\,%d)")#";
             sprintf(selectExpBuff, strSelectTemplate.c_str(), frameIdDiff - 1);
             if (videoSt.Valid() && imgSt.Valid()) {
+                ClockTimer clockTimer1("ffmpeg getpic");
                 std::string cmd("ffmpeg -i '" + videoPath + "'" + std::string(selectExpBuff) + " -vframes 1" + " -y '" +
                                 str_imgName + "'");
                 INFO("Video To Image Cmd: " << cmd);
@@ -2652,17 +2690,20 @@
                 return "{\"error\":\"鏈煡鍒拌棰戣矾寰刓"}";
             }
 
+            ClockTimer clockTimer2("cv::imread(str_imgName)");
             cv::Mat img = cv::imread(str_imgName);
             if (img.empty()) {
                 ERR("{\"error\":\"Video File error\"}");
                 return "{\"error\":\"瑙嗛鏂囦欢閿欒\"}";
             }
 
+            ClockTimer clockTimer3("CvUtil::cvMat2Buffer(img, buffer)");
             std::vector<unsigned char> buffer;
             CvUtil::cvMat2Buffer(img, buffer);
             std::string img_url = "http://";
             fdfsClient.rwLock.rdlock();
             if (fdfsClient.fastFds != nullptr) {
+                ClockTimer clockTimer4("fdfsClient.fastFds->uploadFile");
                 std::string t_strImg = "";
                 if (!fdfsClient.fastFds->uploadFile(buffer, t_strImg, "jpg")) {
                     img_url = "upload image fail";
@@ -2806,7 +2847,7 @@
 
     appConfig.setStringProperty("DEV_ID", dev_id);
     appConfig.save();
-    //std::cout<<dev_id<<std::endl;
+
     return true;
 }
 
@@ -3310,21 +3351,28 @@
 }
 
 std::string devHttpServer_c::getSnapshot(std::string ip, unsigned int port, std::string content, PResponse &response) {
+    DBG("ip:" << ip << "; port:" << port);
+    DBG("content: " << content);
     Json::Reader reader;
     Json::Value value;
 
     if (reader.parse(content, value)) {
-
-        std::string ip = value["str_ip"].asString();
+        std::string str_imgName = "";
+        std::string rtsp_ip = value["str_ip"].asString();
 //        int port= value["n_port"].asInt();
         int port = 554;
         std::string username = value["str_username"].asString();
         std::string pass = value["str_password"].asString();
         std::string brand = value["str_brand"].asString();
-        std::string rtsp_url = rtspAddrBuild(ip, port, username, pass, brand);
-        if (rtsp_url.empty()) {
-            return "{\"ret_status\":\"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
-        }
+        std::string rtsp_url = rtspAddrBuild(rtsp_ip, port, username, pass, brand);
+
+        if (value.isMember("id")) {
+            if (value["id"].isNull()) return "{\"ret_status\": \"id鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+            str_imgName.append("./").append(value["id"].asString()).append(".jpg");
+        } else {
+            if (rtsp_url.empty()) {
+                return "{\"ret_status\":\"鍐呭鏈夎锛岃妫�鏌ワ紒\"}";
+            }
 //        unsigned char serialnumber[SERIALNO_LEN] = {0};
 //        int ret = getDevSerialNumber(ip.c_str(), port,username.c_str(),pass.c_str(),brand.c_str(),serialnumber);
 
@@ -3336,20 +3384,22 @@
 
 //        std::string str_cam_dev_id = std::string((char *) serialnumber);//鎽勫儚鏈篿d cam_mac
 
-        std::string str_imgName = appConfig.getStringProperty("cutPath");
-        if (str_imgName.back() != '/') {
-            str_imgName.push_back('/');
-        }
-        str_imgName += ip;
-        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 + " -vf select='eq(pict_type\\,I)',setpts='N/(25*TB)' -f image2 -s 1920*1080 -y " +
-            str_imgName);
+            str_imgName = appConfig.getStringProperty("cutPath");
+            if (str_imgName.back() != '/') {
+                str_imgName.push_back('/');
+            }
+            str_imgName += rtsp_ip;
+            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 +
+                " -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());
+            DBG(cmd);
+            system(cmd.c_str());
+        }
 
         cv::Mat img = cv::imread(str_imgName);
 
@@ -3371,7 +3421,11 @@
         fdfsClient.rwLock.unlock();
         Json::Value result;
         result["imgUrl"] = strImgUrl;
-        db_c.updateCamDevSnapshot(QString::fromStdString(ip), QString::fromStdString(strImgUrl));
+        if (value.isMember("id")) {
+            db_c.updateCamDevSnapshotbyID(value["id"].asString().c_str(), QString::fromStdString(strImgUrl));
+        } else {
+            db_c.updateCamDevSnapshot(QString::fromStdString(rtsp_ip), QString::fromStdString(strImgUrl));
+        }
 
         return result.toStyledString();
 

--
Gitblit v1.8.0