|  | @@ -7,6 +7,7 @@ import com.tzld.piaoquan.ad.engine.commons.score.BaseXGBoostModelScorer;
 | 
	
		
			
				|  |  |  import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 | 
	
		
			
				|  |  |  import com.tzld.piaoquan.ad.engine.commons.score.ScorerConfigInfo;
 | 
	
		
			
				|  |  |  import com.tzld.piaoquan.ad.engine.commons.score.model.PAIModelV1;
 | 
	
		
			
				|  |  | +import com.tzld.piaoquan.ad.engine.commons.score.model.PAIModelV2;
 | 
	
		
			
				|  |  |  import com.tzld.piaoquan.ad.engine.commons.score.model.XGBoostModel683;
 | 
	
		
			
				|  |  |  import com.tzld.piaoquan.ad.engine.commons.thread.ThreadPoolFactory;
 | 
	
		
			
				|  |  |  import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 | 
	
	
		
			
				|  | @@ -87,16 +88,14 @@ public class PAIScorer extends AbstractScorer {
 | 
	
		
			
				|  |  |          long startTime = System.currentTimeMillis();
 | 
	
		
			
				|  |  |          PAIModelV1 model = PAIModelV1.getModel();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // 切分批次
 | 
	
		
			
				|  |  | -        final int batchSize = 500; // 每批 500 个,可按你的业务场景调整
 | 
	
		
			
				|  |  | +        final int batchSize = 500;
 | 
	
		
			
				|  |  |          List<List<AdRankItem>> batches = new ArrayList<>();
 | 
	
		
			
				|  |  |          for (int i = 0; i < items.size(); i += batchSize) {
 | 
	
		
			
				|  |  | -            batches.add(items.subList(i, Math.min(i + batchSize, items.size())));
 | 
	
		
			
				|  |  | +            batches.add(new ArrayList<>(items.subList(i, Math.min(i + batchSize, items.size()))));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // 并发执行
 | 
	
		
			
				|  |  |          ExecutorService executor = ThreadPoolFactory.defaultPool();
 | 
	
		
			
				|  |  | -        List<Future<?>> futures = new ArrayList<>();
 | 
	
		
			
				|  |  | +        List<Future<List<AdRankItem>>> futures = new ArrayList<>();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          for (List<AdRankItem> batch : batches) {
 | 
	
		
			
				|  |  |              futures.add(executor.submit(() -> {
 | 
	
	
		
			
				|  | @@ -105,29 +104,24 @@ public class PAIScorer extends AbstractScorer {
 | 
	
		
			
				|  |  |                  } catch (Exception e) {
 | 
	
		
			
				|  |  |                      LOGGER.error("Error during multipleCtrScore batch execution", e);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | +                return batch;
 | 
	
		
			
				|  |  |              }));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // 等待所有任务完成
 | 
	
		
			
				|  |  | -        for (Future<?> future : futures) {
 | 
	
		
			
				|  |  | +        // 合并结果
 | 
	
		
			
				|  |  | +        List<AdRankItem> merged = new ArrayList<>();
 | 
	
		
			
				|  |  | +        for (Future<List<AdRankItem>> future : futures) {
 | 
	
		
			
				|  |  |              try {
 | 
	
		
			
				|  |  | -                future.get();
 | 
	
		
			
				|  |  | -            } catch (InterruptedException e) {
 | 
	
		
			
				|  |  | -                Thread.currentThread().interrupt();
 | 
	
		
			
				|  |  | -                LOGGER.warn("Thread interrupted while waiting for batch tasks", e);
 | 
	
		
			
				|  |  | -            } catch (ExecutionException e) {
 | 
	
		
			
				|  |  | -                LOGGER.error("Execution error in batch tasks", e);
 | 
	
		
			
				|  |  | +                merged.addAll(future.get());
 | 
	
		
			
				|  |  | +            } catch (Exception e) {
 | 
	
		
			
				|  |  | +                LOGGER.error("Execution error in batch", e);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // 打分完成后排序
 | 
	
		
			
				|  |  | -        Collections.sort(items);
 | 
	
		
			
				|  |  | +        Collections.sort(merged);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          LOGGER.debug("ctr ranker java execute time: [{}ms]", System.currentTimeMillis() - startTime);
 | 
	
		
			
				|  |  | -        LOGGER.debug("[ctr ranker time java] items size={}, cost={}ms",
 | 
	
		
			
				|  |  | -                items.size(), System.currentTimeMillis() - startTime);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        return items;
 | 
	
		
			
				|  |  | +        return merged;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 |