123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- 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<String, Integer> headerDefined = new LinkedHashMap<>();
- private final LinkedHashMap<String, String> headerTransfer = new LinkedHashMap<>();
- private final LinkedHashMap<String, String> headerTransferReverse = new LinkedHashMap<>();
- private MongoTemplate mongoTemplate;
- private final String collectionData = Properties.COLLECTION_DATA;
- private String fileId;
- private final List<Map<String, String>> dataList = new ArrayList<>(1000);
- public MongoExcelService(MongoTemplate mongoTemplate, String fileId) {
- this.mongoTemplate = mongoTemplate;
- this.fileId = fileId;
- }
- public void getRows(int sheetIndex, int curRow, List<String> 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, value);
- headerTransferReverse.put(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, value);
- headerTransferReverse.put(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<String, String> data = new LinkedHashMap<>(headerDefined.size());
- data.put("fileId", fileId);
- for (Map.Entry<String, Integer> entry : headerDefined.entrySet()) {
- String field = entry.getKey();
- Integer index = entry.getValue();
- String value = index < valueList.size() ? valueList.get(index) : "";
- data.put(field, value);
- }
- dataList.add(data);
- if (dataList.size() == 1000) {
- mongoTemplate.insert(dataList, collectionData);
- dataList.clear();
- }
- }
- }
- }
- public void insertRest() {
- if (dataList.size() > 0) {
- mongoTemplate.insert(dataList, collectionData);
- dataList.clear();
- }
- }
- }
|