#include "DataManagerProxy.h" #include "RedisClient.h" #include #include DataManagerProxy::DataManagerProxy() { } QList DataManagerProxy::loadModuleInfos(const Config& config) { RedisClient redis; QList listDataManageInfo; // QString key = QString("%1:%2").arg(config.AppName, config.AppId); QString key = config.Service; DeviceInfo di; redis.Setup(config.redisCfg.host, config.redisCfg.port, config.redisCfg.au); // QHash h = redis->hgetall(key); // for(auto it = h.begin(); it != h.end(); it++) // { // qDebug()<< "key" << it.key(); // //qDebug()<< "val" << it.value(); // QJsonArray ja = QJsonDocument::fromJson(it.value().toUtf8()).array(); // // QJsonObject jo = QJsonDocument::fromJson(it.value().toUtf8()).object(); // } QStringList lst = redis.hvals(key); foreach (QString str, lst) { if( str.isEmpty() ) { continue; } QJsonParseError jsonParseError; QJsonDocument jsonDocument(QJsonDocument::fromJson(str.toUtf8(), &jsonParseError)); if(QJsonParseError::NoError != jsonParseError.error) { //LOGERROR("parse json file {} error", fullpath.toStdString().c_str()); continue; } if(!jsonDocument.isObject()){ continue; } // QJsonArray ja = jsonDocument.array(); QJsonObject jo = jsonDocument.object(); if(!jo.contains("config")){ continue; } QJsonObject jConfig = jo["config"].toObject(); ModuleInfo mi; // mi.Name = "TDengineSubscriber"; mi.AssemblyName = "plugins/TDengineSubscriber.dll"; // mi.Name = jConfig["name"].toString().toStdString(); mi.Name = jConfig["code"].toString().toStdString(); // mi.AssemblyName = jConfig["model"].toString().toStdString(); QJsonObject jSettings = jConfig["settings"].toObject(); QJsonArray jInputs = jConfig["inputs"].toArray(); auto parse = [](const QJsonArray& jInputs) ->std::tuple, std::set, std::unordered_multimap>{ std::listinputLists; std::settables; std::unordered_multimapinputsMap; foreach (auto var, jInputs) { QString item = var.toString(); inputLists.push_back(item.toLocal8Bit().toStdString()); QStringList strlist = item.split(QLatin1Char('.'), Qt::SkipEmptyParts); tables.insert(strlist.at(0).toStdString()); inputsMap.insert({strlist.at(0).toStdString(),strlist.at(1).toStdString()}); } return {inputLists, tables, inputsMap}; }; auto [inputLists, tables, inputsMap] = parse(jInputs); mi.Topics = tables; ConsumerInfo ci; ci.Name = jConfig["code"].toString().toStdString(); ci.AssemblyName = jConfig["model"].toString().toStdString(); ci.SubscribeName = mi.Name; ci.dataItems = inputLists; ci.topicsMap = inputsMap; QJsonDocument doc(jSettings); QString js(doc.toJson(QJsonDocument::Compact)); ci.Settings = js.toStdString(); DataManagerInfo dataManageInfo; dataManageInfo.consumers.push_back(ci); dataManageInfo.modules.push_back(mi); listDataManageInfo.push_back(dataManageInfo); // foreach (auto var, ja) { // QJsonObject item = var.toObject(); // QString topic = item["topic"].toString(); // QJsonArray clients = item["Client"].toArray(); // DataManagerInfo dataManageInfo; // ModuleInfo mi; // mi.Name = "TDengineSubscriber"; // mi.AssemblyName = "plugins/TDengineSubscriber.dll"; // // mi.ClassName = "TDengineSubscriber"; // mi.Code = topic.toStdString(); // mi.Topic = topic.toStdString(); // foreach (auto client, clients) { // ConsumerInfo ci; // ci.Name = client["Name"].toString().toStdString(); // ci.AssemblyName = client["AssemblyName"].toString().toStdString(); // //ci.ClassName = "Alarm"; // ci.SubscribeName = topic.toStdString(); // ci.Settings = client["Settings"].toVariant().toString().toStdString(); // dataManageInfo.consumers.push_back(ci); // } // dataManageInfo.modules.push_back(mi); // listDataManageInfo.push_back(dataManageInfo); // } } #if 0 ModuleInfo mi; mi.Name = "TDengineSubscriber"; mi.AssemblyName = "plugins/TDengineSubscriber.dll"; mi.ClassName = "TDengineSubscriber"; mi.Code = "topic:xxx"; ConsumerInfo ci; ci.Name = "Alarm"; ci.AssemblyName = "plugins/Alarm.dll"; ci.ClassName = "Alarm"; ci.SubscribeName = "TDengineSubscriber"; DataManagerInfo dataManageInfo; dataManageInfo.consumers.push_back(ci); dataManageInfo.modules.push_back(mi); listDataManageInfo.push_back(dataManageInfo); #endif //return di; return listDataManageInfo; }