From 7b4455dddc5f932e1cf06d0919e9ecad40d32b20 Mon Sep 17 00:00:00 2001 From: zhanghan Date: Thu, 9 Oct 2025 15:56:36 +0800 Subject: [PATCH] Provide the function of editing and arranging --- .../job_workflow/controller/template.go | 13 +++ .../module/job_workflow/dao/template.go | 95 +++++++++++++++++++ .../internal/module/job_workflow/router.go | 1 + .../module/job_workflow/service/template.go | 6 ++ 4 files changed, 115 insertions(+) diff --git a/automation/server/internal/module/job_workflow/controller/template.go b/automation/server/internal/module/job_workflow/controller/template.go index b1285f53..9cc2c5d6 100644 --- a/automation/server/internal/module/job_workflow/controller/template.go +++ b/automation/server/internal/module/job_workflow/controller/template.go @@ -20,6 +20,19 @@ func CreateTemplate(c *gin.Context) { response.Success(c, nil, "success") } +func UpdateTemplate(c *gin.Context) { + var template model.TaskTemplateDTO + if err := c.ShouldBindJSON(&template); err != nil { + response.Fail(c, nil, err.Error()) + return + } + if err := service.UpdateTemplate(&template); err != nil { + response.Fail(c, nil, err.Error()) + return + } + response.Success(c, nil, "success") +} + func QueryTemplate(c *gin.Context) { query := &response.PagedQuery{} if err := c.ShouldBindQuery(query); err != nil { diff --git a/automation/server/internal/module/job_workflow/dao/template.go b/automation/server/internal/module/job_workflow/dao/template.go index 7231868b..4493a561 100644 --- a/automation/server/internal/module/job_workflow/dao/template.go +++ b/automation/server/internal/module/job_workflow/dao/template.go @@ -93,6 +93,101 @@ func CreateTemplate(dto *model.TaskTemplateDTO) error { }) } +func UpdateTemplate(dto *model.TaskTemplateDTO) error { + return global.App.MySQL.Transaction(func(tx *gorm.DB) error { + templateId := dto.Template.ID + // 1. 更新模板基本信息 + template := &model.TaskTemplate{ + Name: dto.Template.Name, + Description: dto.Template.Description, + Tags: dto.Template.Tags, + ModifyUser: dto.Template.ModifyUser, + ModifyTime: time.Now().Format("2006-01-02 15:04:05"), + } + if err := tx.Model(&model.TaskTemplate{}).Where("id = ?", templateId).Updates(template).Error; err != nil { + return err + } + + // 2. 删除旧的输入参数,插入新的输入参数 + if err := tx.Where("template_id = ?", templateId).Delete(&model.TaskTemplateParams{}).Error; err != nil { + return err + } + if len(dto.Params) > 0 { + for i := range dto.Params { + dto.Params[i].TemplateId = templateId + } + if err := tx.Create(&dto.Params).Error; err != nil { + return err + } + } + // 3. 删除旧的输出参数,插入新的输出参数 + if err := tx.Where("template_id = ?", templateId).Delete(&model.TaskTemplateOutputParams{}).Error; err != nil { + return err + } + if len(dto.OutputParams) > 0 { + for i := range dto.OutputParams { + dto.OutputParams[i].TemplateId = templateId + } + if err := tx.Create(&dto.OutputParams).Error; err != nil { + return err + } + } + + // 4. 删除旧的步骤,插入新的步骤 & 脚本 + if err := tx.Where("template_id = ?", templateId).Delete(&model.TaskTemplateStep{}).Error; err != nil { + return err + } + if len(dto.Steps) > 0 { + // 4.1 按 stepNum 排序,补全链路 + sort.Slice(dto.Steps, func(i, j int) bool { + return dto.Steps[i].StepNum < dto.Steps[j].StepNum + }) + + for i := range dto.Steps { + dto.Steps[i].TemplateId = templateId + if i > 0 { + dto.Steps[i].PreviousStepNum = dto.Steps[i-1].StepNum + } + if i < len(dto.Steps)-1 { + dto.Steps[i].NextStepNum = dto.Steps[i+1].StepNum + } + } + + if err := tx.Create(&dto.Steps).Error; err != nil { + return err + } + + // 4.2 设置模板的首尾步骤 + template.FirstStepNum = dto.Steps[0].StepNum + template.LastStepNum = dto.Steps[len(dto.Steps)-1].StepNum + // 4.3 回写模板首尾步骤 + if err := tx.Model(&model.TaskTemplate{}). + Where("id = ?", templateId). + Updates(map[string]interface{}{ + "first_step_num": template.FirstStepNum, + "last_step_num": template.LastStepNum, + }).Error; err != nil { + return err + } + } + // 5. 删除旧的脚本,插入新的脚本 + if err := tx.Where("template_id = ?", templateId).Delete(&model.TaskTemplateStepScript{}).Error; err != nil { + return err + } + + if len(dto.Scripts) > 0 { + for i := range dto.Scripts { + dto.Scripts[i].TemplateId = templateId + } + if err := tx.Create(&dto.Scripts).Error; err != nil { + return err + } + } + + return nil + }) +} + func QueryTemplates(query *response.PagedQuery) ([]model.TaskTemplate, int, error) { var templates []model.TaskTemplate q := global.App.MySQL.Model(&model.TaskTemplate{}).Limit(query.PageSize).Offset((query.CurrentPage - 1) * query.PageSize) diff --git a/automation/server/internal/module/job_workflow/router.go b/automation/server/internal/module/job_workflow/router.go index 03e1724b..d01cc13f 100644 --- a/automation/server/internal/module/job_workflow/router.go +++ b/automation/server/internal/module/job_workflow/router.go @@ -9,6 +9,7 @@ func WorkflowHandler(router *gin.RouterGroup) { api := router.Group("/workflows") { api.POST("/create", controller.CreateTemplate) + api.POST("/update", controller.UpdateTemplate) api.GET("/query", controller.QueryTemplate) api.GET("/get", controller.GetTemplateById) } diff --git a/automation/server/internal/module/job_workflow/service/template.go b/automation/server/internal/module/job_workflow/service/template.go index 77b299ce..63255495 100644 --- a/automation/server/internal/module/job_workflow/service/template.go +++ b/automation/server/internal/module/job_workflow/service/template.go @@ -12,6 +12,12 @@ func CreateTemplate(data *model.TaskTemplateDTO) error { } return nil } +func UpdateTemplate(data *model.TaskTemplateDTO) error { + if err := dao.UpdateTemplate(data); err != nil { + return err + } + return nil +} func QueryTemplate(query *response.PagedQuery) ([]model.TaskTemplate, int, error) { templates, total, err := dao.QueryTemplates(query) -- Gitee