| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602 |
- #include "dialogselectsegment2.h"
- #include "SNCDataBase.h"
- #include "ui_dialogselectsegment2.h"
- #include "numberreg.h"
- #include "segmentupdate.h"
- DialogSelectSegment2::DialogSelectSegment2(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::DialogSelectSegment2)
- {
- ui->setupUi(this);
- connect(ui->tableWidget->verticalScrollBar(),SIGNAL(valueChanged(int)),this,SLOT(onSlideValueChanged(int)));
- ui->startEdit->setValidator(new QRegExpValidator(NumberReg::getSegmentReg(), this));
- ui->endEdit->setValidator(new QRegExpValidator(NumberReg::getSegmentReg(), this));
- connect(ui->tableWidget->horizontalHeader(), SIGNAL(sectionClicked(int)),this, SLOT(sortByColumnOffset(int)));
- ui->widget->setVisible(true);
- ui->endEdit->setVisible(false);
- ui->selfRB->setVisible(false);
- ui->pushButtonPosition->setEnabled(false);
- ui->startEdit->setText("");
- this->bAppend = false;
- loadCity();
- setDefaultSegState();
- movie = new QMovie(":/fetchfromserver.gif");
- movie->start();
- ui->tableWidget->installEventFilter(this);
- ui->labelCount->setText("共" + QString::number(SNCDataBase::getSegCount()) + "个号段");
- }
- void DialogSelectSegment2::showFetchAnimation()
- {
- initTable(13);
- //ui->tableWidget->verticalHeader()->setVisible(false);
- ui->tableWidget->setAlternatingRowColors(true);
- QLabel *lbl = new QLabel();
- lbl->setMovie(movie);
- //ui->tableWidget->setEnabled(false);
- ui->tableWidget->setCellWidget(6,12,lbl);
- QTableWidgetItem *item = new QTableWidgetItem(" 正在读取...");
- item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
- ui->tableWidget->setItem(6,12,item);
- //ui->tableWidget->resizeColumnsToContents();
- //ui->tableWidget->resizeRowsToContents();
- }
- void DialogSelectSegment2::setDefaultSegState()
- {
- initTable(13);
- }
- void DialogSelectSegment2::saveToFile()
- {
- QString path = QDir::tempPath() + QString("/SNCTempFile/");
- QDir dir(path);
- if(!dir.exists())
- {
- dir.mkpath(path);
- }
- QList<QStringList> segs = getSelectedSegmentsInfo();
- QString fileName = QString("号码推荐_%1_%2_(共%3个号段).txt").arg(currentProvince).\
- arg(currentCity).\
- arg(segs.size());
- m_filename.clear();
- QString fullPath = path + fileName;
- m_filename.insert("fullpath",fullPath);
- m_filename.insert("filename",fileName);
- QFile file(fullPath);
- if(!file.open(QIODevice::WriteOnly))
- return ;
- QTextStream out(&file);
- for(int i=0;i<segs.size();i++)
- {
- out<<segs.at(i).at(1)+"\r\n";
- }
- file.close();
- }
- void DialogSelectSegment2::onSlideValueChanged(int value)
- {
- renderViewPort(value);
- }
- void DialogSelectSegment2::onSegmentUpdateFinished()
- {
- ui->treeView->setEnabled(true);
- fetchSegmentData();
- }
- void DialogSelectSegment2::renderViewPort(int value)
- {
- for(int j = qMax(0,value - 1);j < qMin(value + 20,ui->tableWidget->rowCount());j++)
- {
- if(!ui->tableWidget->cellWidget(j,12))
- {
- QTableWidgetItem *itemSample = this->ui->tableWidget->item(j,5);
- QTableWidgetItem *itemNumber = this->ui->tableWidget->item(j,6);
- double sampleIndex = qMin(itemSample->data(Qt::UserRole).toInt(),100);
- double numberIndex = qMin(itemNumber->data(Qt::UserRole).toInt(),100);
- QLabel *labelSample = createSampleLabel(sampleIndex);
- QLabel *labelNumber = createNumberLabel(numberIndex);
- ui->tableWidget->setCellWidget(j,12,labelSample);
- ui->tableWidget->setCellWidget(j,13,labelNumber);
- }
- }
- }
- DialogSelectSegment2::~DialogSelectSegment2()
- {
- delete segmentModel;
- delete ui;
- }
- void DialogSelectSegment2::loadCity()
- {
- segmentModel = new QStandardItemModel();
- segmentModel->setHorizontalHeaderItem(0,new QStandardItem("号码地区"));
- QString current;
- QStandardItem *parentItem = new QStandardItem();
- QList<QStringList> maps= SNCDataBase::getRegionInfo();
- if(maps.size()!=2)
- return ;
- ui->treeView->header()->setStyleSheet("font:12px");
- for(int i=0;i<maps.at(0).size();i++)
- {
- QString province = maps.at(1).at(i);
- QString city = maps.at(0).at(i);
- QStandardItem *provinceItem;
- QStandardItem *cityItem;
- if(current!=province)
- {
- provinceItem= new QStandardItem(province);
- cityItem= new QStandardItem(city);
- parentItem = provinceItem;
- current = province;
- segmentModel->appendRow(provinceItem);
- parentItem->appendRow(cityItem);
- }
- else
- {
- cityItem= new QStandardItem(city);
- parentItem->appendRow(cityItem);
- }
- }
- ui->treeView->setModel(segmentModel);
- }
- void DialogSelectSegment2::on_treeView_clicked(const QModelIndex &index)
- {
- if(index.parent().isValid())
- {
- this->currentProvince = index.parent().data().toString();
- this->currentCity = index.data().toString();
- /**///
- QString areacode = SNCDataBase::getAreaCodeByCityName(this->currentCity);
- QString checkdate = SNCDataBase::getCitySegLastCheckDate(areacode);
- QString today = QDate::currentDate().toString("yyyy-MM-dd");
- showFetchAnimation();
- SegmentUpdate *update = new SegmentUpdate();
- if(checkdate!=today)
- update->setMethod(UpdateDynamicInfo);
- update->setPara("areacode",areacode);
- connect(update,SIGNAL(updateFinished()),this,SLOT(onSegmentUpdateFinished()));
- connect(update,SIGNAL(updateProgress(QString,int)),this,SLOT(onUpdateMessage(QString,int)));
- ui->treeView->setEnabled(false);
- update->start();
- }
- }
- void DialogSelectSegment2::fetchSegmentData()
- {
- QStringList list;
- if(this->currentCity.isEmpty())
- return ;
- if(ui->allRB->isChecked())
- list = SNCDataBase::getSegmentDynamicByCityAll(this->currentCity);
- if(ui->cmccRB->isChecked())
- list = SNCDataBase::getSegmentDynamicByCityAndCorp(this->currentCity,"CMCC");
- if(ui->cutcRB->isChecked())
- list = SNCDataBase::getSegmentDynamicByCityAndCorp(this->currentCity,"CUTC");
- if(ui->ctccRB->isChecked())
- list = SNCDataBase::getSegmentDynamicByCityAndCorp(this->currentCity,"CTCC");
- if(ui->selfRB->isChecked())
- list = SNCDataBase::getSegmentDynamicByCityAndRange(this->currentCity,this->ui->startEdit->text(),this->ui->endEdit->text());
- initTable(list.size());
- for(int i=0;i<list.size();i++)
- {
- QStringList records = list.at(i).split(",");
- for(int j = 0;j<records.size()-1;j++)
- {
- QTableWidgetItem *item;
- item = new QTableWidgetItem();
- item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
- item->setData(Qt::DisplayRole,records.at(j).toInt());
- item->setData(Qt::UserRole,records.at(j));
- if(j==1 || j==2 || j==3 || j==4 || j==7)
- {
- QTableWidgetItem *itemDisplay;
- itemDisplay = new QTableWidgetItem();
- itemDisplay->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
- if( j ==1 || j==2 || j==3 || j==4 )
- itemDisplay->setData(Qt::DisplayRole,records.at(j)+"%");
- else
- {
- int day = records.at(j).toInt();
- if(day<0)
- itemDisplay->setData(Qt::DisplayRole,"N/A");
- else if(day==0)
- itemDisplay->setData(Qt::DisplayRole,"最新");
- else if(day<7)
- itemDisplay->setData(Qt::DisplayRole,QString::number(day)+"天前");
- else if(day>=7 && day <=31)
- itemDisplay->setData(Qt::DisplayRole,QString::number(day/7)+"周前");
- else
- itemDisplay->setData(Qt::DisplayRole,"1个月前");
- }
- this->ui->tableWidget->setItem(i,j+7,itemDisplay);
- }
- this->ui->tableWidget->setItem(i,j,item);
- }
- }
- this->ui->tableWidget->sortByColumn(6);
- this->ui->tableWidget->sortByColumn(6);
- renderViewPort(ui->tableWidget->verticalScrollBar()->value());
- ui->lblCount->setText(QString("您已选择%1个号段").arg(0));
- for(int i=0;i<ui->tableWidget->rowCount();i++)
- {
- QTableWidgetItem *item = ui->tableWidget->item(i,0);
- //qDebug()<<item->data(Qt::DisplayRole)<<ui->startEdit->text();
- if(item->data(Qt::DisplayRole).toString()==ui->startEdit->text())
- {
- //ui->tableWidget->setAutoScroll(true);
- //QModelIndex index = ui->tableWidget->model()->index
- ui->tableWidget->setCurrentItem(item);
- ui->tableWidget->verticalScrollBar()->setValue(i);
- ui->tableWidget->viewport()->setFocus();
- ui->lblCount->setText(QString("您已选择%1个号段").arg(1));
- break;
- }
- }
- }
- void DialogSelectSegment2::on_allRB_clicked()
- {
- //ui->widget->setVisible(false);
- fetchSegmentData();
- }
- void DialogSelectSegment2::on_cmccRB_clicked()
- {
- //ui->widget->setVisible(false);
- fetchSegmentData();
- }
- void DialogSelectSegment2::on_cutcRB_clicked()
- {
- //ui->widget->setVisible(false);
- fetchSegmentData();
- }
- void DialogSelectSegment2::on_ctccRB_clicked()
- {
- //ui->widget->setVisible(false);
- fetchSegmentData();
- }
- void DialogSelectSegment2::on_selfRB_clicked()
- {
- //ui->widget->setVisible(true);
- if(ui->startEdit->hasAcceptableInput()&&ui->endEdit->hasAcceptableInput()&&ui->selfRB->isChecked())
- fetchSegmentData();
- }
- void DialogSelectSegment2::on_startEdit_textChanged(const QString &arg1)
- {
- //if(ui->startEdit->hasAcceptableInput()&&ui->endEdit->hasAcceptableInput()&&ui->selfRB->isChecked())
- // fetchSegmentData();
- if(ui->startEdit->hasAcceptableInput()){
- QStringList list = SNCDataBase::getCityBySegment(ui->startEdit->text());
- if(list.size()==3)
- ui->pushButtonPosition->setEnabled(true);
- else
- ui->pushButtonPosition->setEnabled(false);
- }
- else
- ui->pushButtonPosition->setEnabled(false);
- }
- void DialogSelectSegment2::on_endEdit_textChanged(const QString &arg1)
- {
- if(ui->startEdit->hasAcceptableInput()&&ui->endEdit->hasAcceptableInput()&&ui->selfRB->isChecked())
- fetchSegmentData();
- }
- QList<QStringList> DialogSelectSegment2::getSelectedSegmentsInfo()
- {
- QList<QStringList> segments;
- if(this->currentCity.isEmpty())
- return segments;
- for(int i=0;i<this->ui->tableWidget->rowCount();i++)
- {
- QStringList infos;
- for(int j=0;j<=7;j++)
- {
- QTableWidgetItem *item;
- item = this->ui->tableWidget->item(i,j);
- if(0 == j)
- {
- if(!item->isSelected())
- break;
- else
- infos.append(this->currentCity);
- }
- infos.append(item->data(Qt::UserRole).toString());
- }
- if(infos.size()>0)
- segments.append(infos);
- }
- return segments;
- }
- QMap<QString,QString> DialogSelectSegment2::getSaveFileName()
- {
- return m_filename;
- }
- QLabel* DialogSelectSegment2::createSampleLabel(double sampleIndex)
- {
- QLabel *label = new QLabel();
- /*label->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
- label->setMaximumWidth(200);
- label->setMinimumWidth(200);
- label->setMaximumHeight(10);
- label->setMinimumHeight(10);
- */
- if(sampleIndex<20)
- label->setPixmap(QPixmap(":/red-bar.png"));
- else if(sampleIndex>=20 && sampleIndex<50)
- label->setPixmap(QPixmap(":/yellow-bar.png"));
- else
- label->setPixmap(QPixmap(":/blue-bar.png"));
- /*
- if(sampleIndex<20)
- label->setStyleSheet("QLabel{background-image: url(:/red-bar.png);background-repeat:norepeat; width:12px; background-color: rgb(255, 170, 255); }");
- else if(sampleIndex>=20 && sampleIndex<50)
- label->setStyleSheet("QLabel{background-image: url(:/yellow-bar.png); background-color: rgb(255, 170, 255); }");
- else
- label->setStyleSheet("QLabel{background-image: url(:/blue-bar.png); background-color: rgb(255, 170, 255); }");
- */
- label->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Preferred);
- label->setMinimumWidth(sampleIndex);
- label->setMaximumWidth(sampleIndex);
- return label;
- }
- QLabel* DialogSelectSegment2::createNumberLabel(double numberIndex)
- {
- QLabel *label = new QLabel();
- if(numberIndex==0)
- label->setPixmap(QPixmap(":/s0.png"));
- else if(numberIndex>0 && numberIndex<20)
- label->setPixmap(QPixmap(":/s1.png"));
- else if(numberIndex>=20 && numberIndex<40)
- label->setPixmap(QPixmap(":/s2.png"));
- else if(numberIndex>=40 && numberIndex<60)
- label->setPixmap(QPixmap(":/s3.png"));
- else if(numberIndex>=60 && numberIndex<80)
- label->setPixmap(QPixmap(":/s4.png"));
- else
- label->setPixmap(QPixmap(":/s5.png"));
- return label;
- }
- void DialogSelectSegment2::sortByColumnOffset(int col)
- {
- if(col == 8)
- col = 1;
- else if(col == 9)
- col = 2;
- else if(col == 10)
- col = 3;
- else if(col == 11)
- col = 4;
- else if(col == 12)
- col = 5;
- else if(col == 13)
- col = 6;
- else if(col == 14)
- col = 7;
- if(!ui->tableWidget->item(0,0))
- return ;
- this->ui->tableWidget->sortByColumn(col);
- renderViewPort(ui->tableWidget->verticalScrollBar()->value());
- }
- void DialogSelectSegment2::initTable(int rows)
- {
- ui->tableWidget->horizontalHeader()->setVisible(true);
- ui->tableWidget->verticalHeader()->setVisible(true);
- ui->tableWidget->horizontalHeader()->setStyleSheet("font:12px");
- QStringList headers;
- headers.append("号段");
- headers.append("实号");
- headers.append("空号");
- headers.append("停机");
- headers.append("关机");
- headers.append("样本数量");
- headers.append("推荐度");
- headers.append("更新时间");
- headers.append("实号");
- headers.append("空号");
- headers.append("停机");
- headers.append("关机");
- headers.append("样本数量");
- headers.append("推荐度");
- headers.append("更新时间");
- for(int j=0;j<ui->tableWidget->rowCount();j++)
- {
- if( ui->tableWidget->cellWidget(j,12))
- {
- delete ui->tableWidget->cellWidget(j,12);
- }
- if( ui->tableWidget->cellWidget(j,13))
- {
- delete ui->tableWidget->cellWidget(j,13);
- }
- }
- this->ui->tableWidget->setRowCount(0);
- this->ui->tableWidget->setColumnCount(0);
- this->ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
- this->ui->tableWidget->setSelectionMode(QAbstractItemView::MultiSelection);
- this->ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
- this->ui->tableWidget->setColumnCount(15);
- this->ui->tableWidget->setHorizontalHeaderLabels(headers);
- this->ui->tableWidget->setShowGrid(false);
- this->ui->tableWidget->setAlternatingRowColors(true);
- this->ui->tableWidget->setColumnWidth(0,90);
- this->ui->tableWidget->setColumnWidth(8,40);
- this->ui->tableWidget->setColumnWidth(9,40);
- this->ui->tableWidget->setColumnWidth(10,40);
- this->ui->tableWidget->setColumnWidth(11,40);
- this->ui->tableWidget->setColumnWidth(12,120);
- this->ui->tableWidget->setColumnWidth(13,120);
- this->ui->tableWidget->setColumnWidth(14,90);
- this->ui->tableWidget->hideColumn(1);
- this->ui->tableWidget->hideColumn(2);
- this->ui->tableWidget->hideColumn(3);
- this->ui->tableWidget->hideColumn(4);
- this->ui->tableWidget->hideColumn(5);
- this->ui->tableWidget->hideColumn(6);
- this->ui->tableWidget->hideColumn(7);/**/
- this->ui->tableWidget->setRowCount(rows);
- ui->tableWidget->verticalHeader()->setVisible(false);
- ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Fixed);
- ui->tableWidget->verticalHeader()->setResizeMode(QHeaderView::Fixed);
- ui->tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
- ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- ui->tableWidget->verticalHeader()->setFixedWidth(40);
- ui->tableWidget->verticalHeader()->setDefaultSectionSize(30);
- ui->tableWidget->horizontalHeader()->setFixedHeight(30);
- ui->tableWidget->setSortingEnabled(true);
- }
- bool DialogSelectSegment2::isAppend()
- {
- return bAppend;
- }
- void DialogSelectSegment2::on_pushButtonAppend_clicked()
- {
- bAppend = true;
- saveToFile();
- this->accept();
- }
- void DialogSelectSegment2::on_tableWidget_itemSelectionChanged()
- {
- QList<QTableWidgetItem *> items = ui->tableWidget->selectedItems();
- if(items.size()==0)
- return ;
- int count=0;
- for(int i=0;i<items.size();i++)
- {
- QTableWidgetItem *item = items.at(i);
- if(item->column()==0)
- {
- count++;
- }
- }
- ui->lblCount->setText(QString("您已选择%1个号段").arg(count));
- }
- void DialogSelectSegment2::on_pushButtonClose_clicked()
- {
- this->reject();
- }
- void DialogSelectSegment2::onUpdateMessage(QString msg, int rtCode)
- {
- if(rtCode==-3)
- QMessageBox::critical(this,"系统通知",msg,QMessageBox::Ok);
- }
- void DialogSelectSegment2::on_pushButtonClear_clicked()
- {
- for(int i=0;i<ui->tableWidget->rowCount();i++)
- {
- QTableWidgetItem *item;
- item = this->ui->tableWidget->item(i,0);
- if(item->isSelected())
- this->ui->tableWidget->selectRow(i);
- }
- ui->lblCount->setText(QString("您已选择%1个号段").arg(0));
- }
- bool DialogSelectSegment2::eventFilter(QObject *object, QEvent *event)
- {
- if( event->type() == QEvent::KeyPress)
- {
- // if yes, we need to cast the event into a QMouseEvent type
- QKeyEvent * pKeyEvent = static_cast<QKeyEvent *>(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<QKeyEvent *>(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 DialogSelectSegment2::on_pushButtonPosition_clicked()
- {
- QStringList list = SNCDataBase::getCityBySegment(ui->startEdit->text());
- if(list.size()==3)
- {
- QString province = list.at(0);
- QString city = list.at(1);
- for(int i=0;i<segmentModel->rowCount();i++)
- {
- QModelIndex index = segmentModel->index(i,0,QModelIndex());
- bool match = false;
- if(index.data(Qt::DisplayRole)==province)
- {
- for(int j=0;j<index.model()->rowCount();j++)
- {
- QModelIndex childIndex = index.model()->index(j,0,index);
- if(childIndex.data(Qt::DisplayRole)==city){
- ui->treeView->setCurrentIndex(childIndex);
- match = true;
- on_treeView_clicked(childIndex);
- break;
- }
- }
- }
- if(match)
- break;
- }
- }
- }
- void DialogSelectSegment2::on_startEdit_returnPressed()
- {
- if(ui->pushButtonPosition->isEnabled())
- on_pushButtonPosition_clicked();
- }
|