#include "formshkjreserve.h" #include "ui_formshkjreserve.h" #include "sncdatabase.h" #include "respgetmyhmyyinfo.h" #include "respuserserviceverify.h" #include "respdljsjcresultfile.h" #include "respdelhmyy.h" FormShkjReserve::FormShkjReserve(QWidget *parent) : QWidget(parent), ui(new Ui::FormShkjReserve) { ui->setupUi(this); initVariables(); initUI(); setTableWidgetNoData(ui->tableWidget); } FormShkjReserve::~FormShkjReserve() { m_movieBig->stop(); delete m_movieBig; m_cubews->abort(); delete m_cubews; delete ui; qDebug()<type() == QEvent::KeyPress) { // if yes, we need to cast the event into a QMouseEvent type QKeyEvent * pKeyEvent = static_cast(event); // check whether it's mid button pressed if (pKeyEvent->key() == Qt::Key_Control||pKeyEvent->key() == Qt::Key_Shift) { //do the processing and return true //textBrowserErrorInfo->setText(tr("clicked")); ui->tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); return true; //一定要返回true,如果你不想别的object也能接收到这个event } } else if( event->type() == QEvent::KeyRelease) { QKeyEvent * pKeyEvent = static_cast(event); // check whether it's mid button pressed if (pKeyEvent->key() == Qt::Key_Control||pKeyEvent->key() == Qt::Key_Shift) { //do the processing and return true //textBrowserErrorInfo->setText(tr("clicked")); ui->tableWidget->setSelectionMode(QAbstractItemView::MultiSelection); return true; //一定要返回true,如果你不想别的object也能接收到这个event } } return QWidget::eventFilter(object, event); }/**/ void FormShkjReserve::initVariables() { m_movieBig = new QMovie(":/fetchfromserver.gif"); m_movieBig->start(); m_movieSmall = new QMovie(":/working.gif"); m_movieSmall->start(); m_keys<<"serialnum"<<"ordid"<<"province"<<"city"\ <<"attennum"<<"label1"<<"ordtime"<<"state"<<"updatetime"<<"updatenum"<<"label2"<<"op"; m_state = NotLogin; m_headers<<""<<""<<"省份"<<"地区"<<"关注人数"<<"关注人数"\ <<"预约时间"<<"预约状态"<<"更新时间"<<"更新数量"<<"更新实号数量"<<"操作"; m_curLtfid = ""; m_curQryid = ""; m_lastLtfid = ""; m_cubews = new WSCube2(); ui->tableWidget->installEventFilter(this); } void FormShkjReserve::setAccountInfo(QMap info) { m_account = info; QString ssoHash = info.value("ssohash"); if(!ssoHash.isEmpty()) { m_state = LoginOk; setTableWidgetSyncData(ui->tableWidget); query(); } else { m_state = NotLogin; } if(m_state!=LoginOk) { setTableWidgetNoData(ui->tableWidget); setDetailNoData(); } } void FormShkjReserve::initUI() { ui->labelMovie->setMovie(m_movieSmall); ui->labelMovie->setVisible(false); ui->label->setStyleSheet("color:red"); ui->tableWidget->setColumnCount(m_headers.size()); ui->tableWidget->setHorizontalHeaderLabels(m_headers); ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); ui->tableWidget->setShowGrid(false); ui->tableWidget->setAlternatingRowColors(true); ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); ui->tableWidget->setSelectionMode(QAbstractItemView::MultiSelection); ui->tableWidget->verticalHeader()->setVisible(false); ui->tableWidget->horizontalHeader()->setStyleSheet("font:12px"); ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Fixed); ui->tableWidget->verticalHeader()->setResizeMode(QHeaderView::Fixed); ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui->tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); ui->tableWidget->verticalHeader()->setFixedWidth(30); ui->tableWidget->setSortingEnabled(false); int col = 0; ui->tableWidget->setColumnWidth(col++,20); ui->tableWidget->setColumnWidth(col++,0); ui->tableWidget->setColumnWidth(col++,0); ui->tableWidget->setColumnWidth(col++,100); ui->tableWidget->setColumnWidth(col++,0);// ui->tableWidget->setColumnWidth(col++,120); ui->tableWidget->setColumnWidth(col++,180); ui->tableWidget->setColumnWidth(col++,140);// ui->tableWidget->setColumnWidth(col++,0);//8 80 ui->tableWidget->setColumnWidth(col++,0);// ui->tableWidget->setColumnWidth(col++,0);//10 80 ui->tableWidget->setColumnWidth(col++,110);// } void FormShkjReserve::setTableWidgetNoData(QTableWidget *tableWidget) { prepareTableWidgetCells(tableWidget,8); tableWidget->setEnabled(false); QTableWidgetItem *item = new QTableWidgetItem(); item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter); item->setText("暂无信息"); tableWidget->setItem(4,6,item); } void FormShkjReserve::setTableWidgetSyncData(QTableWidget *tableWidget) { prepareTableWidgetCells(tableWidget,10); tableWidget->setEnabled(false); QLabel *lbl = new QLabel(); QTableWidgetItem *item = new QTableWidgetItem("正在读取..."); lbl->setMovie(m_movieBig); lbl->setAlignment(Qt::AlignCenter|Qt::AlignVCenter); item->setTextAlignment(Qt::AlignLeft|Qt::AlignVCenter); tableWidget->setItem(4,6,item); tableWidget->setCellWidget(4,5,lbl); } void FormShkjReserve::setDetailNoData() { } void FormShkjReserve::prepareTableWidgetCells(QTableWidget *tableWidget, int rows) { tableWidget->setRowCount(0); tableWidget->setRowCount(rows); } void FormShkjReserve::fillDataList(QTableWidget *tableWidget,QStringList keys, QMultiMap list, int rowCount) { setTableWidgetNoData(tableWidget); if(rowCount==0) { return ; } prepareTableWidgetCells(tableWidget,rowCount); tableWidget->setEnabled(true); for(int row = 0;row < rowCount;row++) { QMap map; for(int col=0;colrow) value = list.values(key).at(row); map.insert(key,value); } for(int col=0;colrow) value = list.values(key).at(row); setCellElement(tableWidget,row,col,key,value,map); } } tableWidget->sortByColumn(0); tableWidget->sortByColumn(0); } void FormShkjReserve::setCellElement(QTableWidget *tableWidget, int row, int col, QString key,QString value,QMap data) { QTableWidgetItem* item = new QTableWidgetItem(); QVariant display = value; QVariant tooltip = value; item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter); //进行数据翻译 if(key=="serialnum") { tooltip = ""; display = ""; item->setCheckState(Qt::Unchecked); } else if(key=="isp") { if(value=="0") display = "全部"; else if(value=="1") display = "移动"; else if(value=="2") display = "联通"; else if(value=="3") display = "电信"; else display = "未知"; tooltip = display; } else if(key=="state") { if(value=="1") display = "预约中"; else if(value=="2") display = "已完成"; else display = "未知"; tooltip = display; } else if(key=="updatetime") { int days = value.toInt(); if(days<30) display = QString("%1天内").arg(days); else if(days==30) display = QString("1月内"); else if(days==90) display = QString("3月内"); else if(days==180) display = QString("半年内"); else display = QString::number(days); // QDateTime dt; // dt= QDateTime::currentDateTime(); // dt = dt.addDays(0-days); // display = dt.toString("yyyy-MM-dd"); tooltip = display; } else if(key=="city") { QString province = data.value("province"); if(province!=value) display = province+value; tooltip = display; //item->setTextColor(Qt::red); } else if(key=="attennum") { item->setTextColor(Qt::green); } else if(key=="updatenum") { item->setTextColor(Qt::red); } if(key == "op") { delete item; QPushButton *button = new QPushButton(this); button->setProperty("class","txt-green"); button->setCursor(Qt::PointingHandCursor); button->setText("选择实号"); tableWidget->setCellWidget(row,col,button); connect(button,SIGNAL(clicked()),this,SLOT(onButtonClicked())); } else if(key == "label1") { delete item; QLabel *label = new QLabel(this); label->setText(QString("%1人").arg(data.value("attennum"))); label->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter); tableWidget->setCellWidget(row,col,label); } else if(key == "label2") { delete item; QLabel *label = new QLabel(this); label->setText(QString("共%1条").arg(data.value("updatenum"))); label->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter); tableWidget->setCellWidget(row,col,label); } else { item->setData(Qt::DisplayRole,display); item->setData(Qt::UserRole,value); item->setData(Qt::ToolTipRole,tooltip); tableWidget->setItem(row,col,item); } } void FormShkjReserve::query() { ui->labelMovie->setVisible(true); QString userhash= m_account.value("ssohash"); QString json = m_cubews->getMyHmyyInfo(userhash); ui->labelMovie->setVisible(false); QMultiMap list; RespGetMyHmyyInfo resp(json); if(resp.getRtnCode()==1) { list = resp.getRs(); } else { qDebug()<<"RespGetMyHmyyInfo"<tableWidget); setDetailNoData(); return ; } // QStringList ids; // QString curId; // for(int i=0;itableWidget->rowCount();i++) // { // QTableWidgetItem *item = ui->tableWidget->item(i,0); // if(item) // { // if(item->checkState()==Qt::Checked) // { // ids<data(Qt::UserRole).toString(); // } // if(item->isSelected()) // { // curId = item->data(Qt::UserRole).toString(); // } // } // } fillDataList(ui->tableWidget,m_keys,list,rows); // for(int i=0;itableWidget->rowCount();i++) // { // if(curId.isEmpty()) // { // ui->tableWidget->selectRow(i); // //on_tableWidget_cellClicked(i,0); // break; // } // QTableWidgetItem *item = ui->tableWidget->item(i,0); // if(item) // { // QString id = item->data(Qt::UserRole).toString(); // if(curId==id) // { // ui->tableWidget->selectRow(i); // //on_tableWidget_cellClicked(i,0); // } // for(int i=0;isetCheckState(Qt::Checked); // break; // } // } // } // } } void FormShkjReserve::showRtnMessage(int row) { } void FormShkjReserve::onDataUpdated() { query(); } void FormShkjReserve::onButtonClicked() { QPushButton *btn = qobject_cast(sender()); for(int i=0;itableWidget->rowCount();i++) { QWidget *widget = ui->tableWidget->cellWidget(i,11); if(widget) { if(btn==qobject_cast(widget)) { QTableWidgetItem *item1 = ui->tableWidget->item(i,2); QTableWidgetItem *item2 = ui->tableWidget->item(i,3); emit rowButtonClicked("HOTAREA",item1->data(Qt::UserRole).toString()+"-"+item2->data(Qt::UserRole).toString()); break; } } } } void FormShkjReserve::displayDetail(QString hmzs, QStringList infos, QStringList nums,QString dealstatus) { } void FormShkjReserve::download(QString srvID, QString qryID) { QString ssoHash = m_account.value("ssohash"); if(ssoHash.isEmpty()) { QMessageBox::critical(this,"提示","您现在还没有登录系统,请登录后再操作!",QMessageBox::Ok); return; } if(srvID.isEmpty()) { QMessageBox::critical(this,"提示","请先选择要下载的任务单!",QMessageBox::Ok); return ; } QString total; QString dealstatus; for(int i=0;itableWidget->rowCount();i++) { QTableWidgetItem *item = ui->tableWidget->item(i,0); if(item) { if(srvID == item->data(Qt::UserRole).toString()) { total = ui->tableWidget->item(i,4)->data(Qt::UserRole).toString(); QLabel *lbl = qobject_cast(ui->tableWidget->cellWidget(i,1)); dealstatus = lbl->property("value").toString(); break; } } } if(dealstatus.isEmpty()||total.isEmpty()) { QMessageBox::critical(this,"提示","无法获取下载文件必要的信息!",QMessageBox::Ok); return ; } if(dealstatus=="2") { if(QMessageBox::Yes!=QMessageBox::question(NULL, "确认", QString("您需要消耗%1条下载量,是否继续?").arg(total) ,QMessageBox::Yes,QMessageBox::No)) { return ; } } QString saveZipFileName = getSaveZipFileName(qryID); if(saveZipFileName.isEmpty()) return ; QString cachePath = SNCDataBase::getShkjCachePath(srvID); bool iscached = false; if(!cachePath.isEmpty()) { if(QFile::exists(cachePath)) { iscached = true; } } this->setCursor(Qt::WaitCursor); if(iscached) { downloadFromLocal(saveZipFileName,cachePath); } else { downloadFromRemote(saveZipFileName,srvID,dealstatus,total); } this->setCursor(Qt::ArrowCursor); } void FormShkjReserve::downloadFromLocal(QString saveFileName,QString cacheFile) { QFile::copy(cacheFile,saveFileName); QMessageBox::information(this,"提示","下载成功!",QMessageBox::Ok); } void FormShkjReserve::downloadFromRemote(QString saveFileName,QString srvID,QString dealstatus,QString total) { QString ssoHash = m_account.value("ssohash"); QString json = m_cubews->userServiceVerify("DlJSJCresultFile",QString("%1,%2").arg(dealstatus).arg(total),ssoHash); RespUserServiceVerify response1(json); if(response1.getRtnCode()<=0) { QMessageBox::critical(this,"提示",response1.getRtnMemo(),QMessageBox::Ok); return ; } // json = m_cubews->dlJSJCresultFile(srvID,ssoHash); // RespDlJSJCresultFile response(json); // if(response.getRtnCode()==1) // { // QString fileContent = response.getFileContent(); // QByteArray array = QByteArray::fromBase64(fileContent.toAscii()); // QFile file(saveFileName); // file.open(QIODevice::WriteOnly); // file.write(array); // file.close(); // QString cachPath = cacheDownloadFile(saveFileName); // SNCDataBase::updateShkjCachePath(srvID,cachPath); // emit dataDownload(); // QMessageBox::information(this,"提示","下载成功!",QMessageBox::Ok); // } // else // { // QMessageBox::critical(this,"提示",response.getRtnMemo(),QMessageBox::Ok); // } } QString FormShkjReserve::getSaveZipFileName(QString qryID) { QFileDialog::Options options; QString selectedFilter; QString exportDir = SNCDataBase::getExportDir(); QString defaultZipFileName = QString("实号快检_%1.zip").arg(qryID); QString saveZipFileName = QFileDialog::getSaveFileName(this,"另存为",exportDir + "\\" + defaultZipFileName, tr("ZIP Files (*.zip)"), &selectedFilter, options); if(!saveZipFileName.isEmpty()) { QFileInfo fileInfo(saveZipFileName); exportDir = fileInfo.absolutePath(); SNCDataBase::updateExportDir(exportDir); } return saveZipFileName; } QString FormShkjReserve::cacheDownloadFile(QString fileName) { QString userCode = m_account.value("usercode"); QString date = QDate::currentDate().toString("yyyyMM"); QString cachePath = QCoreApplication::applicationDirPath()+\ QString("/../data/%1/cache/shkj/download/%2/").arg(userCode).arg(date); QDir dir; dir.mkpath(cachePath); QFileInfo fileinfo(fileName); QFile::copy(fileName,cachePath + fileinfo.fileName()); return cachePath + fileinfo.fileName(); } bool FormShkjReserve::chkAccountState(AccountLoginState state) { bool ret = false; switch(state) { case NotLogin: QMessageBox::critical(this,"提示","您现在还没有登录系统,请登录后再操作!",QMessageBox::Ok); break; case NotBind: QMessageBox::critical(this,"提示","此项服务尚未开通,请开通后再操作!",QMessageBox::Ok); break; case LoginError: QMessageBox::critical(this,"提示","此项服务暂时无法连接,请稍候重试!",QMessageBox::Ok); break; default: ret = true; } return ret; } void FormShkjReserve::on_pushButton_clicked() { if(!chkAccountState(m_state)) return ; query(); } void FormShkjReserve::on_pushButtonDel_clicked() { if(!chkAccountState(m_state)) return ; if(QMessageBox::Yes!=QMessageBox::question(NULL, "确认", QString("您确定要删除吗?") ,QMessageBox::Yes,QMessageBox::No)) { return ; } QString ssohash = m_account.value("ssohash"); for(int i=0;itableWidget->rowCount();i++) { QTableWidgetItem *item = ui->tableWidget->item(i,0); if(item) { if(item->checkState()==Qt::Checked) { QTableWidgetItem *item1 = ui->tableWidget->item(i,1); QString ordid = item1->data(Qt::UserRole).toString(); QString json = m_cubews->delHmyy(ordid,ssohash); RespDelHmyy resp(json); } } } query(); } void FormShkjReserve::on_checkBox_clicked() { for(int i=0;itableWidget->rowCount();i++) { QTableWidgetItem *item = ui->tableWidget->item(i,0); if(item) { if(ui->checkBox->isChecked()) { item->setCheckState(Qt::Checked); } else { item->setCheckState(Qt::Unchecked); } } } } void FormShkjReserve::on_tableWidget_clicked(const QModelIndex &index) { if(index.column()==0) { QTableWidgetItem *item = ui->tableWidget->item(index.row(),index.column()); if(item) { if(item->checkState()==Qt::Checked) { ui->tableWidget->selectRow(index.row()); } else { ui->tableWidget->selectRow(index.row()); } } } } void FormShkjReserve::on_tableWidget_itemSelectionChanged() { for(int i=0;itableWidget->rowCount();i++) { QTableWidgetItem *item = ui->tableWidget->item(i,0); if(item->isSelected()) { item->setCheckState(Qt::Checked); } else { item->setCheckState(Qt::Unchecked); } } }