DeviceManagerProxy.cpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #include "DeviceManagerProxy.h"
  2. #include <QJsonArray>
  3. #include <QJsonObject>
  4. #include <QJsonDocument>
  5. #include <QtCore/QTextCodec>
  6. #include <fstream>
  7. #define DEVICE_NODE "devices"
  8. std::string loadContent(std::string szFilename)
  9. {
  10. szFilename = QString::fromLocal8Bit(szFilename.c_str()).toLocal8Bit().toStdString();
  11. std::ifstream inStream(szFilename.c_str(),std::ios::in | std::ios::binary);
  12. if( inStream.is_open() != true )
  13. {
  14. return "";
  15. }
  16. return std::string((std::istreambuf_iterator<char>(inStream)),std::istreambuf_iterator<char>());
  17. }
  18. DeviceManagerProxy::DeviceManagerProxy(RedisAgent* redis)
  19. {
  20. m_pRedis = redis;
  21. }
  22. bool DeviceManagerProxy::parse(QString cfg,AlarmRuler& ar)
  23. {
  24. //qDebug() << __FILE__ << __LINE__ << cfg;
  25. //通过网页传来的 json内承运商中文名是 utf-8 编码
  26. QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
  27. QTextCodec::setCodecForLocale(utf8);
  28. QJsonDocument jsonDoc(QJsonDocument::fromJson(cfg.toLocal8Bit()));
  29. QJsonObject jsonObject = jsonDoc.object();
  30. QStringList keys = jsonObject.keys();
  31. foreach (QString key, keys)
  32. {
  33. if( key.compare("code",Qt::CaseInsensitive) == 0)
  34. {
  35. ar.alarmRuleId = jsonObject["code"].toString().toLocal8Bit().toStdString();
  36. }
  37. else if( key.compare("nodeCode",Qt::CaseInsensitive) == 0)
  38. {
  39. ar.NodeCode = jsonObject["nodeCode"].toString().toLocal8Bit().toStdString();
  40. }
  41. else if( key.compare("dataItemCode",Qt::CaseInsensitive) == 0)
  42. {
  43. ar.DataItemCode = jsonObject["dataItemCode"].toString().toLocal8Bit().toStdString();
  44. }
  45. else if( key.compare("operator",Qt::CaseInsensitive) == 0)
  46. {
  47. ar.Operator = jsonObject["operator"].toString().toLocal8Bit().toStdString();
  48. }
  49. else if( key.compare("operator1",Qt::CaseInsensitive) == 0)
  50. {
  51. ar.dbOperator1 = jsonObject["operator1"].toDouble();
  52. }
  53. else if( key.compare("operator2",Qt::CaseInsensitive) == 0)
  54. {
  55. ar.dbOperator2 = jsonObject["operator2"].toDouble();
  56. }
  57. else if( key.compare("continuousTimes",Qt::CaseInsensitive) == 0)
  58. {
  59. ar.nKeepTimes = jsonObject["continuousTimes"].toInt();
  60. }
  61. else if( key.compare("version",Qt::CaseInsensitive) == 0)
  62. {
  63. ar.alarmRuleVersion = jsonObject["version"].toInt();
  64. }
  65. else if( key.compare("level",Qt::CaseInsensitive) == 0)
  66. {
  67. ar.level = jsonObject["level"].toInt();
  68. }
  69. }
  70. ar.object = ar.NodeCode + "." + ar.DataItemCode;
  71. ar.status = 0;
  72. return true;
  73. }
  74. DeviceInfo DeviceManagerProxy::loadDataAlarm(std::string id,std::string app)
  75. {
  76. DeviceInfo di;
  77. if( m_pRedis == nullptr)
  78. {
  79. return di;
  80. }
  81. ModuleInfo mi;
  82. mi.Code = "active";
  83. mi.AssemblyName = app;
  84. DataItem oDT;
  85. oDT.Code = "alarm";
  86. mi.Properties.push_back(oDT);
  87. QStringList lst = m_pRedis->hvals(id.c_str());
  88. foreach (QString str, lst)
  89. {
  90. if( str.isEmpty() )
  91. {
  92. continue;
  93. }
  94. AlarmRuler ar;
  95. if( parse(str,ar) )
  96. {
  97. QString szJson;
  98. szJson += "{";
  99. szJson += QString("\"TableName\":\"%1\",").arg(ar.NodeCode.c_str());
  100. szJson += QString("\"DataName\":\"%1\",").arg(ar.DataItemCode.c_str());
  101. szJson += QString("\"Operator\":\"%1\",").arg(ar.Operator.c_str());
  102. szJson += QString("\"Operator1\":%1,").arg(ar.dbOperator1);
  103. szJson += QString("\"Operator2\":%1,").arg(ar.dbOperator2);
  104. szJson += QString("\"KeepTimes\":%1,").arg(ar.nKeepTimes);
  105. szJson += QString("\"alarmRuleId\":\"%1\",").arg(ar.alarmRuleId.c_str());
  106. szJson += QString("\"alarmRuleVersion\":%1,").arg(ar.alarmRuleVersion);
  107. szJson += QString("\"level\":%1,").arg(ar.level);
  108. szJson += QString("\"object\":\"%1\"").arg(ar.object.c_str());
  109. szJson += "}";
  110. Setting oSet;
  111. oSet.Name = ar.NodeCode;
  112. oSet.qValue = szJson;
  113. mi.vSettings.push_back(oSet);
  114. }
  115. }
  116. di.ModuleInfo = mi;
  117. return di;
  118. }
  119. DeviceInfo DeviceManagerProxy::loadCommAlarm(std::string id,std::string app)
  120. {
  121. DeviceInfo di;
  122. if( m_pRedis == nullptr)
  123. {
  124. return di;
  125. }
  126. ModuleInfo mi;
  127. mi.Code = "device";
  128. mi.AssemblyName = app;
  129. DataItem oDT;
  130. oDT.Code = "alarm";
  131. mi.Properties.push_back(oDT);
  132. QHash<QString, QString> mps = m_pRedis->hgetall(id.c_str());
  133. QHash<QString, QString>::iterator itr;
  134. for( itr = mps.begin(); itr != mps.end(); ++itr)
  135. {
  136. if( itr.key().isEmpty() || itr.value().isEmpty() )
  137. {
  138. continue;
  139. }
  140. if( itr.key().compare(DEVICE_NODE,Qt::CaseInsensitive) != 0 )
  141. {
  142. continue;
  143. }
  144. Setting oSet;
  145. oSet.Name = itr.key().toLocal8Bit().toStdString();
  146. oSet.qValue = itr.value();
  147. mi.vSettings.push_back(oSet);
  148. break;
  149. }
  150. di.ModuleInfo = mi;
  151. return di;
  152. }