| package com.doumee.core.job; | 
|   | 
| import lombok.AllArgsConstructor; | 
| import lombok.Data; | 
|   | 
| import java.util.ArrayList; | 
| import java.util.List; | 
|   | 
| /** | 
|  * 分发器父类,所有分发器继承该父类 | 
|  * @author  dm | 
|  * @since 2025/03/31 16:44 | 
|  */ | 
| public abstract class BaseDistributer<T> { | 
|   | 
|     /** | 
|      * 获取业务数据 | 
|      * | 
|      * @param jobParam JOB参数 | 
|      * @return List<T> | 
|      */ | 
|     public abstract List<T> getBusinessData(JobParam jobParam); | 
|   | 
|     /** | 
|      * 获取job分片数据 | 
|      * | 
|      * @param dto 分发参数 | 
|      * @param jobParam JOB参数 | 
|      * @return List<List<T>> | 
|      */ | 
|     public List<List<T>> getSnippetData (DistributeDTO dto, JobParam jobParam) { | 
|         List<List<T>> snippetData = new ArrayList<>(); | 
|         List<T> allData = this.getBusinessData(jobParam); | 
|         int snippetCount = allData.size() / dto.getLimit(); | 
|         if (allData.size() % dto.getLimit() > 0) { | 
|             snippetCount++; | 
|         } | 
|         for (int i = 0 ; i < snippetCount; i++) { | 
|             int endLimit = dto.getLimit() * (i + 1); | 
|             if (endLimit >= allData.size()) { | 
|                 endLimit = allData.size(); | 
|             } | 
|             snippetData.add(allData.subList(dto.getLimit() * i, endLimit)); | 
|         } | 
|         return snippetData; | 
|     } | 
|   | 
|     /** | 
|      * 分发参数 | 
|      */ | 
|     @Data | 
|     @AllArgsConstructor | 
|     public static class DistributeDTO { | 
|   | 
|         // 数据限制 | 
|         private Integer limit; | 
|     } | 
| } |