fix: copy or move app workflow to library, dependencies on other comp… (#720)

This commit is contained in:
Zhj 2025-08-13 16:44:44 +08:00 committed by GitHub
parent 6b60c07c22
commit ffbc108875
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 75 additions and 27 deletions

View File

@ -253,7 +253,7 @@ type FCParam struct {
RequestParameters []*workflow.APIParameter `json:"request_params"` RequestParameters []*workflow.APIParameter `json:"request_params"`
ResponseParameters []*workflow.APIParameter `json:"response_params"` ResponseParameters []*workflow.APIParameter `json:"response_params"`
} `json:"fc_setting,omitempty"` } `json:"fc_setting,omitempty"`
} } `json:"pluginList,omitempty"`
} `json:"pluginFCParam,omitempty"` } `json:"pluginFCParam,omitempty"`
KnowledgeFCParam *struct { KnowledgeFCParam *struct {

View File

@ -1452,14 +1452,14 @@ func (i *impl) GetWorkflowDependenceResource(ctx context.Context, workflowID int
case entity.NodeTypeLLM: case entity.NodeTypeLLM:
if node.Data.Inputs.FCParam != nil && node.Data.Inputs.FCParam.PluginFCParam != nil { if node.Data.Inputs.FCParam != nil && node.Data.Inputs.FCParam.PluginFCParam != nil {
for idx := range node.Data.Inputs.FCParam.PluginFCParam.PluginList { for idx := range node.Data.Inputs.FCParam.PluginFCParam.PluginList {
pl := node.Data.Inputs.FCParam.PluginFCParam.PluginList[idx] if node.Data.Inputs.FCParam.PluginFCParam.PluginList[idx].IsDraft {
pluginID, err := strconv.ParseInt(pl.PluginID, 10, 64) pl := node.Data.Inputs.FCParam.PluginFCParam.PluginList[idx]
if err != nil { pluginID, err := strconv.ParseInt(pl.PluginID, 10, 64)
return err if err != nil {
} return err
}
if pl.PluginVersion == "0" {
ds.PluginIDs = append(ds.PluginIDs, pluginID) ds.PluginIDs = append(ds.PluginIDs, pluginID)
} }
} }
@ -1476,29 +1476,63 @@ func (i *impl) GetWorkflowDependenceResource(ctx context.Context, workflowID int
} }
} }
if node.Data.Inputs.FCParam != nil && node.Data.Inputs.FCParam.WorkflowFCParam != nil {
for idx := range node.Data.Inputs.FCParam.WorkflowFCParam.WorkflowList {
if node.Data.Inputs.FCParam.WorkflowFCParam.WorkflowList[idx].IsDraft {
wID, err := strconv.ParseInt(node.Data.Inputs.FCParam.WorkflowFCParam.WorkflowList[idx].WorkflowID, 10, 64)
if err != nil {
return err
}
wfe, err := i.repo.GetEntity(ctx, &vo.GetPolicy{
ID: wID,
QType: plugin.FromDraft,
})
if err != nil {
return err
}
workflowToolCanvas := &vo.Canvas{}
err = sonic.UnmarshalString(wfe.Canvas, workflowToolCanvas)
if err != nil {
return err
}
err = collectDependence(workflowToolCanvas.Nodes)
if err != nil {
return err
}
}
}
}
case entity.NodeTypeSubWorkflow: case entity.NodeTypeSubWorkflow:
wfID, err := strconv.ParseInt(node.Data.Inputs.WorkflowID, 10, 64) if node.Data.Inputs.WorkflowVersion == "" {
if err != nil { wfID, err := strconv.ParseInt(node.Data.Inputs.WorkflowID, 10, 64)
return err if err != nil {
} return err
}
subWorkflow, err := i.repo.GetEntity(ctx, &vo.GetPolicy{ subWorkflow, err := i.repo.GetEntity(ctx, &vo.GetPolicy{
ID: wfID, ID: wfID,
QType: plugin.FromDraft, QType: plugin.FromDraft,
}) })
if err != nil { if err != nil {
return err return err
} }
subCanvas := &vo.Canvas{} subCanvas := &vo.Canvas{}
err = sonic.UnmarshalString(subWorkflow.Canvas, subCanvas) err = sonic.UnmarshalString(subWorkflow.Canvas, subCanvas)
if err != nil { if err != nil {
return err return err
} }
err = collectDependence(subCanvas.Nodes) err = collectDependence(subCanvas.Nodes)
if err != nil { if err != nil {
return err return err
}
} }
} }
@ -1718,6 +1752,7 @@ func replaceRelatedWorkflowOrExternalResourceInWorkflowNodes(nodes []*vo.Node, r
wf.WorkflowID = strconv.FormatInt(refWf.ID, 10) wf.WorkflowID = strconv.FormatInt(refWf.ID, 10)
wf.WorkflowVersion = refWf.Version wf.WorkflowVersion = refWf.Version
} }
node.Data.Inputs.FCParam.WorkflowFCParam.WorkflowList[idx] = wf
} }
} }
@ -1728,13 +1763,26 @@ func replaceRelatedWorkflowOrExternalResourceInWorkflowNodes(nodes []*vo.Node, r
if err != nil { if err != nil {
return err return err
} }
toolID, err := strconv.ParseInt(pl.ApiId, 10, 64)
if err != nil {
return err
}
if refPlugin, ok := related.PluginMap[pluginID]; ok { if refPlugin, ok := related.PluginMap[pluginID]; ok {
tID, ok := related.PluginToolMap[toolID]
if ok {
pl.ApiId = strconv.FormatInt(tID, 10)
}
pl.PluginID = strconv.FormatInt(refPlugin.PluginID, 10) pl.PluginID = strconv.FormatInt(refPlugin.PluginID, 10)
if refPlugin.PluginVersion != nil { if refPlugin.PluginVersion != nil {
pl.PluginVersion = *refPlugin.PluginVersion pl.PluginVersion = *refPlugin.PluginVersion
pl.IsDraft = false
} }
} }
node.Data.Inputs.FCParam.PluginFCParam.PluginList[idx] = pl
} }
} }