Files
exchange_go/services/binanceservice/orderservice.go
2025-02-10 18:21:44 +08:00

115 lines
3.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
// 获取主单配置
// 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
}