package ieven.server.webapp.service; import ieven.server.webapp.domain.data.Fields; import ieven.server.webapp.util.Properties; import org.apache.commons.lang3.StringUtils; import org.springframework.data.mongodb.core.MongoTemplate; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class MongoExcelService { private final Map headerDefined = new LinkedHashMap<>(); private final LinkedHashMap headerTransfer = new LinkedHashMap<>(); private final LinkedHashMap headerTransferReverse = new LinkedHashMap<>(); private MongoTemplate mongoTemplate; private final String collectionData = Properties.COLLECTION_DATA; private String fileId; private final List> dataList = new ArrayList<>(1000); public MongoExcelService(MongoTemplate mongoTemplate, String fileId) { this.mongoTemplate = mongoTemplate; this.fileId = fileId; } public void insertRest() { if (dataList.size() > 0) { mongoTemplate.insert(dataList, collectionData); dataList.clear(); } } public void getRows(int sheetIndex, int curRow, List valueList) { if (sheetIndex == 0 && curRow == 0 && valueList.size() > 1 && !valueList.get(0).contains("微信支付")) { for (int i = 0; i < valueList.size(); i++) { String value = valueList.get(i); if (StringUtils.isNotBlank(value)) { // 存入数据库的字段名 // String aliasField = "f" + i; String aliasField = value.replaceAll("\\.", "_"); aliasField = aliasField.replace("(", "("); aliasField = aliasField.replace(")", ")"); headerDefined.put(aliasField, i); headerTransfer.put(aliasField, StringUtils.trimToEmpty(value)); headerTransferReverse.put(StringUtils.trimToEmpty(value), aliasField); } else { String undefined = "undefined" + i; // 存入数据库的字段名 String aliasField = "f" + i; headerDefined.put(aliasField, i); headerTransfer.put(aliasField, undefined); headerTransferReverse.put(undefined, aliasField); } } Fields fields = new Fields(); fields.setFileId(fileId); fields.setFields(headerTransfer); fields.setFieldsReverse(headerTransferReverse); mongoTemplate.insert(fields); } else if (sheetIndex == 0 && curRow == 16 && valueList.size() > 1 && valueList.get(0).equals("微信昵称")) { for (int i = 0; i < valueList.size(); i++) { String value = valueList.get(i); if (StringUtils.isNotBlank(value)) { // 存入数据库的字段名 // String aliasField = "f" + i; String aliasField = value.replaceAll("\\.", "_"); aliasField = aliasField.replace("(", "("); aliasField = aliasField.replace(")", ")"); headerDefined.put(aliasField, i); headerTransfer.put(aliasField, StringUtils.trimToEmpty(value)); headerTransferReverse.put(StringUtils.trimToEmpty(value), aliasField); } } Fields fields = new Fields(); fields.setFileId(fileId); fields.setFields(headerTransfer); fields.setFieldsReverse(headerTransferReverse); mongoTemplate.insert(fields); } else { if (headerDefined.size() > 0 && curRow > 0) { Map data = new LinkedHashMap<>(headerDefined.size()); data.put("fileId", fileId); for (Map.Entry entry : headerDefined.entrySet()) { String field = entry.getKey(); Integer index = entry.getValue(); String value = index < valueList.size() ? valueList.get(index) : ""; data.put(field, StringUtils.trimToEmpty(value)); } dataList.add(data); if (dataList.size() == 1000) { mongoTemplate.insert(dataList, collectionData); dataList.clear(); } } } } }