Browse Source

星级回传功能优化
update: 调整助贷星级数据拉取周期(从一天调整为七天)

linsong 3 weeks ago
parent
commit
1db5e6586b

+ 2 - 0
src/main/java/com/tiangua/star/Star2Application.java

@@ -2,8 +2,10 @@ package com.tiangua.star;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableAsync;
 
 @SpringBootApplication
+@EnableAsync(proxyTargetClass =true)
 public class Star2Application {
 
     public static void main(String[] args) {

+ 42 - 0
src/main/java/com/tiangua/star/config/StarThreadPool.java

@@ -0,0 +1,42 @@
+package com.tiangua.star.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * @author linsong
+ */
+@Configuration
+@EnableAsync
+public class StarThreadPool {
+
+    /** 线程池维护线程的最少数量 */
+    private static final int CORE_POOL_SIZE = 20;
+    /** 线程池维护线程的最大数量 */
+    private static final int MAX_POOL_SIZE = 50;
+    /** 缓存队列 */
+    private static final int QUEUE_CAPACITY = 50;
+    /** 允许的空闲时间 */
+    private static final int KEEP_ALIVE = 60;
+
+    @Bean(name = "starExecutor")
+    public Executor starExecutor() {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        executor.setCorePoolSize(CORE_POOL_SIZE);
+        executor.setMaxPoolSize(MAX_POOL_SIZE);
+        executor.setQueueCapacity(QUEUE_CAPACITY);
+        executor.setThreadNamePrefix("starExecutor-");
+        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
+        // CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行
+        // 对拒绝task的处理策略
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        executor.setKeepAliveSeconds(KEEP_ALIVE);
+        executor.initialize();
+        return executor;
+    }
+}

+ 1 - 1
src/main/java/com/tiangua/star/controller/ThirdCallBackController.java

@@ -34,7 +34,7 @@ public class ThirdCallBackController {
         log.info("thirdGainStarData get begin map{}",map);
         List<ThirdStarDto> data = map.get("data");
         if (CollectionUtils.isEmpty(data)) {
-            log.info("md5GainStarData 解析回传数据为null");
+            log.info("thirdGainStarData 解析回传数据为null");
             return MessageResult.ok();
         }
         callBackService.thirdProcessInstitutionData(data);

+ 28 - 21
src/main/java/com/tiangua/star/service/impl/XinLuDataProcessor.java

@@ -15,6 +15,8 @@ import org.apache.http.client.utils.URIBuilder;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.util.EntityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.SpringApplication;
 import org.springframework.context.ConfigurableApplicationContext;
@@ -27,10 +29,8 @@ import java.net.URISyntaxException;
 import java.nio.charset.StandardCharsets;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.concurrent.Executor;
 import java.util.stream.Collectors;
 
 @Service
@@ -44,6 +44,10 @@ public class XinLuDataProcessor implements XinLuService {
     @Value("${xinlu.callback.url}")
     private String url;
 
+    @Autowired
+    @Qualifier("starExecutor")
+    private Executor executor;
+
 
     @PostConstruct
     public void init() {
@@ -57,7 +61,7 @@ public class XinLuDataProcessor implements XinLuService {
      */
     @Override
     public void processInstitutionData(List<JSONObject> jsonObjects) {
-        jsonObjects.forEach(config -> {
+        jsonObjects.forEach(config -> executor.execute(() -> {
             Integer institutionId = config.getInteger("institutionId");
             String busiId = config.getString("busiId");
             // 1. 根据institutionId获取对应URL
@@ -66,23 +70,26 @@ public class XinLuDataProcessor implements XinLuService {
                 log.warn("未找到institutionId={}对应的URL", institutionId);
                 return;
             }
-            String currentDate = getCurrentDate();
-//            String testBegin = "2025-03-01";
-//            String testEnd = "2025-03-24";
-            // 2. 发送GET请求
-            String responseJson = sendGetRequest(targetUrl,1,currentDate,currentDate);
-//            String responseJson = sendGetRequest(targetUrl,1,testBegin,testEnd);
-            if (responseJson == null) return;
-            // 3. 解析并映射数据
-            List<XinLuUserStarCallbackParam> mappedData = parseAndMapData(responseJson, institutionId, busiId);
-            log.info("鑫路回传诚易融数据{},{}", institutionId,mappedData);
-            if (CollectionUtils.isEmpty(mappedData)) {
-                log.info("鑫路没有回传数据{},{}", institutionId,currentDate);
-                return;
+
+            // 星级数据拉取周期从一天调整为一周
+            for (int i = 6; i >= 0; i--) {
+                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                String syncDate = LocalDate.now().minusDays(i).format(formatter);
+
+                // 2. 发送GET请求
+                String responseJson = sendGetRequest(targetUrl,1, syncDate, syncDate);
+                if (responseJson == null) { continue; }
+                // 3. 解析并映射数据
+                List<XinLuUserStarCallbackParam> mappedData = parseAndMapData(responseJson, institutionId, busiId);
+                log.info("鑫路回传诚易融数据{},{},同步时间:{}", institutionId, mappedData, syncDate);
+                if (CollectionUtils.isEmpty(mappedData)) {
+                    log.info("鑫路没有回传数据{},同步时间:{}", institutionId, syncDate);
+                    continue;
+                }
+                // 4. 后续处理(存储/推送等)
+                handleMappedData(mappedData);
             }
-            // 4. 后续处理(存储/推送等)
-            handleMappedData(mappedData);
-        });
+        }));
     }
 
     private String sendGetRequest(String originalUrl,int pageNum, String beginTime, String endTime){