🎨 优化余额支付接口
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user