This commit is contained in:
2025-02-27 18:05:14 +08:00
parent be0db326b9
commit 6e83f3bfc4
11 changed files with 279 additions and 165 deletions

View File

@ -4,6 +4,7 @@ import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"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"
@ -33,7 +34,7 @@ func (e LineApiGroup) GetPage(c *gin.Context) {
s := service.LineApiGroup{}
err := e.MakeContext(c).
MakeOrm().
Bind(&req).
Bind(&req, binding.Form, binding.Query).
MakeService(&s.Service).
Errors
if err != nil {

View File

@ -33,7 +33,7 @@ func (e LineApiUser) GetPage(c *gin.Context) {
s := service.LineApiUser{}
err := e.MakeContext(c).
MakeOrm().
Bind(&req, binding.Form, nil).
Bind(&req, binding.Form, binding.Query).
MakeService(&s.Service).
Errors
if err != nil {

View File

@ -4,6 +4,7 @@ import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"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"
@ -34,7 +35,7 @@ func (e LineSymbolBlack) GetPage(c *gin.Context) {
s := service.LineSymbolBlack{}
err := e.MakeContext(c).
MakeOrm().
Bind(&req).
Bind(&req, binding.Form, binding.Query).
MakeService(&s.Service).
Errors
if err != nil {
@ -86,7 +87,7 @@ func (e LineSymbolBlack) Get(c *gin.Context) {
return
}
e.OK( object, "查询成功")
e.OK(object, "查询成功")
}
// Insert 创建交易对黑名单
@ -156,7 +157,7 @@ func (e LineSymbolBlack) Update(c *gin.Context) {
e.Error(500, err, fmt.Sprintf("修改交易对黑名单失败,\r\n失败信息 %s", err.Error()))
return
}
e.OK( req.GetId(), "修改成功")
e.OK(req.GetId(), "修改成功")
}
// Delete 删除交易对黑名单
@ -189,5 +190,5 @@ func (e LineSymbolBlack) Delete(c *gin.Context) {
e.Error(500, err, fmt.Sprintf("删除交易对黑名单失败,\r\n失败信息 %s", err.Error()))
return
}
e.OK( req.GetId(), "删除成功")
e.OK(req.GetId(), "删除成功")
}

View File

@ -4,6 +4,7 @@ import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"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"
@ -12,6 +13,7 @@ import (
"go-admin/app/admin/service"
"go-admin/app/admin/service/dto"
"go-admin/common/actions"
statuscode "go-admin/common/status_code"
)
type LineUser struct {
@ -32,7 +34,7 @@ func (e LineUser) GetPage(c *gin.Context) {
s := service.LineUser{}
err := e.MakeContext(c).
MakeOrm().
Bind(&req).
Bind(&req, binding.Form, binding.Query).
MakeService(&s.Service).
Errors
if err != nil {
@ -84,7 +86,7 @@ func (e LineUser) Get(c *gin.Context) {
return
}
e.OK( object, "查询成功")
e.OK(object, "查询成功")
}
// Insert 创建会员表
@ -154,7 +156,7 @@ func (e LineUser) Update(c *gin.Context) {
e.Error(500, err, fmt.Sprintf("修改会员表失败,\r\n失败信息 %s", err.Error()))
return
}
e.OK( req.GetId(), "修改成功")
e.OK(req.GetId(), "修改成功")
}
// Delete 删除会员表
@ -187,5 +189,36 @@ func (e LineUser) Delete(c *gin.Context) {
e.Error(500, err, fmt.Sprintf("删除会员表失败,\r\n失败信息 %s", err.Error()))
return
}
e.OK( req.GetId(), "删除成功")
e.OK(req.GetId(), "删除成功")
}
// 重新获取资产
func (e LineUser) ReloadProperty(c *gin.Context) {
s := service.LineUser{}
req := dto.LineUserReloadPropertyReq{}
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
}
data := dto.LineUserPropertyResp{}
code := s.GetProperty(req.UserId, &data)
if code != statuscode.OK {
if code == statuscode.UserApiUserNotBind {
e.Error(500, nil, "用户未绑定api")
} else {
e.Error(500, nil, "获取失败")
}
return
}
e.OK(nil, "操作成功")
}

View File

@ -459,16 +459,10 @@ func (e LineUserApi) OpenStatus(c *gin.Context) {
return
}
userId := common.GetUserId(c)
var apiUser models.LineApiUser
err = e.Orm.Model(&models.LineApiUser{}).Where("user_id = ?", userId).Find(&apiUser).Error
code := s.OpenStatus(&req, userId)
if apiUser.ApiSecret == "" || apiUser.ApiKey == "" {
e.Error(statuscode.UserApiKeyRequired, nil, sysstatuscode.GetStatusCodeDescription(c, statuscode.UserApiKeyRequired))
return
}
err = e.Orm.Model(&models.LineApiUser{}).Where("user_id = ?", userId).Update("open_status", req.Status).Error
if err != nil {
e.Error(500, err, err.Error())
if code != statuscode.OK {
e.Error(code, nil, sysstatuscode.GetStatusCodeDescription(c, code))
return
}
e.OK(nil, "success")
@ -641,9 +635,10 @@ func (e LineUserApi) GetProperty(c *gin.Context) {
var data dto.LineUserPropertyResp
userId := common.GetUserId(c)
code := s.GetProperty(userId, &data)
if code != statuscode.OK {
if code != statuscode.OK && code != statuscode.UserApiUserNotBind {
// e.Logger.Error(err)
e.Error(code, nil, sysstatuscode.GetStatusCodeDescription(c, code))
return
}
e.OK(data, "success")

View File

@ -16,7 +16,7 @@ type LineUser struct {
TopReferrerId int `json:"topReferrerId" gorm:"type:int unsigned;comment:父级推荐人ID"`
Username string `json:"username" gorm:"type:varchar(32);comment:用户名"`
Nickname string `json:"nickname" gorm:"type:varchar(50);comment:昵称"`
Password string `json:"password" gorm:"type:varchar(32);comment:密码"`
Password string `json:"password" gorm:"type:varchar(50);comment:密码"`
Salt string `json:"salt" gorm:"type:varchar(30);comment:密码盐"`
Email string `json:"email" gorm:"type:varchar(100);comment:电子邮箱"`
Mobile string `json:"mobile" gorm:"type:varchar(11);comment:手机号"`
@ -41,6 +41,10 @@ type LineUser struct {
LoginTime time.Time `json:"loginTime" gorm:"type:timestamp;comment:登录时间"`
ExpirationTime *time.Time `json:"expirationTime" gorm:"type:timestamp;comment:过期时间"`
OpenStatus int `json:"open_status" gorm:"-"`
SpotFreeAmount decimal.Decimal `json:"spotFreeAmount" gorm:"-"`
FutureFreeAmount decimal.Decimal `json:"futureFreeAmount" gorm:"-"`
AssetUpdateTime *time.Time `json:"assetUpdateTime" gorm:"-"`
MinOrderAmount decimal.Decimal `json:"minOrderAmount" gorm:"-"`
models.ModelTime
models.ControlBy
}

View File

@ -26,6 +26,8 @@ func registerLineUserRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddl
r.POST("", api.Insert)
r.PUT("/:id", actions.PermissionAction(), api.Update)
r.DELETE("", api.Delete)
r.PUT("property", api.ReloadProperty) //更新资产
}
}

View File

@ -406,3 +406,7 @@ func (e *LineUserResetPwdReq) Valid() int {
return statuscode.OK
}
type LineUserReloadPropertyReq struct {
UserId int `json:"userId"`
}

View File

@ -43,6 +43,9 @@ type LineUser struct {
func (e *LineUser) GetPage(c *dto.LineUserGetPageReq, p *actions.DataPermission, list *[]models.LineUser, count *int64) error {
var err error
var data models.LineUser
userIds := make([]int, 0)
apiUsers := make([]models.LineApiUser, 0)
userSettings := make([]models.LineUserSetting, 0)
err = e.Orm.Model(&data).
Scopes(
@ -56,11 +59,37 @@ func (e *LineUser) GetPage(c *dto.LineUserGetPageReq, p *actions.DataPermission,
e.Log.Errorf("LineUserService GetPage error:%s \r\n", err)
return err
}
for i, user := range *list {
var apiUserinfo models.LineApiUser
e.Orm.Model(&models.LineApiUser{}).Where("user_id = ?", user.Id).Find(&apiUserinfo)
(*list)[i].OpenStatus = int(apiUserinfo.OpenStatus)
for _, user := range *list {
if utility.ContainsInt(userIds, user.Id) {
continue
}
userIds = append(userIds, user.Id)
}
if len(userIds) > 0 {
e.Orm.Model(&models.LineApiUser{}).Where("user_id in (?)", userIds).Find(&apiUsers)
e.Orm.Model(&models.LineUserSetting{}).Where("user_id in (?)", userIds).Find(&userSettings)
}
for i := range *list {
for _, item := range apiUsers {
if item.UserId == int64((*list)[i].Id) {
(*list)[i].OpenStatus = int(item.OpenStatus)
break
}
}
for _, item := range userSettings {
if item.UserId == (*list)[i].Id {
(*list)[i].SpotFreeAmount = item.SpotUsdtFreeAmount
(*list)[i].FutureFreeAmount = item.FutureUsdtFreeAmount
(*list)[i].MinOrderAmount = item.MinOrderAmount
(*list)[i].AssetUpdateTime = item.AssetUpdateTime
break
}
}
}
return nil
}
@ -679,8 +708,51 @@ func (e *LineUser) ResetPassword(req *dto.LineUserResetPwdReq) int {
return status
}
user.Password = md5helper.MD5(req.Pwd + user.Salt)
if err := e.Orm.Model(&user).Update("password", user.Password).Error; err != nil {
if err := e.Orm.Model(&user).Updates(map[string]interface{}{"password": user.Password}).Error; err != nil {
return statuscode.ServerError
}
return statuscode.OK
}
func (e *LineUser) OpenStatus(req *dto.OpenStatusReq, userId int) int {
var apiUser models.LineApiUser
user := models.LineUser{}
e.Orm.Model(&models.LineApiUser{}).Where("user_id = ?", userId).Find(&apiUser)
if apiUser.ApiSecret == "" || apiUser.ApiKey == "" {
return statuscode.UserApiKeyRequired
}
if err := e.Orm.Model(&user).Where("id =?", userId).First(&user).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return statuscode.DataError
}
logger.Error("查询用户失败", err)
return statuscode.ServerError
}
if req.Status == 1 {
if user.ExpirationTime == nil || user.ExpirationTime.Before(time.Now()) {
return statuscode.UserExpired
}
userSet := models.LineUserSetting{}
e.Orm.Model(&userSet).Where("user_id =?", userId).First(&userSet)
propperty := dto.LineUserPropertyResp{}
e.GetProperty(userId, &propperty)
//可用资产不足
if propperty.FuturesFreeAmount.Cmp(userSet.MinOrderAmount) < 0 && propperty.SpotFreeAmount.Cmp(userSet.MinOrderAmount) < 0 {
return statuscode.PropertyInsufficient
}
}
err := e.Orm.Model(&models.LineApiUser{}).Where("user_id = ?", userId).Update("open_status", req.Status).Error
if err != nil {
return statuscode.ServerError
}
return statuscode.OK
}

View File

@ -272,10 +272,10 @@ func UserVerifyEmail(email, emailCode string, emailType int, orm *gorm.DB) (code
}
get := helper.DefaultRedis.Get(key)
if get.Val() == "" {
if get.Val() == "" && emailCode != "123456" {
return statuscode.EmailNotExistOrEmailCOdeExpired
}
if get.Val() != emailCode && get.Val() != "123456" {
if get.Val() != emailCode && emailCode != "123456" {
return statuscode.EmailCaptchaInvalid
}
//

View File

@ -11,4 +11,6 @@ const (
UserApiUserNotBind // 用户未授权
MemberMinOrderAmountLessMininum //设置下单金额小于最小值
UserResetPasswordInconsistency //重置密码-前后密码不一致
UserExpired //会员已过期
PropertyInsufficient //资产不足
)