Преглед изворни кода

fix: 缺失计算代码优化

chenjianhua пре 7 месеци
родитељ
комит
4078a1b847

+ 1 - 0
service-base/src/main/resources/mapper/daq/DistributionMapper.xml

@@ -153,5 +153,6 @@
         <if test="startDate != null and startDate !=''">
             and updatetime >= #{startDate}
         </if>
+        order by updatetime desc
     </select>
 </mapper>

+ 2 - 2
service-base/src/main/resources/mapper/daq/NavMapper.xml

@@ -114,7 +114,7 @@
         <if test="startDate != null and startDate !=''">
             and updatetime >= #{startDate}
         </if>
-        order by id
+        order by updatetime desc
     </select>
     <select id="selectMaxMinId" resultType="java.util.Map">
         select max(id) as maxId,min(id) as minId from PPW_EMAIL.nav where updatetime <![CDATA[ <= ]]> #{endDate}
@@ -129,7 +129,7 @@
         <if test="startDate != null and startDate !=''">
             and updatetime >= #{startDate}
         </if>
-        order by id
+        order by updatetime desc
     </select>
 
 

+ 34 - 3
service-manage/src/main/java/com/simuwang/manage/task/DataSynchronizationTask.java

@@ -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());