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)
|
2025-04-03 18:32:23 +08:00
|
|
|
|
//初始化可缓存价格交易对
|
|
|
|
|
|
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
|
|
|
|
//初始化订单配置
|
2025-04-03 18:32:23 +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
|
|
|
|
|
|
}
|