代码拉取完成,页面将自动刷新
// 数据库配置的读写支持
package xgodbconfig
import (
"fmt"
"sync"
"gorm.io/gorm"
)
// 数据库相关配置
type Config struct {
DB *gorm.DB
ConfigTable string // 配置表名称
ConfigUserTable string // 用户配置存储表
ConfigureGroupTable string // 配置项分组表表明
ConfigEdit func(name string) error // 配置项修改的回调函数
listen map[string][]func(name string) // 配置项变动后的监听回调
ConfigureUsersTable string // 配置表名称,参考注册表形式 "A/B": xxxx
UsedPrefix map[string]string // 规定占用分组下标及相关释义【仅用于提供说明,不作为实际配置】
EmptyPath string // 空路径时【//或者/结尾时填补的字符】
CacheUsers sync.Map
Cache sync.Map
CacheUser sync.Map
}
// 默认配置表所在的配置
var _default Config = Config{
ConfigTable: "configure",
ConfigUserTable: "configure_user",
ConfigureGroupTable: "configure_group",
ConfigureUsersTable: "configure_users",
EmptyPath: "default",
UsedPrefix: map[string]string{"SYS": "系统配置项"},
}
// 注入配置项
func Regedit(c *Config) {
if c == nil {
return
}
if c.DB != nil {
_default.DB = c.DB
}
if c.ConfigTable != "" {
_default.ConfigTable = c.ConfigTable
}
if c.ConfigUserTable != "" {
_default.ConfigUserTable = c.ConfigUserTable
}
if c.ConfigureGroupTable != "" {
_default.ConfigureGroupTable = c.ConfigureGroupTable
}
if c.ConfigEdit != nil {
_default.ConfigEdit = c.ConfigEdit
}
if c.ConfigureUsersTable != "" {
_default.ConfigureUsersTable = c.ConfigureUsersTable
}
if c.EmptyPath != "" {
_default.EmptyPath = c.EmptyPath
}
if len(c.UsedPrefix) != 0 {
for i, v := range c.UsedPrefix {
_default.UsedPrefix[i] = v
}
}
// 生成默认配置表
if _default.DB != nil {
_default.DB.AutoMigrate(&Configure{}, &ConfigureUser{}, &ConfigureGroup{}, &ConfigureUsers{})
}
}
// 配置项信息存储表
type Configure struct {
Id uint `gorm:"column:id;not null;autoIncrement;primary_key" json:"id" form:"id"`
NameKey string `gorm:"column:name_key;type:varchar(100);unique;comment:配置项key" json:"name_key" form:"name_key"` //配置项key
NameCn string `gorm:"column:name_cn;type:varchar(200);comment:配置项名称" json:"name_cn" form:"name_cn"` //配置项名称
NameGroup string `gorm:"column:name_group;type:varchar(100);index;comment:配置项组" json:"name_group" form:"name_group"` //配置项组
Types string `gorm:"column:types;type:varchar(20);index;comment:配置项类型" json:"types" form:"types"` //配置项类型
Desc string `gorm:"column:desc;type:text;comment:配置项介绍信息" json:"desc" form:"desc"` //配置项介绍信息
ValueBool uint8 `gorm:"column:value_bool;type:tinyint unsigned;default:0;comment:bool类型的值存储 0-False 1-True" json:"value_bool" form:"value_bool"` // bool类型的值存储 uint8
ValueString string `gorm:"column:value_string;type:text;comment:字符串类型配置" json:"value_string" form:"value_string"` // 字符串类型配置
ValueInt int64 `gorm:"column:value_int;type:bigint;default:0;comment:int类型配置" json:"value_int,string" form:"value_int"` // int类型配置
ValueFloat float64 `gorm:"column:value_float;type:double;default:0;comment:float类型配置" json:"value_float" form:"value_float"` // float类型配置
EnumSelect string `gorm:"column:enum_select;type:text;comment:下拉列表,多项使用,分割key和key_cn使用:分割,下拉选择的值存储在value_string中" json:"enum_select" form:"enum_select"` //下拉列表,多项使用,分割key和key_cn使用:分割,下拉选择的值存储在value_string中
CreatedAt string `gorm:"column:created_at;type:datetime;comment:创建时间" json:"created_at" form:"created_at"` //创建时间
UpdatedAt string `gorm:"column:updated_at;type:datetime;comment:更新时间" json:"updated_at" form:"updated_at"` //更新时间
}
// 表名
func (c *Configure) TableName() string {
return _default.ConfigTable
}
// 用户个性化配置项存储表
type ConfigureUser struct {
UserId uint `gorm:"column:user_id;primary_key;comment:用户ID" json:"user_id" form:"user_id"` //用户ID
Configure string `gorm:"column:configure;type:longtext;comment:配置信息JSON串" json:"configure" form:"configure"` //配置信息JSON串
}
func (c *ConfigureUser) TableName() string {
return _default.ConfigUserTable
}
// 配置项分组信息
type ConfigureGroup struct {
Id uint `gorm:"column:id;primary_key;NOT NULL" json:"id" form:"id"` // 自增ID
Fid uint `gorm:"column:fid;default:0;NOT NULL;comment:'上级分组ID'" json:"fid" form:"fid"` // 上级分组ID
NameGroup string `gorm:"column:name_group;NOT NULL;comment:'分组名_key值'" json:"name_group" form:"name_group"` // 分组KEY下标
NameGroupCn string `gorm:"column:name_group_cn;NOT NULL;comment:'分组值-中文名称'" json:"name_group_cn" form:"name_group_cn"` // 分组名称
}
func (c *ConfigureGroup) TableName() string {
return _default.ConfigureGroupTable
}
// 配置项信息存储表
type ConfigureUsers struct {
Id uint64 `gorm:"column:id;type:bigint unsigned;not null;autoIncrement;primary_key" json:"-" form:"-"`
Uid uint `gorm:"column:uid;type:int unsigned;default:0;comment:用户ID" json:"-" form:"-"` // 用户ID
Fid uint64 `gorm:"column:fid;type:bigint unsigned;default:0;comment:上级配置项" json:"-" form:"-"` // 上级配置项ID
Fids string `gorm:"column:fids;type:text;comment:上级ID列表,拼接" json:"-" form:"-"` // 上级配置项ID列表,拼接
Name string `gorm:"column:name;type:varchar(100);index;comment:配置项key" json:"name" form:"name"` //配置项key
Types string `gorm:"column:types;type:varchar(20);index;comment:配置项类型" json:"types" form:"types"` //配置项类型
ValueBool uint8 `gorm:"column:value_bool;type:tinyint unsigned;default:0;comment:bool类型的值存储" json:"value_bool" form:"value_bool"` // bool类型的值存储 uint8
ValueString string `gorm:"column:value_string;type:text;comment:字符串类型配置" json:"value_string" form:"value_string"` // 字符串类型配置
ValueInt int64 `gorm:"column:value_int;type:bigint;default:0;comment:int类型配置" json:"value_int,string" form:"value_int"` // int类型配置
ValueFloat float64 `gorm:"column:value_float;type:double;default:0;comment:float类型配置" json:"value_float" form:"value_float"` // float类型配置
CreatedAt string `gorm:"column:created_at;type:datetime;comment:创建时间" json:"created_at" form:"created_at"` //创建时间
UpdatedAt string `gorm:"column:updated_at;type:datetime;comment:更新时间" json:"updated_at" form:"updated_at"` //更新时间
}
// 表名
func (c *ConfigureUsers) TableName() string {
return _default.ConfigureUsersTable
}
// 获取系统占用的配置项标识
func GetUsedPrefix() map[string]string {
return _default.UsedPrefix
}
// 配置项修改函数,用于调用外部的修改后触发操作
//
// name 修改的配置项名称
func configEdit(name string) {
// 检测修改的name是否为配置项的几个
switch name {
case "FRAM_SYNC_URL", "FRAM_SYNC_URL_AES", "FRAM_SYNC_DOMAIN", "FRAM_SYNC_DOMAIN_AES":
return
}
if _default.ConfigEdit != nil {
go _default.ConfigEdit(name)
}
// 进行函数回调
if f, ok := _default.listen[name]; ok {
for i := 0; i < len(f); i++ {
go f[i](name)
}
}
}
// 追加变量变更通知函数
//
// name 监听的配置项名称
// fun 执行的回调名称
func Listen(name string, fun func(n string)) {
if fun == nil {
return
}
if _default.listen == nil {
_default.listen = map[string][]func(name string){}
}
if _, ok := _default.listen[name]; !ok {
_default.listen[name] = []func(n string){}
}
_default.listen[name] = append(_default.listen[name], fun)
}
// 追加变量变更通知函数-多变量添加
//
// name 监听配置项名称
// fun 执行回调的名称
func Listens(name []string, fun func(n string)) {
for i := 0; i < len(name); i++ {
Listen(name[i], fun)
}
}
// 获取缓存下标
//
// uid 用户ID
// key 配置项key
func key(uid uint, key string) string {
return fmt.Sprintf("%d_%s", uid, key)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。