Parcourir la source

feat:修改净值缺失输出的逻辑

mozuwen il y a 5 mois
Parent
commit
35360b97c0

+ 46 - 11
service-manage/src/main/java/com/simuwang/manage/service/competition/FundNavService.java

@@ -80,21 +80,28 @@ public class FundNavService {
         if (CollUtil.isEmpty(deletionInfoDOList)) {
             return navDeletionDTOList;
         }
+        // 得到存在基金完整的基金id
+        List<String> allFundIdList = navMapper.getAllFundId();
+        List<String> deletionFundIdList = deletionInfoDOList.stream().map(FundDeletionInfoDO::getFundId).distinct().toList();
+        List<String> notDeletionFundIdList = allFundIdList.stream().filter(e -> !deletionFundIdList.contains(e)).toList();
 
         List<FundAndCompanyInfoDO> fundInfoCompanyNameList = fundInfoMapper.queryFundAndTrustByFundId(competitionId);
+        fundInfoCompanyNameList = fundInfoCompanyNameList.stream().filter(e->!notDeletionFundIdList.contains(e.getFundId())).toList();
+        if(CollUtil.isEmpty(fundInfoCompanyNameList)){
+            return navDeletionDTOList;
+        }
         Map<String, FundAndCompanyInfoDO> fundIdCompanyNameMap = fundInfoCompanyNameList.stream().collect(Collectors.toMap(FundAndCompanyInfoDO::getFundId, v -> v));
+
         // 获取净值日期所在年和所在周
-        List<String> dateList = deletionInfoDOList.stream().map(FundDeletionInfoDO::getDeletionDate).distinct().toList();
-        Map<String, TradeDateDTO> tradeDateDoMap = getYearAndWeekOfDate(startDate, endDate, dateList);
+        Map<String, TradeDateDTO> tradeDateDoMap = getYearAndWeekOfDate(startDate, endDate);
         Map<String, List<FundDeletionInfoDO>> fundIdDeletionInfoMap = deletionInfoDOList.stream().collect(Collectors.groupingBy(FundDeletionInfoDO::getFundId));
-        for (Map.Entry<String, List<FundDeletionInfoDO>> fundIdDeletionInfoEntry : fundIdDeletionInfoMap.entrySet()) {
-            String fundId = fundIdDeletionInfoEntry.getKey();
-            List<FundDeletionInfoDO> fundDeletionInfoDOList = fundIdDeletionInfoEntry.getValue();
-            FundAndCompanyInfoDO fundAndCompanyInfoDO = fundIdCompanyNameMap.get(fundId);
+        for (Map.Entry<String, FundAndCompanyInfoDO> fundAndCompanyInfoEntry : fundIdCompanyNameMap.entrySet()) {
+            String fundId = fundAndCompanyInfoEntry.getKey();
+            FundAndCompanyInfoDO fundAndCompanyInfoDO = fundAndCompanyInfoEntry.getValue();
+            List<FundDeletionInfoDO> fundDeletionInfoDOList = fundIdDeletionInfoMap.get(fundId);
             List<FundNavDeletionDTO> fundNavDataDTOList = buildFundNavDeletionDTO(fundAndCompanyInfoDO, fundDeletionInfoDOList, tradeDateDoMap);
             navDeletionDTOList.addAll(fundNavDataDTOList);
         }
-
         return navDeletionDTOList;
     }
 
@@ -113,11 +120,34 @@ public class FundNavService {
         String trustName = fundAndCompanyInfoDO.getCompanyName();
         String trustRegisterNumber = fundAndCompanyInfoDO.getCompanyRegisterNumber();
         String registerNumber = fundAndCompanyInfoDO.getRegisterNumber();
+        String fundId = fundAndCompanyInfoDO.getFundId();
+        // 净值缺失表中无该基金的数据 -> 该基金为缺失全部净值
+        if(CollUtil.isEmpty(fundDeletionInfoDOList)){
+            List<FundNavDeletionDTO> navDeletionDTOList = CollUtil.newArrayList();
+            tradeDateDoMap.forEach((k,v)->{
+                FundNavDeletionDTO fundNavDeletionDTO = new FundNavDeletionDTO();
+                fundNavDeletionDTO.setTrustName(trustName);
+                fundNavDeletionDTO.setTrustRegisterNumber(trustRegisterNumber);
+                fundNavDeletionDTO.setFundId(fundId);
+                fundNavDeletionDTO.setFundName(fundName);
+                fundNavDeletionDTO.setRegisterNumber(registerNumber);
+                fundNavDeletionDTO.setYear(v != null ? v.getYear() + v.getWeek() : null);
+                fundNavDeletionDTO.setWeek(v != null ? String.valueOf(v.getWeek()) : null);
+                // 第1周(2022-12-26至2022-12-30)
+                String date = "第" + v.getCompetitionWeek() + "周(" + v.getFirstDate() + "至" + v.getLastDate() + ")";
+                fundNavDeletionDTO.setCompetitionDate(date);
+                fundNavDeletionDTO.setDate(k);
+                navDeletionDTOList.add(fundNavDeletionDTO);
+            });
+            navDeletionDTOList.sort(Comparator.comparing(FundNavDeletionDTO::getFundName).thenComparing(FundNavDeletionDTO::getWeek));
+            return navDeletionDTOList;
+        }
+
         return fundDeletionInfoDOList.stream().map(e -> {
             FundNavDeletionDTO fundNavDeletionDTO = new FundNavDeletionDTO();
             fundNavDeletionDTO.setTrustName(trustName);
             fundNavDeletionDTO.setTrustRegisterNumber(trustRegisterNumber);
-            fundNavDeletionDTO.setFundId(e.getFundId());
+            fundNavDeletionDTO.setFundId(fundId);
             fundNavDeletionDTO.setFundName(fundName);
             fundNavDeletionDTO.setRegisterNumber(registerNumber);
             TradeDateDTO tradeDateDTO = tradeDateDoMap.get(e.getDeletionDate());
@@ -158,15 +188,21 @@ public class FundNavService {
         }).sorted(Comparator.comparing(FundNavDataDTO::getFundName).thenComparing(FundNavDataDTO::getPriceDate)).toList();
     }
 
-    private Map<String, TradeDateDTO> getYearAndWeekOfDate(String startDate, String endDate, List<String> dateList) {
+    private Map<String, TradeDateDTO> getYearAndWeekOfDate(String startDate, String endDate) {
         Map<String, TradeDateDTO> tradeDateDoMap = MapUtil.newHashMap();
         List<TradeDateDO> tradeDateDOList = tradeDateMapper.selectTradeDate(startDate, endDate);
         if (CollUtil.isEmpty(tradeDateDOList)) {
             return tradeDateDoMap;
         }
-        List<Integer> yearWeekList = tradeDateDOList.stream().map(e -> e.getYearWeek()).distinct().toList();
+        List<Integer> yearWeekList = tradeDateDOList.stream().map(TradeDateDO::getYearWeek).distinct().toList();
         Map<String, TradeDateDO> dateMap = tradeDateDOList.stream().collect(Collectors.toMap(k -> DateUtil.format(k.getTradeDate(), DateConst.YYYY_MM_DD), v -> v));
         Map<Integer, List<TradeDateDO>> yearWeekDateMap = tradeDateDOList.stream().collect(Collectors.groupingBy(TradeDateDO::getYearWeek));
+        // 得到startDate~endDate的最后一个交易日
+        List<String> dateList = CollUtil.newArrayList();
+        yearWeekDateMap.forEach((k,v)->{
+            String date = v.stream().max(Comparator.comparing(TradeDateDO::getTradeDate)).map(e -> DateUtil.format(e.getTradeDate(), DateConst.YYYY_MM_DD)).orElse(null);
+            dateList.add(date);
+        });
         for (String date : dateList) {
             TradeDateDO tradeDateDO = dateMap.get(date);
             Integer yearWeek = tradeDateDO.getYearWeek();
@@ -181,7 +217,6 @@ public class FundNavService {
             tradeDateDTO.setCompetitionWeek(competitionWeek);
             tradeDateDoMap.put(date, tradeDateDTO);
         }
-
         return tradeDateDoMap;
     }
 }