wangzaijun 6 bulan lalu
induk
melakukan
7ccd4c4f16
19 mengubah file dengan 159 tambahan dan 48 penghapusan
  1. 22 0
      service-base/src/main/java/com/simuwang/base/common/util/NavDataUtil.java
  2. 8 5
      service-base/src/main/java/com/simuwang/base/common/util/ValuationBusinessUtils.java
  3. 1 1
      service-base/src/main/java/com/simuwang/base/mapper/EmailParseInfoMapper.java
  4. 5 0
      service-base/src/main/java/com/simuwang/base/pojo/dos/EmailParseInfoDO.java
  5. 4 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/EmailFundNavDTO.java
  6. 13 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/query/TaskPageQuery.java
  7. 1 1
      service-base/src/main/java/com/simuwang/base/pojo/valuation/AssetsValuationDetails.java
  8. 6 0
      service-base/src/main/java/com/simuwang/base/pojo/vo/FundFileInfoVO.java
  9. 8 2
      service-base/src/main/resources/mapper/CompanyEmailHistoryMapper.xml
  10. 55 15
      service-base/src/main/resources/mapper/EmailFileInfoMapper.xml
  11. 3 1
      service-base/src/main/resources/mapper/EmailParseInfoMapper.xml
  12. 7 1
      service-base/src/main/resources/mapper/EmailTaskInfoMapper.xml
  13. 2 2
      service-daq/src/main/java/com/simuwang/daq/service/AbstractEmailParser.java
  14. 13 2
      service-daq/src/main/java/com/simuwang/daq/service/EmailParseService.java
  15. 2 5
      service-daq/src/main/java/com/simuwang/daq/service/NavEmailParser.java
  16. 5 9
      service-daq/src/main/java/com/simuwang/daq/service/ValuationEmailParser.java
  17. 1 1
      service-deploy/src/main/resources/application.yml
  18. 2 2
      service-deploy/src/test/java/com/simuwang/ApplicationTest.java
  19. 1 1
      service-manage/src/main/java/com/simuwang/manage/service/LoginService.java

+ 22 - 0
service-base/src/main/java/com/simuwang/base/common/util/NavDataUtil.java

@@ -39,4 +39,26 @@ public class NavDataUtil {
         log.info("数据格式验证通过 -> {}", fundNavDTO);
         return true;
     }
+
+    public static String checkDataFailReason(EmailFundNavDTO fundNavDTO) {
+        // 净值日期格式校验
+        if (StrUtil.isBlank(fundNavDTO.getPriceDate())) {
+            return "净值日期为空";
+        }
+        if (StrUtil.isBlank(fundNavDTO.getFundName()) && StrUtil.isBlank(fundNavDTO.getRegisterNumber())) {
+            return "备案编码和基金名称都为空";
+        }
+        if(StrUtil.isBlank(fundNavDTO.getNav()) && StrUtil.isBlank(fundNavDTO.getCumulativeNavWithdrawal()) && StrUtil.isBlank(fundNavDTO.getAssetNet())){
+            return "单位净值、累计净值、资产净值都为空";
+        }
+        // 单位净值,累计单位净值,资产净值,资产份额数字格式校验
+        boolean isvalidNumericFormat = (StrUtil.isBlank(fundNavDTO.getNav()) || StringUtil.isNumeric(fundNavDTO.getNav()))
+                && (StrUtil.isBlank(fundNavDTO.getCumulativeNavWithdrawal()) || StringUtil.isNumeric(fundNavDTO.getCumulativeNavWithdrawal()))
+                && (StrUtil.isBlank(fundNavDTO.getAssetNet()) || StringUtil.isNumeric(fundNavDTO.getAssetNet()))
+                && (StrUtil.isBlank(fundNavDTO.getAssetShare()) || StringUtil.isNumeric(fundNavDTO.getAssetShare()));
+        if (!isvalidNumericFormat) {
+            return "单位净值或累计净值或资产净值或资产份额格式不正确";
+        }
+        return null;
+    }
 }

+ 8 - 5
service-base/src/main/java/com/simuwang/base/common/util/ValuationBusinessUtils.java

@@ -31,11 +31,11 @@ public class ValuationBusinessUtils {
 
     private static final String ERROR_MSG_NOT_EXCEL_FILE = "文件格式错误";
 
-    private static final String ERROR_MSG_NOT_MATCH_TEMPLATE = "估值表模板暂不支持,请联系管理员";
+    private static final String ERROR_MSG_NOT_MATCH_TEMPLATE = "估值表模板暂不支持";
 
     private static final String ERROR_MSG_NO_DATA = "无数据";
 
-    private static final String ERROR_MSG_NOT_NUMBER = "非数值数据,请检查模板是否匹配";
+    private static final String ERROR_MSG_NOT_NUMBER = "非数值数据";
 
     private static final String ERROR_MSG_NOT_MARKET_VALUE_OR_AMOUNT = "无市值列或者无数量列,无法导入";
 
@@ -97,7 +97,7 @@ public class ValuationBusinessUtils {
 
             // 未找到估值表标题
             if (StringUtils.isEmpty(header.getTitle())) {
-                error = preInfo.new Error().setCellNum(0).setRowNum(0).setMsg(ERROR_MSG_NOT_MATCH_TEMPLATE + ":未找到估值表标题");
+                error = preInfo.new Error().setCellNum(0).setRowNum(0).setMsg(ERROR_MSG_NOT_MATCH_TEMPLATE + ":未找到基金名称或备案编码");
                 error.setExcelName(valuationNeedParseParam.getOriginFileName());
                 preInfo.setError(error);
                 return preInfo;
@@ -111,14 +111,14 @@ public class ValuationBusinessUtils {
             }
             // 未找到有效净值
             if (header.getUnitNetValue() <= 0) {
-                error = preInfo.new Error().setCellNum(0).setRowNum(0).setMsg(ERROR_MSG_NOT_MATCH_TEMPLATE + ":未找到有效净值");
+                error = preInfo.new Error().setCellNum(0).setRowNum(0).setMsg(ERROR_MSG_NOT_MATCH_TEMPLATE + ":未找到单位净值或累计净值");
                 error.setExcelName(valuationNeedParseParam.getOriginFileName());
                 preInfo.setError(error);
                 return preInfo;
             }
 
             if (excelInfo.getHeaderRows() == 0 || excelInfo.getTitleRows() == 0) {
-                error = preInfo.new Error().setCellNum(0).setRowNum(0).setMsg(ERROR_MSG_NOT_MATCH_TEMPLATE + ":未找到表头信息");
+                error = preInfo.new Error().setCellNum(0).setRowNum(0).setMsg(ERROR_MSG_NOT_MATCH_TEMPLATE + ":未找到表头字段行");
                 error.setExcelName(valuationNeedParseParam.getOriginFileName());
                 preInfo.setError(error);
                 return preInfo;
@@ -248,6 +248,9 @@ public class ValuationBusinessUtils {
                             if (value.endsWith(".0")) {
                                 value = value.replace(".0", "");
                             }
+                            if (value.equals("-")) {
+                                value = "";
+                            }
                             break;
                         case NUMERIC:
                             value = cell.getNumericCellValue() + "";

+ 1 - 1
service-base/src/main/java/com/simuwang/base/mapper/EmailParseInfoMapper.java

@@ -15,7 +15,7 @@ public interface EmailParseInfoMapper {
 
     Integer insert(@Param("itemDo") EmailParseInfoDO emailParseInfoDO);
 
-    void updateParseStatus(@Param("id") Integer id, @Param("parseStatus") int parseStatus);
+    void updateParseStatus(@Param("id") Integer id, @Param("parseStatus") int parseStatus, @Param("failReason") String failReason);
 
     List<EmailParseInfoDO> searchEmailList(EmailParseQuery emailParseQuery);
 

+ 5 - 0
service-base/src/main/java/com/simuwang/base/pojo/dos/EmailParseInfoDO.java

@@ -53,6 +53,11 @@ public class EmailParseInfoDO {
     @TableField(value = "parse_status")
     private Integer parseStatus;
     /**
+     * 失败原因
+     */
+    @TableField(value = "fail_reason")
+    private String failReason;
+    /**
      * 记录的有效性;1-有效;0-无效;
      */
     @TableField(value = "isvalid")

+ 4 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/EmailFundNavDTO.java

@@ -67,6 +67,10 @@ public class EmailFundNavDTO {
      * 估值表原始信息
      */
     private List<CmValuationTableAttribute> valuationTableAttributeList;
+    /**
+     * 失败原因
+     */
+    private String failReason;
 
     @Override
     public boolean equals(Object o) {

+ 13 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/query/TaskPageQuery.java

@@ -11,6 +11,11 @@ import com.simuwang.base.common.support.query.PageQuery;
 public class TaskPageQuery extends PageQuery {
 
     /**
+     * 任务名称
+     */
+    private String taskName;
+
+    /**
      * 邮箱地址
      */
     private String email;
@@ -58,4 +63,12 @@ public class TaskPageQuery extends PageQuery {
     public void setTaskType(Integer taskType) {
         this.taskType = taskType;
     }
+
+    public String getTaskName() {
+        return taskName;
+    }
+
+    public void setTaskName(String taskName) {
+        this.taskName = taskName;
+    }
 }

+ 1 - 1
service-base/src/main/java/com/simuwang/base/pojo/valuation/AssetsValuationDetails.java

@@ -90,7 +90,7 @@ public class AssetsValuationDetails {
 		return nav;
 	}
 
-	public double getIncrement() {
+	public Double getIncrement() {
 		return increment;
 	}
 

+ 6 - 0
service-base/src/main/java/com/simuwang/base/pojo/vo/FundFileInfoVO.java

@@ -12,6 +12,12 @@ import lombok.Data;
 public class FundFileInfoVO {
 
     /**
+     * 文件ID
+     */
+
+    private Integer fileId;
+
+    /**
      * 基金ID
      */
     private String fundId;

+ 8 - 2
service-base/src/main/resources/mapper/CompanyEmailHistoryMapper.xml

@@ -39,7 +39,7 @@
             cec.company_id,
             c.company_name,
             cec.email,
-            maxce.send_time,
+            maxce.send_time as send_time,
             maxce.send_remark,
             ifnull(maxce.send_status,-1) as send_status
         FROM
@@ -61,7 +61,12 @@
         <if test="sendStatus == -1">
             and maxce.send_status is null
         </if>
-        order by maxce.send_time desc
+        order by
+        CASE
+            WHEN send_time IS NULL THEN 1
+        ELSE 0
+        END,
+            send_time desc
         limit #{offset},#{pageSize}
     </select>
 
@@ -110,6 +115,7 @@
         <if test="companyId != null and companyId !=''">
             and c.company_id=#{companyId}
         </if>
+        order by cesh.send_time desc
         limit #{offset},#{pageSize}
     </select>
     <select id="countCompanyEmailhistory" resultType="java.lang.Long"

+ 55 - 15
service-base/src/main/resources/mapper/EmailFileInfoMapper.xml

@@ -42,22 +42,42 @@
           and isvalid = 1
     </select>
     <select id="searchFundFileInfo" resultType="com.simuwang.base.pojo.vo.FundFileInfoVO">
-        SELECT DISTINCT
+        SELECT DISTINCT efi.id as "fileId",
+        <if test="fileType != 3">
             efn.fund_id as "fundId",
             efn.fund_name as "fundName",
+        </if>
+        <if test="fileType == 3">
+            info.fund_id as "fundId",
+            efn.fund_name as "fundName",
+        </if>
             efi.file_name as "fileName",
             efi.file_path as "filePath",
             efi.createtime as "createTime"
         FROM
             PPW_EMAIL.EMAIL_FILE_INFO efi
+            <if test="fileType != 3">
                 JOIN PPW_EMAIL.EMAIL_FUND_NAV efn
-                     ON efi.id = efn.file_id
+                ON efi.id = efn.file_id
+            </if>
+            <if test="fileType == 3">
+                JOIN PPW_EMAIL.AMAC_REPORT_FUND_INFO efn
+                ON efi.id = efn.file_id
+                left join PPW_EMAIL.PVN_FUND_INFO info
+                on efn.register_number=info.register_number and info.isvalid=1
+            </if>
                 JOIN PPW_EMAIL.EMAIL_PARSE_INFO epi
                      ON epi.id = efi.email_id
         WHERE efi.isvalid = 1
           AND efn.isvalid = 1
           AND epi.isvalid = 1
-          AND epi.EMAIL_TYPE = #{fileType} and efn.fund_id=#{fundId}
+          AND epi.EMAIL_TYPE = #{fileType}
+        <if test="fileType != 3">
+            and efn.fund_id=#{fundId}
+        </if>
+        <if test="fileType == 3">
+            and info.fund_id=#{fundId}
+        </if>
         order by efi.createtime desc
         limit #{offset},#{pageSize}
     </select>
@@ -117,22 +137,42 @@
     <select id="countFundFileInfo" resultType="java.lang.Long"
             parameterType="com.simuwang.base.pojo.dto.query.FundFilePageQuery">
         select count(1) from (
-        SELECT DISTINCT
+        SELECT DISTINCT efi.id as "fileId",
+        <if test="fileType != 3">
             efn.fund_id as "fundId",
             efn.fund_name as "fundName",
-            efi.file_name as "fileName",
-            efi.file_path as "filePath",
-            efi.createtime as "createTime"
+        </if>
+        <if test="fileType == 3">
+            info.fund_id as "fundId",
+            efn.fund_name as "fundName",
+        </if>
+        efi.file_name as "fileName",
+        efi.file_path as "filePath",
+        efi.createtime as "createTime"
         FROM
-            PPW_EMAIL.EMAIL_FILE_INFO efi
-                JOIN PPW_EMAIL.EMAIL_FUND_NAV efn
-                     ON efi.id = efn.file_id
-                JOIN PPW_EMAIL.EMAIL_PARSE_INFO epi
-                     ON epi.id = efi.email_id
+        PPW_EMAIL.EMAIL_FILE_INFO efi
+        <if test="fileType != 3">
+            JOIN PPW_EMAIL.EMAIL_FUND_NAV efn
+            ON efi.id = efn.file_id
+        </if>
+        <if test="fileType == 3">
+            JOIN PPW_EMAIL.AMAC_REPORT_FUND_INFO efn
+            ON efi.id = efn.file_id
+            left join PPW_EMAIL.PVN_FUND_INFO info
+            on efn.register_number=info.register_number and info.isvalid=1
+        </if>
+        JOIN PPW_EMAIL.EMAIL_PARSE_INFO epi
+        ON epi.id = efi.email_id
         WHERE efi.isvalid = 1
-          AND efn.isvalid = 1
-          AND epi.isvalid = 1
-          AND epi.EMAIL_TYPE = #{fileType} and efn.fund_id=#{fundId}) a
+        AND efn.isvalid = 1
+        AND epi.isvalid = 1
+        AND epi.EMAIL_TYPE = #{fileType}
+        <if test="fileType != 3">
+            and efn.fund_id=#{fundId}
+        </if>
+        <if test="fileType == 3">
+            and info.fund_id=#{fundId}
+        </if>) a
     </select>
     <select id="countEmailDetailById" resultType="java.lang.Long"
             parameterType="com.simuwang.base.pojo.dto.query.EmailFileQuery">

+ 3 - 1
service-base/src/main/resources/mapper/EmailParseInfoMapper.xml

@@ -10,6 +10,7 @@
         <result column="email_title" property="emailTitle"/>
         <result column="email_type" property="emailType"/>
         <result column="parse_status" property="parseStatus"/>
+        <result column="fail_reason" property="failReason"/>
         <result column="isvalid" property="isvalid"/>
         <result column="creatorid" property="creatorId"/>
         <result column="createtime" property="createTime"/>
@@ -28,7 +29,8 @@
 
     <update id="updateParseStatus">
         update PPW_EMAIL.email_parse_info
-        set parse_status = #{parseStatus}
+        set parse_status = #{parseStatus},
+            fail_reason = #{failReason}
         where isvalid = 1
           and id = #{id}
     </update>

+ 7 - 1
service-base/src/main/resources/mapper/EmailTaskInfoMapper.xml

@@ -30,7 +30,7 @@
         update PPW_EMAIL.email_task_info set task_status=#{taskStatus},updatetime=#{updateTime},end_time=#{endTime} where id=#{id}
     </update>
     <delete id="deleteTaskLog">
-        update PPW_EMAIL.email_task_info set isvalid=0,updatetime=sysdate(),updaterid=#{userId} where isvalid=0
+        update PPW_EMAIL.email_task_info set isvalid=0,updatetime=sysdate(),updaterid=#{userId} where isvalid=1
         and id in
         <foreach collection="idList" index="index" item="id" separator="," open="(" close=")">
             #{id}
@@ -45,6 +45,9 @@
         <if test="email != null and email !=''">
             and email like concat('%',#{email},'%')
         </if>
+        <if test="taskName != null and taskName !=''">
+            and task_name like concat('%',#{taskName},'%')
+        </if>
         <if test="startDate != null and startDate !=''">
             and updatetime >= #{startDate}
         </if>
@@ -65,6 +68,9 @@
         <if test="email != null and email !=''">
             and email like concat('%',#{email},'%')
         </if>
+        <if test="taskName != null and taskName !=''">
+            and task_name like concat('%',#{taskName},'%')
+        </if>
         <if test="startDate != null and startDate !=''">
             and updatetime >= #{startDate}
         </if>

+ 2 - 2
service-daq/src/main/java/com/simuwang/daq/service/AbstractEmailParser.java

@@ -19,7 +19,7 @@ public abstract class AbstractEmailParser {
 
     public abstract List<EmailFundNavDTO> parse(EmailContentInfoDTO emailContentInfoDTO, Map<String, List<String>> emailFieldMap);
 
-    public boolean dataFormat(EmailFundNavDTO fundNavDTO) {
-        return NavDataUtil.navDataFormatCheck(fundNavDTO);
+    public String checkDataFailReason(EmailFundNavDTO fundNavDTO) {
+        return NavDataUtil.checkDataFailReason(fundNavDTO);
     }
 }

+ 13 - 2
service-daq/src/main/java/com/simuwang/daq/service/EmailParseService.java

@@ -189,6 +189,10 @@ public class EmailParseService {
             Integer fileId = saveEmailFileInfo(emailId, emailContentInfoDTO.getFileId(), fileName, emailContentInfoDTO.getFilePath(), parseDate);
 
             List<EmailFundNavDTO> fundNavDTOList = fileNameNavEntry.getValue();
+            if (CollUtil.isNotEmpty(fundNavDTOList)) {
+                // 过滤出解析成功的数据
+                fundNavDTOList = fundNavDTOList.stream().filter(e -> e != null && StrUtil.isBlank(e.getFailReason())).toList();
+            }
             if (CollUtil.isEmpty(fundNavDTOList) && !Objects.equals(EmailTypeConst.REPORT_EMAIL_TYPE, emailType)) {
                 continue;
             }
@@ -209,14 +213,21 @@ public class EmailParseService {
         }
 
         // 更新邮件解析结果 -> 当【净值日期】和【备案编码/基金名称】能正常解读,即识别为【成功】
-        long successNavCount = fileNameNavMap.values().stream().flatMap(List::stream).filter(Objects::nonNull).count();
+        long successNavCount = fileNameNavMap.values().stream().flatMap(List::stream).filter(e -> e != null && StrUtil.isBlank(e.getFailReason())).count();
         emailParseStatus = successNavCount >= 1 ? EmailParseStatusConst.SUCCESS : EmailParseStatusConst.FAIL;
         // 报告邮件有一条成功就表示整体成功
         if (Objects.equals(EmailTypeConst.REPORT_EMAIL_TYPE, emailType) && CollUtil.isNotEmpty(dataList)) {
             long count = dataList.size();
             emailParseStatus = count >= 1 ? EmailParseStatusConst.SUCCESS : EmailParseStatusConst.FAIL;
         }
-        emailParseInfoMapper.updateParseStatus(emailId, emailParseStatus);
+        String failReason = null;
+        if (emailParseStatus == EmailParseStatusConst.FAIL) {
+            // 邮件解析失败时 -> 保存失败原因
+            int hasPdfFile = emailContentInfoDTOList.stream().map(EmailContentInfoDTO::getFilePath).anyMatch(ExcelUtil::isPdf) ? 1 : 0;
+            List<EmailFundNavDTO> navDTOList = fileNameNavMap.values().stream().flatMap(List::stream).toList();
+            failReason = hasPdfFile == 1 && CollUtil.isEmpty(navDTOList) ? "无法从pdf文件中获取到数据" : navDTOList.stream().map(EmailFundNavDTO::getFailReason).distinct().collect(Collectors.joining("/"));
+        }
+        emailParseInfoMapper.updateParseStatus(emailId, emailParseStatus, failReason);
     }
 
     private void saveValuationInfo(Integer fileId, List<EmailFundNavDTO> fundNavDTOList) {

+ 2 - 5
service-daq/src/main/java/com/simuwang/daq/service/NavEmailParser.java

@@ -166,9 +166,9 @@ public class NavEmailParser extends AbstractEmailParser {
         }
         // 2.解析sheet中的净值数据
         List<EmailFundNavDTO> emailFundNavDTOList = parseSheetData(filePath, sheet, fieldPositionMap, null);
-        // 3.校验净值数据格式
+        // 3.校验净值数据格式 并 设置数据校验不通过的原因
         if (CollUtil.isNotEmpty(emailFundNavDTOList)) {
-            emailFundNavDTOList = emailFundNavDTOList.stream().filter(super::dataFormat).collect(Collectors.toList());
+            emailFundNavDTOList.forEach(e -> e.setFailReason(super.checkDataFailReason(e)));
         }
         return emailFundNavDTOList;
     }
@@ -316,9 +316,6 @@ public class NavEmailParser extends AbstractEmailParser {
                 ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.CUMULATIVE_NAV_WITHDRAWAL))) : null;
         String assetNet = columnFieldMap.get(EmailFieldConst.ASSET_NET) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.ASSET_NET)) != null ?
                 ExcelUtil.getCellValue(sheetRow.getCell(columnFieldMap.get(EmailFieldConst.ASSET_NET))) : null;
-        if (StrUtil.isBlank(nav) && StrUtil.isBlank(cumulativeNavWithdrawal) && StrUtil.isBlank(assetNet)) {
-            return null;
-        }
         List<EmailFundNavDTO> fundNavDTOList = CollUtil.newArrayList();
         EmailFundNavDTO emailFundNavDTO = new EmailFundNavDTO();
         String priceDate = columnFieldMap.get(EmailFieldConst.PRICE_DATE) != null && sheetRow.getCell(columnFieldMap.get(EmailFieldConst.PRICE_DATE)) != null ?

+ 5 - 9
service-daq/src/main/java/com/simuwang/daq/service/ValuationEmailParser.java

@@ -50,15 +50,10 @@ public class ValuationEmailParser extends AbstractEmailParser {
         List<ValuationNeedParseParam> valuationNeedParseParams = buildValuationNeedParseParam(emailContentInfoDTO);
         List<AssetsValuationResult.Record> recordList = valuationParseService.parseValuationExcel(valuationNeedParseParams);
         if (CollUtil.isNotEmpty(recordList)) {
-            List<AssetsValuationResult.Record> parseSuccessList = recordList.stream()
-                    .filter(e -> e.getSuccess() == 1 || (StrUtil.isNotBlank(e.getMsg()) && "未匹配基金".equals(e.getMsg()))).collect(Collectors.toList());
-            List<EmailFundNavDTO> fundNavDTOList = convertToFundNavDTO(parseSuccessList);
+            List<EmailFundNavDTO> fundNavDTOList = convertToFundNavDTO(recordList);
             Optional.ofNullable(fundNavDTOList).ifPresent(emailFundNavDTOList::addAll);
         }
-        // 校验净值数据格式
-        if (CollUtil.isNotEmpty(emailFundNavDTOList)) {
-            emailFundNavDTOList = emailFundNavDTOList.stream().filter(super::dataFormat).collect(Collectors.toList());
-        }
+
         return emailFundNavDTOList;
     }
 
@@ -129,9 +124,9 @@ public class ValuationEmailParser extends AbstractEmailParser {
         List<ValuationPdfTransformToExcelDTO> toExcelDTOList = pdfToExcelService.pdfToExcel(ListUtil.toList(file));
         Map<String, ValuationPdfTransformToExcelDTO> pdfToExcelMap = MapUtil.newHashMap();
         if (CollUtil.isNotEmpty(toExcelDTOList)) {
-            pdfToExcelMap = toExcelDTOList.stream().collect(Collectors.toMap(ValuationPdfTransformToExcelDTO::getOriginalFileName, v -> v));
+            pdfToExcelMap = toExcelDTOList.stream().collect(Collectors.toMap(ValuationPdfTransformToExcelDTO::getFileUrl, v -> v));
         }
-        ValuationPdfTransformToExcelDTO toExcelDTO = pdfToExcelMap.get(originFileName);
+        ValuationPdfTransformToExcelDTO toExcelDTO = pdfToExcelMap.get(valuationNeedParseParam.getFileUrl());
         valuationNeedParseParam.setFile(toExcelDTO != null ? toExcelDTO.getExcelFile() : null);
     }
 
@@ -154,6 +149,7 @@ public class ValuationEmailParser extends AbstractEmailParser {
             fundNavDTO.setValuationTableDO(record.getValuationTableDO());
             fundNavDTO.setValuationTableAttributeList(record.getValuationTableAttributeList());
             fundNavDTO.setFundPositionDetailDOList(record.getFundPositionDetailDOList());
+            fundNavDTO.setFailReason(record.getMsg());
             emailFundNavDTOList.add(fundNavDTO);
         }
         return emailFundNavDTOList;

+ 1 - 1
service-deploy/src/main/resources/application.yml

@@ -71,7 +71,7 @@ email:
   file:
     path: /home/wwwroot/shzq_dataapi/file/nav
   parse:
-    force-template-enable: true
+    force-template-enable: false
 
 # 配置
 simuwang:

+ 2 - 2
service-deploy/src/test/java/com/simuwang/ApplicationTest.java

@@ -33,8 +33,8 @@ public class ApplicationTest {
 //        emailInfoDTO.setPort("993");
 //        emailInfoDTO.setProtocol("imap");
 
-        Date startDate = DateUtil.parse("2024-09-27 16:25:00", DateConst.YYYY_MM_DD_HH_MM_SS);
-        Date endDate = DateUtil.parse("2024-09-27 16:40:00", DateConst.YYYY_MM_DD_HH_MM_SS);
+        Date startDate = DateUtil.parse("2024-10-10 15:00:00", DateConst.YYYY_MM_DD_HH_MM_SS);
+        Date endDate = DateUtil.parse("2024-10-10 16:40:00", DateConst.YYYY_MM_DD_HH_MM_SS);
         try {
             emailParseService.parseEmail(emailInfoDTO, startDate, endDate);
         } catch (Exception e) {

+ 1 - 1
service-manage/src/main/java/com/simuwang/manage/service/LoginService.java

@@ -100,7 +100,7 @@ public class LoginService {
         // 用户权限处理
         List<SysMenuDO> menuList = this.userAuthService.listUserMenuByUserId(userId, 1);
         // 过滤按钮
-        List<MenuTreeDTO> tempList = menuList.stream().filter(e -> !Objects.equals("F", e.getMenuType()))
+        List<MenuTreeDTO> tempList = menuList.stream()
                 .map(MenuTreeDTO::new).collect(Collectors.toList());
         // 菜单列表转树结构
         List<MenuTreeDTO> trees = TreeUtil.list2Tree(tempList, MenuTreeDTO::getId, MenuTreeDTO::getPid,