|
@@ -20,10 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
-import java.util.ArrayList;
|
|
|
|
-import java.util.List;
|
|
|
|
-import java.util.Map;
|
|
|
|
-import java.util.TreeMap;
|
|
|
|
|
|
+import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -147,8 +144,6 @@ public class DeletionServiceImpl implements DeletionService {
|
|
List<AssetDO> assetDOList = assetMapper.selectAssetByFundId(fundId);
|
|
List<AssetDO> assetDOList = assetMapper.selectAssetByFundId(fundId);
|
|
//查询成立日到今天为止的交易日集合
|
|
//查询成立日到今天为止的交易日集合
|
|
List<TradeDateDO> tradeDateDOList = tradeDateMapper.selectTradeDate(inceptionDate,today);
|
|
List<TradeDateDO> tradeDateDOList = tradeDateMapper.selectTradeDate(inceptionDate,today);
|
|
- //延迟天数为3天
|
|
|
|
- tradeDateDOList = tradeDateDOList.subList(0,tradeDateDOList.size()-3);
|
|
|
|
if(deletionDownParam.getDeletionType() != null && deletionDownParam.getDeletionType().equals(DeletionType.NAV_DELETION.getCode())){
|
|
if(deletionDownParam.getDeletionType() != null && deletionDownParam.getDeletionType().equals(DeletionType.NAV_DELETION.getCode())){
|
|
navDeletion(fundId,navDOList,tradeDateDOList,fundReportFrequencyDO);
|
|
navDeletion(fundId,navDOList,tradeDateDOList,fundReportFrequencyDO);
|
|
}else if(deletionDownParam.getDeletionType() != null && deletionDownParam.getDeletionType().equals(DeletionType.ASSET_DELETION.getCode())){
|
|
}else if(deletionDownParam.getDeletionType() != null && deletionDownParam.getDeletionType().equals(DeletionType.ASSET_DELETION.getCode())){
|
|
@@ -215,6 +210,13 @@ public class DeletionServiceImpl implements DeletionService {
|
|
deletionInfoMapper.updateRemark(fundId,DeletionType.ASSET_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
deletionInfoMapper.updateRemark(fundId,DeletionType.ASSET_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
+ if(tradeDateDOList.size() <= 3){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ TradeDateDO tradeDateDO = tradeDateDOList.get(tradeDateDOList.size()-3);
|
|
|
|
+ if(tradeDateDO.getTradeDate().compareTo(DateUtils.parse(tradeDate,DateUtils.YYYY_MM_DD)) < 0){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
//写入缺失信息表
|
|
//写入缺失信息表
|
|
saveDeletionInfoDO(fundId,tradeDate,DeletionType.ASSET_DELETION.getCode());
|
|
saveDeletionInfoDO(fundId,tradeDate,DeletionType.ASSET_DELETION.getCode());
|
|
}
|
|
}
|
|
@@ -224,7 +226,7 @@ public class DeletionServiceImpl implements DeletionService {
|
|
TreeMap<Integer,List<AssetDO>> weekNavListMap = new TreeMap<>();
|
|
TreeMap<Integer,List<AssetDO>> weekNavListMap = new TreeMap<>();
|
|
//按周数整合
|
|
//按周数整合
|
|
for(String priceDate : navListMap.keySet()){
|
|
for(String priceDate : navListMap.keySet()){
|
|
- Integer weekOfYear = DateUtil.weekOfYear(DateUtils.parse(priceDate,DateUtils.YYYY_MM_DD));
|
|
|
|
|
|
+ Integer weekOfYear = Integer.parseInt(priceDate.substring(0,4)+DateUtil.weekOfYear(DateUtils.parse(priceDate,DateUtils.YYYY_MM_DD)));
|
|
if(weekNavListMap.containsKey(weekOfYear)){
|
|
if(weekNavListMap.containsKey(weekOfYear)){
|
|
List<AssetDO> assetDOS = weekNavListMap.get(weekOfYear);
|
|
List<AssetDO> assetDOS = weekNavListMap.get(weekOfYear);
|
|
assetDOS.addAll(navListMap.get(priceDate));
|
|
assetDOS.addAll(navListMap.get(priceDate));
|
|
@@ -235,13 +237,24 @@ public class DeletionServiceImpl implements DeletionService {
|
|
weekNavListMap.put(weekOfYear,navDOS);
|
|
weekNavListMap.put(weekOfYear,navDOS);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- Map<Integer,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> e.getWeekOfYear()));
|
|
|
|
|
|
+ Map<Integer,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> e.getYearWeek()));
|
|
for(Integer weekOfYear : tradeListMap.keySet()){
|
|
for(Integer weekOfYear : tradeListMap.keySet()){
|
|
|
|
+ List<AssetDO> assetDOS = weekNavListMap.get(weekOfYear);
|
|
if(weekNavListMap.containsKey(weekOfYear)){
|
|
if(weekNavListMap.containsKey(weekOfYear)){
|
|
- List<AssetDO> assetDOS = weekNavListMap.get(weekOfYear);
|
|
|
|
- String tradeDate = DateUtils.format(assetDOS.get(assetDOS.size()-1).getPriceDate(),DateUtils.YYYY_MM_DD);
|
|
|
|
- deletionInfoMapper.updateRemark(fundId,DeletionType.ASSET_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
|
|
|
+ for(AssetDO assetDO : assetDOS){
|
|
|
|
+ String tradeDate = DateUtils.format(assetDO.getPriceDate(),DateUtils.YYYY_MM_DD);
|
|
|
|
+ deletionInfoMapper.updateRemark(fundId,DeletionType.ASSET_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
|
+ }
|
|
continue;
|
|
continue;
|
|
|
|
+ }else{
|
|
|
|
+ if(StringUtil.isNotEmpty(assetDOS)){
|
|
|
|
+ for(int idx=0;idx < assetDOS.size()-1 ; idx++){
|
|
|
|
+ AssetDO assetDO = assetDOS.get(idx);
|
|
|
|
+ String tradeDate = DateUtils.format(assetDO.getPriceDate(),DateUtils.YYYY_MM_DD);
|
|
|
|
+ deletionInfoMapper.deleteDeletionRemark(fundId,DeletionType.ASSET_DELETION.getCode(),tradeDate);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
//不包含的话,默认取每周的最后一个交易日作为周净值日期
|
|
//不包含的话,默认取每周的最后一个交易日作为周净值日期
|
|
List<TradeDateDO> tradeDateDOS = tradeListMap.get(weekOfYear);
|
|
List<TradeDateDO> tradeDateDOS = tradeListMap.get(weekOfYear);
|
|
@@ -249,6 +262,14 @@ public class DeletionServiceImpl implements DeletionService {
|
|
if(tradeDateDOS.size() > 0){
|
|
if(tradeDateDOS.size() > 0){
|
|
tradeDate = DateUtils.format(tradeDateDOS.get(tradeDateDOS.size()-1).getTradeDate(),DateUtils.YYYY_MM_DD);
|
|
tradeDate = DateUtils.format(tradeDateDOS.get(tradeDateDOS.size()-1).getTradeDate(),DateUtils.YYYY_MM_DD);
|
|
}
|
|
}
|
|
|
|
+ //判断当前缺失交易日是否是近三个交易日
|
|
|
|
+ if(tradeDateDOList.size() <= 3){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ TradeDateDO tradeDateDO = tradeDateDOList.get(tradeDateDOList.size()-3);
|
|
|
|
+ if(tradeDateDO.getTradeDate().compareTo(DateUtils.parse(tradeDate,DateUtils.YYYY_MM_DD)) < 0){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
//写入缺失信息表
|
|
//写入缺失信息表
|
|
saveDeletionInfoDO(fundId,tradeDate,DeletionType.ASSET_DELETION.getCode());
|
|
saveDeletionInfoDO(fundId,tradeDate,DeletionType.ASSET_DELETION.getCode());
|
|
}
|
|
}
|
|
@@ -271,11 +292,27 @@ public class DeletionServiceImpl implements DeletionService {
|
|
}
|
|
}
|
|
Map<String,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> e.getYearmonth()));
|
|
Map<String,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> e.getYearmonth()));
|
|
for(String yearMonth : tradeListMap.keySet()){
|
|
for(String yearMonth : tradeListMap.keySet()){
|
|
|
|
+ //本月的数据不考虑
|
|
|
|
+ String thisMonth = DateUtils.format(new Date(),DateUtils.YYYY_MM);
|
|
|
|
+ if(yearMonth.equals(thisMonth)){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ List<AssetDO> assetDOS = monthNavListMap.get(yearMonth);
|
|
if(monthNavListMap.containsKey(yearMonth)){
|
|
if(monthNavListMap.containsKey(yearMonth)){
|
|
- List<AssetDO> assetDOS = monthNavListMap.get(yearMonth);
|
|
|
|
- String tradeDate = DateUtils.format(assetDOS.get(assetDOS.size()-1).getPriceDate(),DateUtils.YYYY_MM_DD);
|
|
|
|
- deletionInfoMapper.updateRemark(fundId,DeletionType.ASSET_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
|
|
|
+ for(AssetDO assetDO : assetDOS){
|
|
|
|
+ String tradeDate = DateUtils.format(assetDO.getPriceDate(),DateUtils.YYYY_MM_DD);
|
|
|
|
+ deletionInfoMapper.updateRemark(fundId,DeletionType.ASSET_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
|
+ }
|
|
continue;
|
|
continue;
|
|
|
|
+ }else{
|
|
|
|
+ if(StringUtil.isNotEmpty(assetDOS)){
|
|
|
|
+ for(int idx=0;idx < assetDOS.size()-1 ; idx++){
|
|
|
|
+ AssetDO assetDO = assetDOS.get(idx);
|
|
|
|
+ String tradeDate = DateUtils.format(assetDO.getPriceDate(),DateUtils.YYYY_MM_DD);
|
|
|
|
+ deletionInfoMapper.deleteDeletionRemark(fundId,DeletionType.ASSET_DELETION.getCode(),tradeDate);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
//不包含的话,默认取每周的最后一个交易日作为周净值日期
|
|
//不包含的话,默认取每周的最后一个交易日作为周净值日期
|
|
List<TradeDateDO> tradeDateDOS = tradeListMap.get(yearMonth);
|
|
List<TradeDateDO> tradeDateDOS = tradeListMap.get(yearMonth);
|
|
@@ -283,6 +320,13 @@ public class DeletionServiceImpl implements DeletionService {
|
|
if(tradeDateDOS.size() > 0){
|
|
if(tradeDateDOS.size() > 0){
|
|
tradeDate = DateUtils.format(tradeDateDOS.get(tradeDateDOS.size()-1).getTradeDate(),DateUtils.YYYY_MM_DD);
|
|
tradeDate = DateUtils.format(tradeDateDOS.get(tradeDateDOS.size()-1).getTradeDate(),DateUtils.YYYY_MM_DD);
|
|
}
|
|
}
|
|
|
|
+ if(tradeDateDOList.size() <= 3){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ TradeDateDO tradeDateDO = tradeDateDOList.get(tradeDateDOList.size()-3);
|
|
|
|
+ if(tradeDateDO.getTradeDate().compareTo(DateUtils.parse(tradeDate,DateUtils.YYYY_MM_DD)) < 0){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
//写入缺失信息表
|
|
//写入缺失信息表
|
|
saveDeletionInfoDO(fundId,tradeDate,DeletionType.ASSET_DELETION.getCode());
|
|
saveDeletionInfoDO(fundId,tradeDate,DeletionType.ASSET_DELETION.getCode());
|
|
}
|
|
}
|
|
@@ -308,7 +352,7 @@ public class DeletionServiceImpl implements DeletionService {
|
|
TreeMap<Integer,List<NavDO>> weekNavListMap = new TreeMap<>();
|
|
TreeMap<Integer,List<NavDO>> weekNavListMap = new TreeMap<>();
|
|
//按周数整合
|
|
//按周数整合
|
|
for(String priceDate : navListMap.keySet()){
|
|
for(String priceDate : navListMap.keySet()){
|
|
- Integer weekOfYear = DateUtil.weekOfYear(DateUtils.parse(priceDate,DateUtils.YYYY_MM_DD));
|
|
|
|
|
|
+ Integer weekOfYear = Integer.parseInt(priceDate.substring(0,4)+DateUtil.weekOfYear(DateUtils.parse(priceDate,DateUtils.YYYY_MM_DD)));;
|
|
if(weekNavListMap.containsKey(weekOfYear)){
|
|
if(weekNavListMap.containsKey(weekOfYear)){
|
|
List<NavDO> navDOS = weekNavListMap.get(weekOfYear);
|
|
List<NavDO> navDOS = weekNavListMap.get(weekOfYear);
|
|
navDOS.addAll(navListMap.get(priceDate));
|
|
navDOS.addAll(navListMap.get(priceDate));
|
|
@@ -319,13 +363,24 @@ public class DeletionServiceImpl implements DeletionService {
|
|
weekNavListMap.put(weekOfYear,navDOS);
|
|
weekNavListMap.put(weekOfYear,navDOS);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- Map<Integer,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> e.getWeekOfYear()));
|
|
|
|
|
|
+ Map<Integer,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> e.getYearWeek()));
|
|
for(Integer weekOfYear : tradeListMap.keySet()){
|
|
for(Integer weekOfYear : tradeListMap.keySet()){
|
|
|
|
+ List<NavDO> navDOS = weekNavListMap.get(weekOfYear);
|
|
if(weekNavListMap.containsKey(weekOfYear)){
|
|
if(weekNavListMap.containsKey(weekOfYear)){
|
|
- List<NavDO> navDOS = weekNavListMap.get(weekOfYear);
|
|
|
|
- String tradeDate = DateUtils.format(navDOS.get(navDOS.size()-1).getPriceDate(),DateUtils.YYYY_MM_DD);
|
|
|
|
- deletionInfoMapper.updateRemark(fundId,DeletionType.NAV_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
|
|
|
+ for(NavDO navDO : navDOS){
|
|
|
|
+ String tradeDate = DateUtils.format(navDO.getPriceDate(),DateUtils.YYYY_MM_DD);
|
|
|
|
+ deletionInfoMapper.updateRemark(fundId,DeletionType.NAV_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
|
+ }
|
|
continue;
|
|
continue;
|
|
|
|
+ }else{
|
|
|
|
+ //防止频率变更导致数据异常,需要把当前日期下所在的频率全部无效掉
|
|
|
|
+ if(StringUtil.isNotEmpty(navDOS)){
|
|
|
|
+ for(int idx=0;idx < navDOS.size()-1 ; idx++){
|
|
|
|
+ NavDO navDO = navDOS.get(idx);
|
|
|
|
+ String tradeDate = DateUtils.format(navDO.getPriceDate(),DateUtils.YYYY_MM_DD);
|
|
|
|
+ deletionInfoMapper.deleteDeletionRemark(fundId,DeletionType.NAV_DELETION.getCode(),tradeDate);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
//不包含的话,默认取每周的最后一个交易日作为周净值日期
|
|
//不包含的话,默认取每周的最后一个交易日作为周净值日期
|
|
List<TradeDateDO> tradeDateDOS = tradeListMap.get(weekOfYear);
|
|
List<TradeDateDO> tradeDateDOS = tradeListMap.get(weekOfYear);
|
|
@@ -333,6 +388,13 @@ public class DeletionServiceImpl implements DeletionService {
|
|
if(tradeDateDOS.size() > 0){
|
|
if(tradeDateDOS.size() > 0){
|
|
tradeDate = DateUtils.format(tradeDateDOS.get(tradeDateDOS.size()-1).getTradeDate(),DateUtils.YYYY_MM_DD);
|
|
tradeDate = DateUtils.format(tradeDateDOS.get(tradeDateDOS.size()-1).getTradeDate(),DateUtils.YYYY_MM_DD);
|
|
}
|
|
}
|
|
|
|
+ if(tradeDateDOList.size() <= 3){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ TradeDateDO tradeDateDO = tradeDateDOList.get(tradeDateDOList.size()-3);
|
|
|
|
+ if(tradeDateDO.getTradeDate().compareTo(DateUtils.parse(tradeDate,DateUtils.YYYY_MM_DD)) < 0){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
//写入缺失信息表
|
|
//写入缺失信息表
|
|
saveDeletionInfoDO(fundId,tradeDate,DeletionType.NAV_DELETION.getCode());
|
|
saveDeletionInfoDO(fundId,tradeDate,DeletionType.NAV_DELETION.getCode());
|
|
}
|
|
}
|
|
@@ -355,11 +417,27 @@ public class DeletionServiceImpl implements DeletionService {
|
|
}
|
|
}
|
|
Map<String,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> e.getYearmonth()));
|
|
Map<String,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> e.getYearmonth()));
|
|
for(String yearMonth : tradeListMap.keySet()){
|
|
for(String yearMonth : tradeListMap.keySet()){
|
|
|
|
+ //本月的数据不考虑
|
|
|
|
+ String thisMonth = DateUtils.format(new Date(),DateUtils.YYYY_MM);
|
|
|
|
+ if(yearMonth.equals(thisMonth)){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ List<NavDO> navDOS = monthNavListMap.get(yearMonth);
|
|
if(monthNavListMap.containsKey(yearMonth)){
|
|
if(monthNavListMap.containsKey(yearMonth)){
|
|
- List<NavDO> navDOS = monthNavListMap.get(yearMonth);
|
|
|
|
- String tradeDate = DateUtils.format(navDOS.get(navDOS.size()-1).getPriceDate(),DateUtils.YYYY_MM_DD);
|
|
|
|
- deletionInfoMapper.updateRemark(fundId,DeletionType.NAV_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
|
|
|
+ for(NavDO navDO : navDOS){
|
|
|
|
+ String tradeDate = DateUtils.format(navDO.getPriceDate(),DateUtils.YYYY_MM_DD);
|
|
|
|
+ deletionInfoMapper.updateRemark(fundId,DeletionType.NAV_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
|
+ }
|
|
continue;
|
|
continue;
|
|
|
|
+ }else{
|
|
|
|
+ //防止频率变更导致数据异常,需要把当前日期下所在的频率全部无效掉
|
|
|
|
+ if(StringUtil.isNotEmpty(navDOS)){
|
|
|
|
+ for(NavDO navDO : navDOS){
|
|
|
|
+ String tradeDate = DateUtils.format(navDO.getPriceDate(),DateUtils.YYYY_MM_DD);
|
|
|
|
+ deletionInfoMapper.deleteDeletionRemark(fundId,DeletionType.NAV_DELETION.getCode(),tradeDate);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
//不包含的话,默认取每周的最后一个交易日作为周净值日期
|
|
//不包含的话,默认取每周的最后一个交易日作为周净值日期
|
|
List<TradeDateDO> tradeDateDOS = tradeListMap.get(yearMonth);
|
|
List<TradeDateDO> tradeDateDOS = tradeListMap.get(yearMonth);
|
|
@@ -367,6 +445,13 @@ public class DeletionServiceImpl implements DeletionService {
|
|
if(tradeDateDOS.size() > 0){
|
|
if(tradeDateDOS.size() > 0){
|
|
tradeDate = DateUtils.format(tradeDateDOS.get(tradeDateDOS.size()-1).getTradeDate(),DateUtils.YYYY_MM_DD);
|
|
tradeDate = DateUtils.format(tradeDateDOS.get(tradeDateDOS.size()-1).getTradeDate(),DateUtils.YYYY_MM_DD);
|
|
}
|
|
}
|
|
|
|
+ if(tradeDateDOList.size() <= 3){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ TradeDateDO tradeDateDO = tradeDateDOList.get(tradeDateDOList.size()-3);
|
|
|
|
+ if(tradeDateDO.getTradeDate().compareTo(DateUtils.parse(tradeDate,DateUtils.YYYY_MM_DD)) < 0){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
//写入缺失信息表
|
|
//写入缺失信息表
|
|
saveDeletionInfoDO(fundId,tradeDate,DeletionType.NAV_DELETION.getCode());
|
|
saveDeletionInfoDO(fundId,tradeDate,DeletionType.NAV_DELETION.getCode());
|
|
}
|
|
}
|