formupload.cpp 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. #include "formupload.h"
  2. #include "ui_formupload.h"
  3. #include "sncdatabase.h"
  4. #include "dialogsubmitresponsedetail.h"
  5. FormUpload::FormUpload(QWidget *parent) :
  6. QWidget(parent),
  7. ui(new Ui::FormUpload)
  8. {
  9. ui->setupUi(this);
  10. initVariables();
  11. resetUI();
  12. }
  13. void FormUpload::initVariables()
  14. {
  15. }
  16. FormUpload::~FormUpload()
  17. {
  18. delete ui;
  19. qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")\
  20. <<"FormNumchk.FormUpload Destroyed.";
  21. }
  22. void FormUpload::resetUI()
  23. {
  24. ui->lineEditFilePath->setText("");
  25. ui->lineEditMemo->setText("");
  26. ui->lineEditFilePath->setReadOnly(true);
  27. }
  28. void FormUpload::setUserCode(QString userCode)
  29. {
  30. m_userCode = userCode;
  31. }
  32. void FormUpload::setClientID(QString clientID)
  33. {
  34. m_clientID = clientID;
  35. }
  36. void FormUpload::on_pushButtonOpen_clicked()
  37. {
  38. QString selectedFilter;
  39. QFileDialog::Options options;
  40. QString suffix = "Text Files;Zip File (*.txt;*.zip;*.7z;*.rar)";
  41. QString importDir = SNCDataBase::getImportDir();
  42. if(importDir.isEmpty())
  43. {
  44. importDir = QDesktopServices::storageLocation(QDesktopServices::DesktopLocation);
  45. }
  46. QString fileName = QFileDialog::getOpenFileName(this,"打开文件",importDir,suffix,&selectedFilter,options);
  47. QFileInfo fileInfo(fileName);
  48. if(!fileInfo.absolutePath().isEmpty())
  49. SNCDataBase::updateImportDir(fileInfo.absolutePath());
  50. if(fileName.isEmpty())
  51. return ;
  52. resetUI();
  53. ui->lineEditFilePath->setText(fileName);
  54. }
  55. void FormUpload::on_pushButtonSubmit_clicked()
  56. {
  57. QString filePath = ui->lineEditFilePath->text();
  58. if(!QFile::exists(filePath))
  59. {
  60. QMessageBox::critical(this,"提示","文件不存在!",QMessageBox::Ok);
  61. return ;
  62. }
  63. QString memo = ui->lineEditMemo->text();
  64. QString fileType ;
  65. QString taskType ;
  66. if(ui->radioButtonNum->isChecked())
  67. fileType = "1";
  68. if(ui->radioButtonSeg->isChecked())
  69. fileType = "2";
  70. if(this->ui->checkBoxMultiTask->isChecked())
  71. taskType = "2";
  72. else
  73. taskType = "1";
  74. if(!prepareAddFile(filePath,fileType,taskType,memo))
  75. return ;
  76. emit dataUpdated();
  77. emit buttonCloseClicked();
  78. }
  79. bool FormUpload::prepareAddFile(QString filePath,QString fileType,QString taskType,QString memo)
  80. {
  81. QFileInfo fileInfo(filePath);
  82. QString suffix = fileInfo.suffix();
  83. int size = fileInfo.size()/1024/1024;
  84. QStringList cacheFiles;
  85. if(taskType=="1")//如果是单任务
  86. {
  87. cacheFiles << filePath;
  88. }
  89. else//如果是多任务
  90. {
  91. if(fileType=="2")//当文件类型为号段文件时,文件必须是文本格式,且到不能大于1M
  92. {
  93. if(suffix.toLower()!="txt" || size > 1)
  94. {
  95. QMessageBox::critical(this,"提示","号段文件必须文本格式,且文件大小不能大于1M",QMessageBox::Ok);
  96. return false;
  97. }
  98. cacheFiles = createCacheFilesBySegment(filePath);
  99. }
  100. else//当文件类型为号码文件时
  101. {
  102. if(suffix.toLower()=="txt")
  103. {
  104. cacheFiles << filePath;
  105. }
  106. else
  107. {
  108. cacheFiles = createCacheFilesByUnzip(filePath);
  109. }
  110. }
  111. }
  112. if(cacheFiles.size()==0)
  113. {
  114. QMessageBox::critical(this,"提示","您选择多任务模式,但无法对文件进行拆分,请检查文件格式是否有效",QMessageBox::Ok);
  115. return false;
  116. }
  117. addUploadFile(cacheFiles,memo,fileType);
  118. return true;
  119. }
  120. QString FormUpload::prepareTempDir()
  121. {
  122. QString userCode = m_userCode;
  123. QString timeStamp = QDateTime::currentDateTime().toString("yyyyMMddhhmmss");
  124. QString cachePath = QCoreApplication::applicationDirPath()+\
  125. QString("/../data/%1/cache/bzjc/upload/%2/").arg(userCode).arg(timeStamp);
  126. QDir dir;
  127. dir.mkpath(cachePath);
  128. return cachePath;
  129. }
  130. QStringList FormUpload::createCacheFilesBySegment(QString filePath)
  131. {
  132. //读取文件内容并按照行分拆成单个文件
  133. QFile fileRead(filePath);
  134. QString cachePath = prepareTempDir();
  135. QStringList cacheFiles;
  136. bool succeed = true;
  137. if(cachePath.isEmpty())
  138. {
  139. QMessageBox::critical(this,"提示","创建缓存目录失败",QMessageBox::Ok);
  140. succeed = false;
  141. }
  142. if(!fileRead.open(QIODevice::ReadOnly))
  143. {
  144. QMessageBox::critical(this,"提示","文件读取失败",QMessageBox::Ok);
  145. fileRead.close();
  146. succeed = false;
  147. }
  148. if(!succeed)
  149. {
  150. cacheFiles.clear();
  151. return cacheFiles;
  152. }
  153. QTextStream in(&fileRead);
  154. while(!in.atEnd())
  155. {
  156. QString line = in.readLine().trimmed();
  157. if(!line.isEmpty())
  158. {
  159. QString cacheFile = cachePath + line + ".txt";
  160. QFile fileWrite(cacheFile);
  161. if(!fileWrite.open(QIODevice::WriteOnly))
  162. {
  163. QMessageBox::critical(this,"提示","创建缓存文件失败",QMessageBox::Ok);
  164. fileWrite.close();
  165. succeed = false;
  166. break;
  167. }
  168. QTextStream out(&fileWrite);
  169. out<<line;
  170. fileWrite.close();
  171. cacheFiles<<cacheFile;
  172. }
  173. }
  174. if(!succeed)
  175. {
  176. cacheFiles.clear();
  177. }
  178. return cacheFiles;
  179. }
  180. QStringList FormUpload::createCacheFilesByUnzip(QString filePath)
  181. {
  182. QString cachePath = prepareTempDir();
  183. QStringList cacheFiles;
  184. bool succeed = true;
  185. if(cachePath.isEmpty())
  186. {
  187. QMessageBox::critical(this,"提示","创建缓存目录失败",QMessageBox::Ok);
  188. succeed = false;
  189. }
  190. if(!succeed)
  191. {
  192. cacheFiles.clear();
  193. return cacheFiles;
  194. }
  195. //调用7z进行解压缩
  196. QProcess process;
  197. process.setWorkingDirectory(QCoreApplication::applicationDirPath());
  198. process.start("\"" + QCoreApplication::applicationDirPath() + "/7ze.exe\" e \"" + filePath\
  199. + "\" -o\"" + cachePath +"\" -y");
  200. process.waitForFinished();
  201. QDir dir(cachePath);
  202. QFileInfoList list = dir.entryInfoList();
  203. for(int i=0;i<list.size();i++)
  204. {
  205. if(list.at(i).isFile())
  206. {
  207. if(list.at(i).suffix().toLower()=="txt")
  208. cacheFiles<<list.at(i).absoluteFilePath();
  209. }
  210. }
  211. if(cacheFiles.size()==0)
  212. {
  213. QMessageBox::critical(this,"提示","压缩包无法解压或者没有包含有效的TXT文件",QMessageBox::Ok);
  214. }
  215. return cacheFiles;
  216. }
  217. void FormUpload::addUploadFile(QStringList filePaths, QString memo, QString fileType)
  218. {
  219. for(int i=0;i<filePaths.size();i++)
  220. {
  221. QString filePath = filePaths.at(i);
  222. QFileInfo fileInfo(filePath);
  223. QString fileName = fileInfo.fileName();
  224. SNCDataBase::addFileUpload("bzjc",m_clientID,m_userCode,fileName,filePath,fileType,"1",memo);
  225. }
  226. }
  227. void FormUpload::on_pushButtonClose_clicked()
  228. {
  229. emit buttonCloseClicked();
  230. }