feat(player): 优化金币兑换功能 - 在ServiceUpdate方法中返回更新后的数据而不是nil - 新增DuihuanGold方法用于处理金币兑换逻辑 - 修改黄金列表控制器中的兑换计算逻辑,区分费用和获得金币的计算 - 在添加操作前验证用户金币余额是否充足 - 修正了兑换比例计算和余额检查逻辑 ```
This commit is contained in:
@@ -169,7 +169,7 @@ func (s *Service) ServiceUpdate(ctx context.Context, req *UpdateReq) (data sql.R
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//rmap["id"] = nil
|
//rmap["id"] = nil
|
||||||
_, err = m.Data(rmap).Where("id", rmap["id"]).Update()
|
data, err = m.Data(rmap).Where("id", rmap["id"]).Update()
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,14 @@ func (s *BaseSysUserService) DuihuanFreeGold(userId uint32, gold, free int64) {
|
|||||||
}).Update()
|
}).Update()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
func (s *BaseSysUserService) DuihuanGold(userId uint32, gold, free int64) {
|
||||||
|
m := cool.DBM(s.Model).Where("id", userId)
|
||||||
|
m.Data(g.Map{
|
||||||
|
"goldbean": gdb.Raw("goldbean+" + gconv.String(gold)),
|
||||||
|
"free_gold": gdb.Raw("free_gold-" + gconv.String(free)),
|
||||||
|
}).Update()
|
||||||
|
|
||||||
|
}
|
||||||
func (s *BaseSysUserService) UpdateFreeGold(userId uint32, gold int64) {
|
func (s *BaseSysUserService) UpdateFreeGold(userId uint32, gold int64) {
|
||||||
|
|
||||||
m := cool.DBM(s.Model).Where("id", userId)
|
m := cool.DBM(s.Model).Where("id", userId)
|
||||||
|
|||||||
@@ -43,8 +43,9 @@ func (c *GoldListController) DuihuanGold(ctx context.Context, req *DuihuanGoldAd
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
all := r.Rate * float64(r.ExchangeNum)
|
costfree := r.Rate * float64(r.ExchangeNum)
|
||||||
if base.NewBaseSysUserService().GetFreeGold(t.UserId) < int64(all*105) {
|
getgold := 1 / r.Rate * float64(r.ExchangeNum)
|
||||||
|
if base.NewBaseSysUserService().GetFreeGold(t.UserId) < int64(costfree*100) {
|
||||||
err = fmt.Errorf("余额不足")
|
err = fmt.Errorf("余额不足")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -52,8 +53,8 @@ func (c *GoldListController) DuihuanGold(ctx context.Context, req *DuihuanGoldAd
|
|||||||
err = fmt.Errorf("未到购买时间")
|
err = fmt.Errorf("未到购买时间")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
base.NewBaseSysUserService().UpdateGold(uint32(r.PlayerID), int64(all*95))
|
base.NewBaseSysUserService().DuihuanFreeGold(uint32(r.PlayerID), int64(r.ExchangeNum*100), int64(costfree*95))
|
||||||
base.NewBaseSysUserService().UpdateFreeGold(uint32(t.UserId), -int64(all*105))
|
base.NewBaseSysUserService().DuihuanGold(uint32(t.UserId), int64(getgold*95), int64(costfree*100))
|
||||||
res = cool.Ok(nil)
|
res = cool.Ok(nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,11 +2,13 @@ package service
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"blazing/cool"
|
"blazing/cool"
|
||||||
|
"blazing/modules/base/service"
|
||||||
"blazing/modules/player/model"
|
"blazing/modules/player/model"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/gogf/gf/v2/frame/g"
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
|
"github.com/gogf/gf/v2/util/gconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
type GoldListService struct {
|
type GoldListService struct {
|
||||||
@@ -17,8 +19,10 @@ func (s *GoldListService) ModifyBefore(ctx context.Context, method string, param
|
|||||||
admin := cool.GetAdmin(ctx)
|
admin := cool.GetAdmin(ctx)
|
||||||
userId := admin.UserId
|
userId := admin.UserId
|
||||||
|
|
||||||
g.RequestFromCtx(ctx).SetParam("player_id", userId)
|
|
||||||
if method == "Add" {
|
if method == "Add" {
|
||||||
|
if service.NewBaseSysUserService().GetGold(userId) < gconv.Int64(param["exchange_num"])*100 {
|
||||||
|
return fmt.Errorf("金额不足")
|
||||||
|
}
|
||||||
|
|
||||||
t, _ := s.dbm_fix(s.Model).Where("player_id", userId).Where("status", 0).Count()
|
t, _ := s.dbm_fix(s.Model).Where("player_id", userId).Where("status", 0).Count()
|
||||||
if t > 0 {
|
if t > 0 {
|
||||||
|
|||||||
Reference in New Issue
Block a user