ReadFileTask.java 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package ieven.server.webapp.tasks;
  2. import com.mongodb.client.gridfs.GridFSBucket;
  3. import com.mongodb.client.gridfs.GridFSDownloadStream;
  4. import com.mongodb.client.gridfs.model.GridFSFile;
  5. import ieven.server.webapp.service.impl.MongoExcelServiceImpl;
  6. import ieven.server.webapp.util.FileUtils;
  7. import ieven.server.webapp.util.excel.ExcelXlsReader;
  8. import ieven.server.webapp.util.excel.ExcelXlsxReader;
  9. import ieven.server.webapp.util.excel.PublicStatic;
  10. import org.apache.commons.csv.CSVFormat;
  11. import org.apache.commons.csv.CSVParser;
  12. import org.apache.commons.csv.CSVRecord;
  13. import org.apache.commons.lang3.StringUtils;
  14. import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
  15. import org.bson.types.ObjectId;
  16. import org.springframework.data.mongodb.core.MongoTemplate;
  17. import org.springframework.data.mongodb.core.query.Criteria;
  18. import org.springframework.data.mongodb.core.query.Query;
  19. import org.springframework.data.mongodb.gridfs.GridFsOperations;
  20. import org.springframework.data.mongodb.gridfs.GridFsResource;
  21. import org.springframework.data.mongodb.gridfs.GridFsTemplate;
  22. import org.xml.sax.SAXException;
  23. import java.io.*;
  24. import java.util.Arrays;
  25. import java.util.List;
  26. import java.util.Map;
  27. import java.util.logging.Logger;
  28. import java.util.stream.Collectors;
  29. public class ReadFileTask implements Runnable {
  30. private final Logger logger = Logger.getLogger("ReadFileTask");
  31. private final ObjectId objectId;
  32. private final MongoTemplate mongoTemplate;
  33. private final GridFsOperations fsOperations;
  34. public ReadFileTask(ObjectId objectId, MongoTemplate mongoTemplate, GridFsOperations fsOperations) {
  35. this.objectId = objectId;
  36. this.mongoTemplate = mongoTemplate;
  37. this.fsOperations = fsOperations;
  38. }
  39. @Override
  40. public void run() {
  41. GridFSFile fsFile = fsOperations.findOne(new Query(Criteria.where("_id").is(objectId)));
  42. if (fsFile == null) {
  43. return;
  44. }
  45. GridFsResource resource = fsOperations.getResource(fsFile);
  46. String filename = resource.getFilename();
  47. if (StringUtils.isBlank(filename)) {
  48. return;
  49. }
  50. try {
  51. InputStream inputStream = resource.getInputStream();
  52. if (filename.endsWith(".xlsx")) {
  53. MongoExcelServiceImpl mongoExcelService = new MongoExcelServiceImpl(mongoTemplate, objectId);
  54. ExcelXlsxReader reader = new ExcelXlsxReader(mongoExcelService);
  55. reader.processStream(inputStream);
  56. mongoExcelService.insertRest();
  57. mongoExcelService.updateCount();
  58. } else if (filename.endsWith(".xls")) {
  59. MongoExcelServiceImpl mongoExcelService = new MongoExcelServiceImpl(mongoTemplate, objectId);
  60. ExcelXlsReader reader = new ExcelXlsReader(mongoExcelService);
  61. reader.processStream(inputStream);
  62. mongoExcelService.insertRest();
  63. mongoExcelService.updateCount();
  64. } else if (filename.endsWith(".csv")) {
  65. MongoExcelServiceImpl mongoExcelService = new MongoExcelServiceImpl(mongoTemplate, objectId);
  66. CSVParser csvParser = CSVFormat.EXCEL.parse(new InputStreamReader(inputStream,"gbk"));
  67. int curRow = 0;
  68. for (CSVRecord record : csvParser) {
  69. mongoExcelService.getRows(0, curRow, record.stream().map(PublicStatic::removeAllSpecial).collect(Collectors.toList()));
  70. curRow++;
  71. }
  72. mongoExcelService.insertRest();
  73. mongoExcelService.updateCount();
  74. }
  75. } catch (IOException | OpenXML4JException | SAXException e) {
  76. logger.info("读取文件:" + filename + "出错.");
  77. e.printStackTrace();
  78. }
  79. logger.info("读取文件:" + filename + "完成");
  80. }
  81. }