Bläddra i källkod

feat:增加提供根据别名表直接更新nav和asset接口日志

mozuwen 1 månad sedan
förälder
incheckning
cd376beea3

+ 18 - 0
service-base/src/main/java/com/simuwang/base/config/ThreadPoolConfig.java

@@ -49,4 +49,22 @@ public class ThreadPoolConfig {
         taskExecutor.initialize();
         return taskExecutor;
     }
+
+    @Bean("asyncUpdateExecutor")
+    public ThreadPoolTaskExecutor asyncUpdateExecutor() {
+        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+        taskExecutor.setCorePoolSize(2);
+        taskExecutor.setMaxPoolSize(5);
+        taskExecutor.setQueueCapacity(10000);
+        taskExecutor.setKeepAliveSeconds(60);
+        taskExecutor.setThreadNamePrefix("asyncUpdateExecutor--");
+        taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
+        taskExecutor.setAwaitTerminationSeconds(60);
+
+        // 修改拒绝策略为使用当前线程执行
+        taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        // 初始化线程池
+        taskExecutor.initialize();
+        return taskExecutor;
+    }
 }

+ 27 - 15
service-manage/src/main/java/com/simuwang/manage/service/impl/FundAliasServiceImpl.java

@@ -19,6 +19,8 @@ import com.simuwang.shiro.utils.UserUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -63,6 +65,10 @@ public class FundAliasServiceImpl implements FundAliasService {
     @Autowired
     private AssetMapper assetMapper;
 
+    @Autowired
+    @Qualifier("asyncUpdateExecutor")
+    private ThreadPoolTaskExecutor asyncUpdateExecutor;
+
     @Override
     public MybatisPage<FundAliasVO> searchFundAlias(FundAliasPageQuery fundAliasPageQuery) {
         List<FundAliasDO> fundAliasDOList = fundAliasMapper.searchFundAlias(fundAliasPageQuery);
@@ -133,19 +139,21 @@ public class FundAliasServiceImpl implements FundAliasService {
         }
         // 查询基金名称和备案编码对应的邮件净值表email_fund_nav(异常情况为未匹配基金ID && is_stored=0未入库)
         for (FundAliasDO fundAliasDO : fundAliasDOList) {
-            String fundId = fundAliasDO.getTargetFundId();
-            String fundName = fundAliasDO.getSourceFundName();
-            String registerNumber = fundAliasDO.getSourceRegisterNumber();
-            try {
-                long startTime = System.currentTimeMillis();
-                // 1.更新净值nav
-                updateFundNav(fundId, fundName, registerNumber);
-                // 2.更新资产净值asset
-                updateFundAsset(fundId, fundName, registerNumber);
-                log.info("更新基金nav和asset完成 -> fundId:{}, cost:{}ms", fundId, (System.currentTimeMillis()-startTime));
-            } catch (Exception e) {
-                log.error("更新基金nav和asset异常 fundId:{}, fundName:{}, registerNumber:{} -> 堆栈信息:{}", fundId, fundName, registerNumber, ExceptionUtil.stacktraceToString(e));
-            }
+            asyncUpdateExecutor.execute(() -> {
+                String fundId = fundAliasDO.getTargetFundId();
+                String fundName = fundAliasDO.getSourceFundName();
+                String registerNumber = fundAliasDO.getSourceRegisterNumber();
+                try {
+                    long startTime = System.currentTimeMillis();
+                    // 1.更新净值nav
+                    updateFundNav(fundId, fundName, registerNumber);
+                    // 2.更新资产净值asset
+                    updateFundAsset(fundId, fundName, registerNumber);
+                    log.info("更新基金nav和asset完成 -> fundId:{}, cost:{}ms", fundId, (System.currentTimeMillis() - startTime));
+                } catch (Exception e) {
+                    log.error("更新基金nav和asset异常 fundId:{}, fundName:{}, registerNumber:{} -> 堆栈信息:{}", fundId, fundName, registerNumber, ExceptionUtil.stacktraceToString(e));
+                }
+            });
         }
     }
 
@@ -173,11 +181,15 @@ public class FundAliasServiceImpl implements FundAliasService {
         }).toList();
 
         if (CollUtil.isNotEmpty(assetDOList)) {
+            log.info("基金Id:{}, 更新的规模数据:{}", fundId, assetDOList);
             assetMapper.batchInsert(assetDOList);
         }
 
         List<Integer> emailFundAssetIdList = emailFundAssetDOList.stream().map(EmailFundAssetDO::getId).toList();
-        emailFundAssetMapper.updateFundIdByIds(fundId, emailFundAssetIdList);
+        if (CollUtil.isNotEmpty(emailFundAssetIdList)) {
+            log.info("基金Id:{}, 更新email_fund_asset的字段id:{}", fundId, emailFundAssetIdList);
+            emailFundAssetMapper.updateFundIdByIds(fundId, emailFundAssetIdList);
+        }
     }
 
     private void updateFundNav(String fundId, String fundName, String registerNumber) {
@@ -207,7 +219,7 @@ public class FundAliasServiceImpl implements FundAliasService {
             navMapper.batchInsert(navDOList);
         }
         List<Integer> emailFundNavIdList = emailFundNavDOList.stream().map(EmailFundNavDO::getId).toList();
-       log.info("基金Id:{}, 更新email_fund_nav的fund_id字段id:{}", fundId, emailFundNavIdList);
+        log.info("基金Id:{}, 更新email_fund_nav的字段id:{}", fundId, emailFundNavIdList);
 
         if (CollUtil.isNotEmpty(emailFundNavIdList)) {
             emailFundNavMapper.updateFundIdByIds(fundId, emailFundNavIdList);