Browse Source

方案优选评估;
存储方案评估结果;

chengxr 1 year ago
parent
commit
ecddc63b65
3 changed files with 60 additions and 6 deletions
  1. 52 5
      QFD/common/DataEvaluator.cpp
  2. 7 1
      QFD/common/DataEvaluator.h
  3. 1 0
      QFD/widgets/DataTableWidget.cpp

+ 52 - 5
QFD/common/DataEvaluator.cpp

@@ -15,6 +15,7 @@
 #include <dbService/UserConfigService.h>
 #include <dbService/MindWeightService.h>
 #include <dbService/MindScoreService.h>
+#include <dbService/SchemeInfoService.h>
 
 #include <QMap>
 #include <QDebug>
@@ -327,7 +328,7 @@ bool DataEvaluator::evaluateWeightFromMeasure()
 bool DataEvaluator::evaluateTech()
 {
     QMap<QString, double> weightData;
-    bool weightRet = getWeight(weightData);
+    bool weightRet = getWeightData(weightData);
 
     QMap<QString, QMap<QString, NodeMatrixInfo *>> nodeData;
     bool dataRet = getNodeData(nodeData);
@@ -380,14 +381,31 @@ bool DataEvaluator::evaluateTech()
     }
     QString valueStr = valueList.join(";");
     bool ret         = MindScoreService().saveUniqueScoreData(m_process.projectId, valueStr);
-    qDebug() << __FUNCTION__ << __LINE__ << valueStr << endl;
 
     return ret;
 }
 
 bool DataEvaluator::evaluateScheme()
 {
-    return false;
+    QMap<QString, double> weightData;
+    bool weightRet = getWeightData(weightData);
+
+    QMap<int, QMap<QString, double>> schemeData;
+    bool schemeRet = getSchemeData(schemeData);
+
+    if (weightRet == false || schemeRet == false) {
+        return false;
+    }
+
+    for (int schemeId : schemeData.keys()) {
+        double score = 0;
+        for (QString key : schemeData[schemeId].keys()) {
+            score += schemeData[schemeId][key] * weightData[key];
+        }
+        SchemeInfoService().updateSchemeScore(schemeId, score);
+    }
+
+    return true;
 }
 
 bool DataEvaluator::evaluateEfficiencyMEA()
@@ -471,7 +489,7 @@ bool DataEvaluator::getUserConfig(QMap<QString, double> &cfg) const
     return true;
 }
 
-bool DataEvaluator::getWeight(QMap<QString, double> &weight) const
+bool DataEvaluator::getWeightData(QMap<QString, double> &weightData) const
 {
     MindWeightInfo info;
     int indexType = m_process.indexType;
@@ -492,7 +510,36 @@ bool DataEvaluator::getWeight(QMap<QString, double> &weight) const
     for (QString keyValueStr : weightList) {
         QStringList keyValue = keyValueStr.split(":");
         if (keyValue.size() == 2) {
-            weight[keyValue.first()] = keyValue.last().toDouble();
+            weightData[keyValue.first()] = keyValue.last().toDouble();
+        }
+    }
+    return true;
+}
+
+bool DataEvaluator::getSchemeData(QMap<int, QMap<QString, double>> &schemeData) const
+{
+    QList<SchemaEval *> schemeList;
+    int type = m_process.indexType == ProjectManager::OptimalIndex ? 0 : 1;
+    bool ret = SchemeInfoService().QuerySchemeInfoByEngineerId(&schemeList, m_process.projectId, type);
+    if (ret == false) {
+        return false;
+    }
+
+    if (schemeList.size() <= 0) {
+        qDebug() << __FUNCTION__ << __LINE__ << "未创建方案" << endl;
+        return false;
+    }
+
+    for (SchemaEval *scheme : schemeList) {
+        if (schemeData.keys().contains(scheme->id) == false) {
+            schemeData[scheme->id] = QMap<QString, double>();
+        }
+        QStringList keyValueStringList = scheme->valueStr.split(";");
+        for (QString keyValueStr : keyValueStringList) {
+            QStringList keyValue = keyValueStr.split(":");
+            if (keyValue.size() == 2) {
+                schemeData[scheme->id][keyValue.first()] = keyValue.last().toDouble();
+            }
         }
     }
     return true;

+ 7 - 1
QFD/common/DataEvaluator.h

@@ -52,7 +52,13 @@ private:
     bool getUserConfig(QMap<QString, double> &cfg) const;
 
     /// 获取指标权重
-    bool getWeight(QMap<QString, double> &weight) const;
+    bool getWeightData(QMap<QString, double> &weightData) const;
+
+    /// 获取方案数据
+    /// int key: 方案 id
+    /// QString key: 指标名称
+    /// double value: 指标权重
+    bool getSchemeData(QMap<int, QMap<QString, double>> &schemeData) const;
 
     /// 使用横坐标和纵坐标构造索引
     QString nodeDataKey(NodeMatrixInfo *data) const;

+ 1 - 0
QFD/widgets/DataTableWidget.cpp

@@ -682,6 +682,7 @@ void DataTableWidget::itemChanged(QStandardItem *item)
             valueList.append(QString("%1:%2").arg(indexName).arg(valueStr));
         }
         scheme->valueStr = valueList.join(";");
+
         SchemeInfoService().UpdateValueStrById(scheme->id, scheme->valueStr);
     }
 }