formwoolfinished.cpp 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909
  1. #include "formwoolfinished.h"
  2. #include "ui_formwoolfinished.h"
  3. #include "sncdatabase.h"
  4. #include "respdlresultfile.h"
  5. #include "zip.h"
  6. FormWoolFinished::FormWoolFinished(QWidget *parent) :
  7. QWidget(parent),
  8. ui(new Ui::FormWoolFinished)
  9. {
  10. ui->setupUi(this);
  11. initVariables();
  12. initUI();
  13. setTableWidgetNoData(ui->tableWidget);
  14. setDetailNoData();
  15. }
  16. void FormWoolFinished::setClientID(QString clientID)
  17. {
  18. m_clientID = clientID;
  19. }
  20. void FormWoolFinished::setClientName(QString clientName)
  21. {
  22. m_clientName = clientName;
  23. }
  24. void FormWoolFinished::setHost(QString host, QString port)
  25. {
  26. m_host = host;
  27. m_port = port;
  28. // m_wool->setHost(m_host,m_port);
  29. }
  30. FormWoolFinished::~FormWoolFinished()
  31. {
  32. m_wool->abort();
  33. m_movieBig->stop();
  34. delete m_movieBig;
  35. delete m_wool;
  36. delete ui;
  37. qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")\
  38. <<"FormWool.FormWoolFinished Destroyed.";
  39. }
  40. void FormWoolFinished::initVariables()
  41. {
  42. m_movieBig = new QMovie(":/fetchfromserver.gif");
  43. m_movieBig->start();
  44. m_keys<<"batchid"<<"isdeliver"<<"ispass"<<"detail"<<"resulttj"<<"submittime"<<"finishtime"\
  45. <<"finishcount"<<"settlefee"<<"giftfee";
  46. m_headers<<""<<"状态"<<"是否放行"<<"原始文件"<<"详细统计"<<"提交时间"<<"完成时间"\
  47. <<"已检测"<<"费用"<<"赠送消耗"<<"下载";
  48. m_state = NotLogin;
  49. m_curLtfid = "";
  50. m_curQryid = "";
  51. m_lastLtfid = "";
  52. m_wool = new WSWool();
  53. }
  54. void FormWoolFinished::setAccountInfo(QMap<QString, QString> info)
  55. {
  56. m_account = info;
  57. QString ssoHash = info.value("ssohash");
  58. QString userCode = info.value("usercode");
  59. QString userHash = info.value("userhash");
  60. if(!ssoHash.isEmpty())
  61. {
  62. if(!userHash.isEmpty())
  63. {
  64. m_state = LoginOk;
  65. setTableWidgetSyncData(ui->tableWidget);
  66. }
  67. else
  68. {
  69. if(!userCode.isEmpty())
  70. {
  71. m_state = LoginError;
  72. }
  73. else
  74. {
  75. m_state = NotBind;
  76. }
  77. }
  78. }
  79. else
  80. {
  81. m_state = NotLogin;
  82. }
  83. if(m_state!=LoginOk)
  84. {
  85. setTableWidgetNoData(ui->tableWidget);
  86. setDetailNoData();
  87. }
  88. }
  89. void FormWoolFinished::initUI()
  90. {
  91. ui->tableWidget->setColumnCount(m_headers.size());
  92. ui->tableWidget->setHorizontalHeaderLabels(m_headers);
  93. ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
  94. ui->tableWidget->setShowGrid(false);
  95. ui->tableWidget->setAlternatingRowColors(true);
  96. ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
  97. ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
  98. ui->tableWidget->verticalHeader()->setVisible(false);
  99. ui->tableWidget->horizontalHeader()->setStyleSheet("font:12px");
  100. ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Fixed);
  101. ui->tableWidget->verticalHeader()->setResizeMode(QHeaderView::Fixed);
  102. ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  103. ui->tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
  104. ui->tableWidget->verticalHeader()->setFixedWidth(30);
  105. ui->tableWidget->setSortingEnabled(true);
  106. int col = 0;
  107. ui->tableWidget->setColumnWidth(col++,20);
  108. ui->tableWidget->setColumnWidth(col++,30);
  109. ui->tableWidget->setColumnWidth(col++,0);
  110. ui->tableWidget->setColumnWidth(col++,110);
  111. ui->tableWidget->setColumnWidth(col++,0);//
  112. ui->tableWidget->setColumnWidth(col++,140);
  113. ui->tableWidget->setColumnWidth(col++,140);
  114. ui->tableWidget->setColumnWidth(col++,73);
  115. ui->tableWidget->setColumnWidth(col++,61);
  116. ui->tableWidget->setColumnWidth(col++,60);
  117. ui->tableWidget->setColumnWidth(col++,40);
  118. ui->widgetExactCheck->setProperty("class","lowframe2");
  119. //初始化预检测 实号、空、停、关机对应的显示图片exact_result_bg.jpg
  120. QPixmap exact_result_bg(":/exact_result_bg.jpg");
  121. int nHeight = exact_result_bg.height()/10;
  122. int nWidth = exact_result_bg.width();
  123. ui->labelBarQwld->setPixmap(exact_result_bg.copy(QRect(0 , 0 * nHeight, nWidth, nHeight)));
  124. ui->labelBarLaji->setPixmap(exact_result_bg.copy(QRect(0 , 1 * nHeight, nWidth, nHeight)));
  125. ui->labelBarShiHao->setPixmap(exact_result_bg.copy(QRect(0 , 2 * nHeight, nWidth, nHeight)));
  126. ui->labelBarKong->setPixmap(exact_result_bg.copy(QRect(0 , 3 * nHeight, nWidth, nHeight)));
  127. ui->labelBarTing->setPixmap(exact_result_bg.copy(QRect(0 , 4 * nHeight, nWidth, nHeight)));
  128. ui->labelBarGuan->setPixmap(exact_result_bg.copy(QRect(0 , 5 * nHeight, nWidth, nHeight)));
  129. ui->labelBarHrxz->setPixmap(exact_result_bg.copy(QRect(0 , 6 * nHeight, nWidth, nHeight)));
  130. ui->labelBarWfjt->setPixmap(exact_result_bg.copy(QRect(0 , 7 * nHeight, nWidth, nHeight)));
  131. ui->labelBarLdtx->setPixmap(exact_result_bg.copy(QRect(0 , 8 * nHeight, nWidth, nHeight)));
  132. ui->labelBarOther->setPixmap(exact_result_bg.copy(QRect(0 , 9 * nHeight, nWidth, nHeight)));
  133. //初始化图例图标实号、空、停、关机对应的显示图片sample_small.jpg
  134. QPixmap sample_small(":/sample_small.jpg");
  135. nHeight = sample_small.height();
  136. nWidth = sample_small.width()/10;
  137. ui->labelSampleQwdr->setPixmap(sample_small.copy(QRect(0 * nWidth , 0 , nWidth, nHeight)));
  138. ui->labelSampleLaji->setPixmap(sample_small.copy(QRect(1 * nWidth , 0 , nWidth, nHeight)));
  139. ui->labelSampleShiHao->setPixmap(sample_small.copy(QRect(2 * nWidth , 0 , nWidth, nHeight)));
  140. ui->labelSampleKong->setPixmap(sample_small.copy(QRect(3 * nWidth , 0 , nWidth, nHeight)));
  141. ui->labelSampleTing->setPixmap(sample_small.copy(QRect(4 * nWidth , 0 , nWidth, nHeight)));
  142. ui->labelSampleGuan->setPixmap(sample_small.copy(QRect(5 * nWidth , 0 , nWidth, nHeight)));
  143. ui->labelSampleHrxz->setPixmap(sample_small.copy(QRect(6 * nWidth , 0 , nWidth, nHeight)));
  144. ui->labelSampleWfjt->setPixmap(sample_small.copy(QRect(7 * nWidth , 0 , nWidth, nHeight)));
  145. ui->labelSampleLdtx->setPixmap(sample_small.copy(QRect(8 * nWidth , 0 , nWidth, nHeight)));
  146. ui->labelSampleOther->setPixmap(sample_small.copy(QRect(9 * nWidth , 0 , nWidth, nHeight)));
  147. ui->pushButtonDel->setVisible(false);
  148. }
  149. void FormWoolFinished::setTableWidgetNoData(QTableWidget *tableWidget)
  150. {
  151. prepareTableWidgetCells(tableWidget,8);
  152. tableWidget->setEnabled(false);
  153. QTableWidgetItem *item = new QTableWidgetItem();
  154. item->setTextAlignment(Qt::AlignLeft|Qt::AlignVCenter);
  155. item->setText("暂无信息");
  156. tableWidget->setItem(4,6,item);
  157. }
  158. void FormWoolFinished::setDetailNoData()
  159. {
  160. ui->labelShiHao->setText("实号");
  161. ui->labelKong->setText("空号");
  162. ui->labelTing->setText("停机");
  163. ui->labelGuan->setText("关机");
  164. ui->labelWfjt->setText("无法接通");
  165. ui->labelLdtx->setText("来电提醒");
  166. ui->labelHrxz->setText("呼入限制");
  167. ui->labelQwld->setText("请勿来电");
  168. ui->labelLaji->setText("垃圾号码");
  169. ui->labelOther->setText("其他");
  170. //设置上述状态比例的默认宽度为0
  171. ui->labelBarShiHao->setFixedWidth(0);
  172. ui->labelBarKong->setFixedWidth(0);
  173. ui->labelBarTing->setFixedWidth(0);
  174. ui->labelBarGuan->setFixedWidth(0);
  175. ui->labelBarWfjt->setFixedWidth(0);
  176. ui->labelBarLdtx->setFixedWidth(0);
  177. ui->labelBarHrxz->setFixedWidth(0);
  178. ui->labelBarQwld->setFixedWidth(0);
  179. ui->labelBarLaji->setFixedWidth(0);
  180. ui->labelBarOther->setFixedWidth(0);
  181. }
  182. void FormWoolFinished::setTableWidgetSyncData(QTableWidget *tableWidget)
  183. {
  184. prepareTableWidgetCells(tableWidget,8);
  185. tableWidget->setEnabled(false);
  186. QLabel *lbl = new QLabel();
  187. QTableWidgetItem *item = new QTableWidgetItem("正在读取...");
  188. lbl->setMovie(m_movieBig);
  189. lbl->setAlignment(Qt::AlignRight);
  190. item->setTextAlignment(Qt::AlignLeft|Qt::AlignVCenter);
  191. tableWidget->setItem(4,6,item);
  192. tableWidget->setCellWidget(4,5,lbl);
  193. }
  194. void FormWoolFinished::prepareTableWidgetCells(QTableWidget *tableWidget, int rows)
  195. {
  196. tableWidget->setRowCount(0);
  197. tableWidget->setRowCount(rows);
  198. }
  199. void FormWoolFinished::fillDataList(QTableWidget *tableWidget,QStringList keys,
  200. QMultiMap<QString, QString> list, int rowCount)
  201. {
  202. setTableWidgetNoData(tableWidget);
  203. if(rowCount==0)
  204. {
  205. return ;
  206. }
  207. prepareTableWidgetCells(tableWidget,rowCount);
  208. tableWidget->setEnabled(true);
  209. for(int row = 0;row < rowCount;row++)
  210. {
  211. QMap<QString,QString> map;
  212. for(int col=0;col<keys.size();col++)
  213. {
  214. QString key = keys.at(col);
  215. QString value = list.values(key).at(row);
  216. map.insert(key,value);
  217. }
  218. for(int col=0;col<keys.size();col++)
  219. {
  220. QString key = keys.at(col);
  221. QString value = list.values(key).at(row);
  222. setCellElement(tableWidget,row,col,key,value,map);
  223. }
  224. }
  225. //添加按钮
  226. for(int row = 0;row < rowCount;row++)
  227. {
  228. QPushButton *button = new QPushButton();
  229. button->setCursor(Qt::PointingHandCursor);
  230. button->setProperty("class","imagebutton");
  231. connect(button,SIGNAL(clicked()),this,SLOT(onSingleDownloadClick()));
  232. ui->tableWidget->setCellWidget(row,tableWidget->columnCount()-1,button);
  233. }
  234. tableWidget->sortByColumn(0);
  235. tableWidget->sortByColumn(0);
  236. }
  237. void FormWoolFinished::setCellElement(QTableWidget *tableWidget, int row, int col,
  238. QString key,QString value,QMap<QString,QString> data)
  239. {
  240. QTableWidgetItem* item = new QTableWidgetItem();
  241. QVariant display = value;
  242. QVariant tooltip = value;
  243. item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
  244. //进行数据翻译
  245. if(key=="batchid")
  246. {
  247. display = "";
  248. tooltip = "";
  249. item->setCheckState(Qt::Unchecked);
  250. }
  251. else if(key=="detail")
  252. {
  253. QStringList info = display.toString().split("\r\n");
  254. QString filename;
  255. if(info.size()>4)
  256. {
  257. if(info.at(4).split(":").size()>1)
  258. {
  259. filename = info.at(4).split(":").at(1);
  260. }
  261. display = filename;
  262. }
  263. item->setTextAlignment(Qt::AlignLeft|Qt::AlignVCenter);
  264. }
  265. else if(key=="finishcount")
  266. {
  267. display = value.toInt();
  268. tooltip = display;
  269. }
  270. else if(key=="settlefee")
  271. {
  272. display = value.toDouble();
  273. tooltip = display;
  274. }
  275. else if(key=="giftfee")
  276. {
  277. display = value.toDouble();
  278. tooltip = display;
  279. }
  280. //设置单元格显示形式,是用item填充还是widget填充
  281. if(key == "isdeliver")
  282. {
  283. delete item;
  284. QLabel *lbl = new QLabel(this);
  285. lbl->setAlignment(Qt::AlignCenter|Qt::AlignHCenter);
  286. lbl->setProperty("value",value);
  287. if(value=="0")
  288. {
  289. QString ispass = data.value("ispass");
  290. if(ispass=="0")
  291. {
  292. lbl->setPixmap(QPixmap(":/task_nopass.png"));
  293. lbl->setToolTip("未放行");
  294. }
  295. else
  296. {
  297. lbl->setPixmap(QPixmap(":/todown.png"));
  298. lbl->setToolTip("未下载");
  299. }
  300. }
  301. else if(value=="1")
  302. {
  303. lbl->setPixmap(QPixmap(":/task_ok.png"));
  304. lbl->setToolTip("已下载");
  305. }
  306. tableWidget->setCellWidget(row,col,lbl);
  307. }
  308. else
  309. {
  310. item->setData(Qt::DisplayRole,display);
  311. item->setData(Qt::UserRole,value);
  312. item->setData(Qt::ToolTipRole,tooltip);
  313. tableWidget->setItem(row,col,item);
  314. }
  315. }
  316. void FormWoolFinished::query(QString dealstatus)
  317. {
  318. QString userCode = m_account.value("usercode");
  319. QMultiMap<QString,QString> list = SNCDataBase::getWoolCheckFinishInfos(userCode,m_clientID,dealstatus);
  320. int cols = list.uniqueKeys().size();
  321. int rows = 0;
  322. if(cols!=0)
  323. rows = list.size()/cols;
  324. if(list.size()==0)
  325. {
  326. setTableWidgetNoData(ui->tableWidget);
  327. setDetailNoData();
  328. return ;
  329. }
  330. QStringList ids;
  331. QString curId;
  332. for(int i=0;i<ui->tableWidget->rowCount();i++)
  333. {
  334. QTableWidgetItem *item = ui->tableWidget->item(i,0);
  335. if(item)
  336. {
  337. if(item->checkState()==Qt::Checked)
  338. {
  339. ids<<item->data(Qt::UserRole).toString();
  340. }
  341. if(item->isSelected())
  342. {
  343. curId = item->data(Qt::UserRole).toString();
  344. }
  345. }
  346. }
  347. fillDataList(ui->tableWidget,m_keys,list,rows);
  348. for(int i=0;i<ui->tableWidget->rowCount();i++)
  349. {
  350. if(curId.isEmpty())
  351. {
  352. ui->tableWidget->selectRow(i);
  353. on_tableWidget_cellClicked(i,0);
  354. ui->tableWidget->setFocus();
  355. break;
  356. }
  357. QTableWidgetItem *item = ui->tableWidget->item(i,0);
  358. if(item)
  359. {
  360. QString id = item->data(Qt::UserRole).toString();
  361. if(curId==id)
  362. {
  363. ui->tableWidget->selectRow(i);
  364. on_tableWidget_cellClicked(i,0);
  365. ui->tableWidget->setFocus();
  366. }
  367. for(int i=0;i<ids.size();i++)
  368. {
  369. if(id==ids.at(i))
  370. {
  371. item->setCheckState(Qt::Checked);
  372. break;
  373. }
  374. }
  375. }
  376. }
  377. }
  378. void FormWoolFinished::showRtnMessage(int row)
  379. {
  380. }
  381. bool FormWoolFinished::addFileToZip(QString zipName, QStringList files)
  382. {
  383. Zip::ErrorCode ec;
  384. Zip uz;
  385. QFile file(zipName);
  386. if(!file.open(QIODevice::WriteOnly)){
  387. return false ;
  388. }
  389. file.close();
  390. ec = uz.createArchive(zipName);
  391. if (ec != Zip::Ok) {
  392. return false;
  393. }
  394. ec = uz.addFiles(files);
  395. if (ec != Zip::Ok) {
  396. uz.closeArchive();
  397. return false;
  398. }
  399. if (uz.closeArchive() != Zip::Ok) {
  400. return false;
  401. }
  402. return true;
  403. }
  404. void FormWoolFinished::displaySelected(QString detail)
  405. {
  406. QStringList list = detail.split("\r\n");
  407. qDebug()<<list.size()<<list;
  408. int i=0;
  409. int k = 0;
  410. if(list.size()==10)
  411. {
  412. k=0;
  413. }
  414. else
  415. {
  416. setDetailNoData();
  417. return;
  418. }
  419. QStringList rates;
  420. for(int i=0;i<list.size();i++)
  421. {
  422. QRegExp rx("\\((.+)\\)");
  423. int pos = rx.indexIn(list.at(i));
  424. if(pos>0)
  425. {
  426. QString match = rx.capturedTexts().at(1);
  427. rates<<match.replace("%","");
  428. }
  429. else
  430. {
  431. rates<<"0";
  432. }
  433. }
  434. i = k;
  435. ui->labelKong->setText(list.at(i++));
  436. ui->labelTing->setText(list.at(i++));
  437. ui->labelGuan->setText(list.at(i++));
  438. ui->labelHrxz->setText(list.at(i++));
  439. ui->labelWfjt->setText(list.at(i++));
  440. ui->labelLdtx->setText(list.at(i++));
  441. ui->labelShiHao->setText(list.at(i++));
  442. ui->labelQwld->setText(list.at(i++));
  443. ui->labelLaji->setText(list.at(i++));
  444. ui->labelOther->setText(list.at(i++));
  445. i = k;
  446. int barLength = 650;
  447. ui->labelBarKong->setFixedWidth(rates.at(i++).toDouble()*barLength/100);
  448. ui->labelBarTing->setFixedWidth(rates.at(i++).toDouble()*barLength/100);
  449. ui->labelBarGuan->setFixedWidth(rates.at(i++).toDouble()*barLength/100);
  450. ui->labelBarWfjt->setFixedWidth(rates.at(i++).toDouble()*barLength/100);
  451. ui->labelBarHrxz->setFixedWidth(rates.at(i++).toDouble()*barLength/100);
  452. ui->labelBarLdtx->setFixedWidth(rates.at(i++).toDouble()*barLength/100);
  453. ui->labelBarShiHao->setFixedWidth(rates.at(i++).toDouble()*barLength/100);
  454. ui->labelBarQwld->setFixedWidth(rates.at(i++).toDouble()*barLength/100);
  455. ui->labelBarLaji->setFixedWidth(rates.at(i++).toDouble()*barLength/100);
  456. ui->labelBarOther->setFixedWidth(rates.at(i++).toDouble()*barLength/100);
  457. }
  458. void FormWoolFinished::onDataUpdated()
  459. {
  460. if(ui->radioButtonAll->isChecked())
  461. {
  462. query("");
  463. }
  464. else if(ui->radioButtonUndown->isChecked())
  465. {
  466. query("0");
  467. }
  468. else if(ui->radioButtonDown->isChecked())
  469. {
  470. query("1");
  471. }
  472. }
  473. QString FormWoolFinished::getSingleZipFileName(QString id)
  474. {
  475. QFileDialog::Options options;
  476. QString selectedFilter;
  477. QString exportDir = SNCDataBase::getExportDir();
  478. QString defaultZipFileName = m_clientName + "_" + id ;
  479. QString saveZipFileName = QFileDialog::getSaveFileName(this,"另存为",exportDir + "\\" + defaultZipFileName,
  480. tr("ZIP Files (*.zip)"),
  481. &selectedFilter,
  482. options);
  483. if(!saveZipFileName.isEmpty())
  484. {
  485. QFileInfo fileInfo(saveZipFileName);
  486. exportDir = fileInfo.absolutePath();
  487. SNCDataBase::updateExportDir(exportDir);
  488. }
  489. return saveZipFileName;
  490. }
  491. void FormWoolFinished::on_pushButtonDownload_clicked()
  492. {
  493. if(!chkAccountState(m_state))
  494. return;
  495. int selected = 0;
  496. for(int i=0;i<ui->tableWidget->rowCount();i++)
  497. {
  498. QTableWidgetItem *item = ui->tableWidget->item(i,0);
  499. if(item)
  500. {
  501. if(item->checkState()==Qt::Checked)
  502. selected++;
  503. }
  504. }
  505. if(selected==0)
  506. {
  507. QMessageBox::critical(this,"提示","请选择要下载的数据!",QMessageBox::Ok);
  508. return ;
  509. }
  510. QString saveZipFileName = getPackZipFileName();
  511. if(saveZipFileName.isEmpty())
  512. return ;
  513. QDir dir;
  514. if(!dir.exists(QDir::tempPath()+"/speednumcube"))
  515. {
  516. dir.mkdir(QDir::tempPath()+"/speednumcube");
  517. }
  518. QString tmpDir = QDir::tempPath()+"/speednumcube/";
  519. QStringList files;
  520. ui->pushButtonDownload->setEnabled(false);
  521. this->setCursor(Qt::WaitCursor);
  522. for(int i=0;i<ui->tableWidget->rowCount();i++)
  523. {
  524. QTableWidgetItem *item = ui->tableWidget->item(i,0);
  525. if(item->checkState()==Qt::Checked)
  526. {
  527. QString id = item->data(Qt::UserRole).toString();
  528. QString fileName = tmpDir + id + ".zip";
  529. QFile::remove(fileName);
  530. if(download(id,fileName,false))
  531. {
  532. files.append(fileName);
  533. }
  534. }
  535. }
  536. this->setCursor(Qt::ArrowCursor);
  537. if(files.size()>0)
  538. {
  539. if(addFileToZip(saveZipFileName,files))
  540. {
  541. QMessageBox::information(this,"结果",QString("您选择%1个文件,%2个文件下载成功!")\
  542. .arg(selected).arg(files.size()),QMessageBox::Ok);
  543. QFileInfo fileinfo(saveZipFileName);
  544. SNCDataBase::updateExportDir(fileinfo.absolutePath());
  545. }
  546. else
  547. {
  548. QMessageBox::critical(this,"结果","检测结果文件下载失败!",QMessageBox::Ok);
  549. }
  550. }
  551. else
  552. {
  553. QMessageBox::critical(this,"结果","检测结果文件下载失败!",QMessageBox::Ok);
  554. }
  555. ui->pushButtonDownload->setEnabled(true);
  556. }
  557. void FormWoolFinished::on_tableWidget_cellClicked(int row, int column)
  558. {
  559. if(row>=0&&column>=0)
  560. {
  561. QString detail = ui->tableWidget->item(row,4)->data(Qt::UserRole).toString();
  562. displaySelected(detail);
  563. }
  564. }
  565. void FormWoolFinished::on_radioButtonAll_clicked()
  566. {
  567. if(!chkAccountState(m_state))
  568. return;
  569. if(ui->radioButtonAll->isChecked())
  570. {
  571. query("");
  572. }
  573. else if(ui->radioButtonUndown->isChecked())
  574. {
  575. query("0");
  576. }
  577. else if(ui->radioButtonDown->isChecked())
  578. {
  579. query("1");
  580. }
  581. }
  582. void FormWoolFinished::on_radioButtonUndown_clicked()
  583. {
  584. if(!chkAccountState(m_state))
  585. return;
  586. on_radioButtonAll_clicked();
  587. }
  588. void FormWoolFinished::on_radioButtonDown_clicked()
  589. {
  590. if(!chkAccountState(m_state))
  591. return;
  592. on_radioButtonAll_clicked();
  593. }
  594. void FormWoolFinished::on_checkBoxAll_clicked()
  595. {
  596. Qt::CheckState state;
  597. state = ui->checkBoxAll->checkState();
  598. for(int i=0;i<ui->tableWidget->rowCount();i++)
  599. {
  600. QTableWidgetItem *item = ui->tableWidget->item(i,0);
  601. if(item)
  602. {
  603. item->setCheckState(state);
  604. }
  605. }
  606. }
  607. void FormWoolFinished::on_tableWidget_cellDoubleClicked(int row, int column)
  608. {
  609. QString id = "";
  610. QString ispass = "";
  611. QTableWidgetItem *item;
  612. item = ui->tableWidget->item(row,0);
  613. if(item)
  614. {
  615. id = item->data(Qt::UserRole).toString();
  616. }
  617. item = ui->tableWidget->item(row,2);
  618. if(item)
  619. {
  620. ispass = item->data(Qt::UserRole).toString();
  621. }
  622. if(id.isEmpty())
  623. {
  624. QMessageBox::critical(this,"结果","未能获取有效的文件编号!",QMessageBox::Ok);
  625. return ;
  626. }
  627. if(ispass!="1")
  628. {
  629. QMessageBox::critical(this,"结果","单子还未放行!",QMessageBox::Ok);
  630. return ;
  631. }
  632. QString saveFile = getSingleZipFileName(id);
  633. if(saveFile.isEmpty())
  634. return ;
  635. this->setCursor(Qt::WaitCursor);
  636. download(id,saveFile,true);
  637. this->setCursor(Qt::ArrowCursor);
  638. }
  639. bool FormWoolFinished::download(QString srvID,QString saveZipFileName,bool show)
  640. {
  641. QString cachePath = SNCDataBase::getWoolCachePath(srvID);
  642. bool iscached = false;
  643. if(!cachePath.isEmpty())
  644. {
  645. if(QFile::exists(cachePath))
  646. {
  647. iscached = true;
  648. }
  649. }
  650. if(iscached)
  651. {
  652. return downloadFromLocal(saveZipFileName,cachePath,show);
  653. }
  654. else
  655. {
  656. return downloadFromServer(saveZipFileName,srvID,show);
  657. }
  658. }
  659. bool FormWoolFinished::downloadFromLocal(QString saveFileName,QString cacheFile,bool show)
  660. {
  661. QFile::copy(cacheFile,saveFileName);
  662. if(show)
  663. QMessageBox::information(this,"提示","下载成功!",QMessageBox::Ok);
  664. return true;
  665. }
  666. bool FormWoolFinished::downloadFromServer(QString saveFileName, QString srvID, bool show)
  667. {
  668. QString userHash = m_account.value("userhash");
  669. QString json = m_wool->dlResultFile(srvID,userHash);
  670. RespDlResultFile response(json);
  671. if(response.getRtnCode()==2)
  672. {
  673. QString fileContent = response.getFileContent();
  674. QByteArray array = QByteArray::fromBase64(fileContent.toAscii());
  675. QFile file(saveFileName);
  676. file.open(QIODevice::WriteOnly);
  677. file.write(array);
  678. file.close();
  679. QString cachPath = cacheDownloadFile(saveFileName);
  680. SNCDataBase::updateWoolCachePath(srvID,cachPath);
  681. if(show)
  682. QMessageBox::information(this,"结果","单子下载成功",QMessageBox::Ok);
  683. return true;
  684. }
  685. else
  686. {
  687. if(show)
  688. QMessageBox::critical(this,"结果",response.getRtnMemo(),QMessageBox::Ok);
  689. return false;
  690. }
  691. }
  692. QString FormWoolFinished::cacheDownloadFile(QString fileName)
  693. {
  694. QString userCode = m_account.value("usercode");
  695. QString date = QDate::currentDate().toString("yyyyMM");
  696. QString cachePath = QCoreApplication::applicationDirPath()+\
  697. QString("/../data/%1/cache/Wool/download/%2/").arg(userCode).arg(date);
  698. QDir dir;
  699. dir.mkpath(cachePath);
  700. QFileInfo fileinfo(fileName);
  701. QFile::copy(fileName,cachePath + fileinfo.fileName());
  702. return cachePath + fileinfo.fileName();
  703. }
  704. bool FormWoolFinished::chkAccountState(AccountLoginState state)
  705. {
  706. bool ret = false;
  707. switch(state)
  708. {
  709. case NotLogin:
  710. QMessageBox::critical(this,"提示","您现在还没有登录系统,请登录后再操作!",QMessageBox::Ok);
  711. break;
  712. case NotBind:
  713. QMessageBox::critical(this,"提示","此项服务尚未开通,请开通后再操作!",QMessageBox::Ok);
  714. break;
  715. case LoginError:
  716. QMessageBox::critical(this,"提示","此项服务暂时无法连接,请稍候重试!",QMessageBox::Ok);
  717. break;
  718. default:
  719. ret = true;
  720. }
  721. return ret;
  722. }
  723. QString FormWoolFinished::getPackZipFileName()
  724. {
  725. QFileDialog::Options options;
  726. QString selectedFilter;
  727. QString exportDir = SNCDataBase::getExportDir();
  728. QString defaultZipFileName = QString(m_clientName);
  729. int count = 0;
  730. QString str ="";
  731. QString download = "";
  732. for(int i=0;i<ui->tableWidget->rowCount();i++)
  733. {
  734. QTableWidgetItem *item = ui->tableWidget->item(i,0);
  735. if(item)
  736. {
  737. if(item->checkState()==Qt::Checked)
  738. {
  739. count++;
  740. str += "_" + item->text();
  741. QTableWidgetItem *item2 = ui->tableWidget->item(i,2);
  742. if(item2)
  743. {
  744. if(item2->data(Qt::UserRole).toString()!="1")
  745. {
  746. download += item->data(Qt::UserRole).toString()+ " ";
  747. }
  748. }
  749. }
  750. }
  751. }
  752. if(count==0)
  753. return "";
  754. if(!download.isEmpty())
  755. {
  756. QMessageBox::critical(this,"提示","您选择的单子" + download + "现在还没有放行,暂时无法下载,请稍候再试!",QMessageBox::Ok);
  757. return "";
  758. }
  759. defaultZipFileName += "_" + QString::number(count) + str ;
  760. QString saveZipFileName = QFileDialog::getSaveFileName(this,"另存为",exportDir + "\\" + defaultZipFileName,
  761. tr("ZIP Files (*.zip)"),
  762. &selectedFilter,
  763. options);
  764. if(!saveZipFileName.isEmpty())
  765. {
  766. QFileInfo fileInfo(saveZipFileName);
  767. exportDir = fileInfo.absolutePath();
  768. SNCDataBase::updateExportDir(exportDir);
  769. }
  770. return saveZipFileName;
  771. }
  772. void FormWoolFinished::on_pushButtonDel_clicked()
  773. {
  774. if(!chkAccountState(m_state))
  775. return ;
  776. bool nodata = true;
  777. for(int i=0;i<ui->tableWidget->rowCount();i++)
  778. {
  779. QTableWidgetItem *item = ui->tableWidget->item(i,0);
  780. if(item)
  781. {
  782. if(item->checkState()==Qt::Checked)
  783. {
  784. nodata = false;
  785. }
  786. }
  787. }
  788. if(nodata)
  789. {
  790. QMessageBox::critical(this,"提示","请选择要删除的单子",QMessageBox::Ok);
  791. return ;
  792. }
  793. for(int i=0;i<ui->tableWidget->rowCount();i++)
  794. {
  795. QTableWidgetItem *item = ui->tableWidget->item(i,0);
  796. if(item)
  797. {
  798. if(item->checkState()==Qt::Checked)
  799. {
  800. QTableWidgetItem *item = ui->tableWidget->item(i,6);
  801. if(item)
  802. {
  803. QDateTime datetime = QDateTime::currentDateTime();
  804. QDateTime datetime2 = QDateTime::fromString(item->data(Qt::UserRole).toString(),"yyyy-MM-dd hh:mm:ss");
  805. if(datetime2>datetime.addDays(-3))
  806. {
  807. QMessageBox::critical(this,"提示","你只能删除3天前的单子,3天内的单子系统会自动同步",QMessageBox::Ok);
  808. return ;
  809. }
  810. }
  811. }
  812. }
  813. }
  814. for(int i=0;i<ui->tableWidget->rowCount();i++)
  815. {
  816. QTableWidgetItem *item = ui->tableWidget->item(i,0);
  817. if(item)
  818. {
  819. if(item->checkState()==Qt::Checked)
  820. {
  821. QString id = item->data(Qt::UserRole).toString();
  822. SNCDataBase::delShkjByID(id);
  823. }
  824. }
  825. }
  826. on_radioButtonAll_clicked();
  827. }
  828. void FormWoolFinished::onSingleDownloadClick()
  829. {
  830. QPushButton *btn = qobject_cast<QPushButton*>(sender());
  831. for(int i=0;i<ui->tableWidget->rowCount();i++)
  832. {
  833. QWidget *widget = ui->tableWidget->cellWidget(i,10);
  834. if(widget)
  835. {
  836. if(btn==qobject_cast<QPushButton*>(widget))
  837. {
  838. on_tableWidget_cellDoubleClicked(i,1);
  839. break;
  840. }
  841. }
  842. }
  843. }