package check import ( "bsm/full/module/base/initial/internal/impl" "bsm/full/module/base/initial/internal/models" "git.apinb.com/bsm-sdk/core/vars" "gorm.io/gorm/clause" ) // GetConfigCache 获取配置缓存 func GetConfigByCache(app, os string) ([]*models.InitialConfig, error) { var configs []*models.InitialConfig key := impl.RedisService.BuildKey("config", app, os) err := impl.RedisService.Get(key, &configs) if err == nil { return configs, nil } err = impl.DBService.Where("app = ? AND (os = ? OR os = ?)", app, os, "ALL"). // 使用结构化排序并以占位符绑定 os,禁止把请求参数拼接进 ORDER BY Order(clause.OrderBy{Expression: clause.Expr{ SQL: "CASE WHEN os = ? THEN 0 ELSE 1 END, id DESC", Vars: []any{os}, }}). Find(&configs).Error if err != nil { return nil, err } err = impl.RedisService.Set(key, configs, vars.DefaultTTL) return configs, err }