Sfoglia il codice sorgente

导出报告流程

Ulricy 1 anno fa
parent
commit
49cb82ba4a

+ 2 - 0
QFD/QFD.pro

@@ -77,6 +77,7 @@ SOURCES += \
     common/DataEvaluator.cpp \
     common/EvalDataManager.cpp \
     common/ExpertManager.cpp \
+    common/ExportReportManager.cpp \
     common/MindEvaluation.cpp \
     common/ProjectManager.cpp \
     common/QFDAlert.cpp \
@@ -150,6 +151,7 @@ HEADERS += \
     common/DataEvaluator.h \
     common/EvalDataManager.h \
     common/ExpertManager.h \
+    common/ExportReportManager.h \
     common/MindEvaluation.h \
     common/ProjectManager.h \
     common/QFDAlert.h \

+ 1 - 1
QFD/common/DataEvaluator.cpp

@@ -74,7 +74,7 @@ bool DataEvaluator::evaluateWeightFromExpert()
     /// 权重分析专家导入数据, 使用层次分析法
     SchemePlanManager::Algorithm algorithm = SchemePlanManager::AHP;
 
-    /// 获取指标体系
+    /// 获取指标体系
     QList<CNodeData> nodeList;
     bool mindRet = CNodeDataService().QueryAllValid(nodeList, m_process.projectId, m_process.indexType);
     CMind *mind  = new CMind(this);

+ 125 - 0
QFD/common/ExportReportManager.cpp

@@ -0,0 +1,125 @@
+#include "ExportReportManager.h"
+
+#include "ProjectManager.h"
+
+#include <dbService/ClassSet.h>
+
+#include <QWord/QWord.h>
+#include <QWord/QWordDemo.h>
+
+#include <QDir>
+#include <QDate>
+#include <QDebug>
+
+ExportReportManager::ExportReportManager(QObject *parent) : QObject(parent)
+{
+    m_word = new QWord(this);
+}
+
+ExportReportManager::~ExportReportManager()
+{
+    delete m_word;
+}
+
+ProjectInfo *ExportReportManager::proj() const
+{
+    return m_proj;
+}
+
+void ExportReportManager::setProj(ProjectInfo *proj)
+{
+    m_proj = proj;
+}
+
+int ExportReportManager::evalType() const
+{
+    return m_evalType;
+}
+
+void ExportReportManager::setEvalType(int type)
+{
+    m_evalType = type;
+}
+
+bool ExportReportManager::exportReport()
+{
+    bool createRet = createWord();
+    if (createRet == false) {
+        qDebug() << __FUNCTION__ << __LINE__ << m_word->getStrErrorInfo() << endl;
+        return false;
+    }
+
+    configWord();
+
+    addCover();
+
+    m_word->setVisible(true);
+    m_word->saveAs();
+    m_word->close();
+
+    return true;
+}
+
+bool ExportReportManager::createWord()
+{
+    // 报告文件夹路径
+    QString curPath   = QDir::currentPath();
+    QString dateStr   = QDate::currentDate().toString("yyyy-MM-dd");
+    QString reportDir = curPath + "/reports/" + dateStr + "/";
+    QDir dir(reportDir);
+    if (!dir.exists()) {
+        dir.mkpath(reportDir);
+    }
+
+    // 报告文件路径
+    QString typeStr  = ProjectManager::nameOfEvalType((ProjectManager::EvalType)m_evalType);
+    QString fileName = m_proj->projectName + "_" + typeStr + "报告.docx";
+    QString filePath = reportDir + fileName;
+
+    qDebug() << __FUNCTION__ << __LINE__ << filePath << endl;
+
+    // 创建 word 文档
+    return m_word->createNewWord(filePath);
+}
+
+void ExportReportManager::configWord()
+{
+    m_word->setPageOrientation(0);
+    m_word->setWordPageView(3);
+}
+
+void ExportReportManager::addCover()
+{
+    m_word->setParagraphAlignment(0);  //下面文字位置
+    m_word->setFontName(QString::fromLocal8Bit("黑体"));
+    m_word->setFontSize(16);
+    insertWraps(5);
+    m_word->setFontSize(26);
+    m_word->insertText(m_proj->projectName);
+    QString typeStr = ProjectManager::nameOfEvalType((ProjectManager::EvalType)m_evalType);
+    if (typeStr.length() > 2) {
+        typeStr = typeStr.mid(0, typeStr.length() - 2);
+    }
+    m_word->insertText(typeStr);
+    m_word->setFontSize(16);
+    insertWraps();
+    m_word->setFontSize(26);
+    m_word->insertText("评估报告");
+    m_word->setFontSize(16);
+    insertWraps(10);
+    m_word->setFontSize(18);
+    m_word->insertText(m_proj->estimateDept);
+    m_word->setFontSize(16);
+    insertWraps();
+    m_word->setFontSize(18);
+    m_word->insertText(QDate::currentDate().toString("yyyy年MM月"));
+    m_word->setFontSize(16);
+    insertWraps(2);
+}
+
+void ExportReportManager::insertWraps(int count)
+{
+    for (int i = 0; i < count; ++i) {
+        m_word->insertMoveDown();
+    }
+}

+ 66 - 0
QFD/common/ExportReportManager.h

@@ -0,0 +1,66 @@
+#ifndef EXPORTREPORTMANAGER_H
+#    define EXPORTREPORTMANAGER_H
+
+#    include <QObject>
+
+class ProjectInfo;
+
+class QWord;
+
+class ExportReportManager : public QObject
+{
+    Q_OBJECT
+public:
+    explicit ExportReportManager(QObject *parent = nullptr);
+    ~ExportReportManager();
+
+    ProjectInfo *proj() const;
+    void setProj(ProjectInfo *proj);
+
+    int evalType() const;
+    void setEvalType(int type);
+
+    bool exportReport();
+
+    bool createWord();
+    void configWord();
+    void addCover();  // 封面
+
+    void insertWraps(int count = 1);  // 换行
+
+signals:
+
+private:
+    ProjectInfo *m_proj = nullptr;  // 项目
+    int m_evalType      = 0;        // 报告评估类型
+
+    QWord *m_word = nullptr;
+};
+
+#endif  // EXPORTREPORTMANAGER_H
+
+/**
+
+【中文字号】    【英文字号】      【毫米】           【像素】
+1英寸          72pt           25.30mm           95.6px
+大特号          63pt           22.14mm           83.7px
+特号           54pt           18.97mm           71.7px
+初号           42pt           14.82mm           56px
+小初           36pt           12.70mm           48px
+一号           26pt           9.17mm            34.7px
+小一           24pt           8.47mm            32px
+二号           22pt           7.76mm            29.3px
+小二           18pt           6.35mm            24px
+三号           16pt           5.64mm            21.3px
+小三           15pt           5.29mm            20px
+四号           14pt           4.94mm            18.7px
+小四           12pt           4.23mm            16px
+五号           10.5pt         3.70mm            14px
+小五           9pt            3.18mm            12px
+六号           7.5pt          2.56mm            10px
+小六           6.5pt          2.29mm            8.7px
+七号           5.5pt          1.94mm            7.3px
+八号           5pt            1.76mm            6.7px
+
+ * 2023-12-12 by chengxr
+ */

+ 13 - 0
QFD/common/ProjectManager.cpp

@@ -86,6 +86,19 @@ QList<ProjectManager::IndexType> ProjectManager::indexList(ProjectInfo proj)
     return indexListOfEvalTypes(evalTypes(proj));
 }
 
+int ProjectManager::evalTypeOfIndexType(int type)
+{
+    EvalType e         = None;
+    QMetaEnum metaEnum = QMetaEnum::fromType<EvalType>();
+    for (int i = 0; i < metaEnum.keyCount(); i++) {
+        EvalType t = EvalType(metaEnum.value(i));
+        if ((type & t) == type) {
+            e = t;
+        }
+    }
+    return e;
+}
+
 int ProjectManager::queryProjects(QList<ProjectInfo *> *projList)
 {
     bool ret = ProjectService().QueryAll(projList);

+ 6 - 0
QFD/common/ProjectManager.h

@@ -45,6 +45,12 @@ public:
     static QList<EvalType> evalTypeList(ProjectInfo proj);
     static QList<IndexType> indexList(ProjectInfo proj);
 
+    /**
+     * 返回指标体系类型对应的评估类型
+     * 2023-12-12 by chengxr
+     */
+    static int evalTypeOfIndexType(int type);
+
     ///
     /// \brief queryProjects 查询全部项目
     /// \param projList 项目列表

+ 1 - 1
QFD/widgets/AppInfoWidget.cpp

@@ -9,7 +9,7 @@
 #include <QApplication>
 #include <QPixmap>
 
-static const QString buildTime = "2023年7月24日";
+static const QString buildTime = "2023年12月10日";
 
 AppInfoWidget::AppInfoWidget(QWidget *parent) : QWidget(parent)
 {

+ 14 - 3
QFD/widgets/EvalReportWidget.cpp

@@ -6,6 +6,8 @@
 #include "view/PlotView.h"
 #include "CustomPieChart.h"
 
+#include "common/ExportReportManager.h"
+
 #include <dbService/CNodeDataService.h>
 #include <dbService/ClassSet.h>
 #include <dbService/SchemeInfoService.h>
@@ -33,13 +35,22 @@ EvalReportWidget::EvalReportWidget(ProjectInfo *proj, int indexType, QWidget *pa
 
     loadAlgs();
     loadData();
+
+    m_exportMngr = new ExportReportManager(this);
+    m_exportMngr->setProj(m_proj);
+    m_exportMngr->setEvalType(ProjectManager::evalTypeOfIndexType(indexType));
+}
+
+EvalReportWidget::~EvalReportWidget()
+{
+    delete m_exportMngr;
 }
 
 void EvalReportWidget::exportReport()
 {
-    qDebug() << "=====>exportReport";
-    if (m_proj->id != 113)
-        return;
+    qDebug() << __FUNCTION__ << __LINE__ << m_exportMngr->evalType() << endl;
+
+    m_exportMngr->exportReport();
 
     return;
     if (m_indexType == ProjectManager::OptimalIndex) {  // 方案优选

+ 6 - 0
QFD/widgets/EvalReportWidget.h

@@ -7,6 +7,8 @@
 
 class ProjectInfo;
 
+class ExportReportManager;
+
 class CMind;
 class PlotView;
 class CustomPieChart;
@@ -25,6 +27,8 @@ class EvalReportWidget : public QWidget
 public:
     explicit EvalReportWidget(ProjectInfo *proj, int indexType, QWidget *parent = nullptr);
 
+    ~EvalReportWidget();
+
     void exportReport();
 
 private:
@@ -106,6 +110,8 @@ private:
     QPushButton *m_lastSchemeLev = nullptr;
     QPushButton *m_nextSchemeLev = nullptr;
     int m_curSchemeLev           = 2;  // 默认显示第二级指标
+
+    ExportReportManager *m_exportMngr = nullptr;
 };
 
 #endif  // EVALREPORTWIDGET_H