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 + "完成"); } }