report.cpp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551
  1. #include "report.h"
  2. #include <QDebug>
  3. #include <QAxObject>
  4. #include <QAxWidget>
  5. #include <QTextCodec>
  6. #include <QThread>
  7. #include <QFile>
  8. #include <QDir>
  9. #include <QMetaType>
  10. QString g_bookmark_volume[MAX_COMPARTMENT_NUM] = {BOOKMARK_VOLUME_1,BOOKMARK_VOLUME_2,BOOKMARK_VOLUME_3, BOOKMARK_VOLUME_4};
  11. QString g_bookmark_systest_startpressure[MAX_COMPARTMENT_NUM] = {BOOKMARK_SYSTEST_STARTPRESSURE_1,BOOKMARK_SYSTEST_STARTPRESSURE_2,BOOKMARK_SYSTEST_STARTPRESSURE_3, BOOKMARK_SYSTEST_STARTPRESSURE_4};
  12. QString g_bookmark_systest_endpressure[MAX_COMPARTMENT_NUM] = {BOOKMARK_SYSTEST_ENDPRESSURE_1,BOOKMARK_SYSTEST_ENDPRESSURE_2,BOOKMARK_SYSTEST_ENDPRESSURE_3, BOOKMARK_SYSTEST_ENDPRESSURE_4};
  13. QString g_bookmark_systest_deltapressure[MAX_COMPARTMENT_NUM] = {BOOKMARK_SYSTEST_DELTAPRESSURE_1,BOOKMARK_SYSTEST_DELTAPRESSURE_2,BOOKMARK_SYSTEST_DELTAPRESSURE_3, BOOKMARK_SYSTEST_DELTAPRESSURE_4};
  14. QString g_bookmark_systest_threshold[MAX_COMPARTMENT_NUM] = {BOOKMARK_SYSTEST_THRESHOLD_1,BOOKMARK_SYSTEST_THRESHOLD_2,BOOKMARK_SYSTEST_THRESHOLD_3, BOOKMARK_SYSTEST_THRESHOLD_4};
  15. QString g_bookmark_valvetest_startpressure[MAX_COMPARTMENT_NUM] = {BOOKMARK_VALVETEST_STARTPRESSURE_1,BOOKMARK_VALVETEST_STARTPRESSURE_2,BOOKMARK_VALVETEST_STARTPRESSURE_3, BOOKMARK_VALVETEST_STARTPRESSURE_4};
  16. QString g_bookmark_valvetest_endpressure[MAX_COMPARTMENT_NUM] = {BOOKMARK_VALVETEST_ENDPRESSURE_1,BOOKMARK_VALVETEST_ENDPRESSURE_2,BOOKMARK_VALVETEST_ENDPRESSURE_3, BOOKMARK_VALVETEST_ENDPRESSURE_4};
  17. QString g_bookmark_valvetest_deltapressure[MAX_COMPARTMENT_NUM] = {BOOKMARK_VALVETEST_DELTAPRESSURE_1,BOOKMARK_VALVETEST_DELTAPRESSURE_2,BOOKMARK_VALVETEST_DELTAPRESSURE_3, BOOKMARK_VALVETEST_DELTAPRESSURE_4};
  18. QString g_bookmark_valvetest_threshold[MAX_COMPARTMENT_NUM] = {BOOKMARK_VALVETEST_THRESHOLD_1,BOOKMARK_VALVETEST_THRESHOLD_2,BOOKMARK_VALVETEST_THRESHOLD_3, BOOKMARK_VALVETEST_THRESHOLD_4};
  19. QString g_bookmark_test_picture[MAX_COMPARTMENT_NUM] = {BOOKMARK_TEST_PICTURE_1,BOOKMARK_TEST_PICTURE_2,BOOKMARK_TEST_PICTURE_3, BOOKMARK_TEST_PICTURE_4};
  20. QString g_bookmark_systest_picture[MAX_COMPARTMENT_NUM] = {BOOKMARK_SYSTEST_PICTURE_1,BOOKMARK_SYSTEST_PICTURE_2,BOOKMARK_SYSTEST_PICTURE_3, BOOKMARK_SYSTEST_PICTURE_4};
  21. QString g_bookmark_valvetest_picture[MAX_COMPARTMENT_NUM] = {BOOKMARK_VALVETEST_PICTURE_1,BOOKMARK_VALVETEST_PICTURE_2,BOOKMARK_VALVETEST_PICTURE_3, BOOKMARK_VALVETEST_PICTURE_4};
  22. QString g_bookmark_vrs_check[VRS_VISUAL_INSPECTION_ITEMS_NUM][3]={
  23. {BOOKMARK_VRS_CHECK_ITEMS_1_0, BOOKMARK_VRS_CHECK_ITEMS_1_1, BOOKMARK_VRS_CHECK_ITEMS_1_2},
  24. {BOOKMARK_VRS_CHECK_ITEMS_2_0, BOOKMARK_VRS_CHECK_ITEMS_2_1, BOOKMARK_VRS_CHECK_ITEMS_2_2},
  25. {BOOKMARK_VRS_CHECK_ITEMS_3_0, BOOKMARK_VRS_CHECK_ITEMS_3_1, BOOKMARK_VRS_CHECK_ITEMS_3_2},
  26. {BOOKMARK_VRS_CHECK_ITEMS_4_0, BOOKMARK_VRS_CHECK_ITEMS_4_1, BOOKMARK_VRS_CHECK_ITEMS_4_2},
  27. {BOOKMARK_VRS_CHECK_ITEMS_5_0, BOOKMARK_VRS_CHECK_ITEMS_5_1, BOOKMARK_VRS_CHECK_ITEMS_5_2},
  28. {BOOKMARK_VRS_CHECK_ITEMS_6_0, BOOKMARK_VRS_CHECK_ITEMS_6_1, BOOKMARK_VRS_CHECK_ITEMS_6_2},
  29. {BOOKMARK_VRS_CHECK_ITEMS_7_0, BOOKMARK_VRS_CHECK_ITEMS_7_1, BOOKMARK_VRS_CHECK_ITEMS_7_2},
  30. {BOOKMARK_VRS_CHECK_ITEMS_8_0, BOOKMARK_VRS_CHECK_ITEMS_8_1, BOOKMARK_VRS_CHECK_ITEMS_8_2}
  31. };
  32. QString g_bookmark_bls_check[BLS_VISUAL_INSPECTION_ITEMS_NUM][3]={
  33. {BOOKMARK_BLS_CHECK_ITEMS_1_0, BOOKMARK_BLS_CHECK_ITEMS_1_1, BOOKMARK_BLS_CHECK_ITEMS_1_2},
  34. {BOOKMARK_BLS_CHECK_ITEMS_2_0, BOOKMARK_BLS_CHECK_ITEMS_2_1, BOOKMARK_BLS_CHECK_ITEMS_2_2},
  35. {BOOKMARK_BLS_CHECK_ITEMS_3_0, BOOKMARK_BLS_CHECK_ITEMS_3_1, BOOKMARK_BLS_CHECK_ITEMS_3_2},
  36. {BOOKMARK_BLS_CHECK_ITEMS_4_0, BOOKMARK_BLS_CHECK_ITEMS_4_1, BOOKMARK_BLS_CHECK_ITEMS_4_2},
  37. {BOOKMARK_BLS_CHECK_ITEMS_5_0, BOOKMARK_BLS_CHECK_ITEMS_5_1, BOOKMARK_BLS_CHECK_ITEMS_5_2}
  38. };
  39. #define REPORT_TEMPLATES_PATH "D:/VaporRecoverySystemTest/Templates/"
  40. #define REPORT_TEMPLATES_NAME "report_v2.dotx"
  41. ReportWoker::ReportWoker()
  42. {
  43. qRegisterMetaType<Tanker>("Tanker&");
  44. qRegisterMetaType<QString>("QString&");
  45. }
  46. ReportWoker::~ReportWoker()
  47. {
  48. }
  49. void ReportWoker::makeReport(Tanker& tanker, QString& word_path, QString& pic_dir)
  50. {
  51. make_report(tanker, word_path, pic_dir);
  52. }
  53. bool ReportWoker::make_report(Tanker& tanker, QString word_path, QString pic_dir)
  54. {
  55. QTextCodec *codec = QTextCodec::codecForName("UTF-8");
  56. QString text_progress1 = codec->toUnicode("正在生成Word报告,请耐心等待");
  57. QString text_progress2 = codec->toUnicode("正在保存中...");
  58. QString text_progress3 = codec->toUnicode("报告已完成");
  59. QString text_progress4 = codec->toUnicode("打开word失败");
  60. QString text_progress5 = codec->toUnicode("报告模板无法使用");
  61. //新建一个word应用程序
  62. QAxWidget *word = new QAxWidget("Word.Application",0,Qt::MSWindowsOwnDC);
  63. if(word->isNull()){
  64. emit onProgress(text_progress4);
  65. return false;
  66. }
  67. //并设置为不可见
  68. word->setProperty("Visible",false);
  69. //获取所有的工作文档
  70. QAxObject *documents = word->querySubObject("Documents");
  71. //以test2.dot为模板新建一个文档
  72. documents->dynamicCall("Add(QString)",QString(REPORT_TEMPLATES_PATH)+QString(REPORT_TEMPLATES_NAME));
  73. //documents->dynamicCall("Add(QString)",QString::fromLocal8Bit("D:\Code\QTapps\build-valve_testing-Desktop_Qt_5_15_2_MinGW_32_bit-Debug\debug\test1.dotx"));
  74. //获取当前激活的文档
  75. QAxObject *document = word->querySubObject("ActiveDocument");
  76. if(document->isNull()){
  77. emit onProgress(text_progress5);
  78. return false;
  79. }
  80. emit onProgress(text_progress1);
  81. QThread::msleep(1000);
  82. //填写全局信息
  83. //使用单位
  84. QAxObject *bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_COMPANYNAME);
  85. if(!bookmark->isNull())
  86. {
  87. //QChar cc = 0x2611;
  88. QString str = tanker.companyname_str;
  89. //str.insert(0, cc);
  90. QString sText=codec->toUnicode(str.toStdString().c_str()); //此处为替换内容
  91. qDebug()<<sText;
  92. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  93. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  94. }
  95. //车牌
  96. bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_CARPLATE);
  97. if(!bookmark->isNull())
  98. {
  99. QString sText=codec->toUnicode(tanker.licenseplate_str.toStdString().c_str()); //此处为替换内容
  100. qDebug()<<sText;
  101. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  102. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  103. }
  104. //仓数
  105. bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_COMPARTMENT_NUM);
  106. if(!bookmark->isNull())
  107. {
  108. QString sText=codec->toUnicode(QString::number(tanker.compartment_num).toStdString().c_str()); //此处为替换内容
  109. qDebug()<<sText;
  110. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  111. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  112. }
  113. //外观检查项
  114. for(int i=0; i<VRS_VISUAL_INSPECTION_ITEMS_NUM; i++){
  115. int check_value = tanker.vrs_results[i];
  116. if(check_value > 2 ) check_value = 2;
  117. if(check_value < 0 ) check_value = 0;
  118. //qDebug()<<g_bookmark_vrs_check[i][check_value];
  119. bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_vrs_check[i][check_value]);
  120. if(!bookmark->isNull())
  121. {
  122. QChar cc = 0x2611;
  123. QString sText;
  124. sText.insert(0, cc);
  125. //int volume = m_tank.m_comparts[i].m_volume;
  126. //QString sText=codec->toUnicode(QString::number(comp.m_volume).toStdString().c_str()); //此处为替换内容
  127. //qDebug()<<"sText";
  128. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  129. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  130. }
  131. }
  132. for(int i=0; i<BLS_VISUAL_INSPECTION_ITEMS_NUM; i++){
  133. int check_value = tanker.bls_results[i];
  134. if(check_value > 2 ) check_value = 2;
  135. if(check_value < 0 ) check_value = 0;
  136. //qDebug()<<g_bookmark_bls_check[i][check_value];
  137. bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_bls_check[i][check_value]);
  138. if(!bookmark->isNull())
  139. {
  140. QChar cc = 0x2611;
  141. QString sText;
  142. sText.insert(0, cc);
  143. //int volume = m_tank.m_comparts[i].m_volume;
  144. //QString sText=codec->toUnicode(QString::number(comp.m_volume).toStdString().c_str()); //此处为替换内容
  145. //qDebug()<<sText;
  146. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  147. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  148. }
  149. }
  150. //填写每仓容量
  151. for(int i=0; i< tanker.compartment_num; i++){
  152. Compartment& comp = tanker.get_compartment(i);
  153. bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_volume[i]);
  154. if(!bookmark->isNull())
  155. {
  156. //int volume = m_tank.m_comparts[i].m_volume;
  157. QString sText=codec->toUnicode(QString::number(comp.m_volume).toStdString().c_str()); //此处为替换内容
  158. qDebug()<<sText;
  159. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  160. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  161. }
  162. if(comp.m_result.sys_test_finished){ //完成了系统密闭性检测
  163. //密闭性检测的初始表压
  164. bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_systest_startpressure[i]);
  165. if(!bookmark->isNull())
  166. {
  167. //int volume = m_tank.m_comparts[i].m_volume;
  168. QString pressure_str = QString("%1").arg(comp.m_result.sysstart_pressure, 4,'f',2,QLatin1Char('0'));
  169. QString sText=codec->toUnicode(pressure_str.toStdString().c_str()); //此处为替换内容
  170. qDebug()<<sText;
  171. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  172. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  173. }
  174. //5 min之后的表压
  175. bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_systest_endpressure[i]);
  176. if(!bookmark->isNull())
  177. {
  178. //int volume = m_tank.m_comparts[i].m_volume;
  179. QString pressure_str = QString("%1").arg(comp.m_result.sysend_pressure, 4,'f',2,QLatin1Char('0'));
  180. QString sText=codec->toUnicode(pressure_str.toStdString().c_str()); //此处为替换内容
  181. qDebug()<<sText;
  182. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  183. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  184. }
  185. //压力变化值
  186. bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_systest_deltapressure[i]);
  187. if(!bookmark->isNull())
  188. {
  189. //int volume = m_tank.m_comparts[i].m_volume;
  190. QString pressure_str = QString("%1").arg(comp.m_result.delta_sys_pressure, 4,'f',2,QLatin1Char('0'));
  191. QString sText=codec->toUnicode(pressure_str.toStdString().c_str()); //此处为替换内容
  192. qDebug()<<sText;
  193. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  194. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  195. }
  196. //压力变化限值
  197. bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_systest_threshold[i]);
  198. if(!bookmark->isNull())
  199. {
  200. //int volume = m_tank.m_comparts[i].m_volume;
  201. QString pressure_str = QString("%1").arg(comp.m_standarditem.system_threshold, 4,'f',2,QLatin1Char('0'));
  202. QString sText=codec->toUnicode(pressure_str.toStdString().c_str()); //此处为替换内容
  203. qDebug()<<sText;
  204. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  205. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  206. }
  207. }
  208. if(comp.m_result.valve_test_finished){ //完成了阀门密闭性检测
  209. //密闭性检测的初始表压
  210. bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_valvetest_startpressure[i]);
  211. if(!bookmark->isNull())
  212. {
  213. //int volume = m_tank.m_comparts[i].m_volume;
  214. QString pressure_str = QString("%1").arg(comp.m_result.valvestart_pressure, 4,'f',2,QLatin1Char('0'));
  215. QString sText=codec->toUnicode(pressure_str.toStdString().c_str()); //此处为替换内容
  216. qDebug()<<sText;
  217. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  218. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  219. }
  220. //5 min之后的表压
  221. bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_valvetest_endpressure[i]);
  222. if(!bookmark->isNull())
  223. {
  224. //int volume = m_tank.m_comparts[i].m_volume;
  225. QString pressure_str = QString("%1").arg(comp.m_result.valveend_pressure, 4,'f',2,QLatin1Char('0'));
  226. QString sText=codec->toUnicode(pressure_str.toStdString().c_str()); //此处为替换内容
  227. qDebug()<<sText;
  228. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  229. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  230. }
  231. //压力变化值
  232. bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_valvetest_deltapressure[i]);
  233. if(!bookmark->isNull())
  234. {
  235. //int volume = m_tank.m_comparts[i].m_volume;
  236. QString pressure_str = QString("%1").arg(comp.m_result.delta_valve_pressure, 4,'f',2,QLatin1Char('0'));
  237. QString sText=codec->toUnicode(pressure_str.toStdString().c_str()); //此处为替换内容
  238. qDebug()<<sText;
  239. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  240. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  241. }
  242. //压力变化限值
  243. bookmark = document->querySubObject("Bookmarks(QVariant)",g_bookmark_valvetest_threshold[i]);
  244. if(!bookmark->isNull())
  245. {
  246. //int volume = m_tank.m_comparts[i].m_volume;
  247. QString pressure_str = QString("%1").arg(comp.m_standarditem.valve_threshold, 4,'f',2,QLatin1Char('0'));
  248. QString sText=codec->toUnicode(pressure_str.toStdString().c_str()); //此处为替换内容
  249. qDebug()<<sText;
  250. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  251. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  252. }
  253. }
  254. if(comp.m_testfinished){
  255. // 获取文档中名字为pic的标签
  256. QAxObject*bookmark_pic=document->querySubObject("Bookmarks(QVariant)",g_bookmark_test_picture[i]);
  257. // 选中标签,将图片插入到标签位置
  258. if(!bookmark_pic->isNull())
  259. {
  260. QString pic_path_str = pic_dir+tanker.licenseplate_str+"_"+QString::number(i+1)+"_all.jpg";
  261. qDebug()<<pic_path_str;
  262. QFile file(pic_path_str);
  263. if(file.exists()){
  264. bookmark_pic->dynamicCall("Select(void)");
  265. QAxObject *range;
  266. range = bookmark_pic->querySubObject("Range");
  267. QVariant tmp = range->asVariant();
  268. QList<QVariant>qList;
  269. qList<<QVariant(pic_path_str);
  270. qList<<QVariant(false);
  271. qList<<QVariant(true);
  272. qList<<tmp;
  273. QAxObject *Inlineshapes = document->querySubObject("InlineShapes");
  274. Inlineshapes->dynamicCall("AddPicture(const QString&, QVariant, QVariant ,QVariant)",qList);
  275. }
  276. }
  277. bookmark_pic=document->querySubObject("Bookmarks(QVariant)",g_bookmark_systest_picture[i]);
  278. // 选中标签,将图片插入到标签位置
  279. if(!bookmark_pic->isNull())
  280. {
  281. QString pic_path_str = pic_dir+tanker.licenseplate_str+"_"+QString::number(i+1)+"_sys.jpg";
  282. qDebug()<<pic_path_str;
  283. QFile file(pic_path_str);
  284. if(file.exists()){
  285. bookmark_pic->dynamicCall("Select(void)");
  286. QAxObject *range;
  287. range = bookmark_pic->querySubObject("Range");
  288. QVariant tmp = range->asVariant();
  289. QList<QVariant>qList;
  290. qList<<QVariant(pic_path_str);
  291. qList<<QVariant(false);
  292. qList<<QVariant(true);
  293. qList<<tmp;
  294. QAxObject *Inlineshapes = document->querySubObject("InlineShapes");
  295. Inlineshapes->dynamicCall("AddPicture(const QString&, QVariant, QVariant ,QVariant)",qList);
  296. }
  297. }
  298. bookmark_pic=document->querySubObject("Bookmarks(QVariant)",g_bookmark_valvetest_picture[i]);
  299. // 选中标签,将图片插入到标签位置
  300. if(!bookmark_pic->isNull())
  301. {
  302. QString pic_path_str = pic_dir+tanker.licenseplate_str+"_"+QString::number(i+1)+"_valve.jpg";
  303. qDebug()<<pic_path_str;
  304. QFile file(pic_path_str);
  305. if(file.exists()){
  306. bookmark_pic->dynamicCall("Select(void)");
  307. QAxObject *range;
  308. range = bookmark_pic->querySubObject("Range");
  309. QVariant tmp = range->asVariant();
  310. QList<QVariant>qList;
  311. qList<<QVariant(pic_path_str);
  312. qList<<QVariant(false);
  313. qList<<QVariant(true);
  314. qList<<tmp;
  315. QAxObject *Inlineshapes = document->querySubObject("InlineShapes");
  316. Inlineshapes->dynamicCall("AddPicture(const QString&, QVariant, QVariant ,QVariant)",qList);
  317. }
  318. }
  319. }
  320. }
  321. //检测结果
  322. bool systest_pass = true;
  323. bool valvetest_pass = true;
  324. int nosys_testcount = 0;
  325. int novalve_testcount =0;
  326. for(int i=0; i<tanker.compartment_num; i++){
  327. Compartment& comp = tanker.get_compartment(i);
  328. if(comp.m_result.sys_test_finished){
  329. if(!comp.m_result.pass_sys_pressure){
  330. systest_pass = false;
  331. }
  332. }else{
  333. nosys_testcount++;
  334. }
  335. if(comp.m_result.valve_test_finished){
  336. if(!comp.m_result.pass_valve_pressure){
  337. valvetest_pass = false;
  338. }
  339. }else{
  340. novalve_testcount++;
  341. }
  342. }
  343. if(nosys_testcount != tanker.compartment_num){
  344. //系统检测结果
  345. QChar cc = 0x2611;
  346. QString sText;
  347. sText.insert(0, cc);
  348. if(systest_pass){
  349. bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_SYSTEST_PASS);
  350. if(!bookmark->isNull())
  351. {
  352. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  353. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  354. }
  355. }else{
  356. bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_SYSTEST_EXCEEDED);
  357. if(!bookmark->isNull())
  358. {
  359. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  360. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  361. }
  362. }
  363. }
  364. if(novalve_testcount != tanker.compartment_num){
  365. //阀门检测结果
  366. QChar cc = 0x2611;
  367. QString sText;
  368. sText.insert(0, cc);
  369. if(valvetest_pass){
  370. bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_VALVETEST_PASS);
  371. if(!bookmark->isNull())
  372. {
  373. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  374. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  375. }
  376. }else{
  377. bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_VALVETEST_EXCEEDED);
  378. if(!bookmark->isNull())
  379. {
  380. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  381. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  382. }
  383. }
  384. }
  385. //检测日期
  386. QDate date(QDate::currentDate());
  387. bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_DATE_YEAR);
  388. if(!bookmark->isNull())
  389. {
  390. QString sText=codec->toUnicode(QString::number(date.year()).toStdString().c_str()); //此处为替换内容
  391. qDebug()<<sText;
  392. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  393. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  394. }
  395. bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_DATE_MONTH);
  396. if(!bookmark->isNull())
  397. {
  398. QString sText=codec->toUnicode(QString::number(date.month()).toStdString().c_str()); //此处为替换内容
  399. qDebug()<<sText;
  400. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  401. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  402. }
  403. bookmark = document->querySubObject("Bookmarks(QVariant)",BOOKMARK_DATE_DAY);
  404. if(!bookmark->isNull())
  405. {
  406. QString sText=codec->toUnicode(QString::number(date.day()).toStdString().c_str()); //此处为替换内容
  407. qDebug()<<sText;
  408. bookmark->dynamicCall("Select(void)"); //选中要选中的区域
  409. bookmark->querySubObject("Range")->setProperty("Text",sText); //进行替换操作
  410. }
  411. //将文件保存为PDF,
  412. emit onProgress(text_progress2);
  413. QThread::msleep(1000);
  414. if(word_path.contains(".pdf")){
  415. qDebug()<<"start save PDF file ";
  416. QVariant OutputFileName(word_path);
  417. QVariant ExportFormat(17); //17是pdf
  418. QVariant OpenAfterExport(false); //保存后是否自动打开
  419. document->querySubObject("ExportAsFixedFormat(const QVariant&,const QVariant&,const QVariant&)",
  420. OutputFileName,
  421. ExportFormat,
  422. OpenAfterExport);
  423. }else {
  424. qDebug()<<"start save Word file ";
  425. document->dynamicCall("SaveAs(const QString&))",QDir::toNativeSeparators(word_path));
  426. }
  427. document->dynamicCall("Close (boolean)",false);
  428. word->dynamicCall("Quit()");
  429. emit onProgress(text_progress3);
  430. QThread::msleep(1000);
  431. emit onProgress("close");
  432. return true;
  433. }
  434. Report::Report()
  435. {
  436. qRegisterMetaType<Tanker>("Tanker&");
  437. qRegisterMetaType<QString>("QString&");
  438. ReportWoker *worker = new ReportWoker;
  439. worker->moveToThread(&workerThread);
  440. connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
  441. connect(this, &Report::operate, worker, &ReportWoker::makeReport);
  442. connect(worker, &ReportWoker::onProgress, this, &Report::recvProgress);
  443. workerThread.start();
  444. }
  445. Report::~Report()
  446. {
  447. workerThread.quit();
  448. workerThread.wait();
  449. }
  450. void Report::recvProgress(const QString& qstr)
  451. {
  452. emit onProgress(qstr);
  453. }
  454. void Report::makeReport(Tanker& tanker, QString word_path, QString pic_dir)
  455. {
  456. emit operate(tanker, word_path, pic_dir);
  457. }