1、临时提交 反向下单

This commit is contained in:
2025-08-01 10:30:43 +08:00
parent 771c617da4
commit 56a761e5ab
16 changed files with 490 additions and 188 deletions

View File

@ -1,7 +1,7 @@
package apis
import (
"fmt"
"fmt"
"github.com/gin-gonic/gin"
"github.com/go-admin-team/go-admin-core/sdk/api"
@ -33,27 +33,27 @@ type LineReversePosition struct {
// @Router /api/v1/line-reverse-position [get]
// @Security Bearer
func (e LineReversePosition) GetPage(c *gin.Context) {
req := dto.LineReversePositionGetPageReq{}
s := service.LineReversePosition{}
err := e.MakeContext(c).
MakeOrm().
Bind(&req).
MakeService(&s.Service).
Errors
if err != nil {
e.Logger.Error(err)
e.Error(500, err, err.Error())
return
}
req := dto.LineReversePositionGetPageReq{}
s := service.LineReversePosition{}
err := e.MakeContext(c).
MakeOrm().
Bind(&req).
MakeService(&s.Service).
Errors
if err != nil {
e.Logger.Error(err)
e.Error(500, err, err.Error())
return
}
p := actions.GetPermissionFromContext(c)
list := make([]models.LineReversePosition, 0)
list := make([]dto.LineReversePositionListResp, 0)
var count int64
err = s.GetPage(&req, p, &list, &count)
if err != nil {
e.Error(500, err, fmt.Sprintf("获取反单管理-仓位失败,\r\n失败信息 %s", err.Error()))
return
return
}
e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
@ -70,7 +70,7 @@ func (e LineReversePosition) GetPage(c *gin.Context) {
func (e LineReversePosition) Get(c *gin.Context) {
req := dto.LineReversePositionGetReq{}
s := service.LineReversePosition{}
err := e.MakeContext(c).
err := e.MakeContext(c).
MakeOrm().
Bind(&req).
MakeService(&s.Service).
@ -86,10 +86,10 @@ func (e LineReversePosition) Get(c *gin.Context) {
err = s.Get(&req, p, &object)
if err != nil {
e.Error(500, err, fmt.Sprintf("获取反单管理-仓位失败,\r\n失败信息 %s", err.Error()))
return
return
}
e.OK( object, "查询成功")
e.OK(object, "查询成功")
}
// Insert 创建反单管理-仓位
@ -103,25 +103,25 @@ func (e LineReversePosition) Get(c *gin.Context) {
// @Router /api/v1/line-reverse-position [post]
// @Security Bearer
func (e LineReversePosition) Insert(c *gin.Context) {
req := dto.LineReversePositionInsertReq{}
s := service.LineReversePosition{}
err := e.MakeContext(c).
MakeOrm().
Bind(&req).
MakeService(&s.Service).
Errors
if err != nil {
e.Logger.Error(err)
e.Error(500, err, err.Error())
return
}
req := dto.LineReversePositionInsertReq{}
s := service.LineReversePosition{}
err := e.MakeContext(c).
MakeOrm().
Bind(&req).
MakeService(&s.Service).
Errors
if err != nil {
e.Logger.Error(err)
e.Error(500, err, err.Error())
return
}
// 设置创建人
req.SetCreateBy(user.GetUserId(c))
err = s.Insert(&req)
if err != nil {
e.Error(500, err, fmt.Sprintf("创建反单管理-仓位失败,\r\n失败信息 %s", err.Error()))
return
return
}
e.OK(req.GetId(), "创建成功")
@ -139,27 +139,27 @@ func (e LineReversePosition) Insert(c *gin.Context) {
// @Router /api/v1/line-reverse-position/{id} [put]
// @Security Bearer
func (e LineReversePosition) Update(c *gin.Context) {
req := dto.LineReversePositionUpdateReq{}
s := service.LineReversePosition{}
err := e.MakeContext(c).
MakeOrm().
Bind(&req).
MakeService(&s.Service).
Errors
if err != nil {
e.Logger.Error(err)
e.Error(500, err, err.Error())
return
}
req := dto.LineReversePositionUpdateReq{}
s := service.LineReversePosition{}
err := e.MakeContext(c).
MakeOrm().
Bind(&req).
MakeService(&s.Service).
Errors
if err != nil {
e.Logger.Error(err)
e.Error(500, err, err.Error())
return
}
req.SetUpdateBy(user.GetUserId(c))
p := actions.GetPermissionFromContext(c)
err = s.Update(&req, p)
if err != nil {
e.Error(500, err, fmt.Sprintf("修改反单管理-仓位失败,\r\n失败信息 %s", err.Error()))
return
return
}
e.OK( req.GetId(), "修改成功")
e.OK(req.GetId(), "修改成功")
}
// Delete 删除反单管理-仓位
@ -171,18 +171,18 @@ func (e LineReversePosition) Update(c *gin.Context) {
// @Router /api/v1/line-reverse-position [delete]
// @Security Bearer
func (e LineReversePosition) Delete(c *gin.Context) {
s := service.LineReversePosition{}
req := dto.LineReversePositionDeleteReq{}
err := e.MakeContext(c).
MakeOrm().
Bind(&req).
MakeService(&s.Service).
Errors
if err != nil {
e.Logger.Error(err)
e.Error(500, err, err.Error())
return
}
s := service.LineReversePosition{}
req := dto.LineReversePositionDeleteReq{}
err := e.MakeContext(c).
MakeOrm().
Bind(&req).
MakeService(&s.Service).
Errors
if err != nil {
e.Logger.Error(err)
e.Error(500, err, err.Error())
return
}
// req.SetUpdateBy(user.GetUserId(c))
p := actions.GetPermissionFromContext(c)
@ -190,7 +190,7 @@ func (e LineReversePosition) Delete(c *gin.Context) {
err = s.Remove(&req, p)
if err != nil {
e.Error(500, err, fmt.Sprintf("删除反单管理-仓位失败,\r\n失败信息 %s", err.Error()))
return
return
}
e.OK( req.GetId(), "删除成功")
e.OK(req.GetId(), "删除成功")
}

View File

@ -11,8 +11,9 @@ import (
type LineReverseOrder struct {
models.Model
ApiId int `json:"apiId" gorm:"type:bigint;comment:api id"`
Category int `json:"category" gorm:"type:tinyint;comment:分类 0-原始订单 1-反单"`
PositionId int `json:"positionId" gorm:"type:bigint;comment:仓位id"`
ApiId int `json:"apiId" gorm:"type:bigint;comment:api id"`
Category int `json:"category" gorm:"type:tinyint;comment:分类 0-原始订单 1-反单"`
OrderSn string `json:"orderSn" gorm:"type:varchar(50);comment:订单号 0-主单 1-止盈 2-止损"`
OrderId string `json:"orderId" gorm:"type:varchar(50);comment:币安订单号"`

View File

@ -9,18 +9,20 @@ import (
type LineReversePosition struct {
models.Model
ApiId int `json:"apiId" gorm:"type:bigint;comment:api_id"`
TotalAmount decimal.Decimal `json:"totalAmount" gorm:"type:decimal(18,8);comment:总仓位"`
Amount decimal.Decimal `json:"amount" gorm:"type:decimal(18,8);comment:仓位"`
ReverseApiId int `json:"reverseApiId" gorm:"type:bigint;comment:反单api_id"`
TotalReverseAmount decimal.Decimal `json:"totalReverseAmount" gorm:"type:decimal(18,8);comment:反单仓位"`
ReverseAmount decimal.Decimal `json:"reverseAmount" gorm:"type:decimal(18,8);comment:反单仓位"`
Side string `json:"side" gorm:"type:varchar(10);comment:买卖方向 BUY SELL"`
PositionSide string `json:"positionSide" gorm:"type:varchar(10);comment:持仓方向 LONG SHORT"`
Symbol string `json:"symbol" gorm:"type:varchar(20);comment:交易对"`
Status int `json:"status" gorm:"type:tinyint;comment:仓位状态 1-已开仓 2-已平仓"`
ReverseStatus int `json:"reverseStatus" gorm:"type:tinyint;comment:反单仓位状态 1-已开仓 2-已平仓"`
PositionNo string `json:"positionNo" gorm:"type:varchar(18);comment:仓位编号"`
ApiId int `json:"apiId" gorm:"type:bigint;comment:api_id"`
TotalAmount decimal.Decimal `json:"totalAmount" gorm:"type:decimal(18,8);comment:仓位"`
Amount decimal.Decimal `json:"amount" gorm:"type:decimal(18,8);comment:仓位"`
ReverseApiId int `json:"reverseApiId" gorm:"type:bigint;comment:反单api_id"`
TotalReverseAmount decimal.Decimal `json:"totalReverseAmount" gorm:"type:decimal(18,8);comment:反单仓位"`
ReverseAmount decimal.Decimal `json:"reverseAmount" gorm:"type:decimal(18,8);comment:反单仓位"`
Side string `json:"side" gorm:"type:varchar(10);comment:买卖方向 BUY SELL"`
PositionSide string `json:"positionSide" gorm:"type:varchar(10);comment:持仓方向 LONG SHORT"`
Symbol string `json:"symbol" gorm:"type:varchar(20);comment:交易对"`
Status int `json:"status" gorm:"type:tinyint;comment:仓位状态 1-已开仓 2-已平仓"`
ReverseStatus int `json:"reverseStatus" gorm:"type:tinyint;comment:反单仓位状态 1-已开仓 2-已平仓"`
AveragePrice decimal.Decimal `json:"averagePrice" gorm:"type:decimal(18,8);comment:主单平均价格"`
ReverseAveragePrice decimal.Decimal `json:"reverseAveragePrice" gorm:"type:decimal(18,8);comment:反单平均价格"`
models.ModelTime
models.ControlBy
}

View File

@ -19,6 +19,7 @@ type LineReverseOrderGetPageReq struct {
PositionSide string `form:"positionSide" search:"type:exact;column:position_side;table:line_reverse_order" comment:"持仓方向 LONG-多 SHORT-空"`
Side string `form:"side" search:"type:exact;column:side;table:line_reverse_order" comment:"买卖方向 SELL-卖 BUY-买"`
Status int `form:"status" search:"type:exact;column:status;table:line_reverse_order" comment:"状态 1-待下单 2-已下单 3-已成交 4-已平仓 5-已止损"`
PositionId int `form:"positionId" search:"type:exact;column:position_id;table:line_reverse_order" comment:"持仓id"`
LineReverseOrderOrder
}
@ -52,7 +53,7 @@ func (m *LineReverseOrderGetPageReq) GetNeedSearch() interface{} {
type LineReverseOrderInsertReq struct {
Id int `json:"-" comment:"主键id"` // 主键id
PId int `json:"pId" comment:"主单id"`
PositionId int `json:"positionId" comment:"仓位id"`
OrderSn string `json:"orderSn" comment:"订单号"`
OrderId string `json:"orderId" comment:"币安订单号"`
FollowOrderSn string `json:"followOrderSn" comment:"跟随币安订单号"`
@ -86,6 +87,7 @@ func (s *LineReverseOrderInsertReq) Generate(model *models.LineReverseOrder) {
model.PositionSide = s.PositionSide
model.Side = s.Side
model.SignPrice = s.SignPrice
model.TriggerTime = &s.TriggerTime
model.Status = s.Status
model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的
}
@ -96,7 +98,7 @@ func (s *LineReverseOrderInsertReq) GetId() interface{} {
type LineReverseOrderUpdateReq struct {
Id int `uri:"id" comment:"主键id"` // 主键id
PId int `json:"pId" comment:"主单id"`
PositionId int `json:"positionId" comment:"仓位id"`
OrderSn string `json:"orderSn" comment:"订单号"`
OrderId string `json:"orderId" comment:"币安订单号"`
FollowOrderSn string `json:"followOrderSn" comment:"跟随币安订单号"`
@ -118,7 +120,6 @@ func (s *LineReverseOrderUpdateReq) Generate(model *models.LineReverseOrder) {
if s.Id == 0 {
model.Model = common.Model{Id: s.Id}
}
model.OrderSn = s.OrderSn
model.OrderId = s.OrderId
model.FollowOrderSn = s.FollowOrderSn
@ -131,6 +132,7 @@ func (s *LineReverseOrderUpdateReq) Generate(model *models.LineReverseOrder) {
model.PositionSide = s.PositionSide
model.Side = s.Side
model.SignPrice = s.SignPrice
model.TriggerTime = &s.TriggerTime
model.Status = s.Status
model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的
}

View File

@ -115,3 +115,21 @@ type LineReversePositionDeleteReq struct {
func (s *LineReversePositionDeleteReq) GetId() interface{} {
return s.Ids
}
type LineReversePositionListResp struct {
Id int `json:"id"`
ApiName string `json:"apiName"`
ReverseApiName string `json:"reverseApiName"`
Amount decimal.Decimal `json:"amount"`
TotalAmount decimal.Decimal `json:"totalAmount"`
ReverseAmount decimal.Decimal `json:"reverseAmount"`
TotalReverseAmount decimal.Decimal `json:"totalReverseAmount"`
Side string `json:"side"`
PositionSide string `json:"positionSide"`
Symbol string `json:"symbol"`
Status int `json:"status"`
ReverseStatus int `json:"reverseStatus"`
AveragePrice decimal.Decimal `json:"averagePrice"`
ReverseAveragePrice decimal.Decimal `json:"reverseAveragePrice"`
CreatedAt string `json:"createdAt"`
}

View File

@ -3,13 +3,15 @@ package service
import (
"errors"
"github.com/go-admin-team/go-admin-core/sdk/service"
"github.com/go-admin-team/go-admin-core/sdk/service"
"github.com/jinzhu/copier"
"gorm.io/gorm"
"go-admin/app/admin/models"
"go-admin/app/admin/service/dto"
"go-admin/common/actions"
cDto "go-admin/common/dto"
"go-admin/pkg/utility"
)
type LineReversePosition struct {
@ -17,9 +19,10 @@ type LineReversePosition struct {
}
// GetPage 获取LineReversePosition列表
func (e *LineReversePosition) GetPage(c *dto.LineReversePositionGetPageReq, p *actions.DataPermission, list *[]models.LineReversePosition, count *int64) error {
func (e *LineReversePosition) GetPage(c *dto.LineReversePositionGetPageReq, p *actions.DataPermission, list *[]dto.LineReversePositionListResp, count *int64) error {
var err error
var data models.LineReversePosition
var datas []models.LineReversePosition
err = e.Orm.Model(&data).
Scopes(
@ -27,12 +30,52 @@ func (e *LineReversePosition) GetPage(c *dto.LineReversePositionGetPageReq, p *a
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
actions.Permission(data.TableName(), p),
).
Find(list).Limit(-1).Offset(-1).
Find(&datas).Limit(-1).Offset(-1).
Count(count).Error
if err != nil {
e.Log.Errorf("LineReversePositionService GetPage error:%s \r\n", err)
return err
}
userIds := make([]int, 0)
for _, item := range datas {
if !utility.ContainsInt(userIds, item.ApiId) {
userIds = append(userIds, item.ApiId)
}
if !utility.ContainsInt(userIds, item.ReverseApiId) {
userIds = append(userIds, item.ReverseApiId)
}
}
userMap := make(map[int]string, 0)
if len(userIds) > 0 {
var users []models.LineApiUser
e.Orm.Model(&models.LineApiUser{}).
Where("id IN (?)", userIds).
Find(&users)
for _, item := range users {
userMap[int(item.Id)] = item.ApiName
}
}
for _, item := range datas {
var resp dto.LineReversePositionListResp
copier.Copy(&resp, &item)
if userName, ok := userMap[item.ApiId]; ok {
resp.ApiName = userName
}
if userName, ok := userMap[item.ReverseApiId]; ok {
resp.ReverseApiName = userName
}
*list = append(*list, resp)
}
return nil
}
@ -59,9 +102,9 @@ func (e *LineReversePosition) Get(d *dto.LineReversePositionGetReq, p *actions.D
// Insert 创建LineReversePosition对象
func (e *LineReversePosition) Insert(c *dto.LineReversePositionInsertReq) error {
var err error
var data models.LineReversePosition
c.Generate(&data)
var err error
var data models.LineReversePosition
c.Generate(&data)
err = e.Orm.Create(&data).Error
if err != nil {
e.Log.Errorf("LineReversePositionService Insert error:%s \r\n", err)
@ -72,22 +115,22 @@ func (e *LineReversePosition) Insert(c *dto.LineReversePositionInsertReq) error
// Update 修改LineReversePosition对象
func (e *LineReversePosition) Update(c *dto.LineReversePositionUpdateReq, p *actions.DataPermission) error {
var err error
var data = models.LineReversePosition{}
e.Orm.Scopes(
actions.Permission(data.TableName(), p),
).First(&data, c.GetId())
c.Generate(&data)
var err error
var data = models.LineReversePosition{}
e.Orm.Scopes(
actions.Permission(data.TableName(), p),
).First(&data, c.GetId())
c.Generate(&data)
db := e.Orm.Save(&data)
if err = db.Error; err != nil {
e.Log.Errorf("LineReversePositionService Save error:%s \r\n", err)
return err
}
if db.RowsAffected == 0 {
return errors.New("无权更新该数据")
}
return nil
db := e.Orm.Save(&data)
if err = db.Error; err != nil {
e.Log.Errorf("LineReversePositionService Save error:%s \r\n", err)
return err
}
if db.RowsAffected == 0 {
return errors.New("无权更新该数据")
}
return nil
}
// Remove 删除LineReversePosition
@ -99,11 +142,11 @@ func (e *LineReversePosition) Remove(d *dto.LineReversePositionDeleteReq, p *act
actions.Permission(data.TableName(), p),
).Delete(&data, d.GetId())
if err := db.Error; err != nil {
e.Log.Errorf("Service RemoveLineReversePosition error:%s \r\n", err)
return err
}
if db.RowsAffected == 0 {
return errors.New("无权删除该数据")
}
e.Log.Errorf("Service RemoveLineReversePosition error:%s \r\n", err)
return err
}
if db.RowsAffected == 0 {
return errors.New("无权删除该数据")
}
return nil
}