DataManagerProxy.cpp 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #include "DataManagerProxy.h"
  2. #include "RedisClient.h"
  3. #include <QJsonArray>
  4. #include <QJsonObject>
  5. DataManagerProxy::DataManagerProxy() {
  6. }
  7. QList<DataManagerInfo> DataManagerProxy::loadModuleInfos(const Config& config)
  8. {
  9. RedisClient redis;
  10. QList<DataManagerInfo > listDataManageInfo;
  11. // QString key = QString("%1:%2").arg(config.AppName, config.AppId);
  12. QString key = config.Service;
  13. DeviceInfo di;
  14. redis.Setup(config.redisCfg.host, config.redisCfg.port, config.redisCfg.au);
  15. // QHash<QString, QString> h = redis->hgetall(key);
  16. // for(auto it = h.begin(); it != h.end(); it++)
  17. // {
  18. // qDebug()<< "key" << it.key();
  19. // //qDebug()<< "val" << it.value();
  20. // QJsonArray ja = QJsonDocument::fromJson(it.value().toUtf8()).array();
  21. // // QJsonObject jo = QJsonDocument::fromJson(it.value().toUtf8()).object();
  22. // }
  23. QStringList lst = redis.hvals(key);
  24. foreach (QString str, lst)
  25. {
  26. if( str.isEmpty() )
  27. {
  28. continue;
  29. }
  30. QJsonParseError jsonParseError;
  31. QJsonDocument jsonDocument(QJsonDocument::fromJson(str.toUtf8(), &jsonParseError));
  32. if(QJsonParseError::NoError != jsonParseError.error)
  33. {
  34. //LOGERROR("parse json file {} error", fullpath.toStdString().c_str());
  35. continue;
  36. }
  37. if(!jsonDocument.isObject()){
  38. continue;
  39. }
  40. // QJsonArray ja = jsonDocument.array();
  41. QJsonObject jo = jsonDocument.object();
  42. if(!jo.contains("config")){
  43. continue;
  44. }
  45. QJsonObject jConfig = jo["config"].toObject();
  46. ModuleInfo mi;
  47. // mi.Name = "TDengineSubscriber";
  48. mi.AssemblyName = "plugins/TDengineSubscriber.dll";
  49. // mi.Name = jConfig["name"].toString().toStdString();
  50. mi.Name = jConfig["code"].toString().toStdString();
  51. // mi.AssemblyName = jConfig["model"].toString().toStdString();
  52. QJsonObject jSettings = jConfig["settings"].toObject();
  53. QJsonArray jInputs = jConfig["inputs"].toArray();
  54. auto parse = [](const QJsonArray& jInputs)
  55. ->std::tuple<std::list<std::string>, std::set<std::string>, std::unordered_multimap<std::string, std::string>>{
  56. std::list<std::string>inputLists;
  57. std::set<std::string>tables;
  58. std::unordered_multimap<std::string,std::string>inputsMap;
  59. foreach (auto var, jInputs) {
  60. QString item = var.toString();
  61. inputLists.push_back(item.toLocal8Bit().toStdString());
  62. QStringList strlist = item.split(QLatin1Char('.'), Qt::SkipEmptyParts);
  63. tables.insert(strlist.at(0).toStdString());
  64. inputsMap.insert({strlist.at(0).toStdString(),strlist.at(1).toStdString()});
  65. }
  66. return {inputLists, tables, inputsMap};
  67. };
  68. auto [inputLists, tables, inputsMap] = parse(jInputs);
  69. mi.Topics = tables;
  70. ConsumerInfo ci;
  71. ci.Name = jConfig["code"].toString().toStdString();
  72. ci.AssemblyName = jConfig["model"].toString().toStdString();
  73. ci.SubscribeName = mi.Name;
  74. ci.dataItems = inputLists;
  75. ci.topicsMap = inputsMap;
  76. QJsonDocument doc(jSettings);
  77. QString js(doc.toJson(QJsonDocument::Compact));
  78. ci.Settings = js.toStdString();
  79. DataManagerInfo dataManageInfo;
  80. dataManageInfo.consumers.push_back(ci);
  81. dataManageInfo.modules.push_back(mi);
  82. listDataManageInfo.push_back(dataManageInfo);
  83. // foreach (auto var, ja) {
  84. // QJsonObject item = var.toObject();
  85. // QString topic = item["topic"].toString();
  86. // QJsonArray clients = item["Client"].toArray();
  87. // DataManagerInfo dataManageInfo;
  88. // ModuleInfo mi;
  89. // mi.Name = "TDengineSubscriber";
  90. // mi.AssemblyName = "plugins/TDengineSubscriber.dll";
  91. // // mi.ClassName = "TDengineSubscriber";
  92. // mi.Code = topic.toStdString();
  93. // mi.Topic = topic.toStdString();
  94. // foreach (auto client, clients) {
  95. // ConsumerInfo ci;
  96. // ci.Name = client["Name"].toString().toStdString();
  97. // ci.AssemblyName = client["AssemblyName"].toString().toStdString();
  98. // //ci.ClassName = "Alarm";
  99. // ci.SubscribeName = topic.toStdString();
  100. // ci.Settings = client["Settings"].toVariant().toString().toStdString();
  101. // dataManageInfo.consumers.push_back(ci);
  102. // }
  103. // dataManageInfo.modules.push_back(mi);
  104. // listDataManageInfo.push_back(dataManageInfo);
  105. // }
  106. }
  107. #if 0
  108. ModuleInfo mi;
  109. mi.Name = "TDengineSubscriber";
  110. mi.AssemblyName = "plugins/TDengineSubscriber.dll";
  111. mi.ClassName = "TDengineSubscriber";
  112. mi.Code = "topic:xxx";
  113. ConsumerInfo ci;
  114. ci.Name = "Alarm";
  115. ci.AssemblyName = "plugins/Alarm.dll";
  116. ci.ClassName = "Alarm";
  117. ci.SubscribeName = "TDengineSubscriber";
  118. DataManagerInfo dataManageInfo;
  119. dataManageInfo.consumers.push_back(ci);
  120. dataManageInfo.modules.push_back(mi);
  121. listDataManageInfo.push_back(dataManageInfo);
  122. #endif
  123. //return di;
  124. return listDataManageInfo;
  125. }