|
@@ -59,19 +59,43 @@ public class DataSynchronizationTask {
|
|
|
Long maxId = idMap.get("maxId");
|
|
|
long times = (maxId-minId)%maxNum==0?(maxId-minId)/maxNum:(maxId-minId)/maxNum+1;
|
|
|
long startIdx = minId;
|
|
|
+ List<String> fundPriceDateList = new ArrayList<>();
|
|
|
for(int idx=1;idx <= times;idx++){
|
|
|
long endIdx = startIdx+idx*maxNum;
|
|
|
if(endIdx >= maxId){
|
|
|
endIdx = maxId;
|
|
|
}
|
|
|
List<NavDO> navDOList = navMapper.selectNavListById(minId,maxId,startDate, endDate);
|
|
|
- saveSrcNavList(navDOList);
|
|
|
+ List<NavDO> srcNavDOList = new ArrayList<>();
|
|
|
+ //确保每个基金的每个交易日只有一条数据
|
|
|
+ for(NavDO navDo : navDOList){
|
|
|
+ String fundPriceDate = navDo.getFundId()+DateUtils.format(navDo.getPriceDate(),DateUtils.YYYY_MM_DD);
|
|
|
+ if(fundPriceDateList.contains(fundPriceDate)){
|
|
|
+ continue;
|
|
|
+ }else{
|
|
|
+ fundPriceDateList.add(fundPriceDate);
|
|
|
+ }
|
|
|
+ srcNavDOList.add(navDo);
|
|
|
+ }
|
|
|
+ saveSrcNavList(srcNavDOList);
|
|
|
startIdx = endIdx;
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
|
List<NavDO> navDOList = navMapper.selectNavListByTime(startDate, endDate);
|
|
|
- saveSrcNavList(navDOList);
|
|
|
+ List<NavDO> srcNavDOList = new ArrayList<>();
|
|
|
+ //确保每个基金的每个交易日只有一条数据同步到下游
|
|
|
+ List<String> fundPriceDateList = new ArrayList<>();
|
|
|
+ for(NavDO navDo : navDOList){
|
|
|
+ String fundPriceDate = navDo.getFundId()+DateUtils.format(navDo.getPriceDate(),DateUtils.YYYY_MM_DD);
|
|
|
+ if(fundPriceDateList.contains(fundPriceDate)){
|
|
|
+ continue;
|
|
|
+ }else{
|
|
|
+ fundPriceDateList.add(fundPriceDate);
|
|
|
+ }
|
|
|
+ srcNavDOList.add(navDo);
|
|
|
+ }
|
|
|
+ saveSrcNavList(srcNavDOList);
|
|
|
//更新分红
|
|
|
List<DistributionDO> distributionDOList = distributionMapper.selectDistributeListByTime(startDate, endDate);
|
|
|
saveDistribute(distributionDOList);
|
|
@@ -81,7 +105,15 @@ public class DataSynchronizationTask {
|
|
|
|
|
|
private void saveDistribute(List<DistributionDO> distributionDOList) {
|
|
|
List<CoreDistributionDO> coreDistributionDOList = new ArrayList<>();
|
|
|
+ //确保每个基金的每个分红日只有一条数据同步到下游
|
|
|
+ List<String> fundDistributionDateList = new ArrayList<>();
|
|
|
for(DistributionDO distribution : distributionDOList){
|
|
|
+ String fundDistributionDate = distribution.getFundId()+DateUtils.format(distribution.getDistributeDate(),DateUtils.YYYY_MM_DD);
|
|
|
+ if(fundDistributionDate.contains(fundDistributionDate)){
|
|
|
+ continue;
|
|
|
+ }else{
|
|
|
+ fundDistributionDateList.add(fundDistributionDate);
|
|
|
+ }
|
|
|
CoreDistributionDO coreDistributionDO = new CoreDistributionDO();
|
|
|
coreDistributionDO.setDistribution(distribution.getDistribution());
|
|
|
coreDistributionDO.setDistributeDate(distribution.getDistributeDate());
|
|
@@ -131,7 +163,6 @@ public class DataSynchronizationTask {
|
|
|
List<SrcNavDO> srcNavDOList = new ArrayList<>();
|
|
|
for (NavDO navDO : navDOList) {
|
|
|
SrcNavDO srcNavDO = new SrcNavDO();
|
|
|
-// srcNavDO.setId(navDO.getId());
|
|
|
srcNavDO.setPriceDate(navDO.getPriceDate());
|
|
|
srcNavDO.setFundId(navDO.getFundId());
|
|
|
srcNavDO.setNav(navDO.getNav());
|