importconsumer.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #include "importconsumer.h"
  2. #include "numberreg.h"
  3. ImportConsumer::ImportConsumer(QList<QStringList> *buffer,QMutex *mutex)
  4. {
  5. this->buffer = buffer;
  6. this->stop = false;
  7. this->mutex = mutex;
  8. }
  9. ImportConsumer::~ImportConsumer()
  10. {
  11. qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")\
  12. <<"ImportConsumer Destroyed.";
  13. }
  14. void ImportConsumer::abort()
  15. {
  16. this->stop = true;
  17. }
  18. void ImportConsumer::run()
  19. {
  20. while(true)
  21. {
  22. msleep(10);
  23. if(stop)
  24. break;
  25. this->segments.clear();
  26. this->numbers.clear();
  27. QStringList list;
  28. mutex->lock();
  29. if(buffer->size()>0)
  30. list = buffer->takeLast();
  31. mutex->unlock();
  32. for(int j=0;j<list.size();j++)
  33. {
  34. if(stop)
  35. break ;
  36. QString line=list.at(j);
  37. QStringList lines;
  38. if(this->buildType == NumberFromFileImport)
  39. {
  40. if(!this->checkLine(line))
  41. continue;
  42. else
  43. lines.append(line);
  44. }
  45. else if(this->buildType == NumberFromFileExtract || this->buildType == NumberFromContent)
  46. {
  47. lines = this->extractFromLine(line);
  48. }
  49. for(int i=0;i<lines.size();i++)
  50. {
  51. QString segment = lines.at(i).left(7);
  52. QString tail = lines.at(i).mid(7,4);
  53. bool match;
  54. match = false;
  55. for(int i=0;i<segments.size();i++)
  56. {
  57. if(segments.at(i)==segment)
  58. {
  59. numbers[i].append(tail);
  60. match = true;
  61. break;
  62. }
  63. }
  64. if(!match)
  65. {
  66. segments<<segment;
  67. QStringList tmp;
  68. tmp<<tail;
  69. numbers.append(tmp);
  70. }
  71. }
  72. }
  73. if(segments.size()!=0)
  74. emit childTaskFinished(segments,numbers);
  75. if(list.size()>0)
  76. emit bufferTaked();
  77. }
  78. emit threadDestroy();
  79. }
  80. QStringList ImportConsumer::extractFromLine(QString line)
  81. {
  82. QStringList numbers;
  83. int count = 0;
  84. int pos = 0;
  85. QRegExp rx = NumberReg::getCellPhoneReg();
  86. while ((pos = rx.indexIn(line, pos)) != -1)
  87. {
  88. ++count;
  89. pos += rx.matchedLength();
  90. numbers.append(rx.capturedTexts().at(0));
  91. }
  92. return numbers;
  93. }
  94. bool ImportConsumer::checkLine(QString line)
  95. {
  96. if(line.length()!=11 || line<"13000000000" || line>"19999999999")
  97. {
  98. return false;
  99. }
  100. else
  101. {
  102. return true;
  103. }
  104. }
  105. void ImportConsumer::setBuildType(NumberBuildType buildType)
  106. {
  107. this->buildType = buildType;
  108. }