formshkjupload.cpp 14 KB

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