|
@@ -4,6 +4,7 @@
|
|
|
#include "CMind.h"
|
|
|
#include "dbService/GradeInfoService.h"
|
|
|
#include "dbService/EffectIndexInfoService.h"
|
|
|
+#include "dbService/SchemeInfoService.h"
|
|
|
#include "algorithm/GreyClusterEvaluation.h"
|
|
|
|
|
|
#include "ProjectManager.h"
|
|
@@ -138,9 +139,20 @@ GreyClusteringSampleTable::GreyClusteringSampleTable(CMind *mind, int grayNumber
|
|
|
: QTableView(parent), m_mind(mind), m_nodeDepth(2), m_grayNumber(grayNumber)
|
|
|
{
|
|
|
m_model = new QStandardItemModel();
|
|
|
+ connect(m_model, &QStandardItemModel::itemChanged, this, &GreyClusteringSampleTable::itemChanged);
|
|
|
this->setModel(m_model);
|
|
|
|
|
|
init();
|
|
|
+
|
|
|
+ refreshData();
|
|
|
+}
|
|
|
+
|
|
|
+void GreyClusteringSampleTable::refreshData()
|
|
|
+{
|
|
|
+ loadData();
|
|
|
+
|
|
|
+ loadSchemeData();
|
|
|
+
|
|
|
initClusteringItems();
|
|
|
|
|
|
refreshTableView();
|
|
@@ -148,9 +160,11 @@ GreyClusteringSampleTable::GreyClusteringSampleTable(CMind *mind, int grayNumber
|
|
|
|
|
|
void GreyClusteringSampleTable::refreshTableView()
|
|
|
{
|
|
|
+ m_isFillingData = true;
|
|
|
m_model->clear();
|
|
|
|
|
|
if (m_greyClusterings.size() == 0) {
|
|
|
+ m_isFillingData = false;
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -168,37 +182,41 @@ void GreyClusteringSampleTable::refreshTableView()
|
|
|
|
|
|
|
|
|
{
|
|
|
- auto hHeader = new MultiLevelHeaderView(Qt::Horizontal, 2, colCount, this);
|
|
|
- hHeader->setSectionResizeMode(QHeaderView::Stretch);
|
|
|
+ if (m_tableHeaderInitialized == false) {
|
|
|
+ m_tableHeaderInitialized = true;
|
|
|
|
|
|
- hHeader->setCellSpan(0, 0, 2, m_nodeDepth);
|
|
|
- for (int n = 0; n < 2 + greyNames.size(); ++n) {
|
|
|
- hHeader->setCellSpan(0, m_nodeDepth + n, 2, 1);
|
|
|
- }
|
|
|
- hHeader->setCellSpan(0, m_nodeDepth + 2 + greyNames.size(), 1, 2);
|
|
|
- hHeader->setCellSpan(1, m_nodeDepth + 2 + greyNames.size(), 1, 1);
|
|
|
- hHeader->setCellSpan(1, m_nodeDepth + 2 + greyNames.size() + 1, 1, 1);
|
|
|
-
|
|
|
- hHeader->setCellSpan(0, m_nodeDepth + 4 + greyNames.size(), 1, 2);
|
|
|
- hHeader->setCellSpan(1, m_nodeDepth + 4 + greyNames.size(), 1, 1);
|
|
|
- hHeader->setCellSpan(1, m_nodeDepth + 4 + greyNames.size() + 1, 1, 1);
|
|
|
-
|
|
|
-
|
|
|
- hHeader->setCellText(0, 0, QString("指标"));
|
|
|
- hHeader->setCellText(0, m_nodeDepth, QString("单位"));
|
|
|
- hHeader->setCellText(0, m_nodeDepth + 1, QString("权重"));
|
|
|
- for (int i = 0; i < greyNames.size(); ++i) {
|
|
|
- hHeader->setCellText(0, m_nodeDepth + 2 + i, greyNames.at(i));
|
|
|
+ auto hHeader = new MultiLevelHeaderView(Qt::Horizontal, 2, colCount, this);
|
|
|
+ hHeader->setSectionResizeMode(QHeaderView::Stretch);
|
|
|
+
|
|
|
+ hHeader->setCellSpan(0, 0, 2, m_nodeDepth);
|
|
|
+ for (int n = 0; n < 2 + greyNames.size(); ++n) {
|
|
|
+ hHeader->setCellSpan(0, m_nodeDepth + n, 2, 1);
|
|
|
+ }
|
|
|
+ hHeader->setCellSpan(0, m_nodeDepth + 2 + greyNames.size(), 1, 2);
|
|
|
+ hHeader->setCellSpan(1, m_nodeDepth + 2 + greyNames.size(), 1, 1);
|
|
|
+ hHeader->setCellSpan(1, m_nodeDepth + 2 + greyNames.size() + 1, 1, 1);
|
|
|
+
|
|
|
+ hHeader->setCellSpan(0, m_nodeDepth + 4 + greyNames.size(), 1, 2);
|
|
|
+ hHeader->setCellSpan(1, m_nodeDepth + 4 + greyNames.size(), 1, 1);
|
|
|
+ hHeader->setCellSpan(1, m_nodeDepth + 4 + greyNames.size() + 1, 1, 1);
|
|
|
+
|
|
|
+
|
|
|
+ hHeader->setCellText(0, 0, QString("指标"));
|
|
|
+ hHeader->setCellText(0, m_nodeDepth, QString("单位"));
|
|
|
+ hHeader->setCellText(0, m_nodeDepth + 1, QString("权重"));
|
|
|
+ for (int i = 0; i < greyNames.size(); ++i) {
|
|
|
+ hHeader->setCellText(0, m_nodeDepth + 2 + i, greyNames.at(i));
|
|
|
+ }
|
|
|
+ hHeader->setCellText(0, m_nodeDepth + 2 + greyNames.size(), QString("延拓值"));
|
|
|
+ hHeader->setCellText(0, m_nodeDepth + 4 + greyNames.size(), QString("实现值"));
|
|
|
+
|
|
|
+ hHeader->setCellText(1, m_nodeDepth + 2 + greyNames.size(), "左");
|
|
|
+ hHeader->setCellText(1, m_nodeDepth + 3 + greyNames.size(), "右");
|
|
|
+ hHeader->setCellText(1, m_nodeDepth + 4 + greyNames.size(), "建设前");
|
|
|
+ hHeader->setCellText(1, m_nodeDepth + 5 + greyNames.size(), "建设后");
|
|
|
+
|
|
|
+ this->setHorizontalHeader(hHeader);
|
|
|
}
|
|
|
- hHeader->setCellText(0, m_nodeDepth + 2 + greyNames.size(), QString("延拓值"));
|
|
|
- hHeader->setCellText(0, m_nodeDepth + 4 + greyNames.size(), QString("实现值"));
|
|
|
-
|
|
|
- hHeader->setCellText(1, m_nodeDepth + 2 + greyNames.size(), "左");
|
|
|
- hHeader->setCellText(1, m_nodeDepth + 3 + greyNames.size(), "右");
|
|
|
- hHeader->setCellText(1, m_nodeDepth + 4 + greyNames.size(), "建设前");
|
|
|
- hHeader->setCellText(1, m_nodeDepth + 5 + greyNames.size(), "建设后");
|
|
|
-
|
|
|
- this->setHorizontalHeader(hHeader);
|
|
|
}
|
|
|
|
|
|
m_model->setColumnCount(colCount);
|
|
@@ -238,11 +256,19 @@ void GreyClusteringSampleTable::refreshTableView()
|
|
|
m_model->setItem(item.row, item.col + offset,
|
|
|
new QStandardItem(QString::number(item.value->rightExtension)));
|
|
|
++offset;
|
|
|
- m_model->setItem(item.row, item.col + offset,
|
|
|
- new QStandardItem(QString::number(item.value->oldValue)));
|
|
|
+
|
|
|
+ QStandardItem *oldValue = new QStandardItem;
|
|
|
+ if (m_schemeData.keys().contains("建设前")) {
|
|
|
+ oldValue->setText(m_schemeData["建设前"][item.indexName]);
|
|
|
+ }
|
|
|
+ m_model->setItem(item.row, item.col + offset, oldValue);
|
|
|
++offset;
|
|
|
- m_model->setItem(item.row, item.col + offset,
|
|
|
- new QStandardItem(QString::number(item.value->newValue)));
|
|
|
+
|
|
|
+ QStandardItem *newValue = new QStandardItem;
|
|
|
+ if (m_schemeData.keys().contains("建设后")) {
|
|
|
+ newValue->setText(m_schemeData["建设后"][item.indexName]);
|
|
|
+ }
|
|
|
+ m_model->setItem(item.row, item.col + offset, newValue);
|
|
|
|
|
|
++offset;
|
|
|
|
|
@@ -257,6 +283,39 @@ void GreyClusteringSampleTable::refreshTableView()
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ m_isFillingData = false;
|
|
|
+}
|
|
|
+
|
|
|
+void GreyClusteringSampleTable::itemChanged(QStandardItem *item)
|
|
|
+{
|
|
|
+ if (m_isFillingData) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (horizontalHeader()->model()->rowCount() < 2 || horizontalHeader()->model()->columnCount() <= item->column()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ QModelIndex hIndex = horizontalHeader()->model()->index(1, item->column());
|
|
|
+ QString hTitle = horizontalHeader()->model()->data(hIndex).toString();
|
|
|
+
|
|
|
+ QStringList valueStrList;
|
|
|
+ for (int r = 0; r < m_model->rowCount(); ++r) {
|
|
|
+ QString vTitle = m_model->item(r, 1)->text();
|
|
|
+ QString value = m_model->item(r, item->column())->text();
|
|
|
+ QString valueStr = vTitle + ":" + value;
|
|
|
+ valueStrList.append(valueStr);
|
|
|
+ }
|
|
|
+ QString v = valueStrList.join(";");
|
|
|
+
|
|
|
+ SchemaEval scheme;
|
|
|
+ scheme.engineerId = m_mind->root().projectId;
|
|
|
+ scheme.name = hTitle;
|
|
|
+ scheme.valueStr = v;
|
|
|
+ scheme.type = 2;
|
|
|
+
|
|
|
+ bool ret = SchemeInfoService().addUniqueGCEData(scheme);
|
|
|
+ qDebug() << __FUNCTION__ << __LINE__ << ret << endl;
|
|
|
}
|
|
|
|
|
|
void GreyClusteringSampleTable::compute()
|
|
@@ -325,7 +384,10 @@ void GreyClusteringSampleTable::init()
|
|
|
verticalHeader()->setStyleSheet("QHeaderView::section{background:rgb(244,244,244);color: black;}");
|
|
|
verticalHeader()->setDefaultAlignment(Qt::AlignCenter);
|
|
|
setSelectionMode(QAbstractItemView::SingleSelection);
|
|
|
+}
|
|
|
|
|
|
+void GreyClusteringSampleTable::loadData()
|
|
|
+{
|
|
|
QList<GradeInfo *> gradeInfoList;
|
|
|
QMap<QString, QString> grayLevelMaps;
|
|
|
int projectId = m_mind->root().projectId;
|
|
@@ -370,6 +432,30 @@ void GreyClusteringSampleTable::init()
|
|
|
qDeleteAll(gradeInfoList);
|
|
|
}
|
|
|
|
|
|
+void GreyClusteringSampleTable::loadSchemeData()
|
|
|
+{
|
|
|
+ m_schemeData.clear();
|
|
|
+
|
|
|
+ QList<SchemaEval *> schemeList;
|
|
|
+ bool ret = SchemeInfoService().QuerySchemeInfoByEngineerId(&schemeList, m_mind->root().projectId, 2);
|
|
|
+ if (ret == false) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (SchemaEval *scheme : schemeList) {
|
|
|
+ if (m_schemeData.keys().contains(scheme->name) == false) {
|
|
|
+ m_schemeData[scheme->name] = QMap<QString, QString>();
|
|
|
+ }
|
|
|
+ QStringList valueStrList = scheme->valueStr.split(";");
|
|
|
+ for (QString valueStr : valueStrList) {
|
|
|
+ QStringList keyValue = valueStr.split(":");
|
|
|
+ if (keyValue.size() == 2) {
|
|
|
+ m_schemeData[scheme->name][keyValue.first()] = keyValue.last();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void GreyClusteringSampleTable::initClusteringItems()
|
|
|
{
|
|
|
|