🎨 新增批量修改包月服务价格功能&新增讲师管理相关功能

This commit is contained in:
2025-09-15 20:26:32 +08:00
parent 19eeb6f0a3
commit 7f066800a8
10 changed files with 110 additions and 12 deletions

View File

@@ -110,3 +110,21 @@ func (a *TeacherVip) GetTeacherVip(context *gin.Context) {
}
r.OkWithDetailed(vip, "获取讲师VIP成功", context)
}
// UpdatePriceBatch 批量更新价格
func (a *TeacherVip) UpdatePriceBatch(context *gin.Context) {
var p request.UpdateTeacherVipPriceBatch
if err := context.ShouldBind(&p); err != nil {
global.GVA_LOG.Error("参数错误,批量更新价格失败", zap.Error(err))
r.FailWithMessage("参数错误,批量更新价格失败", context)
return
}
err := teacherVipService.UpdatePriceBatch(p)
if err != nil {
r.FailWithMessage("批量更新价格失败", context)
return
}
r.OkWithMessage("批量更新价格成功", context)
}

View File

@@ -236,3 +236,39 @@ func (a *UserApi) GetUserVipList(context *gin.Context) {
PageSize: p.PageSize,
}, "获取用户会员列表成功", context)
}
// SetTeacherWeight 设置讲师权重
func (a *UserApi) SetTeacherWeight(context *gin.Context) {
var p request.SetTeacherInfo
if err := context.ShouldBind(&p); err != nil {
global.GVA_LOG.Error("参数错误,修改讲师信息失败", zap.Error(err))
r.FailWithMessage("参数错误,修改讲师信息失败", context)
return
}
if err := userService.SetTeacherWeight(p); err != nil {
global.GVA_LOG.Error("修改讲师信息失败", zap.Error(err))
r.FailWithMessage("修改讲师信息失败", context)
return
}
r.OkWithMessage("修改讲师信息成功", context)
}
// SetTeacherExpectRate 设置讲师分成比例
func (a *UserApi) SetTeacherExpectRate(context *gin.Context) {
var p request.SetTeacherInfo
if err := context.ShouldBind(&p); err != nil {
global.GVA_LOG.Error("参数错误,修改讲师信息失败", zap.Error(err))
r.FailWithMessage("参数错误,修改讲师信息失败", context)
return
}
if err := userService.SetTeacherExpectRate(p); err != nil {
global.GVA_LOG.Error("修改讲师信息失败", zap.Error(err))
r.FailWithMessage("修改讲师信息失败", context)
return
}
r.OkWithMessage("修改讲师信息成功", context)
}

View File

@@ -6,3 +6,8 @@ type GetTeacherVipList struct {
common.PageInfo
TeacherId uint `json:"teacher_id" form:"teacher_id"` // 讲师ID
}
type UpdateTeacherVipPriceBatch struct {
Ids []uint `json:"ids" form:"ids" vd:"@:len($)>0; msg:'请选择要修改的讲师VIP'"`
Price float64 `json:"price" form:"price" vd:"@:len($)>0; msg:'请输入讲师VIP价格'"` // 讲师VIP价格
}

View File

@@ -4,12 +4,12 @@ import "git.echol.cn/loser/lckt/global"
type TeacherVip struct {
global.GVA_MODEL
Title string `json:"title" form:"title" gorm:"comment:VIP标题;size:128"`
TeacherId uint `json:"teacher_id" gorm:"comment:讲师ID;"`
TeacherName string `json:"teacher_name" gorm:"comment:讲师名称"` // 讲师名称
Avatar string `json:"avatar" gorm:"comment:讲师头像"`
Price int `json:"price" gorm:"comment:VIP价格(单位为分)"`
Desc string `json:"desc" gorm:"comment:VIP描述;type:longtext"`
Title string `json:"title" form:"title" gorm:"comment:VIP标题;size:128"`
TeacherId uint `json:"teacher_id" gorm:"comment:讲师ID;"`
TeacherName string `json:"teacher_name" gorm:"comment:讲师名称"` // 讲师名称
Avatar string `json:"avatar" gorm:"comment:讲师头像"`
Price float64 `json:"price" gorm:"comment:VIP价格(单位为分)"`
Desc string `json:"desc" gorm:"comment:VIP描述;type:longtext"`
}
func (TeacherVip) TableName() string {

View File

@@ -22,4 +22,5 @@ type TeacherInfo struct {
Avatar string `json:"avatar" form:"avatar"`
Des string `json:"des" form:"des"`
Follow int64 `json:"follow" form:"follow"` // 粉丝数
Weight int `json:"weight" form:"weight"` // 权重
}

View File

@@ -90,3 +90,9 @@ type SetUserVipReq struct {
VipExpireTime string `json:"vip_expire_time" form:"vip_expire_time" vd:"@:len($)>0; msg:'会员过期时间不能为空'"`
UserLabel int64 `json:"user_label" form:"user_label" vd:"@:len($)>0; msg:'用户标签不能为空'"` // 1 普通用户 2 Vip 3 Svip
}
type SetTeacherInfo struct {
Id int `json:"id" form:"id" vd:"@:len($)>0; msg:'用户ID不能为空'"`
ExpectRate int `json:"expect_rate" form:"expect_rate"`
Weight int `json:"weight" form:"weight" `
}

View File

@@ -23,12 +23,15 @@ func (s *UserRouter) InitUserRouter(Router *gin.RouterGroup, PublicRouter *gin.R
userRouter.GET("/login/log", userApi.GetLoginLog) // 获取用户登录日志
userRouter.DELETE("/vip", userApi.RemoveUserVip) // 删除用户会员
userRouter.GET("/vip/list", userApi.GetUserVipList) // 获取用户会员列表
userRouter.PUT("/rate", userApi.SetTeacherExpectRate) // 设置讲师分成比例
userRouter.PUT("/weight", userApi.SetTeacherWeight) // 设置讲师权重
}
{
userRouter.GET("teacher_vips", teacherVipApi.GetTeacherVipList) // 获取讲师VIP列表
userRouter.GET("teacher_vip", teacherVipApi.GetTeacherVip) // 获取讲师VIP详情
userRouter.POST("teacher_vip", teacherVipApi.CreateTeacherVip) // 创建讲师VIP
userRouter.PUT("teacher_vip", teacherVipApi.Update) // 更新讲师VIP
userRouter.DELETE("teacher_vip", teacherVipApi.DeleteTeacherVip) // 删除讲师VIP
userRouter.GET("teacher_vips", teacherVipApi.GetTeacherVipList) // 获取讲师VIP列表
userRouter.GET("teacher_vip", teacherVipApi.GetTeacherVip) // 获取讲师VIP详情
userRouter.POST("teacher_vip", teacherVipApi.CreateTeacherVip) // 创建讲师VIP
userRouter.PUT("teacher_vip", teacherVipApi.Update) // 更新讲师VIP
userRouter.DELETE("teacher_vip", teacherVipApi.DeleteTeacherVip) // 删除讲师VIP
userRouter.PUT("/teacher_vip/price", teacherVipApi.UpdatePriceBatch) // 批量设置讲师课程价格
}
}

View File

@@ -97,4 +97,13 @@ func (u *TeacherVipService) GetTeacherVip(id int) (vip app.TeacherVip, err error
return vip, nil
}
func (u *TeacherVipService) UpdatePriceBatch(p request.UpdateTeacherVipPriceBatch) (err error) {
err = global.GVA_DB.Model(&app.TeacherVip{}).Where("id IN ?", p.Ids).Update("price", p.Price).Error
if err != nil {
global.GVA_LOG.Error("批量更新讲师VIP价格失败", zap.Error(err))
return
}
return
}
// ===========================管理后台接口===========================

View File

@@ -244,7 +244,7 @@ func (u *AppUserService) GetTeacherList(p common.PageInfo) (list []vo.TeacherInf
global.GVA_LOG.Error("查询教师总数失败", zap.Error(err))
return nil, 0, err
}
err = db.Limit(limit).Offset(offset).Select("id, nick_name, avatar,des").Find(&list).Error
err = db.Limit(limit).Offset(offset).Select("id, nick_name, avatar,des,weight").Find(&list).Error
if err != nil {
global.GVA_LOG.Error("查询教师列表失败", zap.Error(err))
return nil, 0, err

View File

@@ -363,3 +363,23 @@ func (u *UserService) GetUserVipList(p request.GetUserListReq) (list []vo.UserIn
}
return
}
// SetTeacherWeight 设置讲师权重
func (u *UserService) SetTeacherWeight(p request.SetTeacherInfo) (err error) {
err = global.GVA_DB.Model(&user.User{}).Where("id = ?", p.Id).Update("weight", p.Weight).Error
if err != nil {
global.GVA_LOG.Error("设置讲师权重失败", zap.Error(err))
return
}
return
}
// SetTeacherExpectRate 设置讲师分成
func (u *UserService) SetTeacherExpectRate(p request.SetTeacherInfo) (err error) {
err = global.GVA_DB.Model(&user.User{}).Where("id = ?", p.Id).Update("expect_rate", p.ExpectRate).Error
if err != nil {
global.GVA_LOG.Error("设置讲师权重失败", zap.Error(err))
return
}
return
}