|
@@ -13,6 +13,7 @@ import com.simuwang.base.common.util.ExcelUtil;
|
|
|
import com.simuwang.base.common.util.StringUtil;
|
|
|
import com.simuwang.base.pojo.dto.EmailContentInfoDTO;
|
|
|
import com.simuwang.base.pojo.dto.EmailFundNavDTO;
|
|
|
+import com.simuwang.base.pojo.dto.FieldPositionDTO;
|
|
|
import org.apache.pdfbox.Loader;
|
|
|
import org.apache.pdfbox.pdmodel.PDDocument;
|
|
|
import org.apache.poi.ss.usermodel.Cell;
|
|
@@ -63,7 +64,8 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<EmailFundNavDTO> parse(EmailContentInfoDTO emailContentInfoDTO, Map<String, List<String>> emailFieldMap) {
|
|
|
+ public List<EmailFundNavDTO>
|
|
|
+ parse(EmailContentInfoDTO emailContentInfoDTO, Map<String, List<String>> emailFieldMap) {
|
|
|
List<EmailFundNavDTO> emailFundNavDTOList = CollUtil.newArrayList();
|
|
|
String emailContent = emailContentInfoDTO.getEmailContent();
|
|
|
// 1.解析邮件正文
|
|
@@ -471,7 +473,7 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
|
* @return excel中表头所在的位置(行, 列)
|
|
|
*/
|
|
|
private Map<String, Pair<Integer, Integer>> getFieldPosition(Sheet sheet, Map<String, List<String>> emailFieldMap) {
|
|
|
- Map<String, List<Pair<Integer, Integer>>> tempFieldPositionMap = MapUtil.newHashMap();
|
|
|
+ Map<String, List<FieldPositionDTO>> tempFieldPositionMap = MapUtil.newHashMap();
|
|
|
int lastRowNum = sheet.getLastRowNum();
|
|
|
for (int rowNum = 0; rowNum <= lastRowNum; rowNum++) {
|
|
|
Row sheetRow = sheet.getRow(rowNum);
|
|
@@ -485,11 +487,13 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
|
continue;
|
|
|
}
|
|
|
String cellValue = ExcelUtil.getCellValue(cell);
|
|
|
- String field = fieldMatch(cellValue, emailFieldMap);
|
|
|
+ // 移除掉非中文字符
|
|
|
+ String newCellValue = StringUtil.retainChineseCharacters(cellValue);
|
|
|
+ String field = fieldMatch(newCellValue, emailFieldMap);
|
|
|
if (StrUtil.isNotBlank(field)) {
|
|
|
- List<Pair<Integer, Integer>> pairList = tempFieldPositionMap.getOrDefault(field, new ArrayList<>());
|
|
|
- pairList.add(Pair.of(rowNum, cellNum));
|
|
|
- tempFieldPositionMap.put(field, pairList);
|
|
|
+ List<FieldPositionDTO> fieldPositionDTOList = tempFieldPositionMap.getOrDefault(field, new ArrayList<>());
|
|
|
+ fieldPositionDTOList.add(new FieldPositionDTO(newCellValue, Pair.of(rowNum, cellNum)));
|
|
|
+ tempFieldPositionMap.put(field, fieldPositionDTOList);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -497,23 +501,39 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
|
return handlerFieldPosition(tempFieldPositionMap);
|
|
|
}
|
|
|
|
|
|
- private Map<String, Pair<Integer, Integer>> handlerFieldPosition(Map<String, List<Pair<Integer, Integer>>> tempFieldPositionMap) {
|
|
|
+ private Map<String, Pair<Integer, Integer>> handlerFieldPosition(Map<String, List<FieldPositionDTO>> tempFieldPositionMap) {
|
|
|
Map<String, Pair<Integer, Integer>> fieldPositionMap = MapUtil.newHashMap();
|
|
|
boolean hasParentField = tempFieldPositionMap.keySet().stream().anyMatch(e -> e.contains("parent"));
|
|
|
- for (Map.Entry<String, List<Pair<Integer, Integer>>> entry : tempFieldPositionMap.entrySet()) {
|
|
|
- List<Pair<Integer, Integer>> pairList = entry.getValue();
|
|
|
- if (pairList.size() == 1) {
|
|
|
- fieldPositionMap.put(entry.getKey(), pairList.get(0));
|
|
|
+ for (Map.Entry<String, List<FieldPositionDTO>> entry : tempFieldPositionMap.entrySet()) {
|
|
|
+ String field = entry.getKey();
|
|
|
+ List<FieldPositionDTO> fieldPositionDTOList = entry.getValue();
|
|
|
+ int size = fieldPositionDTOList.size();
|
|
|
+ if (size == 1) {
|
|
|
+ fieldPositionMap.put(field, fieldPositionDTOList.get(0).getPair());
|
|
|
continue;
|
|
|
}
|
|
|
- if ((!hasParentField && pairList.size() > 1)) {
|
|
|
- fieldPositionMap.put(entry.getKey(), pairList.get(pairList.size() - 1));
|
|
|
+ if ((!hasParentField && size > 1)) {
|
|
|
+ if (EmailFieldConst.REGISTER_NUMBER.equals(field)) {
|
|
|
+ Pair<Integer, Integer> pair = fieldPositionDTOList.stream()
|
|
|
+ .filter(e -> !e.getFieldValue().contains("协会") && !e.getFieldValue().contains("备案")).map(FieldPositionDTO::getPair).findFirst().orElse(null);
|
|
|
+ fieldPositionMap.put(field, pair);
|
|
|
+ } else {
|
|
|
+ fieldPositionMap.put(field, fieldPositionDTOList.get(size - 1).getPair());
|
|
|
+ }
|
|
|
continue;
|
|
|
}
|
|
|
- if ((hasParentField && pairList.size() > 1)) {
|
|
|
- fieldPositionMap.put(entry.getKey(), pairList.get(0));
|
|
|
+ if ((hasParentField && size > 1)) {
|
|
|
+ fieldPositionMap.put(field, fieldPositionDTOList.get(0).getPair());
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // 母基金缺少代码的情况
|
|
|
+ if (hasParentField && fieldPositionMap.get(EmailFieldConst.PARENT_REGISTER_NUMBER) == null) {
|
|
|
+ List<FieldPositionDTO> fieldPositionDTOS = tempFieldPositionMap.get(EmailFieldConst.REGISTER_NUMBER);
|
|
|
+ Pair<Integer, Integer> parentRegisterNumberPair = fieldPositionDTOS.stream()
|
|
|
+ .filter(e -> e.getFieldValue().contains("协会") || e.getFieldValue().contains("备案")).map(FieldPositionDTO::getPair).findFirst().orElse(null);
|
|
|
+ fieldPositionMap.put(EmailFieldConst.PARENT_REGISTER_NUMBER, parentRegisterNumberPair);
|
|
|
+ }
|
|
|
return fieldPositionMap;
|
|
|
}
|
|
|
|
|
@@ -528,11 +548,10 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
|
if (StrUtil.isBlank(cellValue)) {
|
|
|
return null;
|
|
|
}
|
|
|
- String newCellValue = StringUtil.retainChineseCharacters(cellValue);
|
|
|
for (Map.Entry<String, List<String>> fieldEntry : emailFieldMap.entrySet()) {
|
|
|
List<String> fieldList = fieldEntry.getValue();
|
|
|
for (String field : fieldList) {
|
|
|
- if (newCellValue.equals(field)) {
|
|
|
+ if (cellValue.equals(field)) {
|
|
|
return fieldEntry.getKey();
|
|
|
}
|
|
|
}
|