|
@@ -1,6 +1,8 @@
|
|
|
package com.simuwang.manage.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
+import com.simuwang.base.common.conts.DateConst;
|
|
|
import com.simuwang.base.common.enums.DeletionType;
|
|
|
import com.simuwang.base.common.enums.DistributeType;
|
|
|
import com.simuwang.base.common.enums.Frequency;
|
|
@@ -141,8 +143,10 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
return;
|
|
|
}
|
|
|
List<NavDO> navDOList = navMapper.selectNavByFundId(fundId);
|
|
|
- List<AssetDO> assetDOList = assetMapper.selectAssetByFundId(fundId);
|
|
|
- List<FundPositionDetailDO> fundPositionDetailDOList = fundPositionDetailMapper.fundPositionDetailByFundId(fundId);
|
|
|
+// List<AssetDO> assetDOList = assetMapper.selectAssetByFundId(fundId);
|
|
|
+ List<AssetDO> assetDOList = CollUtil.newArrayList();
|
|
|
+ //List<FundPositionDetailDO> fundPositionDetailDOList = fundPositionDetailMapper.fundPositionDetailByFundId(fundId);
|
|
|
+ List<FundPositionDetailDO> fundPositionDetailDOList = CollUtil.newArrayList();
|
|
|
//查询成立日到今天为止的交易日集合
|
|
|
List<TradeDateDO> tradeDateDOList = tradeDateMapper.selectTradeDate(inceptionDate,today);
|
|
|
if(deletionDownParam.getDeletionType() != null && deletionDownParam.getDeletionType().equals(DeletionType.NAV_DELETION.getCode())){
|
|
@@ -162,6 +166,15 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void computeDeletionNew(String fundId,List<TradeDateDO> tradeDateDOList) {
|
|
|
+ // 净值报送频率为:周频
|
|
|
+ FundReportFrequencyDO fundReportFrequencyDO = new FundReportFrequencyDO();
|
|
|
+ fundReportFrequencyDO.setNavFrequency(2);
|
|
|
+ List<NavDO> navDOList = navMapper.selectNavByFundId(fundId);
|
|
|
+ navDeletion(fundId, navDOList, tradeDateDOList, fundReportFrequencyDO);
|
|
|
+ }
|
|
|
+
|
|
|
private void distributionDeletion(String fundId, List<NavDO> navDOList) {
|
|
|
if(navDOList.size() < 1){
|
|
|
return;
|
|
@@ -364,57 +377,63 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
saveDeletionInfoDO(fundId,tradeDate,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)));
|
|
|
- TreeMap<Integer,List<NavDO>> weekNavListMap = new TreeMap<>();
|
|
|
+ List<String> deletionTradeDateList = CollUtil.newArrayList();
|
|
|
+ List<String> tradeDateList = CollUtil.newArrayList();
|
|
|
+ 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)));
|
|
|
+ TreeMap<Integer, List<NavDO>> weekNavListMap = new TreeMap<>();
|
|
|
//按周数整合
|
|
|
- for(String priceDate : navListMap.keySet()){
|
|
|
- Integer weekOfYear = Integer.parseInt(priceDate.substring(0,4)+DateUtil.weekOfYear(DateUtils.parse(priceDate,DateUtils.YYYY_MM_DD)));;
|
|
|
- if(weekNavListMap.containsKey(weekOfYear)){
|
|
|
+ for (String priceDate : navListMap.keySet()) {
|
|
|
+ Integer weekOfYear = Integer.parseInt(priceDate.substring(0, 4) + DateUtil.weekOfYear(DateUtils.parse(priceDate, DateUtils.YYYY_MM_DD)));
|
|
|
+ if (weekNavListMap.containsKey(weekOfYear)) {
|
|
|
List<NavDO> navDOS = weekNavListMap.get(weekOfYear);
|
|
|
navDOS.addAll(navListMap.get(priceDate));
|
|
|
- weekNavListMap.put(weekOfYear,navDOS);
|
|
|
- }else{
|
|
|
+ weekNavListMap.put(weekOfYear, navDOS);
|
|
|
+ } else {
|
|
|
List<NavDO> navDOS = new ArrayList<>();
|
|
|
navDOS.addAll(navListMap.get(priceDate));
|
|
|
- weekNavListMap.put(weekOfYear,navDOS);
|
|
|
+ weekNavListMap.put(weekOfYear, navDOS);
|
|
|
}
|
|
|
}
|
|
|
- Map<Integer,List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> e.getYearWeek()));
|
|
|
- for(Integer weekOfYear : tradeListMap.keySet()){
|
|
|
+ Map<Integer, List<TradeDateDO>> tradeListMap = tradeDateDOList.stream().collect(Collectors.groupingBy(e -> e.getYearWeek()));
|
|
|
+ for (Integer weekOfYear : tradeListMap.keySet()) {
|
|
|
List<NavDO> navDOS = weekNavListMap.get(weekOfYear);
|
|
|
- if(weekNavListMap.containsKey(weekOfYear)){
|
|
|
- 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);
|
|
|
+ if (weekNavListMap.containsKey(weekOfYear)) {
|
|
|
+ List<TradeDateDO> dateDOList = tradeListMap.get(weekOfYear);
|
|
|
+ if(CollUtil.isNotEmpty(dateDOList)){
|
|
|
+ tradeDateList.addAll(dateDOList.stream().map(e->DateUtil.format(e.getTradeDate(), DateConst.YYYY_MM_DD)).toList());
|
|
|
}
|
|
|
continue;
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
//防止频率变更导致数据异常,需要把当前日期下所在的频率全部无效掉
|
|
|
- if(StringUtil.isNotEmpty(navDOS)){
|
|
|
- for(int idx=0;idx < navDOS.size()-1 ; idx++){
|
|
|
+ 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);
|
|
|
+ String tradeDate = DateUtils.format(navDO.getPriceDate(), DateUtils.YYYY_MM_DD);
|
|
|
+ deletionInfoMapper.deleteDeletionRemark(fundId, DeletionType.NAV_DELETION.getCode(), tradeDate);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//不包含的话,默认取每周的最后一个交易日作为周净值日期
|
|
|
List<TradeDateDO> tradeDateDOS = tradeListMap.get(weekOfYear);
|
|
|
String tradeDate = null;
|
|
|
- if(tradeDateDOS.size() > 0){
|
|
|
- tradeDate = DateUtils.format(tradeDateDOS.get(tradeDateDOS.size()-1).getTradeDate(),DateUtils.YYYY_MM_DD);
|
|
|
+ if (tradeDateDOS.size() > 0) {
|
|
|
+ tradeDate = DateUtils.format(tradeDateDOS.get(tradeDateDOS.size() - 1).getTradeDate(), DateUtils.YYYY_MM_DD);
|
|
|
}
|
|
|
- if(tradeDateDOList.size() <= 3){
|
|
|
+ if (tradeDateDOList.size() <= 3) {
|
|
|
continue;
|
|
|
}
|
|
|
- TradeDateDO tradeDateDO = tradeDateDOList.get(tradeDateDOList.size()-3);
|
|
|
- if(tradeDateDO.getTradeDate().compareTo(DateUtils.parse(tradeDate,DateUtils.YYYY_MM_DD)) < 0){
|
|
|
+ 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());
|
|
|
+ deletionTradeDateList.add(tradeDate);
|
|
|
+ }
|
|
|
+ if (CollUtil.isNotEmpty(tradeDateList)) {
|
|
|
+ deletionInfoMapper.deleteByDate(fundId, DeletionType.NAV_DELETION.getCode(), tradeDateList);
|
|
|
}
|
|
|
+ batchSaveDeletionInfoDO(fundId, deletionTradeDateList, 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)));
|
|
@@ -475,6 +494,44 @@ public class DeletionServiceImpl implements DeletionService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void batchSaveDeletionInfoDO(String fundId, List<String> tradeDateList, Integer code) {
|
|
|
+ if (tradeDateList.size() < 1) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<DeletionInfoDO> oldDeletionDOList = deletionInfoMapper.getDeletionInfo(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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void valuationDeletion(String fundId,List<FundPositionDetailDO> fundPositionDetailDOList, List<TradeDateDO> tradeDateDOList,FundReportFrequencyDO fundReportFrequencyDO) {
|
|
|
//将现有数据无效掉
|
|
|
deletionInfoMapper.deleteDeletion(fundId,DeletionType.VALUATION_DELETION.getCode());
|