Browse Source

fix: 净值规模查询优化

chenjianhua 4 months ago
parent
commit
4e8fc4e1c4

+ 12 - 1
service-base/src/main/resources/mapper/daq/FundNavAssetMapper.xml

@@ -61,7 +61,17 @@
     </select>
     <select id="countNavAssetList" resultType="java.lang.Long"
             parameterType="com.simuwang.base.pojo.dto.query.FundNavAssetPageQuery">
-        SELECT count(1)
+    select count(*) from (
+        SELECT distinct
+        info.fund_id,
+        info.fund_short_name,
+        info.register_number,
+        nav.price_date,
+        nav.nav,
+        nav.cumulative_nav_withdrawal,
+        asset.asset_share,
+        asset.asset_net,
+        nav.updatetime
         FROM
         nav nav
         JOIN pvn_fund_info info
@@ -87,5 +97,6 @@
         <if test="updateEndDate != null and updateEndDate !=''">
             and (nav.updatetime <![CDATA[ <= ]]> #{updateEndDate} or asset.updatetime <![CDATA[ <= ]]> #{updateEndDate})
         </if>
+        )a
     </select>
 </mapper>

+ 12 - 23
service-daq/src/main/java/com/simuwang/daq/service/EmailParseService.java

@@ -505,19 +505,12 @@ public class EmailParseService {
         Map<String, List<NavDO>> fundIdNavMap = navDOList.stream().collect(Collectors.groupingBy(NavDO::getFundId));
         for (Map.Entry<String, List<NavDO>> entry : fundIdNavMap.entrySet()) {
             List<NavDO> navDOS = entry.getValue();
-            List<String> priceDateList = navDOS.stream().map(NavDO::getPriceDate).map(e -> DateUtil.format(e, DateConst.YYYY_MM_DD)).collect(Collectors.toList());
-            List<String> dateList = navMapper.queryFundNavByDate(entry.getKey(), priceDateList);
-            List<NavDO> updateNavDoList = navDOS.stream().filter(e -> dateList.contains(DateUtil.format(e.getPriceDate(), DateConst.YYYY_MM_DD))).collect(Collectors.toList());
-            List<NavDO> insertNavDoList = navDOS.stream().filter(e -> !dateList.contains(DateUtil.format(e.getPriceDate(), DateConst.YYYY_MM_DD))).collect(Collectors.toList());
             //按照净值日期排序,方便后面的振幅检测
-            if (CollUtil.isNotEmpty(insertNavDoList) && insertNavDoList.size() > 1) {
-                insertNavDoList = insertNavDoList.stream().sorted(Comparator.comparing(NavDO::getPriceDate)).collect(Collectors.toList());
-            }
-            if (CollUtil.isNotEmpty(updateNavDoList) && updateNavDoList.size() > 1) {
-                updateNavDoList = updateNavDoList.stream().sorted(Comparator.comparing(NavDO::getPriceDate)).collect(Collectors.toList());
+            if (CollUtil.isNotEmpty(navDOS) && navDOS.size() > 1) {
+                navDOS = navDOS.stream().sorted(Comparator.comparing(NavDO::getPriceDate)).collect(Collectors.toList());
             }
             //因为要做振幅检测,所以不能使用批量插入的方式
-            for(NavDO insertDO : insertNavDoList){
+            for(NavDO insertDO : navDOS){
                BigDecimal  amplitude = amplitudeNav(insertDO);
                if(amplitude.compareTo(BigDecimal.valueOf(1)) >= 0){
                    //振幅超过100%不可以入库,要给出提示信息
@@ -527,21 +520,17 @@ public class EmailParseService {
                    if(amplitude.compareTo(BigDecimal.valueOf(0.2)) >= 0){
                        saveAmplitudeFundNav(insertDO,fileId,NavParseStatusConst.AMPLITUDE_EXCEPTION,1);
                    }
-                   navMapper.batchInsert(CollUtil.toList(insertDO));
+                   NavDO oldNavDO = navMapper.queryFundNav(insertDO);
+                   if(oldNavDO != null){
+                       oldNavDO.setNav(insertDO.getNav());
+                       oldNavDO.setCumulativeNavWithdrawal(insertDO.getCumulativeNavWithdrawal());
+                       oldNavDO.setUpdateTime(new Date());
+                       navMapper.updateNav(oldNavDO);
+                   }else{
+                       navMapper.saveNav(insertDO);
+                   }
                }
             }
-            for(NavDO updateDO : updateNavDoList){
-                BigDecimal  amplitude = amplitudeNav(updateDO);
-                if(amplitude.compareTo(BigDecimal.valueOf(1)) >= 0){
-                    //超过净值振幅不能入库,同时需要修改采集库的入库状态和异常信息
-                    saveAmplitudeFundNav(updateDO,fileId,NavParseStatusConst.AMPLITUDE_ERROR,0);
-                }else{
-                    if(amplitude.compareTo(BigDecimal.valueOf(0.2)) >= 0){
-                        saveAmplitudeFundNav(updateDO,fileId,NavParseStatusConst.AMPLITUDE_EXCEPTION,1);
-                    }
-                    navMapper.batchUpdate(CollUtil.toList(updateDO));
-                }
-            }
         }
     }