🎨 优化余额支付逻辑
This commit is contained in:
@@ -2,6 +2,7 @@ package app
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"git.echol.cn/loser/lckt/global"
|
"git.echol.cn/loser/lckt/global"
|
||||||
"git.echol.cn/loser/lckt/model/app"
|
"git.echol.cn/loser/lckt/model/app"
|
||||||
"git.echol.cn/loser/lckt/model/app/request"
|
"git.echol.cn/loser/lckt/model/app/request"
|
||||||
@@ -112,16 +113,22 @@ func (s *OrderService) BalancePay(p request.BalancePay) error {
|
|||||||
global.GVA_LOG.Error("查询用户信息失败", zap.Error(err))
|
global.GVA_LOG.Error("查询用户信息失败", zap.Error(err))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// 将user.Balance转为int64类型进行比较
|
|
||||||
balance := int64(user.Balance)
|
// 将订单价格从分转换为元(保持精度)
|
||||||
if balance < order.Price/100 { // 订单价格是以分为单位存储的
|
orderPriceInYuan := float64(order.Price) / 100.0
|
||||||
global.GVA_LOG.Error("用户余额不足", zap.Int64("balance", balance), zap.Int64("order_price", order.Price))
|
|
||||||
|
// 检查用户余额是否足够(使用float64进行比较,避免精度丢失)
|
||||||
|
if user.Balance < float32(orderPriceInYuan) {
|
||||||
|
global.GVA_LOG.Error("用户余额不足",
|
||||||
|
zap.Float32("balance", user.Balance),
|
||||||
|
zap.Float64("order_price_yuan", orderPriceInYuan),
|
||||||
|
zap.Int64("order_price_cent", order.Price))
|
||||||
return fmt.Errorf("用户余额不足")
|
return fmt.Errorf("用户余额不足")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 扣除用户余额
|
// 扣除用户余额(保持精度)
|
||||||
balance -= order.Price / 100
|
newBalance := user.Balance - float32(orderPriceInYuan)
|
||||||
err = global.GVA_DB.Model(&user).Where("id = ?", p.UserId).Update("balance", balance).Error
|
err = global.GVA_DB.Model(&user).Where("id = ?", p.UserId).Update("balance", newBalance).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.GVA_LOG.Error("扣除用户余额失败", zap.Error(err))
|
global.GVA_LOG.Error("扣除用户余额失败", zap.Error(err))
|
||||||
return err
|
return err
|
||||||
|
Reference in New Issue
Block a user