1、合仓

This commit is contained in:
2025-02-28 18:27:52 +08:00
parent 611d1df89c
commit a1a390aa9c
11 changed files with 578 additions and 197 deletions

View File

@ -7,6 +7,7 @@ import (
"go-admin/common/global"
"go-admin/common/helper"
models2 "go-admin/models"
"go-admin/models/positiondto"
"go-admin/pkg/utility"
"go-admin/pkg/utility/snowflakehelper"
"go-admin/services/binanceservice"
@ -225,11 +226,7 @@ func (e *LinePreOrder) Remove(d *dto.LinePreOrderDeleteReq, p *actions.DataPermi
var data models.LinePreOrder
var list []models.LinePreOrder
e.Orm.Model(&models.LinePreOrder{}).Where("id in ?", d.GetId()).Find(&list)
//for _, order := range list {
//if order.Status != "0" {
// return errors.New(fmt.Sprintf("订单id %d 已被触发 无法被删除", order.Id))
//}
//}
db := e.Orm.Model(&data).
Scopes(
actions.Permission(data.TableName(), p),
@ -245,6 +242,8 @@ func (e *LinePreOrder) Remove(d *dto.LinePreOrderDeleteReq, p *actions.DataPermi
return errors.New("无权删除该数据")
}
positions := map[string]positiondto.LinePreOrderPositioinDelReq{}
//删除的缓存
for _, order := range list {
redisList := dto.PreOrderRedisList{
@ -272,6 +271,19 @@ func (e *LinePreOrder) Remove(d *dto.LinePreOrderDeleteReq, p *actions.DataPermi
helper.DefaultRedis.LRem(listKey, string(marshal))
}
//会影响持仓的
removeSymbolKey := fmt.Sprintf("%v_%s_%s_%s_%v", order.ApiId, order.ExchangeType, order.Symbol, order.Site, order.SymbolType)
if _, ok := positions[removeSymbolKey]; !ok {
positions[removeSymbolKey] = positiondto.LinePreOrderPositioinDelReq{
ApiId: order.ApiId,
Symbol: order.Symbol,
ExchangeType: order.ExchangeType,
Side: order.Site,
SymbolType: order.SymbolType,
}
}
binanceservice.MainClosePositionClearCache(order.Id, order.SymbolType)
ints = append(ints, order.Id)
@ -280,6 +292,27 @@ func (e *LinePreOrder) Remove(d *dto.LinePreOrderDeleteReq, p *actions.DataPermi
if len(ints) > 0 {
e.Orm.Model(&models.LinePreOrder{}).Where("main_id >0 AND main_id in ?", ints).Unscoped().Delete(&models.LinePreOrder{})
}
//清理仓位缓存
for _, v := range positions {
var count int64
e.Orm.Model(&models.LinePreOrder{}).
Where("api_id =? AND site=? AND symbol=? AND symbol_type =? AND exchange_type =? AND status =6",
v.ApiId, v.Side, v.Symbol, v.SymbolType, v.ExchangeType).Count(&count)
//没有已开仓的订单 直接清理仓位
if count == 0 {
var key string
if v.SymbolType == 1 {
key = fmt.Sprintf(rediskey.SpotPosition, v.ExchangeType, v.ApiId, v.Symbol, v.Side)
} else {
key = fmt.Sprintf(rediskey.FuturePosition, v.ExchangeType, v.ApiId, v.Symbol, v.Side)
}
helper.DefaultRedis.DeleteString(key)
}
}
return nil
}
@ -323,11 +356,11 @@ func (e *LinePreOrder) AddPreOrder(req *dto.LineAddPreOrderReq, p *actions.DataP
//获取交易对
tradeSet, _ := helper.GetObjString[models2.TradeSet](helper.DefaultRedis, key)
orderCount := e.CheckRepeatOrder(req.SymbolType, id, req.Site, tradeSet.Coin)
if orderCount > 0 {
*errs = append(*errs, fmt.Errorf("api_id:%s 获取交易对:%s 该交易对已存在,请勿重复下单", id, req.Symbol))
continue
}
// orderCount := e.CheckRepeatOrder(req.SymbolType, id, req.Site, tradeSet.Coin)
// if orderCount > 0 {
// *errs = append(*errs, fmt.Errorf("api_id:%s 获取交易对:%s 该交易对已存在,请勿重复下单", id, req.Symbol))
// continue
// }
tickerPrice := utility.StrToDecimal(tradeSet.LastPrice)
if tickerPrice.Equal(decimal.Zero) { //redis 没有这个值
*errs = append(*errs, fmt.Errorf("api_id:%s 获取交易对:%s 交易行情出错", id, req.Symbol))