1、确认提现
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
package apis
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"fmt"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/api"
|
||||
@ -30,18 +30,18 @@ type MemberWithdrawalLog struct {
|
||||
// @Router /api/v1/member-withdrawal-log [get]
|
||||
// @Security Bearer
|
||||
func (e MemberWithdrawalLog) GetPage(c *gin.Context) {
|
||||
req := dto.MemberWithdrawalLogGetPageReq{}
|
||||
s := service.MemberWithdrawalLog{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
req := dto.MemberWithdrawalLogGetPageReq{}
|
||||
s := service.MemberWithdrawalLog{}
|
||||
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.MemberWithdrawalLog, 0)
|
||||
@ -50,7 +50,7 @@ func (e MemberWithdrawalLog) GetPage(c *gin.Context) {
|
||||
err = s.GetPage(&req, p, &list, &count)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("获取用户提现记录失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
return
|
||||
}
|
||||
|
||||
e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
|
||||
@ -67,7 +67,7 @@ func (e MemberWithdrawalLog) GetPage(c *gin.Context) {
|
||||
func (e MemberWithdrawalLog) Get(c *gin.Context) {
|
||||
req := dto.MemberWithdrawalLogGetReq{}
|
||||
s := service.MemberWithdrawalLog{}
|
||||
err := e.MakeContext(c).
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
@ -83,10 +83,10 @@ func (e MemberWithdrawalLog) Get(c *gin.Context) {
|
||||
err = s.Get(&req, p, &object)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("获取用户提现记录失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
return
|
||||
}
|
||||
|
||||
e.OK( object, "查询成功")
|
||||
e.OK(object, "查询成功")
|
||||
}
|
||||
|
||||
// Insert 创建用户提现记录
|
||||
@ -100,25 +100,25 @@ func (e MemberWithdrawalLog) Get(c *gin.Context) {
|
||||
// @Router /api/v1/member-withdrawal-log [post]
|
||||
// @Security Bearer
|
||||
func (e MemberWithdrawalLog) Insert(c *gin.Context) {
|
||||
req := dto.MemberWithdrawalLogInsertReq{}
|
||||
s := service.MemberWithdrawalLog{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
req := dto.MemberWithdrawalLogInsertReq{}
|
||||
s := service.MemberWithdrawalLog{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
// 设置创建人
|
||||
req.SetCreateBy(user.GetUserId(c))
|
||||
|
||||
err = s.Insert(&req)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("创建用户提现记录失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
return
|
||||
}
|
||||
|
||||
e.OK(req.GetId(), "创建成功")
|
||||
@ -136,27 +136,27 @@ func (e MemberWithdrawalLog) Insert(c *gin.Context) {
|
||||
// @Router /api/v1/member-withdrawal-log/{id} [put]
|
||||
// @Security Bearer
|
||||
func (e MemberWithdrawalLog) Update(c *gin.Context) {
|
||||
req := dto.MemberWithdrawalLogUpdateReq{}
|
||||
s := service.MemberWithdrawalLog{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
req := dto.MemberWithdrawalLogUpdateReq{}
|
||||
s := service.MemberWithdrawalLog{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
req.SetUpdateBy(user.GetUserId(c))
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
|
||||
err = s.Update(&req, p)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("修改用户提现记录失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
return
|
||||
}
|
||||
e.OK( req.GetId(), "修改成功")
|
||||
e.OK(req.GetId(), "修改成功")
|
||||
}
|
||||
|
||||
// Delete 删除用户提现记录
|
||||
@ -168,18 +168,18 @@ func (e MemberWithdrawalLog) Update(c *gin.Context) {
|
||||
// @Router /api/v1/member-withdrawal-log [delete]
|
||||
// @Security Bearer
|
||||
func (e MemberWithdrawalLog) Delete(c *gin.Context) {
|
||||
s := service.MemberWithdrawalLog{}
|
||||
req := dto.MemberWithdrawalLogDeleteReq{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
s := service.MemberWithdrawalLog{}
|
||||
req := dto.MemberWithdrawalLogDeleteReq{}
|
||||
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)
|
||||
@ -187,7 +187,55 @@ func (e MemberWithdrawalLog) Delete(c *gin.Context) {
|
||||
err = s.Remove(&req, p)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("删除用户提现记录失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
return
|
||||
}
|
||||
e.OK( req.GetId(), "删除成功")
|
||||
e.OK(req.GetId(), "删除成功")
|
||||
}
|
||||
|
||||
// 审核提现
|
||||
func (e MemberWithdrawalLog) Process(c *gin.Context) {
|
||||
s := service.MemberWithdrawalLog{}
|
||||
req := dto.MemberWithdrawalLogApprovedReq{}
|
||||
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
|
||||
}
|
||||
|
||||
err = s.Process(&req)
|
||||
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("审核提现失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
e.OK(nil, "确认提现成功")
|
||||
}
|
||||
|
||||
// 确认提现
|
||||
func (e MemberWithdrawalLog) Confirm(c *gin.Context) {
|
||||
s := service.MemberWithdrawalLog{}
|
||||
req := dto.MemberWithdrawalLogConfirmReq{}
|
||||
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
|
||||
}
|
||||
|
||||
err = s.Confirm(&req)
|
||||
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("确认到账失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
e.OK(nil, "确认提现成功")
|
||||
}
|
||||
|
||||
@ -614,11 +614,23 @@ func (e LineUserApi) Logout(c *gin.Context) {
|
||||
|
||||
// 查询个人资产
|
||||
func (e LineUserApi) GetProperty(c *gin.Context) {
|
||||
s := service.LineUser{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(statuscode.ServerError, nil, sysstatuscode.GetStatusCodeDescription(c, statuscode.ServerError))
|
||||
}
|
||||
|
||||
var data dto.LineUserPropertyResp
|
||||
userId := common.GetUserId(c)
|
||||
code := s.GetProperty(userId, &data)
|
||||
if code != statuscode.OK {
|
||||
// e.Logger.Error(err)
|
||||
e.Error(code, nil, sysstatuscode.GetStatusCodeDescription(c, code))
|
||||
}
|
||||
|
||||
e.OK(data, "success")
|
||||
}
|
||||
|
||||
@ -34,6 +34,7 @@ func (e MemberWithdrawalLog) GetPage(c *gin.Context) {
|
||||
var count int64
|
||||
var list []dto.MemberWithdrawalLogResp
|
||||
|
||||
req.UserId = common.GetUserId(c)
|
||||
code := s.GetPage(&req, &list, &count)
|
||||
|
||||
if code != statuscode.OK {
|
||||
|
||||
@ -48,6 +48,8 @@ func frontedRegisterLinUserRouter(v1 *gin.RouterGroup) {
|
||||
r.POST("/opStatus", middleware.FrontedAuth, api.OpenStatus) //开启或者关闭状态
|
||||
r.DELETE("/logout", middleware.FrontedAuth, api.Logout) //退出登录
|
||||
|
||||
r.GET("/exchange-balance", middleware.FrontedAuth, api.GetProperty) //合约用户交易所u资产
|
||||
|
||||
//充值
|
||||
r.POST("/notify", api.Notify) //uDun回调
|
||||
r.POST("/rechargeNetworkList", middleware.FrontedAuth, api.RechargeNetworkList) //充值 通过充值币种选择主网络
|
||||
|
||||
@ -344,3 +344,10 @@ type InviteLogResp struct {
|
||||
NickName string `json:"nickName"`
|
||||
Childs []InviteLogResp `json:"childs"`
|
||||
}
|
||||
|
||||
type LineUserPropertyResp struct {
|
||||
SpotTotalAmount decimal.Decimal `json:"spotTotalAmount"` //现货U总资产
|
||||
SpotFreeAmount decimal.Decimal `json:"spotFreeAmount"` //现货U可用余额
|
||||
FuturesTotalAmount decimal.Decimal `json:"futuresTotalAmount"` //合约U总资产
|
||||
FuturesFreeAmount decimal.Decimal `json:"futuresFreeAmount"` //合约U可用余额
|
||||
}
|
||||
|
||||
@ -180,4 +180,17 @@ type MemberWithdrawalLogResp struct {
|
||||
Status string `json:"status"`
|
||||
CreateTimeUnix int64 `json:"createTime"`
|
||||
ConfirmTimeUnix int64 `json:"confirmTime"`
|
||||
Remark string `json:"remark"`
|
||||
}
|
||||
|
||||
type MemberWithdrawalLogApprovedReq struct {
|
||||
Id int `json:"id"`
|
||||
Approval int `json:"approval"` // 1:通过 2:拒绝
|
||||
Remark string `json:"remark" comment:"备注" `
|
||||
}
|
||||
|
||||
type MemberWithdrawalLogConfirmReq struct {
|
||||
Id int `json:"id"`
|
||||
ConfirmVal int `json:"confirmVal"` // 1:成功 2:失败
|
||||
Remark string `json:"remark"`
|
||||
}
|
||||
|
||||
@ -21,6 +21,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/bytedance/sonic"
|
||||
"github.com/go-admin-team/go-admin-core/logger"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||
"github.com/shopspring/decimal"
|
||||
"go.uber.org/zap"
|
||||
@ -491,6 +492,7 @@ func (e *LineUser) PreOrder(userId int, req *dto.VtsRechargePreOrderReq, resp *d
|
||||
return nil
|
||||
}
|
||||
|
||||
// 模拟支付回调
|
||||
func (e *LineUser) CallBack(req *coingatedto.OrderCallBackResponse) error {
|
||||
token, err := aeshelper.PswEncrypt(fmt.Sprintf("%s:%s:%s", req.OrderID, utility.StringAsDecimal(req.PriceAmount), req.PriceCurrency))
|
||||
|
||||
@ -562,3 +564,21 @@ func (e *LineUser) CallBack(req *coingatedto.OrderCallBackResponse) error {
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// 获取用户资产
|
||||
func (e *LineUser) GetProperty(userId int, data *dto.LineUserPropertyResp) int {
|
||||
lineApiUser := models.LineApiUser{}
|
||||
|
||||
if err := e.Orm.Model(&lineApiUser).Where("user_id=?", userId).First(&lineApiUser).Error; err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return statuscode.UserApiUserNotBind
|
||||
}
|
||||
logger.Errorf("用户id %v 获取api用户失败:%v", userId, err)
|
||||
return statuscode.ServerError
|
||||
}
|
||||
|
||||
binanceservice.GetSpotUProperty(lineApiUser, data)
|
||||
binanceservice.GetFuturesUProperty(lineApiUser, data)
|
||||
|
||||
return statuscode.OK
|
||||
}
|
||||
|
||||
@ -2,13 +2,15 @@ package service
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||
"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"
|
||||
memberwithdrawallogstatus "go-admin/common/const/dicts/member_withdrawal_log_status"
|
||||
cDto "go-admin/common/dto"
|
||||
)
|
||||
|
||||
@ -59,9 +61,9 @@ func (e *MemberWithdrawalLog) Get(d *dto.MemberWithdrawalLogGetReq, p *actions.D
|
||||
|
||||
// Insert 创建MemberWithdrawalLog对象
|
||||
func (e *MemberWithdrawalLog) Insert(c *dto.MemberWithdrawalLogInsertReq) error {
|
||||
var err error
|
||||
var data models.MemberWithdrawalLog
|
||||
c.Generate(&data)
|
||||
var err error
|
||||
var data models.MemberWithdrawalLog
|
||||
c.Generate(&data)
|
||||
err = e.Orm.Create(&data).Error
|
||||
if err != nil {
|
||||
e.Log.Errorf("MemberWithdrawalLogService Insert error:%s \r\n", err)
|
||||
@ -72,22 +74,22 @@ func (e *MemberWithdrawalLog) Insert(c *dto.MemberWithdrawalLogInsertReq) error
|
||||
|
||||
// Update 修改MemberWithdrawalLog对象
|
||||
func (e *MemberWithdrawalLog) Update(c *dto.MemberWithdrawalLogUpdateReq, p *actions.DataPermission) error {
|
||||
var err error
|
||||
var data = models.MemberWithdrawalLog{}
|
||||
e.Orm.Scopes(
|
||||
actions.Permission(data.TableName(), p),
|
||||
).First(&data, c.GetId())
|
||||
c.Generate(&data)
|
||||
var err error
|
||||
var data = models.MemberWithdrawalLog{}
|
||||
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("MemberWithdrawalLogService Save error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权更新该数据")
|
||||
}
|
||||
return nil
|
||||
db := e.Orm.Save(&data)
|
||||
if err = db.Error; err != nil {
|
||||
e.Log.Errorf("MemberWithdrawalLogService Save error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权更新该数据")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Remove 删除MemberWithdrawalLog
|
||||
@ -99,11 +101,69 @@ func (e *MemberWithdrawalLog) Remove(d *dto.MemberWithdrawalLogDeleteReq, p *act
|
||||
actions.Permission(data.TableName(), p),
|
||||
).Delete(&data, d.GetId())
|
||||
if err := db.Error; err != nil {
|
||||
e.Log.Errorf("Service RemoveMemberWithdrawalLog error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权删除该数据")
|
||||
}
|
||||
e.Log.Errorf("Service RemoveMemberWithdrawalLog error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权删除该数据")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 审核
|
||||
func (e *MemberWithdrawalLog) Process(req *dto.MemberWithdrawalLogApprovedReq) error {
|
||||
data := models.MemberWithdrawalLog{}
|
||||
|
||||
if err := e.Orm.Model(&data).Where("id =?", req.Id).First(&data).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if data.Status != memberwithdrawallogstatus.PENDING {
|
||||
return errors.New("已审核请勿重复审核")
|
||||
}
|
||||
|
||||
if req.Approval == 1 {
|
||||
data.Status = memberwithdrawallogstatus.APPROVED
|
||||
} else {
|
||||
data.Status = memberwithdrawallogstatus.REJECTED
|
||||
}
|
||||
|
||||
if err := e.Orm.Model(&data).
|
||||
Where("status =?", memberwithdrawallogstatus.PENDING).
|
||||
Updates(map[string]interface{}{"status": data.Status}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// 确认到账
|
||||
func (e *MemberWithdrawalLog) Confirm(req *dto.MemberWithdrawalLogConfirmReq) error {
|
||||
data := models.MemberWithdrawalLog{}
|
||||
|
||||
if err := e.Orm.Model(&data).Where("id =?", req.Id).First(&data).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if data.Status != memberwithdrawallogstatus.APPROVED {
|
||||
return errors.New("未审核请勿确认到账")
|
||||
}
|
||||
|
||||
err := e.Orm.Transaction(func(tx *gorm.DB) error {
|
||||
if err := e.Orm.Model(&data).
|
||||
Where("status =?", memberwithdrawallogstatus.APPROVED).
|
||||
Updates(map[string]interface{}{"status": data.Status, "confirm_time": time.Now()}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
totalAmount := data.Amount.Add(data.Fee)
|
||||
|
||||
if err := tx.Exec("UPDATE member_balance set total_amount=total_amount-?,frozen_amount=frozen_amount-? where user_id=? and total_amount>=? and frozen_amount>=?", totalAmount, totalAmount, data.UserId, totalAmount, totalAmount).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
@ -8,4 +8,5 @@ const (
|
||||
NetworkUnAvailable // 网络不可用
|
||||
CanNotCancel // 无法取消
|
||||
RenwalConfigDisabled // 续费配置不可用
|
||||
UserApiUserNotBind // 用户未授权
|
||||
)
|
||||
|
||||
@ -74,3 +74,25 @@ type BinanceFutureOrder struct {
|
||||
SelfTradePreventionMode string `json:"selfTradePreventionMode"` // 订单自成交保护模式
|
||||
GoodTillDate int64 `json:"goodTillDate"` // 订单TIF为GTD时的自动取消时间
|
||||
}
|
||||
|
||||
type BinanceSpotAccount struct {
|
||||
Balances []BinanceSpotBalance `json:"balances"`
|
||||
}
|
||||
|
||||
type BinanceSpotBalance struct {
|
||||
Asset string `json:"asset"`
|
||||
Free string `json:"free"`
|
||||
Locked string `json:"locked"`
|
||||
}
|
||||
|
||||
type BinanceFutureBalance struct {
|
||||
AccountAlias string `json:"accountAlias"` // 账户唯一识别码
|
||||
Asset string `json:"asset"` // 资产
|
||||
Balance string `json:"balance"` // 总余额
|
||||
CrossWalletBalance string `json:"crossWalletBalance"` // 全仓余额
|
||||
CrossUnPnl string `json:"crossUnPnl"` // 全仓持仓未实现盈亏
|
||||
AvailableBalance string `json:"availableBalance"` // 下单可用余额
|
||||
MaxWithdrawAmount string `json:"maxWithdrawAmount"` // 最大可转出余额
|
||||
MarginAvailable bool `json:"marginAvailable"` // 是否可用作联合保证金
|
||||
UpdateTime int64 `json:"updateTime"` // 更新时间(时间戳)
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
DbModels "go-admin/app/admin/models"
|
||||
"go-admin/app/admin/service/dto"
|
||||
"go-admin/common/const/rediskey"
|
||||
commondto "go-admin/common/dto"
|
||||
"go-admin/common/global"
|
||||
@ -588,3 +589,51 @@ func (e SpotRestApi) GetOrderByOrderSnLoop(symbol, ordersn string, apiUserInfo D
|
||||
|
||||
return result, err
|
||||
}
|
||||
|
||||
// 获取现货U资产
|
||||
func GetSpotUProperty(apiUserInfo DbModels.LineApiUser, data *dto.LineUserPropertyResp) error {
|
||||
endpoint := "/api/v3/account"
|
||||
params := map[string]string{
|
||||
"omitZeroBalances": "true",
|
||||
}
|
||||
|
||||
balanceResp := binancedto.BinanceSpotAccount{}
|
||||
client := GetClient(&apiUserInfo)
|
||||
body, code, err := client.SendSpotAuth(endpoint, "GET", params)
|
||||
|
||||
if err != nil || code != 200 {
|
||||
log.Error("查询现货资产 参数:", params)
|
||||
log.Error("查询现货资产 code:", code)
|
||||
log.Error("查询现货资产 err:", err)
|
||||
dataMap := make(map[string]interface{})
|
||||
if err.Error() != "" {
|
||||
if err := sonic.Unmarshal([]byte(err.Error()), &dataMap); err != nil {
|
||||
return fmt.Errorf("api_id:%d 查询资产失败:%+v", apiUserInfo.Id, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
code, ok := dataMap["code"]
|
||||
if ok {
|
||||
return fmt.Errorf("api_id:%d 查询资产失败:%s", apiUserInfo.Id, ErrorMaps[code.(float64)])
|
||||
}
|
||||
if strings.Contains(err.Error(), "Unknown order sent.") {
|
||||
return fmt.Errorf("api_id:%d 查询资产失败:%+v", apiUserInfo.Id, ErrorMaps[-2011])
|
||||
}
|
||||
return fmt.Errorf("api_id:%d 查询资产失败:%+v", apiUserInfo.Id, err.Error())
|
||||
}
|
||||
|
||||
sonic.Unmarshal(body, &balanceResp)
|
||||
|
||||
if len(balanceResp.Balances) > 0 {
|
||||
for _, item := range balanceResp.Balances {
|
||||
if strings.ToUpper(item.Asset) == "USDT" {
|
||||
free := utility.StrToDecimal(item.Free)
|
||||
lock := utility.StrToDecimal(item.Locked)
|
||||
data.SpotFreeAmount = utility.StrToDecimal(item.Free)
|
||||
data.SpotTotalAmount = free.Add(lock)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -1000,3 +1000,49 @@ func (e FutRestApi) GetOrderByOrderSnLoop(symbol, ordersn string, apiUserInfo Db
|
||||
|
||||
return result, err
|
||||
}
|
||||
|
||||
// 获取合约U资产
|
||||
func GetFuturesUProperty(apiUserInfo DbModels.LineApiUser, data *dto.LineUserPropertyResp) error {
|
||||
endpoint := "/fapi/v3/balance"
|
||||
params := map[string]string{
|
||||
"recvWindow": "5000",
|
||||
}
|
||||
|
||||
balanceResp := make([]binancedto.BinanceFutureBalance, 0)
|
||||
client := GetClient(&apiUserInfo)
|
||||
body, code, err := client.SendFuturesAuth(endpoint, "GET", params)
|
||||
|
||||
if err != nil || code != 200 {
|
||||
log.Error("查询合约资产 参数:", params)
|
||||
log.Error("查询合约资产 code:", code)
|
||||
log.Error("查询合约资产 err:", err)
|
||||
dataMap := make(map[string]interface{})
|
||||
if err.Error() != "" {
|
||||
if err := sonic.Unmarshal([]byte(err.Error()), &dataMap); err != nil {
|
||||
return fmt.Errorf("api_id:%d 查询资产失败:%+v", apiUserInfo.Id, err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
code, ok := dataMap["code"]
|
||||
if ok {
|
||||
return fmt.Errorf("api_id:%d 查询资产失败:%s", apiUserInfo.Id, ErrorMaps[code.(float64)])
|
||||
}
|
||||
if strings.Contains(err.Error(), "Unknown order sent.") {
|
||||
return fmt.Errorf("api_id:%d 查询资产失败:%+v", apiUserInfo.Id, ErrorMaps[-2011])
|
||||
}
|
||||
return fmt.Errorf("api_id:%d 查询资产失败:%+v", apiUserInfo.Id, err.Error())
|
||||
}
|
||||
|
||||
sonic.Unmarshal(body, &balanceResp)
|
||||
|
||||
for _, v := range balanceResp {
|
||||
if v.Asset == "USDT" {
|
||||
free := utility.StrToDecimal(v.AvailableBalance)
|
||||
|
||||
data.FuturesFreeAmount = free
|
||||
data.FuturesTotalAmount = utility.StrToDecimal(v.Balance)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user