MongoExcelService.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package ieven.server.webapp.service;
  2. import ieven.server.webapp.domain.data.Fields;
  3. import ieven.server.webapp.util.Properties;
  4. import org.apache.commons.lang3.StringUtils;
  5. import org.springframework.data.mongodb.core.MongoTemplate;
  6. import java.util.ArrayList;
  7. import java.util.LinkedHashMap;
  8. import java.util.List;
  9. import java.util.Map;
  10. public class MongoExcelService {
  11. private final Map<String, Integer> headerDefined = new LinkedHashMap<>();
  12. private final LinkedHashMap<String, String> headerTransfer = new LinkedHashMap<>();
  13. private final LinkedHashMap<String, String> headerTransferReverse = new LinkedHashMap<>();
  14. private MongoTemplate mongoTemplate;
  15. private final String collectionData = Properties.COLLECTION_DATA;
  16. private String fileId;
  17. private final List<Map<String, String>> dataList = new ArrayList<>(1000);
  18. public MongoExcelService(MongoTemplate mongoTemplate, String fileId) {
  19. this.mongoTemplate = mongoTemplate;
  20. this.fileId = fileId;
  21. }
  22. public void insertRest() {
  23. if (dataList.size() > 0) {
  24. mongoTemplate.insert(dataList, collectionData);
  25. dataList.clear();
  26. }
  27. }
  28. public void getRows(int sheetIndex, int curRow, List<String> valueList) {
  29. if (sheetIndex == 0
  30. && curRow == 0
  31. && valueList.size() > 1
  32. && !valueList.get(0).contains("微信支付")) {
  33. for (int i = 0; i < valueList.size(); i++) {
  34. String value = valueList.get(i);
  35. if (StringUtils.isNotBlank(value)) {
  36. // 存入数据库的字段名
  37. // String aliasField = "f" + i;
  38. String aliasField = value.replaceAll("\\.", "_");
  39. aliasField = aliasField.replace("(", "(");
  40. aliasField = aliasField.replace(")", ")");
  41. headerDefined.put(aliasField, i);
  42. headerTransfer.put(aliasField, StringUtils.trimToEmpty(value));
  43. headerTransferReverse.put(StringUtils.trimToEmpty(value), aliasField);
  44. } else {
  45. String undefined = "undefined" + i;
  46. // 存入数据库的字段名
  47. String aliasField = "f" + i;
  48. headerDefined.put(aliasField, i);
  49. headerTransfer.put(aliasField, undefined);
  50. headerTransferReverse.put(undefined, aliasField);
  51. }
  52. }
  53. Fields fields = new Fields();
  54. fields.setFileId(fileId);
  55. fields.setFields(headerTransfer);
  56. fields.setFieldsReverse(headerTransferReverse);
  57. mongoTemplate.insert(fields);
  58. } else if (sheetIndex == 0
  59. && curRow == 16
  60. && valueList.size() > 1
  61. && valueList.get(0).equals("微信昵称")) {
  62. for (int i = 0; i < valueList.size(); i++) {
  63. String value = valueList.get(i);
  64. if (StringUtils.isNotBlank(value)) {
  65. // 存入数据库的字段名
  66. // String aliasField = "f" + i;
  67. String aliasField = value.replaceAll("\\.", "_");
  68. aliasField = aliasField.replace("(", "(");
  69. aliasField = aliasField.replace(")", ")");
  70. headerDefined.put(aliasField, i);
  71. headerTransfer.put(aliasField, StringUtils.trimToEmpty(value));
  72. headerTransferReverse.put(StringUtils.trimToEmpty(value), aliasField);
  73. }
  74. }
  75. Fields fields = new Fields();
  76. fields.setFileId(fileId);
  77. fields.setFields(headerTransfer);
  78. fields.setFieldsReverse(headerTransferReverse);
  79. mongoTemplate.insert(fields);
  80. } else {
  81. if (headerDefined.size() > 0 && curRow > 0) {
  82. Map<String, String> data = new LinkedHashMap<>(headerDefined.size());
  83. data.put("fileId", fileId);
  84. for (Map.Entry<String, Integer> entry : headerDefined.entrySet()) {
  85. String field = entry.getKey();
  86. Integer index = entry.getValue();
  87. String value = index < valueList.size() ? valueList.get(index) : "";
  88. data.put(field, StringUtils.trimToEmpty(value));
  89. }
  90. dataList.add(data);
  91. if (dataList.size() == 1000) {
  92. mongoTemplate.insert(dataList, collectionData);
  93. dataList.clear();
  94. }
  95. }
  96. }
  97. }
  98. }