🎨 新增余额记录功能

This commit is contained in:
2025-09-10 00:33:06 +08:00
parent c588e9efe7
commit b8b859f890
7 changed files with 122 additions and 4 deletions

View File

@@ -375,6 +375,7 @@ func (u *AppUserService) IsFollowTeacher(userId, teacherId uint) (bool, error) {
return count > 0, nil
}
// GetVipTeacherList 获取用户购买的讲师VIP列表
func (u *AppUserService) GetVipTeacherList(p common.PageInfo, userId uint) (list []vo.TeacherInfo, total int64, err error) {
limit := p.PageSize
offset := (p.Page - 1) * p.PageSize
@@ -416,3 +417,24 @@ func (u *AppUserService) GetVipTeacherList(p common.PageInfo, userId uint) (list
return
}
// GetBalanceLog 获取用户余额变动日志
func (u *AppUserService) GetBalanceLog(id uint, p common.PageInfo) (list []app.BalanceLog, total int64, err error) {
limit := p.PageSize
offset := (p.Page - 1) * p.PageSize
db := global.GVA_DB.Model(&app.BalanceLog{}).Where("user_id = ?", id)
err = db.Count(&total).Error
if err != nil {
global.GVA_LOG.Error("查询余额变动总数失败", zap.Error(err))
return nil, 0, err
}
err = db.Limit(limit).Offset(offset).Order("created_at desc").Find(&list).Error
if err != nil {
global.GVA_LOG.Error("查询余额变动列表失败", zap.Error(err))
return nil, 0, err
}
return
}

View File

@@ -93,9 +93,47 @@ func (u *UserService) GetUserList(p request.GetUserListReq) (userList []user.Use
// SetBalance 设置用户余额
func (u *UserService) SetBalance(p request.SetBalanceReq) (err error) {
err = global.GVA_DB.Model(&user.User{}).Where("id = ?", p.Id).Update("balance", p.Balance).Error
// 1. 查询用户
var userInfo user.User
err = global.GVA_DB.Model(&userInfo).Where("id = ?", p.Id).First(&userInfo).Error
if err != nil {
global.GVA_LOG.Error("设置用户余额失败", zap.Error(err))
global.GVA_LOG.Error("查询用户失败", zap.Error(err))
return
}
if p.ChangeType == 1 {
// 增加
userInfo.Balance += p.Balance
err = global.GVA_DB.Save(&userInfo).Error
if err != nil {
global.GVA_LOG.Error("增加用户余额失败", zap.Error(err))
return
}
} else {
// 减少
if userInfo.Balance < p.Balance {
// 余额不足
err = fmt.Errorf("用户余额不足")
return
}
userInfo.Balance -= p.Balance
err = global.GVA_DB.Save(&userInfo).Error
if err != nil {
global.GVA_LOG.Error("减少用户余额失败", zap.Error(err))
return
}
}
// 记录日志
balanceLog := app.BalanceLog{
UserID: uint(p.Id),
ChangeType: p.ChangeType,
ChangeValue: p.Balance,
Balance: userInfo.Balance,
}
err = global.GVA_DB.Create(&balanceLog).Error
if err != nil {
global.GVA_LOG.Error("记录用户余额变动日志失败", zap.Error(err))
return
}
return
@@ -165,6 +203,7 @@ func (u *UserService) SetUserStatus(id string) (err error) {
return
}
// GetTeachers 获取教师列表
func (u *UserService) GetTeachers(p common.PageInfo) (list []vo.UserInfo, total int64, err error) {
limit := p.PageSize
offset := p.PageSize * (p.Page - 1)
@@ -180,6 +219,7 @@ func (u *UserService) GetTeachers(p common.PageInfo) (list []vo.UserInfo, total
return
}
// GetTeacherApplyList 获取教师申请列表
func (u *UserService) GetTeacherApplyList(p request.GetTeacherApplyListReq) (list []app.TeacherApply, total int64, err error) {
query := global.GVA_DB.Model(&app.TeacherApply{})
@@ -204,6 +244,7 @@ func (u *UserService) GetTeacherApplyList(p request.GetTeacherApplyListReq) (lis
return
}
// UpdateTeacherApplyStatus 更新教师申请状态
func (u *UserService) UpdateTeacherApplyStatus(p app.TeacherApply) (err error) {
err = global.GVA_DB.Updates(&p).Error
if err != nil {
@@ -229,6 +270,7 @@ func (u *UserService) UpdateTeacherApplyStatus(p app.TeacherApply) (err error) {
return
}
// SetUserVip 设置用户为VIP
func (u *UserService) SetUserVip(p request.SetUserVipReq) error {
var user user.User
err := global.GVA_DB.Model(&user).Where("id = ?", p.Id).First(&user).Error
@@ -249,6 +291,7 @@ func (u *UserService) SetUserVip(p request.SetUserVipReq) error {
return nil
}
// GetLoginLog 获取登录日志
func (u *UserService) GetLoginLog(p request.GetUserListReq) (list []user.LoginLog, total int64, err error) {
limit := p.PageSize
offset := (p.Page - 1) * p.PageSize
@@ -273,6 +316,7 @@ func (u *UserService) GetLoginLog(p request.GetUserListReq) (list []user.LoginLo
return
}
// RemoveUserVip 移除用户VIP
func (u *UserService) RemoveUserVip(id int) error {
var user user.User
err := global.GVA_DB.Model(&user).Where("id = ?", id).First(&user).Error
@@ -293,6 +337,7 @@ func (u *UserService) RemoveUserVip(id int) error {
return nil
}
// GetUserVipList 获取用户会员列表
func (u *UserService) GetUserVipList(p request.GetUserListReq) (list []vo.UserInfo, total int64, err error) {
limit := p.PageSize
offset := (p.Page - 1) * p.PageSize