瀏覽代碼

生成报告修改,外观检查项,进度反馈

guoqiang 2 年之前
父節點
當前提交
b8cf9667c5
共有 5 個文件被更改,包括 269 次插入401 次删除
  1. 11 8
      TestService.cpp
  2. 1 2
      ValveTest.pro.user
  3. 153 386
      report.cpp
  4. 103 4
      report.h
  5. 1 1
      tank.cpp

+ 11 - 8
TestService.cpp

@@ -40,7 +40,9 @@ TestService::TestService(QThread *parent)
 }
 TestService::~TestService()
 {
-
+    qDebug()<<"TestService destory";
+    m_SerialUi3.closeConnect();
+    m_SerialUi4.closeConnect();
 }
 
 void TestService::init()
@@ -300,15 +302,16 @@ void TestService::receive_reportprogress(QString qstr)
 
 bool TestService::genReport(QString word_path, QString pic_dir)
 {
-    if(word_path.contains(".doc")){
-        return m_report.make_Word(m_tank, word_path, pic_dir);
-    }else if(word_path.contains(".pdf")){
-        return m_report.make_PDF(m_tank, word_path, pic_dir);
+    bool ret = false;
+
+    if(word_path.contains(".doc") || word_path.contains(".pdf") ){
+        m_report.makeReport(m_tank, word_path, pic_dir);
+    }else{
+        QString str = "word_path invalid!";
+        qDebug() << str;
     }
 
-    QString str = "word_path invalid!";
-    qDebug() << str;
-    return false;
+    return ret;
 }
 
 QJsonObject TestService::get_vrs_items()

+ 1 - 2
ValveTest.pro.user

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 8.0.0, 2023-03-20T14:00:05. -->
+<!-- Written by QtCreator 8.0.0, 2023-07-26T10:27:44. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
@@ -245,7 +245,6 @@
     <value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
     <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
-    <value type="QString" key="RunConfiguration.WorkingDirectory.default">D:/Code/QTapps/build-ValveTest-Desktop_Qt_5_15_2_MinGW_32_bit-Release</value>
    </valuemap>
    <value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
   </valuemap>

+ 153 - 386
report.cpp

@@ -24,32 +24,73 @@ QString g_bookmark_systest_picture[MAX_COMPARTMENT_NUM] = {BOOKMARK_SYSTEST_PICT
 QString g_bookmark_valvetest_picture[MAX_COMPARTMENT_NUM] = {BOOKMARK_VALVETEST_PICTURE_1,BOOKMARK_VALVETEST_PICTURE_2,BOOKMARK_VALVETEST_PICTURE_3, BOOKMARK_VALVETEST_PICTURE_4};
 
 
+QString g_bookmark_vrs_check[VRS_VISUAL_INSPECTION_ITEMS_NUM][3]={
+    {BOOKMARK_VRS_CHECK_ITEMS_1_0, BOOKMARK_VRS_CHECK_ITEMS_1_1, BOOKMARK_VRS_CHECK_ITEMS_1_2},
+    {BOOKMARK_VRS_CHECK_ITEMS_2_0, BOOKMARK_VRS_CHECK_ITEMS_2_1, BOOKMARK_VRS_CHECK_ITEMS_2_2},
+    {BOOKMARK_VRS_CHECK_ITEMS_3_0, BOOKMARK_VRS_CHECK_ITEMS_3_1, BOOKMARK_VRS_CHECK_ITEMS_3_2},
+    {BOOKMARK_VRS_CHECK_ITEMS_4_0, BOOKMARK_VRS_CHECK_ITEMS_4_1, BOOKMARK_VRS_CHECK_ITEMS_4_2},
+    {BOOKMARK_VRS_CHECK_ITEMS_5_0, BOOKMARK_VRS_CHECK_ITEMS_5_1, BOOKMARK_VRS_CHECK_ITEMS_5_2},
+    {BOOKMARK_VRS_CHECK_ITEMS_6_0, BOOKMARK_VRS_CHECK_ITEMS_6_1, BOOKMARK_VRS_CHECK_ITEMS_6_2},
+    {BOOKMARK_VRS_CHECK_ITEMS_7_0, BOOKMARK_VRS_CHECK_ITEMS_7_1, BOOKMARK_VRS_CHECK_ITEMS_7_2},
+    {BOOKMARK_VRS_CHECK_ITEMS_8_0, BOOKMARK_VRS_CHECK_ITEMS_8_1, BOOKMARK_VRS_CHECK_ITEMS_8_2}
+};
+
+QString g_bookmark_bls_check[BLS_VISUAL_INSPECTION_ITEMS_NUM][3]={
+    {BOOKMARK_BLS_CHECK_ITEMS_1_0, BOOKMARK_BLS_CHECK_ITEMS_1_1, BOOKMARK_BLS_CHECK_ITEMS_1_2},
+    {BOOKMARK_BLS_CHECK_ITEMS_2_0, BOOKMARK_BLS_CHECK_ITEMS_2_1, BOOKMARK_BLS_CHECK_ITEMS_2_2},
+    {BOOKMARK_BLS_CHECK_ITEMS_3_0, BOOKMARK_BLS_CHECK_ITEMS_3_1, BOOKMARK_BLS_CHECK_ITEMS_3_2},
+    {BOOKMARK_BLS_CHECK_ITEMS_4_0, BOOKMARK_BLS_CHECK_ITEMS_4_1, BOOKMARK_BLS_CHECK_ITEMS_4_2},
+    {BOOKMARK_BLS_CHECK_ITEMS_5_0, BOOKMARK_BLS_CHECK_ITEMS_5_1, BOOKMARK_BLS_CHECK_ITEMS_5_2}
+};
+
 
 #define REPORT_TEMPLATES_PATH  "D:/VaporRecoverySystemTest/Templates/"
-#define REPORT_TEMPLATES_NAME  "report.dotx"
+#define REPORT_TEMPLATES_NAME  "report_v5.dotx"
 
-Report::Report()
+ReportWoker::ReportWoker()
 {
-
+    qRegisterMetaType<Tanker>("Tanker&");
+    qRegisterMetaType<QString>("QString&");
+    //qRegisterMetaType<DeviceInfo>("DeviceInfo&");
 }
 
-Report::~Report()
+ReportWoker::~ReportWoker()
 {
 
 }
+void ReportWoker::init()
+{
+    CoInitializeEx(NULL,COINIT_MULTITHREADED);//解决非主线程无法调用word问题
+    qDebug()<< "ReportWorker init";
+}
 
-bool Report::make_Word(Tanker& tanker, QString word_path, QString pic_dir)
+void ReportWoker::makeReport(Tanker& tanker, QString& word_path, QString& pic_dir)
+{
+    //CoInitializeEx(NULL,COINIT_MULTITHREADED);//解决非主线程无法调用word问题
+    make_report(tanker, word_path, pic_dir);
+    //CoUninitialize();
+}
+
+
+bool ReportWoker::make_report(Tanker& tanker, QString word_path, QString pic_dir)
 {
 
     QTextCodec *codec = QTextCodec::codecForName("UTF-8");
 
     QString text_progress1 = codec->toUnicode("正在生成Word报告,请耐心等待");
+    QString text_progresspdf = codec->toUnicode("正在生成PDF报告,请耐心等待");
     QString text_progress2 = codec->toUnicode("正在保存中...");
     QString text_progress3 = codec->toUnicode("报告已完成");
     QString text_progress4 = codec->toUnicode("打开word失败");
+    QString text_progress5 = codec->toUnicode("报告模板无法使用");
 
     //新建一个word应用程序
     QAxWidget *word = new QAxWidget("Word.Application",0,Qt::MSWindowsOwnDC);
+    if(word->isNull()){
+        emit onProgress(text_progress4);
+        return false;
+    }
+
     //并设置为不可见
     word->setProperty("Visible",false);
     //获取所有的工作文档
@@ -59,8 +100,18 @@ bool Report::make_Word(Tanker& tanker, QString word_path, QString pic_dir)
     //documents->dynamicCall("Add(QString)",QString::fromLocal8Bit("D:\Code\QTapps\build-valve_testing-Desktop_Qt_5_15_2_MinGW_32_bit-Debug\debug\test1.dotx"));
     //获取当前激活的文档
     QAxObject *document = word->querySubObject("ActiveDocument");
+    if(document->isNull()){
+        emit onProgress(text_progress5);
+        return false;
+    }
 
-    emit onProgress(text_progress1);
+    if(word_path.contains(".pdf")){
+       emit onProgress(text_progresspdf);
+    }else{
+       emit onProgress(text_progress1);
+    }
+
+    QThread::msleep(1000);
 
     //填写全局信息
     //使用单位
@@ -96,6 +147,47 @@ bool Report::make_Word(Tanker& tanker, QString word_path, QString pic_dir)
         bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
     }
 
+    //外观检查项
+    for(int i=0; i<VRS_VISUAL_INSPECTION_ITEMS_NUM; i++){
+        int check_value = tanker.vrs_results[i];
+        if(check_value > 2 ) check_value = 2;
+        if(check_value < 0 ) check_value = 0;
+        //qDebug()<<g_bookmark_vrs_check[i][check_value];
+
+        bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_vrs_check[i][check_value]);
+        if(!bookmark->isNull())
+        {
+            QChar cc = 0x2611;
+            QString sText;
+            sText.insert(0, cc);
+            //int volume = m_tank.m_comparts[i].m_volume;
+            //QString sText=codec->toUnicode(QString::number(comp.m_volume).toStdString().c_str());                          //此处为替换内容
+            //qDebug()<<"sText";
+
+            bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
+            bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
+        }
+    }
+
+    for(int i=0; i<BLS_VISUAL_INSPECTION_ITEMS_NUM; i++){
+        int check_value = tanker.bls_results[i];
+        if(check_value > 2 ) check_value = 2;
+        if(check_value < 0 ) check_value = 0;
+        qDebug()<<g_bookmark_bls_check[i][check_value];
+        bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_bls_check[i][check_value]);
+        if(!bookmark->isNull())
+        {
+            QChar cc = 0x2611;
+            QString sText;
+            sText.insert(0, cc);
+            //int volume = m_tank.m_comparts[i].m_volume;
+            //QString sText=codec->toUnicode(QString::number(comp.m_volume).toStdString().c_str());                          //此处为替换内容
+            //qDebug()<<sText;
+            bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
+            bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
+        }
+    }
+
     //填写每仓容量
    for(int i=0; i< tanker.compartment_num; i++){
 
@@ -396,400 +488,41 @@ bool Report::make_Word(Tanker& tanker, QString word_path, QString pic_dir)
    }
 
    //将文件保存为PDF,
-   qDebug()<<"start save Word file ";
-   emit onProgress(text_progress2);
-
-   document->dynamicCall("SaveAs(const QString&))",QDir::toNativeSeparators(word_path));
-
-   document->dynamicCall("Close (boolean)",false);
-   word->dynamicCall("Quit()");
-
-   emit onProgress(text_progress3);
-   QThread::msleep(300);
-   emit onProgress("close");
+  // qDebug()<<"start save Word file ";
 
-   return true;
+    emit onProgress(text_progress2);
+    QThread::msleep(1000);
 
+    if(word_path.contains(".pdf")){
 
-}
+        qDebug()<<"start save PDF file ";
 
-bool Report::make_PDF(Tanker& tanker, QString word_path, QString pic_dir)
-{
-    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
+        //如果文件已经存在了,不删掉,会有问题
+        QFile file_bak(word_path);
+        if(file_bak.exists()){
+            file_bak.remove();
+        }
 
-    QString text_progress1 = codec->toUnicode("正在生成PDF报告,请耐心等待");
-    QString text_progress2 = codec->toUnicode("正在保存中...");
-    QString text_progress3 = codec->toUnicode("报告已完成");
-    QString text_progress4 = codec->toUnicode("打开word失败");
+        QVariant OutputFileName(word_path);
+        QVariant ExportFormat(17);      //17是pdf
+        QVariant OpenAfterExport(false); //保存后是否自动打开
 
-    //新建一个word应用程序
-    QAxWidget *word = new QAxWidget("Word.Application",0,Qt::MSWindowsOwnDC);
-    //并设置为不可见
-    word->setProperty("Visible",false);
-    //获取所有的工作文档
-    QAxObject *documents = word->querySubObject("Documents");
-    //以test2.dot为模板新建一个文档
-    documents->dynamicCall("Add(QString)",QString(REPORT_TEMPLATES_PATH)+QString(REPORT_TEMPLATES_NAME));
-    //documents->dynamicCall("Add(QString)",QString::fromLocal8Bit("D:\Code\QTapps\build-valve_testing-Desktop_Qt_5_15_2_MinGW_32_bit-Debug\debug\test1.dotx"));
-    //获取当前激活的文档
-    QAxObject *document = word->querySubObject("ActiveDocument");
+        document->querySubObject("ExportAsFixedFormat(const QVariant&,const QVariant&,const QVariant&)",
+                                 OutputFileName,
+                                 ExportFormat,
+                                 OpenAfterExport);
 
-    emit onProgress(text_progress1);
-
-    //填写全局信息
-    //使用单位
-    QAxObject *bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_COMPANYNAME);
-    if(!bookmark->isNull())
-    {
-        //QChar cc = 0x2611;
-        QString str = tanker.companyname_str;
-        //str.insert(0, cc);
-        QString sText=codec->toUnicode(str.toStdString().c_str());                          //此处为替换内容
-        qDebug()<<sText;
-        bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-        bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
+    }else {
+        qDebug()<<"start save Word file ";
+        document->dynamicCall("SaveAs(const QString&))",QDir::toNativeSeparators(word_path));
     }
 
-    //车牌
-    bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_CARPLATE);
-    if(!bookmark->isNull())
-    {
-        QString sText=codec->toUnicode(tanker.licenseplate_str.toStdString().c_str());                          //此处为替换内容
-        qDebug()<<sText;
-        bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-        bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
-    }
-
-    //仓数
-    bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_COMPARTMENT_NUM);
-    if(!bookmark->isNull())
-    {
-        QString sText=codec->toUnicode(QString::number(tanker.compartment_num).toStdString().c_str());                          //此处为替换内容
-        qDebug()<<sText;
-        bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-        bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
-    }
-
-    //填写每仓容量
-   for(int i=0; i< tanker.compartment_num; i++){
-
-       Compartment& comp = tanker.get_compartment(i);
-       bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_volume[i]);
-       if(!bookmark->isNull())
-       {
-           //int volume = m_tank.m_comparts[i].m_volume;
-           QString sText=codec->toUnicode(QString::number(comp.m_volume).toStdString().c_str());                          //此处为替换内容
-           qDebug()<<sText;
-           bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-           bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
-       }
-
-       if(comp.m_result.sys_test_ok){  //完成了系统密闭性检测
-
-           //密闭性检测的初始表压
-           bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_systest_startpressure[i]);
-           if(!bookmark->isNull())
-           {
-               //int volume = m_tank.m_comparts[i].m_volume;
-               QString pressure_str = QString("%1").arg(comp.m_result.sysstart_pressure, 4,'f',2,QLatin1Char('0'));
-               QString sText=codec->toUnicode(pressure_str.toStdString().c_str());                          //此处为替换内容
-               qDebug()<<sText;
-               bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-               bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
-           }
-
-           //5 min之后的表压
-           bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_systest_endpressure[i]);
-           if(!bookmark->isNull())
-           {
-               //int volume = m_tank.m_comparts[i].m_volume;
-               QString pressure_str = QString("%1").arg(comp.m_result.sysend_pressure, 4,'f',2,QLatin1Char('0'));
-               QString sText=codec->toUnicode(pressure_str.toStdString().c_str());                          //此处为替换内容
-               qDebug()<<sText;
-               bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-               bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
-           }
-
-           //压力变化值
-           bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_systest_deltapressure[i]);
-           if(!bookmark->isNull())
-           {
-               //int volume = m_tank.m_comparts[i].m_volume;
-               QString pressure_str = QString("%1").arg(comp.m_result.delta_sys_pressure, 4,'f',2,QLatin1Char('0'));
-               QString sText=codec->toUnicode(pressure_str.toStdString().c_str());                          //此处为替换内容
-               qDebug()<<sText;
-               bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-               bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
-           }
-
-           //压力变化限值
-           bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_systest_threshold[i]);
-           if(!bookmark->isNull())
-           {
-               //int volume = m_tank.m_comparts[i].m_volume;
-               QString pressure_str = QString("%1").arg(comp.m_standarditem.system_threshold, 4,'f',2,QLatin1Char('0'));
-               QString sText=codec->toUnicode(pressure_str.toStdString().c_str());                          //此处为替换内容
-               qDebug()<<sText;
-               bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-               bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
-           }
-
-       }
-
-       if(comp.m_result.valve_test_ok){  //完成了阀门密闭性检测
-
-           //密闭性检测的初始表压
-           bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_valvetest_startpressure[i]);
-           if(!bookmark->isNull())
-           {
-               //int volume = m_tank.m_comparts[i].m_volume;
-               QString pressure_str = QString("%1").arg(comp.m_result.valvestart_pressure, 4,'f',2,QLatin1Char('0'));
-               QString sText=codec->toUnicode(pressure_str.toStdString().c_str());                          //此处为替换内容
-               qDebug()<<sText;
-               bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-               bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
-           }
-
-           //5 min之后的表压
-           bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_valvetest_endpressure[i]);
-           if(!bookmark->isNull())
-           {
-               //int volume = m_tank.m_comparts[i].m_volume;
-               QString pressure_str = QString("%1").arg(comp.m_result.valveend_pressure, 4,'f',2,QLatin1Char('0'));
-               QString sText=codec->toUnicode(pressure_str.toStdString().c_str());                          //此处为替换内容
-               qDebug()<<sText;
-               bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-               bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
-           }
-
-           //压力变化值
-           bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_valvetest_deltapressure[i]);
-           if(!bookmark->isNull())
-           {
-               //int volume = m_tank.m_comparts[i].m_volume;
-               QString pressure_str = QString("%1").arg(comp.m_result.delta_valve_pressure, 4,'f',2,QLatin1Char('0'));
-               QString sText=codec->toUnicode(pressure_str.toStdString().c_str());                          //此处为替换内容
-               qDebug()<<sText;
-               bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-               bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
-           }
-
-           //压力变化限值
-           bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_valvetest_threshold[i]);
-           if(!bookmark->isNull())
-           {
-               //int volume = m_tank.m_comparts[i].m_volume;
-               QString pressure_str = QString("%1").arg(comp.m_standarditem.valve_threshold, 4,'f',2,QLatin1Char('0'));
-               QString sText=codec->toUnicode(pressure_str.toStdString().c_str());                          //此处为替换内容
-               qDebug()<<sText;
-               bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-               bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
-           }
-
-       }
-
-
-       if(comp.m_bpicReady){
-
-           // 获取文档中名字为pic的标签
-           QAxObject*bookmark_pic=document->querySubObject("Bookmarks(QVariant)",g_bookmark_test_picture[i]);
-            // 选中标签,将图片插入到标签位置
-           if(!bookmark_pic->isNull())
-           {
-               QString pic_path_str = pic_dir+tanker.licenseplate_str+"_"+QString::number(i+1)+"_all.jpg";
-               qDebug()<<pic_path_str;
-
-               QFile file(pic_path_str);
-
-               if(file.exists()){
-
-                   bookmark_pic->dynamicCall("Select(void)");
-                   QAxObject *range;
-                   range = bookmark_pic->querySubObject("Range");
-                   QVariant tmp = range->asVariant();
-
-                   QList<QVariant>qList;
-                   qList<<QVariant(pic_path_str);
-                   qList<<QVariant(false);
-                   qList<<QVariant(true);
-                   qList<<tmp;
-
-                   QAxObject *Inlineshapes = document->querySubObject("InlineShapes");
-                   Inlineshapes->dynamicCall("AddPicture(const QString&, QVariant, QVariant ,QVariant)",qList);
-               }
-
-
-           }
-
-           bookmark_pic=document->querySubObject("Bookmarks(QVariant)",g_bookmark_systest_picture[i]);
-            // 选中标签,将图片插入到标签位置
-           if(!bookmark_pic->isNull())
-           {
-               QString pic_path_str = pic_dir+tanker.licenseplate_str+"_"+QString::number(i+1)+"_sys.jpg";
-               qDebug()<<pic_path_str;
-
-               QFile file(pic_path_str);
-               if(file.exists()){
-                   bookmark_pic->dynamicCall("Select(void)");
-                   QAxObject *range;
-                   range = bookmark_pic->querySubObject("Range");
-                   QVariant tmp = range->asVariant();
-
-                   QList<QVariant>qList;
-                   qList<<QVariant(pic_path_str);
-                   qList<<QVariant(false);
-                   qList<<QVariant(true);
-                   qList<<tmp;
-
-                   QAxObject *Inlineshapes = document->querySubObject("InlineShapes");
-                   Inlineshapes->dynamicCall("AddPicture(const QString&, QVariant, QVariant ,QVariant)",qList);
-               }
-
-           }
-
-           bookmark_pic=document->querySubObject("Bookmarks(QVariant)",g_bookmark_valvetest_picture[i]);
-            // 选中标签,将图片插入到标签位置
-           if(!bookmark_pic->isNull())
-           {
-               QString pic_path_str = pic_dir+tanker.licenseplate_str+"_"+QString::number(i+1)+"_valve.jpg";
-               qDebug()<<pic_path_str;
-
-               QFile file(pic_path_str);
-               if(file.exists()){
-
-                   bookmark_pic->dynamicCall("Select(void)");
-                   QAxObject *range;
-                   range = bookmark_pic->querySubObject("Range");
-                   QVariant tmp = range->asVariant();
-
-                   QList<QVariant>qList;
-                   qList<<QVariant(pic_path_str);
-                   qList<<QVariant(false);
-                   qList<<QVariant(true);
-                   qList<<tmp;
-
-                   QAxObject *Inlineshapes = document->querySubObject("InlineShapes");
-                   Inlineshapes->dynamicCall("AddPicture(const QString&, QVariant, QVariant ,QVariant)",qList);
-               }
-
-           }
-
-       }
-   }
-
-
-   //检测结果
-   bool systest_pass = true;
-   bool valvetest_pass = true;
-   int  nosys_testcount = 0;
-   int  novalve_testcount =0;
-   for(int i=0; i<tanker.compartment_num; i++){
-
-       Compartment& comp = tanker.get_compartment(i);
-       if(comp.m_result.sys_test_ok){
-           if(!comp.m_result.pass_sys_pressure){
-               systest_pass = false;
-           }
-       }else{
-           nosys_testcount++;
-       }
-
-       if(comp.m_result.valve_test_ok){
-           if(!comp.m_result.pass_valve_pressure){
-               valvetest_pass = false;
-           }
-       }else{
-           novalve_testcount++;
-       }
-   }
-
-   if(nosys_testcount != tanker.compartment_num){
-       //系统检测结果
-       bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_SYSTEST_RESULT);
-       if(!bookmark->isNull())
-       {
-           QString sText;
-           if(systest_pass){
-               sText=codec->toUnicode("合格");
-           }else{
-               sText=codec->toUnicode("超标");
-           }
-           qDebug()<<sText;
-           bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-           bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
-       }
-   }
-
-
-   if(novalve_testcount != tanker.compartment_num){
-       //阀门检测结果
-       bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_VALVETEST_RESULT);
-       if(!bookmark->isNull())
-       {
-           QString sText;
-           if(valvetest_pass){
-               sText=codec->toUnicode("合格");
-           }else{
-               sText=codec->toUnicode("超标");
-           }
-
-           bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-           bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
-       }
-   }
-
-
-   //检测日期
-   QDate date(QDate::currentDate());
-
-   bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_DATE_YEAR);
-   if(!bookmark->isNull())
-   {
-       QString sText=codec->toUnicode(QString::number(date.year()).toStdString().c_str());                          //此处为替换内容
-       qDebug()<<sText;
-       bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-       bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
-   }
-
-   bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_DATE_MONTH);
-   if(!bookmark->isNull())
-   {
-       QString sText=codec->toUnicode(QString::number(date.month()).toStdString().c_str());                          //此处为替换内容
-       qDebug()<<sText;
-       bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-       bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
-   }
-
-   bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_DATE_DAY);
-   if(!bookmark->isNull())
-   {
-       QString sText=codec->toUnicode(QString::number(date.day()).toStdString().c_str());                          //此处为替换内容
-       qDebug()<<sText;
-       bookmark->dynamicCall("Select(void)");                             //选中要选中的区域
-       bookmark->querySubObject("Range")->setProperty("Text",sText);      //进行替换操作
-   }
-
-   //将文件保存为PDF,
-   qDebug()<<"start save PDF file ";
-   emit onProgress(text_progress2);
-
-   //document->dynamicCall("SaveAs(const QString&))",QDir::toNativeSeparators(word_path));
-
-   QVariant OutputFileName(word_path);
-   QVariant ExportFormat(17);      //17是pdf
-   QVariant OpenAfterExport(false); //保存后是否自动打开
-
-
-   document->querySubObject("ExportAsFixedFormat(const QVariant&,const QVariant&,const QVariant&)",
-                            OutputFileName,
-                            ExportFormat,
-                            OpenAfterExport);
 
    document->dynamicCall("Close (boolean)",false);
    word->dynamicCall("Quit()");
 
    emit onProgress(text_progress3);
-   QThread::msleep(300);
+   QThread::msleep(1000);
    emit onProgress("close");
 
    return true;
@@ -797,3 +530,37 @@ bool Report::make_PDF(Tanker& tanker, QString word_path, QString pic_dir)
 
 }
 
+
+Report::Report()
+{
+    qRegisterMetaType<Tanker>("Tanker&");
+    qRegisterMetaType<QString>("QString&");
+
+    ReportWoker *worker = new ReportWoker;
+    worker->moveToThread(&workerThread);
+    connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
+    connect(this, &Report::operate, worker, &ReportWoker::makeReport);
+    //connect(this, &Report::operateself, worker, &ReportWoker::makeselfReport);
+    connect(this, &Report::oninit, worker, &ReportWoker::init);
+    connect(worker, &ReportWoker::onProgress, this, &Report::recvProgress);
+    workerThread.start();
+
+    emit oninit();
+}
+
+Report::~Report()
+{
+    workerThread.quit();
+    workerThread.wait();
+}
+
+void Report::recvProgress(const QString& qstr)
+{
+    emit onProgress(qstr);
+}
+
+void Report::makeReport(Tanker& tanker, QString word_path, QString pic_dir)
+{
+    emit operate(tanker, word_path, pic_dir);
+}
+

+ 103 - 4
report.h

@@ -2,7 +2,8 @@
 #define REPORT_H
 
 #include "tank.h"
-
+#include<QThread>
+#include<windows.h>
 
 #define BOOKMARK_COMPANYNAME        "bm_companyname"
 #define BOOKMARK_CARPLATE           "bm_carplate"
@@ -13,6 +14,61 @@
 #define BOOKMARK_VOLUME_3    "bm_volume_3"
 #define BOOKMARK_VOLUME_4    "bm_volume_4"
 
+// bookmarks for  vrs inspection check
+#define BOOKMARK_VRS_CHECK_ITEMS_1_0   "bm_vrs_check_1_0"
+#define BOOKMARK_VRS_CHECK_ITEMS_1_1   "bm_vrs_check_1_1"
+#define BOOKMARK_VRS_CHECK_ITEMS_1_2   "bm_vrs_check_1_2"
+
+#define BOOKMARK_VRS_CHECK_ITEMS_2_0   "bm_vrs_check_2_0"
+#define BOOKMARK_VRS_CHECK_ITEMS_2_1   "bm_vrs_check_2_1"
+#define BOOKMARK_VRS_CHECK_ITEMS_2_2   "bm_vrs_check_2_2"
+
+#define BOOKMARK_VRS_CHECK_ITEMS_3_0   "bm_vrs_check_3_0"
+#define BOOKMARK_VRS_CHECK_ITEMS_3_1   "bm_vrs_check_3_1"
+#define BOOKMARK_VRS_CHECK_ITEMS_3_2   "bm_vrs_check_3_2"
+
+#define BOOKMARK_VRS_CHECK_ITEMS_4_0   "bm_vrs_check_4_0"
+#define BOOKMARK_VRS_CHECK_ITEMS_4_1   "bm_vrs_check_4_1"
+#define BOOKMARK_VRS_CHECK_ITEMS_4_2   "bm_vrs_check_4_2"
+
+#define BOOKMARK_VRS_CHECK_ITEMS_5_0   "bm_vrs_check_5_0"
+#define BOOKMARK_VRS_CHECK_ITEMS_5_1   "bm_vrs_check_5_1"
+#define BOOKMARK_VRS_CHECK_ITEMS_5_2   "bm_vrs_check_5_2"
+
+#define BOOKMARK_VRS_CHECK_ITEMS_6_0   "bm_vrs_check_6_0"
+#define BOOKMARK_VRS_CHECK_ITEMS_6_1   "bm_vrs_check_6_1"
+#define BOOKMARK_VRS_CHECK_ITEMS_6_2   "bm_vrs_check_6_2"
+
+#define BOOKMARK_VRS_CHECK_ITEMS_7_0   "bm_vrs_check_7_0"
+#define BOOKMARK_VRS_CHECK_ITEMS_7_1   "bm_vrs_check_7_1"
+#define BOOKMARK_VRS_CHECK_ITEMS_7_2   "bm_vrs_check_7_2"
+
+#define BOOKMARK_VRS_CHECK_ITEMS_8_0   "bm_vrs_check_8_0"
+#define BOOKMARK_VRS_CHECK_ITEMS_8_1   "bm_vrs_check_8_1"
+#define BOOKMARK_VRS_CHECK_ITEMS_8_2   "bm_vrs_check_8_2"
+
+// bookmarks for  bls inspection check
+#define BOOKMARK_BLS_CHECK_ITEMS_1_0   "bm_bls_check_1_0"
+#define BOOKMARK_BLS_CHECK_ITEMS_1_1   "bm_bls_check_1_1"
+#define BOOKMARK_BLS_CHECK_ITEMS_1_2   "bm_bls_check_1_2"
+
+#define BOOKMARK_BLS_CHECK_ITEMS_2_0   "bm_bls_check_2_0"
+#define BOOKMARK_BLS_CHECK_ITEMS_2_1   "bm_bls_check_2_1"
+#define BOOKMARK_BLS_CHECK_ITEMS_2_2   "bm_bls_check_2_2"
+
+#define BOOKMARK_BLS_CHECK_ITEMS_3_0   "bm_bls_check_3_0"
+#define BOOKMARK_BLS_CHECK_ITEMS_3_1   "bm_bls_check_3_1"
+#define BOOKMARK_BLS_CHECK_ITEMS_3_2   "bm_bls_check_3_2"
+
+#define BOOKMARK_BLS_CHECK_ITEMS_4_0   "bm_bls_check_4_0"
+#define BOOKMARK_BLS_CHECK_ITEMS_4_1   "bm_bls_check_4_1"
+#define BOOKMARK_BLS_CHECK_ITEMS_4_2   "bm_bls_check_4_2"
+
+#define BOOKMARK_BLS_CHECK_ITEMS_5_0   "bm_bls_check_5_0"
+#define BOOKMARK_BLS_CHECK_ITEMS_5_1   "bm_bls_check_5_1"
+#define BOOKMARK_BLS_CHECK_ITEMS_5_2   "bm_bls_check_5_2"
+
+
 #define BOOKMARK_SYSTEST_STARTPRESSURE_1    "bm_sysPS_1"
 #define BOOKMARK_SYSTEST_STARTPRESSURE_2    "bm_sysPS_2"
 #define BOOKMARK_SYSTEST_STARTPRESSURE_3    "bm_sysPS_3"
@@ -79,7 +135,7 @@
 #define BOOKMARK_VALVETEST_PICTURE_4    "bm_picValve_4"
 
 
-
+/*
 class Report:public QObject
 {
     Q_OBJECT
@@ -87,12 +143,55 @@ public:
     Report();
     ~Report();
 
-    bool make_Word(Tanker& tanker, QString word_path, QString pic_dir);
-    bool make_PDF(Tanker& tanker, QString word_path, QString pic_dir);
+    bool make_report(Tanker& tanker, QString word_path, QString pic_dir);
 signals:
     void onProgress(QString qstr);
 
 };
 
+*/
+
+class ReportWoker:public QObject
+{
+    Q_OBJECT
+public:
+    ReportWoker();
+    ~ReportWoker();
+
+public slots:
+    void makeReport(Tanker& tanker, QString& word_path, QString& pic_dir);
+    void init();
+
+signals:
+    void onProgress(const QString&);
+    //void onResult(const int);
+
+private:
+    bool make_report(Tanker& tanker, QString word_path, QString pic_dir);
+};
+
+
+class Report :public QObject
+{
+    Q_OBJECT
+    QThread workerThread;
+public:
+    Report();
+    ~Report();
+
+    void makeReport(Tanker& tanker, QString word_path, QString pic_dir);
+
+public slots:
+    //void handleResults(const int);
+    void recvProgress(const QString& qstr);
+
+signals:
+    void operate(Tanker& , QString& , QString& );
+    void onProgress(QString);
+    void oninit();
+
+};
+
+
 
 #endif // REPORT_H

+ 1 - 1
tank.cpp

@@ -215,7 +215,7 @@ bool Tanker::set_item_result(const QString& jsonStr )
         for(int i=0; i<BLS_VISUAL_INSPECTION_ITEMS_NUM; i++){
            if(item_name_str == bls_visual_inspection_items[i]){
                if(value >= RESULT_QUALIFIED && value <= RESULT_NOITEM){
-                   vrs_results[i] = value;
+                   bls_results[i] = value;
                    qDebug() << "item_name:" << item_name_str;
                    qDebug() << "value:" << value;
                }