Sfoglia il codice sorgente

导出效能分析评估报告。

Ulricy 1 anno fa
parent
commit
b94ba7bdfe
1 ha cambiato i file con 116 aggiunte e 0 eliminazioni
  1. 116 0
      QFD/common/ExportReportManager.cpp

+ 116 - 0
QFD/common/ExportReportManager.cpp

@@ -12,6 +12,8 @@
 #include <dbService/SchemeProcessService.h>
 #include <dbService/MindWeightService.h>
 #include <dbService/GradeInfoService.h>
+#include <dbService/GradeIndexInfoService.h>
+#include <dbService/EffectIndexInfoService.h>
 #include <dbService/EffectResultService.h>
 
 #include <QWord/QWord.h>
@@ -63,6 +65,9 @@ bool ExportReportManager::exportReport()
     }
 
     insertProjectInfo();
+
+    if (m_evalType == ProjectManager::DemandEval) { }
+
     if (m_evalType == ProjectManager::OptimalEval) {
         insertSchemeDesignInfo();
         insertSchemeIndex();
@@ -582,6 +587,117 @@ void ExportReportManager::insertEffiConfigData()
     // bmProjName31, bmProjName32, bmConfigTable
     insertText("bmProjName31", m_proj->projectName);
     insertText("bmProjName32", m_proj->projectName);
+
+    QList<GradeInfo *> gradeInfoList;
+    int type = m_schemeType == 1 ? 0 : 1;
+    bool ret = GradeInfoService().QueryGradeByProjectIdAndType(&gradeInfoList, m_proj->id, type);
+    if (ret == false || gradeInfoList.size() <= 0) {
+        return;
+    }
+    QStringList gradeNames;
+    for (int i = 0; i < gradeInfoList.size(); ++i) {
+        gradeNames.append(gradeInfoList[i]->gradeValue);
+    }
+
+    QMap<QString, QString> gradeInfoData;
+
+    if (m_schemeType == 2) {
+        QList<GradeIndexInfo *> gradeIndexInfoList;
+        ret = GradeIndexInfoService().QueryGradeIndexInfoByProjectId(&gradeIndexInfoList, m_proj->id);
+        if (ret == false || gradeIndexInfoList.size() <= 0) {
+            return;
+        }
+
+        for (int i = gradeIndexInfoList.size() - 1; i >= 0; --i) {
+            QString name  = gradeIndexInfoList[i]->gradeIndexName;
+            QString value = gradeInfoData[name];
+            if (gradeNames.size() > gradeIndexInfoList[i]->gradeLevel - 1) {
+                QString grade = gradeNames[gradeIndexInfoList[i]->gradeLevel - 1];
+                if (value.contains(grade)) {
+                    continue;
+                } else {
+                    value += grade;
+                }
+            }
+            value += ":";
+            value += gradeIndexInfoList[i]->gradeIndexValue;
+            if (gradeIndexInfoList[i]->gradeLevel > 1) {
+                value += "\n";
+            }
+            gradeInfoData[name] = value;
+        }
+
+    } else {
+        QList<EffectIndexInfo *> effectIndexInfoList;
+        ret = EffectIndexInfoService().QueryEffectIndexInfoByProjectId(&effectIndexInfoList, m_proj->id);
+        if (ret == false) {
+            return;
+        }
+
+        for (EffectIndexInfo *info : effectIndexInfoList) {
+            QStringList valueList = info->effectIndexValue.split(",");
+            QString value;
+            for (int i = valueList.size() - 1; i >= 0; --i) {
+                if (gradeNames.size() > i) {
+                    value += gradeNames[i];
+                }
+                value += ":";
+                value += (valueList[i].replace(":", ","));
+                if (i > 0) {
+                    value += "\n";
+                }
+                gradeInfoData[info->effectIndexName] = value;
+            }
+        }
+    }
+
+    QList<CNodeData> nodeList;
+    ret = CNodeDataService().QueryAllValid(nodeList, m_proj->id, 8);
+    if (ret == false) {
+        return;
+    }
+
+    CMind *mind = new CMind();
+    mind->setNodeList(nodeList);
+    QList<CNodeData> leaveNodes = mind->leaves();
+    int rowCount                = leaveNodes.size() + 1;
+    int columnCount             = mind->levels();
+
+    //    bmConfigTable
+    QAxObject *table = insertTable("bmConfigTable", rowCount, columnCount);
+    if (table == nullptr) {
+        delete mind;
+        return;
+    }
+    for (int i = 2; i <= mind->levels(); ++i) {
+        if (i < mind->levels()) {
+            setCellString(table, 1, i - 1, QString("%1级指标\n(能力项)").arg(i - 1));
+        } else {
+            setCellString(table, 1, i - 1, QString("指标"));
+            setCellString(table, 1, i, QString("效能分级"));
+        }
+
+        QList<CNodeData> nodes = mind->nodesInLevel(i);
+        int rowPos             = 2;
+        for (int j = 0; j < nodes.size(); ++j) {
+            CNodeData node = nodes[j];
+            int leaves     = mind->leavesCountOfNode(node);
+            int textPos    = (rowPos + leaves / 2);
+            setCellString(table, textPos, i - 1, node.name);
+
+            if (leaves > 1) {
+                mergeCells(table, rowPos, i - 1, leaves, 1);
+            }
+
+            rowPos += leaves;
+        }
+    }
+    for (int i = 0; i < leaveNodes.size(); ++i) {
+        CNodeData node = leaveNodes[i];
+        QString value  = QString("%1").arg(gradeInfoData[node.name]);
+        setCellString(table, i + 2, columnCount, value);
+    }
+    delete mind;
 }
 
 void ExportReportManager::insertEffiSchemeData()