35 lines
918 B
Go
35 lines
918 B
Go
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
|
||
}
|