package db import ( "applet/app/db/model" "applet/app/md" "applet/app/utils/cache" "applet/app/utils/logx" "fmt" "xorm.io/xorm" ) // 系统配置get func SysCfgGetAll(Db *xorm.Engine) (*[]model.SysCfg, error) { var cfgList []model.SysCfg if err := Db.Cols("key,val,memo").Find(&cfgList); err != nil { return nil, logx.Error(err) } return &cfgList, nil } // 获取一条记录 func SysCfgGetOne(Db *xorm.Engine, key string) (*model.SysCfg, error) { var cfgList model.SysCfg if has, err := Db.Where("`key`=?", key).Get(&cfgList); err != nil || has == false { return nil, logx.Error(err) } return &cfgList, nil } func SysCfgGetOneData(Db *xorm.Engine, key string) string { var cfgList model.SysCfg if has, err := Db.Where("`key`=?", key).Get(&cfgList); err != nil || has == false { return "" } return cfgList.Val } // 返回最后插入id func SysCfgInsert(Db *xorm.Engine, key, val, memo string) bool { cfg := model.SysCfg{Key: key, Val: val, Memo: memo} _, err := Db.InsertOne(&cfg) if err != nil { logx.Error(err) return false } return true } func SysCfgUpdate(Db *xorm.Engine, key, val, memo string) bool { cfg := model.SysCfg{Key: key, Val: val, Memo: memo} _, err := Db.Where("`key`=?", key).Cols("val,memo").Update(&cfg) if err != nil { logx.Error(err) return false } return true } // 单条记录获取DB func SysCfgGetWithDb(eg *xorm.Engine, masterId string, HKey string) string { cacheKey := fmt.Sprintf(md.AppCfgCacheKey, masterId) + HKey get, err := cache.GetString(cacheKey) if err != nil || get == "" { cfg, err := SysCfgGetOne(eg, HKey) if err != nil || cfg == nil { _ = logx.Error(err) return "" } // key是否存在 cacheKeyExist := false if cache.Exists(cacheKey) { cacheKeyExist = true } // 设置缓存 _, err = cache.SetEx(cacheKey, cfg.Val, 30) if err != nil { _ = logx.Error(err) return "" } if !cacheKeyExist { // 如果是首次设置 设置过期时间 _, err := cache.Expire(cacheKey, md.CfgCacheTime) if err != nil { _ = logx.Error(err) return "" } } return cfg.Val } return get } func SysCfgGetWithStr(eg *xorm.Engine, masterId string, HKey string) string { cfg, err := SysCfgGetOne(eg, HKey) if err != nil || cfg == nil { _ = logx.Error(err) return "" } return cfg.Val } // 多条记录获取DB func SysCfgFindWithDb(eg *xorm.Engine, masterId string, keys ...string) map[string]string { res := map[string]string{} //TODO::判断keys长度(大于10个直接查数据库) if len(keys) > 10 { cfgList, _ := SysCfgGetAll(eg) if cfgList == nil { return nil } for _, v := range *cfgList { res[v.Key] = v.Val } } else { for _, key := range keys { res[key] = SysCfgGetWithDb(eg, masterId, key) } } return res }