report.cpp 25 KB

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