From b7b15d6afb80e968e9046295936aa2b62869edb3 Mon Sep 17 00:00:00 2001 From: howell <2827207845@qq.com> Date: Tue, 15 Mar 2022 09:52:39 +0800 Subject: [PATCH] feat: vip goods --- internal/v2/controller/app/vip/vip.go | 71 +++++++++++++++++++++++++++ internal/v2/router/app.go | 6 ++- 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/internal/v2/controller/app/vip/vip.go b/internal/v2/controller/app/vip/vip.go index 1112e4f..ab047ef 100644 --- a/internal/v2/controller/app/vip/vip.go +++ b/internal/v2/controller/app/vip/vip.go @@ -1,12 +1,20 @@ package vip import ( + "errors" + "fmt" "recook/internal/back" + "recook/internal/dbc" + "recook/internal/model/user" + "recook/internal/v2/lib/common" "recook/internal/v2/model/recook/goods" + "time" "git.oa00.com/go/mysql" "github.com/gin-gonic/gin" + "github.com/golangkit/formatime" "github.com/shopspring/decimal" + "gorm.io/gorm" ) type Proxy struct{} @@ -38,3 +46,66 @@ func (o Proxy) VipGoods(c *gin.Context) { } back.Suc(c, "", data) } + +func (o Proxy) VipActivity(c *gin.Context) { + id, _ := common.GetAppUserId(c) + if id == 0 { + back.Fail(c, "用户不存在") + } + key := fmt.Sprintf("user:vip:%d", id) + dbc.Rds.SetNX(key, 1, 15) + defer dbc.Rds.Del(key) + + key2 := "user:actived:set" + res := dbc.Rds.SIsMember(key2, id) + if res.Val() { + // 存在 + back.Fail(c, "用户已激活") + } + + var u1 user.Information + + patch := make(map[string]interface{}) + patch["level"] = 2 + patch["parent_id"] = 0 + patch["is_offline"] = true + now1 := time.Now() + now := time.Date(now1.Year(), now1.Month(), now1.Day(), 0, 0, 0, 00, time.Local) + end := now + if u1.VipUpgradeEnd.Valid && time.Now().Before(u1.VipUpgradeEnd.Time) { + // 续约 + now = u1.VipUpgradeStart.Time + end = u1.VipUpgradeEnd.Time + } else { + // 没有升级过 || 升级过已经过了上一次的时间重新计算 + patch["old_level"] = u1.Level + patch["old_parent_id"] = u1.ParentID + patch["old_root_id"] = u1.RootID + } + end = end.AddDate(0, 0, 7) + patch["vip_upgrade_start"] = formatime.NewSecondFrom(now) + patch["vip_upgrade_end"] = formatime.NewSecondFrom(end) + if err := mysql.Db.Transaction(func(tx *gorm.DB) error { + if err := mysql.Db.Table((&user.Information{}).TableName()).Where("id = ?", u1.ID).Updates(patch).Error; err != nil { + return err + } + res := dbc.Rds.SAdd(key2, id) + if r1, _ := res.Result(); r1 == 0 { + return errors.New("已使用") + } + return nil + }); err != nil { + back.Fail(c, err.Error()) + } + +} + +func (o Proxy) VipIsUsed(c *gin.Context) { + id, _ := common.GetAppUserId(c) + if id == 0 { + back.Fail(c, "用户不存在") + } + key2 := "user:actived:set" + res := dbc.Rds.SIsMember(key2, id) + back.Suc(c, "", gin.H{"is_used": res.Val()}) +} diff --git a/internal/v2/router/app.go b/internal/v2/router/app.go index 4407b4d..187cc48 100644 --- a/internal/v2/router/app.go +++ b/internal/v2/router/app.go @@ -262,11 +262,13 @@ func routerApp(appRouter *gin.RouterGroup) { profitRouter.POST("shop", proxy.ProfitShopList) } } - vipController := appRouter.Group("vip_goods") + vipController := appRouter.Group("vip", authorize) { proxy := vip.Proxy{} { - vipController.POST("", proxy.VipGoods) + vipController.POST("goods", proxy.VipGoods) + vipController.POST("activity", proxy.VipActivity) + vipController.POST("is_used", proxy.VipIsUsed) } }