1、暂存
This commit is contained in:
@ -120,6 +120,11 @@ func (e LineApiUser) Insert(c *gin.Context) {
|
||||
// 设置创建人
|
||||
req.SetCreateBy(user.GetUserId(c))
|
||||
|
||||
if err := req.Valid(); err != nil {
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
err = s.Insert(&req)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("创建api用户管理失败,\r\n失败信息 %s", err.Error()))
|
||||
@ -153,6 +158,12 @@ func (e LineApiUser) Update(c *gin.Context) {
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if err := req.Valid(); err != nil {
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
req.SetUpdateBy(user.GetUserId(c))
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
|
||||
@ -267,3 +278,30 @@ func (e LineApiUser) GetMainUser(c *gin.Context) {
|
||||
}
|
||||
e.OK(list, "操作成功")
|
||||
}
|
||||
|
||||
// GetUnBindApiUser 获取未绑定下反单api用户
|
||||
func (e LineApiUser) GetUnBindReverseApiUser(c *gin.Context) {
|
||||
s := service.LineApiUser{}
|
||||
req := dto.GetUnBindReverseReq{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req, binding.Query, binding.Form).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
datas := make([]dto.UnBindReverseResp, 0)
|
||||
|
||||
err = s.GetUnBindApiUser(&req, &datas)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("获取失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
e.OK(datas, "查询成功")
|
||||
}
|
||||
|
||||
191
app/admin/apis/line_reverse_setting.go
Normal file
191
app/admin/apis/line_reverse_setting.go
Normal file
@ -0,0 +1,191 @@
|
||||
package apis
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/api"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
|
||||
_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
|
||||
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/app/admin/service"
|
||||
"go-admin/app/admin/service/dto"
|
||||
"go-admin/common/actions"
|
||||
)
|
||||
|
||||
type LineReverseSetting struct {
|
||||
api.Api
|
||||
}
|
||||
|
||||
// GetPage 获取反单下单配置列表
|
||||
// @Summary 获取反单下单配置列表
|
||||
// @Description 获取反单下单配置列表
|
||||
// @Tags 反单下单配置
|
||||
// @Param pageSize query int false "页条数"
|
||||
// @Param pageIndex query int false "页码"
|
||||
// @Success 200 {object} response.Response{data=response.Page{list=[]models.LineReverseSetting}} "{"code": 200, "data": [...]}"
|
||||
// @Router /api/v1/line-reverse-setting [get]
|
||||
// @Security Bearer
|
||||
func (e LineReverseSetting) GetPage(c *gin.Context) {
|
||||
req := dto.LineReverseSettingGetPageReq{}
|
||||
s := service.LineReverseSetting{}
|
||||
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.LineReverseSetting, 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
|
||||
}
|
||||
|
||||
e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
|
||||
}
|
||||
|
||||
// Get 获取反单下单配置
|
||||
// @Summary 获取反单下单配置
|
||||
// @Description 获取反单下单配置
|
||||
// @Tags 反单下单配置
|
||||
// @Param id path int false "id"
|
||||
// @Success 200 {object} response.Response{data=models.LineReverseSetting} "{"code": 200, "data": [...]}"
|
||||
// @Router /api/v1/line-reverse-setting/{id} [get]
|
||||
// @Security Bearer
|
||||
func (e LineReverseSetting) Get(c *gin.Context) {
|
||||
req := dto.LineReverseSettingGetReq{}
|
||||
s := service.LineReverseSetting{}
|
||||
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
|
||||
}
|
||||
var object models.LineReverseSetting
|
||||
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
err = s.Get(&req, p, &object)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("获取反单下单配置失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
e.OK( object, "查询成功")
|
||||
}
|
||||
|
||||
// Insert 创建反单下单配置
|
||||
// @Summary 创建反单下单配置
|
||||
// @Description 创建反单下单配置
|
||||
// @Tags 反单下单配置
|
||||
// @Accept application/json
|
||||
// @Product application/json
|
||||
// @Param data body dto.LineReverseSettingInsertReq true "data"
|
||||
// @Success 200 {object} response.Response "{"code": 200, "message": "添加成功"}"
|
||||
// @Router /api/v1/line-reverse-setting [post]
|
||||
// @Security Bearer
|
||||
func (e LineReverseSetting) Insert(c *gin.Context) {
|
||||
req := dto.LineReverseSettingInsertReq{}
|
||||
s := service.LineReverseSetting{}
|
||||
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
|
||||
}
|
||||
|
||||
e.OK(req.GetId(), "创建成功")
|
||||
}
|
||||
|
||||
// Update 修改反单下单配置
|
||||
// @Summary 修改反单下单配置
|
||||
// @Description 修改反单下单配置
|
||||
// @Tags 反单下单配置
|
||||
// @Accept application/json
|
||||
// @Product application/json
|
||||
// @Param id path int true "id"
|
||||
// @Param data body dto.LineReverseSettingUpdateReq true "body"
|
||||
// @Success 200 {object} response.Response "{"code": 200, "message": "修改成功"}"
|
||||
// @Router /api/v1/line-reverse-setting/{id} [put]
|
||||
// @Security Bearer
|
||||
func (e LineReverseSetting) Update(c *gin.Context) {
|
||||
req := dto.LineReverseSettingUpdateReq{}
|
||||
s := service.LineReverseSetting{}
|
||||
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
|
||||
}
|
||||
e.OK( req.GetId(), "修改成功")
|
||||
}
|
||||
|
||||
// Delete 删除反单下单配置
|
||||
// @Summary 删除反单下单配置
|
||||
// @Description 删除反单下单配置
|
||||
// @Tags 反单下单配置
|
||||
// @Param data body dto.LineReverseSettingDeleteReq true "body"
|
||||
// @Success 200 {object} response.Response "{"code": 200, "message": "删除成功"}"
|
||||
// @Router /api/v1/line-reverse-setting [delete]
|
||||
// @Security Bearer
|
||||
func (e LineReverseSetting) Delete(c *gin.Context) {
|
||||
s := service.LineReverseSetting{}
|
||||
req := dto.LineReverseSettingDeleteReq{}
|
||||
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.Remove(&req, p)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("删除反单下单配置失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
e.OK( req.GetId(), "删除成功")
|
||||
}
|
||||
@ -2,29 +2,31 @@ package models
|
||||
|
||||
import (
|
||||
"go-admin/common/models"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
type LineApiUser struct {
|
||||
models.Model
|
||||
|
||||
ExchangeType string `json:"exchangeType" gorm:"type:varchar(20);comment:交易所类型(字典 exchange_type)"`
|
||||
UserId int64 `json:"userId" gorm:"type:int unsigned;comment:用户id"`
|
||||
JysId int64 `json:"jysId" gorm:"type:int;comment:关联交易所账号id"`
|
||||
ApiName string `json:"apiName" gorm:"type:varchar(255);comment:api用户名"`
|
||||
ApiKey string `json:"apiKey" gorm:"type:varchar(255);comment:apiKey"`
|
||||
ApiSecret string `json:"apiSecret" gorm:"type:varchar(255);comment:apiSecret"`
|
||||
IpAddress string `json:"ipAddress" gorm:"type:varchar(255);comment:代理地址"`
|
||||
UserPass string `json:"userPass" gorm:"type:varchar(255);comment:代码账号密码"`
|
||||
AdminId int64 `json:"adminId" gorm:"type:int unsigned;comment:管理员id"`
|
||||
Affiliation int64 `json:"affiliation" gorm:"type:int;comment:归属:1=现货,2=合约,3=现货合约"`
|
||||
AdminShow int64 `json:"adminShow" gorm:"type:int;comment:是否超管可见:1=是,0=否"`
|
||||
Site string `json:"site" gorm:"type:enum('1','2','3');comment:允许下单的方向:1=多;2=空;3=多空"`
|
||||
Subordinate string `json:"subordinate" gorm:"type:enum('0','1','2');comment:从属关系:0=未绑定关系;1=主账号;2=副帐号"`
|
||||
GroupId int64 `json:"groupId" gorm:"type:int unsigned;comment:所属组id"`
|
||||
OpenStatus int64 `json:"openStatus" gorm:"type:int unsigned;comment:开启状态 0=关闭 1=开启"`
|
||||
|
||||
SpotLastTime string `json:"spotLastTime" gorm:"-"` //现货websocket最后通信时间
|
||||
FuturesLastTime string `json:"futuresLastTime" gorm:"-"` //合约websocket最后通信时间
|
||||
ExchangeType string `json:"exchangeType" gorm:"type:varchar(20);comment:交易所类型(字典 exchange_type)"`
|
||||
UserId int64 `json:"userId" gorm:"type:int unsigned;comment:用户id"`
|
||||
ApiName string `json:"apiName" gorm:"type:varchar(255);comment:api用户名"`
|
||||
ApiKey string `json:"apiKey" gorm:"type:varchar(255);comment:apiKey"`
|
||||
ApiSecret string `json:"apiSecret" gorm:"type:varchar(255);comment:apiSecret"`
|
||||
IpAddress string `json:"ipAddress" gorm:"type:varchar(255);comment:代理地址"`
|
||||
UserPass string `json:"userPass" gorm:"type:varchar(255);comment:代码账号密码"`
|
||||
Affiliation int64 `json:"affiliation" gorm:"type:int;comment:归属:1=现货,2=合约,3=现货合约"`
|
||||
AdminShow int64 `json:"adminShow" gorm:"type:int;comment:是否超管可见:1=是,0=否"`
|
||||
Site string `json:"site" gorm:"type:enum('1','2','3');comment:允许下单的方向:1=多;2=空;3=多空"`
|
||||
Subordinate string `json:"subordinate" gorm:"type:enum('0','1','2');comment:从属关系:0=未绑定关系;1=主账号;2=副帐号"`
|
||||
GroupId int64 `json:"groupId" gorm:"type:int unsigned;comment:所属组id"`
|
||||
OpenStatus int64 `json:"openStatus" gorm:"type:int unsigned;comment:开启状态 0=关闭 1=开启"`
|
||||
ReverseStatus int `json:"reverseStatus" gorm:"type:tinyint unsigned;comment:反向开仓:1=开启;2=关闭"`
|
||||
ReverseApiId int `json:"reverseApiId" gorm:"type:bigint;comment:反向apiId"`
|
||||
OrderProportion decimal.Decimal `json:"orderProportion" gorm:"type:decimal(10,2);comment:委托比例"`
|
||||
SpotLastTime string `json:"spotLastTime" gorm:"-"` //现货websocket最后通信时间
|
||||
FuturesLastTime string `json:"futuresLastTime" gorm:"-"` //合约websocket最后通信时间
|
||||
models.ModelTime
|
||||
models.ControlBy
|
||||
}
|
||||
|
||||
30
app/admin/models/line_reverse_setting.go
Normal file
30
app/admin/models/line_reverse_setting.go
Normal file
@ -0,0 +1,30 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"go-admin/common/models"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
type LineReverseSetting struct {
|
||||
models.Model
|
||||
|
||||
ReverseOrderType string `json:"reverseOrderType" gorm:"type:varchar(10);comment:反单下单类型 LIMIT-限价 MARKET-市价"`
|
||||
ReversePremiumRatio decimal.Decimal `json:"reversePremiumRatio" gorm:"type:decimal(10,2);comment:溢价百分比"`
|
||||
StopLossRatio decimal.Decimal `json:"stopLossRatio" gorm:"type:decimal(10,2);comment:止损百分比"`
|
||||
models.ModelTime
|
||||
models.ControlBy
|
||||
}
|
||||
|
||||
func (LineReverseSetting) TableName() string {
|
||||
return "line_reverse_setting"
|
||||
}
|
||||
|
||||
func (e *LineReverseSetting) Generate() models.ActiveRecord {
|
||||
o := *e
|
||||
return &o
|
||||
}
|
||||
|
||||
func (e *LineReverseSetting) GetId() interface{} {
|
||||
return e.Id
|
||||
}
|
||||
@ -27,5 +27,7 @@ func registerLineApiUserRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMi
|
||||
r.POST("bind", api.Bind) //绑定从属关系
|
||||
r.POST("getUser", api.GetUser) //获取未绑定的用户
|
||||
r.POST("getMainUser", api.GetMainUser) //获取获取主账号的用户
|
||||
|
||||
r.GET("unbind-reverse", api.GetUnBindReverseApiUser) //获取未绑定下反单用户
|
||||
}
|
||||
}
|
||||
|
||||
27
app/admin/router/line_reverse_setting.go
Normal file
27
app/admin/router/line_reverse_setting.go
Normal file
@ -0,0 +1,27 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
|
||||
|
||||
"go-admin/app/admin/apis"
|
||||
"go-admin/common/middleware"
|
||||
"go-admin/common/actions"
|
||||
)
|
||||
|
||||
func init() {
|
||||
routerCheckRole = append(routerCheckRole, registerLineReverseSettingRouter)
|
||||
}
|
||||
|
||||
// registerLineReverseSettingRouter
|
||||
func registerLineReverseSettingRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||
api := apis.LineReverseSetting{}
|
||||
r := v1.Group("/line-reverse-setting").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||
{
|
||||
r.GET("", actions.PermissionAction(), api.GetPage)
|
||||
r.GET("/:id", actions.PermissionAction(), api.Get)
|
||||
r.POST("", api.Insert)
|
||||
r.PUT("/:id", actions.PermissionAction(), api.Update)
|
||||
r.DELETE("", api.Delete)
|
||||
}
|
||||
}
|
||||
@ -1,9 +1,12 @@
|
||||
package dto
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/common/dto"
|
||||
common "go-admin/common/models"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
type LineApiUserGetPageReq struct {
|
||||
@ -41,44 +44,66 @@ func (m *LineApiUserGetPageReq) GetNeedSearch() interface{} {
|
||||
}
|
||||
|
||||
type LineApiUserInsertReq struct {
|
||||
Id int `json:"-" comment:"id"` // id
|
||||
ExchangeType string `json:"exchangeType" comment:"交易所code"`
|
||||
UserId int64 `json:"userId" comment:"用户id"`
|
||||
JysId int64 `json:"jysId" comment:"关联交易所账号id"`
|
||||
ApiName string `json:"apiName" comment:"api用户名"`
|
||||
ApiKey string `json:"apiKey" comment:"apiKey"`
|
||||
ApiSecret string `json:"apiSecret" comment:"apiSecret"`
|
||||
IpAddress string `json:"ipAddress" comment:"代理地址"`
|
||||
UserPass string `json:"userPass" comment:"代码账号密码"`
|
||||
AdminId int64 `json:"adminId" comment:"管理员id"`
|
||||
Affiliation int64 `json:"affiliation" comment:"归属:1=现货,2=合约,3=现货合约"`
|
||||
AdminShow int64 `json:"adminShow" comment:"是否超管可见:1=是,0=否"`
|
||||
Site string `json:"site" comment:"允许下单的方向:1=多;2=空;3=多空"`
|
||||
Subordinate string `json:"subordinate" comment:"从属关系:0=未绑定关系;1=主账号;2=副帐号"`
|
||||
GroupId int64 `json:"groupId" comment:"所属组id"`
|
||||
OpenStatus int64 `json:"openStatus" comment:"开启状态 0=关闭 1=开启"`
|
||||
Id int `json:"-" comment:"id"` // id
|
||||
ExchangeType string `json:"exchangeType" comment:"交易所code"`
|
||||
UserId int64 `json:"userId" comment:"用户id"`
|
||||
JysId int64 `json:"jysId" comment:"关联交易所账号id"`
|
||||
ApiName string `json:"apiName" comment:"api用户名"`
|
||||
ApiKey string `json:"apiKey" comment:"apiKey"`
|
||||
ApiSecret string `json:"apiSecret" comment:"apiSecret"`
|
||||
IpAddress string `json:"ipAddress" comment:"代理地址"`
|
||||
UserPass string `json:"userPass" comment:"代码账号密码"`
|
||||
Affiliation int64 `json:"affiliation" comment:"归属:1=现货,2=合约,3=现货合约"`
|
||||
AdminShow int64 `json:"adminShow" comment:"是否超管可见:1=是,0=否"`
|
||||
Site string `json:"site" comment:"允许下单的方向:1=多;2=空;3=多空"`
|
||||
Subordinate string `json:"subordinate" comment:"从属关系:0=未绑定关系;1=主账号;2=副帐号"`
|
||||
GroupId int64 `json:"groupId" comment:"所属组id"`
|
||||
OpenStatus int64 `json:"openStatus" comment:"开启状态 0=关闭 1=开启"`
|
||||
ReverseStatus int `json:"reverseStatus" comment:"反向下单状态 1-开启 2-关闭"`
|
||||
ReverseApiId int `json:"reverseApiId" comment:"反向下单apiId"`
|
||||
OrderProportion decimal.Decimal `json:"orderProportion" comment:"委托比例"`
|
||||
common.ControlBy
|
||||
}
|
||||
|
||||
func (s *LineApiUserInsertReq) Valid() error {
|
||||
if s.ReverseStatus == 1 {
|
||||
if s.OrderProportion.Cmp(decimal.Zero) <= 0 {
|
||||
return errors.New("委托比例必须大于0")
|
||||
}
|
||||
|
||||
if s.ReverseStatus == 1 && s.ReverseApiId == 0 {
|
||||
return errors.New("反向下单api不能为空")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *LineApiUserInsertReq) Generate(model *models.LineApiUser) {
|
||||
if s.Id == 0 {
|
||||
model.Model = common.Model{Id: s.Id}
|
||||
}
|
||||
model.ExchangeType = s.ExchangeType
|
||||
model.UserId = s.UserId
|
||||
model.JysId = s.JysId
|
||||
model.ApiName = s.ApiName
|
||||
model.ApiKey = s.ApiKey
|
||||
model.ApiSecret = s.ApiSecret
|
||||
model.IpAddress = s.IpAddress
|
||||
model.UserPass = s.UserPass
|
||||
model.AdminId = s.AdminId
|
||||
model.Affiliation = s.Affiliation
|
||||
model.AdminShow = s.AdminShow
|
||||
model.Site = s.Site
|
||||
model.Subordinate = s.Subordinate
|
||||
model.GroupId = s.GroupId
|
||||
model.OpenStatus = s.OpenStatus
|
||||
model.ReverseStatus = s.ReverseStatus
|
||||
model.OrderProportion = s.OrderProportion
|
||||
|
||||
if model.ReverseStatus == 1 {
|
||||
model.ReverseApiId = s.ReverseApiId
|
||||
} else {
|
||||
model.ReverseApiId = 0
|
||||
}
|
||||
|
||||
model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的
|
||||
}
|
||||
|
||||
@ -87,44 +112,66 @@ func (s *LineApiUserInsertReq) GetId() interface{} {
|
||||
}
|
||||
|
||||
type LineApiUserUpdateReq struct {
|
||||
Id int `uri:"id" comment:"id"` // id
|
||||
ExchangeType string `json:"exchangeType" comment:"交易所code"`
|
||||
UserId int64 `json:"userId" comment:"用户id"`
|
||||
JysId int64 `json:"jysId" comment:"关联交易所账号id"`
|
||||
ApiName string `json:"apiName" comment:"api用户名"`
|
||||
ApiKey string `json:"apiKey" comment:"apiKey"`
|
||||
ApiSecret string `json:"apiSecret" comment:"apiSecret"`
|
||||
IpAddress string `json:"ipAddress" comment:"代理地址"`
|
||||
UserPass string `json:"userPass" comment:"代码账号密码"`
|
||||
AdminId int64 `json:"adminId" comment:"管理员id"`
|
||||
Affiliation int64 `json:"affiliation" comment:"归属:1=现货,2=合约,3=现货合约"`
|
||||
AdminShow int64 `json:"adminShow" comment:"是否超管可见:1=是,0=否"`
|
||||
Site string `json:"site" comment:"允许下单的方向:1=多;2=空;3=多空"`
|
||||
Subordinate string `json:"subordinate" comment:"从属关系:0=未绑定关系;1=主账号;2=副帐号"`
|
||||
GroupId int64 `json:"groupId" comment:"所属组id"`
|
||||
OpenStatus int64 `json:"openStatus" comment:"开启状态 0=关闭 1=开启"`
|
||||
Id int `uri:"id" comment:"id"` // id
|
||||
ExchangeType string `json:"exchangeType" comment:"交易所code"`
|
||||
UserId int64 `json:"userId" comment:"用户id"`
|
||||
JysId int64 `json:"jysId" comment:"关联交易所账号id"`
|
||||
ApiName string `json:"apiName" comment:"api用户名"`
|
||||
ApiKey string `json:"apiKey" comment:"apiKey"`
|
||||
ApiSecret string `json:"apiSecret" comment:"apiSecret"`
|
||||
IpAddress string `json:"ipAddress" comment:"代理地址"`
|
||||
UserPass string `json:"userPass" comment:"代码账号密码"`
|
||||
Affiliation int64 `json:"affiliation" comment:"归属:1=现货,2=合约,3=现货合约"`
|
||||
AdminShow int64 `json:"adminShow" comment:"是否超管可见:1=是,0=否"`
|
||||
Site string `json:"site" comment:"允许下单的方向:1=多;2=空;3=多空"`
|
||||
Subordinate string `json:"subordinate" comment:"从属关系:0=未绑定关系;1=主账号;2=副帐号"`
|
||||
GroupId int64 `json:"groupId" comment:"所属组id"`
|
||||
OpenStatus int64 `json:"openStatus" comment:"开启状态 0=关闭 1=开启"`
|
||||
ReverseStatus int `json:"reverseStatus" comment:"反向下单状态 1-开启 2-关闭"`
|
||||
ReverseApiId int `json:"reverseApiId" comment:"反向下单apiId"`
|
||||
OrderProportion decimal.Decimal `json:"orderProportion" comment:"委托比例"`
|
||||
common.ControlBy
|
||||
}
|
||||
|
||||
func (s *LineApiUserUpdateReq) Valid() error {
|
||||
if s.ReverseStatus == 1 {
|
||||
if s.OrderProportion.Cmp(decimal.Zero) <= 0 {
|
||||
return errors.New("委托比例必须大于0")
|
||||
}
|
||||
|
||||
if s.ReverseStatus == 1 && s.ReverseApiId == 0 {
|
||||
return errors.New("反向下单api不能为空")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *LineApiUserUpdateReq) Generate(model *models.LineApiUser) {
|
||||
if s.Id == 0 {
|
||||
model.Model = common.Model{Id: s.Id}
|
||||
}
|
||||
model.ExchangeType = s.ExchangeType
|
||||
model.UserId = s.UserId
|
||||
model.JysId = s.JysId
|
||||
model.ApiName = s.ApiName
|
||||
model.ApiKey = s.ApiKey
|
||||
model.ApiSecret = s.ApiSecret
|
||||
model.IpAddress = s.IpAddress
|
||||
model.UserPass = s.UserPass
|
||||
model.AdminId = s.AdminId
|
||||
model.Affiliation = s.Affiliation
|
||||
model.AdminShow = s.AdminShow
|
||||
model.Site = s.Site
|
||||
model.Subordinate = s.Subordinate
|
||||
model.GroupId = s.GroupId
|
||||
model.OpenStatus = s.OpenStatus
|
||||
model.ReverseStatus = s.ReverseStatus
|
||||
model.OrderProportion = s.OrderProportion
|
||||
|
||||
if model.ReverseStatus == 1 {
|
||||
model.ReverseApiId = s.ReverseApiId
|
||||
} else {
|
||||
model.ReverseApiId = 0
|
||||
}
|
||||
|
||||
model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的
|
||||
}
|
||||
|
||||
@ -159,3 +206,16 @@ type LineApiUserBindSubordinateReq struct {
|
||||
type GetMainUserReq struct {
|
||||
ExchangeType string `json:"exchangeType"`
|
||||
}
|
||||
|
||||
type GetUnBindReverseReq struct {
|
||||
ExchangeType string `json:"exchangeType" form:"exchangeType"`
|
||||
ApiId int `json:"apiId" form:"apiId" comment:"当前apiId"`
|
||||
}
|
||||
|
||||
// 未绑定反向下单查询返回结构体
|
||||
type UnBindReverseResp struct {
|
||||
Id int `json:"id"`
|
||||
UserId int64 `json:"userId"`
|
||||
Disabled bool `json:"disabled"`
|
||||
ApiName string `json:"apiName"`
|
||||
}
|
||||
|
||||
89
app/admin/service/dto/line_reverse_setting.go
Normal file
89
app/admin/service/dto/line_reverse_setting.go
Normal file
@ -0,0 +1,89 @@
|
||||
package dto
|
||||
|
||||
import (
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/common/dto"
|
||||
common "go-admin/common/models"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
type LineReverseSettingGetPageReq struct {
|
||||
dto.Pagination `search:"-"`
|
||||
LineReverseSettingOrder
|
||||
}
|
||||
|
||||
type LineReverseSettingOrder struct {
|
||||
Id string `form:"idOrder" search:"type:order;column:id;table:line_reverse_setting"`
|
||||
ReverseOrderType string `form:"reverseOrderTypeOrder" search:"type:order;column:reverse_order_type;table:line_reverse_setting"`
|
||||
ReversePremiumRatio string `form:"reversePremiumRatioOrder" search:"type:order;column:reverse_premium_ratio;table:line_reverse_setting"`
|
||||
CreatedAt string `form:"createdAtOrder" search:"type:order;column:created_at;table:line_reverse_setting"`
|
||||
UpdatedAt string `form:"updatedAtOrder" search:"type:order;column:updated_at;table:line_reverse_setting"`
|
||||
DeletedAt string `form:"deletedAtOrder" search:"type:order;column:deleted_at;table:line_reverse_setting"`
|
||||
CreateBy string `form:"createByOrder" search:"type:order;column:create_by;table:line_reverse_setting"`
|
||||
UpdateBy string `form:"updateByOrder" search:"type:order;column:update_by;table:line_reverse_setting"`
|
||||
}
|
||||
|
||||
func (m *LineReverseSettingGetPageReq) GetNeedSearch() interface{} {
|
||||
return *m
|
||||
}
|
||||
|
||||
type LineReverseSettingInsertReq struct {
|
||||
Id int `json:"-" comment:"主键id"` // 主键id
|
||||
ReverseOrderType string `json:"reverseOrderType" comment:"反单下单类型 LIMIT-限价 MARKET-市价"`
|
||||
ReversePremiumRatio decimal.Decimal `json:"reversePremiumRatio" comment:"溢价百分比"`
|
||||
common.ControlBy
|
||||
}
|
||||
|
||||
func (s *LineReverseSettingInsertReq) Generate(model *models.LineReverseSetting) {
|
||||
if s.Id == 0 {
|
||||
model.Model = common.Model{Id: s.Id}
|
||||
}
|
||||
model.ReverseOrderType = s.ReverseOrderType
|
||||
model.ReversePremiumRatio = s.ReversePremiumRatio
|
||||
model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的
|
||||
}
|
||||
|
||||
func (s *LineReverseSettingInsertReq) GetId() interface{} {
|
||||
return s.Id
|
||||
}
|
||||
|
||||
type LineReverseSettingUpdateReq struct {
|
||||
Id int `uri:"id" comment:"主键id"` // 主键id
|
||||
ReverseOrderType string `json:"reverseOrderType" comment:"反单下单类型 LIMIT-限价 MARKET-市价"`
|
||||
ReversePremiumRatio decimal.Decimal `json:"reversePremiumRatio" comment:"溢价百分比"`
|
||||
StopLossRatio decimal.Decimal `json:"stopLossRatio" comment:"止损百分比"`
|
||||
common.ControlBy
|
||||
}
|
||||
|
||||
func (s *LineReverseSettingUpdateReq) Generate(model *models.LineReverseSetting) {
|
||||
if s.Id == 0 {
|
||||
model.Model = common.Model{Id: s.Id}
|
||||
}
|
||||
model.ReverseOrderType = s.ReverseOrderType
|
||||
model.ReversePremiumRatio = s.ReversePremiumRatio
|
||||
model.StopLossRatio = s.StopLossRatio
|
||||
model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的
|
||||
}
|
||||
|
||||
func (s *LineReverseSettingUpdateReq) GetId() interface{} {
|
||||
return s.Id
|
||||
}
|
||||
|
||||
// LineReverseSettingGetReq 功能获取请求参数
|
||||
type LineReverseSettingGetReq struct {
|
||||
Id int `uri:"id"`
|
||||
}
|
||||
|
||||
func (s *LineReverseSettingGetReq) GetId() interface{} {
|
||||
return s.Id
|
||||
}
|
||||
|
||||
// LineReverseSettingDeleteReq 功能删除请求参数
|
||||
type LineReverseSettingDeleteReq struct {
|
||||
Ids []int `json:"ids"`
|
||||
}
|
||||
|
||||
func (s *LineReverseSettingDeleteReq) GetId() interface{} {
|
||||
return s.Ids
|
||||
}
|
||||
@ -97,7 +97,28 @@ func (e *LineApiUser) Insert(c *dto.LineApiUserInsertReq) error {
|
||||
var err error
|
||||
var data models.LineApiUser
|
||||
c.Generate(&data)
|
||||
err = e.Orm.Create(&data).Error
|
||||
err = e.Orm.Transaction(func(tx *gorm.DB) error {
|
||||
if c.ReverseApiId > 0 {
|
||||
var count int64
|
||||
if err2 := tx.Model(models.LineApiUser{}).Where("subordinate <> '0' AND id=?", c.ReverseApiId).Count(&count).Error; err2 != nil {
|
||||
return err2
|
||||
}
|
||||
if count > 0 {
|
||||
return errors.New("反向api已被使用")
|
||||
}
|
||||
|
||||
if err2 := tx.Model(models.LineApiUser{}).Where("id =?", c.ReverseApiId).Update("subordinate", 2).Error; err2 != nil {
|
||||
return err2
|
||||
}
|
||||
data.Subordinate = "1"
|
||||
}
|
||||
|
||||
if err2 := tx.Create(&data).Error; err2 != nil {
|
||||
return err2
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
e.Log.Errorf("LineApiUserService Insert error:%s \r\n", err)
|
||||
return err
|
||||
@ -197,6 +218,7 @@ func (e *LineApiUser) Update(c *dto.LineApiUserUpdateReq, p *actions.DataPermiss
|
||||
actions.Permission(data.TableName(), p),
|
||||
).First(&data, c.GetId())
|
||||
oldApiKey := data.ApiKey
|
||||
oldReverseApiId := data.ReverseApiId
|
||||
|
||||
c.Generate(&data)
|
||||
|
||||
@ -204,6 +226,33 @@ func (e *LineApiUser) Update(c *dto.LineApiUserUpdateReq, p *actions.DataPermiss
|
||||
|
||||
//事务
|
||||
err = e.Orm.Transaction(func(tx *gorm.DB) error {
|
||||
if data.ReverseApiId > 0 && data.ReverseApiId != oldReverseApiId {
|
||||
var count int64
|
||||
if err2 := tx.Model(models.LineApiUser{}).Where("subordinate <> '0' AND id=?", c.ReverseApiId).Count(&count).Error; err2 != nil {
|
||||
return err2
|
||||
}
|
||||
if count > 0 {
|
||||
return errors.New("反向api已被使用")
|
||||
}
|
||||
|
||||
if err2 := tx.Model(models.LineApiUser{}).Where("id =?", c.ReverseApiId).Update("subordinate", "2").Error; err2 != nil {
|
||||
return err2
|
||||
}
|
||||
|
||||
data.Subordinate = "1"
|
||||
}
|
||||
|
||||
if oldReverseApiId > 0 && oldReverseApiId != data.ReverseApiId {
|
||||
if err2 := tx.Model(models.LineApiUser{}).Where("id =?", oldReverseApiId).Update("subordinate", "0").Error; err2 != nil {
|
||||
e.Log.Errorf("解绑反向api失败 api:%d err:%v", oldReverseApiId, err2)
|
||||
return fmt.Errorf("解绑反向api失败")
|
||||
}
|
||||
|
||||
if data.ReverseApiId == 0 {
|
||||
data.Subordinate = "0"
|
||||
}
|
||||
}
|
||||
|
||||
db := tx.Save(&data)
|
||||
if err = db.Error; err != nil {
|
||||
e.Log.Errorf("LineApiUserService Save error:%s \r\n", err)
|
||||
@ -414,3 +463,44 @@ func (e *LineApiUser) GetActiveApis(apiIds []int) ([]int, error) {
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// GetUnBindApiUser 获取未绑定反向下单的的api用户
|
||||
func (e *LineApiUser) GetUnBindApiUser(req *dto.GetUnBindReverseReq, list *[]dto.UnBindReverseResp) error {
|
||||
var datas []models.LineApiUser
|
||||
var data models.LineApiUser
|
||||
var count int64
|
||||
|
||||
if req.ApiId > 0 {
|
||||
e.Orm.Model(data).Where("id =? AND subordinate = '2'", req.ApiId).Count(&count)
|
||||
|
||||
if count > 0 {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
query := e.Orm.Model(&data).
|
||||
Where("open_status =1 AND exchange_type = ? ", req.ExchangeType)
|
||||
|
||||
if err := query.
|
||||
Find(&datas).Error; err != nil {
|
||||
e.Log.Error("获取未绑定用户失败:", err)
|
||||
return fmt.Errorf("获取未绑定用户失败")
|
||||
}
|
||||
|
||||
for _, item := range datas {
|
||||
if item.Id == req.ApiId {
|
||||
continue
|
||||
}
|
||||
|
||||
listItem := dto.UnBindReverseResp{
|
||||
Id: item.Id,
|
||||
UserId: item.UserId,
|
||||
ApiName: item.ApiName,
|
||||
Disabled: item.Subordinate != "0",
|
||||
}
|
||||
|
||||
(*list) = append((*list), listItem)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
109
app/admin/service/line_reverse_setting.go
Normal file
109
app/admin/service/line_reverse_setting.go
Normal file
@ -0,0 +1,109 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/app/admin/service/dto"
|
||||
"go-admin/common/actions"
|
||||
cDto "go-admin/common/dto"
|
||||
)
|
||||
|
||||
type LineReverseSetting struct {
|
||||
service.Service
|
||||
}
|
||||
|
||||
// GetPage 获取LineReverseSetting列表
|
||||
func (e *LineReverseSetting) GetPage(c *dto.LineReverseSettingGetPageReq, p *actions.DataPermission, list *[]models.LineReverseSetting, count *int64) error {
|
||||
var err error
|
||||
var data models.LineReverseSetting
|
||||
|
||||
err = e.Orm.Model(&data).
|
||||
Scopes(
|
||||
cDto.MakeCondition(c.GetNeedSearch()),
|
||||
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
||||
actions.Permission(data.TableName(), p),
|
||||
).
|
||||
Find(list).Limit(-1).Offset(-1).
|
||||
Count(count).Error
|
||||
if err != nil {
|
||||
e.Log.Errorf("LineReverseSettingService GetPage error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get 获取LineReverseSetting对象
|
||||
func (e *LineReverseSetting) Get(d *dto.LineReverseSettingGetReq, p *actions.DataPermission, model *models.LineReverseSetting) error {
|
||||
var data models.LineReverseSetting
|
||||
|
||||
err := e.Orm.Model(&data).
|
||||
Scopes(
|
||||
actions.Permission(data.TableName(), p),
|
||||
).
|
||||
First(model, d.GetId()).Error
|
||||
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
err = errors.New("查看对象不存在或无权查看")
|
||||
e.Log.Errorf("Service GetLineReverseSetting error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if err != nil {
|
||||
e.Log.Errorf("db error:%s", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Insert 创建LineReverseSetting对象
|
||||
func (e *LineReverseSetting) Insert(c *dto.LineReverseSettingInsertReq) error {
|
||||
var err error
|
||||
var data models.LineReverseSetting
|
||||
c.Generate(&data)
|
||||
err = e.Orm.Create(&data).Error
|
||||
if err != nil {
|
||||
e.Log.Errorf("LineReverseSettingService Insert error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Update 修改LineReverseSetting对象
|
||||
func (e *LineReverseSetting) Update(c *dto.LineReverseSettingUpdateReq, p *actions.DataPermission) error {
|
||||
var err error
|
||||
var data = models.LineReverseSetting{}
|
||||
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("LineReverseSettingService Save error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权更新该数据")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Remove 删除LineReverseSetting
|
||||
func (e *LineReverseSetting) Remove(d *dto.LineReverseSettingDeleteReq, p *actions.DataPermission) error {
|
||||
var data models.LineReverseSetting
|
||||
|
||||
db := e.Orm.Model(&data).
|
||||
Scopes(
|
||||
actions.Permission(data.TableName(), p),
|
||||
).Delete(&data, d.GetId())
|
||||
if err := db.Error; err != nil {
|
||||
e.Log.Errorf("Service RemoveLineReverseSetting error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权删除该数据")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user