chengxr 1 year ago
parent
commit
9066e208b5

+ 1 - 1
QFD/shemeFlow/FlowGraphNodeWidget.cpp

@@ -126,7 +126,7 @@ bool FlowGraphCommonNodeWidget::isTitleHidden() const
 
 void FlowGraphCommonNodeWidget::initWidget()
 {
-    setFixedWidth(160);
+    setFixedWidth(240);
 
     m_label     = new QLabel();
     m_algCombo  = new QComboBox();

+ 50 - 2
QFD/widgets/AddSchemeWidget.cpp

@@ -5,6 +5,8 @@
 
 #include <QBoxLayout>
 #include <QLabel>
+#include <QDebug>
+#include <QFileDialog>
 
 AddSchemeWidget::AddSchemeWidget(QWidget *parent) : QDialog(parent)
 {
@@ -26,7 +28,7 @@ void AddSchemeWidget::initWindow()
     setModal(true);
     setWindowFlags(Qt::Dialog);
     setWindowFlag(Qt::WindowContextHelpButtonHint, false);
-    resize(350, 250);
+    resize(370, 350);
 }
 
 void AddSchemeWidget::initialize()
@@ -42,8 +44,14 @@ void AddSchemeWidget::initialize()
     m_schemeEdit = new TextEdit(this);
     m_schemeEdit->setFixedWidth(250);
     m_schemeEdit->setFixedHeight(150);
+    m_picButton = new PushButton("方案图片", this);
+    m_picLine   = new LineEdit(this);
+    m_picLine->setFixedWidth(250);
+    m_picLine->setEnabled(false);
+
     m_hBoxLayout   = new QHBoxLayout();
     m_confirButton = new PushButton("生成", this);
+    m_confirButton->setEnabled(false);
 }
 
 void AddSchemeWidget::initLayout()
@@ -55,6 +63,8 @@ void AddSchemeWidget::initLayout()
     m_gridLayout->addWidget(m_nameEdit, 0, 1, 1, 2, Qt::AlignLeft);
     m_gridLayout->addWidget(m_schemeLabel, 1, 0, 1, 1, Qt::AlignRight | Qt::AlignTop);
     m_gridLayout->addWidget(m_schemeEdit, 1, 1, 1, 2, Qt::AlignLeft);
+    m_gridLayout->addWidget(m_picButton, 2, 0, 1, 1, Qt::AlignRight);
+    m_gridLayout->addWidget(m_picLine, 2, 1, 1, 2, Qt::AlignLeft);
 
     m_vBoxLayout->addSpacing(20);
     m_vBoxLayout->addStretch();
@@ -64,4 +74,42 @@ void AddSchemeWidget::initLayout()
     m_hBoxLayout->addWidget(m_confirButton);
 }
 
-void AddSchemeWidget::connectSignalsAndSlots() { }
+void AddSchemeWidget::connectSignalsAndSlots()
+{
+    connect(m_picButton, &QPushButton::clicked, this, &AddSchemeWidget::slotSelectPic);
+    connect(m_nameEdit, &LineEdit::textChanged, this, &AddSchemeWidget::slotContentChanged);
+    connect(m_schemeEdit, &TextEdit::textChanged, this, &AddSchemeWidget::slotContentChanged);
+    connect(m_picLine, &LineEdit::textChanged, this, &AddSchemeWidget::slotContentChanged);
+    connect(m_confirButton, &PushButton::clicked, this, &AddSchemeWidget::slotConfirmed);
+}
+
+void AddSchemeWidget::slotSelectPic()
+{
+    qDebug() << __FUNCTION__ << __LINE__ << endl;
+    QFileDialog::Options options;
+    options |= QFileDialog::DontUseNativeDialog;
+    QString selectedFilter;
+    QString fileName = QFileDialog::getOpenFileName(this, "选择图片", "", "图片(*.jpg *.png *jpeg *bmp)",
+                                                    &selectedFilter, options);
+
+    bool fileValid = true;
+    if (fileName.isEmpty() || fileName.size() <= 0) {
+        fileValid = false;
+        return;
+    }
+
+    m_picLine->setText(fileName);
+}
+
+void AddSchemeWidget::slotContentChanged()
+{
+    bool valid = m_nameEdit->text().length() > 0 && m_schemeEdit->toPlainText().length() > 0
+            && m_picLine->text().length() > 0;
+    m_confirButton->setEnabled(valid);
+}
+
+void AddSchemeWidget::slotConfirmed()
+{
+    emit sigSchemeInfoConfirmed(m_nameEdit->text(), m_schemeEdit->toPlainText(), m_picLine->text());
+    close();
+}

+ 10 - 0
QFD/widgets/AddSchemeWidget.h

@@ -12,6 +12,7 @@ class QGridLayout;
 class QHBoxLayout;
 
 class QLabel;
+class LineEdit;
 
 class AddSchemeWidget : public QDialog
 {
@@ -27,8 +28,15 @@ private:
     void initLayout();
     void connectSignalsAndSlots();
 
+private slots:
+    void slotSelectPic();
+    void slotContentChanged();
+    void slotConfirmed();
+
 signals:
 
+    void sigSchemeInfoConfirmed(const QString name, const QString remark, const QString path);
+
 private:
     QVBoxLayout *m_vBoxLayout = nullptr;
 
@@ -37,6 +45,8 @@ private:
     LineEdit *m_nameEdit      = nullptr;
     QLabel *m_schemeLabel     = nullptr;
     TextEdit *m_schemeEdit    = nullptr;
+    PushButton *m_picButton   = nullptr;
+    LineEdit *m_picLine       = nullptr;
 
     QHBoxLayout *m_hBoxLayout  = nullptr;
     PushButton *m_confirButton = nullptr;

+ 4 - 0
QFD/widgets/ConfigMeasureDataWidget.cpp

@@ -1,5 +1,9 @@
 #include "ConfigMeasureDataWidget.h"
 
+#include "ProjectManager.h"
+
+#include "dbService/SchemeInfoService.h"
+
 #include <Widgets/Button.h>
 #include <Common/Icon.h>
 

+ 2 - 0
QFD/widgets/ConfigMeasureDataWidget.h

@@ -5,6 +5,8 @@
 
 #include "SchemePlanManager.h"
 
+class SchemaEval;
+
 class QPushButton;
 
 class QVBoxLayout;

+ 52 - 0
QFD/widgets/ConfigSchemeDataWidget.cpp

@@ -1,11 +1,16 @@
 #include "ConfigSchemeDataWidget.h"
 
+#include "ProjectManager.h"
+
+#include <dbService/SchemeInfoService.h>
+
 #include <Widgets/Button.h>
 #include <Common/Icon.h>
 
 #include <QLabel>
 #include <QListWidget>
 #include <QBoxLayout>
+#include <QImageReader>
 
 #include <QDebug>
 
@@ -19,6 +24,28 @@ ConfigSchemeDataWidget::ConfigSchemeDataWidget(QWidget *parent) : QWidget(parent
 void ConfigSchemeDataWidget::setProcess(SchemePlanManager::SchemeProcessInfo process)
 {
     m_process = process;
+    loadData();
+}
+
+void ConfigSchemeDataWidget::loadData()
+{
+    m_schemeList.clear();
+    m_pic->clear();
+    if (m_process.type == SchemePlanManager::ImportEvalData) {
+        if (m_process.indexType == ProjectManager::EfficiencyIndex) {
+            SchemeInfoService().QuerySchemeInfoByEngineerId(&m_schemeList, m_process.projectId, 1);
+        }
+
+        if (m_process.indexType == ProjectManager::OptimalIndex) {
+            SchemeInfoService().QuerySchemeInfoByEngineerId(&m_schemeList, m_process.projectId, 0);
+        }
+    }
+    refreshList();
+}
+
+QList<SchemaEval *> ConfigSchemeDataWidget::schemeList() const
+{
+    return m_schemeList;
 }
 
 void ConfigSchemeDataWidget::initWidget()
@@ -35,6 +62,8 @@ void ConfigSchemeDataWidget::initWidget()
     m_addButton = new QPushButton(NEWFLICON(FluentIcon, ADD)->icon(), "", this);
     m_addButton->setToolTip("添加方案");
     m_listWidget = new QListWidget(this);
+    m_pic        = new QLabel(this);
+    m_pic->setFixedHeight(160);
 
     setStyleSheet("#titleLabel {color:#333333; font-size:16px}"
                   "#listTitleLabel {color:#333333; font-size:12px}"
@@ -58,6 +87,7 @@ void ConfigSchemeDataWidget::initLayout()
     m_layout->addSpacing(10);
     m_layout->addWidget(m_tipsLabel);
     m_layout->addWidget(m_listWidget);
+    m_layout->addWidget(m_pic);
 
     m_headerLayout->addWidget(m_listTitleLabel);
     m_headerLayout->addStretch();
@@ -67,6 +97,17 @@ void ConfigSchemeDataWidget::initLayout()
 void ConfigSchemeDataWidget::connectSignalsAndSlots()
 {
     connect(m_addButton, &PushButton::clicked, this, &ConfigSchemeDataWidget::slotAddDataClicked);
+    connect(m_listWidget, &QListWidget::currentRowChanged, this, &ConfigSchemeDataWidget::slotSelectedChanged);
+}
+
+void ConfigSchemeDataWidget::refreshList()
+{
+    m_listWidget->clear();
+
+    for (SchemaEval *eval : m_schemeList) {
+        QListWidgetItem *item = new QListWidgetItem(eval->name);
+        m_listWidget->addItem(item);
+    }
 }
 
 void ConfigSchemeDataWidget::slotAddDataClicked()
@@ -74,3 +115,14 @@ void ConfigSchemeDataWidget::slotAddDataClicked()
     qDebug() << __FUNCTION__ << __LINE__ << endl;
     emit sigAddScheme();
 }
+
+void ConfigSchemeDataWidget::slotSelectedChanged(int row)
+{
+    if (m_schemeList.size() <= row || row < 0) {
+        return;
+    }
+
+    SchemaEval *scheme = m_schemeList[row];
+    QImage image       = QImage(scheme->filePath);
+    m_pic->setPixmap(QPixmap::fromImage(image));
+}

+ 13 - 0
QFD/widgets/ConfigSchemeDataWidget.h

@@ -5,6 +5,8 @@
 
 #include "SchemePlanManager.h"
 
+class SchemaEval;
+
 class QPushButton;
 
 class QVBoxLayout;
@@ -19,6 +21,10 @@ public:
     explicit ConfigSchemeDataWidget(QWidget *parent = nullptr);
     void setProcess(SchemePlanManager::SchemeProcessInfo process);
 
+    void loadData();
+
+    QList<SchemaEval *> schemeList() const;
+
 signals:
 
     void sigAddScheme();
@@ -28,12 +34,17 @@ private:
     void initLayout();
     void connectSignalsAndSlots();
 
+    void refreshList();
+
 private slots:
     void slotAddDataClicked();
+    void slotSelectedChanged(int row);
 
 private:
     SchemePlanManager::SchemeProcessInfo m_process;
 
+    QList<SchemaEval *> m_schemeList;
+
     QVBoxLayout *m_layout       = nullptr;
     QHBoxLayout *m_headerLayout = nullptr;
 
@@ -44,6 +55,8 @@ private:
     QPushButton *m_addButton = nullptr;
 
     QListWidget *m_listWidget = nullptr;
+
+    QLabel *m_pic = nullptr;
 };
 
 #endif  // CONFIGSCHEMEDATAWIDGET_H

+ 62 - 11
QFD/widgets/DataCollectionWidget.cpp

@@ -4,6 +4,7 @@
 #include "ConfigExpertDataWidget.h"
 #include "ConfigMeasureDataWidget.h"
 #include "ConfigSchemeDataWidget.h"
+#include "AddSchemeWidget.h"
 
 #include "EvalDataManager.h"
 #include "algorithm/HierarchicalAnalysis.h"
@@ -18,6 +19,7 @@
 #include "dbService/CNodeDataService.h"
 #include "dbService/NodeMatrixService.h"
 #include "dbService/UserService.h"
+#include "dbService/SchemeInfoService.h"
 
 #include <xlsxdocument.h>
 
@@ -60,6 +62,9 @@ DataCollectionWidget::DataCollectionWidget(ProjectInfo *proj, QWidget *parent) :
     m_topLayout->addWidget(m_comboBox);
     m_topLayout->addSpacing(10);
     m_topLayout->addWidget(m_calcBtn);
+
+    m_addSchemeWidget = new AddSchemeWidget(this);
+
     connect(m_calcBtn, &PushButton::clicked, this, &DataCollectionWidget::slotCalc);
 
     connect(m_tab, &QTabWidget::currentChanged, this, &DataCollectionWidget::slotTabCurrentChanged);
@@ -68,6 +73,8 @@ DataCollectionWidget::DataCollectionWidget(ProjectInfo *proj, QWidget *parent) :
             &DataCollectionWidget::slotConfigSelected);
     connect(m_configScheme, &ConfigSchemeDataWidget::sigAddScheme, this, &DataCollectionWidget::slotAddScheme);
     connect(m_configMeasure, &ConfigMeasureDataWidget::sigAddData, this, &DataCollectionWidget::slotAddData);
+    connect(m_addSchemeWidget, &AddSchemeWidget::sigSchemeInfoConfirmed, this,
+            &DataCollectionWidget::slotAddSchemeInfo);
 }
 
 void DataCollectionWidget::setType(int type)
@@ -157,6 +164,11 @@ void DataCollectionWidget::setupTabWidget()
     }
 }
 
+void DataCollectionWidget::refreshSchemeData()
+{
+    m_configScheme->loadData();
+}
+
 void DataCollectionWidget::slotTabCurrentChanged(int index)
 {
     DataTableWidget *table = dynamic_cast<DataTableWidget *>(m_tab->widget(index));
@@ -167,17 +179,18 @@ void DataCollectionWidget::slotTabCurrentChanged(int index)
         }
         m_configExpert->setVisible(expert);
 
-        bool meaure = (table->process().dSource == SchemePlanManager::FromMeasurement);
-        if (meaure) {
-            m_configMeasure->setProcess(table->process());
-        }
-        m_configMeasure->setVisible(meaure);
-
-        bool scheme = (table->process().dSource == SchemePlanManager::FromScheme);
+        bool scheme = (table->process().indexType != ProjectManager::TechIndex
+                       && table->process().type == SchemePlanManager::ImportEvalData);
         if (scheme) {
             m_configScheme->setProcess(table->process());
         }
         m_configScheme->setVisible(scheme);
+
+        bool meaure = (table->process().dSource == SchemePlanManager::FromMeasurement) && !scheme;
+        if (meaure) {
+            m_configMeasure->setProcess(table->process());
+        }
+        m_configMeasure->setVisible(meaure);
     }
 
     if (table == nullptr) {
@@ -196,6 +209,17 @@ void DataCollectionWidget::slotCalc()
     if (gcSample != nullptr) {
         gcSample->compute();
     }
+
+    QTableView *tableView = (QTableView *)table->tabWidget()->currentWidget();
+
+    DataTableItemModel *model = (DataTableItemModel *)tableView->model();
+
+    qDebug() << __FUNCTION__ << __LINE__ << tableView << model << endl;
+
+    GreyClusteringConfigWidget *gc = dynamic_cast<GreyClusteringConfigWidget *>(m_tab->currentWidget());
+    if (gc != nullptr) {
+        qDebug() << __FUNCTION__ << __LINE__ << "gc" << endl;
+    }
 }
 
 void DataCollectionWidget::slotImportData(UserConfig *config)
@@ -344,9 +368,7 @@ void DataCollectionWidget::slotConfigSelected(UserConfig *config)
     QList<NodeMatrixInfo *> data;
     NodeMatrixService().QueryNodeMatrixListByExpertIdAndEngineerId(&data, config->userId, config->engineerId,
                                                                    indexName);
-
-    qDebug() << __FUNCTION__ << __LINE__ << config->engineerId << config->userId << indexName << data.size() << endl;
-    table->setData(data);
+    table->setNodeMatrixData(data);
 }
 
 void DataCollectionWidget::slotAddScheme()
@@ -354,7 +376,36 @@ void DataCollectionWidget::slotAddScheme()
     DataTableWidget *table = (DataTableWidget *)m_tab->currentWidget();
     QString indexName      = ProjectManager::nameOfIndexType((ProjectManager::IndexType)table->process().indexType);
     QString processName    = SchemePlanManager::processName(table->process());
-    qDebug() << __FUNCTION__ << __LINE__ << indexName << processName << endl;
+
+    // 判断是否效能评估数据导入
+    bool isScheme = table->process().indexType == ProjectManager::EfficiencyIndex
+            || table->process().indexType == ProjectManager::OptimalIndex;
+
+    if (isScheme) {
+        m_addSchemeWidget->show();
+    }
+}
+
+void DataCollectionWidget::slotAddSchemeInfo(const QString name, const QString remark, const QString path)
+{
+    DataTableWidget *table = (DataTableWidget *)m_tab->currentWidget();
+
+    int type = 0;
+    if (table->process().indexType == ProjectManager::EfficiencyIndex) {
+        type = 1;
+    }
+
+    SchemaEval *scheme = new SchemaEval();
+    scheme->engineerId = m_proj->id;
+    scheme->name       = name;
+    scheme->remark     = remark;
+    scheme->filePath   = path;
+    scheme->type       = type;
+    bool ret           = SchemeInfoService().AddSchemeInfoList({ scheme });
+    if (ret) {
+        refreshSchemeData();
+        table->addScheme(scheme);
+    }
 }
 
 void DataCollectionWidget::slotAddData()

+ 7 - 0
QFD/widgets/DataCollectionWidget.h

@@ -6,6 +6,7 @@
 class ConfigExpertDataWidget;
 class ConfigMeasureDataWidget;
 class ConfigSchemeDataWidget;
+class AddSchemeWidget;
 
 class UserConfig;
 class QFUser;
@@ -31,6 +32,8 @@ public:
 private:
     void setupTabWidget();
 
+    void refreshSchemeData();
+
 private slots:
     void slotTabCurrentChanged(int index);
     void slotCalc();
@@ -41,6 +44,8 @@ private slots:
 
     void slotAddScheme();
 
+    void slotAddSchemeInfo(const QString name, const QString remark, const QString path);
+
     void slotAddData();
 
 signals:
@@ -52,6 +57,8 @@ private:
 
     QComboBox *m_comboBox = nullptr;
     PushButton *m_calcBtn = nullptr;
+
+    AddSchemeWidget *m_addSchemeWidget = nullptr;
 };
 
 #endif  // DATACOLLECTIONWIDGET_H

+ 60 - 5
QFD/widgets/DataTableWidget.cpp

@@ -6,6 +6,7 @@
 #include <dbService/CNodeDataService.h>
 #include <dbService/ClassSet.h>
 #include <dbService/NodeMatrixService.h>
+#include <dbService/SchemeInfoService.h>
 
 #include <Widgets/Button.h>
 #include <QBoxLayout>
@@ -103,19 +104,46 @@ void DataTableWidget::setupModels()
             int hIndex          = -1;
             QStandardItem *item = new QStandardItem("指标量纲");
             model->setHorizontalHeaderItem(++hIndex, item);
+            vHeaders = m_mind1->leaves();
+
+            for (int i = 0; i < vHeaders.count(); i++) {
+                CNodeData node      = vHeaders[i];
+                QStandardItem *item = new QStandardItem();
+                item->setEditable(false);
+                item->setText(node.dimension);
+                model->setItem(i, hIndex, item);
+            }
 
             if (m_process.indexType == ProjectManager::OptimalIndex) {
                 QStandardItem *item = new QStandardItem("指标类型");
                 model->setHorizontalHeaderItem(++hIndex, item);
             }
 
+            updateModel(model, hHeaders, vHeaders, hIndex);
+
+            hIndex += hHeaders.size();
+
             if (m_process.indexType == ProjectManager::EfficiencyIndex) {
-                qDebug() << __FUNCTION__ << __LINE__ << "===" << endl;
+                QList<SchemaEval *> schemeList;
+                bool ret = SchemeInfoService().QuerySchemeInfoByEngineerId(&schemeList, m_process.projectId, 1);
+                if (ret) {
+                    for (SchemaEval *scheme : schemeList) {
+                        QStandardItem *item = new QStandardItem(scheme->name);
+                        model->setHorizontalHeaderItem(++hIndex, item);
+                    }
+                }
+            }
+            if (m_process.indexType == ProjectManager::OptimalIndex) {
+                QList<SchemaEval *> schemeList;
+                bool ret = SchemeInfoService().QuerySchemeInfoByEngineerId(&schemeList, m_process.projectId, 0);
+                if (ret) {
+                    for (SchemaEval *scheme : schemeList) {
+                        QStandardItem *item = new QStandardItem(scheme->name);
+                        model->setHorizontalHeaderItem(++hIndex, item);
+                    }
+                }
             }
 
-            vHeaders = m_mind1->leaves();
-
-            updateModel(model, hHeaders, vHeaders, hIndex);
             modelList.append(model);
             m_models[i] = modelList;
             break;
@@ -166,6 +194,11 @@ void DataTableWidget::setupTabWidget()
         t->setSelectionMode(QAbstractItemView::SingleSelection);
         t->setModel(model);
         m_dataTab->addTab(t, model->property(kDataTabName).toString());
+
+        if (m_process.type == SchemePlanManager::ImportEvalData
+            && m_process.indexType == ProjectManager::OptimalIndex) {
+            t->setItemDelegateForColumn(1, m_comboDelegate);
+        }
     }
 }
 
@@ -339,6 +372,28 @@ void DataTableWidget::updateCurrentTable()
     }
 }
 
+void DataTableWidget::setSchemeList(const QList<SchemaEval *> &list) { }
+
+void DataTableWidget::addScheme(SchemaEval *scheme)
+{
+    if (m_process.type == SchemePlanManager::ImportEvalData && m_process.indexType == ProjectManager::EfficiencyIndex) {
+
+    }
+
+    if (m_models.count() <= 0 || m_models[1].count() <= 0) {
+        return;
+    }
+
+    DataTableItemModel *model = m_models[1].first();
+    QStandardItem *item       = new QStandardItem(scheme->name);
+    model->setHorizontalHeaderItem(model->columnCount(), item);
+}
+
+QTabWidget *DataTableWidget::tabWidget() const
+{
+    return m_dataTab;
+}
+
 CMind *DataTableWidget::mind1() const
 {
     return m_mind1;
@@ -349,7 +404,7 @@ CMind *DataTableWidget::mind2() const
     return m_mind2;
 }
 
-void DataTableWidget::setData(QList<NodeMatrixInfo *> data)
+void DataTableWidget::setNodeMatrixData(QList<NodeMatrixInfo *> data)
 {
     m_data = data;
     // 加载来自专家的权重分析数据

+ 7 - 1
QFD/widgets/DataTableWidget.h

@@ -61,10 +61,16 @@ public:
 
     void updateCurrentTable();
 
+    void setSchemeList(const QList<SchemaEval *> &list);
+
+    void addScheme(SchemaEval *scheme);
+
+    QTabWidget *tabWidget() const;
+
     CMind *mind1() const;
     CMind *mind2() const;
 
-    void setData(QList<NodeMatrixInfo *> data);
+    void setNodeMatrixData(QList<NodeMatrixInfo *> data);
 
 private:
     void updateModel(DataTableItemModel *model, QList<CNodeData> &hHeaders, QList<CNodeData> &vHeaders, int hStart = 0,