1
This commit is contained in:
@ -130,10 +130,13 @@ func handleReduceFilled(db *gorm.DB, preOrder *DbModels.LinePreOrder) {
|
||||
logger.Errorf("handleReduceFilled 获取交易对设置失败,订单号:%s", preOrder.OrderSn)
|
||||
return
|
||||
}
|
||||
rate := utility.StringAsFloat(preOrder.Rate)
|
||||
|
||||
orderExt := models.LinePreOrderExt{}
|
||||
db.Model(&orderExt).Where("order_id =?", preOrder.Id).First(&orderExt)
|
||||
// rate := utility.StringAsFloat(orderExt.AddPositionVal)
|
||||
|
||||
// 100%减仓 终止流程
|
||||
if rate >= 100 {
|
||||
if orderExt.AddPositionVal.Cmp(decimal.NewFromInt(100)) >= 0 {
|
||||
//缓存
|
||||
removeFutLossAndAddPosition(preOrder.MainId, preOrder.OrderSn)
|
||||
removePosition(db, preOrder)
|
||||
@ -152,7 +155,6 @@ func handleReduceFilled(db *gorm.DB, preOrder *DbModels.LinePreOrder) {
|
||||
return
|
||||
}
|
||||
|
||||
orderExt := models.LinePreOrderExt{}
|
||||
totalNum := getFuturesPositionAvailableQuantity(db, apiUserInfo, preOrder, tradeSet)
|
||||
price := utility.StrToDecimal(preOrder.Price).Truncate(int32(tradeSet.PriceDigit))
|
||||
futApi := FutRestApi{}
|
||||
@ -162,8 +164,6 @@ func handleReduceFilled(db *gorm.DB, preOrder *DbModels.LinePreOrder) {
|
||||
mainId = preOrder.MainId
|
||||
}
|
||||
|
||||
db.Model(&orderExt).Where("order_id =?", preOrder.Pid).First(&orderExt)
|
||||
|
||||
for _, v := range orders {
|
||||
if v.OrderType == 1 {
|
||||
//亏损大于0 重新计算比例
|
||||
|
||||
@ -174,14 +174,15 @@ func handleMainReduceFilled(db *gorm.DB, preOrder *DbModels.LinePreOrder) {
|
||||
orderExt := models.LinePreOrderExt{}
|
||||
positionData := savePosition(db, preOrder)
|
||||
orders := make([]models.LinePreOrder, 0)
|
||||
rate := utility.StringAsFloat(preOrder.Rate)
|
||||
// rate := utility.StringAsFloat(preOrder.Rate)
|
||||
|
||||
if err := db.Model(&DbModels.LinePreOrderStatus{}).Where("order_id =? ", preOrder.MainId).Update("reduce_status", 1).Error; err != nil {
|
||||
logger.Errorf("handleMainReduceFilled 更新主单减仓状态失败,订单号:%s", preOrder.OrderSn)
|
||||
}
|
||||
db.Model(&orderExt).Where("order_id =?", preOrder.Id).Find(&orderExt)
|
||||
|
||||
// 100%减仓 终止流程
|
||||
if rate >= 100 {
|
||||
if orderExt.AddPositionVal.Cmp(decimal.NewFromInt(100)) >= 0 {
|
||||
//缓存
|
||||
removeSpotLossAndAddPosition(preOrder.MainId, preOrder.OrderSn)
|
||||
removePosition(db, preOrder)
|
||||
@ -193,7 +194,6 @@ func handleMainReduceFilled(db *gorm.DB, preOrder *DbModels.LinePreOrder) {
|
||||
return
|
||||
}
|
||||
|
||||
db.Model(&orderExt).Where("order_id =?", preOrder.Pid).Find(&orderExt)
|
||||
totalNum := getSpotPositionAvailableQuantity(db, apiUserInfo, preOrder, tradeSet) //getSpotTotalNum(apiUserInfo, preOrder, tradeSet)
|
||||
totalNum = totalNum.Mul(decimal.NewFromFloat(0.998)).Truncate(int32(tradeSet.AmountDigit))
|
||||
price := utility.StrToDecimal(preOrder.Price)
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
package scriptservice
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/app/admin/service"
|
||||
"go-admin/app/admin/service/dto"
|
||||
"go-admin/common/const/rediskey"
|
||||
"go-admin/common/helper"
|
||||
"go-admin/pkg/utility"
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
@ -33,13 +35,26 @@ func (receiver *PreOrder) AddOrder(orm *gorm.DB) {
|
||||
}
|
||||
|
||||
func workerWithLock(orm *gorm.DB, wg *sync.WaitGroup) {
|
||||
defer func() {
|
||||
wg.Done()
|
||||
}()
|
||||
scriptId, err := helper.DefaultRedis.LPopList(rediskey.PreOrderScriptList)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
defer func() {
|
||||
wg.Done()
|
||||
if r := recover(); r != nil {
|
||||
// 记录 Goroutine ID、panic 信息和堆栈
|
||||
err := string(debug.Stack())
|
||||
log.Error(fmt.Sprintf("Recovered from panic in Goroutine %s: %v\nStack Trace:\n%s", utility.GetGoroutineID(), r, err))
|
||||
|
||||
orm.Model(&models.LinePreScript{}).Where("id = ? ", scriptId).Updates(map[string]interface{}{
|
||||
"status": "1",
|
||||
"error": err,
|
||||
},
|
||||
)
|
||||
}
|
||||
}()
|
||||
|
||||
var scriptInfo models.LinePreScript
|
||||
err = orm.Model(&models.LinePreScript{}).Where("id = ? AND status = '0'", scriptId).Find(&scriptInfo).Error
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user