🎨 新增讲师包月功能,优化支付回调
This commit is contained in:
@@ -2,6 +2,10 @@ package app
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"git.echol.cn/loser/lckt/model/vip"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.echol.cn/loser/lckt/global"
|
||||
"git.echol.cn/loser/lckt/model/app"
|
||||
@@ -53,19 +57,39 @@ func (s *OrderService) Create(o *app.Order) (*app.Order, error) {
|
||||
|
||||
// 查询订单商品价格
|
||||
price := 0
|
||||
if o.OrderType == 1 {
|
||||
switch o.OrderType {
|
||||
case 1:
|
||||
err := global.GVA_DB.Table("article").Select("price").Where("id = ?", o.ArticleId).Scan(&price).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("查询商品价格失败", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
case 2:
|
||||
err := global.GVA_DB.Table("lckt_vip").Select("price").Where("id = ?", o.VipId).Scan(&price).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("查询VIP价格失败", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
case 3:
|
||||
// 讲师包月
|
||||
|
||||
//切割TeacherVipId字符串
|
||||
ids := strings.Split(o.TeacherVipId, ",")
|
||||
// 查询每个服务的价格并累加
|
||||
totalPrice := 0
|
||||
for _, id := range ids {
|
||||
var p int
|
||||
err := global.GVA_DB.Table("app_teacher_vip").Select("price").Where("id = ?", id).Scan(&p).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("查询讲师包月价格失败", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
totalPrice += p
|
||||
}
|
||||
|
||||
price = totalPrice
|
||||
}
|
||||
|
||||
o.Price = int64(price)
|
||||
o.Status = 1 // 设置订单状态为未付款
|
||||
// 设置openid
|
||||
@@ -108,7 +132,7 @@ func (s *OrderService) BalancePay(p request.BalancePay) error {
|
||||
}
|
||||
// 检查用户余额是否足够
|
||||
var user user.User
|
||||
err = global.GVA_DB.Where("id = ?", p.UserId).Select("id,balance").First(&user).Error
|
||||
err = global.GVA_DB.Where("id = ?", p.UserId).First(&user).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("查询用户信息失败", zap.Error(err))
|
||||
return err
|
||||
@@ -141,6 +165,58 @@ func (s *OrderService) BalancePay(p request.BalancePay) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// 全站Vip
|
||||
if order.OrderType == 2 {
|
||||
// 更新用户的会员状态
|
||||
user.IsVip = 1
|
||||
// 查询用户购买的会员信息
|
||||
vipInfo := vip.Vip{}
|
||||
err = global.GVA_DB.Model(&vip.Vip{}).Where("id = ?", order.VipId).First(&vipInfo).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("查询会员信息失败", zap.Error(err))
|
||||
return nil
|
||||
}
|
||||
// 计算会员的过期时间
|
||||
if user.VipExpireTime != "" {
|
||||
expireTime, _ := time.Parse("2006-01-02", user.VipExpireTime)
|
||||
if expireTime.After(time.Now()) {
|
||||
// 如果会员未过期,则在原有的基础上增加时间
|
||||
user.VipExpireTime = expireTime.AddDate(0, 0, int(vipInfo.Expiration)).Format("2006-01-02")
|
||||
} else {
|
||||
// 如果会员已过期,则从当前时间开始计算
|
||||
user.VipExpireTime = time.Now().AddDate(0, 0, int(vipInfo.Expiration)).Format("2006-01-02")
|
||||
}
|
||||
} else {
|
||||
// 如果没有会员时间,则从当前时间开始计算
|
||||
user.VipExpireTime = time.Now().AddDate(0, 0, int(vipInfo.Expiration)).Format("2006-01-02")
|
||||
}
|
||||
err = global.GVA_DB.Save(&user).Error
|
||||
if err != nil {
|
||||
global.GVA_LOG.Error("更新用户会员状态失败", zap.Error(err))
|
||||
return nil
|
||||
}
|
||||
}
|
||||
// 讲师包月
|
||||
if order.OrderType == 3 {
|
||||
// 逗号分割字符串
|
||||
ids := strings.Split(order.TeacherVipId, ",")
|
||||
for _, id := range ids {
|
||||
teacherVip := app.UserTeacherVip{}
|
||||
teacherVip.TeacherId = uint(order.TeacherId)
|
||||
// 将id转为uint
|
||||
teacherVipId, _ := strconv.ParseUint(id, 10, 64)
|
||||
teacherVip.TeacherVipId = uint(teacherVipId)
|
||||
teacherVip.UserId = uint(order.UserId)
|
||||
teacherVip.ExpireAt = time.Now().AddDate(0, 1, 0).Format("2006-01-02") // 会员有效期一个月
|
||||
teacherVip.IsExpire = 1 // 设置为未过期
|
||||
err = global.GVA_DB.Create(&teacherVip).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