50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
|
package service
|
|||
|
|
|||
|
import (
|
|||
|
"fmt"
|
|||
|
"strings"
|
|||
|
"yitao/model"
|
|||
|
|
|||
|
"encoding/json"
|
|||
|
)
|
|||
|
|
|||
|
type CommonService struct{}
|
|||
|
|
|||
|
type TypeSetting map[string]string
|
|||
|
type TypeSettings map[string]TypeSetting
|
|||
|
|
|||
|
func (c *CommonService) GetSetting(key string) TypeSetting {
|
|||
|
settings_json := model.RedisRemember("nexus_settings_in_nexus", 600, func() interface{} {
|
|||
|
j, _ := json.Marshal(c.GetSettingsFromDB())
|
|||
|
return j
|
|||
|
})
|
|||
|
m := make(TypeSettings)
|
|||
|
json.Unmarshal([]byte(settings_json), &m)
|
|||
|
return m[key]
|
|||
|
}
|
|||
|
|
|||
|
func (c *CommonService) GetSettingsFromDB() TypeSettings {
|
|||
|
// settings 表中的两个字段:name 和 value,把他们读取出来再组装成一个 map
|
|||
|
var results []struct {
|
|||
|
Name string
|
|||
|
Value string
|
|||
|
}
|
|||
|
model.DB.Table("settings").Select("name", "value").Find(&results)
|
|||
|
// 从 results 中取出 name 和 value 组装成一个 map
|
|||
|
// 其中 name 的格式是 xxx.yyy ,那么就是一个嵌套的 map
|
|||
|
settings := make(TypeSettings)
|
|||
|
for _, result := range results {
|
|||
|
keys := strings.Split(result.Name, ".")
|
|||
|
if len(keys) == 1 {
|
|||
|
settings[keys[0]] = TypeSetting{keys[0]: result.Value}
|
|||
|
} else {
|
|||
|
if _, ok := settings[keys[0]]; !ok {
|
|||
|
settings[keys[0]] = TypeSetting{}
|
|||
|
}
|
|||
|
settings[keys[0]][keys[1]] = result.Value
|
|||
|
}
|
|||
|
}
|
|||
|
fmt.Printf("settings: %v\n", settings)
|
|||
|
return settings
|
|||
|
}
|