package svc import ( "github.com/gin-gonic/gin" "xorm.io/xorm" "applet/app/cfg" "applet/app/db" "applet/app/md" "applet/app/utils" "applet/app/utils/cache" ) // 单挑记录获取 func SysCfgGet(c *gin.Context, key string) string { mid := c.GetString("mid") eg := db.DBs[mid] return db.SysCfgGetWithDb(eg, mid, key) } // 多条记录获取 func SysCfgFind(c *gin.Context, keys ...string) map[string]string { var masterId string if c == nil { masterId = "" } else { masterId = c.GetString("mid") } tmp := SysCfgFindComm(masterId, keys...) return tmp } // SysCfgGetByMasterId get one config by master id func SysCfgGetByMasterId(masterId, key string) string { res := SysCfgFindComm(masterId, key) if _, ok := res[key]; !ok { return "" } return res[key] } // SysCfgFindComm get cfg by master id func SysCfgFindComm(masterId string, keys ...string) map[string]string { var eg *xorm.Engine if masterId == "" { eg = db.Db } else { eg = db.DBs[masterId] } res := map[string]string{} //TODO::判断keys长度(大于10个直接查数据库) if len(keys) > 10 { cfgList, _ := db.SysCfgGetAll(eg) if cfgList == nil { return nil } for _, v := range *cfgList { res[v.Key] = v.Val } } else { for _, key := range keys { res[key] = db.SysCfgGetWithDb(eg, masterId, key) } } return res } // 多条记录获取 func EgSysCfgFind(keys ...string) map[string]string { var e *xorm.Engine res := map[string]string{} if len(res) == 0 { cfgList, _ := db.SysCfgGetAll(e) if cfgList == nil { return nil } for _, v := range *cfgList { res[v.Key] = v.Val } // 先不设置缓存 // cache.SetJson(md.KEY_SYS_CFG_CACHE, res, 60) } if len(keys) == 0 { return res } tmp := map[string]string{} for _, v := range keys { if val, ok := res[v]; ok { tmp[v] = val } else { tmp[v] = "" } } return tmp } // 清理系统配置信息 func SysCfgCleanCache() { cache.Del(md.KEY_SYS_CFG_CACHE) } // 写入系统设置 func SysCfgSet(c *gin.Context, key, val, memo string) bool { cfg, err := db.SysCfgGetOne(db.DBs[c.GetString("mid")], key) if err != nil || cfg == nil { return db.SysCfgInsert(db.DBs[c.GetString("mid")], key, val, memo) } if memo != "" && cfg.Memo != memo { cfg.Memo = memo } SysCfgCleanCache() return db.SysCfgUpdate(db.DBs[c.GetString("mid")], key, val, cfg.Memo) } // 多条记录获取 func SysCfgFindByIds(eg *xorm.Engine, keys ...string) map[string]string { key := utils.Md5(eg.DataSourceName() + md.KEY_SYS_CFG_CACHE) res := map[string]string{} c, ok := cfg.MemCache.Get(key).(map[string]string) if !ok || len(c) == 0 { cfgList, _ := db.DbsSysCfgGetAll(eg) if cfgList == nil { return nil } for _, v := range *cfgList { res[v.Key] = v.Val } cfg.MemCache.Put(key, res, 10) } else { res = c } if len(keys) == 0 { return res } tmp := map[string]string{} for _, v := range keys { if val, ok := res[v]; ok { tmp[v] = val } else { tmp[v] = "" } } return tmp } // 多条记录获取 func SysCfgFindByIdsToCache(eg *xorm.Engine, dbName string, keys ...string) map[string]string { key := utils.Md5(dbName + md.KEY_SYS_CFG_CACHE) res := map[string]string{} c, ok := cfg.MemCache.Get(key).(map[string]string) if !ok || len(c) == 0 { cfgList, _ := db.DbsSysCfgGetAll(eg) if cfgList == nil { return nil } for _, v := range *cfgList { res[v.Key] = v.Val } cfg.MemCache.Put(key, res, 1800) } else { res = c } if len(keys) == 0 { return res } tmp := map[string]string{} for _, v := range keys { if val, ok := res[v]; ok { tmp[v] = val } else { tmp[v] = "" } } return tmp }