Compare commits
1 Commits
0f9b966fdb
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 5e4286de50 |
@ -2,6 +2,7 @@ package models
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"go-admin/common/models"
|
"go-admin/common/models"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type LineApiUser struct {
|
type LineApiUser struct {
|
||||||
@ -9,22 +10,21 @@ type LineApiUser struct {
|
|||||||
|
|
||||||
ExchangeType string `json:"exchangeType" gorm:"type:varchar(20);comment:交易所类型(字典 exchange_type)"`
|
ExchangeType string `json:"exchangeType" gorm:"type:varchar(20);comment:交易所类型(字典 exchange_type)"`
|
||||||
UserId int64 `json:"userId" gorm:"type:int unsigned;comment:用户id"`
|
UserId int64 `json:"userId" gorm:"type:int unsigned;comment:用户id"`
|
||||||
JysId int64 `json:"jysId" gorm:"type:int;comment:关联交易所账号id"`
|
|
||||||
ApiName string `json:"apiName" gorm:"type:varchar(255);comment:api用户名"`
|
ApiName string `json:"apiName" gorm:"type:varchar(255);comment:api用户名"`
|
||||||
ApiKey string `json:"apiKey" gorm:"type:varchar(255);comment:apiKey"`
|
ApiKey string `json:"apiKey" gorm:"type:varchar(255);comment:apiKey"`
|
||||||
ApiSecret string `json:"apiSecret" gorm:"type:varchar(255);comment:apiSecret"`
|
ApiSecret string `json:"apiSecret" gorm:"type:varchar(255);comment:apiSecret"`
|
||||||
IpAddress string `json:"ipAddress" gorm:"type:varchar(255);comment:代理地址"`
|
IpAddress string `json:"ipAddress" gorm:"type:varchar(255);comment:代理地址"`
|
||||||
UserPass string `json:"userPass" gorm:"type:varchar(255);comment:代码账号密码"`
|
UserPass string `json:"userPass" gorm:"type:varchar(255);comment:代码账号密码"`
|
||||||
AdminId int64 `json:"adminId" gorm:"type:int unsigned;comment:管理员id"`
|
// AdminId int64 `json:"adminId" gorm:"type:int unsigned;comment:管理员id"`
|
||||||
Affiliation int64 `json:"affiliation" gorm:"type:int;comment:归属:1=现货,2=合约,3=现货合约"`
|
Affiliation int64 `json:"affiliation" gorm:"type:int;comment:归属:1=现货,2=合约,3=现货合约"`
|
||||||
AdminShow int64 `json:"adminShow" gorm:"type:int;comment:是否超管可见:1=是,0=否"`
|
AdminShow int64 `json:"adminShow" gorm:"type:int;comment:是否超管可见:1=是,0=否"`
|
||||||
Site string `json:"site" gorm:"type:enum('1','2','3');comment:允许下单的方向:1=多;2=空;3=多空"`
|
Site string `json:"site" gorm:"type:enum('1','2','3');comment:允许下单的方向:1=多;2=空;3=多空"`
|
||||||
Subordinate string `json:"subordinate" gorm:"type:enum('0','1','2');comment:从属关系:0=未绑定关系;1=主账号;2=副帐号"`
|
Subordinate string `json:"subordinate" gorm:"type:enum('0','1','2');comment:从属关系:0=未绑定关系;1=主账号;2=副帐号"`
|
||||||
GroupId int64 `json:"groupId" gorm:"type:int unsigned;comment:所属组id"`
|
GroupId int64 `json:"groupId" gorm:"type:int unsigned;comment:所属组id"`
|
||||||
OpenStatus int64 `json:"openStatus" gorm:"type:int unsigned;comment:开启状态 0=关闭 1=开启"`
|
OpenStatus int64 `json:"openStatus" gorm:"type:int unsigned;comment:开启状态 0=关闭 1=开启"`
|
||||||
|
|
||||||
SpotLastTime string `json:"spotLastTime" gorm:"-"` //现货websocket最后通信时间
|
SpotLastTime *time.Time `json:"spotLastTime" gorm:"-"` //现货websocket最后通信时间
|
||||||
FuturesLastTime string `json:"futuresLastTime" gorm:"-"` //合约websocket最后通信时间
|
FuturesLastTime *time.Time `json:"futuresLastTime" gorm:"-"` //合约websocket最后通信时间
|
||||||
models.ModelTime
|
models.ModelTime
|
||||||
models.ControlBy
|
models.ControlBy
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,9 +14,9 @@ type LineApiUserGetPageReq struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type LineApiUserOrder struct {
|
type LineApiUserOrder struct {
|
||||||
Id string `form:"idOrder" search:"type:order;column:id;table:line_api_user"`
|
Id string `form:"idOrder" search:"type:order;column:id;table:line_api_user"`
|
||||||
UserId string `form:"userIdOrder" search:"type:order;column:user_id;table:line_api_user"`
|
UserId string `form:"userIdOrder" search:"type:order;column:user_id;table:line_api_user"`
|
||||||
JysId string `form:"jysIdOrder" search:"type:order;column:jys_id;table:line_api_user"`
|
// JysId string `form:"jysIdOrder" search:"type:order;column:jys_id;table:line_api_user"`
|
||||||
ApiName string `form:"apiNameOrder" search:"type:order;column:api_name;table:line_api_user"`
|
ApiName string `form:"apiNameOrder" search:"type:order;column:api_name;table:line_api_user"`
|
||||||
ApiKey string `form:"apiKeyOrder" search:"type:order;column:api_key;table:line_api_user"`
|
ApiKey string `form:"apiKeyOrder" search:"type:order;column:api_key;table:line_api_user"`
|
||||||
ApiSecret string `form:"apiSecretOrder" search:"type:order;column:api_secret;table:line_api_user"`
|
ApiSecret string `form:"apiSecretOrder" search:"type:order;column:api_secret;table:line_api_user"`
|
||||||
@ -44,19 +44,19 @@ type LineApiUserInsertReq struct {
|
|||||||
Id int `json:"-" comment:"id"` // id
|
Id int `json:"-" comment:"id"` // id
|
||||||
ExchangeType string `json:"exchangeType" comment:"交易所code"`
|
ExchangeType string `json:"exchangeType" comment:"交易所code"`
|
||||||
UserId int64 `json:"userId" comment:"用户id"`
|
UserId int64 `json:"userId" comment:"用户id"`
|
||||||
JysId int64 `json:"jysId" comment:"关联交易所账号id"`
|
// JysId int64 `json:"jysId" comment:"关联交易所账号id"`
|
||||||
ApiName string `json:"apiName" comment:"api用户名"`
|
ApiName string `json:"apiName" comment:"api用户名"`
|
||||||
ApiKey string `json:"apiKey" comment:"apiKey"`
|
ApiKey string `json:"apiKey" comment:"apiKey"`
|
||||||
ApiSecret string `json:"apiSecret" comment:"apiSecret"`
|
ApiSecret string `json:"apiSecret" comment:"apiSecret"`
|
||||||
IpAddress string `json:"ipAddress" comment:"代理地址"`
|
IpAddress string `json:"ipAddress" comment:"代理地址"`
|
||||||
UserPass string `json:"userPass" comment:"代码账号密码"`
|
UserPass string `json:"userPass" comment:"代码账号密码"`
|
||||||
AdminId int64 `json:"adminId" comment:"管理员id"`
|
AdminId int64 `json:"adminId" comment:"管理员id"`
|
||||||
Affiliation int64 `json:"affiliation" comment:"归属:1=现货,2=合约,3=现货合约"`
|
Affiliation int64 `json:"affiliation" comment:"归属:1=现货,2=合约,3=现货合约"`
|
||||||
AdminShow int64 `json:"adminShow" comment:"是否超管可见:1=是,0=否"`
|
AdminShow int64 `json:"adminShow" comment:"是否超管可见:1=是,0=否"`
|
||||||
Site string `json:"site" comment:"允许下单的方向:1=多;2=空;3=多空"`
|
Site string `json:"site" comment:"允许下单的方向:1=多;2=空;3=多空"`
|
||||||
Subordinate string `json:"subordinate" comment:"从属关系:0=未绑定关系;1=主账号;2=副帐号"`
|
Subordinate string `json:"subordinate" comment:"从属关系:0=未绑定关系;1=主账号;2=副帐号"`
|
||||||
GroupId int64 `json:"groupId" comment:"所属组id"`
|
GroupId int64 `json:"groupId" comment:"所属组id"`
|
||||||
OpenStatus int64 `json:"openStatus" comment:"开启状态 0=关闭 1=开启"`
|
OpenStatus int64 `json:"openStatus" comment:"开启状态 0=关闭 1=开启"`
|
||||||
common.ControlBy
|
common.ControlBy
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,13 +66,13 @@ func (s *LineApiUserInsertReq) Generate(model *models.LineApiUser) {
|
|||||||
}
|
}
|
||||||
model.ExchangeType = s.ExchangeType
|
model.ExchangeType = s.ExchangeType
|
||||||
model.UserId = s.UserId
|
model.UserId = s.UserId
|
||||||
model.JysId = s.JysId
|
// model.JysId = s.JysId
|
||||||
model.ApiName = s.ApiName
|
model.ApiName = s.ApiName
|
||||||
model.ApiKey = s.ApiKey
|
model.ApiKey = s.ApiKey
|
||||||
model.ApiSecret = s.ApiSecret
|
model.ApiSecret = s.ApiSecret
|
||||||
model.IpAddress = s.IpAddress
|
model.IpAddress = s.IpAddress
|
||||||
model.UserPass = s.UserPass
|
model.UserPass = s.UserPass
|
||||||
model.AdminId = s.AdminId
|
// model.AdminId = s.AdminId
|
||||||
model.Affiliation = s.Affiliation
|
model.Affiliation = s.Affiliation
|
||||||
model.AdminShow = s.AdminShow
|
model.AdminShow = s.AdminShow
|
||||||
model.Site = s.Site
|
model.Site = s.Site
|
||||||
@ -90,19 +90,19 @@ type LineApiUserUpdateReq struct {
|
|||||||
Id int `uri:"id" comment:"id"` // id
|
Id int `uri:"id" comment:"id"` // id
|
||||||
ExchangeType string `json:"exchangeType" comment:"交易所code"`
|
ExchangeType string `json:"exchangeType" comment:"交易所code"`
|
||||||
UserId int64 `json:"userId" comment:"用户id"`
|
UserId int64 `json:"userId" comment:"用户id"`
|
||||||
JysId int64 `json:"jysId" comment:"关联交易所账号id"`
|
// JysId int64 `json:"jysId" comment:"关联交易所账号id"`
|
||||||
ApiName string `json:"apiName" comment:"api用户名"`
|
ApiName string `json:"apiName" comment:"api用户名"`
|
||||||
ApiKey string `json:"apiKey" comment:"apiKey"`
|
ApiKey string `json:"apiKey" comment:"apiKey"`
|
||||||
ApiSecret string `json:"apiSecret" comment:"apiSecret"`
|
ApiSecret string `json:"apiSecret" comment:"apiSecret"`
|
||||||
IpAddress string `json:"ipAddress" comment:"代理地址"`
|
IpAddress string `json:"ipAddress" comment:"代理地址"`
|
||||||
UserPass string `json:"userPass" comment:"代码账号密码"`
|
UserPass string `json:"userPass" comment:"代码账号密码"`
|
||||||
AdminId int64 `json:"adminId" comment:"管理员id"`
|
// AdminId int64 `json:"adminId" comment:"管理员id"`
|
||||||
Affiliation int64 `json:"affiliation" comment:"归属:1=现货,2=合约,3=现货合约"`
|
Affiliation int64 `json:"affiliation" comment:"归属:1=现货,2=合约,3=现货合约"`
|
||||||
AdminShow int64 `json:"adminShow" comment:"是否超管可见:1=是,0=否"`
|
AdminShow int64 `json:"adminShow" comment:"是否超管可见:1=是,0=否"`
|
||||||
Site string `json:"site" comment:"允许下单的方向:1=多;2=空;3=多空"`
|
Site string `json:"site" comment:"允许下单的方向:1=多;2=空;3=多空"`
|
||||||
Subordinate string `json:"subordinate" comment:"从属关系:0=未绑定关系;1=主账号;2=副帐号"`
|
Subordinate string `json:"subordinate" comment:"从属关系:0=未绑定关系;1=主账号;2=副帐号"`
|
||||||
GroupId int64 `json:"groupId" comment:"所属组id"`
|
GroupId int64 `json:"groupId" comment:"所属组id"`
|
||||||
OpenStatus int64 `json:"openStatus" comment:"开启状态 0=关闭 1=开启"`
|
OpenStatus int64 `json:"openStatus" comment:"开启状态 0=关闭 1=开启"`
|
||||||
common.ControlBy
|
common.ControlBy
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,13 +112,13 @@ func (s *LineApiUserUpdateReq) Generate(model *models.LineApiUser) {
|
|||||||
}
|
}
|
||||||
model.ExchangeType = s.ExchangeType
|
model.ExchangeType = s.ExchangeType
|
||||||
model.UserId = s.UserId
|
model.UserId = s.UserId
|
||||||
model.JysId = s.JysId
|
// model.JysId = s.JysId
|
||||||
model.ApiName = s.ApiName
|
model.ApiName = s.ApiName
|
||||||
model.ApiKey = s.ApiKey
|
model.ApiKey = s.ApiKey
|
||||||
model.ApiSecret = s.ApiSecret
|
model.ApiSecret = s.ApiSecret
|
||||||
model.IpAddress = s.IpAddress
|
model.IpAddress = s.IpAddress
|
||||||
model.UserPass = s.UserPass
|
model.UserPass = s.UserPass
|
||||||
model.AdminId = s.AdminId
|
// model.AdminId = s.AdminId
|
||||||
model.Affiliation = s.Affiliation
|
model.Affiliation = s.Affiliation
|
||||||
model.AdminShow = s.AdminShow
|
model.AdminShow = s.AdminShow
|
||||||
model.Site = s.Site
|
model.Site = s.Site
|
||||||
|
|||||||
@ -52,19 +52,19 @@ func (e *LineApiUser) GetPage(c *dto.LineApiUserGetPageReq, p *actions.DataPermi
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var userSub binancedto.UserSubscribeState
|
|
||||||
for index := range *list {
|
for index := range *list {
|
||||||
val, _ := helper.DefaultRedis.GetString(fmt.Sprintf(global.USER_SUBSCRIBE, (*list)[index].ApiKey))
|
val, _ := helper.DefaultRedis.GetString(fmt.Sprintf(global.USER_SUBSCRIBE, (*list)[index].ApiKey))
|
||||||
|
var userSub binancedto.UserSubscribeState
|
||||||
|
|
||||||
if val != "" {
|
if val != "" {
|
||||||
sonic.Unmarshal([]byte(val), &userSub)
|
sonic.Unmarshal([]byte(val), &userSub)
|
||||||
|
|
||||||
if userSub.FuturesLastTime != nil {
|
if userSub.FuturesLastTime != nil {
|
||||||
(*list)[index].FuturesLastTime = userSub.FuturesLastTime.Format("2006-01-02 15:04:05")
|
(*list)[index].FuturesLastTime = userSub.FuturesLastTime
|
||||||
}
|
}
|
||||||
|
|
||||||
if userSub.SpotLastTime != nil {
|
if userSub.SpotLastTime != nil {
|
||||||
(*list)[index].SpotLastTime = userSub.SpotLastTime.Format("2006-01-02 15:04:05")
|
(*list)[index].SpotLastTime = userSub.SpotLastTime
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1267,14 +1267,25 @@ func (e *LinePreOrder) AddBatchPreOrder(batchReq *dto.LineBatchAddPreOrderReq, p
|
|||||||
var symbolGroupInfo models.LineSymbolGroup
|
var symbolGroupInfo models.LineSymbolGroup
|
||||||
e.Orm.Model(&models.LineSymbolGroup{}).Where("id = ?", utility.StringToInt(batchReq.SymbolGroupId)).Find(&symbolGroupInfo)
|
e.Orm.Model(&models.LineSymbolGroup{}).Where("id = ?", utility.StringToInt(batchReq.SymbolGroupId)).Find(&symbolGroupInfo)
|
||||||
if symbolGroupInfo.Id <= 0 || symbolGroupInfo.Symbol == "" {
|
if symbolGroupInfo.Id <= 0 || symbolGroupInfo.Symbol == "" {
|
||||||
*errs = append(*errs, errors.New(fmt.Sprintf("选择的交易对组:%s不存在或交易对组的交易对为空", batchReq.SymbolGroupId)))
|
*errs = append(*errs, fmt.Errorf("选择的交易对组:%s不存在或交易对组的交易对为空", batchReq.SymbolGroupId))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if batchReq.StrategyTemplateType == 1 && batchReq.StrategyTemplateId > 0 {
|
||||||
|
cachePriceSymbols, _ := helper.DefaultRedis.GetAllList(rediskey.CacheSymbolLastPrice)
|
||||||
|
symbols := strings.Split(symbolGroupInfo.Symbol, ",")
|
||||||
|
|
||||||
|
for _, symbol := range symbols {
|
||||||
|
if !utility.ContainsStr(cachePriceSymbols, symbol) {
|
||||||
|
*errs = append(*errs, fmt.Errorf("交易对[%s]涨跌幅缓存不存在", symbol))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
batchReq.Symbol = symbolGroupInfo.Symbol
|
batchReq.Symbol = symbolGroupInfo.Symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
//脚本次数
|
//脚本次数
|
||||||
// if batchReq.OrderNum > 0 {
|
|
||||||
apiUserIds := strings.Split(batchReq.ApiUserId, ",")
|
apiUserIds := strings.Split(batchReq.ApiUserId, ",")
|
||||||
var tickerSymbol string
|
var tickerSymbol string
|
||||||
if batchReq.SymbolType == global.SYMBOL_SPOT {
|
if batchReq.SymbolType == global.SYMBOL_SPOT {
|
||||||
@ -1299,7 +1310,7 @@ func (e *LinePreOrder) AddBatchPreOrder(batchReq *dto.LineBatchAddPreOrderReq, p
|
|||||||
log.ScriptParams = string(marshal)
|
log.ScriptParams = string(marshal)
|
||||||
log.AdminId = 0
|
log.AdminId = 0
|
||||||
log.Status = "0"
|
log.Status = "0"
|
||||||
//scriptLogs = append(scriptLogs, log)
|
|
||||||
err := e.Orm.Model(&models.LinePreScript{}).Create(&log).Error
|
err := e.Orm.Model(&models.LinePreScript{}).Create(&log).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
*errs = append(*errs, fmt.Errorf("记录脚本失败:%+v", err.Error()))
|
*errs = append(*errs, fmt.Errorf("记录脚本失败:%+v", err.Error()))
|
||||||
@ -1339,6 +1350,8 @@ func (e *LinePreOrder) AddBatchPreOrder(batchReq *dto.LineBatchAddPreOrderReq, p
|
|||||||
req.ReduceStopLossRatio = batchReq.ReduceStopLossRatio
|
req.ReduceStopLossRatio = batchReq.ReduceStopLossRatio
|
||||||
req.ReduceTakeProfitRatio = batchReq.ReduceTakeProfitRatio
|
req.ReduceTakeProfitRatio = batchReq.ReduceTakeProfitRatio
|
||||||
req.CreateBy = batchReq.CreateBy
|
req.CreateBy = batchReq.CreateBy
|
||||||
|
req.StrategyTemplateId = batchReq.StrategyTemplateId
|
||||||
|
req.StrategyTemplateType = batchReq.StrategyTemplateType
|
||||||
|
|
||||||
e.AddPreOrderCheck(&req, p, errs, tickerSymbol)
|
e.AddPreOrderCheck(&req, p, errs, tickerSymbol)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package helper
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"go-admin/pkg/utility"
|
"go-admin/pkg/utility"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"strconv"
|
"strconv"
|
||||||
@ -60,6 +61,8 @@ func InitLockRedisConn(host, password, dbIndex string) {
|
|||||||
log.Error("Failed to connect to Redis", zap.Error(err))
|
log.Error("Failed to connect to Redis", zap.Error(err))
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Println("redis lock初始化完毕")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -24,9 +24,11 @@ import (
|
|||||||
|
|
||||||
// 业务初始化
|
// 业务初始化
|
||||||
func BusinessInit(db *gorm.DB) {
|
func BusinessInit(db *gorm.DB) {
|
||||||
|
|
||||||
httputils.InitProxy(config.ExtConfig.ProxyUrl)
|
httputils.InitProxy(config.ExtConfig.ProxyUrl)
|
||||||
|
|
||||||
if err := loadApiUser(db); err != nil { //加载api用户
|
if err := loadApiUser(db); err != nil { //加载api用户
|
||||||
|
fmt.Printf("加载api用户失败 err:%v", err)
|
||||||
os.Exit(-1)
|
os.Exit(-1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user