report.cpp 25 KB

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