Files
51dj_server/app/api/vipctrl/vipctrl.go
T
2026-10-08 16:50:13 +08:00

112 lines
3.1 KiB
Go

package vipctrl
import (
"91jd-server/app/service/integral_config_ser"
"91jd-server/common/daichong"
"sync"
"time"
"91jd-server/app/proto"
"91jd-server/app/service/productser"
"91jd-server/app/service/rechargeser"
"91jd-server/app/service/vipcardexperimentser"
"91jd-server/common"
"91jd-server/common/log"
"91jd-server/common/stderr"
"github.com/gin-gonic/gin"
)
// Product doc
// @Summary vip种类 新
// @Description 可购买的vip种类
// @Tags vip
// @Accept mpfd,json
// @Produce json,html
// @Success 200 {object} proto.ProductRes "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /app/vip/product [get]
func Product(ctx *gin.Context) {
uid, _ := common.GetUID(ctx)
ua, _ := common.GetUA(ctx)
var (
data = proto.ProductRes{
IsNewUser: false,
}
goldResError error
)
var arg struct {
IsNewUser bool `json:"isNewUser" form:"isNewUser"` // 是否新手
}
if err := ctx.ShouldBind(&arg); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, nil)
return
}
wg := sync.WaitGroup{}
wg.Add(3)
common.Go(func() {
defer wg.Done()
countdownSec, _ := productser.CountdownTiroCard(uid)
if countdownSec > 0 {
data.IsNewUser = true
}
if arg.IsNewUser == true {
data.IsNewUser = arg.IsNewUser
}
data.List, goldResError = rechargeser.New_ProductList(uid, ua.SysType, data.IsNewUser, 0)
})
common.Go(func() {
defer wg.Done()
//d, _ := daichongser.NewTakeChat(ctx, uid, 0)
d := daichong.ChatResp{}
data.Daichong = d.Data
})
common.Go(func() {
defer wg.Done()
data.IntegralList = integral_config_ser.GetAllConfig()
})
wg.Wait()
if goldResError != nil {
common.ServeJSON(ctx, stderr.PayBusy, goldResError.Error())
return
}
if err := vipcardexperimentser.ApplyToProductResponse(uid, &data, time.Now()); err != nil {
// 实验是增强能力,查询异常时降级到原套餐列表,不能阻断购买主链路。
log.Warn("vip card experiment fallback to legacy product response", log.Any("uid", uid), log.E(err))
}
common.ServeJSON(ctx, stderr.Success, data)
}
// 获取新手卡倒计时
func CountdownTiroCard(ctx *gin.Context) {
uid, err := common.GetUID(ctx)
if err != nil {
common.ServeJSON(ctx, stderr.ErrNoToken, err)
return
}
countdownSec, err := productser.CountdownTiroCard(uid)
if err != nil {
common.ServeJSON(ctx, stderr.ErrDbQueryError, err)
return
}
common.ServeJSON(ctx, stderr.Success, gin.H{"countdownSec": countdownSec})
}
//// VipRecommend doc
//// @Summary vip推荐展示
//// @Description vip推荐展示
//// @Tags vip
//// @Accept mpfd,json
//// @Produce json,html
//// @Success 200 {object} productmod.Product
//// @Failure 400 {string} json "{"msg": "操作失败"}"
//// @Router /api/app/vip/recommend [get]
//func VipRecommend(ctx *gin.Context) {
// resp, err := productser.GetRecommendVip()
// if err != nil {
// common.ServeJSON(ctx, stderr.ErrDbQueryError, err)
// return
// }
// common.ServeJSON(ctx, stderr.Success, resp)
//}