191 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 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/cacheservice"
 | ||
| 	"go-admin/services/futureservice"
 | ||
| 	"go-admin/services/scriptservice"
 | ||
| 	"os"
 | ||
| 	"time"
 | ||
| 
 | ||
| 	"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)
 | ||
| 	}
 | ||
| 
 | ||
| 	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)
 | ||
| 	}
 | ||
| 
 | ||
| 	//初始化参数配置
 | ||
| 	cacheservice.InitConfigCache(db)
 | ||
| 	//初始化可缓存价格交易对
 | ||
| 	symbolPriceService := service.LineSymbolPrice{}
 | ||
| 	symbolPriceService.Orm = db
 | ||
| 	symbolPriceService.Log = logger.NewHelper(sdk.Runtime.GetLogger()).WithFields(map[string]interface{}{})
 | ||
| 	symbolPriceService.InitCache()
 | ||
| 
 | ||
| 	//清理交易对缓存价格
 | ||
| 	clearSymbolPrice()
 | ||
| 
 | ||
| 	//初始化订单配置
 | ||
| 	cacheservice.ResetSystemSetting(db)
 | ||
| 	lineApiUser := service.LineApiUser{}
 | ||
| 	lineApiUser.Orm = db
 | ||
| 	if err := lineApiUser.InitCache(); err != nil {
 | ||
| 		logger.Errorf("初始化api用户失败:%v", err)
 | ||
| 		os.Exit(-1)
 | ||
| 	}
 | ||
| 
 | ||
| 	//币安 现货交易对
 | ||
| 	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 {
 | ||
| 		logger.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 {
 | ||
| 				logger.Error("loadApiUser 保存redis:", err)
 | ||
| 			}
 | ||
| 		}
 | ||
| 	}
 | ||
| 
 | ||
| 	groups := make([]models.LineApiGroup, 0)
 | ||
| 
 | ||
| 	if err := db.Model(&models.LineApiGroup{}).Find(&groups).Error; err != nil {
 | ||
| 		logger.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
 | ||
| }
 | ||
| 
 | ||
| // 清理交易对价格缓存
 | ||
| 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
 | ||
| }
 |