databasethread.cpp 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. #include "databasethread.h"
  2. #include "ytdhcam.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. DatabaseThread::DatabaseThread(QObject *parent) :
  9. QThread(parent)
  10. {
  11. hour = 255;
  12. sqlList.clear();
  13. alarmRepList.clear();
  14. db = QSqlDatabase::addDatabase("QMYSQL","video_db");
  15. db.setHostName(QString(HostName));
  16. db.setPort(HostPort);
  17. db.setUserName(QString(UserName));
  18. db.setPassword(QString(PassWord));
  19. db.setDatabaseName(QString(DatabaseName));
  20. db.open();
  21. check_devicelist();
  22. }
  23. void DatabaseThread::appendSql(QString sql)
  24. {
  25. sqlList.append(sql);
  26. }
  27. void DatabaseThread::appendAlarm(AlarmRep rep)
  28. {
  29. alarmRepList.append(rep);
  30. }
  31. void DatabaseThread::check_devicelist()
  32. {
  33. QSqlQuery qry = db.exec("select owner_code, owner_name, unitinfo, owner_xh, company, push_param1, push_param2, push_param3, push_param4, login_param from sp_owner where dwtype=16");
  34. int nrow= 0;
  35. while(qry.next()){
  36. sysConfShm->deviceInfo[nrow].Enabled=0x01;
  37. sprintf(sysConfShm->deviceInfo[nrow].Device_Code,"%s",qry.value(0).toString().toUtf8().data());
  38. sprintf(sysConfShm->deviceInfo[nrow].Device_Name,"%s",qry.value(1).toString().toUtf8().data());
  39. sprintf(sysConfShm->deviceInfo[nrow].Device_Info,"%s",qry.value(2).toString().toUtf8().data());
  40. sprintf(sysConfShm->deviceInfo[nrow].Device_Type,"%s",qry.value(3).toString().toUtf8().data());
  41. sprintf(sysConfShm->deviceInfo[nrow].Company_Code,"%s",qry.value(4).toString().toUtf8().data());
  42. sysConfShm->deviceInfo[nrow].Push_Param[0]=qry.value(5).toUInt();
  43. sysConfShm->deviceInfo[nrow].Push_Param[1]=qry.value(6).toUInt();
  44. sysConfShm->deviceInfo[nrow].Push_Param[2]=qry.value(7).toUInt();
  45. sysConfShm->deviceInfo[nrow].Push_Param[3]=qry.value(8).toUInt();
  46. sysConfShm->deviceInfo[nrow].RegistStatus = 0x00;
  47. sysConfShm->deviceInfo[nrow].LoginStatus = 0x00;
  48. sysConfShm->deviceInfo[nrow].LoginHandle = 0;
  49. QJsonParseError err;
  50. QJsonDocument jDoc = QJsonDocument::fromJson(qry.value(9).toString().toUtf8(),&err);
  51. if(err.error==QJsonParseError::NoError){
  52. QJsonObject jRoot = jDoc.object();
  53. if((!jRoot.value("loginname").isUndefined())&&(!jRoot.value("loginname").isNull())){
  54. sprintf(sysConfShm->deviceInfo[nrow].LoginName,"%s",jRoot.value("loginname").toString().toUtf8().data());
  55. }
  56. if((!jRoot.value("password").isUndefined())&&(!jRoot.value("password").isNull())){
  57. sprintf(sysConfShm->deviceInfo[nrow].Password,"%s",jRoot.value("password").toString().toUtf8().data());
  58. }
  59. }else{
  60. }
  61. nrow++;
  62. }
  63. for(int i=nrow;i<102400;i++)
  64. sysConfShm->deviceInfo[i].Enabled=0x00;
  65. qry.clear();
  66. nrow = 1;
  67. qry = db.exec("select id,owner_id from sp_owner_company order by id");
  68. while(qry.next()){
  69. if(nrow<10240){
  70. sysConfShm->companyInfo[nrow].Idx = qry.value(0).toULongLong()&0xffffffff;
  71. sysConfShm->companyInfo[nrow].ParentId = 0;
  72. sysConfShm->companyInfo[nrow].Enabled = 0x01;
  73. sprintf(sysConfShm->companyInfo[nrow].CompanyCode,"%d",qry.value(1).toUInt());
  74. nrow++;
  75. }else
  76. break;
  77. }
  78. qry.clear();
  79. nrow = 1;
  80. qry = db.exec("select id, owner_code, phone, data2 from sp_owner_phone order by id");
  81. while(qry.next()){
  82. if(nrow<102400){
  83. char *phone = qry.value(2).toString().toUtf8().data();
  84. unsigned long len = strlen(phone);
  85. sysConfShm->userInfo[nrow].Idx = qry.value(0).toULongLong()&0xffffffff;
  86. sysConfShm->userInfo[nrow].Enabled = 0x01;
  87. sprintf(sysConfShm->userInfo[nrow].CompanyCode,"%d",qry.value(1).toUInt());
  88. for(unsigned long i=0;i<20;i++){
  89. sysConfShm->userInfo[nrow].CellPhone[i] = 0x00;
  90. if(i<len)
  91. sysConfShm->userInfo[nrow].CellPhone[i] = phone[i];
  92. }
  93. QString data2 = qry.value(3).toString();
  94. if(data2.length()>0){
  95. QStringList ds = data2.split(",");
  96. quint64 p = 0x0000000000000000;
  97. for(int i=0;i<ds.length();i++){
  98. p |= ((0x0000000000000001)<<(ds.at(i).toUInt()&0x3f));
  99. }
  100. sysConfShm->userInfo[nrow].InfoChecked = p;
  101. }else
  102. sysConfShm->userInfo[nrow].InfoChecked=0;
  103. nrow++;
  104. }else
  105. break;
  106. }
  107. hour=QTime::currentTime().hour();
  108. }
  109. void DatabaseThread::run()
  110. {
  111. while(1){
  112. if(!db.isOpen()){
  113. db.open();
  114. }else{
  115. if(QTime::currentTime().hour()!=hour){
  116. hour=QTime::currentTime().hour();
  117. check_devicelist();
  118. }
  119. if(sqlList.length()>0){
  120. while(sqlList.length()>0){
  121. db.exec(sqlList.first());
  122. sqlList.removeFirst();
  123. usleep(1000);
  124. }
  125. }
  126. if(alarmRepList.length()>0){
  127. while(alarmRepList.length()>0){
  128. AlarmRep rep = alarmRepList.first();
  129. QSqlQuery qry = db.exec(rep.Sql);
  130. quint64 lastid = qry.lastInsertId().toULongLong()&0xffffffffffffffff;
  131. QString companyCode="";
  132. QString phoneList="";
  133. for(int i=0;i<102400;i++){
  134. if(sysConfShm->deviceInfo[i].Enabled==0x01){
  135. if(QString::compare(rep.DeviceId,QString(sysConfShm->deviceInfo[i].Device_Code))==0){
  136. companyCode = QString(sysConfShm->deviceInfo[i].Company_Code);
  137. break;
  138. }
  139. }
  140. }
  141. if(companyCode.length()>0){
  142. for(int i=0;i<102400;i++){
  143. if(sysConfShm->userInfo[i].Enabled==0x01){
  144. if(QString::compare(companyCode,QString(sysConfShm->userInfo[i].CompanyCode))==0){
  145. if(phoneList.length()==0)
  146. phoneList = QString(sysConfShm->userInfo[i].CellPhone);
  147. else
  148. phoneList.append(QString(",%1").arg(sysConfShm->userInfo[i].CellPhone));
  149. }
  150. }
  151. }
  152. }
  153. if((lastid>0)&&(companyCode.length()>0)){
  154. emit AlarmReport(rep.DeviceId,lastid,rep.AlarmType,rep.AlarmTime,companyCode,phoneList);
  155. }
  156. alarmRepList.removeFirst();
  157. usleep(1000);
  158. }
  159. }
  160. }
  161. usleep(50000);
  162. }
  163. }