4343import java .util .List ;
4444import java .util .Locale ;
4545import java .util .Set ;
46+ import java .util .concurrent .CompletableFuture ;
4647import java .util .stream .Collectors ;
4748
4849/**
@@ -75,7 +76,6 @@ public class FillDataJobBuilder extends AbstractJobBuilder {
7576 * @param endDay 每天时间范围 结束范围
7677 * @throws Exception
7778 */
78- @ Transactional (rollbackFor = Exception .class )
7979 public void createFillJob (Set <Long > all , Set <Long > run , Long fillId , String fillName , String beginTime , String endTime ,
8080 String startDay , String endDay ) throws Exception {
8181 Date startDate = DateUtil .parseDate (startDay , DateUtil .DATE_FORMAT , Locale .CHINA );
@@ -102,54 +102,52 @@ public void createFillJob(Set<Long> all, Set<Long> run, Long fillId, String fill
102102 * @param endTime 每天时间范围 结束范围
103103 * @throws Exception
104104 */
105- @ Transactional (rollbackFor = Exception .class )
106105 public void buildFillDataJobGraph (String fillName , Long fillId , Set <Long > all , Set <Long > run , String triggerDay ,
107- String beginTime , String endTime ) throws Exception {
106+ String beginTime , String endTime ) throws Exception {
108107 List <Long > allList = Lists .newArrayList (all );
109108 List <List <Long >> partition = Lists .partition (allList , environmentContext .getJobGraphTaskLimitSize ());
110109 AtomicJobSortWorker sortWorker = new AtomicJobSortWorker ();
110+ List <ScheduleJobDetails > saveList = Lists .newArrayList ();
111+ CompletableFuture .allOf (partition .stream ()
112+ .map (taskKey ->
113+ CompletableFuture .runAsync (() ->
114+ fillTaskPartition (fillName , fillId , run , triggerDay , beginTime , endTime , allList , sortWorker , saveList , taskKey ),
115+ jobGraphBuildPool ))
116+ .toArray (CompletableFuture []::new )).thenAccept (a -> savaFillJob (saveList )).join ();
117+ }
111118
112- for (List <Long > taskKey : partition ) {
113- jobGraphBuildPool .submit (() -> {
114- try {
115- List <ScheduleJobDetails > saveList = Lists .newArrayList ();
116- for (Long taskId : taskKey ) {
117- try {
118- ScheduleTaskShade scheduleTaskShade = scheduleTaskService
119- .lambdaQuery ()
120- .eq (ScheduleTaskShade ::getTaskId , taskId )
121- .eq (ScheduleTaskShade ::getIsDeleted , Deleted .NORMAL .getStatus ())
122- .one ();
123-
124- if (scheduleTaskShade != null ) {
125- List <ScheduleJobDetails > jobBuilderBeanList = Lists .newArrayList ();
126- // 非工作流任务子任务
127- if (scheduleTaskShade .getFlowId () == 0 ) {
128- // 生成补数据实例
129- jobBuilderBeanList = RetryUtil .executeWithRetry (() -> buildJob (scheduleTaskShade , fillName , triggerDay , beginTime , endTime , fillId , sortWorker ),
130- environmentContext .getBuildJobErrorRetry (), 200 , false );
131- } else {
132- Long flowId = scheduleTaskShade .getFlowId ();
133- if (!allList .contains (flowId )) {
134- // 生成周期实例
135- jobBuilderBeanList = RetryUtil .executeWithRetry (() -> buildJob (scheduleTaskShade , fillName , triggerDay , beginTime , beginTime , fillId , sortWorker ),
136- environmentContext .getBuildJobErrorRetry (), 200 , false );
137- }
138- }
139-
140- for (ScheduleJobDetails jobBuilderBean : jobBuilderBeanList ) {
141- addMap (run , saveList , taskId , jobBuilderBean );
142- }
143- }
144- } catch (Exception e ) {
145- LOGGER .error ("taskKey : {} error:" , taskId , e );
119+ private void fillTaskPartition (String fillName , Long fillId , Set <Long > run , String triggerDay , String beginTime , String endTime , List <Long > allList , AtomicJobSortWorker sortWorker , List <ScheduleJobDetails > saveList , List <Long > taskKey ) {
120+ for (Long taskId : taskKey ) {
121+ try {
122+ ScheduleTaskShade scheduleTaskShade = scheduleTaskService
123+ .lambdaQuery ()
124+ .eq (ScheduleTaskShade ::getTaskId , taskId )
125+ .eq (ScheduleTaskShade ::getIsDeleted , Deleted .NORMAL .getStatus ())
126+ .one ();
127+
128+ if (scheduleTaskShade != null ) {
129+ List <ScheduleJobDetails > jobBuilderBeanList = Lists .newArrayList ();
130+ // 非工作流任务子任务
131+ if (scheduleTaskShade .getFlowId () == 0 ) {
132+ // 生成补数据实例
133+ jobBuilderBeanList = RetryUtil .executeWithRetry (() -> buildJob (scheduleTaskShade , fillName , triggerDay , beginTime , endTime , fillId , sortWorker ),
134+ environmentContext .getBuildJobErrorRetry (), 200 , false );
135+ } else {
136+ Long flowId = scheduleTaskShade .getFlowId ();
137+ if (!allList .contains (flowId )) {
138+ // 生成周期实例
139+ jobBuilderBeanList = RetryUtil .executeWithRetry (() -> buildJob (scheduleTaskShade , fillName , triggerDay , beginTime , endTime , fillId , sortWorker ),
140+ environmentContext .getBuildJobErrorRetry (), 200 , false );
146141 }
147142 }
148- savaFillJob (saveList );
149- } catch (Exception e ) {
150- LOGGER .error ("fill error:" , e );
143+
144+ for (ScheduleJobDetails jobBuilderBean : jobBuilderBeanList ) {
145+ addMap (run , saveList , taskId , jobBuilderBean );
146+ }
151147 }
152- });
148+ } catch (Exception e ) {
149+ LOGGER .error ("taskKey : {} error:" , taskId , e );
150+ }
153151 }
154152 }
155153
@@ -178,7 +176,8 @@ private void addMap(Set<Long> run, List<ScheduleJobDetails> saveList, Long taskI
178176 *
179177 * @param allJobList 所有集合
180178 */
181- private void savaFillJob (List <ScheduleJobDetails > allJobList ) {
179+ @ Transactional (rollbackFor = Exception .class )
180+ public void savaFillJob (List <ScheduleJobDetails > allJobList ) {
182181 scheduleJobService .insertJobList (allJobList , EScheduleType .FILL_DATA .getType ());
183182 Set <ScheduleJobOperatorRecord > operatorJobIds = allJobList
184183 .stream ()
0 commit comments