|
@@ -11,6 +11,8 @@
|
|
|
#include <dbService/SchemeInfoService.h>
|
|
|
#include <dbService/SchemeProcessService.h>
|
|
|
#include <dbService/MindWeightService.h>
|
|
|
+#include <dbService/GradeInfoService.h>
|
|
|
+#include <dbService/EffectResultService.h>
|
|
|
|
|
|
#include <QWord/QWord.h>
|
|
|
#include <QWord/QWordDemo.h>
|
|
@@ -75,6 +77,7 @@ bool ExportReportManager::exportReport()
|
|
|
insertEffiConfigData();
|
|
|
insertEffiSchemeData();
|
|
|
insertEffiWeightData();
|
|
|
+ insertEffiResult();
|
|
|
}
|
|
|
|
|
|
m_word->setVisible(true);
|
|
@@ -749,6 +752,135 @@ void ExportReportManager::insertEffiWeightData()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void ExportReportManager::insertEffiResult()
|
|
|
+{
|
|
|
+ QList<GradeInfo *> gradeInfoList;
|
|
|
+ int type = m_schemeType == 1 ? 0 : 1;
|
|
|
+ bool gradeRet = GradeInfoService().QueryGradeByProjectIdAndType(&gradeInfoList, m_proj->id, type);
|
|
|
+ if (gradeRet == false) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ QStringList gradeNames;
|
|
|
+ for (int i = 0; i < gradeInfoList.size(); ++i) {
|
|
|
+ gradeNames.append(gradeInfoList[i]->gradeValue);
|
|
|
+ }
|
|
|
+
|
|
|
+ QList<EffectResult> effList;
|
|
|
+ bool effRet = EffectResultService().queryDataList(effList, m_proj->id);
|
|
|
+ if (effRet == false) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ QMap<int, QMap<QString, QList<double>>> effData;
|
|
|
+ QMap<int, QString> schemeNames;
|
|
|
+ int levels = 0;
|
|
|
+ for (EffectResult effect : effList) {
|
|
|
+ if (effData.keys().contains(effect.schemeId) == false) {
|
|
|
+ effData[effect.schemeId] = QMap<QString, QList<double>>();
|
|
|
+ schemeNames[effect.schemeId] = effect.schemeName;
|
|
|
+ }
|
|
|
+ QStringList values = effect.value.split(",");
|
|
|
+ levels = values.size();
|
|
|
+ QList<double> valueList;
|
|
|
+ for (int v = 0; v < values.size(); ++v) {
|
|
|
+ valueList.append(values[v].toDouble());
|
|
|
+ }
|
|
|
+
|
|
|
+ effData[effect.schemeId][effect.indexName] = valueList;
|
|
|
+ }
|
|
|
+
|
|
|
+ QList<CNodeData> nodeList;
|
|
|
+ bool 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() + schemeNames.size() - 1;
|
|
|
+
|
|
|
+ // bmEvalTable
|
|
|
+ QAxObject *table = insertTable("bmEvalTable", 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("指标"));
|
|
|
+ }
|
|
|
+
|
|
|
+ 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 < schemeNames.size(); ++i) {
|
|
|
+ setCellString(table, 1, i + mind->levels(),
|
|
|
+ schemeNames[schemeNames.keys()[i]] + "\n(" + gradeNames.join(",") + ")");
|
|
|
+ for (int j = 0; j < leaveNodes.size(); ++j) {
|
|
|
+ CNodeData node = leaveNodes[j];
|
|
|
+ QList<double> values = effData[schemeNames.keys()[i]][node.name];
|
|
|
+ int bestIndex = 0;
|
|
|
+ QString score;
|
|
|
+ for (int k = 0; k < values.size(); ++k) {
|
|
|
+ if (values[k] > values[bestIndex]) {
|
|
|
+ bestIndex = k;
|
|
|
+ }
|
|
|
+ score += QString::number(values[k], 'f', 1).replace(".0", "").replace("nan", "0");
|
|
|
+ if (k < values.size() - 1) {
|
|
|
+ score += ",";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ QString rand = gradeNames[bestIndex];
|
|
|
+ QString value = rand + "(" + score + ")";
|
|
|
+ setCellString(table, j + 2, i + mind->levels(), value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ QStringList retList;
|
|
|
+ int bestGrade = 0;
|
|
|
+ int bestSchemeIndex = 0;
|
|
|
+ for (int i = 0; i < schemeNames.size(); ++i) {
|
|
|
+ int grade = 0;
|
|
|
+ QList<double> values = effData[schemeNames.keys()[i]]["综合"];
|
|
|
+ for (int j = 0; j < values.size(); ++j) {
|
|
|
+ if (values[j] > values[grade]) {
|
|
|
+ grade = j;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ QString ret = schemeNames[schemeNames.keys()[i]] + "的综合评价等级为" + gradeNames[grade];
|
|
|
+ retList.append(ret);
|
|
|
+ if (grade > bestGrade) {
|
|
|
+ bestGrade = grade;
|
|
|
+ bestSchemeIndex = i;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ QString bestScheme = schemeNames[schemeNames.keys()[bestSchemeIndex]];
|
|
|
+ QString conclusion = "根据评估结果," + retList.join(",") + "。所以" + bestScheme + "更优。";
|
|
|
+ insertText("bmEffiConclusion", conclusion);
|
|
|
+
|
|
|
+ delete mind;
|
|
|
+}
|
|
|
+
|
|
|
bool ExportReportManager::insertText(const QString &bookmark, const QString &text)
|
|
|
{
|
|
|
bool ret = false;
|