Browse Source

更新实测数据

chengxr 1 year ago
parent
commit
0442d20e7d

+ 27 - 1
QFD/dbService/NodeMatrixService.cpp

@@ -571,7 +571,7 @@ bool NodeMatrixService::QueryMeaureDataByProjectAndIndex(QList<NodeMatrixInfo *>
     QSqlQuery query(db);
     bool ret          = false;
     QString selectSql = QString("select id,expert_name, engineer_id, node, abscissa, ordinate, "
-                                "node_value, expert_id,mind_id,write_date,mark,str_uuid from "
+                                "node_value, expert_id,mind_id,write_date,mark,str_uuid,table_msg from "
                                 "t_node_matrix_info where engineer_id ='%2' and table_msg ='%3'")
                                 .arg(QString::number(projId))
                                 .arg(index);
@@ -592,6 +592,7 @@ bool NodeMatrixService::QueryMeaureDataByProjectAndIndex(QList<NodeMatrixInfo *>
                 nodeMatrixInfo->writeDate      = query.value(9).toDateTime();
                 nodeMatrixInfo->mark           = query.value(10).toString();
                 nodeMatrixInfo->strUuid        = query.value(11).toString();
+                nodeMatrixInfo->tableMsg       = query.value(12).toString();
                 dataList->append(nodeMatrixInfo);
             }
         }
@@ -601,3 +602,28 @@ bool NodeMatrixService::QueryMeaureDataByProjectAndIndex(QList<NodeMatrixInfo *>
     }
     return ret;
 }
+
+bool NodeMatrixService::UpdateMeasureData(const NodeMatrixInfo &info)
+{
+    bool ret = false;
+    try {
+        Transaction t(SqlDBHelper::getDatabase());
+        if (info.ordinate.length() > 0) {
+            t.update("t_node_matrix_info")
+                    .set("node_value", info.nodeValue)
+                    .where("engineer_id = ? and table_msg = ? and str_uuid = ? and abscissa = ? and "
+                           "ordinate = ?",
+                           info.engineerId, info.tableMsg, info.strUuid, info.abscissa, info.ordinate);
+        } else {
+            t.update("t_node_matrix_info")
+                    .set("node_value", info.nodeValue)
+                    .where("engineer_id = ? and table_msg = ? and str_uuid = ? and abscissa = ?", info.engineerId,
+                           info.tableMsg, info.strUuid, info.abscissa);
+        }
+        t.commit();
+        ret = true;
+    } catch (const DBException &ex) {
+        qDebug() << ex.lastError.text();
+    }
+    return ret;
+}

+ 3 - 0
QFD/dbService/NodeMatrixService.h

@@ -60,6 +60,9 @@ public:
 
     /*根据指标体系类型和工程ID查询实测数据信息*/
     bool QueryMeaureDataByProjectAndIndex(QList<NodeMatrixInfo *> *dataList, QString index, int projId);
+
+    /*修改节点值*/
+    bool UpdateMeasureData(const NodeMatrixInfo &info);
 };
 
 #endif  // NODEMATRIXSERVICE_H

+ 16 - 0
QFD/widgets/ConfigMeasureDataWidget.cpp

@@ -83,6 +83,22 @@ QList<NodeMatrixInfo *> ConfigMeasureDataWidget::selectedData()
     return m_nodeData[m_uuidList[row]];
 }
 
+void ConfigMeasureDataWidget::updateNodeValue(NodeMatrixInfo *node)
+{
+    for (auto key : m_nodeData.keys()) {
+        for (int i = 0; i < m_nodeData[key].size(); i++) {
+            NodeMatrixInfo *exist = m_nodeData[key][i];
+            if (exist->strUuid == node->strUuid && exist->abscissa == node->abscissa) {
+                if (exist->ordinate.length() > 0 && exist->ordinate != node->ordinate) {
+                    continue;
+                }
+                m_nodeData[key].replace(i, node);
+                return;
+            }
+        }
+    }
+}
+
 void ConfigMeasureDataWidget::initWidget()
 {
     m_titleLabel = new QLabel("添加实测数据", this);

+ 2 - 0
QFD/widgets/ConfigMeasureDataWidget.h

@@ -32,6 +32,8 @@ public:
 
     QList<NodeMatrixInfo *> selectedData();
 
+    void updateNodeValue(NodeMatrixInfo *node);
+
 signals:
     void sigAddData();
     void sigCurrentRowChanged();

+ 11 - 2
QFD/widgets/DataCollectionWidget.cpp

@@ -74,7 +74,7 @@ DataCollectionWidget::DataCollectionWidget(ProjectInfo *proj, QWidget *parent) :
     connect(m_configScheme, &ConfigSchemeDataWidget::sigAddScheme, this, &DataCollectionWidget::slotAddScheme);
     connect(m_configMeasure, &ConfigMeasureDataWidget::sigAddData, this, &DataCollectionWidget::slotAddMeasureData);
     connect(m_configMeasure, &ConfigMeasureDataWidget::sigCurrentRowChanged, this,
-            &DataCollectionWidget::slotCurrentMeasureDataChanged);
+            &DataCollectionWidget::slotCurrentMeasureDataSelected);
     connect(m_addSchemeWidget, &CreateSchemeWidget::sigSchemeInfoConfirmed, this,
             &DataCollectionWidget::slotAddSchemeInfo);
 }
@@ -140,6 +140,8 @@ void DataCollectionWidget::setupTabWidget()
                 table->mind1()->setNodeList(nodeListMap[i]);
                 table->setupModels();
                 m_tab->addTab(table, indexName + " - " + "收集效能评估数据");
+                connect(table, &DataTableWidget::sigMeasureDataEdited, this,
+                        &DataCollectionWidget::slotMeasureDataEdited);
             }
 
             // 导入效能评估的权重分析数据
@@ -161,6 +163,8 @@ void DataCollectionWidget::setupTabWidget()
 
                 QString processName = SchemePlanManager::processName(process);
                 m_tab->addTab(table, indexName + " - " + processName);
+                connect(table, &DataTableWidget::sigMeasureDataEdited, this,
+                        &DataCollectionWidget::slotMeasureDataEdited);
             }
         }
     }
@@ -521,8 +525,13 @@ void DataCollectionWidget::slotAddMeasureData()
     isBusing = false;
 }
 
-void DataCollectionWidget::slotCurrentMeasureDataChanged()
+void DataCollectionWidget::slotCurrentMeasureDataSelected()
 {
     DataTableWidget *table = (DataTableWidget *)m_tab->currentWidget();
     table->setNodeMatrixData(m_configMeasure->selectedData(), false);
 }
+
+void DataCollectionWidget::slotMeasureDataEdited(NodeMatrixInfo *info)
+{
+    m_configMeasure->updateNodeValue(info);
+}

+ 5 - 1
QFD/widgets/DataCollectionWidget.h

@@ -8,6 +8,8 @@ class ConfigMeasureDataWidget;
 class ConfigSchemeDataWidget;
 class CreateSchemeWidget;
 
+class NodeMatrixInfo;
+
 class UserConfig;
 class QFUser;
 
@@ -48,7 +50,9 @@ private slots:
 
     void slotAddMeasureData();
 
-    void slotCurrentMeasureDataChanged();
+    void slotCurrentMeasureDataSelected();
+
+    void slotMeasureDataEdited(NodeMatrixInfo *info);
 
 signals:
 

+ 56 - 1
QFD/widgets/DataTableWidget.cpp

@@ -23,6 +23,7 @@
 #include <QDebug>
 
 static const char *kDataTabName = "tabName";
+static const char *kUUIDName    = "uuidName";
 
 DataTableItemModel::DataTableItemModel(QObject *parent) : QStandardItemModel(parent) { }
 
@@ -190,6 +191,12 @@ void DataTableWidget::setupModels()
         m_models[i] = modelList;
     }
 
+    for (auto modelList : m_models.values()) {
+        for (auto model : modelList) {
+            connect(model, &QStandardItemModel::itemChanged, this, &DataTableWidget::itemChanged);
+        }
+    }
+
     setCurrentPage(1);
 
     addTestMesureData();
@@ -423,7 +430,15 @@ CMind *DataTableWidget::mind2() const
 
 void DataTableWidget::setNodeMatrixData(QList<NodeMatrixInfo *> data, bool isExpertData)
 {
-    m_data = data;
+    if (data.size() <= 0) {
+        return;
+    }
+
+    isFillingData = true;
+
+    m_data    = data;
+    m_uuidStr = data.first()->strUuid;
+
     // 加载来自专家的权重分析数据
     if (m_process.type == SchemePlanManager::ImportWeightData) {
         if (m_process.dSource == SchemePlanManager::FromExpert) {
@@ -483,6 +498,8 @@ void DataTableWidget::setNodeMatrixData(QList<NodeMatrixInfo *> data, bool isExp
             }
         }
     }
+
+    isFillingData = false;
 }
 
 void DataTableWidget::addTestMesureData()
@@ -545,3 +562,41 @@ void DataTableWidget::slotTabCurrentChanged(int c)
     Q_UNUSED(c)
     updateCurrentTable();
 }
+
+void DataTableWidget::itemChanged(QStandardItem *item)
+{
+    if (isFillingData == true) {
+        return;
+    }
+
+    bool weightData = m_process.type == SchemePlanManager::ImportWeightData
+            && m_process.dSource == SchemePlanManager::FromMeasurement;
+    bool evalData = m_process.type == SchemePlanManager::ImportEvalData
+            && m_process.dSource == SchemePlanManager::FromMeasurement
+            && m_process.indexType == ProjectManager::TechIndex;
+
+    if (!weightData && !evalData) {
+        return;
+    }
+
+    QString indexName = ProjectManager::nameOfIndexType((ProjectManager::IndexType)m_process.indexType);
+    NodeMatrixInfo info;
+    info.nodeValue  = item->text();
+    info.engineerId = m_process.projectId;
+    info.tableMsg   = indexName;
+    info.strUuid    = m_uuidStr;
+
+    QStandardItem *hHeader = item->model()->horizontalHeaderItem(item->column());
+    info.abscissa          = hHeader->text();
+
+    if (evalData) {
+        QStandardItem *vHeader = item->model()->verticalHeaderItem(item->row());
+        info.ordinate          = vHeader->text();
+    }
+
+    bool ret = NodeMatrixService().UpdateMeasureData(info);
+    qDebug() << __FUNCTION__ << __LINE__ << ret << endl;
+    if (ret) {
+        emit sigMeasureDataEdited(&info);
+    }
+}

+ 7 - 0
QFD/widgets/DataTableWidget.h

@@ -74,6 +74,9 @@ public:
 
     void addTestMesureData();
 
+signals:
+    void sigMeasureDataEdited(NodeMatrixInfo *info);
+
 private:
     void updateModel(DataTableItemModel *model, QList<CNodeData> &hHeaders, QList<CNodeData> &vHeaders, int hStart = 0,
                      int vStart = 0);
@@ -82,6 +85,7 @@ public slots:
     void slotPrevious();
     void slotNext();
     void slotTabCurrentChanged(int c);
+    void itemChanged(QStandardItem *item);
 
 private:
     SchemePlanManager::SchemeProcessInfo m_process;
@@ -107,6 +111,9 @@ private:
     DataTableComboDelegate *m_comboDelegate = nullptr;
 
     QList<NodeMatrixInfo *> m_data;
+    QString m_uuidStr;
+
+    bool isFillingData = false;
 };
 
 #endif  // DATATABLEWIDGET_H