formwoolupload.cpp 15 KB

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