formtodayrec.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. #include "formtodayrec.h"
  2. #include "ui_formtodayrec.h"
  3. #include "respgetrecommendseg.h"
  4. #include "sncdatabase.h"
  5. FormTodayRec::FormTodayRec(QWidget *parent) :
  6. QWidget(parent),
  7. ui(new Ui::FormTodayRec)
  8. {
  9. ui->setupUi(this);
  10. initVariables();
  11. initUI();
  12. setTableWidgetNoData(ui->tableWidget);
  13. loadRegionInfo();
  14. fillProvince();
  15. }
  16. FormTodayRec::~FormTodayRec()
  17. {
  18. m_movieBig->stop();
  19. delete m_movieBig;
  20. m_movie->stop();
  21. delete m_movie;
  22. delete ui;
  23. qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")\
  24. <<"FormTodayRec Destroyed.";
  25. }
  26. void FormTodayRec::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_keys<<"seg"<<"province"<<"city"<<"shi"<<"kong"<<"ting"<<"guan";
  33. m_state = NotLogin;
  34. m_headers<<"号段"<<"省份"<<"城市"<<"实号(%)"<<"空号(%)"<<"停机(%)"<<"关机(%)";
  35. ui->tableWidget->installEventFilter(this);
  36. }
  37. void FormTodayRec::setAccountInfo(QMap<QString, QString> info)
  38. {
  39. m_account = info;
  40. QString ssoHash = info.value("ssohash");
  41. if(!ssoHash.isEmpty())
  42. {
  43. m_state = LoginOk;
  44. setTableWidgetSyncData(ui->tableWidget);
  45. }
  46. else
  47. {
  48. m_state = NotLogin;
  49. }
  50. if(m_state!=LoginOk)
  51. {
  52. setTableWidgetNoData(ui->tableWidget);
  53. }
  54. }
  55. void FormTodayRec::initUI()
  56. {
  57. ui->tableWidget->setFixedHeight(330);
  58. ui->tableWidget->setColumnCount(m_headers.size());
  59. ui->tableWidget->setHorizontalHeaderLabels(m_headers);
  60. ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
  61. ui->tableWidget->setShowGrid(false);
  62. ui->tableWidget->setAlternatingRowColors(true);
  63. ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
  64. ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
  65. ui->tableWidget->verticalHeader()->setVisible(false);
  66. ui->tableWidget->horizontalHeader()->setStyleSheet("font:12px");
  67. ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Fixed);
  68. ui->tableWidget->verticalHeader()->setResizeMode(QHeaderView::Fixed);
  69. ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  70. ui->tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
  71. ui->tableWidget->verticalHeader()->setFixedWidth(30);
  72. ui->tableWidget->setSortingEnabled(true);
  73. ui->tableWidget->setColumnWidth(0,110);
  74. ui->tableWidget->setColumnWidth(1,110);
  75. ui->tableWidget->setColumnWidth(2,110);//
  76. ui->tableWidget->setColumnWidth(3,90);
  77. ui->tableWidget->setColumnWidth(4,90);
  78. ui->tableWidget->setColumnWidth(5,90);
  79. ui->tableWidget->setColumnWidth(6,90);
  80. }
  81. void FormTodayRec::setTableWidgetNoData(QTableWidget *tableWidget)
  82. {
  83. prepareTableWidgetCells(tableWidget,9);
  84. tableWidget->setEnabled(false);
  85. QTableWidgetItem *item = new QTableWidgetItem();
  86. item->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);
  87. item->setText(" 暂无信息");
  88. tableWidget->setItem(4,2,item);
  89. }
  90. void FormTodayRec::setTableWidgetSyncData(QTableWidget *tableWidget)
  91. {
  92. prepareTableWidgetCells(tableWidget,10);
  93. tableWidget->setEnabled(false);
  94. QLabel *lbl = new QLabel();
  95. QTableWidgetItem *item = new QTableWidgetItem(" 正在读取...");
  96. lbl->setMovie(m_movieBig);
  97. item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
  98. tableWidget->setItem(4,3,item);
  99. tableWidget->setCellWidget(4,3,lbl);
  100. }
  101. void FormTodayRec::prepareTableWidgetCells(QTableWidget *tableWidget, int rows)
  102. {
  103. tableWidget->setRowCount(0);
  104. tableWidget->setRowCount(rows);
  105. }
  106. void FormTodayRec::fillDataList(QTableWidget *tableWidget,QStringList keys,
  107. QMultiMap<QString, QString> list, int rowCount)
  108. {
  109. setTableWidgetNoData(tableWidget);
  110. if(rowCount==0)
  111. {
  112. return ;
  113. }
  114. prepareTableWidgetCells(tableWidget,rowCount);
  115. tableWidget->setEnabled(true);
  116. for(int row = 0;row < rowCount;row++)
  117. {
  118. QMap<QString,QString> map;
  119. for(int col=0;col<keys.size();col++)
  120. {
  121. QString key = keys.at(col);
  122. QString value = list.values(key).at(row);
  123. map.insert(key,value);
  124. }
  125. for(int col=0;col<keys.size();col++)
  126. {
  127. QString key = keys.at(col);
  128. QString value = list.values(key).at(row);
  129. setCellElement(tableWidget,row,col,key,value,map);
  130. }
  131. }
  132. tableWidget->sortByColumn(0);
  133. tableWidget->sortByColumn(0);
  134. }
  135. void FormTodayRec::setCellElement(QTableWidget *tableWidget, int row, int col,
  136. QString key,QString value,QMap<QString,QString> data)
  137. {
  138. QTableWidgetItem* item = new QTableWidgetItem();
  139. QVariant display = value;
  140. QVariant tooltip = value;
  141. item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
  142. //进行数据翻译
  143. if(key=="detail")
  144. {
  145. QStringList info = display.toString().split("\r\n");
  146. QString filename;
  147. if(info.size()>0)
  148. {
  149. if(info.at(0).split(":").size()>1)
  150. {
  151. filename = info.at(0).split(":").at(1);
  152. }
  153. display = filename;
  154. }
  155. item->setTextAlignment(Qt::AlignLeft|Qt::AlignVCenter);
  156. }
  157. else if(key=="shi")
  158. {
  159. display = value.toInt();
  160. tooltip = display;
  161. }
  162. else if(key=="kong")
  163. {
  164. display = value.toInt();
  165. tooltip = display;
  166. }
  167. else if(key=="ting")
  168. {
  169. display = value.toInt();
  170. tooltip = display;
  171. }
  172. else if(key=="guan")
  173. {
  174. display = value.toInt();
  175. tooltip = display;
  176. }
  177. else if(key=="finishtime")
  178. {
  179. QDateTime inserttime = QDateTime::fromString(data.value("inserttime"),"yyyy-MM-dd hh:mm:ss");
  180. QDateTime finishtime = QDateTime::fromString(data.value("finishtime"),"yyyy-MM-dd hh:mm:ss");
  181. int seconds = inserttime.msecsTo(finishtime)/1000 ;
  182. display = seconds;
  183. tooltip = display;
  184. }
  185. if(key == "dealstatus")
  186. {
  187. delete item;
  188. QLabel *lbl = new QLabel(this);
  189. lbl->setAlignment(Qt::AlignCenter|Qt::AlignHCenter);
  190. lbl->setProperty("value",value);
  191. lbl->setPixmap(QPixmap(":/task_play.png"));
  192. lbl->setToolTip(tooltip.toString());
  193. tableWidget->setCellWidget(row,col,lbl);
  194. }
  195. else
  196. {
  197. item->setData(Qt::DisplayRole,display);
  198. item->setData(Qt::UserRole,value);
  199. item->setData(Qt::ToolTipRole,tooltip);
  200. tableWidget->setItem(row,col,item);
  201. }
  202. }
  203. void FormTodayRec::query()
  204. {
  205. QMultiMap<QString,QString> list;
  206. if(ui->checkBoxCity->isChecked())
  207. {
  208. list = SNCDataBase::getSegRecInfosByCity(ui->comboBoxCity->currentText());
  209. }
  210. else if(ui->checkBoxProvince->isChecked())
  211. {
  212. list = SNCDataBase::getSegRecInfosByProvince(ui->comboBoxProvince->currentText());
  213. }
  214. else
  215. {
  216. list = SNCDataBase::getSegRecInfos();
  217. }
  218. int cols = list.uniqueKeys().size();
  219. int rows = 0;
  220. if(cols!=0)
  221. rows = list.size()/cols;
  222. if(list.size()==0)
  223. {
  224. setTableWidgetNoData(ui->tableWidget);
  225. return ;
  226. }
  227. QStringList ids;
  228. QString curId;
  229. for(int i=0;i<ui->tableWidget->rowCount();i++)
  230. {
  231. QTableWidgetItem *item = ui->tableWidget->item(i,0);
  232. if(item)
  233. {
  234. if(item->checkState()==Qt::Checked)
  235. {
  236. ids<<item->data(Qt::UserRole).toString();
  237. }
  238. if(item->isSelected())
  239. {
  240. curId = item->data(Qt::UserRole).toString();
  241. }
  242. }
  243. }
  244. fillDataList(ui->tableWidget,m_keys,list,rows);
  245. for(int i=0;i<ui->tableWidget->rowCount();i++)
  246. {
  247. if(curId.isEmpty())
  248. {
  249. ui->tableWidget->selectRow(i);
  250. break;
  251. }
  252. QTableWidgetItem *item = ui->tableWidget->item(i,0);
  253. if(item)
  254. {
  255. QString id = item->data(Qt::UserRole).toString();
  256. if(curId==id)
  257. {
  258. ui->tableWidget->selectRow(i);
  259. }
  260. for(int i=0;i<ids.size();i++)
  261. {
  262. if(id==ids.at(i))
  263. {
  264. item->setCheckState(Qt::Checked);
  265. break;
  266. }
  267. }
  268. }
  269. }
  270. }
  271. void FormTodayRec::showRtnMessage(int row)
  272. {
  273. QTableWidgetItem *itemMsg = ui->tableWidget->item(row,8);
  274. QTableWidgetItem *itemDetail = ui->tableWidget->item(row,9);
  275. QString errMsg = "";
  276. QString errDetail = "";
  277. if(itemMsg)
  278. {
  279. errMsg = itemMsg->data(Qt::UserRole).toString();
  280. }
  281. if(itemDetail)
  282. {
  283. errDetail = itemDetail->data(Qt::UserRole).toString();
  284. }
  285. if(errDetail.isEmpty())
  286. {
  287. if(!errMsg.isEmpty())
  288. {
  289. QMessageBox::critical(this,"提示",errMsg,QMessageBox::Ok);
  290. }
  291. }
  292. else
  293. {
  294. // DialogSubmitResponseDetail dialog;
  295. // dialog.setDetailText(errDetail);
  296. // dialog.exec();
  297. }
  298. }
  299. bool FormTodayRec::chkAccountState(AccountLoginState state)
  300. {
  301. bool ret = false;
  302. switch(state)
  303. {
  304. case NotLogin:
  305. QMessageBox::critical(this,"提示","您现在还没有登录系统,请登录后再操作!",QMessageBox::Ok);
  306. break;
  307. case NotBind:
  308. QMessageBox::critical(this,"提示","此项服务尚未开通,请开通后再操作!",QMessageBox::Ok);
  309. break;
  310. case LoginError:
  311. QMessageBox::critical(this,"提示","此项服务暂时无法连接,请稍候重试!",QMessageBox::Ok);
  312. break;
  313. default:
  314. ret = true;
  315. }
  316. return ret;
  317. }
  318. void FormTodayRec::loadRegionInfo()
  319. {
  320. QList<QStringList> list = SNCDataBase::getRegionInfo();
  321. if(list.size()!=2)
  322. return ;
  323. QStringList citys = list.at(0);
  324. QStringList provinces = list.at(1);
  325. if(citys.size()!=provinces.size())
  326. return;
  327. for(int i=0;i<citys.size();i++)
  328. {
  329. m_citys.insertMulti(provinces.at(i),citys.at(i));
  330. }
  331. }
  332. void FormTodayRec::changeCityByProvince(QString province)
  333. {
  334. QStringList citys = m_citys.values(province);
  335. ui->comboBoxCity->clear();
  336. for(int i=0;i<citys.size();i++)
  337. {
  338. ui->comboBoxCity->addItem(citys.at(i));
  339. }
  340. }
  341. void FormTodayRec::onDataUpdated()
  342. {
  343. query();
  344. }
  345. void FormTodayRec::on_pushButtonChange_clicked()
  346. {
  347. setCursor(Qt::WaitCursor);
  348. query();
  349. setCursor(Qt::ArrowCursor);
  350. }
  351. void FormTodayRec::on_pushButtonAdd_clicked()
  352. {
  353. QStringList segs;
  354. for(int i=0;i<ui->tableWidget->rowCount();i++)
  355. {
  356. QTableWidgetItem *item=ui->tableWidget->item(i,0);
  357. if(item)
  358. {
  359. if(item->isSelected())
  360. {
  361. segs<<item->data(Qt::DisplayRole).toString();
  362. }
  363. }
  364. }
  365. if(segs.size()>0)
  366. emit segSelected(segs);
  367. }
  368. void FormTodayRec::fillProvince()
  369. {
  370. for(int i=0;i<m_citys.uniqueKeys().size();i++)
  371. {
  372. ui->comboBoxProvince->addItem(m_citys.uniqueKeys().at(i));
  373. }
  374. }
  375. void FormTodayRec::on_comboBoxProvince_currentIndexChanged(const QString &arg1)
  376. {
  377. changeCityByProvince(arg1);
  378. }
  379. void FormTodayRec::on_tableWidget_doubleClicked(const QModelIndex &index)
  380. {
  381. on_pushButtonAdd_clicked();
  382. }
  383. bool FormTodayRec::eventFilter(QObject *object, QEvent *event)
  384. {
  385. if( event->type() == QEvent::KeyPress)
  386. {
  387. // if yes, we need to cast the event into a QMouseEvent type
  388. QKeyEvent * pKeyEvent = static_cast<QKeyEvent *>(event);
  389. // check whether it's mid button pressed
  390. if (pKeyEvent->key() == Qt::Key_Control||pKeyEvent->key() == Qt::Key_Shift)
  391. {
  392. //do the processing and return true
  393. //textBrowserErrorInfo->setText(tr("clicked"));
  394. ui->tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
  395. return true; //一定要返回true,如果你不想别的object也能接收到这个event
  396. }
  397. }
  398. else if( event->type() == QEvent::KeyRelease)
  399. {
  400. QKeyEvent * pKeyEvent = static_cast<QKeyEvent *>(event);
  401. // check whether it's mid button pressed
  402. if (pKeyEvent->key() == Qt::Key_Control||pKeyEvent->key() == Qt::Key_Shift)
  403. {
  404. //do the processing and return true
  405. //textBrowserErrorInfo->setText(tr("clicked"));
  406. ui->tableWidget->setSelectionMode(QAbstractItemView::MultiSelection);
  407. return true; //一定要返回true,如果你不想别的object也能接收到这个event
  408. }
  409. }
  410. return QWidget::eventFilter(object, event);
  411. }/**/