Browse Source

添加实测数据

chengxr 1 year ago
parent
commit
22fbb82d3f

+ 1 - 1
QFD/dbService/ClassSet.h

@@ -48,7 +48,7 @@ public:
     QString expertName;   // 专家名称
     QString expertId;     // 专家id
     int engineerId;       // 工程id
-    int mindId;           // 脑图名称, 区分数据来源
+    int mindId;           // 脑图名称, 区分数据来源, 0:专家数据, 1:实测数据
     QString node;         // 节点
     QString abscissa;     // 横坐标
     QString ordinate;     // 纵坐标

+ 37 - 0
QFD/dbService/NodeMatrixService.cpp

@@ -564,3 +564,40 @@ bool NodeMatrixService::DeleteNodeMatrixListByExpertId(int expertId)
     }
     return ret;
 }
+
+bool NodeMatrixService::QueryMeaureDataByProjectAndIndex(QList<NodeMatrixInfo *> *dataList, QString index, int projId)
+{
+    QSqlDatabase db = SqlDBHelper::getDatabase();
+    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 "
+                                "t_node_matrix_info where engineer_id ='%2' and table_msg ='%3'")
+                                .arg(QString::number(projId))
+                                .arg(index);
+    //    qDebug() << "selectSql=" << selectSql;
+    if (query.exec(selectSql)) {
+        while (query.next()) {
+            if (query.isNull(0) == false) {
+                NodeMatrixInfo *nodeMatrixInfo = new NodeMatrixInfo();
+                nodeMatrixInfo->id             = query.value(0).toInt();
+                nodeMatrixInfo->expertName     = query.value(1).toString();
+                nodeMatrixInfo->engineerId     = query.value(2).toInt();
+                nodeMatrixInfo->node           = query.value(3).toString();
+                nodeMatrixInfo->abscissa       = query.value(4).toString();
+                nodeMatrixInfo->ordinate       = query.value(5).toString();
+                nodeMatrixInfo->nodeValue      = query.value(6).toString();
+                nodeMatrixInfo->expertId       = query.value(7).toInt();
+                nodeMatrixInfo->mindId         = query.value(8).toInt();
+                nodeMatrixInfo->writeDate      = query.value(9).toDateTime();
+                nodeMatrixInfo->mark           = query.value(10).toString();
+                nodeMatrixInfo->strUuid        = query.value(11).toString();
+                dataList->append(nodeMatrixInfo);
+            }
+        }
+        ret = true;
+    } else {
+        qDebug() << query.lastError();
+    }
+    return ret;
+}

+ 3 - 0
QFD/dbService/NodeMatrixService.h

@@ -57,6 +57,9 @@ public:
     bool DeleteNodeMatrixListByExpertName(QString expertName);
     /*根据专家编号删除节点信息*/
     bool DeleteNodeMatrixListByExpertId(int expertId);
+
+    /*根据指标体系类型和工程ID查询实测数据信息*/
+    bool QueryMeaureDataByProjectAndIndex(QList<NodeMatrixInfo *> *dataList, QString index, int projId);
 };
 
 #endif  // NODEMATRIXSERVICE_H

+ 4 - 0
QFD/main.cpp

@@ -65,6 +65,8 @@ void test()
     qDebug() << index;
 }
 
+void cTest() { }
+
 int main(int argc, char *argv[])
 {
     DUMP_FILE_HOOK_HANLE;
@@ -127,6 +129,8 @@ int main(int argc, char *argv[])
     font.setPointSize(14);
     a.setFont(font);
 
+    cTest();
+
     int ret = a.exec();
     delete w;
     return ret;

+ 74 - 0
QFD/widgets/ConfigMeasureDataWidget.cpp

@@ -3,6 +3,7 @@
 #include "ProjectManager.h"
 
 #include "dbService/SchemeInfoService.h"
+#include "dbService/NodeMatrixService.h"
 
 #include <Widgets/Button.h>
 #include <Common/Icon.h>
@@ -23,9 +24,65 @@ ConfigMeasureDataWidget::ConfigMeasureDataWidget(QWidget *parent) : QWidget(pare
 void ConfigMeasureDataWidget::setProcess(SchemePlanManager::SchemeProcessInfo process)
 {
     m_process = process;
+    reloadData();
     addTestData();
 }
 
+void ConfigMeasureDataWidget::reloadData()
+{
+    /// 从数据库拉取数据
+    m_nodeData.clear();
+    m_uuidList.clear();
+    m_listWidget->clear();
+
+    QString indexName = ProjectManager::nameOfIndexType((ProjectManager::IndexType)m_process.indexType);
+    QList<NodeMatrixInfo *> dataList;
+    bool ret = NodeMatrixService().QueryMeaureDataByProjectAndIndex(&dataList, indexName, m_process.projectId);
+    if (ret == false) {
+        return;
+    }
+
+    /// 使用 uuid 整理数据
+    for (NodeMatrixInfo *info : dataList) {
+        if (m_uuidList.contains(info->strUuid) == false) {
+            m_uuidList.append(info->strUuid);
+            QList<NodeMatrixInfo *> list;
+            m_nodeData[info->strUuid] = list;
+        }
+        m_nodeData[info->strUuid].append(info);
+    }
+
+    refreshList();
+}
+
+void ConfigMeasureDataWidget::selectFirst()
+{
+    if (m_listWidget->count() <= 0) {
+        return;
+    }
+
+    m_listWidget->setCurrentRow(0);
+}
+
+void ConfigMeasureDataWidget::selectLast()
+{
+    if (m_listWidget->count() <= 0) {
+        return;
+    }
+    m_listWidget->setCurrentRow(m_listWidget->count() - 1);
+}
+
+QList<NodeMatrixInfo *> ConfigMeasureDataWidget::selectedData()
+{
+    if (m_uuidList.size() <= 0) {
+        QList<NodeMatrixInfo *> list;
+        return list;
+    }
+
+    int row = m_listWidget->currentRow();
+    return m_nodeData[m_uuidList[row]];
+}
+
 void ConfigMeasureDataWidget::initWidget()
 {
     m_titleLabel = new QLabel("添加实测数据", this);
@@ -72,6 +129,18 @@ void ConfigMeasureDataWidget::initLayout()
 void ConfigMeasureDataWidget::connectSignalsAndSlots()
 {
     connect(m_addButton, &PushButton::clicked, this, &ConfigMeasureDataWidget::slotAddDataClicked);
+    connect(m_listWidget, &QListWidget::itemSelectionChanged, this, &ConfigMeasureDataWidget::slotCurrentRowChanged);
+}
+
+void ConfigMeasureDataWidget::refreshList()
+{
+    m_listWidget->clear();
+
+    for (int i = 0; i < m_uuidList.size(); i++) {
+        QListWidgetItem *item = new QListWidgetItem;
+        item->setText(QString("数据%1").arg(i + 1));
+        m_listWidget->addItem(item);
+    }
 }
 
 void ConfigMeasureDataWidget::addTestData()
@@ -98,3 +167,8 @@ void ConfigMeasureDataWidget::slotAddDataClicked()
 {
     emit sigAddData();
 }
+
+void ConfigMeasureDataWidget::slotCurrentRowChanged()
+{
+    emit sigCurrentRowChanged();
+}

+ 18 - 2
QFD/widgets/ConfigMeasureDataWidget.h

@@ -5,7 +5,9 @@
 
 #include "SchemePlanManager.h"
 
-class SchemaEval;
+#include <QMap>
+
+class NodeMatrixInfo;
 
 class QPushButton;
 
@@ -22,19 +24,30 @@ public:
 
     void setProcess(SchemePlanManager::SchemeProcessInfo process);
 
-signals:
+    void reloadData();
+
+    void selectFirst();
+
+    void selectLast();
 
+    QList<NodeMatrixInfo *> selectedData();
+
+signals:
     void sigAddData();
+    void sigCurrentRowChanged();
 
 private:
     void initWidget();
     void initLayout();
     void connectSignalsAndSlots();
 
+    void refreshList();
+
     void addTestData();
 
 private slots:
     void slotAddDataClicked();
+    void slotCurrentRowChanged();
 
 private:
     SchemePlanManager::SchemeProcessInfo m_process;
@@ -49,6 +62,9 @@ private:
     QPushButton *m_addButton = nullptr;
 
     QListWidget *m_listWidget = nullptr;
+
+    QList<QString> m_uuidList;                          // 一组实测数据的公共唯一id
+    QMap<QString, QList<NodeMatrixInfo *>> m_nodeData;  // 按组归类的实测数据
 };
 
 #endif  // CONFIGMEASUREDATAWIDGET_H

+ 3 - 2
QFD/widgets/CustomPieChart.cpp

@@ -105,8 +105,9 @@ void CustomPieChart::drawPieChart()
                                           ? Qt::transparent
                                           : colorList[count]);  // 从颜色列表中取出颜色并设为区域背景色
         radialGradient.setColorAt(1, qFuzzyCompare(ringSize, 1) ? Qt::transparent : colorList[count]);
-        painter.setBrush(radialGradient);
-        painter.drawPie(QRectF(-radius, -radius, diameter, diameter), startLength, arcLength);  // 绘制饼图的扇形区域
+        painter.setBrush(colorList[count]);
+        painter.drawPie(QRectF(-radius, -radius, diameter, diameter), startLength, arcLength);  //
+        //        绘制饼图的扇形区域
         /* 绘制说明 */
         painter.setPen(colorList[count]);
         painter.setBrush(colorList[count]);

+ 84 - 4
QFD/widgets/DataCollectionWidget.cpp

@@ -72,7 +72,9 @@ DataCollectionWidget::DataCollectionWidget(ProjectInfo *proj, QWidget *parent) :
     connect(m_configExpert, &ConfigExpertDataWidget::sigConfigSelected, this,
             &DataCollectionWidget::slotConfigSelected);
     connect(m_configScheme, &ConfigSchemeDataWidget::sigAddScheme, this, &DataCollectionWidget::slotAddScheme);
-    connect(m_configMeasure, &ConfigMeasureDataWidget::sigAddData, this, &DataCollectionWidget::slotAddData);
+    connect(m_configMeasure, &ConfigMeasureDataWidget::sigAddData, this, &DataCollectionWidget::slotAddMeasureData);
+    connect(m_configMeasure, &ConfigMeasureDataWidget::sigCurrentRowChanged, this,
+            &DataCollectionWidget::slotCurrentMeasureDataChanged);
     connect(m_addSchemeWidget, &CreateSchemeWidget::sigSchemeInfoConfirmed, this,
             &DataCollectionWidget::slotAddSchemeInfo);
 }
@@ -189,6 +191,7 @@ void DataCollectionWidget::slotTabCurrentChanged(int index)
         bool meaure = (table->process().dSource == SchemePlanManager::FromMeasurement) && !scheme;
         if (meaure) {
             m_configMeasure->setProcess(table->process());
+            m_configMeasure->selectFirst();
         }
         m_configMeasure->setVisible(meaure);
     }
@@ -399,7 +402,7 @@ void DataCollectionWidget::slotConfigSelected(UserConfig *config)
     QList<NodeMatrixInfo *> data;
     NodeMatrixService().QueryNodeMatrixListByExpertIdAndEngineerId(&data, config->userId, config->engineerId,
                                                                    indexName);
-    table->setNodeMatrixData(data);
+    table->setNodeMatrixData(data, true);
 }
 
 void DataCollectionWidget::slotAddScheme()
@@ -439,10 +442,87 @@ void DataCollectionWidget::slotAddSchemeInfo(const QString name, const QString r
     }
 }
 
-void DataCollectionWidget::slotAddData()
+/// 添加实测数据
+void DataCollectionWidget::slotAddMeasureData()
 {
+    static bool isBusing = false;
+    if (isBusing) {
+        return;  // 添加完成后再响应下一次添加
+    }
+
+    isBusing = true;
+
     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;
+
+    QDateTime time = QDateTime::currentDateTime();
+    QString uuid   = QString("%1").arg(time.toMSecsSinceEpoch());
+
+    QList<NodeMatrixInfo *> dataList;
+
+    /// 权重数据
+    /// 一种指标: 能力重要度评估指标, 或方案评估指标, 或效能评估指标
+    /// 除根节点外, 每个指标一个权重值
+    if (table->process().type == SchemePlanManager::ImportWeightData) {
+        for (CNodeData n : table->mind1()->nodeList()) {
+            if (n.number <= 0) {
+                continue;
+            }
+            NodeMatrixInfo *info = new NodeMatrixInfo();
+            info->engineerId     = m_proj->id;
+            info->mindId         = 1;
+            info->tableMsg       = indexName;
+            info->writeDate      = time;
+            info->strUuid        = uuid;
+
+            info->abscissa  = n.name;
+            info->nodeValue = "1";
+            dataList.append(info);
+        }
+    }
+
+    /// 评估数据
+    /// 两种指标: 能力重要度评估指标, 技术措施重要度评估指标
+    /// 每个技术措施指标, 对应能力重要度指标体系最后一层指标下的数据
+    if (table->process().type == SchemePlanManager::ImportEvalData
+        && table->process().indexType == ProjectManager::TechIndex) {
+        QList<CNodeData> leaves = table->mind2()->leaves();
+        for (CNodeData n1 : table->mind1()->nodeList()) {
+            if (n1.number <= 0) {
+                continue;
+            }
+
+            for (CNodeData n2 : leaves) {
+                NodeMatrixInfo *info = new NodeMatrixInfo();
+                info->engineerId     = m_proj->id;
+                info->mindId         = 1;
+                info->tableMsg       = indexName;
+                info->writeDate      = time;
+                info->strUuid        = uuid;
+
+                info->abscissa  = n1.name;
+                info->ordinate  = n2.name;
+                info->nodeValue = "1";
+                dataList.append(info);
+            }
+        }
+    }
+
+    if (dataList.size() > 0) {
+        bool ret = NodeMatrixService().AddNodeMatrixInfoList(dataList);
+        qDebug() << __FUNCTION__ << __LINE__ << ret << dataList.size() << endl;
+        if (ret) {
+            m_configMeasure->reloadData();
+            m_configMeasure->selectLast();
+        }
+    }
+
+    isBusing = false;
+}
+
+void DataCollectionWidget::slotCurrentMeasureDataChanged()
+{
+    DataTableWidget *table = (DataTableWidget *)m_tab->currentWidget();
+    table->setNodeMatrixData(m_configMeasure->selectedData(), false);
 }

+ 3 - 1
QFD/widgets/DataCollectionWidget.h

@@ -46,7 +46,9 @@ private slots:
 
     void slotAddSchemeInfo(const QString name, const QString remark, const QString path);
 
-    void slotAddData();
+    void slotAddMeasureData();
+
+    void slotCurrentMeasureDataChanged();
 
 signals:
 

+ 27 - 10
QFD/widgets/DataTableWidget.cpp

@@ -421,23 +421,40 @@ CMind *DataTableWidget::mind2() const
     return m_mind2;
 }
 
-void DataTableWidget::setNodeMatrixData(QList<NodeMatrixInfo *> data)
+void DataTableWidget::setNodeMatrixData(QList<NodeMatrixInfo *> data, bool isExpertData)
 {
     m_data = data;
     // 加载来自专家的权重分析数据
-    if (m_process.type == SchemePlanManager::ImportWeightData && m_process.dSource == SchemePlanManager::FromExpert) {
-        for (NodeMatrixInfo *info : data) {
-            for (QList<DataTableItemModel *> modelList : m_models.values()) {
-                for (DataTableItemModel *model : modelList) {
-                    for (int r = 0; r < model->rowCount(); r++) {
-                        QStandardItem *rHeader = model->verticalHeaderItem(r);
+    if (m_process.type == SchemePlanManager::ImportWeightData) {
+        if (m_process.dSource == SchemePlanManager::FromExpert) {
+            for (NodeMatrixInfo *info : data) {
+                for (QList<DataTableItemModel *> modelList : m_models.values()) {
+                    for (DataTableItemModel *model : modelList) {
+                        for (int r = 0; r < model->rowCount(); r++) {
+                            QStandardItem *rHeader = model->verticalHeaderItem(r);
+                            for (int c = 0; c < model->columnCount(); c++) {
+                                QStandardItem *cHeader = model->horizontalHeaderItem(c);
+                                if (cHeader->text() == info->abscissa && rHeader->text() == info->ordinate) {
+                                    QStandardItem *item = new QStandardItem();
+                                    item->setText(info->nodeValue);
+                                    item->setEditable(false);
+                                    model->setItem(r, c, item);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        } else {
+            for (NodeMatrixInfo *info : data) {
+                for (QList<DataTableItemModel *> modelList : m_models.values()) {
+                    for (DataTableItemModel *model : modelList) {
                         for (int c = 0; c < model->columnCount(); c++) {
                             QStandardItem *cHeader = model->horizontalHeaderItem(c);
-                            if (cHeader->text() == info->abscissa && rHeader->text() == info->ordinate) {
+                            if (cHeader->text() == info->abscissa) {
                                 QStandardItem *item = new QStandardItem();
                                 item->setText(info->nodeValue);
-                                item->setEditable(false);
-                                model->setItem(r, c, item);
+                                model->setItem(0, c, item);
                             }
                         }
                     }

+ 1 - 1
QFD/widgets/DataTableWidget.h

@@ -70,7 +70,7 @@ public:
     CMind *mind1() const;
     CMind *mind2() const;
 
-    void setNodeMatrixData(QList<NodeMatrixInfo *> data);
+    void setNodeMatrixData(QList<NodeMatrixInfo *> data, bool isExpertData);
 
     void addTestMesureData();