|
@@ -2,6 +2,7 @@ package com.simuwang.manage.task;
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import com.simuwang.base.common.enums.DeletionType;
|
|
|
+import com.simuwang.base.common.enums.DistributeType;
|
|
|
import com.simuwang.base.common.enums.Frequency;
|
|
|
import com.simuwang.base.common.util.DateUtils;
|
|
|
import com.simuwang.base.common.util.StringUtil;
|
|
@@ -42,6 +43,9 @@ public class FundDeletionTask {
|
|
|
|
|
|
@Autowired
|
|
|
private DeletionInfoMapper deletionInfoMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DistributionMapper distributionMapper;
|
|
|
@Scheduled(cron = "0 0 5,12,20 * * ?")
|
|
|
public void computeDeletion(){
|
|
|
List<String> fundIdList = navMapper.getAllFundId();
|
|
@@ -62,6 +66,16 @@ public class FundDeletionTask {
|
|
|
List<TradeDateDO> tradeDateDOList = tradeDateMapper.selectTradeDate(inceptionDate,today);
|
|
|
navDeletion(fundId,navDOList,tradeDateDOList,fundReportFrequencyDO);
|
|
|
assetDeletion(fundId,assetDOList,tradeDateDOList,fundReportFrequencyDO);
|
|
|
+ distributionDeletion(fundId,navDOList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void distributionDeletion(String fundId, List<NavDO> navDOList) {
|
|
|
+ //查询是否存在拆分
|
|
|
+ List<DistributionDO> distributionDOS = distributionMapper.getDistributionByFundId(fundId, DistributeType.DIVIDENDS_SPLIT);
|
|
|
+ if(distributionDOS.size() > 0){
|
|
|
+ //存在拆分,不做分红缺失计算,同时吧以往的数据置为无效
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -71,6 +85,7 @@ public class FundDeletionTask {
|
|
|
Map<String,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getTradeDate(),DateUtils.YYYY_MM_DD)));
|
|
|
for(String tradeDate : tradeListMap.keySet()){
|
|
|
if(navListMap.containsKey(tradeDate)){
|
|
|
+ deletionInfoMapper.updateRemark(fundId,DeletionType.ASSET_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo());
|
|
|
continue;
|
|
|
}
|
|
|
//写入缺失信息表
|
|
@@ -84,9 +99,9 @@ public class FundDeletionTask {
|
|
|
for(String priceDate : navListMap.keySet()){
|
|
|
Integer weekOfYear = DateUtil.weekOfYear(DateUtils.parse(priceDate,DateUtils.YYYY_MM_DD));
|
|
|
if(weekNavListMap.containsKey(weekOfYear)){
|
|
|
- List<AssetDO> navDOS = weekNavListMap.get(weekOfYear);
|
|
|
- navDOS.addAll(navListMap.get(priceDate));
|
|
|
- weekNavListMap.put(weekOfYear,navDOS);
|
|
|
+ List<AssetDO> assetDOS = weekNavListMap.get(weekOfYear);
|
|
|
+ assetDOS.addAll(navListMap.get(priceDate));
|
|
|
+ weekNavListMap.put(weekOfYear,assetDOS);
|
|
|
}else{
|
|
|
List<AssetDO> navDOS = new ArrayList<>();
|
|
|
navDOS.addAll(navListMap.get(priceDate));
|
|
@@ -96,6 +111,9 @@ public class FundDeletionTask {
|
|
|
Map<Integer,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> e.getWeekOfYear()));
|
|
|
for(Integer weekOfYear : tradeListMap.keySet()){
|
|
|
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());
|
|
|
continue;
|
|
|
}
|
|
|
//不包含的话,默认取每周的最后一个交易日作为周净值日期
|
|
@@ -127,6 +145,9 @@ public class FundDeletionTask {
|
|
|
Map<String,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> e.getYearmonth()));
|
|
|
for(String yearMonth : tradeListMap.keySet()){
|
|
|
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());
|
|
|
continue;
|
|
|
}
|
|
|
//不包含的话,默认取每周的最后一个交易日作为周净值日期
|
|
@@ -148,6 +169,7 @@ public class FundDeletionTask {
|
|
|
Map<String,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> DateUtils.format(e.getTradeDate(),DateUtils.YYYY_MM_DD)));
|
|
|
for(String tradeDate : tradeListMap.keySet()){
|
|
|
if(navListMap.containsKey(tradeDate)){
|
|
|
+ deletionInfoMapper.updateRemark(fundId,DeletionType.NAV_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo());
|
|
|
continue;
|
|
|
}
|
|
|
//写入缺失信息表
|
|
@@ -173,6 +195,9 @@ public class FundDeletionTask {
|
|
|
Map<Integer,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> e.getWeekOfYear()));
|
|
|
for(Integer weekOfYear : tradeListMap.keySet()){
|
|
|
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());
|
|
|
continue;
|
|
|
}
|
|
|
//不包含的话,默认取每周的最后一个交易日作为周净值日期
|
|
@@ -204,6 +229,9 @@ public class FundDeletionTask {
|
|
|
Map<String,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> e.getYearmonth()));
|
|
|
for(String yearMonth : tradeListMap.keySet()){
|
|
|
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());
|
|
|
continue;
|
|
|
}
|
|
|
//不包含的话,默认取每周的最后一个交易日作为周净值日期
|