| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- #include "segmentupdate.h"
- #include "unzip.h"
- #include "SNCDataBase.h"
- #include "wsnumchk.h"
- #include "respdlbaseseginfo.h"
- #include "respdldyseginfo.h"
- #include "respchkbasesegversion.h"
- #include "respgetsegdyinfo.h"
- SegmentUpdate::SegmentUpdate(QObject *parent) :
- QThread(parent)
- {
- method = UpdateBaseInfo;
- stop = false;
- }
- void SegmentUpdate::abort()
- {
- this->stop = true;
- }
- void SegmentUpdate::setMethod(SegmentUpdateMethod method)
- {
- this->method = method;
- }
- SegmentUpdate::~SegmentUpdate()
- {
- QFile::remove(QDir::tempPath()+"/snc_baseseg.zip");
- QFile::remove(QDir::tempPath()+"/snc_dynamicseg.zip");
- QFile::remove(QDir::tempPath()+"/speednumcube/baseseg.csv");
- QFile::remove(QDir::tempPath()+"/speednumcube/dynamicseg.csv");
- qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")\
- <<"SegmentUpdate Destroyed.";
- }
- void SegmentUpdate::setPara(QString key, QString value)
- {
- this->paras.insert(key,value);
- }
- void SegmentUpdate::updateSegmentBaseInfo()
- {
- WSNumChk client;
- if(tip.isEmpty())
- tip = "正在检测号段库是否有更新...";
- emit updateProgress(tip,0);
- QString json = client.dlBaseSegInfo(SNCDataBase::getSegVersion());
- RespDlBaseSegInfo response(json);
- int rtCode = response.getRtnCode();
- if(rtCode==0)
- {
- emit updateProgress("您的号段库已经更新至最新版本!",1);
- }
- else if(rtCode < 0)
- {
- emit updateProgress("号段升级过程中发生错误,无法升级!",-3);
- }
- else
- {
- QString newVersion = response.getNewVersion();
- QString baseSegInfo = response.getBaseSegInfo();
- QByteArray arrayBase = QByteArray::fromBase64(baseSegInfo.toAscii());
- QFile file1(QDir::tempPath()+"/snc_baseseg.zip");
- file1.open(QIODevice::WriteOnly);
- file1.write(arrayBase);
- file1.close();
- emit updateProgress("正在安装号段数据库...",0);
- qDebug()<<response.getRtnCode()<<response.getRtnMemo();
- if(!stop)
- {
- if(extractBase())
- SNCDataBase::updateBaseSegInfo(newVersion,QDir::tempPath()+"/speednumcube/baseseg.csv");
- }
- emit updateProgress("您的号段库已经更新至最新版本!",1);
- }
- }
- void SegmentUpdate::updateSegmentChkInfo()
- {
- WSNumChk client;
- emit updateProgress("正在下载最新的号段信息...",0);
- QString json = client.dlDySegInfo(paras.value("areacode"));
- if(!json.isEmpty()){
- RespDlDySegInfo *response = new RespDlDySegInfo(json);
- int rtCode = response->getRtnCode();
- if(rtCode==0)
- {
- emit updateProgress("您的号段库已经更新至最新版本!",1);
- }
- else if(rtCode < 0 && rtCode > -3)
- {
- emit updateProgress("号段升级过程中发生错误,无法升级!",-2);
- }
- else if(rtCode == -3)
- {
- emit updateProgress("软件版本已经过期,请立即升级至新版本!",-3);
- }
- else
- {
- QString segChkInfo = response->getSegChkInfo();
- QByteArray arrayBase = QByteArray::fromBase64(segChkInfo.toAscii());
- QFile file1(QDir::tempPath()+"/snc_dynamicseg.zip");
- file1.open(QIODevice::WriteOnly);
- file1.write(arrayBase);
- file1.close();
- emit updateProgress("正在安装号段数据库...",0);
- QString today = QDate::currentDate().toString("yyyy-MM-dd");
- if(!stop)
- {
- if(extractDynamic())
- SNCDataBase::updateDynamicSegInfo(today,paras.value("areacode"),QDir::tempPath()+"/speednumcube/dynamicseg.csv");
- }
- emit updateProgress("您的号段库已经更新至最新版本!",1);
- }
- delete response;
- }
- else
- emit updateProgress("网络连接不可用!",-1);
- }
- bool SegmentUpdate::checkBaseSegVersion()
- {
- emit updateProgress("正在检测号段库是否有更新...",0);
- WSNumChk client;
- QString json = client.chkBaseSegVersion(SNCDataBase::getSegVersion());
- bool update = false;
- if(json.isEmpty())
- {
- emit updateProgress("网络连接不可用!",-1);
- }
- else
- {
- RespChkBaseSegVersion resp(json);
- int chkCode = resp.getRtnCode();
- if(chkCode == 0)
- {
- emit updateProgress("您的号段库已经更新至最新版本!",1);
- //tip = "您的号段库已经更新至最新版本!";
- }
- else if(chkCode == 1)
- {
- emit newNumbers(resp.getNewNumber());
- emit updateProgress("发现新版本"+resp.getNewVersion()+",版本号发生变化,需要升级号段库信息!",0);
- tip = QString("正在下载新版本%1,共%2个号段...").arg(resp.getNewVersion()).arg(resp.getNewNumber());
- update = true;
- }
- else if(chkCode == -1)
- {
- emit updateProgress("号段当前版本号非法!",-2);
- }
- else
- {
- emit updateProgress("检测版本过程中发生错误,无法升级!",-3);
- }
- }
- return update;
- }
- void SegmentUpdate::getSingleSegDyInfo()
- {
- WSNumChk client;
- QString json = client.getDySegInfo(paras.value("seg"));
- if(!json.isEmpty()){
- RespGetSegDyInfo *response = new RespGetSegDyInfo(json);
- int rtCode = response->getRtnCode();
- if(rtCode==0)
- {
- emit updateProgress("没有该号段的数据!",0);
- }
- else if(rtCode == -1)
- {
- emit updateProgress("号段非法!",-1);
- }
- else if(rtCode == -2)
- {
- emit updateProgress("认证码错误!",-2);
- }
- else if(rtCode == -3)
- {
- emit updateProgress("软件版本已经过期,请立即升级至新版本!",-3);
- }
- else if(rtCode == 1)
- {
- QString segChkInfo = response->getSegChkInfo();
- emit updateProgress(segChkInfo,1);
- }
- delete response;
- }
- else
- emit updateProgress("网络连接不可用!",-1);
- }
- void SegmentUpdate::run()
- {
- tip = "";
- QTime time;
- time.start();
- msleep(1000);
- switch(this->method)
- {
- case JustCheckVersion:
- checkBaseSegVersion();
- break;
- case UpdateBaseInfo:
- checkBaseSegVersion();
- updateSegmentBaseInfo();
- break;
- case UpdateDynamicInfo:
- updateSegmentChkInfo();
- break;
- case JustGetSingleSegDyInfo:
- getSingleSegDyInfo();
- break;
- default:
- break;
- }
- emit updateFinished();
- qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")\
- <<"Segment Update Finish, Elapsed Time "<<time.elapsed();
- }
- bool SegmentUpdate::extractBase()
- {
- UnZip::ErrorCode ec;
- UnZip uz;
- QDir dir;
- if(!dir.exists(QDir::tempPath()+"/speednumcube"))
- {
- dir.mkdir(QDir::tempPath()+"/speednumcube");
- }
- ec = uz.openArchive(QDir::tempPath()+"/snc_baseseg.zip");
- if (ec != UnZip::Ok) {
- qDebug() << "Failed to open archive: " << uz.formatError(ec).toAscii().data() << endl << endl;
- return false ;
- }
- ec = uz.extractAll(QDir::tempPath()+"/speednumcube");
- if (ec != UnZip::Ok) {
- qDebug() << "Extraction failed: " << uz.formatError(ec).toAscii().data() << endl << endl;
- uz.closeArchive();
- return false ;
- }
- return true;
- }
- bool SegmentUpdate::extractDynamic()
- {
- UnZip::ErrorCode ec;
- UnZip uz;
- QDir dir;
- if(!dir.exists(QDir::tempPath()+"/speednumcube"))
- {
- dir.mkdir(QDir::tempPath()+"/speednumcube");
- }
- ec = uz.openArchive(QDir::tempPath()+"/snc_dynamicseg.zip");
- if (ec != UnZip::Ok) {
- qDebug() << "Failed to open archive: " << uz.formatError(ec).toAscii().data() << endl << endl;
- return false ;
- }
- ec = uz.extractAll(QDir::tempPath()+"/speednumcube");
- if (ec != UnZip::Ok) {
- qDebug() << "Extraction failed: " << uz.formatError(ec).toAscii().data() << endl << endl;
- uz.closeArchive();
- return false ;
- }
- return true;
- }
|