|
@@ -172,6 +172,7 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
}
|
|
|
BigDecimal threshold = new BigDecimal(0.0035);
|
|
|
BigDecimal preDifference = new BigDecimal(0);
|
|
|
+ List<String> tradeDateList = new ArrayList<>();
|
|
|
for(int navIdx=0;navIdx < navDOList.size() ;navIdx++){
|
|
|
NavDO navDO = navDOList.get(navIdx);
|
|
|
//获取当前净值日期下的分红总和
|
|
@@ -196,21 +197,24 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
}
|
|
|
tradeDate = DateUtils.format(navDOList.get(navIdx-1).getPriceDate(),DateUtils.YYYY_MM_DD)+"~"+DateUtils.format(navDO.getPriceDate(),DateUtils.YYYY_MM_DD);
|
|
|
}
|
|
|
- saveDeletionInfoDO(fundId,tradeDate,DeletionType.DISTRIBUTION_DELETION.getCode());
|
|
|
+ tradeDateList.add(tradeDate);
|
|
|
}
|
|
|
preDifference = difference;
|
|
|
}
|
|
|
+ saveDeletionInfoDO(fundId,tradeDateList,DeletionType.DISTRIBUTION_DELETION.getCode());
|
|
|
}
|
|
|
|
|
|
private void assetDeletion(String fundId, List<AssetDO> assetDOList, List<TradeDateDO> tradeDateDOList, FundReportFrequencyDO fundReportFrequencyDO) {
|
|
|
//将现有数据无效掉
|
|
|
deletionInfoMapper.deleteDeletion(fundId,DeletionType.ASSET_DELETION.getCode());
|
|
|
+ List<String> tradeDateList = new ArrayList<>();
|
|
|
if(Frequency.DAY == Frequency.getFrequencyByCode(fundReportFrequencyDO.getAssetFrequency())){
|
|
|
Map<String,List<AssetDO>> navListMap = assetDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getPriceDate(),DateUtils.YYYY_MM_DD)));
|
|
|
Map<String,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getTradeDate(),DateUtils.YYYY_MM_DD)));
|
|
|
+ List<String> updateTradeDateList = new ArrayList<>();
|
|
|
for(String tradeDate : tradeListMap.keySet()){
|
|
|
if(navListMap.containsKey(tradeDate)){
|
|
|
- deletionInfoMapper.updateRemark(fundId,DeletionType.ASSET_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
+ updateTradeDateList.add(tradeDate);
|
|
|
continue;
|
|
|
}
|
|
|
if(tradeDateDOList.size() <= 3){
|
|
@@ -220,9 +224,22 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
if(tradeDateDO.getTradeDate().compareTo(DateUtils.parse(tradeDate,DateUtils.YYYY_MM_DD)) < 0){
|
|
|
continue;
|
|
|
}
|
|
|
- //写入缺失信息表
|
|
|
- saveDeletionInfoDO(fundId,tradeDate,DeletionType.ASSET_DELETION.getCode());
|
|
|
+ tradeDateList.add(tradeDate);
|
|
|
}
|
|
|
+ if(updateTradeDateList.size() > 0){
|
|
|
+ List<DeletionInfoDO> batchUpdateDeletionInfoDO = new ArrayList<>();
|
|
|
+ for(String tradeDate : updateTradeDateList){
|
|
|
+ DeletionInfoDO deletionInfoDO = new DeletionInfoDO();
|
|
|
+ deletionInfoDO.setFundId(fundId);
|
|
|
+ deletionInfoDO.setDeletionType(DeletionType.ASSET_DELETION.getCode());
|
|
|
+ deletionInfoDO.setDeletionDate(tradeDate);
|
|
|
+ deletionInfoDO.setRemark(DeletionType.NO_DELETION.getInfo());
|
|
|
+ batchUpdateDeletionInfoDO.add(deletionInfoDO);
|
|
|
+ }
|
|
|
+ deletionInfoMapper.batchUpdateRemark(batchUpdateDeletionInfoDO);
|
|
|
+ }
|
|
|
+ //写入缺失信息表
|
|
|
+ saveDeletionInfoDO(fundId,tradeDateList,DeletionType.ASSET_DELETION.getCode());
|
|
|
}
|
|
|
if(Frequency.WEEK == Frequency.getFrequencyByCode(fundReportFrequencyDO.getAssetFrequency())){
|
|
|
Map<String,List<AssetDO>> navListMap = assetDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getPriceDate(),DateUtils.YYYY_MM_DD)));
|
|
@@ -244,18 +261,33 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
for(Integer weekOfYear : tradeListMap.keySet()){
|
|
|
List<AssetDO> assetDOS = weekNavListMap.get(weekOfYear);
|
|
|
if(weekNavListMap.containsKey(weekOfYear)){
|
|
|
+ List<String> updateTradeDateList = new ArrayList<>();
|
|
|
for(TradeDateDO tradeDateDO : tradeListMap.get(weekOfYear)){
|
|
|
String tradeDate = DateUtils.format(tradeDateDO.getTradeDate(),DateUtils.YYYY_MM_DD);
|
|
|
- deletionInfoMapper.updateRemark(fundId,DeletionType.ASSET_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
+ updateTradeDateList.add(tradeDate);
|
|
|
+ }
|
|
|
+ if(updateTradeDateList.size() > 0){
|
|
|
+ List<DeletionInfoDO> batchUpdateDeletionInfoDO = new ArrayList<>();
|
|
|
+ for(String tradeDate : updateTradeDateList){
|
|
|
+ DeletionInfoDO deletionInfoDO = new DeletionInfoDO();
|
|
|
+ deletionInfoDO.setFundId(fundId);
|
|
|
+ deletionInfoDO.setDeletionType(DeletionType.ASSET_DELETION.getCode());
|
|
|
+ deletionInfoDO.setDeletionDate(tradeDate);
|
|
|
+ deletionInfoDO.setRemark(DeletionType.NO_DELETION.getInfo());
|
|
|
+ batchUpdateDeletionInfoDO.add(deletionInfoDO);
|
|
|
+ }
|
|
|
+ deletionInfoMapper.batchUpdateRemark(batchUpdateDeletionInfoDO);
|
|
|
}
|
|
|
continue;
|
|
|
}else{
|
|
|
if(StringUtil.isNotEmpty(assetDOS)){
|
|
|
+ List<String> deleteTradeDateList = new ArrayList<>();
|
|
|
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);
|
|
|
+ deleteTradeDateList.add(tradeDate);
|
|
|
}
|
|
|
+ deletionInfoMapper.deleteDeletionRemark(fundId,DeletionType.ASSET_DELETION.getCode(),deleteTradeDateList);
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -273,9 +305,10 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
if(tradeDateDO.getTradeDate().compareTo(DateUtils.parse(tradeDate,DateUtils.YYYY_MM_DD)) < 0){
|
|
|
continue;
|
|
|
}
|
|
|
- //写入缺失信息表
|
|
|
- saveDeletionInfoDO(fundId,tradeDate,DeletionType.ASSET_DELETION.getCode());
|
|
|
+ tradeDateList.add(tradeDate);
|
|
|
}
|
|
|
+ //写入缺失信息表
|
|
|
+ saveDeletionInfoDO(fundId,tradeDateList,DeletionType.ASSET_DELETION.getCode());
|
|
|
}
|
|
|
if(Frequency.MONTH == Frequency.getFrequencyByCode(fundReportFrequencyDO.getAssetFrequency())){
|
|
|
Map<String,List<AssetDO>> navListMap = assetDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getPriceDate(),DateUtils.YYYY_MM_DD)));
|
|
@@ -302,18 +335,33 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
}
|
|
|
List<AssetDO> assetDOS = monthNavListMap.get(yearMonth);
|
|
|
if(monthNavListMap.containsKey(yearMonth)){
|
|
|
+ List<String> updateTradeDateList = new ArrayList<>();
|
|
|
for(TradeDateDO tradeDateDO : tradeListMap.get(yearMonth)){
|
|
|
String tradeDate = DateUtils.format(tradeDateDO.getTradeDate(),DateUtils.YYYY_MM_DD);
|
|
|
- deletionInfoMapper.updateRemark(fundId,DeletionType.ASSET_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
+ updateTradeDateList.add(tradeDate);
|
|
|
+ }
|
|
|
+ if(updateTradeDateList.size() > 0){
|
|
|
+ List<DeletionInfoDO> batchUpdateDeletionInfoDO = new ArrayList<>();
|
|
|
+ for(String tradeDate : updateTradeDateList){
|
|
|
+ DeletionInfoDO deletionInfoDO = new DeletionInfoDO();
|
|
|
+ deletionInfoDO.setFundId(fundId);
|
|
|
+ deletionInfoDO.setDeletionType(DeletionType.ASSET_DELETION.getCode());
|
|
|
+ deletionInfoDO.setDeletionDate(tradeDate);
|
|
|
+ deletionInfoDO.setRemark(DeletionType.NO_DELETION.getInfo());
|
|
|
+ batchUpdateDeletionInfoDO.add(deletionInfoDO);
|
|
|
+ }
|
|
|
+ deletionInfoMapper.batchUpdateRemark(batchUpdateDeletionInfoDO);
|
|
|
}
|
|
|
continue;
|
|
|
}else{
|
|
|
if(StringUtil.isNotEmpty(assetDOS)){
|
|
|
+ List<String> deleteTradeDateList = new ArrayList<>();
|
|
|
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);
|
|
|
+ deleteTradeDateList.add(tradeDate);
|
|
|
}
|
|
|
+ deletionInfoMapper.deleteDeletionRemark(fundId,DeletionType.ASSET_DELETION.getCode(),deleteTradeDateList);
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -330,22 +378,25 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
if(tradeDateDO.getTradeDate().compareTo(DateUtils.parse(tradeDate,DateUtils.YYYY_MM_DD)) < 0){
|
|
|
continue;
|
|
|
}
|
|
|
- //写入缺失信息表
|
|
|
- saveDeletionInfoDO(fundId,tradeDate,DeletionType.ASSET_DELETION.getCode());
|
|
|
+ tradeDateList.add(tradeDate);
|
|
|
}
|
|
|
+ //写入缺失信息表
|
|
|
+ saveDeletionInfoDO(fundId,tradeDateList,DeletionType.ASSET_DELETION.getCode());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void navDeletion(String fundId,List<NavDO> navDOList, List<TradeDateDO> tradeDateDOList,FundReportFrequencyDO fundReportFrequencyDO) {
|
|
|
//将现有数据无效掉
|
|
|
deletionInfoMapper.deleteDeletion(fundId,DeletionType.NAV_DELETION.getCode());
|
|
|
+ List<String> tradeDateList = new ArrayList<>();
|
|
|
//只处理日月季频率
|
|
|
if(Frequency.DAY == Frequency.getFrequencyByCode(fundReportFrequencyDO.getNavFrequency())){
|
|
|
Map<String,List<NavDO>> navListMap = navDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getPriceDate(),DateUtils.YYYY_MM_DD)));
|
|
|
Map<String,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getTradeDate(),DateUtils.YYYY_MM_DD)));
|
|
|
+ List<String> updateTradeDateList = new ArrayList<>();
|
|
|
for(String tradeDate : tradeListMap.keySet()){
|
|
|
if(navListMap.containsKey(tradeDate)){
|
|
|
- deletionInfoMapper.updateRemark(fundId,DeletionType.NAV_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
+ updateTradeDateList.add(tradeDate);
|
|
|
continue;
|
|
|
}
|
|
|
if(tradeDateDOList.size() <= 3){
|
|
@@ -355,9 +406,22 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
if(tradeDateDO.getTradeDate().compareTo(DateUtils.parse(tradeDate,DateUtils.YYYY_MM_DD)) < 0){
|
|
|
continue;
|
|
|
}
|
|
|
- //写入缺失信息表
|
|
|
- saveDeletionInfoDO(fundId,tradeDate,DeletionType.NAV_DELETION.getCode());
|
|
|
+ tradeDateList.add(tradeDate);
|
|
|
+ }
|
|
|
+ if(updateTradeDateList.size() > 0){
|
|
|
+ List<DeletionInfoDO> batchUpdateDeletionInfoDO = new ArrayList<>();
|
|
|
+ for(String tradeDate : updateTradeDateList){
|
|
|
+ DeletionInfoDO deletionInfoDO = new DeletionInfoDO();
|
|
|
+ deletionInfoDO.setFundId(fundId);
|
|
|
+ deletionInfoDO.setDeletionType(DeletionType.NAV_DELETION.getCode());
|
|
|
+ deletionInfoDO.setDeletionDate(tradeDate);
|
|
|
+ deletionInfoDO.setRemark(DeletionType.NO_DELETION.getInfo());
|
|
|
+ batchUpdateDeletionInfoDO.add(deletionInfoDO);
|
|
|
+ }
|
|
|
+ deletionInfoMapper.batchUpdateRemark(batchUpdateDeletionInfoDO);
|
|
|
}
|
|
|
+ //写入缺失信息表
|
|
|
+ saveDeletionInfoDO(fundId,tradeDateList,DeletionType.NAV_DELETION.getCode());
|
|
|
}
|
|
|
if(Frequency.WEEK == Frequency.getFrequencyByCode(fundReportFrequencyDO.getNavFrequency())){
|
|
|
Map<String,List<NavDO>> navListMap = navDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getPriceDate(),DateUtils.YYYY_MM_DD)));
|
|
@@ -379,19 +443,34 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
for(Integer weekOfYear : tradeListMap.keySet()){
|
|
|
List<NavDO> navDOS = weekNavListMap.get(weekOfYear);
|
|
|
if(weekNavListMap.containsKey(weekOfYear)){
|
|
|
+ List<String> deleteTradeDateList = new ArrayList<>();
|
|
|
for(TradeDateDO tradeDateDO : tradeListMap.get(weekOfYear)){
|
|
|
String tradeDate = DateUtils.format(tradeDateDO.getTradeDate(),DateUtils.YYYY_MM_DD);
|
|
|
- deletionInfoMapper.updateRemark(fundId,DeletionType.NAV_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
+ deleteTradeDateList.add(tradeDate);
|
|
|
+ }
|
|
|
+ if(deleteTradeDateList.size() > 0){
|
|
|
+ List<DeletionInfoDO> batchUpdateDeletionInfoDO = new ArrayList<>();
|
|
|
+ for(String tradeDate : deleteTradeDateList){
|
|
|
+ DeletionInfoDO deletionInfoDO = new DeletionInfoDO();
|
|
|
+ deletionInfoDO.setFundId(fundId);
|
|
|
+ deletionInfoDO.setDeletionType(DeletionType.NAV_DELETION.getCode());
|
|
|
+ deletionInfoDO.setDeletionDate(tradeDate);
|
|
|
+ deletionInfoDO.setRemark(DeletionType.NO_DELETION.getInfo());
|
|
|
+ batchUpdateDeletionInfoDO.add(deletionInfoDO);
|
|
|
+ }
|
|
|
+ deletionInfoMapper.batchUpdateRemark(batchUpdateDeletionInfoDO);
|
|
|
}
|
|
|
continue;
|
|
|
}else{
|
|
|
//防止频率变更导致数据异常,需要把当前日期下所在的频率全部无效掉
|
|
|
if(StringUtil.isNotEmpty(navDOS)){
|
|
|
+ List<String> deleteTradeDateList = new ArrayList<>();
|
|
|
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);
|
|
|
+ deleteTradeDateList.add(tradeDate);
|
|
|
}
|
|
|
+ deletionInfoMapper.deleteDeletionRemark(fundId,DeletionType.NAV_DELETION.getCode(),deleteTradeDateList);
|
|
|
}
|
|
|
}
|
|
|
//不包含的话,默认取每周的最后一个交易日作为周净值日期
|
|
@@ -407,9 +486,10 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
if(tradeDateDO.getTradeDate().compareTo(DateUtils.parse(tradeDate,DateUtils.YYYY_MM_DD)) < 0){
|
|
|
continue;
|
|
|
}
|
|
|
- //写入缺失信息表
|
|
|
- saveDeletionInfoDO(fundId,tradeDate,DeletionType.NAV_DELETION.getCode());
|
|
|
+ tradeDateList.add(tradeDate);
|
|
|
}
|
|
|
+ //写入缺失信息表
|
|
|
+ saveDeletionInfoDO(fundId,tradeDateList,DeletionType.NAV_DELETION.getCode());
|
|
|
}
|
|
|
if(Frequency.MONTH == Frequency.getFrequencyByCode(fundReportFrequencyDO.getNavFrequency())){
|
|
|
Map<String,List<NavDO>> navListMap = navDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getPriceDate(),DateUtils.YYYY_MM_DD)));
|
|
@@ -436,18 +516,33 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
}
|
|
|
List<NavDO> navDOS = monthNavListMap.get(yearMonth);
|
|
|
if(monthNavListMap.containsKey(yearMonth)){
|
|
|
+ List<String> batchUpdateTradeList = new ArrayList<>();
|
|
|
for(TradeDateDO tradeDateDO : tradeListMap.get(yearMonth)){
|
|
|
String tradeDate = DateUtils.format(tradeDateDO.getTradeDate(),DateUtils.YYYY_MM_DD);
|
|
|
- deletionInfoMapper.updateRemark(fundId,DeletionType.NAV_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
+ batchUpdateTradeList.add(tradeDate);
|
|
|
+ }
|
|
|
+ if(batchUpdateTradeList.size() > 0){
|
|
|
+ List<DeletionInfoDO> batchUpdateDeletionInfoDO = new ArrayList<>();
|
|
|
+ for(String tradeDate : batchUpdateTradeList){
|
|
|
+ DeletionInfoDO deletionInfoDO = new DeletionInfoDO();
|
|
|
+ deletionInfoDO.setFundId(fundId);
|
|
|
+ deletionInfoDO.setDeletionType(DeletionType.NAV_DELETION.getCode());
|
|
|
+ deletionInfoDO.setDeletionDate(tradeDate);
|
|
|
+ deletionInfoDO.setRemark(DeletionType.NO_DELETION.getInfo());
|
|
|
+ batchUpdateDeletionInfoDO.add(deletionInfoDO);
|
|
|
+ }
|
|
|
+ deletionInfoMapper.batchUpdateRemark(batchUpdateDeletionInfoDO);
|
|
|
}
|
|
|
continue;
|
|
|
}else{
|
|
|
//防止频率变更导致数据异常,需要把当前日期下所在的频率全部无效掉
|
|
|
if(StringUtil.isNotEmpty(navDOS)){
|
|
|
+ List<String> deleteTradeDateList = new ArrayList<>();
|
|
|
for(NavDO navDO : navDOS){
|
|
|
String tradeDate = DateUtils.format(navDO.getPriceDate(),DateUtils.YYYY_MM_DD);
|
|
|
- deletionInfoMapper.deleteDeletionRemark(fundId,DeletionType.NAV_DELETION.getCode(),tradeDate);
|
|
|
+ deleteTradeDateList.add(tradeDate);
|
|
|
}
|
|
|
+ deletionInfoMapper.deleteDeletionRemark(fundId,DeletionType.NAV_DELETION.getCode(),deleteTradeDateList);
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -464,22 +559,25 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
if(tradeDateDO.getTradeDate().compareTo(DateUtils.parse(tradeDate,DateUtils.YYYY_MM_DD)) < 0){
|
|
|
continue;
|
|
|
}
|
|
|
- //写入缺失信息表
|
|
|
- saveDeletionInfoDO(fundId,tradeDate,DeletionType.NAV_DELETION.getCode());
|
|
|
+ tradeDateList.add(tradeDate);
|
|
|
}
|
|
|
+ //写入缺失信息表
|
|
|
+ saveDeletionInfoDO(fundId,tradeDateList,DeletionType.NAV_DELETION.getCode());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void valuationDeletion(String fundId,List<FundPositionDetailDO> fundPositionDetailDOList, List<TradeDateDO> tradeDateDOList,FundReportFrequencyDO fundReportFrequencyDO) {
|
|
|
//将现有数据无效掉
|
|
|
deletionInfoMapper.deleteDeletion(fundId,DeletionType.VALUATION_DELETION.getCode());
|
|
|
+ List<String> tradeDateList = new ArrayList<>();
|
|
|
//只处理日月季频率
|
|
|
if(Frequency.DAY == Frequency.getFrequencyByCode(fundReportFrequencyDO.getValuationFrequency())){
|
|
|
Map<String,List<FundPositionDetailDO>> valuationListMap = fundPositionDetailDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getValuationDate(),DateUtils.YYYY_MM_DD)));
|
|
|
Map<String,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getTradeDate(),DateUtils.YYYY_MM_DD)));
|
|
|
+ List<String> batchUpdateTrade = new ArrayList<>();
|
|
|
for(String tradeDate : tradeListMap.keySet()){
|
|
|
if(valuationListMap.containsKey(tradeDate)){
|
|
|
- deletionInfoMapper.updateRemark(fundId,DeletionType.VALUATION_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
+ batchUpdateTrade.add(tradeDate);
|
|
|
continue;
|
|
|
}
|
|
|
if(tradeDateDOList.size() <= 3){
|
|
@@ -489,9 +587,22 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
if(tradeDateDO.getTradeDate().compareTo(DateUtils.parse(tradeDate,DateUtils.YYYY_MM_DD)) < 0){
|
|
|
continue;
|
|
|
}
|
|
|
- //写入缺失信息表
|
|
|
- saveDeletionInfoDO(fundId,tradeDate,DeletionType.VALUATION_DELETION.getCode());
|
|
|
+ tradeDateList.add(tradeDate);
|
|
|
+ }
|
|
|
+ if(batchUpdateTrade.size() > 0){
|
|
|
+ List<DeletionInfoDO> batchUpdateDeletionInfoDO = new ArrayList<>();
|
|
|
+ for(String tradeDate : batchUpdateTrade){
|
|
|
+ DeletionInfoDO deletionInfoDO = new DeletionInfoDO();
|
|
|
+ deletionInfoDO.setFundId(fundId);
|
|
|
+ deletionInfoDO.setDeletionType(DeletionType.VALUATION_DELETION.getCode());
|
|
|
+ deletionInfoDO.setDeletionDate(tradeDate);
|
|
|
+ deletionInfoDO.setRemark(DeletionType.NO_DELETION.getInfo());
|
|
|
+ batchUpdateDeletionInfoDO.add(deletionInfoDO);
|
|
|
+ }
|
|
|
+ deletionInfoMapper.batchUpdateRemark(batchUpdateDeletionInfoDO);
|
|
|
}
|
|
|
+ //写入缺失信息表
|
|
|
+ saveDeletionInfoDO(fundId,tradeDateList,DeletionType.VALUATION_DELETION.getCode());
|
|
|
}
|
|
|
if(Frequency.WEEK == Frequency.getFrequencyByCode(fundReportFrequencyDO.getValuationFrequency())){
|
|
|
Map<String,List<FundPositionDetailDO>> valuationListMap = fundPositionDetailDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getValuationDate(),DateUtils.YYYY_MM_DD)));
|
|
@@ -513,19 +624,34 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
for(Integer weekOfYear : tradeListMap.keySet()){
|
|
|
List<FundPositionDetailDO> valuationDOS = weekNavListMap.get(weekOfYear);
|
|
|
if(weekNavListMap.containsKey(weekOfYear)){
|
|
|
+ List<String> batchUpdateTradeList = new ArrayList<>();
|
|
|
for(TradeDateDO tradeDateDO : tradeListMap.get(weekOfYear)){
|
|
|
String tradeDate = DateUtils.format(tradeDateDO.getTradeDate(),DateUtils.YYYY_MM_DD);
|
|
|
- deletionInfoMapper.updateRemark(fundId,DeletionType.VALUATION_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
+ batchUpdateTradeList.add(tradeDate);
|
|
|
+ }
|
|
|
+ if(batchUpdateTradeList.size() > 0){
|
|
|
+ List<DeletionInfoDO> batchUpdateDeletionInfoDO = new ArrayList<>();
|
|
|
+ for(String tradeDate : batchUpdateTradeList){
|
|
|
+ DeletionInfoDO deletionInfoDO = new DeletionInfoDO();
|
|
|
+ deletionInfoDO.setFundId(fundId);
|
|
|
+ deletionInfoDO.setDeletionType(DeletionType.VALUATION_DELETION.getCode());
|
|
|
+ deletionInfoDO.setDeletionDate(tradeDate);
|
|
|
+ deletionInfoDO.setRemark(DeletionType.NO_DELETION.getInfo());
|
|
|
+ batchUpdateDeletionInfoDO.add(deletionInfoDO);
|
|
|
+ }
|
|
|
+ deletionInfoMapper.batchUpdateRemark(batchUpdateDeletionInfoDO);
|
|
|
}
|
|
|
continue;
|
|
|
}else{
|
|
|
//防止频率变更导致数据异常,需要把当前日期下所在的频率全部无效掉
|
|
|
if(StringUtil.isNotEmpty(valuationDOS)){
|
|
|
+ List<String> deleteTradeDateList = new ArrayList<>();
|
|
|
for(int idx=0;idx < valuationDOS.size()-1 ; idx++){
|
|
|
FundPositionDetailDO valautionDO = valuationDOS.get(idx);
|
|
|
String tradeDate = DateUtils.format(valautionDO.getValuationDate(),DateUtils.YYYY_MM_DD);
|
|
|
- deletionInfoMapper.deleteDeletionRemark(fundId,DeletionType.VALUATION_DELETION.getCode(),tradeDate);
|
|
|
+ deleteTradeDateList.add(tradeDate);
|
|
|
}
|
|
|
+ deletionInfoMapper.deleteDeletionRemark(fundId,DeletionType.VALUATION_DELETION.getCode(),deleteTradeDateList);
|
|
|
}
|
|
|
}
|
|
|
//不包含的话,默认取每周的最后一个交易日作为周净值日期
|
|
@@ -541,9 +667,10 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
if(tradeDateDO.getTradeDate().compareTo(DateUtils.parse(tradeDate,DateUtils.YYYY_MM_DD)) < 0){
|
|
|
continue;
|
|
|
}
|
|
|
- //写入缺失信息表
|
|
|
- saveDeletionInfoDO(fundId,tradeDate,DeletionType.VALUATION_DELETION.getCode());
|
|
|
+ tradeDateList.add(tradeDate);
|
|
|
}
|
|
|
+ //写入缺失信息表
|
|
|
+ saveDeletionInfoDO(fundId,tradeDateList,DeletionType.VALUATION_DELETION.getCode());
|
|
|
}
|
|
|
if(Frequency.MONTH == Frequency.getFrequencyByCode(fundReportFrequencyDO.getValuationFrequency())){
|
|
|
Map<String,List<FundPositionDetailDO>> valuationListMap = fundPositionDetailDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getValuationDate(),DateUtils.YYYY_MM_DD)));
|
|
@@ -570,18 +697,33 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
}
|
|
|
List<FundPositionDetailDO> fundPositionDetailDOS = monthNavListMap.get(yearMonth);
|
|
|
if(monthNavListMap.containsKey(yearMonth)){
|
|
|
+ List<String> batchUpdateTradeList = new ArrayList<>();
|
|
|
for(TradeDateDO tradeDateDO : tradeListMap.get(yearMonth)){
|
|
|
String tradeDate = DateUtils.format(tradeDateDO.getTradeDate(),DateUtils.YYYY_MM_DD);
|
|
|
- deletionInfoMapper.updateRemark(fundId,DeletionType.VALUATION_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
|
|
|
+ batchUpdateTradeList.add(tradeDate);
|
|
|
+ }
|
|
|
+ if(batchUpdateTradeList.size() > 0){
|
|
|
+ List<DeletionInfoDO> batchUpdateDeletionInfoDO = new ArrayList<>();
|
|
|
+ for(String tradeDate : batchUpdateTradeList){
|
|
|
+ DeletionInfoDO deletionInfoDO = new DeletionInfoDO();
|
|
|
+ deletionInfoDO.setFundId(fundId);
|
|
|
+ deletionInfoDO.setDeletionType(DeletionType.VALUATION_DELETION.getCode());
|
|
|
+ deletionInfoDO.setDeletionDate(tradeDate);
|
|
|
+ deletionInfoDO.setRemark(DeletionType.NO_DELETION.getInfo());
|
|
|
+ batchUpdateDeletionInfoDO.add(deletionInfoDO);
|
|
|
+ }
|
|
|
+ deletionInfoMapper.batchUpdateRemark(batchUpdateDeletionInfoDO);
|
|
|
}
|
|
|
continue;
|
|
|
}else{
|
|
|
//防止频率变更导致数据异常,需要把当前日期下所在的频率全部无效掉
|
|
|
if(StringUtil.isNotEmpty(fundPositionDetailDOS)){
|
|
|
+ List<String> deleteTradeDateList = new ArrayList<>();
|
|
|
for(FundPositionDetailDO fundPositionDetailDO : fundPositionDetailDOS){
|
|
|
String tradeDate = DateUtils.format(fundPositionDetailDO.getValuationDate(),DateUtils.YYYY_MM_DD);
|
|
|
- deletionInfoMapper.deleteDeletionRemark(fundId,DeletionType.VALUATION_DELETION.getCode(),tradeDate);
|
|
|
+ deleteTradeDateList.add(tradeDate);
|
|
|
}
|
|
|
+ deletionInfoMapper.deleteDeletionRemark(fundId,DeletionType.VALUATION_DELETION.getCode(),deleteTradeDateList);
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -598,31 +740,48 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
if(tradeDateDO.getTradeDate().compareTo(DateUtils.parse(tradeDate,DateUtils.YYYY_MM_DD)) < 0){
|
|
|
continue;
|
|
|
}
|
|
|
- //写入缺失信息表
|
|
|
- saveDeletionInfoDO(fundId,tradeDate,DeletionType.VALUATION_DELETION.getCode());
|
|
|
+ tradeDateList.add(tradeDate);
|
|
|
}
|
|
|
+ //写入缺失信息表
|
|
|
+ saveDeletionInfoDO(fundId,tradeDateList,DeletionType.VALUATION_DELETION.getCode());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void saveDeletionInfoDO(String fundId, String tradeDate, Integer code) {
|
|
|
- if(tradeDate == null){
|
|
|
+ private void saveDeletionInfoDO(String fundId, List<String> tradeDateList, Integer code) {
|
|
|
+ if(tradeDateList.size() < 1){
|
|
|
return;
|
|
|
}
|
|
|
- DeletionInfoDO deletionInfoDO = new DeletionInfoDO();
|
|
|
- deletionInfoDO.setFundId(fundId);
|
|
|
- deletionInfoDO.setDeletionDate(tradeDate);
|
|
|
- deletionInfoDO.setDeletionType(code);
|
|
|
- DeletionInfoDO oldDeletionDO = deletionInfoMapper.getDeletionInfoDO(deletionInfoDO);
|
|
|
- if(StringUtil.isNull(oldDeletionDO)){
|
|
|
- deletionInfoDO.setIsvalid(1);
|
|
|
- deletionInfoDO.setIsSend(0);
|
|
|
- deletionInfoDO.setUpdateTime(DateUtils.getNowDate());
|
|
|
- deletionInfoDO.setCreateTime(DateUtils.getNowDate());
|
|
|
- deletionInfoMapper.saveDeletionInfoDO(deletionInfoDO);
|
|
|
- }else{
|
|
|
- oldDeletionDO.setIsvalid(1);
|
|
|
- oldDeletionDO.setUpdateTime(DateUtils.getNowDate());
|
|
|
- deletionInfoMapper.updateDeletionInfoDO(oldDeletionDO);
|
|
|
+ List<DeletionInfoDO> oldDeletionDOList = deletionInfoMapper.getDeletionInfoDO(fundId,code,tradeDateList);
|
|
|
+ if(oldDeletionDOList != null && oldDeletionDOList.size() > 0){
|
|
|
+ for(DeletionInfoDO oldDeletionDO : oldDeletionDOList){
|
|
|
+ oldDeletionDO.setIsvalid(1);
|
|
|
+ oldDeletionDO.setUpdateTime(DateUtils.getNowDate());
|
|
|
+ }
|
|
|
+ deletionInfoMapper.batchUpdateDeletionInfoDO(oldDeletionDOList);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<String> oldTradeDateList = oldDeletionDOList.stream().map(e -> e.getDeletionDate()).collect(Collectors.toList());
|
|
|
+ List<String> insertTradeDateList = new ArrayList<>();
|
|
|
+ for(String tradeDate : tradeDateList){
|
|
|
+ if(oldTradeDateList.contains(tradeDate)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ insertTradeDateList.add(tradeDate);
|
|
|
+ }
|
|
|
+ if(insertTradeDateList.size() > 0){
|
|
|
+ List<DeletionInfoDO> insertDeletionInfoDO = new ArrayList<>();
|
|
|
+ for(String tradeDate : insertTradeDateList){
|
|
|
+ DeletionInfoDO deletionInfoDO = new DeletionInfoDO();
|
|
|
+ deletionInfoDO.setFundId(fundId);
|
|
|
+ deletionInfoDO.setDeletionType(code);
|
|
|
+ deletionInfoDO.setDeletionDate(tradeDate);
|
|
|
+ deletionInfoDO.setIsvalid(1);
|
|
|
+ deletionInfoDO.setIsSend(0);
|
|
|
+ deletionInfoDO.setUpdateTime(DateUtils.getNowDate());
|
|
|
+ deletionInfoDO.setCreateTime(DateUtils.getNowDate());
|
|
|
+ insertDeletionInfoDO.add(deletionInfoDO);
|
|
|
+ }
|
|
|
+ deletionInfoMapper.batchSaveDeletionInfoDO(insertDeletionInfoDO);
|
|
|
}
|
|
|
}
|
|
|
}
|