diff --git a/automation/server/internal/module/job_workflow/controller/workflow.go b/automation/server/internal/module/job_workflow/controller/workflow.go index 9813ff35f3fc24bbd3802b21685ea1f787abca83..292af94fa8566c1a67432eb3157e4da058a89ce3 100644 --- a/automation/server/internal/module/job_workflow/controller/workflow.go +++ b/automation/server/internal/module/job_workflow/controller/workflow.go @@ -99,3 +99,13 @@ func PublishWorkflow(c *gin.Context) { } response.Success(c, nil, "success") } + +func RelatedTaskWorkflowToSync(c *gin.Context) { + workFolwId := c.Query("id") + + if err := service.RelatedTaskWorkflowToSync(workFolwId); err != nil { + response.Fail(c, nil, err.Error()) + return + } + response.Success(c, nil, "success") +} diff --git a/automation/server/internal/module/job_workflow/dao/workflow.go b/automation/server/internal/module/job_workflow/dao/workflow.go index 5474810119cdc95b3ab0b44d10934292f8814015..9e3e0b8dd536b2dfccb37dfcd31e6d9b883af84c 100644 --- a/automation/server/internal/module/job_workflow/dao/workflow.go +++ b/automation/server/internal/module/job_workflow/dao/workflow.go @@ -1,6 +1,7 @@ package dao import ( + "ant-agent/pkg/logger" "fmt" "sort" "time" @@ -371,3 +372,69 @@ func PublishWorkflow(id int, newStatus string) error { return nil }) } + +func NotifyRelatedTaskWorkflowToSync(scriptId string) error { + var workflowIDs []int + if err := global.App.MySQL.Model(&model.TaskWorkflowStepScript{}). + Where("script_id = ?", scriptId). + Pluck("workflow_id", &workflowIDs).Error; err != nil { + return err + } + + if len(workflowIDs) == 0 { + return nil + } + + if err := global.App.MySQL.Model(&model.TaskWorkflow{}). + Where("id IN ?", workflowIDs). + Update("to_sync", true).Error; err != nil { + return err + } + + if err := global.App.MySQL.Model(&model.TaskWorkflowStepScript{}). + Where("workflow_id IN ? AND script_id = ?", workflowIDs, scriptId). + Update("to_sync", true).Error; err != nil { + return err + } + return nil +} + +func RelatedTaskWorkflowToSync(workflowId string) error { + logger.Info("workflowId %v", workflowId) + var steps []model.TaskWorkflowStepScript + if err := global.App.MySQL. + Where("workflow_id = ? AND to_sync = ?", workflowId, true). + Find(&steps).Error; err != nil { + return fmt.Errorf("查询待同步步骤失败: %w", err) + } + + if len(steps) == 0 { + return nil + } + + for _, step := range steps { + versionID, _, content, err := scriptlibrary.GetPublishedScriptContentByScriptId(step.ScriptId) + if err != nil { + return fmt.Errorf("获取脚本最新版本失败, script_id: %s, err=%v", step.ScriptId, err) + } + + updateData := map[string]interface{}{ + "script_version_id": versionID, + "script_content": content, + "to_sync": false, + } + + if err := global.App.MySQL.Model(&model.TaskWorkflowStepScript{}). + Where("workflow_id = ? AND script_id = ?", workflowId, step.ScriptId). + Updates(updateData).Error; err != nil { + return fmt.Errorf("更新步骤 %d 失败: %w", step.ID, err) + } + } + + if err := global.App.MySQL.Model(&model.TaskWorkflow{}). + Where("id = ?", workflowId). + Update("to_sync", false).Error; err != nil { + return err + } + return nil +} diff --git a/automation/server/internal/module/job_workflow/model/workflow.go b/automation/server/internal/module/job_workflow/model/workflow.go index 6b2c9cfda8f37696658c16fc14317633a2fdb636..92f68b318c60a092a38c39425f91f34db48690fe 100644 --- a/automation/server/internal/module/job_workflow/model/workflow.go +++ b/automation/server/internal/module/job_workflow/model/workflow.go @@ -17,6 +17,7 @@ type TaskWorkflow struct { UsageType workflow.UsageType `json:"usage_type" gorm:"comment:编排业务类型"` FirstStepNum int `json:"first_step_num"` LastStepNum int `json:"last_step_num"` + ToSync bool `json:"to_sync" gorm:"type:tinyint(1);default:0;comment:是否需要更新引用脚本"` ModifyUser string `json:"modify_user" gorm:"not null;comment:'最后修改者'"` ModifyTime string `json:"modify_time" gorm:"comment:'最后修改时间'"` } @@ -55,6 +56,7 @@ type TaskWorkflowStepScript struct { StepNum int `json:"step_num" gorm:"comment:作业编排步骤Id"` ScriptType script.ScriptType `json:"script_type" gorm:"comment:脚本类型"` ScriptId string `json:"script_id" gorm:"comment:引用脚本Id"` + ToSync bool `json:"to_sync" gorm:"type:tinyint(1);default:0;comment:是否需要更新引用脚本"` ScriptVersionId int `json:"script_version_id" gorm:"comment:引用脚本版本Id"` ScriptContent string `json:"script_content" gorm:"comment:脚本内容"` ScriptParam string `json:"script_param" gorm:"comment:脚本执行参数"` diff --git a/automation/server/internal/module/job_workflow/router.go b/automation/server/internal/module/job_workflow/router.go index bb5701f4e2452435a9068882989849da9dbec407..ec74e4ee8507ed6affaeba9798a43979cbdc01f6 100644 --- a/automation/server/internal/module/job_workflow/router.go +++ b/automation/server/internal/module/job_workflow/router.go @@ -14,5 +14,6 @@ func WorkflowHandler(router *gin.RouterGroup) { api.GET("/query", controller.QueryWorkflow) api.GET("/get", controller.GetWorkflowById) api.POST("/publish", controller.PublishWorkflow) + api.GET("/sync", controller.RelatedTaskWorkflowToSync) } }