Преглед изворни кода

fix:邮件解析-处理估值表解析底层数据存储问题

mozuwen пре 7 месеци
родитељ
комит
0dec31932b

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

@@ -7,7 +7,7 @@ import org.apache.ibatis.annotations.Param;
 @Mapper
 public interface ValuationTableMapper {
 
-    void unValid(@Param("fundId") String fundId, @Param("valuationDate") String date);
+    void unValid(@Param("fileId") Integer fileId);
 
     int insert(ValuationTableDO record);
 

+ 4 - 4
service-base/src/main/resources/mapper/FundPositionDetailMapper.xml

@@ -30,21 +30,21 @@
     </resultMap>
 
     <delete id="deleteUnUsed">
-        delete
-        from PPW_EMAIL.fund_position_detail
+        update PPW_EMAIL.fund_position_detail
+        set isvalid    = 0
         where fund_id = #{fundId}
           and valuation_date = #{valuationDate}
     </delete>
 
     <insert id="insertMulti" parameterType="com.simuwang.base.pojo.dos.FundPositionDetailDO">
         INSERT INTO PPW_EMAIL.fund_position_detail (
-        fund_id,valuation_date,LEVEL,currency,exchange_rate,subject_code,
+        fund_id,valuation_id,valuation_date,LEVEL,currency,exchange_rate,subject_code,
         securities_amount, securities_code,securities_name, sec_type,market_value,
         market_value_ratio,nature,subject_type,increment,halt_info,net_cost,net_cost_ratio,market_price,
         unit_cost,isvalid,creatorid,createtime
         ) VALUES
         <foreach collection="details" index="index" item="detail" separator=",">
-            (#{detail.fundId},#{detail.valuationDate},#{detail.level}, #{detail.currency}, #{detail.exchangeRate}, #{detail.subjectCode},
+            (#{detail.fundId},#{detail.valuationId},#{detail.valuationDate},#{detail.level}, #{detail.currency}, #{detail.exchangeRate}, #{detail.subjectCode},
              #{detail.securitiesAmount},#{detail.securitiesCode}, #{detail.securitiesName}, #{detail.secType},#{detail.marketValue},
              #{detail.marketValueRatio}, #{detail.nature},
              #{detail.subjectType},#{detail.increment},#{detail.haltInfo},#{detail.netCost},#{detail.netCostRatio},#{detail.marketPrice},

+ 1 - 2
service-base/src/main/resources/mapper/ValuationTableMapper.xml

@@ -32,8 +32,7 @@
     <update id="unValid">
         update  PPW_EMAIL.valuation_table
         set isvalid = 0
-        where fund_id = #{fundId}
-          and valuation_date = #{valuationDate}
+        where file_id = #{fileId}
     </update>
 
     <insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.simuwang.base.pojo.dos.ValuationTableDO" useGeneratedKeys="true">

+ 17 - 4
service-daq/src/main/java/com/simuwang/daq/service/EmailParseService.java

@@ -12,6 +12,7 @@ import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONUtil;
 import com.simuwang.base.common.conts.*;
 import com.simuwang.base.common.util.EmailUtil;
+import com.simuwang.base.common.util.ExcelUtil;
 import com.simuwang.base.common.util.FileUtil;
 import com.simuwang.base.config.DaqProperties;
 import com.simuwang.base.config.EmailRuleConfig;
@@ -127,6 +128,10 @@ public class EmailParseService {
             log.info("采集邮件失败 -> 邮箱配置信息:{},堆栈信息:{}", mailboxInfoDTO, ExceptionUtil.stacktraceToString(e));
             return;
         }
+        if (MapUtil.isEmpty(emailContentMap)) {
+            log.info("未采集到邮件 -> 邮箱配置信息:{},开始时间:{},结束时间:{}", mailboxInfoDTO, DateUtil.format(startDate, DateConst.YYYY_MM_DD_HH_MM_SS), DateUtil.format(endDate, DateConst.YYYY_MM_DD_HH_MM_SS));
+            return;
+        }
         for (Map.Entry<String, List<EmailContentInfoDTO>> emailEntry : emailContentMap.entrySet()) {
             List<EmailContentInfoDTO> emailContentInfoDTOList = emailEntry.getValue();
             if (CollUtil.isEmpty(emailContentInfoDTOList)) {
@@ -214,6 +219,7 @@ public class EmailParseService {
         if (CollUtil.isEmpty(fundNavDTOList)) {
             return;
         }
+        valuationTableMapper.unValid(fileId);
         for (EmailFundNavDTO fundNavDTO : fundNavDTOList) {
             ValuationTableDO valuationTableDO = fundNavDTO.getValuationTableDO();
             if (valuationTableDO == null) {
@@ -225,21 +231,24 @@ public class EmailParseService {
             List<FundPositionDetailDO> fundPositionDetailDOList = fundNavDTO.getFundPositionDetailDOList();
             List<CmValuationTableAttribute> valuationTableAttributeList = fundNavDTO.getValuationTableAttributeList();
             if (CollUtil.isEmpty(fundIdList)) {
-                int valuationId = valuationTableMapper.insert(valuationTableDO);
+                valuationTableMapper.insert(valuationTableDO);
+                int valuationId = valuationTableDO.getId();
                 saveValuationTableAttribute(valuationId, valuationTableAttributeList);
                 fundPositionDetailDOList.forEach(e -> e.setValuationId(valuationId));
-                saveFundPositionDetail(fundPositionDetailDOList, null, fundNavDTO.getPriceDate());
+                // 不匹配基金的情况下 -> 不写fund_position_detail
+                // saveFundPositionDetail(fundPositionDetailDOList, null, fundNavDTO.getPriceDate());
                 continue;
             }
             for (String fundId : fundIdList) {
                 valuationTableDO.setFundId(fundId);
-                int valuationId = valuationTableMapper.insert(valuationTableDO);
+                valuationTableMapper.insert(valuationTableDO);
+                int valuationId = valuationTableDO.getId();
                 fundPositionDetailDOList.forEach(e -> {
                     e.setFundId(fundId);
                     e.setValuationId(valuationId);
                 });
                 saveValuationTableAttribute(valuationId, valuationTableAttributeList);
-                saveFundPositionDetail(fundPositionDetailDOList, null, fundNavDTO.getPriceDate());
+                saveFundPositionDetail(fundPositionDetailDOList, fundId, fundNavDTO.getPriceDate());
             }
         }
     }
@@ -803,6 +812,10 @@ public class EmailParseService {
                     emailContentInfoDTOList.add(emailContentInfoDTO);
                 }
                 if (CollUtil.isNotEmpty(emailContentInfoDTOList)) {
+                    // 估值表邮件不展示正文html文件
+                    if (emailType.equals(EmailTypeConst.VALUATION_EMAIL_TYPE)) {
+                        emailContentInfoDTOList = emailContentInfoDTOList.stream().filter(e -> !ExcelUtil.isHTML(e.getFilePath())).toList();
+                    }
                     emailContentInfoDTOList.forEach(e -> {
                         e.setEmailType(emailType);
                         e.setSenderEmail(senderEmail);