2025-03-27 16:18:32 +08:00
|
|
|
|
package cacheservice
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
2025-04-03 18:32:23 +08:00
|
|
|
|
"errors"
|
2025-03-27 16:18:32 +08:00
|
|
|
|
"fmt"
|
|
|
|
|
|
"go-admin/app/admin/models"
|
|
|
|
|
|
"go-admin/common/const/rediskey"
|
2025-04-03 18:32:23 +08:00
|
|
|
|
"go-admin/common/global"
|
2025-03-27 16:18:32 +08:00
|
|
|
|
"go-admin/common/helper"
|
2025-04-03 18:32:23 +08:00
|
|
|
|
models2 "go-admin/models"
|
2025-03-27 16:18:32 +08:00
|
|
|
|
|
|
|
|
|
|
"github.com/bytedance/sonic"
|
|
|
|
|
|
"github.com/go-admin-team/go-admin-core/logger"
|
|
|
|
|
|
"gorm.io/gorm"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// 加载config缓存
|
|
|
|
|
|
func InitConfigCache(db *gorm.DB) {
|
|
|
|
|
|
datas := []models.SysConfig{}
|
|
|
|
|
|
db.Model(&models.SysConfig{}).Find(&datas)
|
|
|
|
|
|
for _, item := range datas {
|
|
|
|
|
|
cacheKey := fmt.Sprintf(rediskey.SysConfigKey, item.ConfigKey)
|
|
|
|
|
|
|
|
|
|
|
|
content, err := sonic.Marshal(item)
|
|
|
|
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
logger.Error(err)
|
|
|
|
|
|
continue
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if len(content) > 0 {
|
|
|
|
|
|
helper.DefaultRedis.SetString(cacheKey, item.ConfigValue)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取 sys config缓存
|
|
|
|
|
|
func GetConfigCacheByKey(db *gorm.DB, key string) models.SysConfig {
|
|
|
|
|
|
cacheKey := fmt.Sprintf(rediskey.SysConfigKey, key)
|
|
|
|
|
|
val, _ := helper.DefaultRedis.GetString(key)
|
|
|
|
|
|
result := models.SysConfig{}
|
|
|
|
|
|
|
|
|
|
|
|
if val == "" {
|
|
|
|
|
|
sonic.Unmarshal([]byte(val), &result)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if result.Id == 0 {
|
|
|
|
|
|
if err := db.Model(&result).Where("config_key = ?", key).First(&result).Error; err != nil {
|
|
|
|
|
|
logger.Errorf("GetConfigCacheByKey %s", err.Error())
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if result.Id > 0 {
|
|
|
|
|
|
content, err := sonic.Marshal(result)
|
|
|
|
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
logger.Errorf("GetConfigCacheByKey %s", err.Error())
|
|
|
|
|
|
} else {
|
|
|
|
|
|
helper.DefaultRedis.SetString(cacheKey, string(content))
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
}
|
2025-04-03 18:32:23 +08:00
|
|
|
|
|
|
|
|
|
|
// 获取缓存交易对
|
|
|
|
|
|
// symbolType 0-现货 1-合约
|
|
|
|
|
|
func GetTradeSet(exchangeType string, symbol string, symbolType int) (models2.TradeSet, error) {
|
2025-04-21 17:32:57 +08:00
|
|
|
|
// 定义返回结果和val变量
|
2025-04-03 18:32:23 +08:00
|
|
|
|
result := models2.TradeSet{}
|
|
|
|
|
|
val := ""
|
|
|
|
|
|
|
2025-04-21 17:32:57 +08:00
|
|
|
|
// 根据交易对类型选择不同的key
|
2025-04-03 18:32:23 +08:00
|
|
|
|
switch symbolType {
|
|
|
|
|
|
case 0:
|
|
|
|
|
|
key := fmt.Sprintf(global.TICKER_SPOT, exchangeType, symbol)
|
|
|
|
|
|
val, _ = helper.DefaultRedis.GetString(key)
|
|
|
|
|
|
case 1:
|
|
|
|
|
|
key := fmt.Sprintf(global.TICKER_FUTURES, exchangeType, symbol)
|
|
|
|
|
|
val, _ = helper.DefaultRedis.GetString(key)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-21 17:32:57 +08:00
|
|
|
|
// 如果val不为空,则解析val为TradeSet结构体
|
2025-04-03 18:32:23 +08:00
|
|
|
|
if val != "" {
|
|
|
|
|
|
if err := sonic.Unmarshal([]byte(val), &result); err != nil {
|
|
|
|
|
|
return result, err
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
2025-04-21 17:32:57 +08:00
|
|
|
|
// 如果val为空,则返回错误信息
|
2025-04-03 18:32:23 +08:00
|
|
|
|
return result, errors.New("未找到交易对信息")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-21 17:32:57 +08:00
|
|
|
|
// 返回结果
|
2025-04-03 18:32:23 +08:00
|
|
|
|
return result, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func GetSystemSetting(db *gorm.DB) (models.LineSystemSetting, error) {
|
|
|
|
|
|
key := fmt.Sprintf(rediskey.SystemSetting)
|
|
|
|
|
|
val, _ := helper.DefaultRedis.GetString(key)
|
|
|
|
|
|
setting := models.LineSystemSetting{}
|
|
|
|
|
|
|
|
|
|
|
|
if val != "" {
|
|
|
|
|
|
sonic.UnmarshalString(val, &setting)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if setting.Id > 0 {
|
|
|
|
|
|
return setting, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var err error
|
|
|
|
|
|
setting, err = ResetSystemSetting(db)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return setting, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return setting, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
func ResetSystemSetting(db *gorm.DB) (models.LineSystemSetting, error) {
|
|
|
|
|
|
setting := models.LineSystemSetting{}
|
|
|
|
|
|
if err := db.Model(&setting).First(&setting).Error; err != nil {
|
|
|
|
|
|
return setting, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
settVal, _ := sonic.MarshalString(&setting)
|
|
|
|
|
|
|
|
|
|
|
|
if settVal != "" {
|
|
|
|
|
|
if err := helper.DefaultRedis.SetString(rediskey.SystemSetting, settVal); err != nil {
|
|
|
|
|
|
logger.Error("redis添加系统设置失败", err)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return models.LineSystemSetting{}, nil
|
|
|
|
|
|
}
|