Parcourir la source

fix: 数据缺失计算修复

chenjianhua il y a 7 mois
Parent
commit
f2812a3758

+ 4 - 0
service-base/src/main/java/com/simuwang/base/mapper/DeletionInfoMapper.java

@@ -48,4 +48,8 @@ public interface DeletionInfoMapper {
     void updateSendStatusByFundId(@Param("fundIdList")List<String> fundIdList);
 
     void deleteDeletionRemark(@Param("fundId")String fundId, @Param("deletionType")Integer deletionType, @Param("tradeDate")String tradeDate);
+
+    void deleteDistributeDeletion(@Param("fundId")String fundId, @Param("deletionType")Integer deletionType);
+
+    void updateDeletionInfoDO(DeletionInfoDO oldDeletionDO);
 }

+ 8 - 4
service-base/src/main/resources/mapper/DeletionInfoMapper.xml

@@ -40,7 +40,7 @@
         </foreach>
     </update>
     <update id="updateRemark">
-        update PPW_EMAIL.deletion_info set remark=#{remark},updaterid=#{updaterId} where isvalid=1
+        update PPW_EMAIL.deletion_info set remark=#{remark},updaterid=#{updaterId} where isvalid=1 and remark is null
         <if test="fundId != null and fundId !=''">
             and fund_id=#{fundId}
         </if>
@@ -56,7 +56,9 @@
         <if test="tradeDate != null and tradeDate !=''">
             and deletion_date=#{tradeDate}
         </if>
-
+    </delete>
+    <delete id="deleteDistributeDeletion">
+        update PPW_EMAIL.deletion_info  set isvalid=0,updatetime=sysdate() where isvalid=1 and fund_id=#{fundId} and deletion_type=#{deletionType} and remark is null
     </delete>
     <select id="searchDeletionList" resultMap="BaseResultMap"
             parameterType="com.simuwang.base.pojo.dto.query.DeletionPageQuery">
@@ -220,8 +222,7 @@
     <select id="getDeletionInfoDO" resultType="com.simuwang.base.pojo.dos.DeletionInfoDO"
             parameterType="com.simuwang.base.pojo.dos.DeletionInfoDO">
         select id,fund_id,deletion_type,deletion_date,remark,isvalid,creatorid,updaterid,createtime,updatetime
-        from PPW_EMAIL.deletion_info where isvalid=1
-        and fund_id=#{fundId} and deletion_date=#{deletionDate} and deletion_type=#{deletionType}
+        from PPW_EMAIL.deletion_info where fund_id=#{fundId} and deletion_date=#{deletionDate} and deletion_type=#{deletionType} limit 1
     </select>
 
     <resultMap id="BaseEmailMap" type="com.simuwang.base.pojo.dos.EmailDeletionInfoDO">
@@ -252,5 +253,8 @@
             #{fundId}
         </foreach>
     </update>
+    <update id="updateDeletionInfoDO">
+        update PPW_EMAIL.deletion_info d set isvalid=1,updatetime=sysdate() where id=#{id}
+    </update>
 
 </mapper>

+ 18 - 3
service-manage/src/main/java/com/simuwang/manage/service/impl/DeletionServiceImpl.java

@@ -163,7 +163,7 @@ public class DeletionServiceImpl implements DeletionService {
             return;
         }
         //将现有数据无效掉
-        deletionInfoMapper.deleteDeletionRemark(fundId,DeletionType.DISTRIBUTION_DELETION.getCode(),null);
+        deletionInfoMapper.deleteDistributeDeletion(fundId,DeletionType.DISTRIBUTION_DELETION.getCode());
         //查询是否存在拆分
         List<DistributionDO> distributionDOS = distributionMapper.getDistributionByFundId(fundId, DistributeType.DIVIDENDS_SPLIT);
         if(distributionDOS.size() > 0){
@@ -204,6 +204,8 @@ public class DeletionServiceImpl implements DeletionService {
     }
 
     private void assetDeletion(String fundId, List<AssetDO> assetDOList, List<TradeDateDO> tradeDateDOList, FundReportFrequencyDO fundReportFrequencyDO) {
+        //将现有数据无效掉
+        deletionInfoMapper.deleteDistributeDeletion(fundId,DeletionType.ASSET_DELETION.getCode());
         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)));
@@ -245,7 +247,7 @@ public class DeletionServiceImpl implements DeletionService {
                 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);
+                        deletionInfoMapper.updateRemark(fundId,DeletionType.ASSET_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
                     }
                     continue;
                 }else{
@@ -303,7 +305,7 @@ public class DeletionServiceImpl implements DeletionService {
                 if(monthNavListMap.containsKey(yearMonth)){
                     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);
+                        deletionInfoMapper.updateRemark(fundId,DeletionType.ASSET_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
                     }
                     continue;
                 }else{
@@ -336,6 +338,8 @@ public class DeletionServiceImpl implements DeletionService {
     }
 
     private void navDeletion(String fundId,List<NavDO> navDOList, List<TradeDateDO> tradeDateDOList,FundReportFrequencyDO fundReportFrequencyDO) {
+        //将现有数据无效掉
+        deletionInfoMapper.deleteDistributeDeletion(fundId,DeletionType.NAV_DELETION.getCode());
         //只处理日月季频率
         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)));
@@ -345,6 +349,13 @@ public class DeletionServiceImpl implements DeletionService {
                     deletionInfoMapper.updateRemark(fundId,DeletionType.NAV_DELETION.getCode(),tradeDate,DeletionType.NO_DELETION.getInfo(),null);
                     continue;
                 }
+                if(tradeDateDOList.size() <= 3){
+                    continue;
+                }
+                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());
             }
@@ -475,6 +486,10 @@ public class DeletionServiceImpl implements DeletionService {
             deletionInfoDO.setUpdateTime(DateUtils.getNowDate());
             deletionInfoDO.setCreateTime(DateUtils.getNowDate());
             deletionInfoMapper.saveDeletionInfoDO(deletionInfoDO);
+        }else{
+            oldDeletionDO.setIsvalid(1);
+            oldDeletionDO.setUpdateTime(DateUtils.getNowDate());
+            deletionInfoMapper.updateDeletionInfoDO(oldDeletionDO);
         }
     }
 }

+ 4 - 1
service-manage/src/main/java/com/simuwang/manage/task/FundDeletionTask.java

@@ -33,10 +33,13 @@ public class FundDeletionTask {
     private NavMapper navMapper;
     @Autowired
     private DeletionService deletionService;
-    @Scheduled(cron = "0 0 5,18,19 * * ?")
+    @Scheduled(cron = "0 36 5,19,19 * * ?")
     public void computeDeletion(){
         List<String> fundIdList = navMapper.getAllFundId();
         for(String fundId : fundIdList){
+            if(!fundId.equals("HF00002FDW")){
+                continue;
+            }
             DeletionDownParam deletionDownParam = new DeletionDownParam();
             deletionDownParam.setFundId(fundId);
             deletionService.computeDeletion(deletionDownParam);