|
@@ -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);
|
|
|
+ }
|
|
|
+}
|