MongoExcelService.java 3.8 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 getRows(int sheetIndex, int curRow, List<String> valueList) {
  23. if (sheetIndex == 0
  24. && curRow == 0
  25. && valueList.size() > 1
  26. && !valueList.get(0).contains("微信支付")) {
  27. for (int i = 0; i < valueList.size(); i++) {
  28. String value = valueList.get(i);
  29. if (StringUtils.isNotBlank(value)) {
  30. // 存入数据库的字段名
  31. // String aliasField = "f" + i;
  32. String aliasField = value.replaceAll("\\.", "_");
  33. aliasField = aliasField.replace("(", "(");
  34. aliasField = aliasField.replace(")", ")");
  35. headerDefined.put(aliasField, i);
  36. headerTransfer.put(aliasField, value);
  37. headerTransferReverse.put(value, aliasField);
  38. } else {
  39. String undefined = "undefined" + i;
  40. // 存入数据库的字段名
  41. String aliasField = "f" + i;
  42. headerDefined.put(aliasField, i);
  43. headerTransfer.put(aliasField, undefined);
  44. headerTransferReverse.put(undefined, aliasField);
  45. }
  46. }
  47. Fields fields = new Fields();
  48. fields.setFileId(fileId);
  49. fields.setFields(headerTransfer);
  50. fields.setFieldsReverse(headerTransferReverse);
  51. mongoTemplate.insert(fields);
  52. } else if (sheetIndex == 0
  53. && curRow == 16
  54. && valueList.size() > 1
  55. && valueList.get(0).equals("微信昵称")) {
  56. for (int i = 0; i < valueList.size(); i++) {
  57. String value = valueList.get(i);
  58. if (StringUtils.isNotBlank(value)) {
  59. // 存入数据库的字段名
  60. // String aliasField = "f" + i;
  61. String aliasField = value.replaceAll("\\.", "_");
  62. aliasField = aliasField.replace("(", "(");
  63. aliasField = aliasField.replace(")", ")");
  64. headerDefined.put(aliasField, i);
  65. headerTransfer.put(aliasField, value);
  66. headerTransferReverse.put(value, aliasField);
  67. }
  68. }
  69. Fields fields = new Fields();
  70. fields.setFileId(fileId);
  71. fields.setFields(headerTransfer);
  72. fields.setFieldsReverse(headerTransferReverse);
  73. mongoTemplate.insert(fields);
  74. } else {
  75. if (headerDefined.size() > 0 && curRow > 0) {
  76. Map<String, String> data = new LinkedHashMap<>(headerDefined.size());
  77. data.put("fileId", fileId);
  78. for (Map.Entry<String, Integer> entry : headerDefined.entrySet()) {
  79. String field = entry.getKey();
  80. Integer index = entry.getValue();
  81. String value = index < valueList.size() ? valueList.get(index) : "";
  82. data.put(field, value);
  83. }
  84. dataList.add(data);
  85. if (dataList.size() == 1000) {
  86. mongoTemplate.insert(dataList, collectionData);
  87. dataList.clear();
  88. }
  89. }
  90. }
  91. }
  92. public void insertRest() {
  93. if (dataList.size() > 0) {
  94. mongoTemplate.insert(dataList, collectionData);
  95. dataList.clear();
  96. }
  97. }
  98. }