MongoExcelServiceImpl.java 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package ieven.server.webapp.service.impl;
  2. import ieven.server.webapp.domain.data.Fields;
  3. import ieven.server.webapp.service.IExcelRowReader;
  4. import ieven.server.webapp.util.Properties;
  5. import org.apache.commons.lang3.StringUtils;
  6. import org.bson.types.ObjectId;
  7. import org.springframework.data.mongodb.core.MongoTemplate;
  8. import org.springframework.data.mongodb.core.query.Criteria;
  9. import org.springframework.data.mongodb.core.query.Query;
  10. import org.springframework.data.mongodb.core.query.Update;
  11. import java.util.ArrayList;
  12. import java.util.LinkedHashMap;
  13. import java.util.List;
  14. import java.util.Map;
  15. public class MongoExcelServiceImpl implements IExcelRowReader {
  16. private final Map<String, Integer> headerDefined = new LinkedHashMap<>();
  17. private final LinkedHashMap<String, String> headerTransfer = new LinkedHashMap<>();
  18. private final MongoTemplate mongoTemplate;
  19. private final String collectionData = Properties.COLLECTION_DATA;
  20. private final String fileId;
  21. private final List<Map<String, String>> dataList = new ArrayList<>(1000);
  22. public MongoExcelServiceImpl(MongoTemplate mongoTemplate, String fileId) {
  23. this.mongoTemplate = mongoTemplate;
  24. this.fileId = fileId;
  25. }
  26. @Override
  27. public void getRows(int sheetIndex, int curRow, List<String> valueList) {
  28. if (sheetIndex == 0 && curRow == 0) {
  29. for (int i = 0; i < valueList.size(); i++) {
  30. String value = valueList.get(i);
  31. if (StringUtils.isNotBlank(value)) {
  32. //存入数据库的字段名
  33. String aliasField = "f" + i;
  34. headerDefined.put(aliasField, i);
  35. headerTransfer.put(aliasField, value);
  36. } else {
  37. String undefined = "undefined" + i;
  38. //存入数据库的字段名
  39. String aliasField = "f" + i;
  40. headerDefined.put(aliasField, i);
  41. headerTransfer.put(aliasField, undefined);
  42. }
  43. }
  44. Fields fields = new Fields();
  45. fields.setFileId(fileId);
  46. fields.setFields(headerTransfer);
  47. mongoTemplate.insert(fields);
  48. } else {
  49. Map<String, String> data = new LinkedHashMap<>(headerDefined.size());
  50. data.put("fileId", fileId);
  51. for (Map.Entry<String, Integer> entry : headerDefined.entrySet()) {
  52. String field = entry.getKey();
  53. Integer index = entry.getValue();
  54. String value = index < valueList.size() ? valueList.get(index) : "";
  55. data.put(field, value);
  56. }
  57. dataList.add(data);
  58. if (dataList.size() == 1000) {
  59. mongoTemplate.insert(dataList, collectionData);
  60. dataList.clear();
  61. }
  62. }
  63. }
  64. public void insertRest() {
  65. if (dataList.size() > 0) {
  66. mongoTemplate.insert(dataList, collectionData);
  67. dataList.clear();
  68. }
  69. }
  70. }