databasethread.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #include "databasethread.h"
  2. #include "datashm.h"
  3. //#define HostName "47.98.201.187"
  4. //#define HostPort 3306
  5. //#define UserName "root"
  6. //#define PassWord "Yt2018IoT"
  7. //#define DatabaseName "jdxf"
  8. #define HostName "101.133.214.75"
  9. #define HostPort 3306
  10. #define UserName "usky"
  11. #define PassWord "Yt#75Usky"
  12. #define DatabaseName "usky-cloud"
  13. #define sql_debug
  14. extern bool firsttime;
  15. DatabaseThread::DatabaseThread(QObject *parent) :
  16. QThread(parent)
  17. {
  18. keep = false;
  19. hour = 255;
  20. sqlList.clear();
  21. db = QSqlDatabase::addDatabase("QMYSQL","dmpdata_db");
  22. db.setHostName(QString(HostName));
  23. db.setPort(HostPort);
  24. db.setUserName(QString(UserName));
  25. db.setPassword(QString(PassWord));
  26. db.setDatabaseName(QString(DatabaseName));
  27. }
  28. void DatabaseThread::appendSql(QString sql)
  29. {
  30. sqlList.append(sql);
  31. }
  32. void DatabaseThread::check_devicelist()
  33. {
  34. printf("database thread check_devicelist()\n");
  35. int nrow=0;
  36. QString sql = QString("select device_code,device_type from dmp_device");
  37. QSqlQuery qry = db.exec(sql);
  38. while(qry.next()){
  39. if(nrow>1023)
  40. break;
  41. datashm->devinfo[nrow].Enabled = 0x01;
  42. sprintf(datashm->devinfo[nrow].DeviceCode,"%s",qry.value(0).toString().toUtf8().data());
  43. datashm->devinfo[nrow].DeviceType = qry.value(1).toUInt();
  44. // printf("nrow: %d, device_code: %s, device_type: %d\n",nrow,qry.value(0).toString().toUtf8().data(),qry.value(1).toUInt());
  45. nrow++;
  46. }
  47. qry.clear();
  48. for(int i=nrow;i<1024;i++)
  49. datashm->devinfo[i].Enabled=0x00;
  50. hour=QTime::currentTime().hour();
  51. }
  52. void DatabaseThread::stop()
  53. {
  54. keep = false;
  55. }
  56. void DatabaseThread::run()
  57. {
  58. int w_count=0;
  59. keep = true;
  60. while(keep){
  61. if(w_count>9)
  62. exit(1);
  63. QTime nowTime = QTime::currentTime();
  64. if((sqlList.length()>0)||((nowTime.hour()!=hour)&&(nowTime.minute()>12))){
  65. if(!db.isOpen()){
  66. w_count++;
  67. db.open();
  68. //printf("w_count = %d\n",w_count);
  69. }else{
  70. w_count=0;
  71. if((nowTime.hour()!=hour)&&(nowTime.minute()>12)){
  72. check_devicelist();
  73. }
  74. if(sqlList.length()>0){
  75. db.exec(sqlList.first());
  76. //printf("-----currenttime: %s sql = %s\n",(nowTime.toString("yyyy-MM-dd HH:mm:ss.zzz")).toUtf8().data(),(sqlList.first()).toUtf8().data());
  77. #ifdef sql_debug
  78. emit SqlLog(QString("[ %1 sql ] ").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz"))+sqlList.first());
  79. #endif
  80. sqlList.removeFirst();
  81. }else
  82. db.close();
  83. }
  84. }
  85. usleep(10000);
  86. }
  87. if(db.isOpen())
  88. db.close();
  89. }