瀏覽代碼

第一版20201124

hanzhengyi 4 年之前
父節點
當前提交
2709d7efeb
共有 5 個文件被更改,包括 387 次插入0 次删除
  1. 70 0
      core.cpp
  2. 36 0
      core.h
  3. 163 0
      databasethread.cpp
  4. 41 0
      databasethread.h
  5. 77 0
      interfaceserver.cpp

+ 70 - 0
core.cpp

@@ -0,0 +1,70 @@
+#include "core.h"
+#include "smartlightshm.h"
+
+Core::Core(QObject *parent) : QObject(parent)
+{
+    logThread = new LogThread(this);
+    logThread->start();
+    dbThread = new DatabaseThread(this);
+    connect(dbThread,&DatabaseThread::sql_log,this,&Core::sql_log);
+    server = new SmartLightServer(this);
+    connect(server,&SmartLightServer::CommData,this,&Core::CommData);
+    connect(server,&SmartLightServer::getEAlarm,this,&Core::getEAlarm);
+    intServer = new InterfaceServer(this);
+    connect(intServer,&InterfaceServer::SetResetRequest,this,&Core::resetRequest);
+    connect(intServer,&InterfaceServer::SetRequestRealTimeData,this,&Core::requestRealTimeData);
+    connect(intServer,&InterfaceServer::SetRequestSetParameters,this,&Core::requestSetParameters);
+    connect(intServer,&InterfaceServer::SetCommData,this,&Core::CommData);
+    //平台接口数据信号
+    wssServer = new WssServer(this);
+    connect(wssServer,&WssServer::resetRequest,this,&Core::resetRequest);
+    connect(wssServer,&WssServer::requestRealTimeData,this,&Core::requestRealTimeData);
+    connect(wssServer,&WssServer::requestSetParameters,this,&Core::requestSetParameters);
+    connect(wssServer,&WssServer::CommData,this,&Core::CommData);
+    wssServer->start();
+    dbThread->start();
+}
+
+void Core::start()
+{
+    server->start();
+    intServer->start();
+}
+
+void Core::CommData(QString deviceID, int dir, QString data)
+{
+    logThread->appendData(data);
+    wssServer->subReport(deviceID,dir,false,false,data);
+    if(dir==11){
+      sql_log("++++++setEchoString++++++");
+      intServer->setEchoString(deviceID,data);
+    }
+}
+
+void Core::resetRequest(QString deviceID, int commandType, int parameterType, int pseq)
+{
+    CommData(deviceID, 2, "======================tcp====================");
+    server->mk_ResetList_qry(deviceID,commandType,parameterType,pseq);
+}
+
+void Core::requestRealTimeData(QString deviceID, int commandType, int parameterType, int pn, int queryNumber, int startPoint)
+{
+    server->mk_realtime_qry(deviceID,commandType,parameterType,pn,queryNumber,startPoint);
+}
+
+void Core::requestSetParameters(QString deviceID, int commandType, int parameterType, QString tmp)
+{
+    CommData(deviceID, 2, "======================ceshi====================");
+    server->mk_set_parameters_qry(deviceID,commandType,parameterType,tmp);
+}
+
+void Core::getEAlarm(QString DeviceCode, int erc, int sta, int arg1, int arg2, int arg3, float value, float v2, QString others, QDateTime t)
+{
+    dbThread->appendSql(DatabaseThread::RecSql,QString("insert into err_rec (id , device_id, erc, sta, arg1, arg2, arg3, value, value2, others, time1, time2) values (NULL, '%1', %2, %3, %4, %5, %6, %7, %8, '%9', %10, '%11')")
+                        .arg(DeviceCode).arg(erc).arg(sta).arg(arg1).arg(arg2).arg(arg3).arg(QString::number(value,'g',3)).arg(QString::number(v2,'g',3)).arg(others).arg(t.toTime_t()).arg(t.toString("yyyy-MM-dd HH:mm:ss")));
+}
+
+void Core::sql_log(QString log)
+{
+    logThread->appendData(log);
+}

+ 36 - 0
core.h

@@ -0,0 +1,36 @@
+#ifndef CORE_H
+#define CORE_H
+
+#include <QObject>
+#include "smartlightserver.h"
+#include "interfaceserver.h"
+#include "logthread.h"
+#include "wssserver.h"
+#include "databasethread.h"
+
+class Core : public QObject
+{
+    Q_OBJECT
+public:
+    explicit Core(QObject *parent = nullptr);
+    void start();
+
+signals:
+
+public slots:
+    void CommData(QString deviceID, int dir, QString data);
+    void getEAlarm(QString DeviceCode, int erc, int sta, int arg1, int arg2, int arg3, float value, float v2, QString others, QDateTime t);
+    void sql_log(QString log);
+    void resetRequest(QString deviceID, int commandType, int parameterType, int pseq);
+    void requestRealTimeData(QString deviceID, int commandType, int parameterType, int pn, int queryNumber, int startPoint);
+    void requestSetParameters(QString deviceID, int commandType, int parameterType, QString tmp);
+
+private:
+    SmartLightServer *server;
+    InterfaceServer *intServer;
+    LogThread *logThread;
+    DatabaseThread *dbThread;
+    WssServer *wssServer;
+};
+
+#endif // CORE_H

+ 163 - 0
databasethread.cpp

@@ -0,0 +1,163 @@
+#include "databasethread.h"
+#include "smartlightshm.h"
+
+DatabaseThread::DatabaseThread(QObject *parent) : QThread(parent)
+{
+    QDir dir(QString(DbPath));
+    ConfSqlList.clear();
+    RecSqlList.clear();
+    StaSqlList.clear();
+    if(!dir.exists())
+        dir.mkdir(QString(DbPath));
+    conf_db = QSqlDatabase::addDatabase("QSQLITE","conf_db");
+    conf_db.setDatabaseName(QString(DbPath)+"/conf.db");
+    rec_db = QSqlDatabase::addDatabase("QSQLITE","rec.db");
+    rec_db.setDatabaseName(QString(DbPath)+"/rec.db");
+    sta_db = QSqlDatabase::addDatabase("QSQLITE","sta_db");
+    sta_db.setDatabaseName(QString(DbPath)+"/sta.db");
+    if(db_init()){
+        db_load();
+    }
+}
+
+DatabaseThread::~DatabaseThread()
+{
+    stop();
+    deleteLater();
+}
+
+void DatabaseThread::stop()
+{
+    keep = false;
+}
+
+void DatabaseThread::appendSql(int type, QString sql)
+{
+    if(type==ConfSql)
+        ConfSqlList.append(sql);
+    else if(type==RecSql)
+        RecSqlList.append(sql);
+    else if(type==StaSql)
+        StaSqlList.append(sql);
+}
+
+bool DatabaseThread::had_table(QStringList tblist, QString tbname)
+{
+    for(int i=0;i<tblist.length();i++){
+        if(tblist.at(i).compare(tbname)==0)
+            return true;
+    }
+    return false;
+}
+
+bool DatabaseThread::db_init()
+{
+    if(!conf_db.open())
+        return false;
+    if(!had_table(conf_db.tables(),"sys_conf")){
+        conf_db.exec("create table sys_conf (name text(40), value text(200))");
+        conf_db.exec("insert into sys_conf (name, value) values ('ServerAddr','88888888888888')");
+    }
+    conf_db.close();
+    if(!rec_db.open())
+        return false;
+    if(!had_table(rec_db.tables(),"err_rec")){
+        rec_db.exec("create table err_rec (id integer primary key autoincrement, device_id text(20), erc integer, sta integer, arg1 integer, arg2 integer, arg3 integer, value float, value2 float, others text(200), time1 integer, time2 text(20))");
+    }
+    rec_db.close();
+    if(!sta_db.open())
+        return false;
+    if(!had_table(sta_db.tables(),"err_count")){
+        sta_db.exec("create table err_count (id integer primary key autoincrement, device_id text(20), err_count1 integer, err_count2 integer)");
+    }
+    sta_db.close();
+    return true;
+}
+
+void DatabaseThread::db_load()
+{
+    if(conf_db.open()){
+        QSqlQuery qry = conf_db.exec("select name, value from sys_conf");
+        while (qry.next()) {
+            if(qry.value(0).toString().compare("ServerAddr")==0){
+//                ServerAddr0 = 0x00000000;
+//                ServerAddr1 = 0x00000000;
+//                quint64 sAddr = qry.value(1).toULongLong()&0xffffffffffffffff;
+//                ServerAddr0 |= ((sAddr/10000000000000)<<20)&0x00f00000;
+//                ServerAddr0 |= (((sAddr/1000000000000)%10)<<16)&0x000f0000;
+//                ServerAddr0 |= (((sAddr/100000000000)%10)<<12)&0x0000f000;
+//                ServerAddr0 |= (((sAddr/10000000000)%10)<<8)&0x00000f00;
+//                ServerAddr0 |= (((sAddr/1000000000)%10)<<4)&0x000000f0;
+//                ServerAddr0 |= ((sAddr/100000000)%10)&0x0000000f;
+//                ServerAddr1 |= (((sAddr/10000000)%10)<<28)&0xf0000000;
+//                ServerAddr1 |= (((sAddr/1000000)%10)<<24)&0x0f000000;
+//                ServerAddr1 |= (((sAddr/100000)%10)<<20)&0x00f00000;
+//                ServerAddr1 |= (((sAddr/10000)%10)<<16)&0x000f0000;
+//                ServerAddr1 |= (((sAddr/1000)%10)<<12)&0x0000f000;
+//                ServerAddr1 |= (((sAddr/100)%10)<<8)&0x00000f00;
+//                ServerAddr1 |= (((sAddr/10)%10)<<4)&0x000000f0;
+//                ServerAddr1 |= (sAddr%10)&0x0000000f;
+            }
+        }
+        conf_db.close();
+    }
+}
+
+void DatabaseThread::run()
+{
+    keep = true;
+    while(true){
+        if(ConfSqlList.length()>0){
+            if(conf_db.open()){
+                if(conf_db.transaction()){
+                    while(ConfSqlList.length()>0){
+                        conf_db.exec(ConfSqlList.first());
+                        QString Data = QString("[ %1 sql ] %2")
+                                .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz"))
+                                .arg(ConfSqlList.first());
+                        emit sql_log(Data);
+                        ConfSqlList.removeFirst();
+                        usleep(1000);
+                    }
+                    conf_db.commit();
+                }
+                conf_db.close();
+            }
+        }
+        if(RecSqlList.length()>0){
+            if(rec_db.open()){
+                if(rec_db.transaction()){
+                    while(RecSqlList.length()>0){
+                        rec_db.exec(RecSqlList.first());
+                        QString Data = QString("[ %1 sql ] %2")
+                                .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz"))
+                                .arg(RecSqlList.first());
+                        emit sql_log(Data);
+                        RecSqlList.removeFirst();
+                        usleep(1000);
+                    }
+                    rec_db.commit();
+                }
+                rec_db.close();
+            }
+        }
+        if(StaSqlList.length()>0){
+            if(sta_db.open()){
+                if(sta_db.transaction()){
+                    while (StaSqlList.length()>0) {
+                        sta_db.exec(StaSqlList.first());
+                        QString Data = QString("[ %1 sql ] %2")
+                                .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz"))
+                                .arg(StaSqlList.first());
+                        emit sql_log(Data);
+                        StaSqlList.removeFirst();
+                        usleep(1000);
+                    }
+                    sta_db.commit();
+                }
+                sta_db.close();
+            }
+        }
+        usleep(100000);
+    }
+}

+ 41 - 0
databasethread.h

@@ -0,0 +1,41 @@
+#ifndef DATABASETHREAD_H
+#define DATABASETHREAD_H
+
+#include <QThread>
+#include <QDateTime>
+#include <QDir>
+#include <QFile>
+#include <QSqlDatabase>
+#include <QSqlQuery>
+#include <QVariant>
+#include <QStringList>
+
+class DatabaseThread : public QThread
+{
+    Q_OBJECT
+public:
+    enum {
+        ConfSql = 0,
+        RecSql = 1,
+        StaSql = 2
+    }SqlType;
+    explicit DatabaseThread(QObject *parent = nullptr);
+    ~DatabaseThread();
+    bool db_init();
+    bool had_table(QStringList tblist, QString tbname);
+    void db_load();
+    void appendSql(int type, QString sql);
+    void run();
+    void stop();
+
+signals:
+    void sql_log(QString log);
+public slots:
+
+private:
+    bool keep;
+    QSqlDatabase conf_db, rec_db, sta_db;
+    QStringList ConfSqlList, RecSqlList, StaSqlList;
+};
+
+#endif // DATABASETHREAD_H

+ 77 - 0
interfaceserver.cpp

@@ -0,0 +1,77 @@
+#include "interfaceserver.h"
+#include "smartlightshm.h"
+
+InterfaceServer::InterfaceServer(QObject *parent) : QTcpServer(parent)
+{
+    threadList.clear();
+}
+
+void InterfaceServer::start()
+{
+    if(!this->listen(QHostAddress::Any,55010)){
+        exit(-1);
+    }
+}
+
+void InterfaceServer::closeThread()
+{
+    InterfaceThread *pThread = static_cast<InterfaceThread *>(sender());
+    if(pThread){
+        QList<InterfaceThread *>::iterator i;
+        for(i=threadList.begin();i!=threadList.end();i++){
+            InterfaceThread *thread = *i;
+            emit SetCommData("0008",1,QString("close thread:%1").arg(thread->cmdID()));
+            if(thread==pThread){
+                threadList.removeAll(thread);
+                pThread->deleteLater();
+                break;
+            }
+        }
+    }
+}
+
+void InterfaceServer::incomingConnection(qintptr socketDescriptor)
+{
+    InterfaceThread *thread = new InterfaceThread(socketDescriptor,this);
+    connect(thread,&InterfaceThread::finished,this,&InterfaceServer::closeThread);
+    connect(thread,&InterfaceThread::resetRequest,this,&InterfaceServer::resetRequest);
+    connect(thread,&InterfaceThread::requestRealTimeData,this,&InterfaceServer::requestRealTimeData);
+    connect(thread,&InterfaceThread::requestSetParameters,this,&InterfaceServer::requestSetParameters);
+    connect(thread,&InterfaceThread::CommData,this,&InterfaceServer::CommData);
+    threadList.append(thread);
+    //来自平台的数据信号
+    thread->start();
+}
+
+void InterfaceServer::setEchoString(QString CommId, QString EchoString)
+{
+    emit SetCommData(CommId, 1, "EchoString");
+    QList<InterfaceThread *>::iterator i;
+    for(i=threadList.begin();i!=threadList.end();i++){
+        InterfaceThread *thread = *i;
+        emit SetCommData(CommId,1,QString("check thread:%1").arg(thread->cmdID()));
+//        if(thread->chkCmdID(CommId)){
+            thread->setEchoString(EchoString);
+            break;
+//        }
+    }
+}
+
+void InterfaceServer::resetRequest(QString deviceID, int commandType, int parameterType, int pseq){
+    emit SetResetRequest(deviceID,commandType,parameterType,pseq);
+}
+
+void InterfaceServer::requestRealTimeData(QString deviceID, int commandType, int parameterType, int pn, int queryNumber, int startPoint)
+{
+    emit SetRequestRealTimeData(deviceID, commandType, parameterType, pn, queryNumber, startPoint);
+}
+
+void InterfaceServer::requestSetParameters(QString deviceID, int commandType, int parameterType, QString tmp)
+{
+    emit SetRequestSetParameters(deviceID, commandType, parameterType, tmp);
+}
+
+void InterfaceServer::CommData(QString deviceID, int dir, QString data)
+{
+    emit SetCommData(deviceID, dir, data);
+}