1
This commit is contained in:
77
config/serverinit/binance_futures_init.go
Normal file
77
config/serverinit/binance_futures_init.go
Normal file
@ -0,0 +1,77 @@
|
||||
package serverinit
|
||||
|
||||
import (
|
||||
"go-admin/config"
|
||||
"go-admin/models"
|
||||
"go-admin/pkg/httputils"
|
||||
"go-admin/services/binanceservice"
|
||||
"go-admin/services/futureservice"
|
||||
|
||||
log "github.com/go-admin-team/go-admin-core/logger"
|
||||
"github.com/robfig/cron/v3"
|
||||
)
|
||||
|
||||
func FuturesInit() error {
|
||||
httputils.InitProxy(config.ExtConfig.ProxyUrl)
|
||||
|
||||
//FutFundingRate()
|
||||
|
||||
log.Info("初始化交易对-开始")
|
||||
data := make(map[string]models.TradeSet, 0)
|
||||
err := binanceservice.GetAndReloadSymbols(&data)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Info("初始化交易对-结束")
|
||||
|
||||
log.Info("初始化24h行情-开始")
|
||||
_, err = binanceservice.InitSymbolsTicker24h(&data)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Info("初始化24h行情-结束")
|
||||
|
||||
log.Info("订阅合约-开始")
|
||||
go futureservice.StartBinanceProWs("normal")
|
||||
|
||||
//定时任务
|
||||
RunJobs()
|
||||
return nil
|
||||
}
|
||||
|
||||
/*
|
||||
缓存合约资金费率
|
||||
*/
|
||||
func FutFundingRate() error {
|
||||
log.Info("初始化 合约-费率 开始")
|
||||
_, err := binanceservice.GetPremiumIndex()
|
||||
|
||||
if err != nil {
|
||||
log.Error("初始化 合约-费率 失败:", err)
|
||||
return err
|
||||
}
|
||||
|
||||
log.Info("初始化 合约-费率 成功")
|
||||
return nil
|
||||
}
|
||||
|
||||
// 定义任务
|
||||
func RunJobs() {
|
||||
cronJob := cron.New()
|
||||
|
||||
//添加任务
|
||||
//_, err := cronJob.AddFunc("@every 1h", func() {
|
||||
// FutFundingRate()
|
||||
//})
|
||||
//
|
||||
//if err != nil {
|
||||
// fmt.Println("添加定时获取资金费率任务失败")
|
||||
//} else {
|
||||
// fmt.Println("添加定时获取资金费率任务成功")
|
||||
//}
|
||||
|
||||
//启动
|
||||
cronJob.Start()
|
||||
}
|
||||
30
config/serverinit/binance_spot_init.go
Normal file
30
config/serverinit/binance_spot_init.go
Normal file
@ -0,0 +1,30 @@
|
||||
package serverinit
|
||||
|
||||
import (
|
||||
"go-admin/models"
|
||||
"go-admin/pkg/utility"
|
||||
"go-admin/services/binanceservice"
|
||||
"go-admin/services/spotservice"
|
||||
"os"
|
||||
)
|
||||
|
||||
/*
|
||||
初始化-币安现货交易对24h行情
|
||||
*/
|
||||
func SpotCurrencyInit() (map[string]models.TradeSet, []string) {
|
||||
result, symbols, err := binanceservice.GetSpotSymbols()
|
||||
|
||||
if err != nil {
|
||||
os.Exit(-1)
|
||||
}
|
||||
|
||||
return result, symbols
|
||||
}
|
||||
|
||||
/*
|
||||
初始化现货订阅
|
||||
- @workType 工作类型 normal-正常任务,trigger-主动触发
|
||||
*/
|
||||
func SpotSubscribeInit(workType string) {
|
||||
utility.SafeGoParam(spotservice.StartBinanceProWs, workType)
|
||||
}
|
||||
134
config/serverinit/business_init.go
Normal file
134
config/serverinit/business_init.go
Normal file
@ -0,0 +1,134 @@
|
||||
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"
|
||||
"go-admin/services/futureservice"
|
||||
"go-admin/services/scriptservice"
|
||||
"os"
|
||||
|
||||
"github.com/bytedance/sonic"
|
||||
"github.com/go-admin-team/go-admin-core/logger"
|
||||
log "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)
|
||||
}
|
||||
|
||||
//初始化订单配置
|
||||
binanceservice.ResetSystemSetting(db)
|
||||
|
||||
//币安 现货交易对
|
||||
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 {
|
||||
log.Error("loadApiUser:", err)
|
||||
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 {
|
||||
log.Error("loadApiUser 保存redis:", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
groups := make([]models.LineApiGroup, 0)
|
||||
|
||||
if err := db.Model(&models.LineApiGroup{}).Find(&groups).Error; err != nil {
|
||||
log.Error("loadApiGroup:", err)
|
||||
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
|
||||
}
|
||||
15
config/serverinit/closeposition_init.go
Normal file
15
config/serverinit/closeposition_init.go
Normal file
@ -0,0 +1,15 @@
|
||||
package serverinit
|
||||
|
||||
import (
|
||||
"go-admin/config"
|
||||
"go-admin/pkg/httputils"
|
||||
"go-admin/services/futureservice"
|
||||
)
|
||||
|
||||
func ClosePositionInit() {
|
||||
httputils.InitProxy(config.ExtConfig.ProxyUrl)
|
||||
//现货 订阅
|
||||
SpotSubscribeInit("trigger")
|
||||
//合约订阅
|
||||
futureservice.StartBinanceProWs("trigger")
|
||||
}
|
||||
85
config/serverinit/usersubscribeinit.go
Normal file
85
config/serverinit/usersubscribeinit.go
Normal file
@ -0,0 +1,85 @@
|
||||
package serverinit
|
||||
|
||||
import (
|
||||
"context"
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/app/admin/service"
|
||||
"go-admin/common/const/rediskey"
|
||||
"go-admin/common/helper"
|
||||
"go-admin/pkg/utility"
|
||||
"go-admin/services/excservice"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/bytedance/sonic"
|
||||
log "github.com/go-admin-team/go-admin-core/logger"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// 初始化用户订阅ws连接
|
||||
func UserSubscribeInit(orm *gorm.DB, ctx context.Context) {
|
||||
var list []models.LineApiUser
|
||||
|
||||
err := orm.Model(&models.LineApiUser{}).Where("open_status=1 ").Find(&list).Error
|
||||
|
||||
if err != nil {
|
||||
log.Error("获取用户api失败", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
for _, item := range list {
|
||||
service.OpenUserBinanceWebsocket(item)
|
||||
}
|
||||
|
||||
utility.SafeGo(func() {
|
||||
ticker := time.NewTicker(time.Second * 5)
|
||||
defer ticker.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
log.Info("ctx.Done() 被触发,原因:", ctx.Err()) // 打印上下文错误信息
|
||||
return
|
||||
case <-ticker.C:
|
||||
deleteKeys, _ := helper.DefaultRedis.GetAllList(rediskey.ApiUserDeleteList)
|
||||
activeApis, _ := helper.DefaultRedis.GetAllList(rediskey.ApiUserActiveList)
|
||||
|
||||
//移除连接
|
||||
for _, item := range deleteKeys {
|
||||
if wm, ok := excservice.SpotSockets[item]; ok {
|
||||
wm.Stop()
|
||||
|
||||
delete(excservice.FutureSockets, item)
|
||||
}
|
||||
|
||||
if wm, ok := excservice.SpotSockets[item]; ok {
|
||||
wm.Stop()
|
||||
|
||||
delete(excservice.SpotSockets, item)
|
||||
}
|
||||
|
||||
if _, err := helper.DefaultRedis.LRem(rediskey.ApiUserDeleteList, item); err != nil {
|
||||
log.Error("移除 待关闭websocket 失败:", err)
|
||||
}
|
||||
}
|
||||
|
||||
//连接websocket
|
||||
var apiUser models.LineApiUser
|
||||
for _, item := range activeApis {
|
||||
if item == "" {
|
||||
continue
|
||||
}
|
||||
|
||||
sonic.Unmarshal([]byte(item), &apiUser)
|
||||
|
||||
if apiUser.Id > 0 {
|
||||
service.OpenUserBinanceWebsocket(apiUser)
|
||||
if _, err := helper.DefaultRedis.LRem(rediskey.ApiUserActiveList, item); err != nil {
|
||||
log.Error("删除 待触发的apiUser失败", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user