1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package ieven.server.webapp.tasks;
- import com.mongodb.client.gridfs.GridFSBucket;
- import com.mongodb.client.gridfs.GridFSDownloadStream;
- import com.mongodb.client.gridfs.model.GridFSFile;
- import ieven.server.webapp.service.impl.MongoExcelServiceImpl;
- import ieven.server.webapp.util.FileUtils;
- import ieven.server.webapp.util.excel.ExcelXlsReader;
- import ieven.server.webapp.util.excel.ExcelXlsxReader;
- import ieven.server.webapp.util.excel.PublicStatic;
- import org.apache.commons.csv.CSVFormat;
- import org.apache.commons.csv.CSVParser;
- import org.apache.commons.csv.CSVRecord;
- import org.apache.commons.lang3.StringUtils;
- import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
- import org.bson.types.ObjectId;
- import org.springframework.data.mongodb.core.MongoTemplate;
- import org.springframework.data.mongodb.core.query.Criteria;
- import org.springframework.data.mongodb.core.query.Query;
- import org.springframework.data.mongodb.gridfs.GridFsOperations;
- import org.springframework.data.mongodb.gridfs.GridFsResource;
- import org.springframework.data.mongodb.gridfs.GridFsTemplate;
- import org.xml.sax.SAXException;
- import java.io.*;
- import java.util.Arrays;
- import java.util.List;
- import java.util.Map;
- import java.util.logging.Logger;
- import java.util.stream.Collectors;
- public class ReadFileTask implements Runnable {
- private final Logger logger = Logger.getLogger("ReadFileTask");
- private final ObjectId objectId;
- private final MongoTemplate mongoTemplate;
- private final GridFsOperations fsOperations;
- public ReadFileTask(ObjectId objectId, MongoTemplate mongoTemplate, GridFsOperations fsOperations) {
- this.objectId = objectId;
- this.mongoTemplate = mongoTemplate;
- this.fsOperations = fsOperations;
- }
- @Override
- public void run() {
- GridFSFile fsFile = fsOperations.findOne(new Query(Criteria.where("_id").is(objectId)));
- if (fsFile == null) {
- return;
- }
- GridFsResource resource = fsOperations.getResource(fsFile);
- String filename = resource.getFilename();
- if (StringUtils.isBlank(filename)) {
- return;
- }
- try {
- InputStream inputStream = resource.getInputStream();
- if (filename.endsWith(".xlsx")) {
- MongoExcelServiceImpl mongoExcelService = new MongoExcelServiceImpl(mongoTemplate, objectId);
- ExcelXlsxReader reader = new ExcelXlsxReader(mongoExcelService);
- reader.processStream(inputStream);
- mongoExcelService.insertRest();
- mongoExcelService.updateCount();
- } else if (filename.endsWith(".xls")) {
- MongoExcelServiceImpl mongoExcelService = new MongoExcelServiceImpl(mongoTemplate, objectId);
- ExcelXlsReader reader = new ExcelXlsReader(mongoExcelService);
- reader.processStream(inputStream);
- mongoExcelService.insertRest();
- mongoExcelService.updateCount();
- } else if (filename.endsWith(".csv")) {
- MongoExcelServiceImpl mongoExcelService = new MongoExcelServiceImpl(mongoTemplate, objectId);
- CSVParser csvParser = CSVFormat.EXCEL.parse(new InputStreamReader(inputStream,"gbk"));
- int curRow = 0;
- for (CSVRecord record : csvParser) {
- mongoExcelService.getRows(0, curRow, record.stream().map(PublicStatic::removeAllSpecial).collect(Collectors.toList()));
- curRow++;
- }
- mongoExcelService.insertRest();
- mongoExcelService.updateCount();
- }
- } catch (IOException | OpenXML4JException | SAXException e) {
- logger.info("读取文件:" + filename + "出错.");
- e.printStackTrace();
- }
- logger.info("读取文件:" + filename + "完成");
- }
- }
|