mh_server/controller/activity.go

280 lines
6.7 KiB
Go
Raw Normal View History

2021-12-25 08:38:30 +00:00
package controller
import (
"github.com/codinl/go-logger"
"github.com/gin-gonic/gin"
"mh-server/lib/auth"
"mh-server/lib/status"
2022-06-23 04:21:01 +00:00
"mh-server/lib/utils"
2021-12-25 08:38:30 +00:00
"mh-server/model"
)
func UserRedeemCodeList(c *gin.Context) {
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
codeList, err := model.UserRedeemCodeList(uc.Uid)
if err != nil {
2022-05-28 07:24:17 +00:00
logger.Errorf("err:%#v", err)
2021-12-25 08:38:30 +00:00
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, codeList)
}
func UserConvertRedeemCode(c *gin.Context) {
req := &struct {
SerialCode string `json:"serial_code"`
}{}
if c.ShouldBindJSON(req) != nil {
logger.Errorf("para err")
RespJson(c, status.BadRequest, nil)
return
}
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
err := model.UserRedeemCodeConvert(uc.Uid, req.SerialCode)
if err != nil {
2022-05-28 07:24:17 +00:00
logger.Errorf("err:%#v", err)
2021-12-25 08:38:30 +00:00
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, nil)
}
2022-06-23 04:21:01 +00:00
func UserMemberRenewalState(c *gin.Context) {
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
2022-06-29 08:03:50 +00:00
user := model.GetUserByUid(uc.Uid)
if !user.IsMember() {
RespOK(c, map[string]interface{}{
"is_pop": true,
"is_member_renewal": false,
})
return
}
2022-06-23 04:21:01 +00:00
var activityMemberRenewal model.ActivityMemberRenewal
2022-06-29 08:03:50 +00:00
err := model.NewActivityMemberRenewalQuerySet(model.DB).UidEq(uc.Uid).ActivityIdEq(1).StateEq(1).
2022-06-23 04:21:01 +00:00
One(&activityMemberRenewal)
if err != nil && err != model.RecordNotFound {
logger.Error("activity member renewal err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
isPop := true
if err == model.RecordNotFound {
if user.MemberExpire.After(utils.Now().AddDate(0, -1, 0)) &&
user.MemberExpire.Before(utils.Now()) {
activityMemberRenewal = model.ActivityMemberRenewal{
ActivityId: 1,
Uid: uc.Uid,
State: 1,
StartTime: utils.Now(),
IsPop: true,
MemberLevel: user.MemberLevel,
}
err = model.DB.Create(&activityMemberRenewal).Error
if err != nil {
logger.Error("create activity member renewal err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
isPop = false
}
}
2022-06-29 08:03:50 +00:00
if activityMemberRenewal.StartTime.AddDate(0, 0, 7).Before(utils.Now()) {
activityMemberRenewal.State = 3
_, err = model.NewActivityMemberRenewalQuerySet(model.DB).IDEq(activityMemberRenewal.ID).GetUpdater().
SetState(3).UpdateNum()
if err != nil {
logger.Error("update num err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
}
2022-06-23 04:21:01 +00:00
isMemberRenewal := false
if activityMemberRenewal.State == 1 {
isMemberRenewal = true
}
ret := make(map[string]interface{}, 0)
ret["is_pop"] = isPop
ret["is_member_renewal"] = isMemberRenewal
RespOK(c, ret)
return
}
2022-06-29 08:03:50 +00:00
func UserMemberRenewalInfo(c *gin.Context) {
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
//uc := auth.UserClaims{Uid: 5640286}
var renewal model.ActivityMemberRenewal
err := model.NewActivityMemberRenewalQuerySet(model.DB).UidEq(uc.Uid).ActivityIdEq(1).
StateEq(1).One(&renewal)
if err != nil && err != model.RecordNotFound {
logger.Error("renewal err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
if err == model.RecordNotFound {
RespJson(c, status.InternalServerError, nil)
return
}
var coupons []model.Coupon
err = model.NewCouponQuerySet(model.DB).ActivityIdEq(renewal.ActivityId).All(&coupons)
if err != nil {
logger.Error("coupons err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
var userCoupons []model.UserCoupon
err = model.NewUserCouponQuerySet(model.DB).UidEq(uc.Uid).ActivityIdEq(renewal.ActivityId).
StateEq(1).All(&userCoupons)
if err != nil {
logger.Error("userCoupons err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
userCouponMap := make(map[uint32]*model.UserCoupon, 0)
for i, _ := range userCoupons {
userCouponMap[userCoupons[i].CouponId] = &userCoupons[i]
}
for i, _ := range coupons {
_, ok := userCouponMap[coupons[i].ID]
if ok {
coupons[i].IsDraw = true
}
}
down := 7*24*3600 - (utils.Now().Unix() - renewal.StartTime.Unix())
ret := map[string]interface{}{
"coupon_list": coupons,
"renewal": renewal,
"time_down": down,
}
RespOK(c, ret)
return
}
func UserMemberRenewalCouponDraw(c *gin.Context) {
req := &struct {
CouponIds []uint32 `json:"coupon_ids" binding:"required"`
}{}
if c.ShouldBindJSON(req) != nil {
logger.Errorf("para err")
RespJson(c, status.BadRequest, nil)
return
}
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
if len(req.CouponIds) == 0 {
logger.Errorf("para err")
RespOK(c, nil)
return
}
var coupons []model.Coupon
err := model.NewCouponQuerySet(model.DB).IDIn(req.CouponIds...).All(&coupons)
if err != nil {
logger.Error("coupons err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
for i, _ := range coupons {
userCoupon := &model.UserCoupon{
Uid: uc.Uid,
CouponId: coupons[i].ID,
CouponType: coupons[i].CouponType,
ActivityType: coupons[i].ActivityType,
ActivityId: coupons[i].ActivityId,
Value: coupons[i].Value,
State: 1,
ActiveStart: coupons[i].ActiveStart,
ActiveEnd: coupons[i].ActiveEnd,
MemberLevel: coupons[i].MemberLevel,
}
err = model.DB.Create(userCoupon).Error
if err != nil {
logger.Error("user coupon err:", err)
continue
}
}
RespOK(c, nil)
return
}
func MemberRenewalUserCouponList(c *gin.Context) {
req := struct {
PageIdx int `json:"page_idx"`
PageSize int `json:"page_size"`
State uint32 `json:"state"` // 1-未使用 2-已使用 3-已过期
}{}
if err := c.ShouldBindJSON(&req); err != nil {
logger.Error(err)
RespJson(c, status.BadRequest, nil)
return
}
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
page := req.PageIdx - 1
if page < 0 {
page = 0
}
if req.PageSize == 0 {
req.PageSize = 10
}
qs := model.NewUserCouponQuerySet(model.DB).UidEq(uc.Uid)
count, err := qs.Count()
if err != nil {
logger.Error("count err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
totalPage := count/req.PageSize + 1
var coupons []model.UserCoupon
err = qs.OrderDescByID().Offset(page * req.PageSize).Limit(req.PageSize).All(&coupons)
if err != nil && err != model.RecordNotFound {
logger.Error("coupons err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
ret := map[string]interface{}{
"list": coupons,
"total_page": totalPage,
"page_idx": req.PageIdx,
}
RespOK(c, ret)
return
}