databasethread.cpp 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #include "databasethread.h"
  2. #include "waterMk01.h"
  3. #include "AlarmReport.h"
  4. #define HostName "47.98.201.187"
  5. #define HostPort 3306
  6. #define UserName "uskyIOT"
  7. #define PassWord "uskyIOT"
  8. #define DatabaseName "jdxf"
  9. #define sql_debug
  10. extern MksensorList *mkList;
  11. DatabaseThread::DatabaseThread(QObject *parent) :
  12. QThread(parent)
  13. {
  14. keep = false;
  15. hour = 255;
  16. sqlList.clear();
  17. alarmRepList.clear();
  18. db = QSqlDatabase::addDatabase("QMYSQL","mksensor_db");
  19. db.setHostName(QString(HostName));
  20. db.setPort(HostPort);
  21. db.setUserName(QString(UserName));
  22. db.setPassword(QString(PassWord));
  23. db.setDatabaseName(QString(DatabaseName));
  24. db.open();
  25. mcdb = QSqlDatabase::addDatabase("QMYSQL","mksensor_sdb");
  26. mcdb.setHostName(QString("47.111.81.118"));
  27. mcdb.setPort(3306);
  28. mcdb.setUserName(QString("root"));
  29. mcdb.setPassword(QString("Yt2021"));
  30. mcdb.setDatabaseName(QString("jx_cover"));
  31. // mcdb.open();
  32. }
  33. void DatabaseThread::appendSql(QString sql,int type)
  34. {
  35. if(type==1){
  36. sqlList.append(sql);
  37. }else if (type==2) {
  38. mcsqlList.append(sql);
  39. }
  40. }
  41. void DatabaseThread::appendAlarm(AlarmRep rep,int type)
  42. {
  43. if(type==1){
  44. alarmRepList.append(rep);
  45. }else if (type==2) {
  46. mcalarmRepList.append(rep);
  47. }
  48. }
  49. bool DatabaseThread::chktable(QString tbname)
  50. {
  51. QStringList tblist = db.tables();
  52. for(int i=0;i<tblist.size();i++){
  53. if(QString::compare(tblist.at(i),tbname)==0)
  54. return true;
  55. }
  56. return false;
  57. }
  58. void DatabaseThread::check_devicelist()
  59. {
  60. printf("database thread check_devicelist()\n");
  61. uint nowTime = QDateTime::currentDateTime().toTime_t();
  62. hour=QTime::currentTime().hour();
  63. QString sql = QString("select owner_code, owner_name, unitinfo, owner_xh, company, dwtype from sp_owner where dwtype in (2,4,128) and owner_xh !=''");
  64. QSqlQuery qry = db.exec(sql);
  65. int nrow= 0;
  66. while(qry.next()){
  67. if(nrow>10239)
  68. break;
  69. // QString tbname = QString("sp_d%1").arg(qry.value(0).toString());
  70. // if(!chktable(tbname)){
  71. // db.exec(QString::fromUtf8("create table `%1` (`id` bigint(20) unsigned not null auto_increment primary key, `device_code` varchar(30) not null, `port` varchar(55) default null, `time` datetime default null, `status` varchar(50) default null, `address` varchar(50) default null, `ncmd` varchar(50) default null, `data1` varchar(50) default null, `data2` varchar(255) default null, `data3` varchar(255) default null, `data4` varchar(255) default null, `data5` varchar(255) default null )").arg(tbname));
  72. // db.exec(QString::fromUtf8("insert into sp_owner_status (id, device_id, dwtype, point_name, point_code, point_data, data_time, content) values (null, '%1', %2, '状态', 1, '', '1970-01-01 08:00:00','')").arg(qry.value(0).toString()).arg(qry.value(5).toInt()));
  73. // db.exec(QString::fromUtf8("insert into sp_owner_status (id, device_id, dwtype, point_name, point_code, point_data, data_time, content) values (null, '%1', %2, '剩余电量', 2, '', '1970-01-01 08:00:00','')").arg(qry.value(0).toString()).arg(qry.value(5).toInt()));
  74. // db.exec(QString::fromUtf8("insert into sp_owner_status (id, device_id, dwtype, point_name, point_code, point_data, data_time, content) values (null, '%1', %2, '无线信号', 3, '', '1970-01-01 08:00:00','')").arg(qry.value(0).toString()).arg(qry.value(5).toInt()));
  75. // db.exec(QString::fromUtf8("insert into sp_owner_status (id, device_id, dwtype, point_name, point_code, point_data, data_time, content) values (null, '%1', %2, '水压/水位', 4, '', '1970-01-01 08:00:00','')").arg(qry.value(0).toString()).arg(qry.value(5).toInt()));
  76. // }
  77. sql = QString("select true_status from sp_devices_status where deviceid='%1'")
  78. .arg(qry.value(0).toString());
  79. QSqlQuery qry2 = db.exec(sql);
  80. mkList->sensors[nrow].Enabled=0x01;
  81. if(qry2.next()){
  82. if(qry2.value(0).toUInt()==0)
  83. mkList->sensors[nrow].LastCommtime = nowTime;
  84. }
  85. sprintf(mkList->sensors[nrow].Device_Code,"%s",qry.value(0).toString().toUtf8().data());
  86. sprintf(mkList->sensors[nrow].Device_Name,"%s",qry.value(1).toString().toUtf8().data());
  87. sprintf(mkList->sensors[nrow].Device_Info,"%s",qry.value(2).toString().toUtf8().data());
  88. sprintf(mkList->sensors[nrow].Device_Type,"%s",qry.value(5).toString().toUtf8().data());
  89. sprintf(mkList->sensors[nrow].Company_Code,"%s",qry.value(4).toString().toUtf8().data());
  90. printf("Device_Code:%s\n",QString(mkList->sensors[nrow].Device_Code).toUtf8().data());
  91. printf("Device_Code:%s\n",QString(mkList->sensors[nrow].Company_Code).toUtf8().data());
  92. nrow++;
  93. }
  94. for(int i=nrow;i<10240;i++){
  95. mkList->sensors[i].Enabled=0x00;
  96. mkList->sensors[i].LastCommtime = 0;
  97. }
  98. }
  99. void DatabaseThread::stop()
  100. {
  101. keep = false;
  102. }
  103. void DatabaseThread::run()
  104. {
  105. db.open();
  106. QString ip,port,name,passwd;
  107. QString mqttsql = QString("select ip, port, username, passwd from yt_dataprocessservice_mqtt where type = 'ytDP0008';");
  108. QSqlQuery mqttqry = db.exec(mqttsql);
  109. while(mqttqry.next())
  110. {
  111. ip = mqttqry.value(0).toString();
  112. port = mqttqry.value(1).toString();
  113. name = mqttqry.value(2).toString();
  114. passwd = mqttqry.value(3).toString();
  115. }
  116. emit mqttInfo(ip,port,name,passwd);
  117. mqttqry.clear();
  118. db.close();
  119. keep = true;
  120. printf("database thread start\n");
  121. while(keep){
  122. if(!db.isOpen()){
  123. db.open();
  124. }else{
  125. if(QTime::currentTime().hour()!=hour){
  126. check_devicelist();
  127. }
  128. if(alarmRepList.length()>0){
  129. while(alarmRepList.length()>0){
  130. AlarmRep rep = alarmRepList.first();
  131. QSqlQuery qry = db.exec(rep.Sql);
  132. #ifdef sql_debug
  133. emit SqlLog(QString("[ %1 sql] ").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz"))+rep.Sql);
  134. #endif
  135. quint64 lastid = qry.lastInsertId().toULongLong()&0xffffffffffffffff;
  136. if(lastid>0){
  137. emit AlarmReport(rep.DeviceId,lastid,rep.AlarmType,rep.AlarmTime);
  138. }
  139. alarmRepList.removeFirst();
  140. usleep(1000);
  141. }
  142. }
  143. if(sqlList.length()>0){
  144. db.exec(sqlList.first());
  145. #ifdef sql_debug
  146. emit SqlLog(QString("[ %1 sql ] ").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz"))+sqlList.first());
  147. #endif
  148. sqlList.removeFirst();
  149. }
  150. db.close();
  151. }
  152. usleep(10000);
  153. }
  154. if(db.isOpen())
  155. db.close();
  156. }