1、暂存

This commit is contained in:
2025-05-21 09:11:10 +08:00
parent 0f9b966fdb
commit e943a47121
10 changed files with 693 additions and 55 deletions

View File

@ -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, "查询成功")
}

View 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(), "删除成功")
}

View File

@ -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
}

View 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
}

View File

@ -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) //获取未绑定下反单用户
}
}

View 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)
}
}

View File

@ -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"`
}

View 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
}

View File

@ -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
}

View 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
}