4545import org .apache .dolphinscheduler .api .utils .Result ;
4646import org .apache .dolphinscheduler .common .constants .CommandKeyConstants ;
4747import org .apache .dolphinscheduler .common .constants .Constants ;
48+ import org .apache .dolphinscheduler .common .enums .ContextType ;
4849import org .apache .dolphinscheduler .common .enums .Flag ;
4950import org .apache .dolphinscheduler .common .enums .WorkflowExecutionStatus ;
5051import org .apache .dolphinscheduler .common .graph .DAG ;
5354import org .apache .dolphinscheduler .common .utils .JSONUtils ;
5455import org .apache .dolphinscheduler .common .utils .placeholder .BusinessTimeUtils ;
5556import org .apache .dolphinscheduler .dao .AlertDao ;
57+ import org .apache .dolphinscheduler .dao .entity .AbstractTaskInstanceContext ;
5658import org .apache .dolphinscheduler .dao .entity .Project ;
5759import org .apache .dolphinscheduler .dao .entity .RelationSubWorkflow ;
5860import org .apache .dolphinscheduler .dao .entity .TaskDefinition ;
5961import org .apache .dolphinscheduler .dao .entity .TaskDefinitionLog ;
6062import org .apache .dolphinscheduler .dao .entity .TaskInstance ;
63+ import org .apache .dolphinscheduler .dao .entity .TaskInstanceContext ;
64+ import org .apache .dolphinscheduler .dao .entity .TaskInstanceDependentDetails ;
6165import org .apache .dolphinscheduler .dao .entity .User ;
6266import org .apache .dolphinscheduler .dao .entity .WorkflowDefinition ;
6367import org .apache .dolphinscheduler .dao .entity .WorkflowInstance ;
7074import org .apache .dolphinscheduler .dao .mapper .WorkflowDefinitionLogMapper ;
7175import org .apache .dolphinscheduler .dao .mapper .WorkflowDefinitionMapper ;
7276import org .apache .dolphinscheduler .dao .mapper .WorkflowInstanceMapper ;
77+ import org .apache .dolphinscheduler .dao .model .ITaskInstanceContext ;
78+ import org .apache .dolphinscheduler .dao .repository .TaskInstanceContextDao ;
7379import org .apache .dolphinscheduler .dao .repository .TaskInstanceDao ;
7480import org .apache .dolphinscheduler .dao .repository .WorkflowInstanceDao ;
7581import org .apache .dolphinscheduler .dao .repository .WorkflowInstanceMapDao ;
96102
97103import lombok .extern .slf4j .Slf4j ;
98104
105+ import org .springframework .beans .BeanUtils ;
99106import org .springframework .beans .factory .annotation .Autowired ;
100107import org .springframework .context .annotation .Lazy ;
101108import org .springframework .stereotype .Service ;
@@ -174,6 +181,9 @@ public class WorkflowInstanceServiceImpl extends BaseServiceImpl implements Work
174181 @ Autowired
175182 private CuringParamsService curingGlobalParamsService ;
176183
184+ @ Autowired
185+ private TaskInstanceContextDao taskInstanceContextDao ;
186+
177187 /**
178188 * return top n SUCCESS workflow instance order by running time which started between startTime and endTime
179189 */
@@ -184,7 +194,7 @@ public Map<String, Object> queryTopNLongestRunningWorkflowInstance(User loginUse
184194 // check user access for project
185195 Map <String , Object > result =
186196 projectService .checkProjectAndAuth (loginUser , project , projectCode ,
187- ApiFuncIdentificationConstant . WORKFLOW_INSTANCE );
197+ WORKFLOW_INSTANCE );
188198 if (result .get (Constants .STATUS ) != Status .SUCCESS ) {
189199 return result ;
190200 }
@@ -233,7 +243,7 @@ public Map<String, Object> queryWorkflowInstanceById(User loginUser, long projec
233243 // check user access for project
234244 Map <String , Object > result =
235245 projectService .checkProjectAndAuth (loginUser , project , projectCode ,
236- ApiFuncIdentificationConstant . WORKFLOW_INSTANCE );
246+ WORKFLOW_INSTANCE );
237247 if (result .get (Constants .STATUS ) != Status .SUCCESS ) {
238248 return result ;
239249 }
@@ -245,7 +255,7 @@ public Map<String, Object> queryWorkflowInstanceById(User loginUser, long projec
245255 workflowInstance .getWorkflowDefinitionVersion ());
246256
247257 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 );
249259 putMsg (result , Status .WORKFLOW_DEFINITION_NOT_EXIST , workflowInstanceId );
250260 } else {
251261 workflowInstance .setLocations (workflowDefinition .getLocations ());
@@ -443,7 +453,7 @@ public Map<String, Object> queryTaskListByWorkflowInstanceId(User loginUser, lon
443453 // check user access for project
444454 Map <String , Object > result =
445455 projectService .checkProjectAndAuth (loginUser , project , projectCode ,
446- ApiFuncIdentificationConstant . WORKFLOW_INSTANCE );
456+ WORKFLOW_INSTANCE );
447457 if (result .get (Constants .STATUS ) != Status .SUCCESS ) {
448458 return result ;
449459 }
@@ -460,15 +470,47 @@ public Map<String, Object> queryTaskListByWorkflowInstanceId(User loginUser, lon
460470 List <TaskInstance > taskInstanceList =
461471 taskInstanceDao .queryValidTaskListByWorkflowInstanceId (workflowInstanceId ,
462472 workflowInstance .getTestFlag ());
473+ List <TaskInstanceDependentDetails <ITaskInstanceContext >> taskInstanceDependentDetailsList =
474+ setTaskInstanceDependentResult (taskInstanceList );
475+
463476 Map <String , Object > resultMap = new HashMap <>();
464477 resultMap .put (WORKFLOW_INSTANCE_STATE , workflowInstance .getState ().toString ());
465- resultMap .put (TASK_LIST , taskInstanceList );
478+ resultMap .put (TASK_LIST , taskInstanceDependentDetailsList );
466479 result .put (DATA_LIST , resultMap );
467480
468481 putMsg (result , Status .SUCCESS );
469482 return result ;
470483 }
471484
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+
472514 @ Override
473515 public List <DynamicSubWorkflowDto > queryDynamicSubWorkflowInstances (User loginUser , Integer taskId ) {
474516 TaskInstance taskInstance = taskInstanceDao .queryById (taskId );
@@ -488,7 +530,7 @@ public List<DynamicSubWorkflowDto> queryDynamicSubWorkflowInstances(User loginUs
488530 .queryAllSubWorkflowInstance ((long ) taskInstance .getWorkflowInstanceId (),
489531 taskInstance .getTaskCode ());
490532 List <Long > allSubWorkflowInstanceId = relationSubWorkflows .stream ()
491- .map (RelationSubWorkflow ::getSubWorkflowInstanceId ).collect (java . util . stream . Collectors .toList ());
533+ .map (RelationSubWorkflow ::getSubWorkflowInstanceId ).collect (Collectors .toList ());
492534 List <WorkflowInstance > allSubWorkflows = workflowInstanceDao .queryByIds (allSubWorkflowInstanceId );
493535
494536 if (allSubWorkflows == null || allSubWorkflows .isEmpty ()) {
@@ -539,7 +581,7 @@ public Map<String, Object> querySubWorkflowInstanceByTaskId(User loginUser, long
539581 // check user access for project
540582 Map <String , Object > result =
541583 projectService .checkProjectAndAuth (loginUser , project , projectCode ,
542- ApiFuncIdentificationConstant . WORKFLOW_INSTANCE );
584+ WORKFLOW_INSTANCE );
543585 if (result .get (Constants .STATUS ) != Status .SUCCESS ) {
544586 return result ;
545587 }
@@ -693,7 +735,7 @@ public Map<String, Object> updateWorkflowInstance(User loginUser, long projectCo
693735 "Update task relations complete, projectCode:{}, workflowDefinitionCode:{}, workflowDefinitionVersion:{}." ,
694736 projectCode , workflowDefinition .getCode (), insertVersion );
695737 putMsg (result , Status .SUCCESS );
696- result .put (Constants . DATA_LIST , workflowDefinition );
738+ result .put (DATA_LIST , workflowDefinition );
697739 } else {
698740 log .info (
699741 "Update task relations error, projectCode:{}, workflowDefinitionCode:{}, workflowDefinitionVersion:{}." ,
@@ -750,7 +792,7 @@ public Map<String, Object> queryParentInstanceBySubId(User loginUser, long proje
750792 // check user access for project
751793 Map <String , Object > result =
752794 projectService .checkProjectAndAuth (loginUser , project , projectCode ,
753- ApiFuncIdentificationConstant . WORKFLOW_INSTANCE );
795+ WORKFLOW_INSTANCE );
754796 if (result .get (Constants .STATUS ) != Status .SUCCESS ) {
755797 return result ;
756798 }
@@ -824,7 +866,7 @@ public Map<String, Object> viewVariables(long projectCode, Integer workflowInsta
824866 if (workflowInstance == null ) {
825867 log .error ("workflow instance does not exist, projectCode:{}, workflowInstanceId:{}." , projectCode ,
826868 workflowInstanceId );
827- putMsg (result , Status . WORKFLOW_INSTANCE_NOT_EXIST , workflowInstanceId );
869+ putMsg (result , WORKFLOW_INSTANCE_NOT_EXIST , workflowInstanceId );
828870 return result ;
829871 }
830872
@@ -918,7 +960,7 @@ public Map<String, Object> viewGantt(long projectCode, Integer workflowInstanceI
918960 if (workflowInstance == null ) {
919961 log .error ("workflow instance does not exist, projectCode:{}, workflowInstanceId:{}." , projectCode ,
920962 workflowInstanceId );
921- putMsg (result , Status . WORKFLOW_INSTANCE_NOT_EXIST , workflowInstanceId );
963+ putMsg (result , WORKFLOW_INSTANCE_NOT_EXIST , workflowInstanceId );
922964 return result ;
923965 }
924966
0 commit comments