formbzjcdealing.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. #include "formbzjcdealing.h"
  2. #include "ui_formbzjcdealing.h"
  3. #include "xprogressbar.h"
  4. #include "sncdatabase.h"
  5. #include "dialogsubmitresponsedetail.h"
  6. #include "dialogsubmit.h"
  7. FormBzjcDealing::FormBzjcDealing(QWidget *parent) :
  8. QWidget(parent),
  9. ui(new Ui::FormBzjcDealing)
  10. {
  11. ui->setupUi(this);
  12. initVariables();
  13. initUI();
  14. setTableWidgetNoData(ui->tableWidget);
  15. }
  16. FormBzjcDealing::~FormBzjcDealing()
  17. {
  18. m_movie->stop();
  19. m_movieBig->stop();
  20. delete m_movieBig;
  21. delete m_movie;
  22. delete ui;
  23. qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")\
  24. <<"FormRiddle.FormBzjcDealing Destroyed.";
  25. }
  26. void FormBzjcDealing::initVariables()
  27. {
  28. m_movie = new QMovie(":/working.gif");
  29. m_movie->start();
  30. m_movieBig = new QMovie(":/fetchfromserver.gif");
  31. m_movieBig->start();
  32. m_blanceOut = false;
  33. m_state = NotLogin;
  34. m_keys<<"optstatus"<<"batchid"<<"detail"<<"submittime"<<"numcount"<<"dlcount"<<"isverify"<<"tftime"<<"finishcount";
  35. m_headers<<"状态"<<"任务单号"<<"详情"<<"提交时间"<<"号码总数"<<"已检测"<<"是否审核"<<"交付时间"<<"检测进度";
  36. }
  37. void FormBzjcDealing::setAccountInfo(QMap<QString, QString> info)
  38. {
  39. m_account = info;
  40. QString ssoHash = info.value("ssohash");
  41. QString userCode = info.value("usercode");
  42. QString userHash = info.value("userhash");
  43. if(!ssoHash.isEmpty())
  44. {
  45. if(!userHash.isEmpty())
  46. {
  47. m_state = LoginOk;
  48. setTableWidgetSyncData(ui->tableWidget);
  49. }
  50. else
  51. {
  52. if(!userCode.isEmpty())
  53. {
  54. m_state = LoginError;
  55. }
  56. else
  57. {
  58. m_state = NotBind;
  59. }
  60. }
  61. }
  62. else
  63. {
  64. m_state = NotLogin;
  65. }
  66. if(m_state!=LoginOk)
  67. {
  68. setTableWidgetNoData(ui->tableWidget);
  69. }
  70. }
  71. void FormBzjcDealing::setClientName(QString name)
  72. {
  73. m_clientName = name;
  74. }
  75. void FormBzjcDealing::setClientID(QString clientID)
  76. {
  77. m_clientID = clientID;
  78. }
  79. void FormBzjcDealing::initUI()
  80. {
  81. ui->tableWidget->setColumnCount(m_headers.size());
  82. ui->tableWidget->setHorizontalHeaderLabels(m_headers);
  83. ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
  84. ui->tableWidget->setShowGrid(false);
  85. ui->tableWidget->setAlternatingRowColors(true);
  86. ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
  87. ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
  88. ui->tableWidget->verticalHeader()->setVisible(false);
  89. ui->tableWidget->horizontalHeader()->setStyleSheet("font:12px");
  90. ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Fixed);
  91. ui->tableWidget->verticalHeader()->setResizeMode(QHeaderView::Fixed);
  92. ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  93. ui->tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
  94. ui->tableWidget->verticalHeader()->setFixedWidth(30);
  95. ui->tableWidget->setSortingEnabled(true);
  96. ui->tableWidget->setColumnWidth(0,30);
  97. ui->tableWidget->setColumnWidth(1,135);
  98. ui->tableWidget->setColumnWidth(2,0);//
  99. ui->tableWidget->setColumnWidth(3,130);
  100. ui->tableWidget->setColumnWidth(4,130);
  101. ui->tableWidget->setColumnWidth(5,79);//
  102. ui->tableWidget->setColumnWidth(6,0);
  103. ui->tableWidget->setColumnWidth(7,0);
  104. ui->tableWidget->setColumnWidth(8,170);
  105. m_headers<<"状态"<<"任务单号"<<"详情"<<"提交时间"<<"号码总数"<<"已检测"<<"是否审核"<<"交付时间"<<"检测进度";
  106. }
  107. void FormBzjcDealing::setTableWidgetNoData(QTableWidget *tableWidget)
  108. {
  109. prepareTableWidgetCells(tableWidget,10);
  110. tableWidget->setEnabled(false);
  111. QTableWidgetItem *item = new QTableWidgetItem();
  112. item->setTextAlignment(Qt::AlignLeft|Qt::AlignVCenter);
  113. item->setText(" 暂无信息");
  114. tableWidget->setItem(5,4,item);
  115. }
  116. void FormBzjcDealing::setTableWidgetSyncData(QTableWidget *tableWidget)
  117. {
  118. prepareTableWidgetCells(tableWidget,10);
  119. tableWidget->setEnabled(false);
  120. QLabel *lbl = new QLabel();
  121. QTableWidgetItem *item = new QTableWidgetItem(" 正在读取...");
  122. lbl->setMovie(m_movieBig);
  123. item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
  124. tableWidget->setItem(5,4,item);
  125. tableWidget->setCellWidget(5,4,lbl);
  126. }
  127. void FormBzjcDealing::prepareTableWidgetCells(QTableWidget *tableWidget, int rows)
  128. {
  129. tableWidget->setRowCount(0);
  130. tableWidget->setRowCount(rows);
  131. }
  132. void FormBzjcDealing::fillDataList(QTableWidget *tableWidget,QStringList keys,
  133. QMultiMap<QString, QString> list, int rowCount)
  134. {
  135. setTableWidgetNoData(tableWidget);
  136. if(rowCount==0)
  137. {
  138. return ;
  139. }
  140. prepareTableWidgetCells(tableWidget,rowCount);
  141. tableWidget->setEnabled(true);
  142. for(int row = 0;row < rowCount;row++)
  143. {
  144. QMap<QString,QString> map;
  145. for(int col=0;col<keys.size();col++)
  146. {
  147. QString key = keys.at(col);
  148. QString value = list.values(key).at(row);
  149. map.insert(key,value);
  150. }
  151. for(int col=0;col<keys.size();col++)
  152. {
  153. QString key = keys.at(col);
  154. QString value = list.values(key).at(row);
  155. setCellElement(tableWidget,row,col,key,value,map);
  156. }
  157. }
  158. tableWidget->sortByColumn(0);
  159. tableWidget->sortByColumn(0);
  160. }
  161. void FormBzjcDealing::setCellElement(QTableWidget *tableWidget, int row, int col,
  162. QString key,QString value,QMap<QString,QString> data)
  163. {
  164. QTableWidgetItem* item = new QTableWidgetItem();
  165. QVariant display = value;
  166. QVariant tooltip = value;
  167. item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
  168. //进行数据翻译
  169. if(key=="batchid")
  170. {
  171. QString detail = data.value("detail");
  172. tooltip = detail;
  173. }
  174. else if(key=="numcount")
  175. {
  176. display = data.value("numcount").toInt();
  177. tooltip = data.value("numcount");
  178. }
  179. else if(key=="dlcount")
  180. {
  181. display = data.value("finishcount").toInt();
  182. tooltip = data.value("finishcount");
  183. }
  184. //设置单元格显示形式,是用item填充还是widget填充
  185. if(key=="optstatus")
  186. {
  187. delete item;
  188. QLabel *lbl = new QLabel();
  189. lbl->setAlignment(Qt::AlignCenter|Qt::AlignHCenter);
  190. QString optstatus = data.value("optstatus");
  191. QString isverify = data.value("isverify");
  192. QString tftime = data.value("tftime");
  193. if(isverify == "0")
  194. {
  195. if(tftime.isEmpty())
  196. {
  197. if(m_blanceOut)
  198. lbl->setToolTip("等待付款");
  199. else
  200. lbl->setToolTip("等待审核");
  201. lbl->setPixmap(QPixmap(":/task_lock.png"));
  202. }
  203. else if(tftime>"2000-01-01 00:00:00")
  204. {
  205. lbl->setToolTip("等待检测");
  206. lbl->setPixmap(QPixmap(":/task_hourglass.png"));
  207. }
  208. else
  209. {
  210. if(m_blanceOut)
  211. lbl->setToolTip("等待付款");
  212. else
  213. lbl->setToolTip("等待审核");
  214. lbl->setPixmap(QPixmap(":/task_lock.png"));
  215. }
  216. if(optstatus=="-1")
  217. {
  218. lbl->setToolTip("服务端已经删除或失效");
  219. lbl->setPixmap(QPixmap(":/task_error.png"));
  220. }
  221. }
  222. else if(isverify == "2")
  223. {
  224. lbl->setPixmap(QPixmap(":/task_error.png"));
  225. lbl->setToolTip("审核未通过");
  226. }
  227. else // if(isverify == "1")
  228. {
  229. if(optstatus == "-1")
  230. {
  231. lbl->setToolTip("文件已经失效");
  232. lbl->setPixmap(QPixmap(":/task_warning.png"));
  233. }
  234. else if(optstatus == "0")
  235. {
  236. lbl->setToolTip("停止");
  237. //lbl->setPixmap(QPixmap(":/task_stop.png"));
  238. }
  239. else if(optstatus == "1")
  240. {
  241. lbl->setToolTip("暂停");
  242. lbl->setPixmap(QPixmap(":/task_pause.png"));
  243. }
  244. else if(optstatus == "2")
  245. {
  246. lbl->setToolTip("正在检测");
  247. lbl->setPixmap(QPixmap(":/task_play.png"));
  248. }
  249. else if(optstatus == "3")
  250. {
  251. lbl->setToolTip("正在处理");
  252. lbl->setPixmap(QPixmap(":/task_play.png"));
  253. }
  254. else if(optstatus == "4" || optstatus == "5" || optstatus == "6")
  255. {
  256. lbl->setToolTip("发生错误");
  257. lbl->setPixmap(QPixmap(":/task_error.png"));
  258. }
  259. else
  260. {
  261. lbl->setToolTip("上传成功");
  262. lbl->setPixmap(QPixmap(":/task_ok.png"));
  263. }
  264. }
  265. tableWidget->setCellWidget(row,col,lbl);
  266. }
  267. else if(key=="finishcount")
  268. {
  269. delete item;
  270. int numcount = data.value("numcount").toInt();
  271. int finishcount = data.value("finishcount").toInt();
  272. double percent =0;
  273. if(numcount>0)
  274. percent = finishcount*100.0/numcount;
  275. QLabel *lbl = new QLabel();
  276. lbl->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
  277. XProgressBar *progress = 0;
  278. QString optstatus = data.value("optstatus");
  279. QString isverify = data.value("isverify");
  280. QString tftime = data.value("tftime");
  281. if(isverify == "0")
  282. {
  283. if(tftime.isEmpty())
  284. {
  285. if(m_blanceOut)
  286. lbl->setText("等待付款");
  287. else
  288. lbl->setText("等待审核");
  289. }
  290. else if(tftime>"2000-01-01 00:00:00")
  291. {
  292. lbl->setText("等待检测");
  293. }
  294. else
  295. {
  296. if(m_blanceOut)
  297. lbl->setText("等待付款");
  298. else
  299. lbl->setText("等待审核");
  300. }
  301. if(optstatus=="-1")
  302. {
  303. lbl->setText("服务端已经删除或失效");
  304. }
  305. }
  306. else if(isverify == "2")
  307. {
  308. lbl->setText("审核未通过");
  309. }
  310. else // if(isverify == "1")
  311. {
  312. if(optstatus == "-1")
  313. {
  314. lbl->setText("文件已经失效");
  315. }
  316. else if(optstatus == "0")
  317. {
  318. lbl->setText("停止");
  319. //modify by xxw on 2016-7-23
  320. //把停止改为状态显示
  321. delete lbl;
  322. lbl = 0;
  323. progress = new XProgressBar();
  324. }
  325. else if(optstatus == "1")
  326. {
  327. lbl->setText("暂停");
  328. }
  329. else if(optstatus == "2")
  330. {
  331. lbl->setText("正在检测");
  332. delete lbl;
  333. lbl = 0;
  334. progress = new XProgressBar();
  335. }
  336. else if(optstatus == "3")
  337. {
  338. lbl->setText("正在处理");
  339. }
  340. else if(optstatus == "4" || optstatus == "5" || optstatus == "6")
  341. {
  342. lbl->setText("发生错误");
  343. }
  344. else
  345. {
  346. lbl->setText("未知" + optstatus);
  347. }
  348. }
  349. if(lbl)
  350. {
  351. tableWidget->setCellWidget(row,col,lbl);
  352. }
  353. else
  354. {
  355. progress->setProgress(3,percent);
  356. tableWidget->setCellWidget(row,col,progress);
  357. }
  358. }
  359. else
  360. {
  361. item->setData(Qt::DisplayRole,display);
  362. item->setData(Qt::UserRole,value);
  363. item->setData(Qt::ToolTipRole,tooltip);
  364. tableWidget->setItem(row,col,item);
  365. }
  366. }
  367. void FormBzjcDealing::query()
  368. {
  369. QString userCode = m_account.value("usercode");
  370. QMultiMap<QString,QString> list = SNCDataBase::getBzjcCheckDealingInfos(userCode,m_clientID);
  371. int cols = list.uniqueKeys().size();
  372. int rows = 0;
  373. if(cols!=0)
  374. rows = list.size()/cols;
  375. if(list.size()==0)
  376. {
  377. setTableWidgetNoData(ui->tableWidget);
  378. return ;
  379. }
  380. QStringList ids;
  381. QString curId;
  382. for(int i=0;i<ui->tableWidget->rowCount();i++)
  383. {
  384. QTableWidgetItem *item = ui->tableWidget->item(i,0);
  385. if(item)
  386. {
  387. if(item->checkState()==Qt::Checked)
  388. {
  389. ids<<item->data(Qt::UserRole).toString();
  390. }
  391. if(item->isSelected())
  392. {
  393. curId = item->data(Qt::UserRole).toString();
  394. }
  395. }
  396. }
  397. fillDataList(ui->tableWidget,m_keys,list,rows);
  398. for(int i=0;i<ui->tableWidget->rowCount();i++)
  399. {
  400. if(curId.isEmpty())
  401. {
  402. ui->tableWidget->selectRow(i);
  403. ui->tableWidget->setFocus();
  404. break;
  405. }
  406. QTableWidgetItem *item = ui->tableWidget->item(i,0);
  407. if(item)
  408. {
  409. QString id = item->data(Qt::UserRole).toString();
  410. if(curId==id)
  411. {
  412. ui->tableWidget->selectRow(i);
  413. ui->tableWidget->setFocus();
  414. }
  415. for(int i=0;i<ids.size();i++)
  416. {
  417. if(id==ids.at(i))
  418. {
  419. item->setCheckState(Qt::Checked);
  420. break;
  421. }
  422. }
  423. }
  424. }
  425. }
  426. void FormBzjcDealing::showRtnMessage(int row)
  427. {
  428. QTableWidgetItem *itemMsg = ui->tableWidget->item(row,8);
  429. QTableWidgetItem *itemDetail = ui->tableWidget->item(row,9);
  430. QString errMsg = "";
  431. QString errDetail = "";
  432. if(itemMsg)
  433. {
  434. errMsg = itemMsg->data(Qt::UserRole).toString();
  435. }
  436. if(itemDetail)
  437. {
  438. errDetail = itemDetail->data(Qt::UserRole).toString();
  439. }
  440. if(errDetail.isEmpty())
  441. {
  442. if(!errMsg.isEmpty())
  443. {
  444. QMessageBox::critical(this,"提示",errMsg,QMessageBox::Ok);
  445. }
  446. }
  447. else
  448. {
  449. DialogSubmitResponseDetail dialog;
  450. dialog.setDetailText(errDetail);
  451. dialog.exec();
  452. }
  453. }
  454. void FormBzjcDealing::onPushButtonViewsClicked()
  455. {
  456. QPushButton *btn = qobject_cast<QPushButton*>(sender());
  457. for(int i=0;i<ui->tableWidget->rowCount();i++)
  458. {
  459. QWidget *widget = ui->tableWidget->cellWidget(i,ui->tableWidget->columnCount()-1);
  460. if(widget)
  461. {
  462. if(btn==qobject_cast<QPushButton*>(widget))
  463. {
  464. showRtnMessage(i);
  465. break;
  466. }
  467. }
  468. }
  469. }
  470. void FormBzjcDealing::onDataUpdated()
  471. {
  472. query();
  473. }
  474. void FormBzjcDealing::on_tableWidget_cellDoubleClicked(int row, int column)
  475. {
  476. showRtnMessage(row);
  477. }
  478. bool FormBzjcDealing::chkAccountState(AccountLoginState state)
  479. {
  480. bool ret = false;
  481. switch(state)
  482. {
  483. case NotLogin:
  484. QMessageBox::critical(this,"提示","您现在还没有登录系统,请登录后再操作!",QMessageBox::Ok);
  485. break;
  486. case NotBind:
  487. QMessageBox::critical(this,"提示","此项服务尚未开通,请开通后再操作!",QMessageBox::Ok);
  488. break;
  489. case LoginError:
  490. QMessageBox::critical(this,"提示","此项服务暂时无法连接,请稍候重试!",QMessageBox::Ok);
  491. break;
  492. default:
  493. ret = true;
  494. }
  495. return ret;
  496. }
  497. //add by xw on 2015-11-1 for 5.4.8
  498. //客户如果余额不足,上传完数据后检测进度的状态请改为“等待付款”,如果余额够就显示为“等待审核”
  499. void FormBzjcDealing::onBalanceOut()
  500. {
  501. m_blanceOut = true;
  502. }
  503. void FormBzjcDealing::onBalanceIn()
  504. {
  505. m_blanceOut = false;
  506. }