45
45
import org .apache .dolphinscheduler .api .utils .Result ;
46
46
import org .apache .dolphinscheduler .common .constants .CommandKeyConstants ;
47
47
import org .apache .dolphinscheduler .common .constants .Constants ;
48
+ import org .apache .dolphinscheduler .common .enums .ContextType ;
48
49
import org .apache .dolphinscheduler .common .enums .Flag ;
49
50
import org .apache .dolphinscheduler .common .enums .WorkflowExecutionStatus ;
50
51
import org .apache .dolphinscheduler .common .graph .DAG ;
53
54
import org .apache .dolphinscheduler .common .utils .JSONUtils ;
54
55
import org .apache .dolphinscheduler .common .utils .placeholder .BusinessTimeUtils ;
55
56
import org .apache .dolphinscheduler .dao .AlertDao ;
57
+ import org .apache .dolphinscheduler .dao .entity .AbstractTaskInstanceContext ;
56
58
import org .apache .dolphinscheduler .dao .entity .Project ;
57
59
import org .apache .dolphinscheduler .dao .entity .RelationSubWorkflow ;
58
60
import org .apache .dolphinscheduler .dao .entity .TaskDefinition ;
59
61
import org .apache .dolphinscheduler .dao .entity .TaskDefinitionLog ;
60
62
import org .apache .dolphinscheduler .dao .entity .TaskInstance ;
63
+ import org .apache .dolphinscheduler .dao .entity .TaskInstanceContext ;
64
+ import org .apache .dolphinscheduler .dao .entity .TaskInstanceDependentDetails ;
61
65
import org .apache .dolphinscheduler .dao .entity .User ;
62
66
import org .apache .dolphinscheduler .dao .entity .WorkflowDefinition ;
63
67
import org .apache .dolphinscheduler .dao .entity .WorkflowInstance ;
70
74
import org .apache .dolphinscheduler .dao .mapper .WorkflowDefinitionLogMapper ;
71
75
import org .apache .dolphinscheduler .dao .mapper .WorkflowDefinitionMapper ;
72
76
import org .apache .dolphinscheduler .dao .mapper .WorkflowInstanceMapper ;
77
+ import org .apache .dolphinscheduler .dao .model .ITaskInstanceContext ;
78
+ import org .apache .dolphinscheduler .dao .repository .TaskInstanceContextDao ;
73
79
import org .apache .dolphinscheduler .dao .repository .TaskInstanceDao ;
74
80
import org .apache .dolphinscheduler .dao .repository .WorkflowInstanceDao ;
75
81
import org .apache .dolphinscheduler .dao .repository .WorkflowInstanceMapDao ;
96
102
97
103
import lombok .extern .slf4j .Slf4j ;
98
104
105
+ import org .springframework .beans .BeanUtils ;
99
106
import org .springframework .beans .factory .annotation .Autowired ;
100
107
import org .springframework .context .annotation .Lazy ;
101
108
import org .springframework .stereotype .Service ;
@@ -174,6 +181,9 @@ public class WorkflowInstanceServiceImpl extends BaseServiceImpl implements Work
174
181
@ Autowired
175
182
private CuringParamsService curingGlobalParamsService ;
176
183
184
+ @ Autowired
185
+ private TaskInstanceContextDao taskInstanceContextDao ;
186
+
177
187
/**
178
188
* return top n SUCCESS workflow instance order by running time which started between startTime and endTime
179
189
*/
@@ -184,7 +194,7 @@ public Map<String, Object> queryTopNLongestRunningWorkflowInstance(User loginUse
184
194
// check user access for project
185
195
Map <String , Object > result =
186
196
projectService .checkProjectAndAuth (loginUser , project , projectCode ,
187
- ApiFuncIdentificationConstant . WORKFLOW_INSTANCE );
197
+ WORKFLOW_INSTANCE );
188
198
if (result .get (Constants .STATUS ) != Status .SUCCESS ) {
189
199
return result ;
190
200
}
@@ -233,7 +243,7 @@ public Map<String, Object> queryWorkflowInstanceById(User loginUser, long projec
233
243
// check user access for project
234
244
Map <String , Object > result =
235
245
projectService .checkProjectAndAuth (loginUser , project , projectCode ,
236
- ApiFuncIdentificationConstant . WORKFLOW_INSTANCE );
246
+ WORKFLOW_INSTANCE );
237
247
if (result .get (Constants .STATUS ) != Status .SUCCESS ) {
238
248
return result ;
239
249
}
@@ -245,7 +255,7 @@ public Map<String, Object> queryWorkflowInstanceById(User loginUser, long projec
245
255
workflowInstance .getWorkflowDefinitionVersion ());
246
256
247
257
if (workflowDefinition == null || projectCode != workflowDefinition .getProjectCode ()) {
248
- log .error ("workflow definition does not exist, projectCode:{}." , projectCode );
258
+ log .error ("workflow definition does not exist, projectCode: {}." , projectCode );
249
259
putMsg (result , Status .WORKFLOW_DEFINITION_NOT_EXIST , workflowInstanceId );
250
260
} else {
251
261
workflowInstance .setLocations (workflowDefinition .getLocations ());
@@ -443,7 +453,7 @@ public Map<String, Object> queryTaskListByWorkflowInstanceId(User loginUser, lon
443
453
// check user access for project
444
454
Map <String , Object > result =
445
455
projectService .checkProjectAndAuth (loginUser , project , projectCode ,
446
- ApiFuncIdentificationConstant . WORKFLOW_INSTANCE );
456
+ WORKFLOW_INSTANCE );
447
457
if (result .get (Constants .STATUS ) != Status .SUCCESS ) {
448
458
return result ;
449
459
}
@@ -460,15 +470,47 @@ public Map<String, Object> queryTaskListByWorkflowInstanceId(User loginUser, lon
460
470
List <TaskInstance > taskInstanceList =
461
471
taskInstanceDao .queryValidTaskListByWorkflowInstanceId (workflowInstanceId ,
462
472
workflowInstance .getTestFlag ());
473
+ List <TaskInstanceDependentDetails <ITaskInstanceContext >> taskInstanceDependentDetailsList =
474
+ setTaskInstanceDependentResult (taskInstanceList );
475
+
463
476
Map <String , Object > resultMap = new HashMap <>();
464
477
resultMap .put (WORKFLOW_INSTANCE_STATE , workflowInstance .getState ().toString ());
465
- resultMap .put (TASK_LIST , taskInstanceList );
478
+ resultMap .put (TASK_LIST , taskInstanceDependentDetailsList );
466
479
result .put (DATA_LIST , resultMap );
467
480
468
481
putMsg (result , Status .SUCCESS );
469
482
return result ;
470
483
}
471
484
485
+ private List <TaskInstanceDependentDetails <ITaskInstanceContext >> setTaskInstanceDependentResult (List <TaskInstance > taskInstanceList ) {
486
+ List <TaskInstanceDependentDetails <ITaskInstanceContext >> taskInstanceDependentDetailsList =
487
+ taskInstanceList .stream ()
488
+ .map (taskInstance -> {
489
+ TaskInstanceDependentDetails <ITaskInstanceContext > taskInstanceDependentDetails =
490
+ new TaskInstanceDependentDetails <>();
491
+ BeanUtils .copyProperties (taskInstance , taskInstanceDependentDetails );
492
+ return taskInstanceDependentDetails ;
493
+ }).collect (Collectors .toList ());
494
+ List <Integer > taskInstanceIdList = taskInstanceList .stream ()
495
+ .map (TaskInstance ::getId ).collect (Collectors .toList ());
496
+ List <TaskInstanceContext > taskInstanceContextList =
497
+ taskInstanceContextDao .batchQueryByTaskInstanceIdsAndContextType (taskInstanceIdList ,
498
+ ContextType .DEPENDENT_RESULT_CONTEXT );
499
+ for (TaskInstanceContext taskInstanceContext : taskInstanceContextList ) {
500
+ for (AbstractTaskInstanceContext dependentResultTaskInstanceContext : taskInstanceContext
501
+ .getTaskInstanceContext ()) {
502
+ for (TaskInstanceDependentDetails <ITaskInstanceContext > taskInstanceDependentDetails : taskInstanceDependentDetailsList ) {
503
+ if (taskInstanceDependentDetails .getId ().equals (taskInstanceContext .getTaskInstanceId ())) {
504
+ taskInstanceDependentDetails
505
+ .setTaskInstanceDependentResult (
506
+ dependentResultTaskInstanceContext );
507
+ }
508
+ }
509
+ }
510
+ }
511
+ return taskInstanceDependentDetailsList ;
512
+ }
513
+
472
514
@ Override
473
515
public List <DynamicSubWorkflowDto > queryDynamicSubWorkflowInstances (User loginUser , Integer taskId ) {
474
516
TaskInstance taskInstance = taskInstanceDao .queryById (taskId );
@@ -488,7 +530,7 @@ public List<DynamicSubWorkflowDto> queryDynamicSubWorkflowInstances(User loginUs
488
530
.queryAllSubWorkflowInstance ((long ) taskInstance .getWorkflowInstanceId (),
489
531
taskInstance .getTaskCode ());
490
532
List <Long > allSubWorkflowInstanceId = relationSubWorkflows .stream ()
491
- .map (RelationSubWorkflow ::getSubWorkflowInstanceId ).collect (java . util . stream . Collectors .toList ());
533
+ .map (RelationSubWorkflow ::getSubWorkflowInstanceId ).collect (Collectors .toList ());
492
534
List <WorkflowInstance > allSubWorkflows = workflowInstanceDao .queryByIds (allSubWorkflowInstanceId );
493
535
494
536
if (allSubWorkflows == null || allSubWorkflows .isEmpty ()) {
@@ -539,7 +581,7 @@ public Map<String, Object> querySubWorkflowInstanceByTaskId(User loginUser, long
539
581
// check user access for project
540
582
Map <String , Object > result =
541
583
projectService .checkProjectAndAuth (loginUser , project , projectCode ,
542
- ApiFuncIdentificationConstant . WORKFLOW_INSTANCE );
584
+ WORKFLOW_INSTANCE );
543
585
if (result .get (Constants .STATUS ) != Status .SUCCESS ) {
544
586
return result ;
545
587
}
@@ -693,7 +735,7 @@ public Map<String, Object> updateWorkflowInstance(User loginUser, long projectCo
693
735
"Update task relations complete, projectCode:{}, workflowDefinitionCode:{}, workflowDefinitionVersion:{}." ,
694
736
projectCode , workflowDefinition .getCode (), insertVersion );
695
737
putMsg (result , Status .SUCCESS );
696
- result .put (Constants . DATA_LIST , workflowDefinition );
738
+ result .put (DATA_LIST , workflowDefinition );
697
739
} else {
698
740
log .info (
699
741
"Update task relations error, projectCode:{}, workflowDefinitionCode:{}, workflowDefinitionVersion:{}." ,
@@ -750,7 +792,7 @@ public Map<String, Object> queryParentInstanceBySubId(User loginUser, long proje
750
792
// check user access for project
751
793
Map <String , Object > result =
752
794
projectService .checkProjectAndAuth (loginUser , project , projectCode ,
753
- ApiFuncIdentificationConstant . WORKFLOW_INSTANCE );
795
+ WORKFLOW_INSTANCE );
754
796
if (result .get (Constants .STATUS ) != Status .SUCCESS ) {
755
797
return result ;
756
798
}
@@ -824,7 +866,7 @@ public Map<String, Object> viewVariables(long projectCode, Integer workflowInsta
824
866
if (workflowInstance == null ) {
825
867
log .error ("workflow instance does not exist, projectCode:{}, workflowInstanceId:{}." , projectCode ,
826
868
workflowInstanceId );
827
- putMsg (result , Status . WORKFLOW_INSTANCE_NOT_EXIST , workflowInstanceId );
869
+ putMsg (result , WORKFLOW_INSTANCE_NOT_EXIST , workflowInstanceId );
828
870
return result ;
829
871
}
830
872
@@ -918,7 +960,7 @@ public Map<String, Object> viewGantt(long projectCode, Integer workflowInstanceI
918
960
if (workflowInstance == null ) {
919
961
log .error ("workflow instance does not exist, projectCode:{}, workflowInstanceId:{}." , projectCode ,
920
962
workflowInstanceId );
921
- putMsg (result , Status . WORKFLOW_INSTANCE_NOT_EXIST , workflowInstanceId );
963
+ putMsg (result , WORKFLOW_INSTANCE_NOT_EXIST , workflowInstanceId );
922
964
return result ;
923
965
}
924
966
0 commit comments