소스 검색

新增设备控制、设备信息同步和之前接口优化

james 1 년 전
부모
커밋
a4837cdbcd
41개의 변경된 파일1236개의 추가작업 그리고 204개의 파일을 삭제
  1. 1 1
      AGBoxDog/dogcore.cpp
  2. 1 1
      AGBoxDog/logthread.cpp
  3. 4 2
      agElevatorProcess/agElevatorProcess.pro
  4. 15 43
      agElevatorProcess/databasethread.cpp
  5. 3 4
      agElevatorProcess/databasethread.h
  6. 161 0
      agElevatorProcess/devinfotcpserver.cpp
  7. 45 0
      agElevatorProcess/devinfotcpserver.h
  8. 58 4
      agElevatorProcess/elevatorcore.cpp
  9. 5 2
      agElevatorProcess/elevatorcore.h
  10. 10 9
      agElevatorProcess/httpthread.cpp
  11. 1 0
      agElevatorProcess/httpthread.h
  12. 3 1
      agEnvironmentProcess/environmentcore.cpp
  13. 4 1
      agEnvironmentProcess/mqttpub.cpp
  14. 11 5
      agEnvironmentProcess/mqttsub.cpp
  15. 1 0
      agEnvironmentProcess/mqttsub.h
  16. 4 2
      agGeneratorProcess/agGeneratorProcess.pro
  17. 15 43
      agGeneratorProcess/databasethread.cpp
  18. 3 4
      agGeneratorProcess/databasethread.h
  19. 141 0
      agGeneratorProcess/devinfotcpserver.cpp
  20. 45 0
      agGeneratorProcess/devinfotcpserver.h
  21. 57 4
      agGeneratorProcess/generatorcore.cpp
  22. 5 2
      agGeneratorProcess/generatorcore.h
  23. 10 10
      agGeneratorProcess/httpthread.cpp
  24. 1 0
      agGeneratorProcess/httpthread.h
  25. 4 2
      agGuardProcess/agGuardProcess.pro
  26. 15 43
      agGuardProcess/databasethread.cpp
  27. 3 4
      agGuardProcess/databasethread.h
  28. 161 0
      agGuardProcess/devinfotcpserver.cpp
  29. 45 0
      agGuardProcess/devinfotcpserver.h
  30. 58 4
      agGuardProcess/guardcore.cpp
  31. 5 2
      agGuardProcess/guardcore.h
  32. 9 8
      agGuardProcess/httpthread.cpp
  33. 1 0
      agGuardProcess/httpthread.h
  34. 6 2
      agVideoProcess/agVideoProcess.pro
  35. 60 0
      agVideoProcess/databasethread.cpp
  36. 36 0
      agVideoProcess/databasethread.h
  37. 161 0
      agVideoProcess/devinfotcpserver.cpp
  38. 45 0
      agVideoProcess/devinfotcpserver.h
  39. 16 0
      agVideoProcess/videocore.cpp
  40. 6 0
      agVideoProcess/videocore.h
  41. 1 1
      data-agbox.pro.user

+ 1 - 1
AGBoxDog/dogcore.cpp

@@ -163,7 +163,7 @@ void DogCore::time_out()
             }
         }
         if((agBoxShm->processStatus[5].t_time>0)
-                &&(static_cast<int>(chkTime1-agBoxShm->processStatus[5].t_time)>60)){
+                &&(static_cast<int>(chkTime1-agBoxShm->processStatus[5].t_time)>120)){
             if(system("killall agDP0005")!=-1){
                 if(system("/root/bin/agDP0005 &")!=-1){
                     logThread->appendData(QString("[%1 agBoxDog %2] agDP0005 time out: %3")

+ 1 - 1
AGBoxDog/logthread.cpp

@@ -42,7 +42,7 @@ void LogThread::run()
         if(dataList.length()>0){
             if(day!=QDate::currentDate().day()){
                 day = QDate::currentDate().day();
-                file = new QFile("/usky/data-agbox/agboxdog/log/dataProcessDog-"+QDate::currentDate().toString("yyyyMMdd")+".log");
+                file = new QFile("/usky/data-agbox/agboxdog/log/agboxdog-"+QDate::currentDate().toString("yyyyMMdd")+".log");
             }
             if(file->open(QIODevice::ReadWrite|QIODevice::Append|QIODevice::Text)){
                 while(dataList.length()>0){

+ 4 - 2
agElevatorProcess/agElevatorProcess.pro

@@ -13,7 +13,8 @@ SOURCES += \
     logthread.cpp \
     elevatorcore.cpp \
     databasethread.cpp \
-    httpthread.cpp
+    httpthread.cpp \
+    devinfotcpserver.cpp
 
 LIBS += -lQt5Qmqtt
 
@@ -22,4 +23,5 @@ HEADERS += \
     ../QReplyTimeout.h \
     elevatorcore.h \
     databasethread.h \
-    httpthread.h
+    httpthread.h \
+    devinfotcpserver.h

+ 15 - 43
agElevatorProcess/databasethread.cpp

@@ -1,26 +1,13 @@
 #include "databasethread.h"
 
-#define HostName "172.17.35.51"
-#define HostPort 3306
-#define UserName "usky"
-#define PassWord "Yt#75Usky"
-#define DatabaseName "usky-park"
 
-DatabaseThread::DatabaseThread(QObject *parent) : QThread(parent)
+DatabaseThread::DatabaseThread(QObject *parent, QSqlDatabase *db) :
+    QThread(parent)
 {
+    Db = db;
     hour = 255;
     keep=false;
     sqlList.clear();
-    alarmList.clear();
-
-    db = QSqlDatabase::addDatabase("QMYSQL","write_db");
-    db.setHostName(QString(HostName));
-    db.setPort(HostPort);
-    db.setUserName(QString(UserName));
-    db.setPassword(QString(PassWord));
-    db.setDatabaseName(QString(DatabaseName));
-
-
 
 }
 
@@ -29,12 +16,6 @@ void DatabaseThread::appendSql(QString sql)
     sqlList.append(sql);
 }
 
-void DatabaseThread::appendAlarm(QString sql)
-{
-    alarmList.append(sql);
-}
-
-
 void DatabaseThread::stop()
 {
     keep = false;
@@ -45,29 +26,20 @@ void DatabaseThread::run()
     keep = true;
     while (keep) {
 
-        if(!db.open()){
-            emit dbdata_log(QString("[%1] agElevatorProcess DatabaseThread db open failed").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")));
-        }else{
-            if(sqlList.length()>0){
-                while (sqlList.length()>0) {
-
-                    emit dbdata_log(QString("[%1] agElevatorProcess sql %2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(sqlList.first()));
-
-                    db.exec(sqlList.first());
-
+        if(sqlList.length()>0)
+        {
+            if(Db->transaction())
+            {
+                while(sqlList.length()>0)
+                {
+                    emit dbdata_log(QString("[%1] do sql: \"%2\"\r\n")
+                             .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"))
+                             .arg(sqlList.first()));
+                    Db->exec(sqlList.first());
                     sqlList.removeFirst();
-                    usleep(1000);
-                }
-            }
-            if(alarmList.length()>0){
-                while (alarmList.length()>0) {
-                    db.exec(alarmList.first());
-
-                    emit dbdata_log(QString("[%1] agElevatorProcess alarm sql %2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(alarmList.first()));
-
-                    alarmList.removeFirst();
-                    usleep(1000);
+                    usleep(10000);
                 }
+                Db->commit();
             }
         }
         usleep(50000);

+ 3 - 4
agElevatorProcess/databasethread.h

@@ -13,11 +13,10 @@ class DatabaseThread : public QThread
 {
     Q_OBJECT
 public:
-    explicit DatabaseThread(QObject *parent = nullptr);
+    explicit DatabaseThread(QObject *parent,QSqlDatabase *db);
     void run();
     void stop();
     void appendSql(QString sql);
-    void appendAlarm(QString sql);
 
 
 signals:
@@ -29,8 +28,8 @@ private:
     int hour;
     bool keep;
 
-    QSqlDatabase db;
-    QStringList sqlList,alarmList;
+    QSqlDatabase *Db;
+    QStringList sqlList;
 
 };
 

+ 161 - 0
agElevatorProcess/devinfotcpserver.cpp

@@ -0,0 +1,161 @@
+#include "devinfotcpserver.h"
+#include "../agVideoProcess/boxdeviceshm.h"
+
+DevInfoTcpServer::DevInfoTcpServer(QObject *parent) : QObject(parent)
+{
+    svr = new QTcpServer(this);
+    connect(svr,SIGNAL(newConnection()),this,SLOT(new_incomming()));
+
+    networkManager = new QNetworkAccessManager(this);
+    connect(networkManager,SIGNAL(finished(QNetworkReply *)),this,SLOT(finishedSlot(QNetworkReply *)));
+}
+
+void DevInfoTcpServer::start()
+{
+    if(!svr->listen(QHostAddress::Any,15230)){
+        printf("devinfo tcp listen 15230 failed\n");
+        exit(-1);
+    }
+    printf("devinfo tcp listen 15230 success\n");
+}
+
+void DevInfoTcpServer::finishedSlot(QNetworkReply *reply)
+{
+    if(reply->error() == QNetworkReply::NoError){
+        QString data = QString::fromUtf8(reply->readAll());
+        QByteArray ba = data.toLocal8Bit();
+        ba = QString::fromLocal8Bit(ba).toUtf8();
+
+        emit tcp_log(QString("[%1] elevator devinfo tcp %2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(data));
+
+        QJsonParseError json_error;
+        QJsonDocument jsonDoc = QJsonDocument::fromJson(ba,&json_error);
+        printf("tcpServer parseErr.error %d\n",json_error.error);
+        if(json_error.error==QJsonParseError::NoError){
+            QJsonObject root = jsonDoc.object();
+            QJsonValue data_val = root.value("data");
+            QJsonObject data_obj = data_val.toObject();
+            QJsonValue list_val = data_obj.value("list");
+            QString msg = "";
+            QStringList devTcpList;
+            if(list_val.isArray()){
+                QJsonArray list_array = list_val.toArray();
+                for(int i=0;i<list_array.size();i++){
+                    QJsonObject list_object = list_array.at(i).toObject();
+                    QString device_code = list_object.value("indexCode").toString();
+                    QString device_name = list_object.value("name").toString();
+                    bool found = false;
+                    for(int i=0;i<1024;i++){
+                        if((boxDeviceShm->device[i].Enabled == 0x01) && (boxDeviceShm->device[i].device_type == 503)){
+                            if(device_code.compare(QString(boxDeviceShm->device[i].device_code))==0){
+                                found = true;
+                                msg.append(QString("{\"product_id\": \"3\",\"company_code\": \"10000001\",\"device_id\": \"%1\",\"device_code\": \"%2\",\"device_name\": \"%3\",\"flag\": 0},").arg(boxDeviceShm->device[i].device_id).arg(device_code).arg(device_name));
+                                break;
+                            }
+                        }
+                    }
+                    if(!found){
+                        QString device_id = QCryptographicHash::hash(QString("3%1").arg(device_code).toUtf8(),QCryptographicHash::Md5).toHex();
+                        QString sql = QString("insert into yt_t_device values('%1','%2',503,'10000001',null);").arg(device_code).arg(device_id);
+                        emit append_sql(sql);
+
+                        msg.append(QString("{\"product_id\": \"3\",\"company_code\": \"10000001\",\"device_id\": \"%1\",\"device_code\": \"%2\",\"device_name\": \"%3\",\"flag\": 1},").arg(device_id).arg(device_code).arg(device_name));
+                    }
+                    devTcpList.append(device_code);
+                }
+            }
+
+
+            for(int i=0;i<1024;i++){
+                if((boxDeviceShm->device[i].Enabled == 0x01) && (boxDeviceShm->device[i].device_type == 503)){
+                    bool found1 = false;
+                    QString device_code = QString(boxDeviceShm->device[i].device_code);
+                    if(devTcpList.size() > 0){
+                        for(int j=0;j<devTcpList.size();j++){
+                            if(device_code.compare(devTcpList.at(j))==0){
+                                found1 = true;
+                                break;
+                            }
+                        }
+
+                    }
+                    if(!found1){
+                        QString sql = QString("delete from yt_t_device where device_code = '%1';").arg(device_code);
+                        emit append_sql(sql);
+
+                        msg.append(QString("{\"product_id\": \"3\",\"company_code\": \"10000001\",\"device_id\": \"%1\",\"device_code\": \"%2\",\"device_name\": \"\",\"flag\": -1},").arg(boxDeviceShm->device[i].device_id).arg(device_code));
+                    }
+
+                }
+            }
+
+
+            msg = msg.left(msg.length()-1);
+            QString msgrec = QString("HTTP/1.1 200 OK\r\nAccess-Control-Allow-Origin: *\r\nContent-type: text/plain\r\n\r\n{\"code\": \"0\",\"msg\": \"success\",\"data\": [%1]}").arg(msg);
+            so->write(msgrec.toUtf8());
+            so->close();
+        }
+    }
+
+    reply->abort();
+    reply->deleteLater();
+}
+
+void DevInfoTcpServer::new_incomming()
+{
+    so = svr->nextPendingConnection();
+    connect(so,SIGNAL(readyRead()),this,SLOT(read_data()));
+
+}
+
+void DevInfoTcpServer::read_data()
+{
+    QString str = QString::fromUtf8(so->readAll());
+    int begin = str.indexOf("{",0);
+    int len = str.length();
+    QString datetime = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");
+    QString data = str.mid(begin,len-begin+1);
+    emit tcp_log(QString("[%1] elevator deviceinfo tcp %2").arg(datetime).arg(data));
+    QByteArray ba = data.toLocal8Bit();
+    ba = QString::fromLocal8Bit(ba).toUtf8();
+
+    QJsonParseError parse_error;
+    QJsonDocument jsonDoc = QJsonDocument::fromJson(ba,&parse_error);
+    printf("tcpserver parse_error %d\n",parse_error.error);
+    if(parse_error.error == QJsonParseError::NoError){
+        QJsonObject doc = jsonDoc.object();
+        QJsonValue param_val = doc.value("params");
+        QJsonObject param_obj = param_val.toObject();
+        QJsonValue regionIndexCodes = param_obj.value("regionIndexCodes");
+        QString regions = "";
+        if(regionIndexCodes.isArray()){
+            QJsonArray region_array = regionIndexCodes.toArray();
+            for(int i=0;i<region_array.size();i++){
+                regions.append(QString("\"%1\"").arg(region_array.at(i).toString())).append(",");
+            }
+        }
+        if(regions.length() > 1){
+            regions = regions.left(regions.length()-1);
+            QNetworkRequest *req = new QNetworkRequest();
+            req->setUrl(QUrl("https://172.17.200.250:443/artemis/api/resource/v2/ecsDevice/search"));
+            req->setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
+            req->setRawHeader("Accept","*/*");
+            req->setRawHeader("Connection","keep-alive");
+            req->setRawHeader("Cache-Control"," no-cache");
+            req->setRawHeader("X-Ca-Key","27997984");
+            req->setRawHeader("X-Ca-Signature","rYhzIwbT3nxb6OMmn8kwj/5aKYur8qTcQWet96GTrbk=");
+            req->setRawHeader("X-Ca-Signature-Headers","x-ca-key");
+            config = req->sslConfiguration();
+            config.setPeerVerifyMode(QSslSocket::VerifyNone);
+            config.setProtocol(QSsl::TlsV1_0OrLater);
+            req->setSslConfiguration(config);
+            QString postdata = QString("{\"regionIndexCodes\": [%1],\"pageNo\": 1,\"pageSize\": 500}").arg(regions);
+            emit tcp_log(QString("[%1] elevator deviceinfo tcp postdata %2").arg(datetime).arg(postdata));
+            req->setRawHeader("Content_Length",QString("%1").arg(postdata.length()).toUtf8());
+            networkManager->post(*req,postdata.toUtf8());
+        }
+
+    }
+
+
+}

+ 45 - 0
agElevatorProcess/devinfotcpserver.h

@@ -0,0 +1,45 @@
+#ifndef DEVINFOTCPSERVER_H
+#define DEVINFOTCPSERVER_H
+
+#include <QObject>
+#include <QTcpServer>
+#include <QTcpSocket>
+#include <QDateTime>
+#include <QNetworkAccessManager>
+#include <QNetworkRequest>
+#include <QNetworkReply>
+#include <QSslConfiguration>
+#include <QVariant>
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QJsonValue>
+#include <QJsonArray>
+#include <QJsonParseError>
+#include <QCryptographicHash>
+
+class DevInfoTcpServer : public QObject
+{
+    Q_OBJECT
+public:
+    explicit DevInfoTcpServer(QObject *parent = nullptr);
+    void start();
+
+signals:
+    void tcp_log(QString log);
+    void append_sql(QString sql);
+
+public slots:
+    void new_incomming();
+    void read_data();
+    void finishedSlot(QNetworkReply *reply);
+
+private:
+    QTcpServer *svr;
+    QTcpSocket *so;
+
+    QNetworkAccessManager *networkManager;
+    QSslConfiguration config;
+
+};
+
+#endif // DEVINFOTCPSERVER_H

+ 58 - 4
agElevatorProcess/elevatorcore.cpp

@@ -15,7 +15,41 @@ void ElevatorCore::shm_init(){
         password = qry.value(3).toString();
     }
     qry.clear();
+    int nrow = 0;
     sql.clear();
+    sql = QString("select device_code,device_id,device_type,company_code,device_gateway from yt_t_device");
+    qry = db.exec(sql);
+    while (qry.next()) {
+        if(nrow > 1023)
+            break;
+        boxDeviceShm->device[nrow].Enabled = 0x01;
+        sprintf(boxDeviceShm->device[nrow].device_code,"%s",qry.value(0).toString().toUtf8().data());
+        sprintf(boxDeviceShm->device[nrow].device_id,"%s",qry.value(1).toString().toUtf8().data());
+        boxDeviceShm->device[nrow].device_type = qry.value(2).toInt();
+        sprintf(boxDeviceShm->device[nrow].company_code,"%s",qry.value(3).toString().toUtf8().data());
+        sprintf(boxDeviceShm->device[nrow].device_gateway,"%s",qry.value(4).toString().toUtf8().data());
+        nrow++;
+    }
+    for(int i=nrow;i<1024;i++){
+        boxDeviceShm->device[i].Enabled = 0x00;
+    }
+    nrow = 0;
+    qry.clear();
+    sql.clear();
+    sql = QString("select device_type,attribute_name,attribute_code from yt_t_attribute");
+    qry = db.exec(sql);
+    while (qry.next()) {
+        if(nrow > 299)
+            break;
+        boxDeviceShm->procuctattrbute[nrow].Enabled = 0x01;
+        boxDeviceShm->procuctattrbute[nrow].device_type = qry.value(0).toInt();
+        sprintf(boxDeviceShm->procuctattrbute[nrow].attribute_name,"%s",qry.value(1).toString().toUtf8().data());
+        sprintf(boxDeviceShm->procuctattrbute[nrow].attribute_code,"%s",qry.value(2).toString().toUtf8().data());
+        nrow++;
+    }
+    for(int i=nrow;i<300;i++){
+        boxDeviceShm->procuctattrbute[i].Enabled = 0x00;
+    }
 
 }
 
@@ -57,6 +91,7 @@ ElevatorCore::ElevatorCore(QObject *parent) : QObject(parent)
     }
 
     mqttIdx = 1;
+    mqttEventIdx = 1;
     m_client = new QMQTT::Client(QHostAddress(ip),static_cast<quint16>(port.toInt()),this);
     connect(m_client,&QMQTT::Client::connected,this,&ElevatorCore::onConnected);
     m_client->setUsername(username);
@@ -64,13 +99,17 @@ ElevatorCore::ElevatorCore(QObject *parent) : QObject(parent)
     m_client->setCleanSession(true);
     m_client->connectToHost();
 
-    dbthread = new DatabaseThread(this);
-    dbthread->start();
+    dbthread = new DatabaseThread(this,&db);
+    connect(dbthread,&DatabaseThread::dbdata_log,this,&ElevatorCore::dataLog);
 
     httpthread = new HttpThread(this);
     connect(httpthread,&HttpThread::dataLog,this,&ElevatorCore::dataLog);
     connect(httpthread,&HttpThread::mqttData,this,&ElevatorCore::mqtt_data);
-    connect(httpthread,&HttpThread::appendSql,this,&ElevatorCore::append_sql);
+    connect(httpthread,&HttpThread::mqttEvent,this,&ElevatorCore::mqtt_event);
+
+    devinfoserver = new DevInfoTcpServer(this);
+    connect(devinfoserver,&DevInfoTcpServer::tcp_log,this,&ElevatorCore::dataLog);
+    connect(devinfoserver,&DevInfoTcpServer::append_sql,this,&ElevatorCore::appendSql);
 
 }
 
@@ -84,6 +123,8 @@ ElevatorCore::~ElevatorCore()
 
 void ElevatorCore::start()
 {
+    dbthread->start();
+    devinfoserver->start();
 
 }
 void ElevatorCore::onConnected()
@@ -108,9 +149,22 @@ void ElevatorCore::mqtt_data(QString mqtt_msg)
     }
 }
 
-void ElevatorCore::append_sql(QString sql)
+void ElevatorCore::mqtt_event(QString mqtt_msg)
+{
+    printf("test3333 mqtt event [%s]\n",mqtt_msg.toUtf8().data());
+    if((m_client->connectionState()==QMQTT::STATE_INIT)||(m_client->connectionState()==QMQTT::STATE_DISCONNECTED)){
+        m_client->connectToHost();
+    }
+    m_client->publish(QMQTT::Message(mqttEventIdx++,"event-collector",mqtt_msg.toUtf8()));
+    if(mqttEventIdx > 9999){
+        mqttEventIdx = 1;
+    }
+}
+
+void ElevatorCore::appendSql(QString sql)
 {
     dbthread->appendSql(sql);
+    shm_init();
 }
 
 

+ 5 - 2
agElevatorProcess/elevatorcore.h

@@ -9,6 +9,7 @@
 #include "logthread.h"
 #include "httpthread.h"
 #include "databasethread.h"
+#include "devinfotcpserver.h"
 
 #include <QObject>
 
@@ -28,16 +29,18 @@ public slots:
     void onConnected();
     void dataLog(QString log);
     void mqtt_data(QString mqtt_msg);
-    void append_sql(QString sql);
+    void mqtt_event(QString mqtt_event);
+    void appendSql(QString sql);
 
 private:
     LogThread *logthread;
     HttpThread *httpthread;
     DatabaseThread *dbthread;
+    DevInfoTcpServer *devinfoserver;
 
     QMQTT::Client *m_client;
     QSqlDatabase db;
-    quint16 mqttIdx;
+    quint16 mqttIdx,mqttEventIdx;
     QString ip,port,username,password;
 
 signals:

+ 10 - 9
agElevatorProcess/httpthread.cpp

@@ -40,7 +40,6 @@ void  HttpThread::finishedSlot(QNetworkReply *reply)
             QJsonObject data_object = data_value.toObject();
             QJsonValue list_value = data_object.value("rows");
             if(list_value.isArray()){
-                emit appendSql(QString("delete from event_lc where event_time >= '%1' and event_time <= '%2';").arg(startTime).arg(endTime));
                 QJsonArray list_array = list_value.toArray();
                 for(int i=0;i<list_array.size();i++){
                     QJsonObject list_object = list_array.at(i).toObject();
@@ -50,18 +49,20 @@ void  HttpThread::finishedSlot(QNetworkReply *reply)
                     QString eventId = list_object.value("eventId").toString();
                     int eventType = list_object.value("eventType").toInt();
                     QString eventName = list_object.value("eventName").toString();
-                    QString eventTime = list_object.value("eventTime").toString();
+                    QDateTime date = QDateTime::fromString(list_object.value("eventTime").toString(), "yyyy-MM-ddTHH:mm:ss.zzz+08:00");
+                    QString eventTime = date.toLocalTime().toString("yyyy-MM-dd HH:mm:ss");
                     QString personId = list_object.value("personId").toString();
                     QString cardNo = list_object.value("cardNo").toString();
                     QString personName = list_object.value("personName").toString();
                     QString orgId = list_object.value("orgId").toString();
                     QString orgName = list_object.value("orgName").toString();
-                    QString receiveTime = list_object.value("receiveTime").toString();
+                    QDateTime date1 = QDateTime::fromString(list_object.value("receiveTime").toString(), "yyyy-MM-ddTHH:mm:ss.zzz+08:00");
+                    QString receiveTime = date.toLocalTime().toString("yyyy-MM-dd HH:mm:ss");
                     for(int i=0;i<1024;i++){
                         if(boxDeviceShm->device[i].Enabled == 0x01){
                             if(device_code.compare(QString(boxDeviceShm->device[i].device_code))==0){
-                                emit appendSql(QString::fromLocal8Bit("insert into event_lc (device_id, device_code, device_name, lift_name, event_id, event_type, event_name, event_time, person_id, card_no, person_name, org_id, org_name, receive_time) values('%1','%2','%3','%4','%5',%6,'%7','%8','%9','%10','%11','%12','%13','%14');")
-                                              .arg(QString(boxDeviceShm->device[i].device_id)).arg(device_code).arg(deviceName).arg(liftName).arg(eventId).arg(eventType).arg(eventName).arg(eventTime).arg(personId).arg(cardNo).arg(personName).arg(orgId).arg(orgName).arg(receiveTime));
+                                emit mqttEvent(QString("{\"device_id\":\"%1\",\"device_code\":\"%2\",\"product_id\":\"%3\",\"timestamp\":%4,\"tags\":{\"device_id\":\"%5\",\"device_code\":\"%6\",\"device_name\":\"%7\",\"lift_name\":\"%8\",\"event_id\":\"%9\",\"event_name\":\"%10\",\"event_time\":\"%11\",\"person_id\":\"%12\",\"card_no\":\"%13\",\"person_name\":\"%14\",\"org_id\":\"%15\",\"org_name\":\"%16\",\"receive_time\":\"%17\"},\"metrics\":{\"event_type\":%18},\"device_type\":\"%19-lc\"}")
+                                              .arg(QString(boxDeviceShm->device[i].device_id)).arg(device_code).arg(QString(boxDeviceShm->device[i].company_code)).arg(QDateTime::currentDateTime().toTime_t()).arg(QString(boxDeviceShm->device[i].device_id)).arg(device_code).arg(deviceName).arg(liftName).arg(eventId).arg(eventName).arg(eventTime).arg(personId).arg(cardNo).arg(personName).arg(orgId).arg(orgName).arg(receiveTime).arg(eventType).arg(boxDeviceShm->device[i].device_type));
                                 break;
                             }
                         }
@@ -153,12 +154,12 @@ void HttpThread::time_out()
 {
     agBoxShm->processStatus[3].t_time=QDateTime::currentDateTime().toTime_t();
 
-    if(QDateTime::currentDateTime().time().minute()!=minute){//每分钟执行一次,统计从现在算起之前10分钟时间内的人员通行记录(插入之前先执行删除这个时间端数据的命令)
+    if(QDateTime::currentDateTime().time().minute()!=minute){//每分钟获取过去第八分钟这分钟的人员通行数据,封装成mqtt推送到写程序,然后由写程序处理
         minute = QDateTime::currentDateTime().time().minute();
-        QString tempTime1 = QDateTime::currentDateTime().addSecs(-600).toString("yyyy-MM-ddTHH:mm");
-        QString tempTime2 = QDateTime::currentDateTime().addSecs(-60).toString("yyyy-MM-ddTHH:mm");
+        QString tempTime1 = QDateTime::currentDateTime().addSecs(-480).toString("yyyy-MM-ddTHH:mm");
+//        QString tempTime2 = QDateTime::currentDateTime().addSecs(-60).toString("yyyy-MM-ddTHH:mm");
         startTime = QString("%1:00+08:00").arg(tempTime1);
-        endTime = QString("%1:59+08:00").arg(tempTime2);
+        endTime = QString("%1:59+08:00").arg(tempTime1);
 
         printf("startTime: %s, endTime %s\n",startTime.toUtf8().data(),endTime.toUtf8().data());
 

+ 1 - 0
agElevatorProcess/httpthread.h

@@ -26,6 +26,7 @@ public:
 signals:
     void dataLog(QString log);
     void mqttData(QString mqtt_msg);
+    void mqttEvent(QString mqtt_event);
     void appendSql(QString sql);
 
 public slots:

+ 3 - 1
agEnvironmentProcess/environmentcore.cpp

@@ -73,7 +73,7 @@ EnvironmentCore::EnvironmentCore(QObject *parent) : QObject(parent)
 
     timer = new QTimer(this);
     connect(timer,&QTimer::timeout,this,&EnvironmentCore::time_out);
-    timer->start(300000);
+    timer->start(1000);
 
 }
 
@@ -95,6 +95,8 @@ void EnvironmentCore::start()
 
 void EnvironmentCore::time_out()
 {
+    agBoxShm->processStatus[5].t_time=QDateTime::currentDateTime().toTime_t();
+
     for(int i=0;i<1024;i++){
         if((boxDeviceShm->device[i].Enabled == 0x01)&&(boxDeviceShm->device[i].device_type == 509)){
             uint curTime = QDateTime::currentDateTime().toTime_t();

+ 4 - 1
agEnvironmentProcess/mqttpub.cpp

@@ -38,8 +38,10 @@ void MqttPub::run()
                     QJsonObject obj_doc = doc.object();
                     QString sn = obj_doc.value("sn").toString();
                     int ts = obj_doc.value("ts").toInt();
+                    QDateTime datetime = QDateTime::fromTime_t(ts);
+                    int minute = datetime.time().minute();
                     QJsonValue dev_value = obj_doc.value("devs");
-                    if(dev_value.isArray()){
+                    if(dev_value.isArray() && (minute == 00)){
                         QJsonArray list_array = dev_value.toArray();
                         for(int i=0;i<list_array.size();i++){
                             QJsonObject obj_dev = list_array.at(i).toObject();
@@ -48,6 +50,7 @@ void MqttPub::run()
                             for(int i=0;i<1024;i++){
                                 if(boxDeviceShm->device[i].Enabled == 0x01){
                                     if(deviceCode.compare(QString(boxDeviceShm->device[i].device_code))==0){
+                                        boxDeviceShm->device[i].lastTime = QDateTime::currentDateTime().toTime_t();
                                         deviceId = QString(boxDeviceShm->device[i].device_id);
                                         companyCode = QString(boxDeviceShm->device[i].company_code);
                                         deviceType = QString::number(boxDeviceShm->device[i].device_type);

+ 11 - 5
agEnvironmentProcess/mqttsub.cpp

@@ -1,8 +1,10 @@
 #include "mqttsub.h"
 #include "../AGBoxDog/boxshm.h"
+#include "../agVideoProcess/boxdeviceshm.h"
 
 MqttSub::MqttSub(QObject *parent) : QThread(parent)
 {
+    minute = 255;
 
     timer = new QTimer(this);
     connect(timer,&QTimer::timeout,this,&MqttSub::time_out);
@@ -15,11 +17,10 @@ void MqttSub::run()
 
 void MqttSub::time_out()
 {
-    agBoxShm->processStatus[5].t_time=QDateTime::currentDateTime().toTime_t();
-
     if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
         m_client->connectToHost();
     }
+
 }
 
 void MqttSub::mqtt_conf(QString ip,QString port,QString username,QString password)
@@ -56,11 +57,16 @@ void MqttSub::onConnected()
 
 void MqttSub::onReceived(const QMQTT::Message &message)
 {
+    agBoxShm->processStatus[5].t_time=QDateTime::currentDateTime().toTime_t();
+
+    minute = QDateTime::currentDateTime().time().minute();
+    if((minute==01)||(minute==02)){
+        QString topic = message.topic();
+        QByteArray data = message.payload();
 
-    QString topic = message.topic();
-    QByteArray data = message.payload();
+        emit sendMqttData(topic,data);
+    }
 
-    emit sendMqttData(topic,data);
 }
 
 

+ 1 - 0
agEnvironmentProcess/mqttsub.h

@@ -28,6 +28,7 @@ private:
     QTimer *timer;
 
     QMQTT::Client *m_client;
+    int minute;
 
 };
 

+ 4 - 2
agGeneratorProcess/agGeneratorProcess.pro

@@ -12,7 +12,8 @@ SOURCES += \
     logthread.cpp \
     databasethread.cpp \
     httpthread.cpp \
-    generatorcore.cpp
+    generatorcore.cpp \
+    devinfotcpserver.cpp
 
 INCLUDEPATH += ../qmqtt-master/src/mqtt/
 
@@ -21,6 +22,7 @@ HEADERS += \
     ../QReplyTimeout.h \
     databasethread.h \
     httpthread.h \
-    generatorcore.h
+    generatorcore.h \
+    devinfotcpserver.h
 
 LIBS += -lQt5Qmqtt

+ 15 - 43
agGeneratorProcess/databasethread.cpp

@@ -1,26 +1,13 @@
 #include "databasethread.h"
 
-#define HostName "172.17.35.51"
-#define HostPort 3306
-#define UserName "usky"
-#define PassWord "Yt#75Usky"
-#define DatabaseName "usky-park"
 
-DatabaseThread::DatabaseThread(QObject *parent) : QThread(parent)
+DatabaseThread::DatabaseThread(QObject *parent, QSqlDatabase *db) :
+    QThread(parent)
 {
+    Db = db;
     hour = 255;
     keep=false;
     sqlList.clear();
-    alarmList.clear();
-
-    db = QSqlDatabase::addDatabase("QMYSQL","write_db");
-    db.setHostName(QString(HostName));
-    db.setPort(HostPort);
-    db.setUserName(QString(UserName));
-    db.setPassword(QString(PassWord));
-    db.setDatabaseName(QString(DatabaseName));
-
-
 
 }
 
@@ -29,12 +16,6 @@ void DatabaseThread::appendSql(QString sql)
     sqlList.append(sql);
 }
 
-void DatabaseThread::appendAlarm(QString sql)
-{
-    alarmList.append(sql);
-}
-
-
 void DatabaseThread::stop()
 {
     keep = false;
@@ -45,29 +26,20 @@ void DatabaseThread::run()
     keep = true;
     while (keep) {
 
-        if(!db.open()){
-            emit dbdata_log(QString("[%1] agGeneratorProcess DatabaseThread db open failed").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")));
-        }else{
-            if(sqlList.length()>0){
-                while (sqlList.length()>0) {
-
-                    emit dbdata_log(QString("[%1] agGeneratorProcess sql %2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(sqlList.first()));
-
-                    db.exec(sqlList.first());
-
+        if(sqlList.length()>0)
+        {
+            if(Db->transaction())
+            {
+                while(sqlList.length()>0)
+                {
+                    emit dbdata_log(QString("[%1] do sql: \"%2\"\r\n")
+                             .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"))
+                             .arg(sqlList.first()));
+                    Db->exec(sqlList.first());
                     sqlList.removeFirst();
-                    usleep(1000);
-                }
-            }
-            if(alarmList.length()>0){
-                while (alarmList.length()>0) {
-                    db.exec(alarmList.first());
-
-                    emit dbdata_log(QString("[%1] agGeneratorProcess alarm sql %2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(alarmList.first()));
-
-                    alarmList.removeFirst();
-                    usleep(1000);
+                    usleep(10000);
                 }
+                Db->commit();
             }
         }
         usleep(50000);

+ 3 - 4
agGeneratorProcess/databasethread.h

@@ -13,11 +13,10 @@ class DatabaseThread : public QThread
 {
     Q_OBJECT
 public:
-    explicit DatabaseThread(QObject *parent = nullptr);
+    explicit DatabaseThread(QObject *parent,QSqlDatabase *db);
     void run();
     void stop();
     void appendSql(QString sql);
-    void appendAlarm(QString sql);
 
 
 signals:
@@ -29,8 +28,8 @@ private:
     int hour;
     bool keep;
 
-    QSqlDatabase db;
-    QStringList sqlList,alarmList;
+    QSqlDatabase *Db;
+    QStringList sqlList;
 
 };
 

+ 141 - 0
agGeneratorProcess/devinfotcpserver.cpp

@@ -0,0 +1,141 @@
+#include "devinfotcpserver.h"
+#include "../agVideoProcess/boxdeviceshm.h"
+
+DevInfoTcpServer::DevInfoTcpServer(QObject *parent) : QObject(parent)
+{
+    svr = new QTcpServer(this);
+    connect(svr,SIGNAL(newConnection()),this,SLOT(new_incomming()));
+
+    networkManager = new QNetworkAccessManager(this);
+    connect(networkManager,SIGNAL(finished(QNetworkReply *)),this,SLOT(finishedSlot(QNetworkReply *)));
+}
+
+void DevInfoTcpServer::start()
+{
+    if(!svr->listen(QHostAddress::Any,15231)){
+        printf("devinfo tcp listen 15231 failed\n");
+        exit(-1);
+    }
+    printf("devinfo tcp listen 15231 success\n");
+}
+
+void DevInfoTcpServer::finishedSlot(QNetworkReply *reply)
+{
+    if(reply->error() == QNetworkReply::NoError){
+        QString data = QString::fromUtf8(reply->readAll());
+        QByteArray ba = data.toLocal8Bit();
+        ba = QString::fromLocal8Bit(ba).toUtf8();
+
+        emit tcp_log(QString("[%1] generator devinfo tcp %2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(data));
+
+        QJsonParseError json_error;
+        QJsonDocument jsonDoc = QJsonDocument::fromJson(ba,&json_error);
+        printf("tcpServer parseErr.error %d\n",json_error.error);
+        if(json_error.error==QJsonParseError::NoError){
+            QJsonObject root = jsonDoc.object();
+            QJsonValue data_val = root.value("data");
+            QJsonObject data_obj = data_val.toObject();
+            QJsonValue list_val = data_obj.value("data");
+            QString msg = "";
+            QStringList devTcpList;
+            if(list_val.isArray()){
+                QJsonArray list_array = list_val.toArray();
+                for(int i=0;i<list_array.size();i++){
+                    QJsonObject list_object = list_array.at(i).toObject();
+                    QString device_code = QString::number(list_object.value("id").toInt());
+                    QString device_name = list_object.value("name").toString();
+                    bool found = false;
+                    for(int i=0;i<1024;i++){
+                        if((boxDeviceShm->device[i].Enabled == 0x01) && (boxDeviceShm->device[i].device_type == 504)){
+                            if(device_code.compare(QString(boxDeviceShm->device[i].device_code))==0){
+                                found = true;
+                                msg.append(QString("{\"product_id\": \"4\",\"company_code\": \"10000001\",\"device_id\": \"%1\",\"device_code\": \"%2\",\"device_name\": \"%3\",\"flag\": 0},").arg(boxDeviceShm->device[i].device_id).arg(device_code).arg(device_name));
+                                break;
+                            }
+                        }
+                    }
+                    if(!found){
+                        QString device_id = QCryptographicHash::hash(QString("4%1").arg(device_code).toUtf8(),QCryptographicHash::Md5).toHex();
+                        QString sql = QString("insert into yt_t_device values('%1','%2',504,'10000001',null);").arg(device_code).arg(device_id);
+                        emit append_sql(sql);
+
+                        msg.append(QString("{\"product_id\": \"4\",\"company_code\": \"10000001\",\"device_id\": \"%1\",\"device_code\": \"%2\",\"device_name\": \"%3\",\"flag\": 1},").arg(device_id).arg(device_code).arg(device_name));
+                    }
+                    devTcpList.append(device_code);
+                }
+            }
+
+
+            for(int i=0;i<1024;i++){
+                if((boxDeviceShm->device[i].Enabled == 0x01) && (boxDeviceShm->device[i].device_type == 504)){
+                    bool found1 = false;
+                    QString device_code = QString(boxDeviceShm->device[i].device_code);
+                    if(devTcpList.size() > 0){
+                        for(int j=0;j<devTcpList.size();j++){
+                            if(device_code.compare(devTcpList.at(j))==0){
+                                found1 = true;
+                                break;
+                            }
+                        }
+
+                    }
+                    if(!found1){
+                        QString sql = QString("delete from yt_t_device where device_code = '%1';").arg(device_code);
+                        emit append_sql(sql);
+
+                        msg.append(QString("{\"product_id\": \"4\",\"company_code\": \"10000001\",\"device_id\": \"%1\",\"device_code\": \"%2\",\"device_name\": \"\",\"flag\": -1},").arg(boxDeviceShm->device[i].device_id).arg(device_code));
+                    }
+
+                }
+            }
+
+
+            msg = msg.left(msg.length()-1);
+            QString msgrec = QString("HTTP/1.1 200 OK\r\nAccess-Control-Allow-Origin: *\r\nContent-type: text/plain\r\n\r\n{\"code\": \"0\",\"msg\": \"success\",\"data\": [%1]}").arg(msg);
+            so->write(msgrec.toUtf8());
+            so->close();
+        }
+    }
+
+    reply->abort();
+    reply->deleteLater();
+}
+
+void DevInfoTcpServer::new_incomming()
+{
+    so = svr->nextPendingConnection();
+    connect(so,SIGNAL(readyRead()),this,SLOT(read_data()));
+
+}
+
+void DevInfoTcpServer::read_data()
+{
+    QString str = QString::fromUtf8(so->readAll());
+    int begin = str.indexOf("{",0);
+    int len = str.length();
+    QString datetime = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");
+    QString data = str.mid(begin,len-begin+1);
+    emit tcp_log(QString("[%1] generator deviceinfo tcp %2").arg(datetime).arg(data));
+    QByteArray ba = data.toLocal8Bit();
+    ba = QString::fromLocal8Bit(ba).toUtf8();
+
+    QJsonParseError parse_error;
+    QJsonDocument jsonDoc = QJsonDocument::fromJson(ba,&parse_error);
+    printf("tcpserver parse_error %d\n",parse_error.error);
+    if(parse_error.error == QJsonParseError::NoError){
+        QJsonObject doc = jsonDoc.object();
+        QJsonValue param_val = doc.value("params");
+        QJsonObject param_obj = param_val.toObject();
+        QString sceneId = param_obj.value("scene_id").toString();
+        QNetworkRequest *req = new QNetworkRequest();
+        req->setUrl(QUrl("http://172.17.200.209:8080/service/page/node.json?paged=1"));
+        req->setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
+        req->setRawHeader("USER-KEY","426aad8a150a4d85a8fa7221085edca3");
+        QString postdata = QString("{\"scene_id\": %1}").arg(sceneId);
+        req->setRawHeader("Content_Length",QString("%1").arg(postdata.length()).toUtf8());
+        networkManager->post(*req,postdata.toUtf8());
+
+    }
+
+
+}

+ 45 - 0
agGeneratorProcess/devinfotcpserver.h

@@ -0,0 +1,45 @@
+#ifndef DEVINFOTCPSERVER_H
+#define DEVINFOTCPSERVER_H
+
+#include <QObject>
+#include <QTcpServer>
+#include <QTcpSocket>
+#include <QDateTime>
+#include <QNetworkAccessManager>
+#include <QNetworkRequest>
+#include <QNetworkReply>
+#include <QSslConfiguration>
+#include <QVariant>
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QJsonValue>
+#include <QJsonArray>
+#include <QJsonParseError>
+#include <QCryptographicHash>
+
+class DevInfoTcpServer : public QObject
+{
+    Q_OBJECT
+public:
+    explicit DevInfoTcpServer(QObject *parent = nullptr);
+    void start();
+
+signals:
+    void tcp_log(QString log);
+    void append_sql(QString sql);
+
+public slots:
+    void new_incomming();
+    void read_data();
+    void finishedSlot(QNetworkReply *reply);
+
+private:
+    QTcpServer *svr;
+    QTcpSocket *so;
+
+    QNetworkAccessManager *networkManager;
+    QSslConfiguration config;
+
+};
+
+#endif // DEVINFOTCPSERVER_H

+ 57 - 4
agGeneratorProcess/generatorcore.cpp

@@ -15,7 +15,41 @@ void GeneratorCore::shm_init(){
         password = qry.value(3).toString();
     }
     qry.clear();
+    int nrow = 0;
     sql.clear();
+    sql = QString("select device_code,device_id,device_type,company_code,device_gateway from yt_t_device");
+    qry = db.exec(sql);
+    while (qry.next()) {
+        if(nrow > 1023)
+            break;
+        boxDeviceShm->device[nrow].Enabled = 0x01;
+        sprintf(boxDeviceShm->device[nrow].device_code,"%s",qry.value(0).toString().toUtf8().data());
+        sprintf(boxDeviceShm->device[nrow].device_id,"%s",qry.value(1).toString().toUtf8().data());
+        boxDeviceShm->device[nrow].device_type = qry.value(2).toInt();
+        sprintf(boxDeviceShm->device[nrow].company_code,"%s",qry.value(3).toString().toUtf8().data());
+        sprintf(boxDeviceShm->device[nrow].device_gateway,"%s",qry.value(4).toString().toUtf8().data());
+        nrow++;
+    }
+    for(int i=nrow;i<1024;i++){
+        boxDeviceShm->device[i].Enabled = 0x00;
+    }
+    nrow = 0;
+    qry.clear();
+    sql.clear();
+    sql = QString("select device_type,attribute_name,attribute_code from yt_t_attribute");
+    qry = db.exec(sql);
+    while (qry.next()) {
+        if(nrow > 299)
+            break;
+        boxDeviceShm->procuctattrbute[nrow].Enabled = 0x01;
+        boxDeviceShm->procuctattrbute[nrow].device_type = qry.value(0).toInt();
+        sprintf(boxDeviceShm->procuctattrbute[nrow].attribute_name,"%s",qry.value(1).toString().toUtf8().data());
+        sprintf(boxDeviceShm->procuctattrbute[nrow].attribute_code,"%s",qry.value(2).toString().toUtf8().data());
+        nrow++;
+    }
+    for(int i=nrow;i<300;i++){
+        boxDeviceShm->procuctattrbute[i].Enabled = 0x00;
+    }
 
 }
 
@@ -57,6 +91,7 @@ GeneratorCore::GeneratorCore(QObject *parent) : QObject(parent)
     }
 
     mqttIdx = 1;
+    mqttAlarmIdx = 1;
     m_client = new QMQTT::Client(QHostAddress(ip),static_cast<quint16>(port.toInt()),this);
     connect(m_client,&QMQTT::Client::connected,this,&GeneratorCore::onConnected);
     m_client->setUsername(username);
@@ -64,13 +99,18 @@ GeneratorCore::GeneratorCore(QObject *parent) : QObject(parent)
     m_client->setCleanSession(true);
     m_client->connectToHost();
 
-    dbthread = new DatabaseThread(this);
+    dbthread = new DatabaseThread(this,&db);
+    connect(dbthread,&DatabaseThread::dbdata_log,this,&GeneratorCore::dataLog);
     dbthread->start();
 
     httpthread = new HttpThread(this);
     connect(httpthread,&HttpThread::dataLog,this,&GeneratorCore::dataLog);
     connect(httpthread,&HttpThread::mqttData,this,&GeneratorCore::mqtt_data);
-    connect(httpthread,&HttpThread::appendSql,this,&GeneratorCore::append_sql);
+    connect(httpthread,&HttpThread::mqttAlarm,this,&GeneratorCore::mqtt_alarm);
+
+    devinfoserver = new DevInfoTcpServer(this);
+    connect(devinfoserver,&DevInfoTcpServer::tcp_log,this,&GeneratorCore::dataLog);
+    connect(devinfoserver,&DevInfoTcpServer::append_sql,this,&GeneratorCore::appendSql);
 
 }
 
@@ -84,7 +124,7 @@ GeneratorCore::~GeneratorCore()
 
 void GeneratorCore::start()
 {
-
+    devinfoserver->start();
 }
 void GeneratorCore::onConnected()
 {
@@ -108,9 +148,22 @@ void GeneratorCore::mqtt_data(QString mqtt_msg)
     }
 }
 
-void GeneratorCore::append_sql(QString sql)
+void GeneratorCore::mqtt_alarm(QString mqtt_msg)
+{
+    printf("test4444 mqtt alarm [%s]\n",mqtt_msg.toUtf8().data());
+    if((m_client->connectionState()==QMQTT::STATE_INIT)||(m_client->connectionState()==QMQTT::STATE_DISCONNECTED)){
+        m_client->connectToHost();
+    }
+    m_client->publish(QMQTT::Message(mqttAlarmIdx++,"alarm-collector",mqtt_msg.toUtf8()));
+    if(mqttAlarmIdx > 9999){
+        mqttAlarmIdx = 1;
+    }
+}
+
+void GeneratorCore::appendSql(QString sql)
 {
     dbthread->appendSql(sql);
+    shm_init();
 }
 
 

+ 5 - 2
agGeneratorProcess/generatorcore.h

@@ -8,6 +8,7 @@
 #include "logthread.h"
 #include "httpthread.h"
 #include "databasethread.h"
+#include "devinfotcpserver.h"
 
 class GeneratorCore : public QObject
 {
@@ -25,16 +26,18 @@ public slots:
     void onConnected();
     void dataLog(QString log);
     void mqtt_data(QString mqtt_msg);
-    void append_sql(QString sql);
+    void mqtt_alarm(QString mqtt_alarm);
+    void appendSql(QString sql);
 
 private:
     LogThread *logthread;
     HttpThread *httpthread;
     DatabaseThread *dbthread;
+    DevInfoTcpServer *devinfoserver;
 
     QMQTT::Client *m_client;
     QSqlDatabase db;
-    quint16 mqttIdx;
+    quint16 mqttIdx,mqttAlarmIdx;
     QString ip,port,username,password;
 };
 

+ 10 - 10
agGeneratorProcess/httpthread.cpp

@@ -183,7 +183,6 @@ void  HttpThread::finishedSlot2(QNetworkReply *reply)
             QJsonObject data_object = data_value.toObject();
             QJsonValue list_value = data_object.value("data");
             if(list_value.isArray()){
-                emit appendSql(QString("delete from alarm_gr where alarm_time >= '%1' and alarm_time <= '%2';").arg(startTime).arg(endTime));
                 QJsonArray list_array = list_value.toArray();
                 for(int i=0;i<list_array.size();i++){
                     QJsonObject list_object = list_array.at(i).toObject();
@@ -206,8 +205,9 @@ void  HttpThread::finishedSlot2(QNetworkReply *reply)
                     QJsonValue alarm_value = list_object.value("data");
                     QJsonObject alarm_object = alarm_value.toObject();
                     QString alarmLevel = alarm_object.value("iot_trigger_alarm_level").toString();
-                    QString handling_status = alarm_object.value("iot_trigger_alarm_level").toString();
+                    QString handling_status = alarm_object.value("iot_alarm_process_status").toString();
                     int handlingStatus = 0;
+                    emit dataLog(QString("alarmLevel  %1, handling_status  %2").arg(alarmLevel).arg(handling_status));
                     if(handling_status.compare("未处理")==0){
                         handlingStatus = 0;
                     }else{
@@ -219,8 +219,8 @@ void  HttpThread::finishedSlot2(QNetworkReply *reply)
                     for(int i=0;i<1024;i++){
                         if(boxDeviceShm->device[i].Enabled == 0x01){
                             if(device_code.compare(QString(boxDeviceShm->device[i].device_code))==0){
-                                emit appendSql(QString::fromLocal8Bit("insert into alarm_gr(device_id, device_code, device_name, alarm_type, alarm_desc, alarm_time, alarm_value, handling_status) values('%1','%2','%3','%4','%5','%6',%7,%8);")
-                                              .arg(QString(boxDeviceShm->device[i].device_id)).arg(device_code).arg(device_name).arg(alarmLevel).arg(alarmDesc).arg(alarmTime).arg(alarmValue).arg(handlingStatus));
+                                emit mqttAlarm(QString("{\"device_id\":\"%1\",\"device_code\":\"%2\",\"product_id\":\"%3\",\"timestamp\":%4,\"tags\":{\"device_id\":\"%5\",\"device_code\":\"%6\",\"device_name\":\"%7\",\"alarm_type\":\"%8\",\"alarm_desc\":\"%9\",\"alarm_time\":\"%10\"},\"metrics\":{\"alarm_value\":%11,\"handling_status\":%12},\"device_type\":\"%13-gr\"}")
+                                              .arg(QString(boxDeviceShm->device[i].device_id)).arg(device_code).arg(QString(boxDeviceShm->device[i].company_code)).arg(QDateTime::currentDateTime().toTime_t()).arg(QString(boxDeviceShm->device[i].device_id)).arg(device_code).arg(device_name).arg(alarmLevel).arg(alarmDesc).arg(alarmTime).arg(alarmValue).arg(handlingStatus).arg(boxDeviceShm->device[i].device_type));
                                 break;
                             }
                         }
@@ -255,10 +255,10 @@ void HttpThread::time_out()
 {
     agBoxShm->processStatus[4].t_time=QDateTime::currentDateTime().toTime_t();
 
-    if(QDateTime::currentDateTime().time().minute()!=minute){//每分钟执行一次,同步设备属性数据
+    if(QDateTime::currentDateTime().time().minute()!=minute){//每半个小时执行一次,同步设备属性数据
         minute = QDateTime::currentDateTime().time().minute();
 
-        if(!isWaiting){
+        if(!isWaiting  && ((minute==00)||(minute==30))){
             for(int i=0;i<list.size();i++){
                 isWaiting = true;
                 QNetworkRequest *req = new QNetworkRequest();
@@ -293,12 +293,12 @@ void HttpThread::time_out()
       }
   }
 
-    if(QDateTime::currentDateTime().time().minute()!=minute2){//每分钟执行一次,统计从现在算起之前10分钟时间内的机房告警记录(插入之前先执行删除这个时间端数据的命令)
+    if(QDateTime::currentDateTime().time().minute()!=minute2){//每分钟获取过去第八分钟这分钟的机房报警数据,封装成mqtt推送到写程序,然后由写程序处理
         minute2 = QDateTime::currentDateTime().time().minute();
-        QString tempTime1 = QDateTime::currentDateTime().addSecs(-600).toString("yyyy-MM-dd HH:mm");
-        QString tempTime2 = QDateTime::currentDateTime().addSecs(-60).toString("yyyy-MM-dd HH:mm");
+        QString tempTime1 = QDateTime::currentDateTime().addSecs(-480).toString("yyyy-MM-ddTHH:mm");
+//        QString tempTime2 = QDateTime::currentDateTime().addSecs(-60).toString("yyyy-MM-dd HH:mm");
         startTime = QString("%1:00").arg(tempTime1);
-        endTime = QString("%1:59").arg(tempTime2);
+        endTime = QString("%1:59").arg(tempTime1);
 
         printf("startTime: %s, endTime %s\n",startTime.toUtf8().data(),endTime.toUtf8().data());
 

+ 1 - 0
agGeneratorProcess/httpthread.h

@@ -26,6 +26,7 @@ public:
 signals:
     void dataLog(QString log);
     void mqttData(QString mqtt_msg);
+    void mqttAlarm(QString mqtt_alarm);
     void appendSql(QString sql);
 
 public slots:

+ 4 - 2
agGuardProcess/agGuardProcess.pro

@@ -13,7 +13,8 @@ SOURCES += \
     databasethread.cpp \
     httpthread.cpp \
     guardcore.cpp \
-    tcpserver.cpp
+    tcpserver.cpp \
+    devinfotcpserver.cpp
 
 INCLUDEPATH += ../qmqtt-master/src/mqtt/
 
@@ -24,7 +25,8 @@ HEADERS += \
     databasethread.h \
     httpthread.h \
     guardcore.h \
-    tcpserver.h
+    tcpserver.h \
+    devinfotcpserver.h
 
 
 LIBS += -lQt5Qmqtt

+ 15 - 43
agGuardProcess/databasethread.cpp

@@ -1,26 +1,13 @@
 #include "databasethread.h"
 
-#define HostName "172.17.35.51"
-#define HostPort 3306
-#define UserName "usky"
-#define PassWord "Yt#75Usky"
-#define DatabaseName "usky-park"
 
-DatabaseThread::DatabaseThread(QObject *parent) : QThread(parent)
+DatabaseThread::DatabaseThread(QObject *parent, QSqlDatabase *db) :
+    QThread(parent)
 {
+    Db = db;
     hour = 255;
     keep=false;
     sqlList.clear();
-    alarmList.clear();
-
-    db = QSqlDatabase::addDatabase("QMYSQL","write_db");
-    db.setHostName(QString(HostName));
-    db.setPort(HostPort);
-    db.setUserName(QString(UserName));
-    db.setPassword(QString(PassWord));
-    db.setDatabaseName(QString(DatabaseName));
-
-
 
 }
 
@@ -29,12 +16,6 @@ void DatabaseThread::appendSql(QString sql)
     sqlList.append(sql);
 }
 
-void DatabaseThread::appendAlarm(QString sql)
-{
-    alarmList.append(sql);
-}
-
-
 void DatabaseThread::stop()
 {
     keep = false;
@@ -45,29 +26,20 @@ void DatabaseThread::run()
     keep = true;
     while (keep) {
 
-        if(!db.open()){
-            emit dbdata_log(QString("[%1] agGuardProcess DatabaseThread db open failed").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")));
-        }else{
-            if(sqlList.length()>0){
-                while (sqlList.length()>0) {
-
-                    emit dbdata_log(QString("[%1] agGuardProcess sql %2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(sqlList.first()));
-
-                    db.exec(sqlList.first());
-
+        if(sqlList.length()>0)
+        {
+            if(Db->transaction())
+            {
+                while(sqlList.length()>0)
+                {
+                    emit dbdata_log(QString("[%1] do sql: \"%2\"\r\n")
+                             .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"))
+                             .arg(sqlList.first()));
+                    Db->exec(sqlList.first());
                     sqlList.removeFirst();
-                    usleep(1000);
-                }
-            }
-            if(alarmList.length()>0){
-                while (alarmList.length()>0) {
-                    db.exec(alarmList.first());
-
-                    emit dbdata_log(QString("[%1] agGuardProcess alarm sql %2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(alarmList.first()));
-
-                    alarmList.removeFirst();
-                    usleep(1000);
+                    usleep(10000);
                 }
+                Db->commit();
             }
         }
         usleep(50000);

+ 3 - 4
agGuardProcess/databasethread.h

@@ -13,11 +13,10 @@ class DatabaseThread : public QThread
 {
     Q_OBJECT
 public:
-    explicit DatabaseThread(QObject *parent = nullptr);
+    explicit DatabaseThread(QObject *parent,QSqlDatabase *db);
     void run();
     void stop();
     void appendSql(QString sql);
-    void appendAlarm(QString sql);
 
 
 signals:
@@ -29,8 +28,8 @@ private:
     int hour;
     bool keep;
 
-    QSqlDatabase db;
-    QStringList sqlList,alarmList;
+    QSqlDatabase *Db;
+    QStringList sqlList;
 
 };
 

+ 161 - 0
agGuardProcess/devinfotcpserver.cpp

@@ -0,0 +1,161 @@
+#include "devinfotcpserver.h"
+#include "../agVideoProcess/boxdeviceshm.h"
+
+DevInfoTcpServer::DevInfoTcpServer(QObject *parent) : QObject(parent)
+{
+    svr = new QTcpServer(this);
+    connect(svr,SIGNAL(newConnection()),this,SLOT(new_incomming()));
+
+    networkManager = new QNetworkAccessManager(this);
+    connect(networkManager,SIGNAL(finished(QNetworkReply *)),this,SLOT(finishedSlot(QNetworkReply *)));
+}
+
+void DevInfoTcpServer::start()
+{
+    if(!svr->listen(QHostAddress::Any,15229)){
+        printf("devinfo tcp listen 15229 failed\n");
+        exit(-1);
+    }
+    printf("devinfo tcp listen 15229 success\n");
+}
+
+void DevInfoTcpServer::finishedSlot(QNetworkReply *reply)
+{
+    if(reply->error() == QNetworkReply::NoError){
+        QString data = QString::fromUtf8(reply->readAll());
+        QByteArray ba = data.toLocal8Bit();
+        ba = QString::fromLocal8Bit(ba).toUtf8();
+
+        emit tcp_log(QString("[%1] guard devinfo tcp %2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(data));
+
+        QJsonParseError json_error;
+        QJsonDocument jsonDoc = QJsonDocument::fromJson(ba,&json_error);
+        printf("tcpServer parseErr.error %d\n",json_error.error);
+        if(json_error.error==QJsonParseError::NoError){
+            QJsonObject root = jsonDoc.object();
+            QJsonValue data_val = root.value("data");
+            QJsonObject data_obj = data_val.toObject();
+            QJsonValue list_val = data_obj.value("list");
+            QString msg = "";
+            QStringList devTcpList;
+            if(list_val.isArray()){
+                QJsonArray list_array = list_val.toArray();
+                for(int i=0;i<list_array.size();i++){
+                    QJsonObject list_object = list_array.at(i).toObject();
+                    QString device_code = list_object.value("indexCode").toString();
+                    QString device_name = list_object.value("name").toString();
+                    bool found = false;
+                    for(int i=0;i<1024;i++){
+                        if((boxDeviceShm->device[i].Enabled == 0x01) && (boxDeviceShm->device[i].device_type == 502)){
+                            if(device_code.compare(QString(boxDeviceShm->device[i].device_code))==0){
+                                found = true;
+                                msg.append(QString("{\"product_id\": \"2\",\"company_code\": \"10000001\",\"device_id\": \"%1\",\"device_code\": \"%2\",\"device_name\": \"%3\",\"flag\": 0},").arg(boxDeviceShm->device[i].device_id).arg(device_code).arg(device_name));
+                                break;
+                            }
+                        }
+                    }
+                    if(!found){
+                        QString device_id = QCryptographicHash::hash(QString("2%1").arg(device_code).toUtf8(),QCryptographicHash::Md5).toHex();
+                        QString sql = QString("insert into yt_t_device values('%1','%2',502,'10000001',null);").arg(device_code).arg(device_id);
+                        emit append_sql(sql);
+
+                        msg.append(QString("{\"product_id\": \"2\",\"company_code\": \"10000001\",\"device_id\": \"%1\",\"device_code\": \"%2\",\"device_name\": \"%3\",\"flag\": 1},").arg(device_id).arg(device_code).arg(device_name));
+                    }
+                    devTcpList.append(device_code);
+                }
+            }
+
+
+            for(int i=0;i<1024;i++){
+                if((boxDeviceShm->device[i].Enabled == 0x01) && (boxDeviceShm->device[i].device_type == 502)){
+                    bool found1 = false;
+                    QString device_code = QString(boxDeviceShm->device[i].device_code);
+                    if(devTcpList.size() > 0){
+                        for(int j=0;j<devTcpList.size();j++){
+                            if(device_code.compare(devTcpList.at(j))==0){
+                                found1 = true;
+                                break;
+                            }
+                        }
+
+                    }
+                    if(!found1){
+                        QString sql = QString("delete from yt_t_device where device_code = '%1';").arg(device_code);
+                        emit append_sql(sql);
+
+                        msg.append(QString("{\"product_id\": \"2\",\"company_code\": \"10000001\",\"device_id\": \"%1\",\"device_code\": \"%2\",\"device_name\": \"\",\"flag\": -1},").arg(boxDeviceShm->device[i].device_id).arg(device_code));
+                    }
+
+                }
+            }
+
+
+            msg = msg.left(msg.length()-1);
+            QString msgrec = QString("HTTP/1.1 200 OK\r\nAccess-Control-Allow-Origin: *\r\nContent-type: text/plain\r\n\r\n{\"code\": \"0\",\"msg\": \"success\",\"data\": [%1]}").arg(msg);
+            so->write(msgrec.toUtf8());
+            so->close();
+        }
+    }
+
+    reply->abort();
+    reply->deleteLater();
+}
+
+void DevInfoTcpServer::new_incomming()
+{
+    so = svr->nextPendingConnection();
+    connect(so,SIGNAL(readyRead()),this,SLOT(read_data()));
+
+}
+
+void DevInfoTcpServer::read_data()
+{
+    QString str = QString::fromUtf8(so->readAll());
+    int begin = str.indexOf("{",0);
+    int len = str.length();
+    QString datetime = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");
+    QString data = str.mid(begin,len-begin+1);
+    emit tcp_log(QString("[%1] guard deviceinfo tcp %2").arg(datetime).arg(data));
+    QByteArray ba = data.toLocal8Bit();
+    ba = QString::fromLocal8Bit(ba).toUtf8();
+
+    QJsonParseError parse_error;
+    QJsonDocument jsonDoc = QJsonDocument::fromJson(ba,&parse_error);
+    printf("tcpserver parse_error %d\n",parse_error.error);
+    if(parse_error.error == QJsonParseError::NoError){
+        QJsonObject doc = jsonDoc.object();
+        QJsonValue param_val = doc.value("params");
+        QJsonObject param_obj = param_val.toObject();
+        QJsonValue regionIndexCodes = param_obj.value("regionIndexCodes");
+        QString regions = "";
+        if(regionIndexCodes.isArray()){
+            QJsonArray region_array = regionIndexCodes.toArray();
+            for(int i=0;i<region_array.size();i++){
+                regions.append(QString("\"%1\"").arg(region_array.at(i).toString())).append(",");
+            }
+        }
+        if(regions.length() > 1){
+            regions = regions.left(regions.length()-1);
+            QNetworkRequest *req = new QNetworkRequest();
+            req->setUrl(QUrl("https://172.17.200.250:443/artemis/api/resource/v2/door/search"));
+            req->setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
+            req->setRawHeader("Accept","*/*");
+            req->setRawHeader("Connection","keep-alive");
+            req->setRawHeader("Cache-Control"," no-cache");
+            req->setRawHeader("X-Ca-Key","27997984");
+            req->setRawHeader("X-Ca-Signature","jXp3h2tlRF5cuqEtKCajSRhiwWGPFMjdkKaxqBtAMS8=");
+            req->setRawHeader("X-Ca-Signature-Headers","x-ca-key");
+            config = req->sslConfiguration();
+            config.setPeerVerifyMode(QSslSocket::VerifyNone);
+            config.setProtocol(QSsl::TlsV1_0OrLater);
+            req->setSslConfiguration(config);
+            QString postdata = QString("{\"regionIndexCodes\": [%1],\"pageNo\": 1,\"pageSize\": 500}").arg(regions);
+            emit tcp_log(QString("[%1] guard deviceinfo tcp postdata %2").arg(datetime).arg(postdata));
+            req->setRawHeader("Content_Length",QString("%1").arg(postdata.length()).toUtf8());
+            networkManager->post(*req,postdata.toUtf8());
+        }
+
+    }
+
+
+}

+ 45 - 0
agGuardProcess/devinfotcpserver.h

@@ -0,0 +1,45 @@
+#ifndef DEVINFOTCPSERVER_H
+#define DEVINFOTCPSERVER_H
+
+#include <QObject>
+#include <QTcpServer>
+#include <QTcpSocket>
+#include <QDateTime>
+#include <QNetworkAccessManager>
+#include <QNetworkRequest>
+#include <QNetworkReply>
+#include <QSslConfiguration>
+#include <QVariant>
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QJsonValue>
+#include <QJsonArray>
+#include <QJsonParseError>
+#include <QCryptographicHash>
+
+class DevInfoTcpServer : public QObject
+{
+    Q_OBJECT
+public:
+    explicit DevInfoTcpServer(QObject *parent = nullptr);
+    void start();
+
+signals:
+    void tcp_log(QString log);
+    void append_sql(QString sql);
+
+public slots:
+    void new_incomming();
+    void read_data();
+    void finishedSlot(QNetworkReply *reply);
+
+private:
+    QTcpServer *svr;
+    QTcpSocket *so;
+
+    QNetworkAccessManager *networkManager;
+    QSslConfiguration config;
+
+};
+
+#endif // DEVINFOTCPSERVER_H

+ 58 - 4
agGuardProcess/guardcore.cpp

@@ -15,7 +15,41 @@ void GuardCore::shm_init(){
         password = qry.value(3).toString();
     }
     qry.clear();
+    int nrow = 0;
     sql.clear();
+    sql = QString("select device_code,device_id,device_type,company_code,device_gateway from yt_t_device");
+    qry = db.exec(sql);
+    while (qry.next()) {
+        if(nrow > 1023)
+            break;
+        boxDeviceShm->device[nrow].Enabled = 0x01;
+        sprintf(boxDeviceShm->device[nrow].device_code,"%s",qry.value(0).toString().toUtf8().data());
+        sprintf(boxDeviceShm->device[nrow].device_id,"%s",qry.value(1).toString().toUtf8().data());
+        boxDeviceShm->device[nrow].device_type = qry.value(2).toInt();
+        sprintf(boxDeviceShm->device[nrow].company_code,"%s",qry.value(3).toString().toUtf8().data());
+        sprintf(boxDeviceShm->device[nrow].device_gateway,"%s",qry.value(4).toString().toUtf8().data());
+        nrow++;
+    }
+    for(int i=nrow;i<1024;i++){
+        boxDeviceShm->device[i].Enabled = 0x00;
+    }
+    nrow = 0;
+    qry.clear();
+    sql.clear();
+    sql = QString("select device_type,attribute_name,attribute_code from yt_t_attribute");
+    qry = db.exec(sql);
+    while (qry.next()) {
+        if(nrow > 299)
+            break;
+        boxDeviceShm->procuctattrbute[nrow].Enabled = 0x01;
+        boxDeviceShm->procuctattrbute[nrow].device_type = qry.value(0).toInt();
+        sprintf(boxDeviceShm->procuctattrbute[nrow].attribute_name,"%s",qry.value(1).toString().toUtf8().data());
+        sprintf(boxDeviceShm->procuctattrbute[nrow].attribute_code,"%s",qry.value(2).toString().toUtf8().data());
+        nrow++;
+    }
+    for(int i=nrow;i<300;i++){
+        boxDeviceShm->procuctattrbute[i].Enabled = 0x00;
+    }
 
 }
 
@@ -57,6 +91,7 @@ GuardCore::GuardCore(QObject *parent) : QObject(parent)
     }
 
     mqttIdx = 1;
+    mqttEventIdx = 1;
     m_client = new QMQTT::Client(QHostAddress(ip),static_cast<quint16>(port.toInt()),this);
     connect(m_client,&QMQTT::Client::connected,this,&GuardCore::onConnected);
     m_client->setUsername(username);
@@ -64,17 +99,21 @@ GuardCore::GuardCore(QObject *parent) : QObject(parent)
     m_client->setCleanSession(true);
     m_client->connectToHost();
 
-    dbthread = new DatabaseThread(this);
-    dbthread->start();
+    dbthread = new DatabaseThread(this,&db);
+    connect(dbthread,&DatabaseThread::dbdata_log,this,&GuardCore::dataLog);
 
     httpthread = new HttpThread(this);
     connect(httpthread,&HttpThread::dataLog,this,&GuardCore::dataLog);
     connect(httpthread,&HttpThread::mqttData,this,&GuardCore::mqtt_data);
-    connect(httpthread,&HttpThread::appendSql,this,&GuardCore::append_sql);
+    connect(httpthread,&HttpThread::mqttEvent,this,&GuardCore::mqtt_event);
 
     tcpserver = new TcpServer(this);
     connect(tcpserver,&TcpServer::tcp_log,this,&GuardCore::dataLog);
 
+    devinfoserver = new DevInfoTcpServer(this);
+    connect(devinfoserver,&DevInfoTcpServer::tcp_log,this,&GuardCore::dataLog);
+    connect(devinfoserver,&DevInfoTcpServer::append_sql,this,&GuardCore::appendSql);
+
 }
 
 
@@ -88,6 +127,8 @@ GuardCore::~GuardCore()
 void GuardCore::start()
 {
     tcpserver->start();
+    devinfoserver->start();
+    dbthread->start();
 }
 void GuardCore::onConnected()
 {
@@ -111,9 +152,22 @@ void GuardCore::mqtt_data(QString mqtt_msg)
     }
 }
 
-void GuardCore::append_sql(QString sql)
+void GuardCore::mqtt_event(QString mqtt_msg)
+{
+    printf("test2222 mqtt event [%s]\n",mqtt_msg.toUtf8().data());
+    if((m_client->connectionState()==QMQTT::STATE_INIT)||(m_client->connectionState()==QMQTT::STATE_DISCONNECTED)){
+        m_client->connectToHost();
+    }
+    m_client->publish(QMQTT::Message(mqttEventIdx++,"event-collector",mqtt_msg.toUtf8()));
+    if(mqttEventIdx > 9999){
+        mqttEventIdx = 1;
+    }
+}
+
+void GuardCore::appendSql(QString sql)
 {
     dbthread->appendSql(sql);
+    shm_init();
 }
 
 

+ 5 - 2
agGuardProcess/guardcore.h

@@ -9,6 +9,7 @@
 #include "httpthread.h"
 #include "databasethread.h"
 #include "tcpserver.h"
+#include "devinfotcpserver.h"
 
 class GuardCore : public QObject
 {
@@ -26,17 +27,19 @@ public slots:
     void onConnected();
     void dataLog(QString log);
     void mqtt_data(QString mqtt_msg);
-    void append_sql(QString sql);
+    void mqtt_event(QString mqtt_event);
+    void appendSql(QString sql);
 
 private:
     LogThread *logthread;
     HttpThread *httpthread;
     DatabaseThread *dbthread;
     TcpServer *tcpserver;
+    DevInfoTcpServer *devinfoserver;
 
     QMQTT::Client *m_client;
     QSqlDatabase db;
-    quint16 mqttIdx;
+    quint16 mqttIdx,mqttEventIdx;
     QString ip,port,username,password;
 };
 

+ 9 - 8
agGuardProcess/httpthread.cpp

@@ -41,7 +41,6 @@ void  HttpThread::finishedSlot(QNetworkReply *reply)
             QJsonObject data_object = data_value.toObject();
             QJsonValue list_value = data_object.value("list");
             if(list_value.isArray()){
-                emit appendSql(QString("delete from event_eg where event_time >= '%1' and event_time <= '%2';").arg(startTime).arg(endTime));
                 QJsonArray list_array = list_value.toArray();
                 for(int i=0;i<list_array.size();i++){
                     QJsonObject list_object = list_array.at(i).toObject();
@@ -52,12 +51,14 @@ void  HttpThread::finishedSlot(QNetworkReply *reply)
                     QString orgName = list_object.value("orgName").toString();
                     int eventType = list_object.value("eventType").toInt();
                     int inAndOutType = list_object.value("inAndOutType").toInt();
-                    QString eventTime = list_object.value("eventTime").toString();
+                    QDateTime date = QDateTime::fromString(list_object.value("eventTime").toString(), "yyyy-MM-ddTHH:mm:ss+08:00");
+                    QString eventTime = date.toLocalTime().toString("yyyy-MM-dd HH:mm:ss");
+                    //printf("222  list_object.value(eventTime).toString() %s, eventTime %s \n",list_object.value("eventTime").toString().toUtf8().data(),eventTime.toUtf8().data());
                     for(int i=0;i<1024;i++){
                         if(boxDeviceShm->device[i].Enabled == 0x01){
                             if(device_code.compare(QString(boxDeviceShm->device[i].device_code))==0){
-                                emit appendSql(QString::fromLocal8Bit("insert into event_eg (id, device_id, device_code, device_name, install_address, person_name, card_no, org_name, event_type, in_out_type, event_time) values(null,'%1','%2','%3','%4','%5','%6','%7',%8,%9,'%10');")
-                                              .arg(QString(boxDeviceShm->device[i].device_id)).arg(device_code).arg(doorName).arg("").arg(personName).arg(cardNo).arg(orgName).arg(eventType).arg(inAndOutType).arg(eventTime));
+                                emit mqttEvent(QString("{\"device_id\":\"%1\",\"device_code\":\"%2\",\"product_id\":\"%3\",\"timestamp\":%4,\"tags\":{\"device_id\":\"%5\",\"device_code\":\"%6\",\"device_name\":\"%7\",\"install_address\":\"\",\"person_name\":\"%8\",\"card_no\":\"%9\",\"org_name\":\"%10\",\"event_time\":\"%11\"},\"metrics\":{\"event_type\": %12,\"in_out_type\": %13},\"device_type\":\"%14-eg\"}")
+                                              .arg(QString(boxDeviceShm->device[i].device_id)).arg(device_code).arg(QString(boxDeviceShm->device[i].company_code)).arg(QDateTime::currentDateTime().toTime_t()).arg(QString(boxDeviceShm->device[i].device_id)).arg(device_code).arg(doorName).arg(personName).arg(cardNo).arg(orgName).arg(eventTime).arg(eventType).arg(inAndOutType).arg(boxDeviceShm->device[i].device_type));
                                 break;
                             }
                         }
@@ -154,12 +155,12 @@ void HttpThread::time_out()
 {
     agBoxShm->processStatus[2].t_time=QDateTime::currentDateTime().toTime_t();
 
-    if(QDateTime::currentDateTime().time().minute()!=minute){//每分钟执行一次,统计从现在算起之前10分钟时间内的人员通行记录(插入之前先执行删除这个时间端数据的命令)
+    if(QDateTime::currentDateTime().time().minute()!=minute){//每分钟获取过去第八分钟这分钟的人员通行数据,封装成mqtt推送到写程序,然后由写程序处理
         minute = QDateTime::currentDateTime().time().minute();
-        QString tempTime1 = QDateTime::currentDateTime().addSecs(-600).toString("yyyy-MM-ddTHH:mm");
-        QString tempTime2 = QDateTime::currentDateTime().addSecs(-60).toString("yyyy-MM-ddTHH:mm");
+        QString tempTime1 = QDateTime::currentDateTime().addSecs(-480).toString("yyyy-MM-ddTHH:mm");
+//        QString tempTime2 = QDateTime::currentDateTime().addSecs(-60).toString("yyyy-MM-ddTHH:mm");
         startTime = QString("%1:00+08:00").arg(tempTime1);
-        endTime = QString("%1:59+08:00").arg(tempTime2);
+        endTime = QString("%1:59+08:00").arg(tempTime1);
 
         printf("startTime: %s, endTime %s\n",startTime.toUtf8().data(),endTime.toUtf8().data());
 

+ 1 - 0
agGuardProcess/httpthread.h

@@ -26,6 +26,7 @@ public:
 signals:
     void dataLog(QString log);
     void mqttData(QString mqtt_msg);
+    void mqttEvent(QString mqtt_event);
     void appendSql(QString sql);
 
 public slots:

+ 6 - 2
agVideoProcess/agVideoProcess.pro

@@ -13,7 +13,9 @@ SOURCES += \
     logthread.cpp \
     videocore.cpp \
     tcpserver.cpp \
-    tcpserver1.cpp
+    tcpserver1.cpp \
+    devinfotcpserver.cpp \
+    databasethread.cpp
 
 
 INCLUDEPATH += ../qmqtt-master/src/mqtt/
@@ -27,7 +29,9 @@ HEADERS += \
     logthread.h \
     videocore.h \
     tcpserver.h \
-    tcpserver1.h
+    tcpserver1.h \
+    devinfotcpserver.h \
+    databasethread.h
 
 
 LIBS += -lQt5Qmqtt

+ 60 - 0
agVideoProcess/databasethread.cpp

@@ -0,0 +1,60 @@
+#include "databasethread.h"
+
+
+DatabaseThread::DatabaseThread(QObject *parent, QSqlDatabase *db) :
+    QThread(parent)
+{
+    Db = db;
+    hour = 255;
+    keep=false;
+    sqlList.clear();
+
+}
+
+void DatabaseThread::appendSql(QString sql)
+{
+    sqlList.append(sql);
+}
+
+void DatabaseThread::stop()
+{
+    keep = false;
+}
+
+void DatabaseThread::run()
+{
+    keep = true;
+    while (keep) {
+
+        if(sqlList.length()>0)
+        {
+            if(Db->transaction())
+            {
+                while(sqlList.length()>0)
+                {
+                    emit dbdata_log(QString("[%1] do sql: \"%2\"\r\n")
+                             .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"))
+                             .arg(sqlList.first()));
+                    Db->exec(sqlList.first());
+                    sqlList.removeFirst();
+                    usleep(10000);
+                }
+                Db->commit();
+            }
+        }
+        usleep(50000);
+    }
+
+
+}
+
+
+
+
+
+
+
+
+
+
+

+ 36 - 0
agVideoProcess/databasethread.h

@@ -0,0 +1,36 @@
+#ifndef DATABASETHREAD_H
+#define DATABASETHREAD_H
+
+#include <QThread>
+#include <QDateTime>
+#include <QSqlDatabase>
+#include <QSqlQuery>
+#include <QVariant>
+#include <QStringList>
+
+
+class DatabaseThread : public QThread
+{
+    Q_OBJECT
+public:
+    explicit DatabaseThread(QObject *parent,QSqlDatabase *db);
+    void run();
+    void stop();
+    void appendSql(QString sql);
+
+
+signals:
+    void dbdata_log(QString log);
+
+public slots:
+
+private:
+    int hour;
+    bool keep;
+
+    QSqlDatabase *Db;
+    QStringList sqlList;
+
+};
+
+#endif // DATABASETHREAD_H

+ 161 - 0
agVideoProcess/devinfotcpserver.cpp

@@ -0,0 +1,161 @@
+#include "devinfotcpserver.h"
+#include "boxdeviceshm.h"
+
+DevInfoTcpServer::DevInfoTcpServer(QObject *parent) : QObject(parent)
+{
+    svr = new QTcpServer(this);
+    connect(svr,SIGNAL(newConnection()),this,SLOT(new_incomming()));
+
+    networkManager = new QNetworkAccessManager(this);
+    connect(networkManager,SIGNAL(finished(QNetworkReply *)),this,SLOT(finishedSlot(QNetworkReply *)));
+}
+
+void DevInfoTcpServer::start()
+{
+    if(!svr->listen(QHostAddress::Any,15228)){
+        printf("devinfo tcp listen 15228 failed\n");
+        exit(-1);
+    }
+    printf("devinfo tcp listen 15228 success\n");
+}
+
+void DevInfoTcpServer::finishedSlot(QNetworkReply *reply)
+{
+    if(reply->error() == QNetworkReply::NoError){
+        QString data = QString::fromUtf8(reply->readAll());
+        QByteArray ba = data.toLocal8Bit();
+        ba = QString::fromLocal8Bit(ba).toUtf8();
+
+        emit tcp_log(QString("[%1] video devinfo tcp %2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(data));
+
+        QJsonParseError json_error;
+        QJsonDocument jsonDoc = QJsonDocument::fromJson(ba,&json_error);
+        printf("tcpServer parseErr.error %d\n",json_error.error);
+        if(json_error.error==QJsonParseError::NoError){
+            QJsonObject root = jsonDoc.object();
+            QJsonValue data_val = root.value("data");
+            QJsonObject data_obj = data_val.toObject();
+            QJsonValue list_val = data_obj.value("list");
+            QString msg = "";
+            QStringList devTcpList;
+            if(list_val.isArray()){
+                QJsonArray list_array = list_val.toArray();
+                for(int i=0;i<list_array.size();i++){
+                    QJsonObject list_object = list_array.at(i).toObject();
+                    QString device_code = list_object.value("indexCode").toString();
+                    QString device_name = list_object.value("name").toString();
+                    bool found = false;
+                    for(int i=0;i<1024;i++){
+                        if((boxDeviceShm->device[i].Enabled == 0x01) && (boxDeviceShm->device[i].device_type == 501)){
+                            if(device_code.compare(QString(boxDeviceShm->device[i].device_code))==0){
+                                found = true;
+                                msg.append(QString("{\"product_id\": \"1\",\"company_code\": \"10000001\",\"device_id\": \"%1\",\"device_code\": \"%2\",\"device_name\": \"%3\",\"flag\": 0},").arg(boxDeviceShm->device[i].device_id).arg(device_code).arg(device_name));
+                                break;
+                            }
+                        }
+                    }
+                    if(!found){
+                        QString device_id = QCryptographicHash::hash(QString("1%1").arg(device_code).toUtf8(),QCryptographicHash::Md5).toHex();
+                        QString sql = QString("insert into yt_t_device values('%1','%2',501,'10000001',null);").arg(device_code).arg(device_id);
+                        emit append_sql(sql);
+
+                        msg.append(QString("{\"product_id\": \"1\",\"company_code\": \"10000001\",\"device_id\": \"%1\",\"device_code\": \"%2\",\"device_name\": \"%3\",\"flag\": 1},").arg(device_id).arg(device_code).arg(device_name));
+                    }
+                    devTcpList.append(device_code);
+                }
+            }
+
+
+            for(int i=0;i<1024;i++){
+                if((boxDeviceShm->device[i].Enabled == 0x01) && (boxDeviceShm->device[i].device_type == 501)){
+                    bool found1 = false;
+                    QString device_code = QString(boxDeviceShm->device[i].device_code);
+                    if(devTcpList.size() > 0){
+                        for(int j=0;j<devTcpList.size();j++){
+                            if(device_code.compare(devTcpList.at(j))==0){
+                                found1 = true;
+                                break;
+                            }
+                        }
+
+                    }
+                    if(!found1){
+                        QString sql = QString("delete from yt_t_device where device_code = '%1';").arg(device_code);
+                        emit append_sql(sql);
+
+                        msg.append(QString("{\"product_id\": \"1\",\"company_code\": \"10000001\",\"device_id\": \"%1\",\"device_code\": \"%2\",\"device_name\": \"\",\"flag\": -1},").arg(boxDeviceShm->device[i].device_id).arg(device_code));
+                    }
+
+                }
+            }
+
+
+            msg = msg.left(msg.length()-1);
+            QString msgrec = QString("HTTP/1.1 200 OK\r\nAccess-Control-Allow-Origin: *\r\nContent-type: text/plain\r\n\r\n{\"code\": \"0\",\"msg\": \"success\",\"data\": [%1]}").arg(msg);
+            so->write(msgrec.toUtf8());
+            so->close();
+        }
+    }
+
+    reply->abort();
+    reply->deleteLater();
+}
+
+void DevInfoTcpServer::new_incomming()
+{
+    so = svr->nextPendingConnection();
+    connect(so,SIGNAL(readyRead()),this,SLOT(read_data()));
+
+}
+
+void DevInfoTcpServer::read_data()
+{
+    QString str = QString::fromUtf8(so->readAll());
+    int begin = str.indexOf("{",0);
+    int len = str.length();
+    QString datetime = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");
+    QString data = str.mid(begin,len-begin+1);
+    emit tcp_log(QString("[%1] video deviceinfo tcp %2").arg(datetime).arg(data));
+    QByteArray ba = data.toLocal8Bit();
+    ba = QString::fromLocal8Bit(ba).toUtf8();
+
+    QJsonParseError parse_error;
+    QJsonDocument jsonDoc = QJsonDocument::fromJson(ba,&parse_error);
+    printf("tcpserver parse_error %d\n",parse_error.error);
+    if(parse_error.error == QJsonParseError::NoError){
+        QJsonObject doc = jsonDoc.object();
+        QJsonValue param_val = doc.value("params");
+        QJsonObject param_obj = param_val.toObject();
+        QJsonValue regionIndexCodes = param_obj.value("regionIndexCodes");
+        QString regions = "";
+        if(regionIndexCodes.isArray()){
+            QJsonArray region_array = regionIndexCodes.toArray();
+            for(int i=0;i<region_array.size();i++){
+                regions.append(QString("\"%1\"").arg(region_array.at(i).toString())).append(",");
+            }
+        }
+        if(regions.length() > 1){
+            regions = regions.left(regions.length()-1);
+            QNetworkRequest *req = new QNetworkRequest();
+            req->setUrl(QUrl("https://172.17.200.250:443/artemis/api/resource/v2/camera/search"));
+            req->setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
+            req->setRawHeader("Accept","*/*");
+            req->setRawHeader("Connection","keep-alive");
+            req->setRawHeader("Cache-Control"," no-cache");
+            req->setRawHeader("X-Ca-Key","27997984");
+            req->setRawHeader("X-Ca-Signature","/f3F+ekIwc5hFwP2edSOdAU2zVoowOogCMSRPNxKmKE=");
+            req->setRawHeader("X-Ca-Signature-Headers","x-ca-key");
+            config = req->sslConfiguration();
+            config.setPeerVerifyMode(QSslSocket::VerifyNone);
+            config.setProtocol(QSsl::TlsV1_0OrLater);
+            req->setSslConfiguration(config);
+            QString postdata = QString("{\"regionIndexCodes\": [%1],\"pageNo\": 1,\"pageSize\": 500}").arg(regions);
+            emit tcp_log(QString("[%1] video deviceinfo tcp postdata %2").arg(datetime).arg(postdata));
+            req->setRawHeader("Content_Length",QString("%1").arg(postdata.length()).toUtf8());
+            networkManager->post(*req,postdata.toUtf8());
+        }
+
+    }
+
+
+}

+ 45 - 0
agVideoProcess/devinfotcpserver.h

@@ -0,0 +1,45 @@
+#ifndef DEVINFOTCPSERVER_H
+#define DEVINFOTCPSERVER_H
+
+#include <QObject>
+#include <QTcpServer>
+#include <QTcpSocket>
+#include <QDateTime>
+#include <QNetworkAccessManager>
+#include <QNetworkRequest>
+#include <QNetworkReply>
+#include <QSslConfiguration>
+#include <QVariant>
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QJsonValue>
+#include <QJsonArray>
+#include <QJsonParseError>
+#include <QCryptographicHash>
+
+class DevInfoTcpServer : public QObject
+{
+    Q_OBJECT
+public:
+    explicit DevInfoTcpServer(QObject *parent = nullptr);
+    void start();
+
+signals:
+    void tcp_log(QString log);
+    void append_sql(QString sql);
+
+public slots:
+    void new_incomming();
+    void read_data();
+    void finishedSlot(QNetworkReply *reply);
+
+private:
+    QTcpServer *svr;
+    QTcpSocket *so;
+
+    QNetworkAccessManager *networkManager;
+    QSslConfiguration config;
+
+};
+
+#endif // DEVINFOTCPSERVER_H

+ 16 - 0
agVideoProcess/videocore.cpp

@@ -111,18 +111,28 @@ VideoCore::VideoCore(QObject *parent) : QObject(parent)
     tcpserver1 = new TcpServer1(this);
     connect(tcpserver1,&TcpServer1::tcp_log,this,&VideoCore::dataLog);
 
+    devinfoserver = new DevInfoTcpServer(this);
+    connect(devinfoserver,&DevInfoTcpServer::tcp_log,this,&VideoCore::dataLog);
+    connect(devinfoserver,&DevInfoTcpServer::append_sql,this,&VideoCore::appendSql);
+
+    dbthread = new DatabaseThread(this,&db);
+    connect(dbthread,&DatabaseThread::dbdata_log,this,&VideoCore::dataLog);
+
 }
 
 VideoCore::~VideoCore()
 {
     logthread->stop();
     httpthread->stop();
+    dbthread->stop();
 }
 
 void VideoCore::start()
 {
     tcpserver->start();
     tcpserver1->start();
+    devinfoserver->start();
+    dbthread->start();
 }
 
 void VideoCore::onConnected()
@@ -147,6 +157,12 @@ void VideoCore::mqtt_data(QString mqtt_msg)
     }
 }
 
+void VideoCore::appendSql(QString sql)
+{
+    dbthread->appendSql(sql);
+    shm_init();
+}
+
 
 
 

+ 6 - 0
agVideoProcess/videocore.h

@@ -9,6 +9,9 @@
 #include "httpthread.h"
 #include "tcpserver.h"
 #include "tcpserver1.h"
+#include "devinfotcpserver.h"
+#include "databasethread.h"
+
 
 class VideoCore : public QObject
 {
@@ -26,12 +29,15 @@ public slots:
     void onConnected();
     void dataLog(QString log);
     void mqtt_data(QString mqtt_msg);
+    void appendSql(QString sql);
 
 private:
     LogThread *logthread;
     HttpThread *httpthread;
     TcpServer *tcpserver;
     TcpServer1 *tcpserver1;
+    DevInfoTcpServer *devinfoserver;
+    DatabaseThread *dbthread;
 
     QMQTT::Client *m_client;
     QSqlDatabase db;

+ 1 - 1
data-agbox.pro.user

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.7.2, 2023-04-07T17:08:09. -->
+<!-- Written by QtCreator 4.7.2, 2023-04-29T09:13:46. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>