Forráskód Böngészése

fix: 文件解析详情问题修复

chenjianhua 7 hónapja
szülő
commit
69b19c7ddd

+ 2 - 0
service-base/src/main/java/com/simuwang/base/mapper/EmailFileInfoMapper.java

@@ -33,4 +33,6 @@ public interface EmailFileInfoMapper {
     void updateTimeById(@Param("id") Integer fileId, @Param("parseDate") Date parseDate);
 
     List<Integer> selectValuationFileId(@Param("fileIdList") List<Integer> fileIdList);
+
+    List<String> getAllPriceDateByFileId(@Param("fileId") Integer fileId);
 }

+ 3 - 0
service-base/src/main/java/com/simuwang/base/mapper/EmailFundAssetMapper.java

@@ -1,6 +1,7 @@
 package com.simuwang.base.mapper;
 
 import com.simuwang.base.pojo.dos.EmailFundAssetDO;
+import com.simuwang.base.pojo.dos.EmailParseDetailDO;
 import com.simuwang.base.pojo.dto.query.ParseDetailPageQuery;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -23,4 +24,6 @@ public interface EmailFundAssetMapper {
     List<EmailFundAssetDO> selectNotMappingAsset(@Param("fundName") String sourceFundName);
 
     void batchUpdate(@Param("itemDoList")List<EmailFundAssetDO> fundAssetDOList);
+
+    List<EmailParseDetailDO> selectFundAssetByFielId(@Param("fileId") Integer fileId, @Param("priceDate") String priceDate);
 }

+ 3 - 0
service-base/src/main/java/com/simuwang/base/mapper/EmailFundNavMapper.java

@@ -1,6 +1,7 @@
 package com.simuwang.base.mapper;
 
 import com.simuwang.base.pojo.dos.EmailFundNavDO;
+import com.simuwang.base.pojo.dos.EmailParseDetailDO;
 import com.simuwang.base.pojo.dto.query.ParseDetailPageQuery;
 import com.simuwang.base.pojo.vo.EmailFundNavVO;
 import org.apache.ibatis.annotations.Mapper;
@@ -28,4 +29,6 @@ public interface EmailFundNavMapper {
     void batchUpdate(@Param("navList") List<EmailFundNavDO> fundNavDOList);
 
     String getMaxPriceDate(@Param("fundName")String sourceFundName);
+
+    List<EmailParseDetailDO> selectFundNavByFielId(@Param("fileId") Integer fileId, @Param("priceDate") String priceDate);
 }

+ 5 - 0
service-base/src/main/resources/mapper/EmailFileInfoMapper.xml

@@ -165,6 +165,11 @@
             #{fileId}
         </foreach>
     </select>
+    <select id="getAllPriceDateByFileId" resultType="java.lang.String" parameterType="java.lang.Integer">
+        select * from (select distinct price_date from PPW_EMAIL.EMAIL_FUND_NAV WHERE file_id=#{fileId}and isvalid=1
+        union
+        select distinct price_date from PPW_EMAIL.EMAIL_FUND_ASSET WHERE file_id=#{fileId}and isvalid=1) a order by price_date desc
+    </select>
 
     <update id="updateTimeById">
         update PPW_EMAIL.EMAIL_FILE_INFO

+ 38 - 0
service-base/src/main/resources/mapper/EmailFundAssetMapper.xml

@@ -153,6 +153,44 @@
         where isvalid =1 and exception_status=3
           and fund_name=#{fundName}
     </select>
+    <resultMap id="BaseDetailMap" type="com.simuwang.base.pojo.dos.EmailParseDetailDO">
+        <result column="fund_id" property="fundId"/>
+        <result column="fund_name" property="fundName"/>
+        <result column="register_number" property="registerNumber"/>
+        <result column="price_date" property="priceDate"/>
+        <result column="nav" property="nav"/>
+        <result column="cumulative_nav_withdrawal" property="cumulativeNavWithdrawal"/>
+        <result column="asset_net" property="assetNet"/>
+        <result column="asset_share" property="assetShare"/>
+        <result column="nav_is_stored" property="navIsStored"/>
+        <result column="nav_exception_status" property="navExceptionStatus"/>
+        <result column="asset_is_stored" property="assetIsStored"/>
+        <result column="asset_exception_status" property="assetExceptionStatus"/>
+        <result column="updatetime" property="updateTime"/>
+    </resultMap>
+    <select id="selectFundAssetByFielId" resultMap="BaseDetailMap">
+        SELECT DISTINCT
+            asset.fund_id,
+            asset.fund_name,
+            asset.register_number,
+            asset.price_date,
+            null as nav,
+            null as cumulative_nav_withdrawal,
+            asset.asset_net as asset_net,
+            asset.asset_share as asset_share,
+            null AS nav_is_stored,
+            null AS nav_exception_status,
+            asset.is_stored as asset_is_stored,
+            asset.exception_status as asset_exception_status,
+            asset.updatetime
+        FROM
+            PPW_EMAIL.EMAIL_FILE_INFO efi
+                JOIN PPW_EMAIL.email_fund_asset asset
+                     ON efi.id = asset.file_id
+                         AND asset.isvalid = 1
+        WHERE efi.isvalid = 1
+          AND efi.id = #{fileId} and asset.price_date=#{priceDate}
+    </select>
 
     <delete id="deleteByFileId">
         update PPW_EMAIL.email_fund_asset

+ 38 - 0
service-base/src/main/resources/mapper/EmailFundNavMapper.xml

@@ -187,6 +187,44 @@
         select max(nav.price_date) from PPW_EMAIL.email_fund_nav nav where nav.isvalid =1 and nav.exception_status=3
                                                                         and nav.fund_name=#{fundName}
     </select>
+    <resultMap id="BaseDetailMap" type="com.simuwang.base.pojo.dos.EmailParseDetailDO">
+        <result column="fund_id" property="fundId"/>
+        <result column="fund_name" property="fundName"/>
+        <result column="register_number" property="registerNumber"/>
+        <result column="price_date" property="priceDate"/>
+        <result column="nav" property="nav"/>
+        <result column="cumulative_nav_withdrawal" property="cumulativeNavWithdrawal"/>
+        <result column="asset_net" property="assetNet"/>
+        <result column="asset_share" property="assetShare"/>
+        <result column="nav_is_stored" property="navIsStored"/>
+        <result column="nav_exception_status" property="navExceptionStatus"/>
+        <result column="asset_is_stored" property="assetIsStored"/>
+        <result column="asset_exception_status" property="assetExceptionStatus"/>
+        <result column="updatetime" property="updateTime"/>
+    </resultMap>
+    <select id="selectFundNavByFielId" resultMap="BaseDetailMap">
+        SELECT DISTINCT
+            nav.fund_id,
+            nav.fund_name,
+            nav.register_number,
+            nav.price_date,
+            nav.nav,
+            nav.cumulative_nav_withdrawal,
+            null as asset_net,
+            null as asset_share,
+            nav.is_stored AS nav_is_stored,
+            nav.exception_status AS nav_exception_status,
+            null as asset_is_stored,
+            null as asset_exception_status,
+            nav.updatetime
+        FROM
+            PPW_EMAIL.EMAIL_FILE_INFO efi
+                JOIN PPW_EMAIL.email_fund_nav nav
+                     ON efi.id = nav.file_id
+                      AND nav.isvalid = 1
+        WHERE efi.isvalid = 1
+          AND efi.id = #{fileId} and nav.price_date=#{priceDate}
+    </select>
 
     <delete id="deleteByFileId">
         update PPW_EMAIL.email_fund_nav

+ 69 - 10
service-manage/src/main/java/com/simuwang/manage/service/impl/ParseEmailServiceImpl.java

@@ -4,9 +4,7 @@ import com.simuwang.base.common.enums.ParseStatus;
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.util.DateUtils;
 import com.simuwang.base.common.util.StringUtil;
-import com.simuwang.base.mapper.EmailFileInfoMapper;
-import com.simuwang.base.mapper.EmailParseInfoMapper;
-import com.simuwang.base.mapper.EmailTypeRuleMapper;
+import com.simuwang.base.mapper.*;
 import com.simuwang.base.pojo.dos.EmailFileInfoDO;
 import com.simuwang.base.pojo.dos.EmailParseDetailDO;
 import com.simuwang.base.pojo.dos.EmailParseInfoDO;
@@ -23,10 +21,7 @@ import com.smppw.utils.DateUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -46,6 +41,11 @@ public class ParseEmailServiceImpl implements ParseEmailService {
 
     @Autowired
     private EmailFileInfoMapper emailFileInfoMapper;
+
+    @Autowired
+    private EmailFundNavMapper emailFundNavMapper;
+    @Autowired
+    private EmailFundAssetMapper emailFundAssetMapper;
     @Override
     public void saveEmailType(EmailTypeRuleVO emailTypeRuleVO) {
         EmailTypeRuleDO  ruleDO = new EmailTypeRuleDO();
@@ -143,9 +143,68 @@ public class ParseEmailServiceImpl implements ParseEmailService {
     @Override
     public MybatisPage<EmailParseDetailVO> searchEmailDetailById(EmailFileQuery emailFileQuery) {
         //根据邮件ID获取附件信息
-        List<EmailParseDetailDO> dataList = emailFileInfoMapper.searchEmailDetailById(emailFileQuery);
-        List<EmailParseDetailVO> result = dataList.stream().filter(e -> StringUtil.isNotNull(e)).map(EmailParseDetailDO::toVO).collect(Collectors.toList());
-        long total = emailFileInfoMapper.countEmailDetailById(emailFileQuery);
+        Integer fileId = emailFileQuery.getFileId();
+        List<String> priceDateList = emailFileInfoMapper.getAllPriceDateByFileId(fileId);
+        List<EmailParseDetailDO> dataList = new ArrayList<>();
+        for(String priceDate : priceDateList){
+            List<EmailParseDetailDO> navList = emailFundNavMapper.selectFundNavByFielId(fileId,priceDate);
+            List<EmailParseDetailDO> assetList = emailFundAssetMapper.selectFundAssetByFielId(fileId,priceDate);
+            //整合
+            if(navList.size() > 0){
+                //先处理净值
+                for(EmailParseDetailDO navDO : navList){
+                    for(EmailParseDetailDO assetDO : assetList){
+                        if(navDO.getFundId() != null && navDO.getFundId().equals(assetDO.getFundId())){
+                            navDO.setAssetExceptionStatus(assetDO.getAssetExceptionStatus());
+                            navDO.setAssetIsStored(assetDO.getAssetIsStored());
+                            navDO.setAssetNet(assetDO.getAssetNet());
+                            navDO.setAssetShare(assetDO.getAssetShare());
+                        }else if(navDO.getRegisterNumber() != null && navDO.getRegisterNumber().equals(assetDO.getRegisterNumber())){
+                            navDO.setAssetExceptionStatus(assetDO.getAssetExceptionStatus());
+                            navDO.setAssetIsStored(assetDO.getAssetIsStored());
+                            navDO.setAssetNet(assetDO.getAssetNet());
+                            navDO.setAssetShare(assetDO.getAssetShare());
+                        }else if(navDO.getFundName() != null && navDO.getFundName().equals(assetDO.getFundName())){
+                            navDO.setAssetExceptionStatus(assetDO.getAssetExceptionStatus());
+                            navDO.setAssetIsStored(assetDO.getAssetIsStored());
+                            navDO.setAssetNet(assetDO.getAssetNet());
+                            navDO.setAssetShare(assetDO.getAssetShare());
+                        }
+                    }
+                    dataList.add(navDO);
+                }
+                //处理规模
+                for(EmailParseDetailDO assetDO : assetList){
+                    int idx=0;
+                    for(EmailParseDetailDO dataDO : dataList){
+                        if((dataDO.getFundId() != null && dataDO.getFundId().equals(assetDO.getFundId()))
+                        || (dataDO.getRegisterNumber() != null && dataDO.getRegisterNumber().equals(assetDO.getRegisterNumber()))
+                        || (dataDO.getFundName() != null && dataDO.getFundName().equals(assetDO.getFundName()))){
+                            idx++;
+                        }
+                    }
+                    //没有找到说明只有规模没有净值
+                    if(idx == 0){
+                        dataList.add(assetDO);
+                    }
+                }
+            }
+        }
+        long total = dataList.size();
+        List<EmailParseDetailDO> resultDO = null;
+        long current = emailFileQuery.getCurrent();
+        long pageSize = emailFileQuery.getPageSize();
+        long offset = emailFileQuery.getOffset();
+        if(pageSize >= dataList.size()){
+            resultDO = dataList.subList(Integer.parseInt(offset+""),dataList.size());
+        }else{
+            if(current*pageSize > dataList.size()){
+                resultDO = dataList.subList(Integer.parseInt(offset+""),dataList.size());
+            }else{
+                resultDO = dataList.subList(Integer.parseInt(offset+""),Integer.parseInt(current*pageSize+""));
+            }
+        }
+        List<EmailParseDetailVO> result = resultDO.stream().filter(e -> StringUtil.isNotNull(e)).map(EmailParseDetailDO::toVO).collect(Collectors.toList());
         return MybatisPage.of(total,result);
     }
 }