|
@@ -80,21 +80,28 @@ public class FundNavService {
|
|
if (CollUtil.isEmpty(deletionInfoDOList)) {
|
|
if (CollUtil.isEmpty(deletionInfoDOList)) {
|
|
return navDeletionDTOList;
|
|
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);
|
|
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));
|
|
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));
|
|
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);
|
|
List<FundNavDeletionDTO> fundNavDataDTOList = buildFundNavDeletionDTO(fundAndCompanyInfoDO, fundDeletionInfoDOList, tradeDateDoMap);
|
|
navDeletionDTOList.addAll(fundNavDataDTOList);
|
|
navDeletionDTOList.addAll(fundNavDataDTOList);
|
|
}
|
|
}
|
|
-
|
|
|
|
return navDeletionDTOList;
|
|
return navDeletionDTOList;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -113,11 +120,34 @@ public class FundNavService {
|
|
String trustName = fundAndCompanyInfoDO.getCompanyName();
|
|
String trustName = fundAndCompanyInfoDO.getCompanyName();
|
|
String trustRegisterNumber = fundAndCompanyInfoDO.getCompanyRegisterNumber();
|
|
String trustRegisterNumber = fundAndCompanyInfoDO.getCompanyRegisterNumber();
|
|
String registerNumber = fundAndCompanyInfoDO.getRegisterNumber();
|
|
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 -> {
|
|
return fundDeletionInfoDOList.stream().map(e -> {
|
|
FundNavDeletionDTO fundNavDeletionDTO = new FundNavDeletionDTO();
|
|
FundNavDeletionDTO fundNavDeletionDTO = new FundNavDeletionDTO();
|
|
fundNavDeletionDTO.setTrustName(trustName);
|
|
fundNavDeletionDTO.setTrustName(trustName);
|
|
fundNavDeletionDTO.setTrustRegisterNumber(trustRegisterNumber);
|
|
fundNavDeletionDTO.setTrustRegisterNumber(trustRegisterNumber);
|
|
- fundNavDeletionDTO.setFundId(e.getFundId());
|
|
|
|
|
|
+ fundNavDeletionDTO.setFundId(fundId);
|
|
fundNavDeletionDTO.setFundName(fundName);
|
|
fundNavDeletionDTO.setFundName(fundName);
|
|
fundNavDeletionDTO.setRegisterNumber(registerNumber);
|
|
fundNavDeletionDTO.setRegisterNumber(registerNumber);
|
|
TradeDateDTO tradeDateDTO = tradeDateDoMap.get(e.getDeletionDate());
|
|
TradeDateDTO tradeDateDTO = tradeDateDoMap.get(e.getDeletionDate());
|
|
@@ -158,15 +188,21 @@ public class FundNavService {
|
|
}).sorted(Comparator.comparing(FundNavDataDTO::getFundName).thenComparing(FundNavDataDTO::getPriceDate)).toList();
|
|
}).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();
|
|
Map<String, TradeDateDTO> tradeDateDoMap = MapUtil.newHashMap();
|
|
List<TradeDateDO> tradeDateDOList = tradeDateMapper.selectTradeDate(startDate, endDate);
|
|
List<TradeDateDO> tradeDateDOList = tradeDateMapper.selectTradeDate(startDate, endDate);
|
|
if (CollUtil.isEmpty(tradeDateDOList)) {
|
|
if (CollUtil.isEmpty(tradeDateDOList)) {
|
|
return tradeDateDoMap;
|
|
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<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));
|
|
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) {
|
|
for (String date : dateList) {
|
|
TradeDateDO tradeDateDO = dateMap.get(date);
|
|
TradeDateDO tradeDateDO = dateMap.get(date);
|
|
Integer yearWeek = tradeDateDO.getYearWeek();
|
|
Integer yearWeek = tradeDateDO.getYearWeek();
|
|
@@ -181,7 +217,6 @@ public class FundNavService {
|
|
tradeDateDTO.setCompetitionWeek(competitionWeek);
|
|
tradeDateDTO.setCompetitionWeek(competitionWeek);
|
|
tradeDateDoMap.put(date, tradeDateDTO);
|
|
tradeDateDoMap.put(date, tradeDateDTO);
|
|
}
|
|
}
|
|
-
|
|
|
|
return tradeDateDoMap;
|
|
return tradeDateDoMap;
|
|
}
|
|
}
|
|
}
|
|
}
|