logplus/logPlus/CloudDataDlg.cpp

474 lines
14 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "CloudDataDlg.h"
#include <QPainter>
#include "ApiClient.h"
#include <QJsonArray>
#include "geometryutils.h"
#include "MemRdWt.h"
#include "qtprojectwidgets.h"
static QString joinUrl(const QString &base, const QString &path)
{
if (path.startsWith("http://") || path.startsWith("https://")) return path;
QString b = base;
QString p = path;
if (b.endsWith('/')) b.chop(1);
if (p.startsWith('/')) p.remove(0, 1);
if (b.isEmpty()) return p;
return b + '/' + p;
}
CloudDataDlg::CloudDataDlg(QWidget *parent)
: QDialog(parent),
ui(new Ui::CloudDataDlg)
{
ui->setupUi(this);
ApiClient::getInstance()->setBaseUrl("http://10.235.142.76:8090");
//setWindowTitle(QString::fromLocal8Bit("边框线形设置"));
connect(ui->btnAccess,SIGNAL(clicked()),this,SLOT(onEnter()));
ui->btn_back->setVisible(false);
ui->treeWidget->setColumnCount(1); //设置列数
ui->treeWidget->setHeaderHidden(true); // 隐藏表头
ui->treeWidget->setDragEnabled(false);
ui->treeWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, this, &CloudDataDlg::onItemDoubleClicked);
}
CloudDataDlg::~CloudDataDlg()
{
}
void CloudDataDlg::setProjectWidgets(QtProjectWidgets* projectWidgets)
{
m_projectWidgets = projectWidgets;
}
void CloudDataDlg::initTreeProjects(QJsonObject jObj)
{
ui->btn_back->setVisible(false);
ui->treeWidget->clear();//清理数据
if (jObj.value("myProjects").isArray())
{
QJsonArray jarr = jObj.value("myProjects").toArray();
if (jarr.count() <= 0)
return;
QTreeWidgetItem *item = new QTreeWidgetItem();
item->setText(0, "我的项目");
item->setData(0, Qt::UserRole, "my_root"); // 存储额外数据如ID
//item->setData(0, Qt::UserRole + 1, evaluationInfo.guid); // 存储额外数据如ID
//
QIcon icon;
icon.addPixmap(QPixmap(GetImagePath() + "project.png"), QIcon::Selected);
icon.addPixmap(QPixmap(GetImagePath() + "project.png"), QIcon::Normal);
item->setIcon(0, icon);
// 这是一个根节点
ui->treeWidget->addTopLevelItem(item);
for (int i = 0; i < jarr.count(); i++)
{
if (!jarr[i].isObject())
continue;
QJsonObject obj = jarr[i].toObject();
QTreeWidgetItem *itemIndex = new QTreeWidgetItem();
itemIndex->setText(0, obj["projectName"].toString());
itemIndex->setData(0, Qt::UserRole, "project"); // 存储额外数据如ID
itemIndex->setData(0, Qt::UserRole+1, obj["projectId"].toString()); // 存储额外数据如ID
//
QIcon icon_wellfolder;
icon_wellfolder.addPixmap(QPixmap(GetImagePath() + "closeproject.png"), QIcon::Selected);
icon_wellfolder.addPixmap(QPixmap(GetImagePath() + "closeproject.png"), QIcon::Normal);
itemIndex->setIcon(0, icon_wellfolder);
item->addChild(itemIndex);//添加一级子节点
}
ui->treeWidget->expandItem(item);
}
if (jObj.value("shareProjects").isArray())
{
QJsonArray jarr = jObj.value("shareProjects").toArray();
QTreeWidgetItem *item = new QTreeWidgetItem();
item->setText(0, "与我共享项目");
item->setData(0, Qt::UserRole, "my_share_root"); // 存储额外数据如ID
//item->setData(0, Qt::UserRole + 1, evaluationInfo.guid); // 存储额外数据如ID
//
QIcon icon;
icon.addPixmap(QPixmap(GetImagePath() + "project.png"), QIcon::Selected);
icon.addPixmap(QPixmap(GetImagePath() + "project.png"), QIcon::Normal);
item->setIcon(0, icon);
// 这是一个根节点
ui->treeWidget->addTopLevelItem(item);
for (int i = 0; i < jarr.count(); i++)
{
if (!jarr[i].isObject())
continue;
QJsonObject obj = jarr[i].toObject();
QTreeWidgetItem *itemIndex = new QTreeWidgetItem();
itemIndex->setText(0, obj["projectName"].toString());
itemIndex->setData(0, Qt::UserRole, "project"); // 存储额外数据如ID
itemIndex->setData(0, Qt::UserRole+1, obj["projectId"].toString()); // 存储额外数据如ID
//
QIcon icon_wellfolder;
icon_wellfolder.addPixmap(QPixmap(GetImagePath() + "closeproject.png"), QIcon::Selected);
icon_wellfolder.addPixmap(QPixmap(GetImagePath() + "closeproject.png"), QIcon::Normal);
itemIndex->setIcon(0, icon_wellfolder);
item->addChild(itemIndex);//添加一级子节点
}
ui->treeWidget->expandItem(item);
}
//展开树图
//ui->treeWidget->expandItem(parent);
//itemIndex->setExpanded(true);
}
void CloudDataDlg::initTreeWells(QJsonObject jObj)
{
ui->btn_back->setVisible(true);
ui->label_pro->setText(jObj["projectName"].toString());
ui->treeWidget->clear();//清理数据
if (jObj.value("wells").isArray())
{
QTreeWidgetItem *item = new QTreeWidgetItem();
item->setText(0, "井组");
item->setData(0, Qt::UserRole, "root"); // 存储额外数据如ID
item->setData(0, Qt::UserRole+1, jObj["projectId"].toString()); // 存储额外数据如ID
//
QIcon icon;
icon.addPixmap(QPixmap(GetImagePath() + "wellfolder.png"), QIcon::Selected);
icon.addPixmap(QPixmap(GetImagePath() + "wellfolder.png"), QIcon::Normal);
item->setIcon(0, icon);
// 这是一个根节点
ui->treeWidget->addTopLevelItem(item);
QJsonArray jarr = jObj.value("wells").toArray();
for (int i = 0; i < jarr.count(); i++)
{
if (!jarr[i].isObject())
continue;
QJsonObject obj = jarr[i].toObject();
// 井
QTreeWidgetItem *itemJing = new QTreeWidgetItem();
itemJing->setText(0, obj["wellName"].toString());
itemJing->setData(0, Qt::UserRole + 1, obj["wellId"].toString()); // 存储额外数据,项目名
//
QIcon icon;
icon.addPixmap(QPixmap(GetImagePath() + "well.png"), QIcon::Selected);
icon.addPixmap(QPixmap(GetImagePath() + "well.png"), QIcon::Normal);
itemJing->setIcon(0, icon);
//
item->addChild(itemJing);//添加一级子节点
QJsonArray staArr = obj["stages"].toArray();
if (staArr.count()<=0)
continue;
QJsonObject staObj = staArr[0].toObject();
// QString staid = staObj["stageId"].toString();
// QString staname = staObj["stageName"].toString();
QJsonArray dataCat = staObj["dataCategories"].toArray();
if (dataCat.count() <= 0)
continue;
QTreeWidgetItem *itemJingCi = new QTreeWidgetItem();
itemJingCi->setText(0, staObj["stageName"].toString());
itemJingCi->setData(0, Qt::UserRole + 1, staObj["stageId"].toString()); // 存储额外数据,项目名
//
QIcon iconci;
iconci.addPixmap(QPixmap(GetImagePath() + "icon/WellRound.png"), QIcon::Selected);
iconci.addPixmap(QPixmap(GetImagePath() + "icon/WellRound.png"), QIcon::Normal);
itemJingCi->setIcon(0, iconci);
itemJing->addChild(itemJingCi);//添加一级子节点
for (int k =0;k < dataCat.count(); k++)
{
QJsonObject catObj = dataCat[k].toObject();
// QString s1 = catObj["categoryId"].toString();
// QString s2 = catObj["categoryName"].toString();
// QString s3 = catObj["dataType"].toString();
bool b = initTreeData(itemJingCi, staObj, catObj, "curve", "icon/AddLog.png", "icon/Log.png");
if (b)
continue;
initTreeData(itemJingCi, staObj, catObj, "array", "icon/tdt.png", "icon/tdt.png");
}
}
ui->treeWidget->expandItem(item);
}
}
bool CloudDataDlg::initTreeData(QTreeWidgetItem* itemJingCi, QJsonObject& jObjCi, QJsonObject catObj,
QString strDataType, QString strIcon1, QString strIcon2)
{
bool bret = false;
if (catObj["dataType"].toString() == strDataType)
{
QJsonArray sitem = catObj["items"].toArray();
// 曲线数量
int nCurveItem = sitem.count();
if (nCurveItem > 0)
{
//曲线
QTreeWidgetItem *itemCurve = new QTreeWidgetItem();
itemCurve->setText(0, "curve" == strDataType? "曲线":"波列数据");
itemCurve->setData(0, Qt::UserRole, strDataType); // 存储额外数据如ID
QIcon iconCurve;
iconCurve.addPixmap(QPixmap(GetImagePath() + strIcon1), QIcon::Selected);
iconCurve.addPixmap(QPixmap(GetImagePath() + strIcon1), QIcon::Normal);
itemCurve->setIcon(0, iconCurve);
itemJingCi->addChild(itemCurve);
for (int m = 0; m < sitem.count(); m++)
{
QJsonObject tmpItem = sitem[m].toObject();
QString sName = "";
QString sTypeObj = "";
if ("curve" == strDataType)
{
sTypeObj = "curveObject";
sName = tmpItem["curveName"].toString();
}
else if ("array" == strDataType)
{
sTypeObj = "waveObject";
sName = tmpItem["arrayName"].toString();
}
QTreeWidgetItem *itemCurveLog = new QTreeWidgetItem();
itemCurveLog->setText(0, sName);
itemCurveLog->setData(0, Qt::UserRole, sTypeObj); // 存储额外数据如ID
itemCurveLog->setData(0, Qt::UserRole + 1, tmpItem["metadataId"].toString()); // 存储额外数据,井次文件路径
//
QIcon iconLog;
iconLog.addPixmap(QPixmap(GetImagePath() + strIcon1), QIcon::Selected);
iconLog.addPixmap(QPixmap(GetImagePath() + strIcon2), QIcon::Normal);
itemCurveLog->setIcon(0, iconLog);
itemCurve->addChild(itemCurveLog);
}
}
bret = true;
}
return bret;
}
void CloudDataDlg::getList()
{
QString sapi = "/core/project/list";
ApiClient::getInstance()->get(sapi,
[this](const QJsonObject& response)
{
this->initTreeProjects(response);
},
[](const QString& error)
{
qDebug() << "Failed to allocate hours:" << error;
// 可以添加错误提示
});
}
void CloudDataDlg::getWells(QString projectId)
{
QString sapi = "/core/project/tree?projectId=" + projectId;
ApiClient::getInstance()->get(sapi,
[this](const QJsonObject& response)
{
this->initTreeWells(response);
},
[](const QString& error)
{
qDebug() << "Failed to allocate hours:" << error;
// 可以添加错误提示
});
}
void CloudDataDlg::on_btn_back_clicked()
{
this->getList();
}
void CloudDataDlg::on_btn_import_clicked()
{
if (!m_projectWidgets)
return;
QString strSlfName = "";
QString strWellName = "";
QString strLeft = m_projectWidgets->getLeftTreeString();
if (strLeft.length() > 0)
{
QStringList list = strLeft.split("#@@#");//QString字符串分割函数
if (list.size() > 3)
{
strSlfName = list[0];
strWellName = list[1];
}
}
else {
QMessageBox::warning(this, "提示", "请先选中导入到的目标井次!");
return;
}
if (strSlfName == "" || strWellName == "")
{
QMessageBox::warning(this, "提示", "请先选中导入到的目标井次!");
return;
}
QVector<QString> vecId;
QMap<QString, QVector<QString>> mapSelect;
foreach(QTreeWidgetItem *pItem, ui->treeWidget->selectedItems())
{
QTreeWidgetItem *parentItem = pItem->parent()->parent(); // 上两层目录是井次
if (parentItem)
{
QString strType = pItem->data(0, Qt::UserRole).toString();
QString strId = pItem->data(0, Qt::UserRole + 1).toString();
QString strName = pItem->text(0);
vecId << strId;
qDebug() << "选择:" << strType << "," << strId << "," << strName;
if (mapSelect.contains(strType))
{
mapSelect[strType].push_back(strId);
}
else
{
QVector<QString> v;
v << strId;
mapSelect.insert(strType, v);
}
}
}
// QVector<float> vecv;
// QString strC = "E:/ALogplus/logplus/Outdata/JPH-307_WTDD.txt";
// QStringList lines;
// QFile file(strC);
// if (file.open(QIODevice::ReadOnly)) {
// QTextStream stream(&file);
// stream.setCodec("UTF-8"); // 设置UTF-8编码
// QString line;
// stream.readLine();
// while (!stream.atEnd()) {
// line = stream.readLine(); // 不包括“\n”的一行文本
// QStringList slist = line.split(" ");
// for (int i = 0; i < slist.size(); i++)
// {
// float f = slist.at(i).toFloat();
// vecv << f;
// }
//
// }
// file.close();
// }
//
// CMemRdWt *logio = new CMemRdWt();
// if (!logio->Open(strSlfName.toStdString().c_str(), CSlfIO::modeReadWrite))
// {
// delete logio;
// QMessageBox::information(NULL, "提示", "SLF文件打开失败请检查", QMessageBox::Yes);
// return;
// }
//
// float fsdep = 500.0f;
// float fedep = 600.0f;
// float fdep = 0.0250000004f;
// int nwaveIdx = logio->OpenWave("WDDW");
// if (nwaveIdx < 0)
// {
// Slf_WAVE Slf_pInfo;
// Slf_pInfo.RepCode = 4;
// Slf_pInfo.CodeLen = 4;
// Slf_pInfo.MinValue = 0;
// Slf_pInfo.MaxValue = 64.2214966;
// Slf_pInfo.StartDepth = fsdep;//pInfo.StartDepth;
// Slf_pInfo.EndDepth = fedep;//pInfo.EndDepth;
// Slf_pInfo.DepLevel = fdep;
// Slf_pInfo.StartTime = 0;
// Slf_pInfo.TimeLevel = 5.0f;
// Slf_pInfo.TimeSamples = 24;
// Slf_pInfo.ArrayNum = 1;
// Slf_pInfo.DefVal = -9999.25;
// strcpy(Slf_pInfo.DepthUnit, "M");
// strupr(Slf_pInfo.DepthUnit);
// strcpy(Slf_pInfo.TimeUnit, "ns");
// strcpy(Slf_pInfo.Name, "WDDW");
// strcpy(Slf_pInfo.AliasName, "WDDW");
// strcpy(Slf_pInfo.Unit, "");
// strcpy(Slf_pInfo.AliasUnit, "");
// nwaveIdx = logio->OpenWave((Slf_WAVE *)&Slf_pInfo);
// }
//
// DWORD sample = (int)((fedep - fsdep) / fdep + 1.5);//0.5);//whp change 2018.10.15 保证读写一致
// logio->WriteWave(nwaveIdx, fsdep, sample, vecv.data());
//
// logio->CloseWave(nwaveIdx);
//float fsdep = 2294.51245f;
//float fedep = 3178.69995f;
//float fdep = 0.031250000f;
//int index1 = logio->OpenCurve("TTSts");
//if (index1 < 0)
//{
// Slf_CURVE myWave;
// strcpy(myWave.Name, "TTSts");
// strcpy(myWave.AliasName, "TTSts");
// strcpy(myWave.DepthUnit, "m");
// myWave.CodeLen = 4;//float
// myWave.RepCode = 4;
// myWave.DefVal = 0;
// myWave.StartDepth = fsdep;
// myWave.EndDepth = fedep;
// myWave.DepLevel = fdep;
// strcpy(myWave.DepthUnit, "m");
// index1 = logio->OpenCurve((Slf_CURVE *)&myWave);
//}
//DWORD sample = (int)((fedep - fsdep) / fdep + 1.5);
//DWORD ncnt = vecv.size();
//if (index1 > 0)
// logio->WriteCurve(index1, fsdep, sample, vecv.data());
//logio->CloseCurve(index1);
delete logio;
int a = 0;
}
void CloudDataDlg::onItemDoubleClicked(QTreeWidgetItem* item, int index)
{
QString strTag = item->data(0, Qt::UserRole).toString();
if ("project" == strTag)
{
QString strProId = item->data(0, Qt::UserRole+1).toString();
this->getWells(strProId);
}
}
void CloudDataDlg::OnSelectLineStyleChanged(int style,int lineWidth)
{
}
void CloudDataDlg::onEnter()
{
ApiClient::getInstance()->login("Test1", "Test123456",
[this](const QJsonObject& response)
{
this->getList();
},
[](const QString& error)
{
qDebug() << "Failed to allocate hours:" << error;
// 可以添加错误提示
});
}
void CloudDataDlg::paintEvent(QPaintEvent *pevt)
{
QDialog::paintEvent(pevt);
}