databasethread.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. #include "databasethread.h"
  2. #include "smartlightshm.h"
  3. DatabaseThread::DatabaseThread(QObject *parent) : QThread(parent)
  4. {
  5. QDir dir(QString(DbPath));
  6. ConfSqlList.clear();
  7. RecSqlList.clear();
  8. StaSqlList.clear();
  9. if(!dir.exists())
  10. dir.mkdir(QString(DbPath));
  11. conf_db = QSqlDatabase::addDatabase("QSQLITE","conf_db");
  12. conf_db.setDatabaseName(QString(DbPath)+"/conf.db");
  13. rec_db = QSqlDatabase::addDatabase("QSQLITE","rec.db");
  14. rec_db.setDatabaseName(QString(DbPath)+"/rec.db");
  15. sta_db = QSqlDatabase::addDatabase("QSQLITE","sta_db");
  16. sta_db.setDatabaseName(QString(DbPath)+"/sta.db");
  17. if(db_init()){
  18. db_load();
  19. }
  20. }
  21. DatabaseThread::~DatabaseThread()
  22. {
  23. stop();
  24. deleteLater();
  25. }
  26. void DatabaseThread::stop()
  27. {
  28. keep = false;
  29. }
  30. void DatabaseThread::appendSql(int type, QString sql)
  31. {
  32. if(type==ConfSql)
  33. ConfSqlList.append(sql);
  34. else if(type==RecSql)
  35. RecSqlList.append(sql);
  36. else if(type==StaSql)
  37. StaSqlList.append(sql);
  38. }
  39. bool DatabaseThread::had_table(QStringList tblist, QString tbname)
  40. {
  41. for(int i=0;i<tblist.length();i++){
  42. if(tblist.at(i).compare(tbname)==0)
  43. return true;
  44. }
  45. return false;
  46. }
  47. bool DatabaseThread::db_init()
  48. {
  49. if(!conf_db.open())
  50. return false;
  51. if(!had_table(conf_db.tables(),"sys_conf")){
  52. conf_db.exec("create table sys_conf (name text(40), value text(200))");
  53. conf_db.exec("insert into sys_conf (name, value) values ('ServerAddr','88888888888888')");
  54. }
  55. conf_db.close();
  56. if(!rec_db.open())
  57. return false;
  58. if(!had_table(rec_db.tables(),"err_rec")){
  59. 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))");
  60. }
  61. rec_db.close();
  62. if(!sta_db.open())
  63. return false;
  64. if(!had_table(sta_db.tables(),"err_count")){
  65. sta_db.exec("create table err_count (id integer primary key autoincrement, device_id text(20), err_count1 integer, err_count2 integer)");
  66. }
  67. sta_db.close();
  68. return true;
  69. }
  70. void DatabaseThread::db_load()
  71. {
  72. if(conf_db.open()){
  73. QSqlQuery qry = conf_db.exec("select name, value from sys_conf");
  74. while (qry.next()) {
  75. if(qry.value(0).toString().compare("ServerAddr")==0){
  76. // ServerAddr0 = 0x00000000;
  77. // ServerAddr1 = 0x00000000;
  78. // quint64 sAddr = qry.value(1).toULongLong()&0xffffffffffffffff;
  79. // ServerAddr0 |= ((sAddr/10000000000000)<<20)&0x00f00000;
  80. // ServerAddr0 |= (((sAddr/1000000000000)%10)<<16)&0x000f0000;
  81. // ServerAddr0 |= (((sAddr/100000000000)%10)<<12)&0x0000f000;
  82. // ServerAddr0 |= (((sAddr/10000000000)%10)<<8)&0x00000f00;
  83. // ServerAddr0 |= (((sAddr/1000000000)%10)<<4)&0x000000f0;
  84. // ServerAddr0 |= ((sAddr/100000000)%10)&0x0000000f;
  85. // ServerAddr1 |= (((sAddr/10000000)%10)<<28)&0xf0000000;
  86. // ServerAddr1 |= (((sAddr/1000000)%10)<<24)&0x0f000000;
  87. // ServerAddr1 |= (((sAddr/100000)%10)<<20)&0x00f00000;
  88. // ServerAddr1 |= (((sAddr/10000)%10)<<16)&0x000f0000;
  89. // ServerAddr1 |= (((sAddr/1000)%10)<<12)&0x0000f000;
  90. // ServerAddr1 |= (((sAddr/100)%10)<<8)&0x00000f00;
  91. // ServerAddr1 |= (((sAddr/10)%10)<<4)&0x000000f0;
  92. // ServerAddr1 |= (sAddr%10)&0x0000000f;
  93. }
  94. }
  95. conf_db.close();
  96. }
  97. }
  98. void DatabaseThread::run()
  99. {
  100. keep = true;
  101. while(true){
  102. if(ConfSqlList.length()>0){
  103. if(conf_db.open()){
  104. if(conf_db.transaction()){
  105. while(ConfSqlList.length()>0){
  106. conf_db.exec(ConfSqlList.first());
  107. QString Data = QString("[ %1 sql ] %2")
  108. .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz"))
  109. .arg(ConfSqlList.first());
  110. emit sql_log(Data);
  111. ConfSqlList.removeFirst();
  112. usleep(1000);
  113. }
  114. conf_db.commit();
  115. }
  116. conf_db.close();
  117. }
  118. }
  119. if(RecSqlList.length()>0){
  120. if(rec_db.open()){
  121. if(rec_db.transaction()){
  122. while(RecSqlList.length()>0){
  123. rec_db.exec(RecSqlList.first());
  124. QString Data = QString("[ %1 sql ] %2")
  125. .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz"))
  126. .arg(RecSqlList.first());
  127. emit sql_log(Data);
  128. RecSqlList.removeFirst();
  129. usleep(1000);
  130. }
  131. rec_db.commit();
  132. }
  133. rec_db.close();
  134. }
  135. }
  136. if(StaSqlList.length()>0){
  137. if(sta_db.open()){
  138. if(sta_db.transaction()){
  139. while (StaSqlList.length()>0) {
  140. sta_db.exec(StaSqlList.first());
  141. QString Data = QString("[ %1 sql ] %2")
  142. .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz"))
  143. .arg(StaSqlList.first());
  144. emit sql_log(Data);
  145. StaSqlList.removeFirst();
  146. usleep(1000);
  147. }
  148. sta_db.commit();
  149. }
  150. sta_db.close();
  151. }
  152. }
  153. usleep(100000);
  154. }
  155. }