#include "mainwindow.h" #include "ui_mainwindow.h" #include "sncdatabase.h" #include "WSSSO.h" #include "wscube.h" #include "respgetsysaccount.h" #include "respgetsysparam.h" #include "respgetmfsysparam.h" #include "dialogbindsystem.h" #include "respgetservertime.h" #include "respencrypt.h" #include "respssoheartbeat.h" #include "dialogabout.h" #include "dialoglogin.h" #include "dialogregister.h" MainWindow::MainWindow(bool istest, QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { qDebug()<setupUi(this); setStartMode(istest); initVariables(); initUI(); //updateSSOSrvParam(); //updateCubeSrvParam(); qDebug()<start(intervals * 1000); m_ssoManage = 0; m_iscloseing = false; m_formCube = new FormCube(); m_formRiddle = new FormRiddle(); connect(m_formRiddle,SIGNAL(buttonLoginClick()),this,SLOT(onPushButtonLoginClick())); m_formSHUNSHI = new FormNumCheck(); connect(m_formSHUNSHI,SIGNAL(buttonLoginClick()),this,SLOT(onPushButtonLoginClick())); m_formSHUNSHI->setClientID("sskh"); m_formZxsh = new FormZxsh(); connect(m_formZxsh,SIGNAL(buttonLoginClick()),this,SLOT(onPushButtonLoginClick())); m_formMINGYUAN = new FormNumCheck(); connect(m_formMINGYUAN,SIGNAL(buttonLoginClick()),this,SLOT(onPushButtonLoginClick())); m_formMINGYUAN->setClientID("mykh"); m_formWool = new FormWool(); connect(m_formWool,SIGNAL(buttonLoginClick()),this,SLOT(onPushButtonLoginClick())); m_labelAppVersion = new QLabel(" 主程序版本:"+SNCDataBase::getAppVersion2()+" "); m_labelSegVersion = new ClickLabel(); m_labelSegVersion->setText(" 号段版本:正在检查更新..."); connect(m_labelSegVersion,SIGNAL(clicked()),this,SLOT(onSegNewVersionFound())); m_labelWelcome = new QLabel("欢迎您,请"); m_widgetAccount = new QWidget(); m_layout = new QHBoxLayout(); m_spacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); m_buttonGroup = new QButtonGroup(); QStringList btnNames; btnNames<<"号码魔方"<<"实号快检"<<"实号快‘拣’"<<"智能号码检测"<<"防薅羊毛检测"<<"关于"; QStringList btnIcons; btnIcons<<":/snc.png"<<":/riddle.png"<<":/zxsh.png" <<":/shunshi.png"<<":/wool.png"<<":/about.png"; for(int i=0;isetIcon(QIcon(btnIcons.at(i))); button->setText(btnNames.at(i)); button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); button->setCheckable(true); button->setMinimumWidth(120); button->setMaximumWidth(120); ui->toolBar->addWidget(button); connect(button,SIGNAL(clicked()),this,SLOT(onToolButtonClick())); m_toolButtons.append(button); if(i<=5) m_buttonGroup->addButton(button); } m_pushButtonLogin = new QPushButton("登录"); m_pushButtonReg = new QPushButton("用户注册"); m_pushButtonAccount = new QPushButton("账户信息"); m_pushButtonLogout = new QPushButton("注销"); m_dialogUpdate = new DialogUpdateSeg(this); connect(m_dialogUpdate,SIGNAL(segUpdated()),this,SLOT(onSegUpdated())); connect(m_dialogUpdate,SIGNAL(segNewVersionFound()),this,SLOT(onSegNewVersionFound())); connect(m_pushButtonLogin,SIGNAL(clicked()),this,SLOT(onPushButtonLoginClick())); connect(m_pushButtonReg,SIGNAL(clicked()),this,SLOT(onPushButtonRegClick())); connect(m_pushButtonLogout,SIGNAL(clicked()),this,SLOT(onPushButtonLogoutClick())); connect(m_pushButtonAccount,SIGNAL(clicked()),this,SLOT(onPushButtonAccountClick())); connect(m_dialogUpdate,SIGNAL(segUpdated()),m_formSHUNSHI,SLOT(onSyncResume())); connect(m_dialogUpdate,SIGNAL(segNewVersionFound()),m_formSHUNSHI,SLOT(onSyncPause())); connect(m_dialogUpdate,SIGNAL(segUpdated()),m_formMINGYUAN,SLOT(onSyncResume())); connect(m_dialogUpdate,SIGNAL(segNewVersionFound()),m_formMINGYUAN,SLOT(onSyncPause())); connect(m_dialogUpdate,SIGNAL(segUpdated()),m_formRiddle,SLOT(onSyncResume())); connect(m_dialogUpdate,SIGNAL(segNewVersionFound()),m_formRiddle,SLOT(onSyncPause())); m_autoLogin = new AutoLogin(); connect(m_autoLogin,SIGNAL(autoLoginOK(QMap)),this,SLOT(onAutoLoginOK(QMap))); m_autoLogin->start(); //modify by xxw on 2014-10-19 for performance and dynamic m_autodownload = new AutoDownload(); m_autodownload->setMode(m_istest); m_autodownload->start(); } void MainWindow::initUI() { ui->verticalLayout->addWidget(m_formCube); ui->verticalLayout->addWidget(m_formSHUNSHI); ui->verticalLayout->addWidget(m_formMINGYUAN); ui->verticalLayout->addWidget(m_formZxsh); ui->verticalLayout->addWidget(m_formRiddle); ui->verticalLayout->addWidget(m_formWool); ui->verticalLayout->setSpacing(0); ui->statusBar->setLayoutDirection(Qt::RightToLeft); ui->statusBar->addWidget(m_labelAppVersion); ui->statusBar->addWidget(m_labelSegVersion); m_labelWelcome->setAlignment(Qt::AlignRight|Qt::AlignCenter); m_labelWelcome->setStyleSheet("QLabel{;font:12px;font-weight: bold;}"); m_widgetAccount->setMinimumWidth(280); ui->toolBar->addWidget(m_widgetAccount); m_widgetAccount->setLayout(m_layout); m_layout->addItem(m_spacer); m_layout->addWidget(m_labelWelcome); m_layout->addWidget(m_pushButtonLogin); m_layout->addWidget(m_pushButtonReg); m_layout->addWidget(m_pushButtonLogout); m_layout->addWidget(m_pushButtonAccount); m_pushButtonLogin->setProperty("class","txt-green-bold"); m_pushButtonReg->setProperty("class","txt-green-bold"); m_pushButtonAccount->setProperty("class","txt-green-bold"); m_pushButtonLogout->setProperty("class","txt-green-bold"); m_pushButtonLogin->setVisible(true); m_pushButtonReg->setVisible(true); m_pushButtonLogout->setVisible(false); m_pushButtonAccount->setVisible(false); m_pushButtonLogin->setCursor(Qt::PointingHandCursor); m_pushButtonReg->setCursor(Qt::PointingHandCursor); m_pushButtonAccount->setCursor(Qt::PointingHandCursor); m_pushButtonLogout->setCursor(Qt::PointingHandCursor); m_formCube->show(); m_formSHUNSHI->hide(); m_formMINGYUAN->hide(); m_formRiddle->hide(); m_formZxsh->hide(); m_formWool->hide(); m_toolButtons[0]->setChecked(true); } MainWindow::~MainWindow() { delete ui; qDebug()<show(); m_dialogUpdate->updateSegment(); } void MainWindow::logout() { m_labelWelcome->setText("欢迎您,请"); m_pushButtonLogin->setVisible(true); m_pushButtonReg->setVisible(true); m_pushButtonLogout->setVisible(false); m_pushButtonAccount->setVisible(false); QMap nothing; m_formRiddle->setAccountInfo(nothing); m_formZxsh->setAccountInfo(nothing); m_formSHUNSHI->setAccountInfo(nothing); m_formMINGYUAN->setAccountInfo(nothing); m_formWool->setAccountInfo(nothing); WSSSO sso; QString src = "mf-" + SNCDataBase::getAppVersion(); qDebug()<setText(" 号段版本:"+SNCDataBase::getSegVersion()+" "); } void MainWindow::showUpdateDialog() { m_dialogUpdate->show(); } void MainWindow::closeEvent(QCloseEvent *event) { if(m_iscloseing) { event->ignore(); qDebug()<<"closing"; return; } m_iscloseing = true; QSplashScreen *splash = new QSplashScreen; QString splashname = QDir::tempPath()+"/speednumcube/splash.jpg"; QPixmap pixmap(splashname); if(pixmap.height()>100 && pixmap.width()>100) { splash->setPixmap(pixmap); } else { splash->setPixmap(QPixmap(SNCDataBase::getSplashImageName())); } splash->setEnabled(false); splash->show(); if(!m_ssoHash.isEmpty()) { splash->showMessage(QObject::tr("正在关闭服务..."),Qt::AlignRight | Qt::AlignTop,SNCDataBase::getSplashTextColor()); m_formRiddle->stopService(); m_formSHUNSHI->stopService(); m_formMINGYUAN->stopService(); splash->showMessage(QObject::tr("正在注销..."),Qt::AlignRight | Qt::AlignTop,SNCDataBase::getSplashTextColor()); logout(); } splash->showMessage(QObject::tr("正在关闭..."),Qt::AlignRight | Qt::AlignTop,SNCDataBase::getSplashTextColor()); m_autoLogin->wait(); m_timer->stop(); delete m_autoLogin; delete m_timer; delete m_dialogUpdate; delete m_formCube; delete m_formSHUNSHI; delete m_formMINGYUAN; delete m_formRiddle; delete m_formZxsh; delete m_formWool; delete m_buttonGroup; for(int i=0;iaccept(); } void MainWindow::setStartMode(bool istest) { m_istest = istest; } void MainWindow::onAccountInfoUpdated(QMap shunshi, QMap mingyuan) { if(m_ssoManage) { m_ssoManage->wait(); delete m_ssoManage; } shunshi.insert("ssohash",m_ssoHash); mingyuan.insert("ssohash",m_ssoHash); m_formSHUNSHI->setAccountInfo(shunshi); m_formMINGYUAN->setAccountInfo(mingyuan); } void MainWindow::onSSOLoginSucceed(QMap info) { m_accountInfo = info; m_ssoHash = info.value("ssohash"); m_labelWelcome->setText("欢迎您,"+info.value("usercode")); m_pushButtonLogin->setVisible(false); m_pushButtonReg->setVisible(false); m_pushButtonLogout->setVisible(true); m_pushButtonAccount->setVisible(true); m_ssoManage = new SSOManage(m_ssoHash); //add by xxw on 2015-3-23 为了实现自动登录后 能够切换界面 if(m_formSHUNSHI->isVisible()||m_formMINGYUAN->isVisible()) { m_formSHUNSHI->hide(); m_formMINGYUAN->hide(); QString corp = SNCDataBase::getDefaultNumchkCorp(); if(corp=="shunshi"||corp.isEmpty()) m_formSHUNSHI->show(); else m_formMINGYUAN->show(); } connect(m_ssoManage,SIGNAL(accountInfoUpdated(QMap,QMap)), this,SLOT(onAccountInfoUpdated(QMap,QMap))); m_ssoManage->start(); m_formRiddle->setAccountInfo(m_accountInfo); m_formZxsh->setAccountInfo(m_accountInfo); m_formWool->setAccountInfo(m_accountInfo); } void MainWindow::onAutoLoginOK(QMap accountInfo) { onSSOLoginSucceed(accountInfo); } void MainWindow::onTimeOut() { if(m_ssoHash.isEmpty()) return ; QString apphash = SNCDataBase::getAppHash(); QString src = "mf-"+SNCDataBase::getAppVersion(); WSSSO client; QString json = client.heartBeat(m_ssoHash,src,m_refreshStamp,apphash); if(!json.isEmpty()){ RespSSOHeartBeat response(json); int rtCode = response.getRtnCode(); qDebug()<updateUserState(); } } } } void MainWindow::onToolButtonClick() { QToolButton *btn = qobject_cast(sender()); QString name = btn->text(); if(name=="关于") { DialogAbout about; about.exec(); btn->setChecked(false); } else { m_formCube->hide(); m_formSHUNSHI->hide(); m_formMINGYUAN->hide(); m_formRiddle->hide(); m_formZxsh->hide(); m_formWool->hide(); if(name=="号码魔方") { m_formCube->show(); } else if(name=="实号快检") { m_formRiddle->show(); } else if(name=="实号快‘拣’") { m_formZxsh->show(); } else if(name=="智能号码检测") { QString corp = SNCDataBase::getDefaultNumchkCorp(); if(corp=="shunshi"||corp.isEmpty()) m_formSHUNSHI->show(); else m_formMINGYUAN->show(); } else if(name=="防薅羊毛检测") { m_formWool->show(); } } } void MainWindow::onPushButtonLoginClick() { DialogLogin dialogLogin(this); connect(&dialogLogin,SIGNAL(ssoLoginSucceed(QMap)),this,SLOT(onSSOLoginSucceed(QMap))); dialogLogin.exec(); } void MainWindow::onPushButtonRegClick() { DialogRegister dialog(this); dialog.exec(); } void MainWindow::onPushButtonLogoutClick() { if(QMessageBox::Yes !=QMessageBox::question(NULL,"确认","是否注销?",QMessageBox::Yes,QMessageBox::No)) { return ; } m_formRiddle->stopService(); m_formSHUNSHI->stopService(); m_formMINGYUAN->stopService(); logout(); } void MainWindow::onPushButtonAccountClick() { WSSSO sso; QString json = sso.encrypt(m_ssoHash); RespEncrypt resp1(json); QString data = resp1.getEncryptData(); json = sso.getServerTime(); RespGetServerTime resp2(json); QString authCode; QByteArray ba; QString str = SNCDataBase::getAuthCodeUrl().arg(resp2.getServerTime().mid(0,16)); ba = QCryptographicHash::hash ( str.toAscii(), QCryptographicHash::Md5 ); authCode.append(ba.toHex()); QString url = SNCDataBase::getSSOAccountUrl() + "?s=mf&r="+authCode+"&u="+data+"&p=index"; QDesktopServices::openUrl(QUrl(url)); } //void MainWindow::updateCubeSrvParam() //{ // QString src = "mf-" + SNCDataBase::getAppVersion(); // QString authCode; // QByteArray ba; // QString str = src + SNCDataBase::getAuthCodeSyspara(); // ba = QCryptographicHash::hash ( str.toAscii(), QCryptographicHash::Md5 ); // authCode.append(ba.toHex()); // WSCube cube; // QString json2 = cube.getSysParam(src,authCode); // if(!json2.isEmpty()) // { // RespGetMfSysParam response2(json2); // qDebug()<