🎨 优化余额支付接口

This commit is contained in:
2025-09-08 20:12:16 +08:00
parent 2bc3eb26fd
commit a30ab925d1

View File

@@ -10,7 +10,7 @@ import (
"git.echol.cn/loser/lckt/global"
"git.echol.cn/loser/lckt/model/app"
"git.echol.cn/loser/lckt/model/app/request"
"git.echol.cn/loser/lckt/model/user"
userM "git.echol.cn/loser/lckt/model/user"
"git.echol.cn/loser/lckt/utils/wechat"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
@@ -131,7 +131,7 @@ func (s *OrderService) BalancePay(p request.BalancePay) error {
return err
}
// 检查用户余额是否足够
var user user.User
var user userM.User
err = global.GVA_DB.Where("id = ?", p.UserId).First(&user).Error
if err != nil {
global.GVA_LOG.Error("查询用户信息失败", zap.Error(err))
@@ -142,16 +142,16 @@ func (s *OrderService) BalancePay(p request.BalancePay) error {
orderPriceInYuan := float64(order.Price) / 100.0
// 检查用户余额是否足够使用float64进行比较避免精度丢失
if user.Balance < float32(orderPriceInYuan) {
if user.Balance < orderPriceInYuan {
global.GVA_LOG.Error("用户余额不足",
zap.Float32("balance", user.Balance),
zap.Float64("balance", user.Balance),
zap.Float64("order_price_yuan", orderPriceInYuan),
zap.Int64("order_price_cent", order.Price))
return fmt.Errorf("用户余额不足")
}
// 扣除用户余额(保持精度)
newBalance := user.Balance - float32(orderPriceInYuan)
newBalance := user.Balance - orderPriceInYuan
err = global.GVA_DB.Model(&user).Where("id = ?", p.UserId).Update("balance", newBalance).Error
if err != nil {
global.GVA_LOG.Error("扣除用户余额失败", zap.Error(err))
@@ -215,8 +215,37 @@ func (s *OrderService) BalancePay(p request.BalancePay) error {
return err
}
}
// 计算分成比例,按比例增加讲师余额
teacher := userM.User{}
err = global.GVA_DB.Model(&userM.User{}).Where("id = ?", order.TeacherId).First(&teacher).Error
if err != nil {
global.GVA_LOG.Error("查询讲师信息失败", zap.Error(err))
return err
}
// 计算分成金额
amount := float64(order.Price) * float64(teacher.ExpectRate) / 100.0
teacher.Balance = teacher.Balance + amount
err = global.GVA_DB.Save(&teacher).Error
if err != nil {
global.GVA_LOG.Error("更新讲师余额失败", zap.Error(err))
return err
}
}
// 计算分成比例,按比例增加讲师余额
teacher := userM.User{}
err = global.GVA_DB.Model(&userM.User{}).Where("id = ?", order.TeacherId).First(&teacher).Error
if err != nil {
global.GVA_LOG.Error("查询讲师信息失败", zap.Error(err))
return err
}
// 计算分成金额
amount := float64(order.Price) * float64(teacher.ExpectRate) / 100.0
teacher.Balance = teacher.Balance + amount
err = global.GVA_DB.Save(&teacher).Error
if err != nil {
global.GVA_LOG.Error("更新讲师余额失败", zap.Error(err))
return err
}
global.GVA_LOG.Info("余额支付成功", zap.Int64("user_id", int64(p.UserId)), zap.String("order_no", order.OrderNo))
return nil
}