🎨 优化余额支付接口
This commit is contained in:
@@ -10,7 +10,7 @@ import (
|
|||||||
"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"
|
||||||
"git.echol.cn/loser/lckt/model/user"
|
userM "git.echol.cn/loser/lckt/model/user"
|
||||||
"git.echol.cn/loser/lckt/utils/wechat"
|
"git.echol.cn/loser/lckt/utils/wechat"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
@@ -131,7 +131,7 @@ func (s *OrderService) BalancePay(p request.BalancePay) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// 检查用户余额是否足够
|
// 检查用户余额是否足够
|
||||||
var user user.User
|
var user userM.User
|
||||||
err = global.GVA_DB.Where("id = ?", p.UserId).First(&user).Error
|
err = global.GVA_DB.Where("id = ?", p.UserId).First(&user).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.GVA_LOG.Error("查询用户信息失败", zap.Error(err))
|
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
|
orderPriceInYuan := float64(order.Price) / 100.0
|
||||||
|
|
||||||
// 检查用户余额是否足够(使用float64进行比较,避免精度丢失)
|
// 检查用户余额是否足够(使用float64进行比较,避免精度丢失)
|
||||||
if user.Balance < float32(orderPriceInYuan) {
|
if user.Balance < orderPriceInYuan {
|
||||||
global.GVA_LOG.Error("用户余额不足",
|
global.GVA_LOG.Error("用户余额不足",
|
||||||
zap.Float32("balance", user.Balance),
|
zap.Float64("balance", user.Balance),
|
||||||
zap.Float64("order_price_yuan", orderPriceInYuan),
|
zap.Float64("order_price_yuan", orderPriceInYuan),
|
||||||
zap.Int64("order_price_cent", order.Price))
|
zap.Int64("order_price_cent", order.Price))
|
||||||
return fmt.Errorf("用户余额不足")
|
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
|
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))
|
||||||
@@ -215,8 +215,37 @@ func (s *OrderService) BalancePay(p request.BalancePay) error {
|
|||||||
return 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 计算分成比例,按比例增加讲师余额
|
||||||
|
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))
|
global.GVA_LOG.Info("余额支付成功", zap.Int64("user_id", int64(p.UserId)), zap.String("order_no", order.OrderNo))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user