package models import ( "IotAdmin/common/models" "IotAdmin/core/logger" "bytes" "encoding/json" "fmt" "os" "regexp" "strings" "IotAdmin/core/sdk" "IotAdmin/core/sdk/runtime" "IotAdmin/core/storage" "github.com/bitly/go-simplejson" ) type SysApi struct { Id int `json:"id" gorm:"primaryKey;autoIncrement;comment:主键编码"` Handle string `json:"handle" gorm:"size:128;comment:handle"` Title string `json:"title" gorm:"size:128;comment:标题"` Path string `json:"path" gorm:"size:128;comment:地址"` Action string `json:"action" gorm:"size:16;comment:请求类型"` Type string `json:"type" gorm:"size:16;comment:接口类型"` models.ControlBy models.ModelTime } func (*SysApi) TableName() string { return "sys_api" } func (e *SysApi) Generate() models.ActiveRecord { o := *e return &o } func (e *SysApi) GetId() interface{} { return e.Id } func SaveSysApi(message storage.Message) (err error) { var rb []byte rb, err = json.Marshal(message.GetValues()) if err != nil { err = fmt.Errorf("json Marshal error, %v", err.Error()) return err } var l runtime.Routers err = json.Unmarshal(rb, &l) if err != nil { err = fmt.Errorf("json Unmarshal error, %s", err.Error()) return err } dbList := sdk.Runtime.GetDb() // 根据接口方法注释里的@Summary填充接口名称,适用于代码生成器 // 可在此处增加配置路径前缀的if判断,只对代码生成的自建应用进行定向的接口名称填充 jsonFile, _ := os.ReadFile("docs/admin/admin_swagger.json") jsonData, _ := simplejson.NewFromReader(bytes.NewReader(jsonFile)) for _, d := range dbList { for _, v := range l.List { if v.HttpMethod != "HEAD" || strings.Contains(v.RelativePath, "/swagger/") || strings.Contains(v.RelativePath, "/static/") || strings.Contains(v.RelativePath, "/form-generator/") || strings.Contains(v.RelativePath, "/sys/tables") { urlPath := v.RelativePath idPatten := "(.*)/:(\\w+)" // 正则替换,把:id换成{id} reg, _ := regexp.Compile(idPatten) if reg.MatchString(urlPath) { urlPath = reg.ReplaceAllString(v.RelativePath, "${1}/{${2}}") // 把:id换成{id} } temp := jsonData.Get("paths").Get(urlPath).Get(strings.ToLower(v.HttpMethod)) apiTitle, _ := temp.Get("summary").String() if apiTitle == "" { logger.Debugf("ApiTitle is empty, urlPath: %s ", urlPath) continue } api := &SysApi{} err := d.Debug().Where(SysApi{Path: v.RelativePath, Action: v.HttpMethod}). Assign(SysApi{Handle: v.Handler}). FirstOrCreate(api). Error if err == nil && api.Title == "" { api.Title = apiTitle err = d.Debug().Model(api).Updates(api).Error } if err != nil { err := fmt.Errorf("Models SaveSysApi error: %s \r\n ", err.Error()) return err } } } } return nil }