formbzjcfee.cpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. #include "formbzjcfee.h"
  2. #include "ui_formbzjcfee.h"
  3. #include "dialogsubmitresponsedetail.h"
  4. #include "respgetcostinfo.h"
  5. FormBzjcFee::FormBzjcFee(QWidget *parent) :
  6. QWidget(parent),
  7. ui(new Ui::FormBzjcFee)
  8. {
  9. ui->setupUi(this);
  10. initVariables();
  11. initUI();
  12. setTableWidgetNoData(ui->tableWidget);
  13. }
  14. FormBzjcFee::~FormBzjcFee()
  15. {
  16. m_movie->stop();
  17. m_numchk->abort();
  18. delete m_numchk;
  19. delete m_movie;
  20. delete ui;
  21. qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")\
  22. <<"FormNumCheck.FormBzjcFee Destroyed.";
  23. }
  24. void FormBzjcFee::initVariables()
  25. {
  26. ui->dateEditStart->setDate(QDate::currentDate().addDays(-30));
  27. ui->dateEditEnd->setDate(QDate::currentDate());
  28. m_state = NotLogin;
  29. m_movie = new QMovie(":/working.gif");
  30. m_movie->start();
  31. m_numchk = new WSNumChk();
  32. m_keys<<"batchid"<<"usercode"<<"submittime"<<"finishtime"<<"numcount"\
  33. <<"finishcount"<<"price"<<"settlefee"<<"giftfee";
  34. m_headers<<"编号"<<"所属用户"<<"提交时间"<<"完成时间"<<"提交数"<<"已检测"<<"单价"<<"费用"<<"赠送消耗";
  35. }
  36. void FormBzjcFee::setAccountInfo(QMap<QString, QString> info)
  37. {
  38. m_account = info;
  39. QString ssoHash = info.value("ssohash");
  40. QString userCode = info.value("usercode");
  41. QString userHash = info.value("userhash");
  42. if(!ssoHash.isEmpty())
  43. {
  44. if(!userHash.isEmpty())
  45. {
  46. m_state = LoginOk;
  47. }
  48. else
  49. {
  50. if(!userCode.isEmpty())
  51. {
  52. m_state = LoginError;
  53. }
  54. else
  55. {
  56. m_state = NotBind;
  57. }
  58. }
  59. }
  60. else
  61. {
  62. m_state = NotLogin;
  63. }
  64. if(m_state!=LoginOk)
  65. {
  66. setTableWidgetNoData(ui->tableWidget);
  67. }
  68. }
  69. void FormBzjcFee::setClientName(QString name)
  70. {
  71. m_clientName = name;
  72. }
  73. void FormBzjcFee::setClientID(QString clientID)
  74. {
  75. m_clientID = clientID;
  76. }
  77. void FormBzjcFee::setHost(QString host, QString port)
  78. {
  79. m_host = host;
  80. m_port = port;
  81. m_numchk->setHost(host,port);
  82. }
  83. void FormBzjcFee::initUI()
  84. {
  85. ui->tableWidget->setColumnCount(m_headers.size());
  86. ui->tableWidget->setHorizontalHeaderLabels(m_headers);
  87. ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
  88. ui->tableWidget->setShowGrid(false);
  89. ui->tableWidget->setAlternatingRowColors(true);
  90. ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
  91. ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
  92. ui->tableWidget->verticalHeader()->setVisible(false);
  93. ui->tableWidget->horizontalHeader()->setStyleSheet("font:12px");
  94. ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Fixed);
  95. ui->tableWidget->verticalHeader()->setResizeMode(QHeaderView::Fixed);
  96. ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  97. ui->tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
  98. ui->tableWidget->verticalHeader()->setFixedWidth(30);
  99. ui->tableWidget->setSortingEnabled(true);
  100. ui->tableWidget->setColumnWidth(0,50);
  101. ui->tableWidget->setColumnWidth(1,115);
  102. ui->tableWidget->setColumnWidth(2,140);
  103. ui->tableWidget->setColumnWidth(3,125);
  104. ui->tableWidget->setColumnWidth(4,45);
  105. ui->tableWidget->setColumnWidth(5,45);
  106. ui->tableWidget->setColumnWidth(6,50);
  107. ui->tableWidget->setColumnWidth(7,50);
  108. ui->tableWidget->setColumnWidth(8,55);
  109. }
  110. void FormBzjcFee::setTableWidgetNoData(QTableWidget *tableWidget)
  111. {
  112. prepareTableWidgetCells(tableWidget,15);
  113. tableWidget->setEnabled(false);
  114. QTableWidgetItem *item = new QTableWidgetItem();
  115. item->setTextAlignment(Qt::AlignLeft|Qt::AlignVCenter);
  116. item->setText("暂无信息");
  117. tableWidget->setItem(6,3,item);
  118. }
  119. void FormBzjcFee::prepareTableWidgetCells(QTableWidget *tableWidget, int rows)
  120. {
  121. tableWidget->setRowCount(0);
  122. tableWidget->setRowCount(rows);
  123. }
  124. void FormBzjcFee::fillDataList(QTableWidget *tableWidget,QStringList keys,
  125. QMultiMap<QString, QString> list, int rowCount)
  126. {
  127. setTableWidgetNoData(tableWidget);
  128. if(rowCount==0)
  129. {
  130. return ;
  131. }
  132. prepareTableWidgetCells(tableWidget,rowCount);
  133. tableWidget->setEnabled(true);
  134. for(int row = 0;row < rowCount;row++)
  135. {
  136. QMap<QString,QString> map;
  137. for(int col=0;col<keys.size();col++)
  138. {
  139. QString key = keys.at(col);
  140. QString value = list.values(key).at(row);
  141. map.insert(key,value);
  142. }
  143. for(int col=0;col<keys.size();col++)
  144. {
  145. QString key = keys.at(col);
  146. QString value = list.values(key).at(row);
  147. setCellElement(tableWidget,row,col,key,value,map);
  148. }
  149. }
  150. tableWidget->sortByColumn(0);
  151. tableWidget->sortByColumn(0);
  152. }
  153. void FormBzjcFee::setCellElement(QTableWidget *tableWidget, int row, int col,
  154. QString key,QString value,QMap<QString,QString> data)
  155. {
  156. QTableWidgetItem* item = new QTableWidgetItem();
  157. QVariant display = value;
  158. QVariant tooltip = value;
  159. item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
  160. //进行数据翻译
  161. if(key=="chargeid")
  162. {
  163. display = value.toInt();
  164. }
  165. else if(key=="chargemoney")
  166. {
  167. display = value.toDouble();
  168. }
  169. else if(key=="giftmoney")
  170. {
  171. display = value.toDouble();
  172. }
  173. //设置单元格显示形式,是用item填充还是widget填充
  174. item->setData(Qt::DisplayRole,display);
  175. item->setData(Qt::UserRole,value);
  176. item->setData(Qt::ToolTipRole,tooltip);
  177. tableWidget->setItem(row,col,item);
  178. }
  179. void FormBzjcFee::query()
  180. {
  181. QString dateStart = ui->dateEditStart->text();
  182. QString dateEnd = ui->dateEditEnd->text();
  183. QString userHash = m_account.value("userhash");
  184. QString json = m_numchk->getCostInfo(dateStart,dateEnd,userHash);
  185. QMultiMap<QString,QString> list;
  186. RespGetCostInfo response(json);
  187. if(response.getRtnCode()>=0)
  188. {
  189. list = response.getRs();
  190. }
  191. else
  192. {
  193. QMessageBox::critical(this,"提示",response.getRtnMemo(),QMessageBox::Ok);
  194. return ;
  195. }
  196. int cols = list.uniqueKeys().size();
  197. int rows = 0;
  198. if(cols!=0)
  199. rows = list.size()/cols;
  200. if(list.size()==0)
  201. {
  202. setTableWidgetNoData(ui->tableWidget);
  203. return ;
  204. }
  205. QStringList ids;
  206. QString curId;
  207. for(int i=0;i<ui->tableWidget->rowCount();i++)
  208. {
  209. QTableWidgetItem *item = ui->tableWidget->item(i,0);
  210. if(item)
  211. {
  212. if(item->checkState()==Qt::Checked)
  213. {
  214. ids<<item->data(Qt::UserRole).toString();
  215. }
  216. if(item->isSelected())
  217. {
  218. curId = item->data(Qt::UserRole).toString();
  219. }
  220. }
  221. }
  222. fillDataList(ui->tableWidget,m_keys,list,rows);
  223. for(int i=0;i<ui->tableWidget->rowCount();i++)
  224. {
  225. if(curId.isEmpty())
  226. {
  227. ui->tableWidget->selectRow(i);
  228. ui->tableWidget->setFocus();
  229. break;
  230. }
  231. QTableWidgetItem *item = ui->tableWidget->item(i,0);
  232. if(item)
  233. {
  234. QString id = item->data(Qt::UserRole).toString();
  235. if(curId==id)
  236. {
  237. ui->tableWidget->selectRow(i);
  238. ui->tableWidget->setFocus();
  239. }
  240. for(int i=0;i<ids.size();i++)
  241. {
  242. if(id==ids.at(i))
  243. {
  244. item->setCheckState(Qt::Checked);
  245. break;
  246. }
  247. }
  248. }
  249. }
  250. }
  251. void FormBzjcFee::showRtnMessage(int row)
  252. {
  253. QTableWidgetItem *itemMsg = ui->tableWidget->item(row,8);
  254. QTableWidgetItem *itemDetail = ui->tableWidget->item(row,9);
  255. QString errMsg = "";
  256. QString errDetail = "";
  257. if(itemMsg)
  258. {
  259. errMsg = itemMsg->data(Qt::UserRole).toString();
  260. }
  261. if(itemDetail)
  262. {
  263. errDetail = itemDetail->data(Qt::UserRole).toString();
  264. }
  265. if(errDetail.isEmpty())
  266. {
  267. if(!errMsg.isEmpty())
  268. {
  269. QMessageBox::critical(this,"提示",errMsg,QMessageBox::Ok);
  270. }
  271. }
  272. else
  273. {
  274. DialogSubmitResponseDetail dialog;
  275. dialog.setDetailText(errDetail);
  276. dialog.exec();
  277. }
  278. }
  279. void FormBzjcFee::onDataUpdated()
  280. {
  281. query();
  282. }
  283. bool FormBzjcFee::chkAccountState(AccountLoginState state)
  284. {
  285. bool ret = false;
  286. switch(state)
  287. {
  288. case NotLogin:
  289. QMessageBox::critical(this,"提示","您现在还没有登录系统,请登录后再操作!",QMessageBox::Ok);
  290. break;
  291. case NotBind:
  292. QMessageBox::critical(this,"提示","此项服务尚未开通,请开通后再操作!",QMessageBox::Ok);
  293. break;
  294. case LoginError:
  295. QMessageBox::critical(this,"提示","此项服务暂时无法连接,请稍候重试!",QMessageBox::Ok);
  296. break;
  297. default:
  298. ret = true;
  299. }
  300. return ret;
  301. }
  302. void FormBzjcFee::on_pushButtonQuery_clicked()
  303. {
  304. if(!chkAccountState(m_state))
  305. return;
  306. if(!checkLastClickTime(sender()))
  307. return ;
  308. ui->labelState->setText("正在查询,请稍候...");
  309. ui->labelState->setStyleSheet("QLabel{color:#08a61b;font:12px;font-weight: bold;}");
  310. ui->pushButtonQuery->setEnabled(false);
  311. setCursor(Qt::WaitCursor);
  312. query();
  313. setCursor(Qt::ArrowCursor);
  314. ui->labelState->setText("");
  315. ui->pushButtonQuery->setEnabled(true);
  316. }
  317. bool FormBzjcFee::checkLastClickTime(QObject *button)
  318. {
  319. QPushButton *btn = qobject_cast<QPushButton*>(button);
  320. QDateTime lasttime = m_clickTime.value(btn->objectName());
  321. if(!lasttime.isNull())
  322. {
  323. if(lasttime.addSecs(30)>QDateTime::currentDateTime())
  324. {
  325. QMessageBox::critical(this,"提示","您不可以频繁点击!",QMessageBox::Ok);
  326. return false;
  327. }
  328. }
  329. m_clickTime.insert(btn->objectName(),QDateTime::currentDateTime());
  330. return true;
  331. }