This commit is contained in:
2025-02-14 09:43:49 +08:00
parent 97037adbbb
commit 8fbfcbf285
19 changed files with 755 additions and 288 deletions

View File

@ -275,9 +275,9 @@ func (e *AddPosition) CalculateAmount(req dto.ManuallyCover, totalNum, lastPrice
// 主单平仓删除缓存
// mainOrderId 主单id
// coverType 1现货->合约 2->合约->合约 3合约->现货
func MainClosePositionClearCache(mainOrderId int, coverType int) {
if coverType == 1 {
// symbolType 1现货 2合约
func MainClosePositionClearCache(mainId int, symbolType int) {
if symbolType == 1 {
keySpotStop := fmt.Sprintf(rediskey.SpotStopLossList, global.EXCHANGE_BINANCE)
keySpotAddposition := fmt.Sprintf(rediskey.SpotAddPositionList, global.EXCHANGE_BINANCE)
spotStopArray, _ := helper.DefaultRedis.GetAllList(keySpotStop)
@ -290,7 +290,7 @@ func MainClosePositionClearCache(mainOrderId int, coverType int) {
log.Error("MainClosePositionClearCache Unmarshal err:", err)
}
if position.Pid == mainOrderId {
if position.MainId == mainId {
helper.DefaultRedis.LRem(keySpotAddposition, item)
}
}
@ -300,7 +300,7 @@ func MainClosePositionClearCache(mainOrderId int, coverType int) {
log.Error("MainClosePositionClearCache Unmarshal err:", err)
}
if stop.PId == mainOrderId {
if stop.MainId == mainId {
helper.DefaultRedis.LRem(keySpotStop, item)
}
}
@ -318,7 +318,7 @@ func MainClosePositionClearCache(mainOrderId int, coverType int) {
log.Error("MainClosePositionClearCache Unmarshal err:", err)
}
if position.Pid == mainOrderId {
if position.MainId == mainId {
helper.DefaultRedis.LRem(keyFutAddposition, item)
}
}
@ -328,7 +328,7 @@ func MainClosePositionClearCache(mainOrderId int, coverType int) {
log.Error("MainClosePositionClearCache Unmarshal err:", err)
}
if stop.PId == mainOrderId {
if stop.MainId == mainId {
helper.DefaultRedis.LRem(keyFutStop, item)
}
}
@ -352,3 +352,61 @@ func getPreOrder(db *gorm.DB, orderSn interface{}) (*DbModels.LinePreOrder, erro
}
return preOrder, nil
}
// 取消主单下的止盈止损
// mainId 主单id
// symbolType 1现货 2合约
func cancelSymbolTakeAndStop(db *gorm.DB, mainId int, symbolType int) error {
orders, err := GetSymbolTakeAndStop(db, mainId, symbolType)
errStr := ""
if err != nil {
return err
}
for _, order := range orders {
apiUserInfo, _ := GetApiInfo(order.ApiId)
if apiUserInfo.Id == 0 {
logger.Errorf("cancelSymbolTakeAndStop 查询api用户失败 apiid:%v ordersn:%s", order.ApiId, order.OrderSn)
}
switch {
case order.OrderType == 1 && symbolType == 1:
err = CancelOpenOrderByOrderSnLoop(apiUserInfo, order.Symbol, order.OrderSn)
if err != nil {
errStr += fmt.Sprintf("取消止盈失败,订单号:%s,错误:%v ", order.OrderSn, err)
}
case order.OrderType == 2 && symbolType == 1:
key := fmt.Sprintf(rediskey.SpotStopLossList, global.EXCHANGE_BINANCE)
stoplosss, _ := helper.DefaultRedis.GetAllList(key)
stop := dto.StopLossRedisList{}
for _, item := range stoplosss {
sonic.Unmarshal([]byte(item), &stop)
if stop.MainId == order.MainId {
_, err2 := helper.DefaultRedis.LRem(key, item)
if err2 != nil {
logger.Errorf("移除止损缓存失败 err:%v", err2)
}
}
}
case order.OrderType == 1 && symbolType == 2:
err = CancelFutOrderByOrderSnLoop(apiUserInfo, order.Symbol, order.OrderSn)
if err != nil {
errStr += fmt.Sprintf("取消止盈失败,订单号:%s,错误:%v ", order.OrderSn, err)
}
case order.OrderType == 2 && symbolType == 2:
err = CancelFutOrderByOrderSnLoop(apiUserInfo, order.Symbol, order.OrderSn)
if err != nil {
errStr += fmt.Sprintf("取消止损失败,订单号:%s,错误:%v ", order.OrderSn, err)
}
}
}
return nil
}