2025-02-06 11:14:33 +08:00
|
|
|
|
package binanceservice
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"go-admin/app/admin/models"
|
|
|
|
|
|
DbModels "go-admin/app/admin/models"
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/shopspring/decimal"
|
|
|
|
|
|
"gorm.io/gorm"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// 获取订单明细
|
|
|
|
|
|
func GetOrderById(db *gorm.DB, id int) (DbModels.LinePreOrder, error) {
|
|
|
|
|
|
result := DbModels.LinePreOrder{}
|
|
|
|
|
|
|
|
|
|
|
|
if err := db.Model(&result).Where("id =?", id).First(&result).Error; err != nil {
|
|
|
|
|
|
return result, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return result, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取已开仓的对冲单、对冲加仓单id
|
|
|
|
|
|
// pid:主单id
|
|
|
|
|
|
// coverType:对冲类型 1-现货对合约 2-合约对合约 3-合约对现货
|
|
|
|
|
|
func GetHedgeOpenOrderIds(db *gorm.DB, pid int, coverType int) ([]int, error) {
|
|
|
|
|
|
result := make([]DbModels.LinePreOrder, 0)
|
|
|
|
|
|
resultIds := make([]int, 0)
|
|
|
|
|
|
query := db.Model(&result)
|
|
|
|
|
|
|
|
|
|
|
|
switch coverType {
|
|
|
|
|
|
case 3:
|
|
|
|
|
|
query = query.Where("pid =? AND order_type in ('7','8','10','11') AND operate_type =1 AND status in ('9','13')", pid)
|
|
|
|
|
|
case 2, 1:
|
|
|
|
|
|
query = query.Where("pid =? AND order_type in ('10','11') AND operate_type =1 AND status ='13'", pid)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if err := query.Select("id").Find(&result).Error; err != nil {
|
|
|
|
|
|
return resultIds, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for _, v := range result {
|
|
|
|
|
|
resultIds = append(resultIds, v.Id)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return resultIds, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获得对冲单
|
|
|
|
|
|
func GetHedgeOpenOrder(db *gorm.DB, pid int, coverType int) (DbModels.LinePreOrder, error) {
|
|
|
|
|
|
result := DbModels.LinePreOrder{}
|
|
|
|
|
|
orderType := ""
|
|
|
|
|
|
|
|
|
|
|
|
switch coverType {
|
|
|
|
|
|
case 1:
|
|
|
|
|
|
orderType = "7"
|
|
|
|
|
|
case 2, 3:
|
|
|
|
|
|
orderType = "10"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if err := db.Model(&result).Where("pid =? AND order_type =? AND operate_type =1", pid, orderType).First(&result).Error; err != nil {
|
|
|
|
|
|
return result, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return result, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取止损单
|
|
|
|
|
|
func GetStopOrder(db *gorm.DB, pid int) (DbModels.LinePreOrder, error) {
|
|
|
|
|
|
result := DbModels.LinePreOrder{}
|
|
|
|
|
|
|
|
|
|
|
|
if err := db.Model(&result).Where("pid =? AND order_type in ('4','6')", pid).First(&result).Error; err != nil {
|
|
|
|
|
|
return result, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return result, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取最后一条对冲的下单百分比
|
|
|
|
|
|
func GetStopOrderRate(db *gorm.DB, pid int) (decimal.Decimal, error) {
|
|
|
|
|
|
var result decimal.Decimal
|
|
|
|
|
|
|
|
|
|
|
|
if err := db.Model(&DbModels.LinePreOrder{}).Where("pid =? AND order_type in ('7','10')", pid).
|
|
|
|
|
|
Select("rate").
|
|
|
|
|
|
Order("id DESC").
|
|
|
|
|
|
First(&result).Error; err != nil {
|
|
|
|
|
|
return result, err
|
|
|
|
|
|
}
|
|
|
|
|
|
return result, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取最后一条对冲
|
|
|
|
|
|
func GetLastStop(db *gorm.DB, pid int) (DbModels.LinePreOrder, error) {
|
|
|
|
|
|
result := models.LinePreOrder{}
|
|
|
|
|
|
|
|
|
|
|
|
if err := db.Model(&result).
|
|
|
|
|
|
Joins("JOIN line_pre_order as o ON o.id = line_pre_order.pid AND o.status in ('9','13')").
|
|
|
|
|
|
Where("line_pre_order.pid =? AND line_pre_order.order_type in ('7','10')", pid).
|
|
|
|
|
|
Order("line_pre_order.id DESC").Select("line_pre_order.*").First(&result).Error; err != nil {
|
|
|
|
|
|
return result, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return result, nil
|
|
|
|
|
|
}
|
2025-02-10 18:21:44 +08:00
|
|
|
|
|
|
|
|
|
|
// 获取主单配置
|
|
|
|
|
|
// mainId 主单Id
|
|
|
|
|
|
func GetOrderExts(db *gorm.DB, mainId int) ([]models.LinePreOrderExt, error) {
|
|
|
|
|
|
result := make([]models.LinePreOrderExt, 0)
|
|
|
|
|
|
if err := db.Model(&result).Where("main_id =?", mainId).Find(&result).Error; err != nil {
|
|
|
|
|
|
return result, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return result, nil
|
|
|
|
|
|
}
|