1
This commit is contained in:
@ -567,7 +567,8 @@ func (e *LinePreOrder) AddPreOrder(req *dto.LineAddPreOrderReq, p *actions.DataP
|
|||||||
stopOrder.OrderType = 4
|
stopOrder.OrderType = 4
|
||||||
stopOrder.Status = 0
|
stopOrder.Status = 0
|
||||||
stopOrder.Rate = req.ReducePriceRatio.String()
|
stopOrder.Rate = req.ReducePriceRatio.String()
|
||||||
stopOrder.Num = utility.StrToDecimal(AddOrder.Num).Mul(req.ReduceNumRatio.Div(decimal.NewFromInt(100)).Truncate(4)).Truncate(int32(tradeSet.AmountDigit)).String()
|
stopNum := utility.StrToDecimal(AddOrder.Num).Mul(req.ReduceNumRatio.Div(decimal.NewFromInt(100)).Truncate(4))
|
||||||
|
stopOrder.Num = stopNum.Truncate(int32(tradeSet.AmountDigit)).String()
|
||||||
|
|
||||||
tx.Model(&models.LinePreOrder{}).Omit("id", "save_template", "template_name").Create(&stopOrder)
|
tx.Model(&models.LinePreOrder{}).Omit("id", "save_template", "template_name").Create(&stopOrder)
|
||||||
|
|
||||||
@ -691,7 +692,7 @@ func createPreAddPosition(preOrder *models.LinePreOrder, v models.LinePreOrderEx
|
|||||||
|
|
||||||
// 构建合约止盈、减仓单
|
// 构建合约止盈、减仓单
|
||||||
func makeFuturesTakeAndReduce(preOrder *models.LinePreOrder, ext models.LinePreOrderExt, tradeSet models2.TradeSet) ([]models.LinePreOrder, error) {
|
func makeFuturesTakeAndReduce(preOrder *models.LinePreOrder, ext models.LinePreOrderExt, tradeSet models2.TradeSet) ([]models.LinePreOrder, error) {
|
||||||
num := ext.TotalAfterAdding
|
num := ext.TotalAfterAdding.Truncate(int32(tradeSet.AmountDigit))
|
||||||
orders := make([]models.LinePreOrder, 0)
|
orders := make([]models.LinePreOrder, 0)
|
||||||
//止盈单
|
//止盈单
|
||||||
profitOrder := models.LinePreOrder{}
|
profitOrder := models.LinePreOrder{}
|
||||||
@ -703,7 +704,7 @@ func makeFuturesTakeAndReduce(preOrder *models.LinePreOrder, ext models.LinePreO
|
|||||||
profitOrder.OrderType = 1
|
profitOrder.OrderType = 1
|
||||||
profitOrder.Status = 0
|
profitOrder.Status = 0
|
||||||
profitOrder.MainId = preOrder.MainId
|
profitOrder.MainId = preOrder.MainId
|
||||||
profitOrder.Num = num.Truncate(int32(tradeSet.AmountDigit)).String()
|
profitOrder.Num = num.String()
|
||||||
profitOrder.BuyPrice = "0"
|
profitOrder.BuyPrice = "0"
|
||||||
// profitOrder.Rate = ext.TakeProfitRatio.String()
|
// profitOrder.Rate = ext.TakeProfitRatio.String()
|
||||||
|
|
||||||
@ -735,7 +736,8 @@ func makeFuturesTakeAndReduce(preOrder *models.LinePreOrder, ext models.LinePreO
|
|||||||
stopOrder.BuyPrice = "0"
|
stopOrder.BuyPrice = "0"
|
||||||
|
|
||||||
if ext.ReduceNumRatio.Cmp(decimal.Zero) > 0 {
|
if ext.ReduceNumRatio.Cmp(decimal.Zero) > 0 {
|
||||||
stopOrder.Num = num.Mul(ext.ReduceNumRatio.Div(decimal.NewFromInt(100))).Truncate(int32(tradeSet.AmountDigit)).String()
|
stopNum := num.Mul(ext.ReduceNumRatio.Div(decimal.NewFromInt(100)))
|
||||||
|
stopOrder.Num = stopNum.Truncate(int32(tradeSet.AmountDigit)).String()
|
||||||
}
|
}
|
||||||
if strings.ToUpper(preOrder.Site) == "BUY" {
|
if strings.ToUpper(preOrder.Site) == "BUY" {
|
||||||
stopOrder.Site = "SELL"
|
stopOrder.Site = "SELL"
|
||||||
|
|||||||
116
app/jobs/jobs.go
116
app/jobs/jobs.go
@ -1,12 +1,15 @@
|
|||||||
package jobs
|
package jobs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go-admin/app/admin/models"
|
"go-admin/app/admin/models"
|
||||||
"go-admin/app/admin/service"
|
"go-admin/app/admin/service"
|
||||||
"go-admin/app/admin/service/dto"
|
"go-admin/app/admin/service/dto"
|
||||||
|
"go-admin/common/const/rediskey"
|
||||||
"go-admin/common/global"
|
"go-admin/common/global"
|
||||||
|
"go-admin/common/helper"
|
||||||
"go-admin/pkg/utility"
|
"go-admin/pkg/utility"
|
||||||
"go-admin/pkg/utility/snowflakehelper"
|
"go-admin/pkg/utility/snowflakehelper"
|
||||||
"go-admin/services/binanceservice"
|
"go-admin/services/binanceservice"
|
||||||
@ -15,7 +18,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/jinzhu/copier"
|
|
||||||
"github.com/shopspring/decimal"
|
"github.com/shopspring/decimal"
|
||||||
|
|
||||||
"github.com/go-admin-team/go-admin-core/sdk"
|
"github.com/go-admin-team/go-admin-core/sdk"
|
||||||
@ -156,37 +158,46 @@ func (t LimitOrderTimeoutDuration) Exec(arg interface{}) error {
|
|||||||
if resp.ConfigValue == "" {
|
if resp.ConfigValue == "" {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
limitOrderTimeoutDuration := utility.StringAsInt64(resp.ConfigValue)
|
|
||||||
orders := make([]models.LinePreOrder, 0)
|
lock := helper.NewRedisLock(rediskey.JobReOrderTrigger, 20, 5, 100*time.Millisecond)
|
||||||
err := db.Model(&models.LinePreOrder{}).Where("status = '5' AND main_order_type = 'LIMIT' AND order_type in ('4') AND order_category = 3 AND updated_at < ?", time.Now().Add(-time.Duration(limitOrderTimeoutDuration)*time.Second)).Find(&orders).Error
|
|
||||||
if err != nil {
|
if ok, err := lock.AcquireWait(context.Background()); err != nil {
|
||||||
return err
|
logger.Error("获取锁失败", err)
|
||||||
}
|
return nil
|
||||||
spotApi := binanceservice.SpotRestApi{}
|
} else if ok {
|
||||||
futApi := binanceservice.FutRestApi{}
|
defer lock.Release()
|
||||||
for _, order := range orders {
|
limitOrderTimeoutDuration := utility.StringAsInt64(resp.ConfigValue)
|
||||||
var apiUserinfo models.LineApiUser
|
orders := make([]models.LinePreOrder, 0)
|
||||||
db.Model(&models.LineApiUser{}).Where("id = ?", order.ApiId).Find(&apiUserinfo)
|
err := db.Model(&models.LinePreOrder{}).Where("status = '5' AND main_order_type = 'LIMIT' AND order_type in ('4') AND updated_at < ?", time.Now().Add(-time.Duration(limitOrderTimeoutDuration)*time.Second)).Find(&orders).Error
|
||||||
//现货
|
if err != nil {
|
||||||
if order.SymbolType == global.SYMBOL_SPOT {
|
return err
|
||||||
if order.ExchangeType == global.EXCHANGE_BINANCE {
|
}
|
||||||
err := t.ReSpotOrderPlace(db, order, apiUserinfo, spotApi)
|
spotApi := binanceservice.SpotRestApi{}
|
||||||
if err != nil {
|
futApi := binanceservice.FutRestApi{}
|
||||||
continue
|
for _, order := range orders {
|
||||||
|
var apiUserinfo models.LineApiUser
|
||||||
|
db.Model(&models.LineApiUser{}).Where("id = ?", order.ApiId).Find(&apiUserinfo)
|
||||||
|
//现货
|
||||||
|
if order.SymbolType == global.SYMBOL_SPOT {
|
||||||
|
if order.ExchangeType == global.EXCHANGE_BINANCE {
|
||||||
|
err := t.ReSpotOrderPlace(db, order, apiUserinfo, spotApi)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
//合约
|
//合约
|
||||||
if order.SymbolType == global.SYMBOL_FUTURES {
|
if order.SymbolType == global.SYMBOL_FUTURES {
|
||||||
if order.ExchangeType == global.EXCHANGE_BINANCE {
|
if order.ExchangeType == global.EXCHANGE_BINANCE {
|
||||||
err := t.ReFutOrderPlace(db, order, apiUserinfo, futApi)
|
err := t.ReFutOrderPlace(db, order, apiUserinfo, futApi)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -195,7 +206,7 @@ func (t LimitOrderTimeoutDuration) Exec(arg interface{}) error {
|
|||||||
func (t LimitOrderTimeoutDuration) ReSpotOrderPlace(db *gorm.DB, order models.LinePreOrder, apiUserinfo models.LineApiUser, spotApi binanceservice.SpotRestApi) error {
|
func (t LimitOrderTimeoutDuration) ReSpotOrderPlace(db *gorm.DB, order models.LinePreOrder, apiUserinfo models.LineApiUser, spotApi binanceservice.SpotRestApi) error {
|
||||||
var err error
|
var err error
|
||||||
for i := 0; i < 3; i++ {
|
for i := 0; i < 3; i++ {
|
||||||
err := spotApi.CancelOpenOrderByOrderSn(apiUserinfo, order.Symbol, order.OrderSn)
|
err = spotApi.CancelOpenOrderByOrderSn(apiUserinfo, order.Symbol, order.OrderSn)
|
||||||
if err == nil || strings.Contains(err.Error(), "该交易对没有订单") {
|
if err == nil || strings.Contains(err.Error(), "该交易对没有订单") {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@ -206,13 +217,18 @@ func (t LimitOrderTimeoutDuration) ReSpotOrderPlace(db *gorm.DB, order models.Li
|
|||||||
} else {
|
} else {
|
||||||
newClientOrderId := snowflakehelper.GetOrderId()
|
newClientOrderId := snowflakehelper.GetOrderId()
|
||||||
|
|
||||||
var newOrder models.LinePreOrder
|
order.Desc = fmt.Sprintf("取消限价单,重下市价单源订单号:%s ", order.OrderSn)
|
||||||
copier.Copy(&newOrder, order)
|
order.OrderSn = utility.Int64ToString(snowflakehelper.GetOrderId())
|
||||||
newOrder.Id = 0
|
order.MainOrderType = "MARKET"
|
||||||
newOrder.OrderSn = utility.Int64ToString(newClientOrderId)
|
// var newOrder models.LinePreOrder
|
||||||
newOrder.CreatedAt = time.Now()
|
// copier.Copy(&newOrder, order)
|
||||||
newOrder.MainOrderType = "MARKET"
|
// newOrder.Id = 0
|
||||||
err = db.Model(&models.LinePreOrder{}).Create(&newOrder).Error
|
// newOrder.OrderSn = utility.Int64ToString(newClientOrderId)
|
||||||
|
// newOrder.CreatedAt = time.Now()
|
||||||
|
// newOrder.MainOrderType = "MARKET"
|
||||||
|
// err = db.Model(&models.LinePreOrder{}).Create(&newOrder).Error
|
||||||
|
err := db.Model(&order).Updates(map[string]interface{}{"desc": order.Desc, "order_sn": order.OrderSn, "main_order_type": order.MainOrderType}).Error
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(fmt.Sprintf("生成新市价单失败 err:%+v", err))
|
logger.Error(fmt.Sprintf("生成新市价单失败 err:%+v", err))
|
||||||
return err
|
return err
|
||||||
@ -224,12 +240,13 @@ func (t LimitOrderTimeoutDuration) ReSpotOrderPlace(db *gorm.DB, order models.Li
|
|||||||
Type: "MARKET",
|
Type: "MARKET",
|
||||||
TimeInForce: "GTC",
|
TimeInForce: "GTC",
|
||||||
Price: utility.StringToDecimal(order.Price),
|
Price: utility.StringToDecimal(order.Price),
|
||||||
|
StopPrice: utility.StrToDecimal(order.Price),
|
||||||
Quantity: utility.StringToDecimal(order.Num),
|
Quantity: utility.StringToDecimal(order.Num),
|
||||||
NewClientOrderId: utility.Int64ToString(newClientOrderId),
|
NewClientOrderId: utility.Int64ToString(newClientOrderId),
|
||||||
}
|
}
|
||||||
if err := spotApi.OrderPlace(db, params); err != nil {
|
if err := spotApi.OrderPlace(db, params); err != nil {
|
||||||
logger.Error(fmt.Sprintf("重新下市价单失败 err:%+v", err))
|
logger.Error(fmt.Sprintf("重新下市价单失败 err:%+v", err))
|
||||||
err := db.Model(&models.LinePreOrder{}).Where("id = ? AND status = 0", newOrder.Id).Updates(map[string]interface{}{"status": "2", "desc": err.Error()}).Error
|
err := db.Model(&order).Updates(map[string]interface{}{"status": "2", "desc": order.Desc + "err:" + err.Error()}).Error
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("下单失败后修改订单失败")
|
logger.Error("下单失败后修改订单失败")
|
||||||
@ -255,19 +272,28 @@ func (t LimitOrderTimeoutDuration) ReFutOrderPlace(db *gorm.DB, order models.Lin
|
|||||||
return err
|
return err
|
||||||
} else {
|
} else {
|
||||||
newClientOrderId := snowflakehelper.GetOrderId()
|
newClientOrderId := snowflakehelper.GetOrderId()
|
||||||
|
orderType := "MARKET"
|
||||||
|
order.Desc = fmt.Sprintf("取消限价单,重下市价单 源订单号:%s", order.OrderSn)
|
||||||
|
order.OrderSn = utility.Int64ToString(newClientOrderId)
|
||||||
|
|
||||||
var newOrder models.LinePreOrder
|
// var newOrder models.LinePreOrder
|
||||||
copier.Copy(&newOrder, order)
|
// copier.Copy(&newOrder, order)
|
||||||
newOrder.Id = 0
|
// newOrder.Id = 0
|
||||||
newOrder.OrderSn = utility.Int64ToString(newClientOrderId)
|
// newOrder.OrderSn = utility.Int64ToString(newClientOrderId)
|
||||||
newOrder.CreatedAt = time.Now()
|
// newOrder.CreatedAt = time.Now()
|
||||||
newOrder.MainOrderType = "MARKET"
|
// newOrder.MainOrderType = "MARKET"
|
||||||
err = db.Model(&models.LinePreOrder{}).Create(&newOrder).Error
|
// err = db.Model(&models.LinePreOrder{}).Create(&newOrder).Error
|
||||||
|
|
||||||
|
err = db.Model(&order).Updates(map[string]interface{}{"desc": order.Desc, "order_sn": order.OrderSn}).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(fmt.Sprintf("生成合约新市价单失败 err:%+v", err))
|
logger.Error(fmt.Sprintf("生成合约新市价单失败 err:%+v", err))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if order.OrderType == 4 {
|
||||||
|
orderType = "STOP_MARKET"
|
||||||
|
}
|
||||||
|
|
||||||
params := binanceservice.FutOrderPlace{
|
params := binanceservice.FutOrderPlace{
|
||||||
ApiId: order.ApiId,
|
ApiId: order.ApiId,
|
||||||
Symbol: order.Symbol,
|
Symbol: order.Symbol,
|
||||||
@ -277,14 +303,14 @@ func (t LimitOrderTimeoutDuration) ReFutOrderPlace(db *gorm.DB, order models.Lin
|
|||||||
SideType: "MARKET",
|
SideType: "MARKET",
|
||||||
OpenOrder: 0,
|
OpenOrder: 0,
|
||||||
Profit: decimal.Decimal{},
|
Profit: decimal.Decimal{},
|
||||||
StopPrice: decimal.Decimal{},
|
StopPrice: utility.StringToDecimal(order.Price),
|
||||||
OrderType: "MARKET",
|
OrderType: orderType,
|
||||||
NewClientOrderId: utility.Int64ToString(newClientOrderId),
|
NewClientOrderId: utility.Int64ToString(newClientOrderId),
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := futApi.OrderPlace(db, params); err != nil {
|
if err := futApi.OrderPlace(db, params); err != nil {
|
||||||
logger.Error(fmt.Sprintf("重新下合约市价单失败 err:%+v", err))
|
logger.Error(fmt.Sprintf("重新下合约市价单失败 err:%+v", err))
|
||||||
err := db.Model(&models.LinePreOrder{}).Where("id = ? AND status = 0", newOrder.Id).Updates(map[string]interface{}{"status": "2", "desc": err.Error()}).Error
|
err := db.Model(&order).Updates(map[string]interface{}{"status": "2", "desc": order.Desc + " err:" + err.Error()}).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("下单失败后修改订单失败")
|
logger.Error("下单失败后修改订单失败")
|
||||||
return err
|
return err
|
||||||
|
|||||||
@ -51,4 +51,5 @@ const (
|
|||||||
|
|
||||||
//需要清理键值---------END-----------------
|
//需要清理键值---------END-----------------
|
||||||
|
|
||||||
|
JobReOrderTrigger = "job_re_order_trigger" //定时取消限价并下市价锁
|
||||||
)
|
)
|
||||||
|
|||||||
@ -254,6 +254,12 @@ func FuturesReduceTrigger(db *gorm.DB, reduceOrder ReduceListItem, futApi FutRes
|
|||||||
|
|
||||||
if err := futApi.ClosePositionLoop(reduceOrder.Symbol, reduceOrder.OrderSn, num, reduceOrder.Side, positionSide, apiInfo, "LIMIT", "0", price, 3); err != nil {
|
if err := futApi.ClosePositionLoop(reduceOrder.Symbol, reduceOrder.OrderSn, num, reduceOrder.Side, positionSide, apiInfo, "LIMIT", "0", price, 3); err != nil {
|
||||||
log.Errorf("合约减仓挂单失败 id:%s err:%v", reduceOrder.Id, err)
|
log.Errorf("合约减仓挂单失败 id:%s err:%v", reduceOrder.Id, err)
|
||||||
|
|
||||||
|
if err2 := db.Model(&DbModels.LinePreOrder{}).
|
||||||
|
Where("id = ? AND status =0", reduceOrder.Id).
|
||||||
|
Updates(map[string]interface{}{"status": 2, "desc": err.Error()}).Error; err2 != nil {
|
||||||
|
log.Errorf("合约减仓更新状态失败 id:%s err:%v", reduceOrder.Id, err2)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := helper.DefaultRedis.LRem(key, item); err != nil {
|
if _, err := helper.DefaultRedis.LRem(key, item); err != nil {
|
||||||
|
|||||||
@ -158,6 +158,7 @@ func handleReduceFilled(db *gorm.DB, preOrder *DbModels.LinePreOrder) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
totalNum := getFuturesPositionAvailableQuantity(db, apiUserInfo, preOrder, tradeSet)
|
totalNum := getFuturesPositionAvailableQuantity(db, apiUserInfo, preOrder, tradeSet)
|
||||||
|
totalNum = totalNum.Truncate(int32(tradeSet.AmountDigit))
|
||||||
futApi := FutRestApi{}
|
futApi := FutRestApi{}
|
||||||
for _, v := range orders {
|
for _, v := range orders {
|
||||||
if v.OrderType == 1 {
|
if v.OrderType == 1 {
|
||||||
@ -383,10 +384,10 @@ func handleFutMainOrderFilled(db *gorm.DB, preOrder *models.LinePreOrder) {
|
|||||||
|
|
||||||
futApi := FutRestApi{}
|
futApi := FutRestApi{}
|
||||||
num := getFuturesPositionAvailableQuantity(db, apiInfo, preOrder, tradeSet)
|
num := getFuturesPositionAvailableQuantity(db, apiInfo, preOrder, tradeSet)
|
||||||
|
num = num.Truncate(int32(tradeSet.AmountDigit))
|
||||||
|
|
||||||
for _, order := range orders {
|
for _, order := range orders {
|
||||||
price := utility.StrToDecimal(order.Price).Truncate(int32(tradeSet.PriceDigit))
|
price := utility.StrToDecimal(order.Price).Truncate(int32(tradeSet.PriceDigit))
|
||||||
num = num.Truncate(int32(tradeSet.AmountDigit))
|
|
||||||
order.Price = price.String()
|
order.Price = price.String()
|
||||||
|
|
||||||
if order.OrderType == 4 {
|
if order.OrderType == 4 {
|
||||||
|
|||||||
@ -217,10 +217,10 @@ func SpotStopLossTrigger(db *gorm.DB, stopOrder dto.StopLossRedisList, spotApi S
|
|||||||
for x := 1; x <= 4; x++ {
|
for x := 1; x <= 4; x++ {
|
||||||
err = spotApi.CancelOpenOrderByOrderSn(apiInfo, takeOrder.Symbol, takeOrder.OrderSn)
|
err = spotApi.CancelOpenOrderByOrderSn(apiInfo, takeOrder.Symbol, takeOrder.OrderSn)
|
||||||
|
|
||||||
if err == nil {
|
if err == nil || strings.Contains(err.Error(), "该交易对没有订单") {
|
||||||
|
err = nil
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -350,6 +350,12 @@ func SpotReduceTrigger(db *gorm.DB, reduceOrder ReduceListItem, spotApi SpotRest
|
|||||||
|
|
||||||
if err := spotApi.OrderPlaceLoop(db, params, 3); err != nil {
|
if err := spotApi.OrderPlaceLoop(db, params, 3); err != nil {
|
||||||
log.Errorf("现货减仓挂单失败 id:%s err:%v", reduceOrder.Id, err)
|
log.Errorf("现货减仓挂单失败 id:%s err:%v", reduceOrder.Id, err)
|
||||||
|
|
||||||
|
if err2 := db.Model(&DbModels.LinePreOrder{}).
|
||||||
|
Where("id =? AND status =0", reduceOrder.Id).
|
||||||
|
Updates(map[string]interface{}{"status": 2, "desc": err.Error()}).Error; err2 != nil {
|
||||||
|
log.Errorf("修改现货减仓状态失败 id:%s err:%v", reduceOrder.Id, err2)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := helper.DefaultRedis.LRem(key, item); err != nil {
|
if _, err := helper.DefaultRedis.LRem(key, item); err != nil {
|
||||||
|
|||||||
@ -527,7 +527,7 @@ func processTakeProfitAndStopLossOrders(db *gorm.DB, preOrder *models.LinePreOrd
|
|||||||
num := getSpotPositionAvailableQuantity(db, apiInfo, preOrder, tradeSet)
|
num := getSpotPositionAvailableQuantity(db, apiInfo, preOrder, tradeSet)
|
||||||
|
|
||||||
if err := db.Model(&DbModels.LinePreOrder{}).
|
if err := db.Model(&DbModels.LinePreOrder{}).
|
||||||
Where("pid = ? AND order_category = 1 AND order_type > 0 AND status = '0' ", preOrder.Id).
|
Where("pid = ? AND order_type > 0 AND status = '0' ", preOrder.Id).
|
||||||
Find(&orders).Error; err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
Find(&orders).Error; err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
logger.Error("订单回调查询止盈止损单失败:", err)
|
logger.Error("订单回调查询止盈止损单失败:", err)
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user