| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- #include "importconsumer.h"
- #include "numberreg.h"
- ImportConsumer::ImportConsumer(QList<QStringList> *buffer,QMutex *mutex)
- {
- this->buffer = buffer;
- this->stop = false;
- this->mutex = mutex;
- }
- ImportConsumer::~ImportConsumer()
- {
- qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")\
- <<"ImportConsumer Destroyed.";
- }
- void ImportConsumer::abort()
- {
- this->stop = true;
- }
- void ImportConsumer::run()
- {
- while(true)
- {
- msleep(10);
- if(stop)
- break;
- this->segments.clear();
- this->numbers.clear();
- QStringList list;
- mutex->lock();
- if(buffer->size()>0)
- list = buffer->takeLast();
- mutex->unlock();
- for(int j=0;j<list.size();j++)
- {
- if(stop)
- break ;
- QString line=list.at(j);
- QStringList lines;
- if(this->buildType == NumberFromFileImport)
- {
- if(!this->checkLine(line))
- continue;
- else
- lines.append(line);
- }
- else if(this->buildType == NumberFromFileExtract || this->buildType == NumberFromContent)
- {
- lines = this->extractFromLine(line);
- }
- for(int i=0;i<lines.size();i++)
- {
- QString segment = lines.at(i).left(7);
- QString tail = lines.at(i).mid(7,4);
- bool match;
- match = false;
- for(int i=0;i<segments.size();i++)
- {
- if(segments.at(i)==segment)
- {
- numbers[i].append(tail);
- match = true;
- break;
- }
- }
- if(!match)
- {
- segments<<segment;
- QStringList tmp;
- tmp<<tail;
- numbers.append(tmp);
- }
- }
- }
- if(segments.size()!=0)
- emit childTaskFinished(segments,numbers);
- if(list.size()>0)
- emit bufferTaked();
- }
- emit threadDestroy();
- }
- QStringList ImportConsumer::extractFromLine(QString line)
- {
- QStringList numbers;
- int count = 0;
- int pos = 0;
- QRegExp rx = NumberReg::getCellPhoneReg();
- while ((pos = rx.indexIn(line, pos)) != -1)
- {
- ++count;
- pos += rx.matchedLength();
- numbers.append(rx.capturedTexts().at(0));
- }
- return numbers;
- }
- bool ImportConsumer::checkLine(QString line)
- {
- if(line.length()!=11 || line<"13000000000" || line>"19999999999")
- {
- return false;
- }
- else
- {
- return true;
- }
- }
- void ImportConsumer::setBuildType(NumberBuildType buildType)
- {
- this->buildType = buildType;
- }
|