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,6 +2,8 @@ package models | ||||
|  | ||||
| import ( | ||||
| 	"go-admin/common/models" | ||||
|  | ||||
| 	"github.com/shopspring/decimal" | ||||
| ) | ||||
|  | ||||
| type LineApiUser struct { | ||||
| @ -9,20 +11,20 @@ type LineApiUser struct { | ||||
|  | ||||
| 	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=开启"` | ||||
|  | ||||
| 	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 | ||||
|  | ||||
							
								
								
									
										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 { | ||||
| @ -50,35 +53,57 @@ type LineApiUserInsertReq struct { | ||||
| 	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=开启"` | ||||
| 	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 // 添加这而,需要记录是被谁创建的 | ||||
| } | ||||
|  | ||||
| @ -96,35 +121,57 @@ type LineApiUserUpdateReq struct { | ||||
| 	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=开启"` | ||||
| 	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