|
@@ -1,14 +1,14 @@
|
|
|
package com.simuwang.daq.service;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
-import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.exceptions.ExceptionUtil;
|
|
|
import cn.hutool.core.lang.Pair;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
-import com.simuwang.base.common.conts.DateConst;
|
|
|
import com.simuwang.base.common.conts.EmailDataDirectionConst;
|
|
|
import com.simuwang.base.common.conts.EmailFieldConst;
|
|
|
import com.simuwang.base.common.conts.EmailTypeConst;
|
|
|
+import com.simuwang.base.common.util.DateUtils;
|
|
|
import com.simuwang.base.common.util.ExcelUtil;
|
|
|
import com.simuwang.base.common.util.StringUtil;
|
|
|
import com.simuwang.base.pojo.dto.EmailContentInfoDTO;
|
|
@@ -162,7 +162,7 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
|
return CollUtil.newArrayList();
|
|
|
}
|
|
|
// 2.解析sheet中的净值数据
|
|
|
- List<EmailFundNavDTO> emailFundNavDTOList = parseSheetData(sheet, fieldPositionMap, null);
|
|
|
+ List<EmailFundNavDTO> emailFundNavDTOList = parseSheetData(filePath, sheet, fieldPositionMap, null);
|
|
|
// 3.校验净值数据格式
|
|
|
if (CollUtil.isNotEmpty(emailFundNavDTOList)) {
|
|
|
emailFundNavDTOList = emailFundNavDTOList.stream().filter(super::dataFormat).collect(Collectors.toList());
|
|
@@ -188,12 +188,13 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
|
/**
|
|
|
* 根据字段所在表格的位置提取净值数据
|
|
|
*
|
|
|
+ * @param filePath 文件路径·
|
|
|
* @param sheet 表格中的sheet页
|
|
|
* @param fieldPositionMap 字段所在表格中的位置
|
|
|
* @param direction 表格数据的形式:1-行,2-列
|
|
|
* @return 净值数据
|
|
|
*/
|
|
|
- private List<EmailFundNavDTO> parseSheetData(Sheet sheet, Map<String, Pair<Integer, Integer>> fieldPositionMap, Integer direction) {
|
|
|
+ private List<EmailFundNavDTO> parseSheetData(String filePath, Sheet sheet, Map<String, Pair<Integer, Integer>> fieldPositionMap, Integer direction) {
|
|
|
List<EmailFundNavDTO> fundNavDTOList = CollUtil.newArrayList();
|
|
|
// 通过表头所在位置判断是行数据还是列数据
|
|
|
Integer dataDirectionType = direction != null ? direction : ExcelUtil.detectDataDirection(fieldPositionMap);
|
|
@@ -208,7 +209,11 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
|
// 遍历可能的数据行
|
|
|
for (int rowNum = initRow + 1; rowNum <= lastRowNum; rowNum++) {
|
|
|
Row sheetRow = sheet.getRow(rowNum);
|
|
|
- Optional.ofNullable(readSheetRowData(sheetRow, fieldColumnMap)).ifPresent(fundNavDTOList::addAll);
|
|
|
+ try {
|
|
|
+ Optional.ofNullable(readSheetRowData(sheetRow, fieldColumnMap)).ifPresent(fundNavDTOList::addAll);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("读取行数据报错 -> 行号:{},文件路径:{},堆栈信息:{}", rowNum, filePath, ExceptionUtil.stacktraceToString(e));
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
if (dataDirectionType.equals(EmailDataDirectionConst.COLUMN_DIRECTION_TYPE)) {
|
|
@@ -264,10 +269,9 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
|
priceDateMap.put(1, date);
|
|
|
continue;
|
|
|
}
|
|
|
- boolean isValidDate = StringUtil.isValidDate(cellValue);
|
|
|
- if (isValidDate) {
|
|
|
- String date = cellValue.replaceAll("年", "-").replaceAll("月", "-");
|
|
|
- priceDateMap.put(2, date);
|
|
|
+ String priceDate = DateUtils.stringToDate(cellValue);
|
|
|
+ if (StrUtil.isNotBlank(priceDate)) {
|
|
|
+ priceDateMap.put(2, priceDate);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -285,7 +289,7 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
|
EmailFundNavDTO fundNavDTO = new EmailFundNavDTO();
|
|
|
fundNavDTO.setFundName(fieldValueMap.get(EmailFieldConst.FUND_NAME));
|
|
|
fundNavDTO.setRegisterNumber(fieldValueMap.get(EmailFieldConst.REGISTER_NUMBER));
|
|
|
- fundNavDTO.setPriceDate(fieldValueMap.get(EmailFieldConst.PRICE_DATE));
|
|
|
+ fundNavDTO.setPriceDate(DateUtils.stringToDate(fieldValueMap.get(EmailFieldConst.PRICE_DATE)));
|
|
|
fundNavDTO.setNav(fieldValueMap.get(EmailFieldConst.NAV));
|
|
|
fundNavDTO.setCumulativeNavWithdrawal(fieldValueMap.get(EmailFieldConst.CUMULATIVE_NAV_WITHDRAWAL));
|
|
|
|
|
@@ -316,18 +320,13 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
|
EmailFundNavDTO emailFundNavDTO = new EmailFundNavDTO();
|
|
|
String priceDate = columnFieldMap.get(EmailFieldConst.PRICE_DATE) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PRICE_DATE)) != null ?
|
|
|
ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PRICE_DATE))) : null;
|
|
|
- priceDate = StringUtil.isValidDate(priceDate) ? priceDate : null;
|
|
|
+ priceDate = DateUtils.stringToDate(priceDate);
|
|
|
+
|
|
|
// 份额基金净值文件格式
|
|
|
long parentFiledCount = columnFieldMap.keySet().stream().filter(e -> e.contains("parent")).count();
|
|
|
if (parentFiledCount >= 1) {
|
|
|
Optional.ofNullable(buildParentNav(sheetRow, columnFieldMap, priceDate)).ifPresent(fundNavDTOList::add);
|
|
|
}
|
|
|
- // 正常净值文件格式
|
|
|
- if (StrUtil.isNotBlank(priceDate) && !priceDate.contains("-")) {
|
|
|
- // 处理日期yyyyMMdd格式 -> 转成yyyy-MM-dd
|
|
|
- priceDate = priceDate.replace("年", "").replace("月", "").replace("日", "");
|
|
|
- priceDate = DateUtil.format(DateUtil.parse(priceDate, DateConst.YYYYMMDD), DateConst.YYYY_MM_DD);
|
|
|
- }
|
|
|
emailFundNavDTO.setPriceDate(priceDate);
|
|
|
String fundName = ExcelUtil.getPriorityFieldValue(sheetRow, columnFieldMap.get(EmailFieldConst.LEVEL_FUND_NAME), columnFieldMap.get(EmailFieldConst.FUND_NAME));
|
|
|
emailFundNavDTO.setFundName(fundName);
|
|
@@ -361,11 +360,6 @@ public class NavEmailParser extends AbstractEmailParser {
|
|
|
if (StrUtil.isBlank(nav) && StrUtil.isBlank(cumulativeNavWithdrawal)) {
|
|
|
return null;
|
|
|
}
|
|
|
- if (StrUtil.isNotBlank(priceDate) && !priceDate.contains("-")) {
|
|
|
- // 处理日期yyyyMMdd格式 -> 转成yyyy-MM-dd
|
|
|
- priceDate = priceDate.replace("年", "").replace("月", "").replace("日", "");
|
|
|
- priceDate = DateUtil.format(DateUtil.parse(priceDate, DateConst.YYYYMMDD), DateConst.YYYY_MM_DD);
|
|
|
- }
|
|
|
emailFundNavDTO.setPriceDate(priceDate);
|
|
|
String fundName = columnFieldMap.get(EmailFieldConst.PARENT_FUND_NAME) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PARENT_FUND_NAME)).getStringCellValue() != null ?
|
|
|
ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PARENT_FUND_NAME))) : null;
|