Files
exchange_go/config/serverinit/business_init.go

191 lines
4.7 KiB
Go
Raw Normal View History

2025-02-06 11:14:33 +08:00
package serverinit
import (
"fmt"
"go-admin/app/admin/models"
"go-admin/app/admin/service"
"go-admin/common/const/rediskey"
"go-admin/common/helper"
"go-admin/config"
"go-admin/pkg/httputils"
"go-admin/services/binanceservice"
2025-03-27 16:18:32 +08:00
"go-admin/services/cacheservice"
2025-02-06 11:14:33 +08:00
"go-admin/services/futureservice"
"go-admin/services/scriptservice"
"os"
2025-04-12 18:32:36 +08:00
"time"
2025-02-06 11:14:33 +08:00
"github.com/bytedance/sonic"
"github.com/go-admin-team/go-admin-core/logger"
"github.com/go-admin-team/go-admin-core/sdk"
"github.com/robfig/cron/v3"
"gorm.io/gorm"
)
// 业务初始化
func BusinessInit(db *gorm.DB) {
httputils.InitProxy(config.ExtConfig.ProxyUrl)
if err := loadApiUser(db); err != nil { //加载api用户
os.Exit(-1)
}
2025-07-26 09:09:09 +08:00
lineApiService := service.LineApiUser{}
lineApiService.Orm = db
lineApiService.Log = logger.NewHelper(sdk.Runtime.GetLogger()).WithFields(map[string]interface{}{})
if err := lineApiService.CacheRelation(); err != nil {
lineApiService.Log.Errorf("初始化api关系失败 err:%v", err)
os.Exit(-1)
}
reverseSettingService := service.LineReverseSetting{}
reverseSettingService.Orm = db
reverseSettingService.Log = lineApiService.Log
if err := reverseSettingService.SaveCache(models.LineReverseSetting{}); err != nil {
reverseSettingService.Log.Errorf("初始化反单设置失败 err:%v", err)
os.Exit(-1)
}
2025-03-27 16:18:32 +08:00
//初始化参数配置
cacheservice.InitConfigCache(db)
//初始化可缓存价格交易对
symbolPriceService := service.LineSymbolPrice{}
symbolPriceService.Orm = db
symbolPriceService.Log = logger.NewHelper(sdk.Runtime.GetLogger()).WithFields(map[string]interface{}{})
symbolPriceService.InitCache()
2025-03-27 16:18:32 +08:00
2025-04-12 18:32:36 +08:00
//清理交易对缓存价格
clearSymbolPrice()
2025-02-06 11:14:33 +08:00
//初始化订单配置
cacheservice.ResetSystemSetting(db)
2025-03-27 16:18:32 +08:00
lineApiUser := service.LineApiUser{}
lineApiUser.Orm = db
if err := lineApiUser.InitCache(); err != nil {
logger.Errorf("初始化api用户失败:%v", err)
os.Exit(-1)
}
2025-02-06 11:14:33 +08:00
//币安 现货交易对
SpotCurrencyInit()
//币安 合约交易对
FuturesInit()
//第一次初始化交易对价格
spotApi := binanceservice.SpotRestApi{}
futApi := binanceservice.FutRestApi{}
spotApi.Ticker()
futApi.Ticker()
//现货 订阅
SpotSubscribeInit("normal")
//合约订阅
futureservice.StartBinanceProWs("normal")
//定时任务
RunSpotJobs(db)
}
// 开启现货ws监听
func SpotWsInit() {
//启动websocket服务
//go func() {
// err := wsservice.StartServer(":3333")
// if err != nil {
// log.Info("wsservice.StartServer", zap.Error(err))
//
// _, cancel := context.WithTimeout(context.Background(), 5*time.Second)
// cancel()
// }
//}()
}
// 定义任务
func RunSpotJobs(db *gorm.DB) {
cronJob := cron.New()
//添加任务 同步交易对行情
// spotApi := spotservice.SpotRestApi{}
// futApi := futureservice.FutRestApi{}
// _, err := cronJob.AddFunc("@every 10s", func() {
// //BuySellOrderNew(db)
// spotApi.Ticker()
// futApi.Ticker()
// })
// if err != nil {
// return
// }
//定时执行脚本任务
_, err := cronJob.AddFunc("@every 3s", func() {
order := scriptservice.PreOrder{}
order.AddOrder(db)
})
if err != nil {
return
}
//启动
cronJob.Start()
}
/*
加载api user
*/
func loadApiUser(db *gorm.DB) error {
users := make([]models.LineApiUser, 0)
if err := db.Model(&models.LineApiUser{}).Where("open_status =1").Find(&users).Error; err != nil {
2025-03-27 16:18:32 +08:00
logger.Error("loadApiUser", err)
2025-02-06 11:14:33 +08:00
return err
}
for _, user := range users {
key := fmt.Sprintf(rediskey.API_USER, user.Id)
val, _ := sonic.MarshalString(&user)
if val != "" {
if err := helper.DefaultRedis.SetString(key, val); err != nil {
2025-03-27 16:18:32 +08:00
logger.Error("loadApiUser 保存redis", err)
2025-02-06 11:14:33 +08:00
}
}
}
groups := make([]models.LineApiGroup, 0)
if err := db.Model(&models.LineApiGroup{}).Find(&groups).Error; err != nil {
2025-03-27 16:18:32 +08:00
logger.Error("loadApiGroup", err)
2025-02-06 11:14:33 +08:00
return err
}
apiGroupService := service.LineApiGroup{}
apiGroupService.Log = logger.NewHelper(sdk.Runtime.GetLogger()).WithFields(map[string]interface{}{})
for _, group := range groups {
service.SetApiGroupCache(group)
}
return nil
}
2025-04-12 18:32:36 +08:00
// 清理交易对价格缓存
func clearSymbolPrice() error {
spotAll, _ := helper.DefaultRedis.ScanKeys("spot_ticker_last_price:*")
futAllKey, _ := helper.DefaultRedis.ScanKeys("fut_ticker_last_price:*")
beforeTimeUtc := time.Now().UnixMilli()
for _, item := range spotAll {
if _, err := helper.DefaultRedis.RemoveBeforeScore(item, float64(beforeTimeUtc)); err != nil {
logger.Error("现货 清理交易对价格缓存失败:", err)
}
}
for _, item := range futAllKey {
if _, err := helper.DefaultRedis.RemoveBeforeScore(item, float64(beforeTimeUtc)); err != nil {
logger.Error("合约 清理交易对价格缓存失败:", err)
}
}
return nil
}