mh_server/controller/user.go

1226 lines
33 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package controller
import (
"errors"
"fmt"
"github.com/codinl/go-logger"
"github.com/gin-gonic/gin"
"mh-server/lib/auth"
"mh-server/lib/status"
"mh-server/lib/utils"
"mh-server/lib/wxpay"
"mh-server/model"
"time"
)
const (
MemberFee = 299 * 100 // 会员费
DepositFee = 300 * 100 // 押金费
)
func HistoryBrowsingList(c *gin.Context) {
req := struct {
Page int `json:"page"`
PageSize int `json:"page_size"`
}{
Page: 1,
PageSize: 10,
}
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
}
gameCardList, totalPage, err := model.GetHistoryBrowsingList(uc.Uid, req.Page, req.PageSize)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
ret := map[string]interface{}{
"game_card_list": gameCardList,
"cur_page": req.Page,
"total_page": totalPage,
}
RespOK(c, ret)
return
}
func HistoryBrowsingDel(c *gin.Context) {
req := struct {
GameCardIds []uint64 `json:"game_card_id" binding:"required"`
}{}
if c.ShouldBindJSON(&req) != nil {
RespJson(c, status.BadRequest, nil)
return
}
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
if len(req.GameCardIds) > 0 {
err := model.NewHistoryBrowsingQuerySet(model.DB.Unscoped()).UidEq(uint64(uc.Uid)).GameCardIdIn(req.GameCardIds...).Delete()
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
}
RespOK(c, nil)
return
}
func CollectionList(c *gin.Context) {
req := struct {
Page int `json:"page"`
PageSize int `json:"page_size"`
}{
Page: 1,
PageSize: 10,
}
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
}
gameCardList, totalPage, err := model.GetGameCardCollectionList(uc.Uid, req.Page, req.PageSize)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
ret := map[string]interface{}{
"game_card_list": gameCardList,
"cur_page": req.Page,
"total_page": totalPage,
}
RespOK(c, ret)
return
}
func CollectionAdd(c *gin.Context) {
req := struct {
GameCardId uint64 `json:"game_card_id" binding:"required"`
}{}
if c.ShouldBindJSON(&req) != nil {
RespJson(c, status.BadRequest, nil)
return
}
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
collection := model.Collection{
Uid: uint64(uc.Uid),
GameCardId: req.GameCardId,
}
err := collection.Create(model.DB)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, nil)
return
}
func CollectionCancel(c *gin.Context) {
req := struct {
GameCardIds []uint64 `json:"game_card_id" binding:"required"`
}{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("para err")
RespJson(c, status.BadRequest, nil)
return
}
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
if len(req.GameCardIds) > 0 {
err := model.NewCollectionQuerySet(model.DB.Unscoped()).UidEq(uint64(uc.Uid)).GameCardIdIn(req.GameCardIds...).Delete()
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
}
RespOK(c, nil)
return
}
func UserInfoUpdate(c *gin.Context) {
req := struct {
WxName string `json:"wx_name"` // 昵称
WxAvatar string `json:"wx_avatar"` // 头像
Tel string `json:"tel"` // 电话
}{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("parameter err")
RespJson(c, status.BadRequest, nil)
return
}
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
user := &model.User{
Uid: uc.Uid,
WxName: req.WxName,
WxAvatar: req.WxAvatar,
Tel: req.Tel,
}
err := model.UserUpdate(user)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, nil)
return
}
func OpenMember(c *gin.Context) {
req := struct {
MemberLevel uint32 `json:"member_level"` // 昵称
MemberGenre uint32 `json:"member_genre"` // 会员标记: 黄金会员:90天-201 180天-202
UserCouponId uint32 `json:"user_coupon_id"` // 优惠券id
}{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("parameter err")
RespJson(c, status.BadRequest, nil)
return
}
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
fmt.Println("req:", req)
user := model.GetUserByUid(uc.Uid)
//configInfo, err := model.PayConfigInfo()
//if err != nil {
// logger.Error("err:", err)
// RespJson(c, status.InternalServerError, nil)
// return
//}
memberConfig, err := model.GetMemberConfig(req.MemberLevel, req.MemberGenre)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
//totalFee := uint32(MemberFee + DepositFee)
////totalFee = uint32(3) // TODO 测试 上线修改
//if user.Deposit == 300 {
// totalFee = MemberFee
// // //totalFee = uint32(1) // TODO 测试 上线修改
//}
fmt.Println("configInfo.MemberFee : configInfo.DepositFee", memberConfig.MemberFee, memberConfig.MemberDeposit)
totalFee := memberConfig.MemberFee + memberConfig.MemberDeposit - user.Deposit
if user.Deposit == memberConfig.MemberDeposit {
totalFee = memberConfig.MemberFee
}
if totalFee == 0 {
logger.Error(errors.New("totalFee is 0"))
RespJson(c, status.InternalServerError, nil)
return
}
if req.UserCouponId != 0 && req.MemberGenre == 0 { //短期会员不可用优惠券
var coupon model.UserCoupon
err = model.NewUserCouponQuerySet(model.DB).IDEq(req.UserCouponId).One(&coupon)
if err != nil {
logger.Error("coupon err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
if user.IsMember() && coupon.Uid == uc.Uid && coupon.MemberLevel == req.MemberLevel &&
coupon.ActivityId == 1 && coupon.State == 1 {
totalFee -= coupon.Value
if coupon.RedeemCode == "" {
go func() {
action := 0
if coupon.MemberLevel == 2 {
action = model.UserRenewalLogActionUseGold
} else if coupon.MemberLevel == 4 {
action = model.UserRenewalLogActionUsePlatinum
} else if coupon.MemberLevel == 5 {
action = model.UserRenewalLogActionUseBlackGold
}
renewalLog, _ := model.GetActionUserRenewalLog(uc.Uid, uint32(action))
userLog := &model.UserRenewalLog{
Uid: uc.Uid,
Action: uint32(action),
MemberExpire: user.MemberExpire,
Type: 1,
RenewalNum: renewalLog.RenewalNum + 1,
Serial: uint32(user.MemberExpire.Unix()),
}
_ = userLog.Add()
}()
}
} else if coupon.State == 1 && coupon.ActivityType == 2 {
totalFee -= coupon.Value
} else {
req.UserCouponId = 0
}
}
//webPay, err := wxpay.WebPay(uid, totalFee, user.WxOpenID, "N", wxpay.WxPayMember)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
//orderSn := utils.GetSerialNo32HEXString()
orderSn := model.GetOrderSn()
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, MemberLevel: req.MemberLevel,
UserCouponId: req.UserCouponId, Attach: wxpay.WxPayMember, MemberGenre: req.MemberGenre}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
configInfo, err := model.PayConfigInfo()
if err != nil {
logger.Error(err)
RespJson(c, status.InternalServerError, nil)
return
}
genre, err := model.GetPaymentGenre()
if err != nil {
genre = 2
logger.Error("payment method", err)
}
//
if genre == model.PaymentGenreWx {
webPay, err := wxpay.WebPay(orderSn, totalFee, user.WxOpenID, "N", wxpay.WxPayMember, configInfo.NotifyUrl)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, webPay)
} else {
webPay, err := wxpay.HmJsPayUnifiedOrder(orderSn, totalFee, user.WxOpenID, configInfo.NotifyUrl)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, webPay)
}
return
}
func UpgradeMember(c *gin.Context) {
req := struct {
MemberLevel uint32 `json:"member_level"` // 昵称
MemberGenre uint32 `json:"member_genre"`
UserCouponId uint32 `json:"user_coupon_id"`
}{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("parameter err")
RespJson(c, status.BadRequest, nil)
return
}
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
user := model.GetUserByUid(uc.Uid)
//if user.MemberLevel != 2 && user.MemberLevel != 4 {
// logger.Error("MemberLevel err:")
// RespJson(c, status.InternalServerError, nil)
// return
//}
if user.Gender != 0 {
logger.Error("user member genre err:")
RespJson(c, status.ShortMemberNotUpgradeMember, nil)
return
}
if req.MemberGenre == 0 { //区分是升级哪种会员 白金400 黑金500
req.MemberGenre = model.GetMemberGenreFromLevel(req.MemberLevel)
}
originalMemberConfig, err := model.GetMemberConfig(user.MemberLevel, user.MemberGenre)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
memberConfig, err := model.GetMemberConfig(req.MemberLevel, req.MemberGenre)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
raiseTime, err := time.Parse("2006-01-02 15:04:05", "2022-01-01 00:00:00")
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
memberFee := originalMemberConfig.MemberFee
if user.OpenMemberTime.Before(raiseTime) {
memberFee = 29900
}
// 补押金
depositMendFee := int64(memberConfig.MemberDeposit) - int64(user.Deposit)
count, err := model.NewUserRedeemCodeQuerySet(model.DB).UidEq(uc.Uid).CodeTypeEq(model.CodeTypeMemberCard30).
StatusEq(model.RedeemCodeStatusUsed).Count()
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
fmt.Println("count:", count)
// 抵扣天数
deductionDays := int64(0)
deductionTime := user.MemberExpire.Unix() - int64(count*30*24*3600) - time.Now().Unix() + 1*3600
if deductionTime < 0 {
deductionTime = 0
}
if deductionTime > 0 {
deductionDays = deductionTime / int64(24*3600)
}
memberYare := 0
memberMendFee := int64(0)
// 抵扣金
deductionFee := (((int64(memberFee) * deductionDays) / 365) / 100) * 100
if deductionDays < 365 {
memberYare = 1
// 补会员费
memberMendFee = int64(memberConfig.MemberFee*uint32(memberYare)) - deductionFee
} else {
// 补会员费
memberMendFee = int64((int64(memberConfig.MemberFee)*deductionDays)/365) - deductionFee
}
totalFee := int64(depositMendFee) + memberMendFee
//if memberMendFee < 0 {
// depositMendFee = depositMendFee + memberMendFee
//}
fmt.Println("depositMendFee : memberMendFee", depositMendFee, memberMendFee)
if totalFee == 0 {
logger.Error(errors.New("totalFee is 0"))
RespJson(c, status.InternalServerError, nil)
return
}
//totalFee := memberConfig.MemberFee + memberConfig.MemberDeposit
//if user.Deposit == memberConfig.MemberDeposit {
// totalFee = memberConfig.MemberFee
//}
if totalFee == 0 {
logger.Error(errors.New("totalFee is 0"))
RespJson(c, status.InternalServerError, nil)
return
}
//会员升级时MemberGenre = 0 || 400 || 500才能使用优惠券
if req.UserCouponId != 0 && (req.MemberGenre == 0 || req.MemberGenre == 400 || req.MemberGenre == 500) {
var coupon model.UserCoupon
err = model.NewUserCouponQuerySet(model.DB).IDEq(req.UserCouponId).One(&coupon)
if err != nil {
logger.Error("coupon err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
if user.IsMember() && coupon.Uid == uc.Uid && coupon.MemberLevel == req.MemberLevel &&
coupon.ActivityId == 1 && coupon.State == 1 && coupon.ActiveEnd.After(time.Now()) {
totalFee -= int64(coupon.Value)
go func() {
action := 0
if coupon.MemberLevel == 2 {
action = model.UserRenewalLogActionUseGold
} else if coupon.MemberLevel == 4 {
action = model.UserRenewalLogActionUsePlatinum
} else if coupon.MemberLevel == 5 {
action = model.UserRenewalLogActionUseBlackGold
}
renewalLog, _ := model.GetActionUserRenewalLog(uc.Uid, uint32(action))
userLog := &model.UserRenewalLog{
Uid: uc.Uid,
Action: uint32(action),
MemberExpire: user.MemberExpire,
Type: 2,
RenewalNum: renewalLog.RenewalNum + 1,
Serial: uint32(user.MemberExpire.Unix()),
}
_ = userLog.Add()
}()
} else if coupon.State == 1 && coupon.ActivityType == 2 {
totalFee -= int64(coupon.Value)
} else {
req.UserCouponId = 0
}
}
totalFee += 50
totalFee = (totalFee / 100) * 100
//webPay, err := wxpay.WebPay(uid, totalFee, user.WxOpenID, "N", wxpay.WxPayMember)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
//orderSn := utils.GetSerialNo32HEXString()
memberExpire := time.Time{}
if deductionDays < 365 {
memberExpire = time.Now().AddDate(1*int(memberYare), 0, count*30)
} else {
memberExpire = time.Now().AddDate(0, 0, count*30+int(deductionDays))
}
orderSn := model.GetOrderSn()
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn,
MemberLevel: req.MemberLevel, OrderType: 9, MemberExpire: memberExpire,
UserCouponId: req.UserCouponId, Attach: wxpay.WxPayUpgradeMember, MemberGenre: req.MemberGenre}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
configInfo, err := model.PayConfigInfo()
if err != nil {
logger.Error(err)
RespJson(c, status.InternalServerError, nil)
return
}
//webPay, err := wxpay.WebPay(orderSn, uint32(totalFee), user.WxOpenID, "N", wxpay.WxPayUpgradeMember,
// configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
webPay, err := wxpay.HmJsPayUnifiedOrder(orderSn, uint32(totalFee), user.WxOpenID, configInfo.NotifyUrl)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, webPay)
}
func UpgradeMemberInfo(c *gin.Context) {
req := struct {
MemberLevel uint32 `json:"member_level"` // 昵称
MemberGenre uint32 `json:"member_genre"`
UserCouponId uint32 `json:"user_coupon_id"`
}{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("parameter err")
RespJson(c, status.BadRequest, nil)
return
}
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
user := model.GetUserByUid(uc.Uid)
//if user.MemberLevel != 2 && user.MemberLevel != 4 {
// logger.Error("MemberLevel err:")
// RespJson(c, status.InternalServerError, nil)
// return
//}
//configInfo, err := model.PayConfigInfo()
//if err != nil {
// logger.Error("err:", err)
// RespJson(c, status.InternalServerError, nil)
// return
//}
originalMemberConfig, err := model.GetMemberConfig(user.MemberLevel, user.MemberGenre)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
memberConfig, err := model.GetMemberConfig(req.MemberLevel, req.MemberGenre)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
raiseTime, err := time.Parse("2006-01-02 15:04:05", "2022-01-01 00:00:00")
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
memberFee := originalMemberConfig.MemberFee
if user.OpenMemberTime.Before(raiseTime) {
memberFee = 29900
}
// 补押金
depositMendFee := int64(memberConfig.MemberDeposit) - int64(user.Deposit)
count, err := model.NewUserRedeemCodeQuerySet(model.DB).UidEq(uc.Uid).CodeTypeEq(model.CodeTypeMemberCard30).
StatusEq(model.RedeemCodeStatusUsed).Count()
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
fmt.Println("count:", count)
// 抵扣天数
deductionDays := int64(0)
deductionTime := user.MemberExpire.Unix() - int64(count*30*24*3600) - time.Now().Unix() + 1*3600
if deductionTime < 0 {
deductionTime = 0
}
if deductionTime > 0 {
deductionDays = deductionTime / int64(24*3600)
}
//memberYare := deductionDays/365 + 1
//// 抵扣金
//deductionFee := (((int64(memberFee) * deductionDays) / 365) / 100) * 100
//
//// 补会员费
//memberMendFee := int64(memberConfig.MemberFee*uint32(memberYare)) - deductionFee
memberYare := 0
memberMendFee := int64(0)
// 抵扣金
deductionFee := (((int64(memberFee) * deductionDays) / 365) / 100) * 100
if deductionDays < 365 {
memberYare = 1
// 补会员费
memberMendFee = int64(memberConfig.MemberFee*uint32(memberYare)) - deductionFee
} else {
// 补会员费
memberMendFee = int64((int64(memberConfig.MemberFee)*deductionDays)/365) - deductionFee
}
totalFee := int64(depositMendFee) + memberMendFee
//if memberMendFee < 0 {
// depositMendFee = depositMendFee + memberMendFee
//}
fmt.Println("depositMendFee : memberMendFee", depositMendFee, memberMendFee)
if totalFee == 0 {
logger.Error(errors.New("totalFee is 0"))
RespJson(c, status.InternalServerError, nil)
return
}
var coupon model.UserCoupon
if req.UserCouponId != 0 && req.MemberGenre == 0 {
err = model.NewUserCouponQuerySet(model.DB).IDEq(req.UserCouponId).One(&coupon)
if err != nil {
logger.Error("coupon err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
if user.IsMember() && coupon.Uid == uc.Uid && coupon.MemberLevel == req.MemberLevel &&
coupon.ActivityId == 1 && coupon.State == 1 && coupon.ActiveEnd.After(time.Now()) {
totalFee -= int64(coupon.Value)
// TODO 不用添加数据
} else if coupon.State == 1 && coupon.ActivityType == 2 {
totalFee -= int64(coupon.Value)
} else {
req.UserCouponId = 0
}
fmt.Println("totalFee:", totalFee)
}
totalFee += 50
totalFee = (totalFee / 100) * 100
RespOK(c, map[string]interface{}{
"deduction_fee": deductionFee, // 会员抵扣费
"deduction_days": deductionDays, // 会员抵扣天数
"member_mend_fee": memberMendFee, // 会员补费
"deposit_mend_fee": depositMendFee, // 补押金
"total_fee": totalFee, // 总费用
"coupon": coupon.Value,
})
}
func PayDeposit(c *gin.Context) {
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
user := model.GetUserByUid(uc.Uid)
orderSn := model.GetOrderSn()
err := model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, Attach: wxpay.WxPayDeposit}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
level := user.MemberLevel
if level == model.MemberLevelPeriod {
level = model.MemberLevelGold
}
//configInfo, err := model.PayConfigInfo()
//if err != nil {
// logger.Error("err:", err)
// return
//}
memberConfig, err := model.GetMemberConfig(level, user.MemberGenre)
if err != nil {
logger.Error("GetMemberConfig err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
totalFee := memberConfig.MemberDeposit
if totalFee == 0 || user.Deposit == totalFee {
logger.Error(errors.New("totalFee is 0"))
RespJson(c, status.InternalServerError, nil)
return
}
//totalFee = 1 // 测试
configInfo, err := model.PayConfigInfo()
if err != nil {
logger.Error(err)
RespJson(c, status.InternalServerError, nil)
return
}
//webPay, err := wxpay.WebPay(orderSn, totalFee, user.WxOpenID, "N", wxpay.WxPayDeposit, configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
webPay, err := wxpay.HmJsPayUnifiedOrder(orderSn, totalFee, user.WxOpenID, configInfo.NotifyUrl)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, webPay)
}
func CommonProblemList(c *gin.Context) {
common := &model.CommonProblem{}
list, err := common.List()
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, list)
return
}
func RefundDeposit(c *gin.Context) {
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
user := model.GetUserByUid(uc.Uid)
if user.Deposit == 0 {
logger.Error("deposit is 0")
RespJson(c, status.InternalServerError, nil)
return
}
if user.DepositType == 3 {
logger.Error("deposit restraint")
RespJson(c, status.DepositRestraint, nil)
return
}
unreturnedOrders, err := model.IsUserHaveUnreturnedOrder(user.Uid)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
if unreturnedOrders {
logger.Error("unreturnedOrders")
RespJson(c, status.HaveUnreturnedOrders, nil)
return
}
resp, err := model.MemberExpireDelaying(uc.Uid)
if err != nil {
logger.Errorf("err:%#v", err)
RespJson(c, status.InternalServerError, nil)
return
}
isSurrender, _ := resp["is_surrender"]
if isSurrender == 0 {
count, err := model.NewDepositRefundRecordQuerySet(model.DB).UidEq(uc.Uid).StatusNotIn(model.DepositRefundStatusRefunded, model.DepositRefundStatusRefused).Count()
if err != nil || count > 0 {
logger.Error("count is not 0")
RespJson(c, status.RefundDepositSubmitted, nil)
return
}
record := &model.DepositRefundRecord{
Uid: uc.Uid,
Status: model.DepositRefundStatusUnconfirmed,
Amount: user.Deposit,
Operator: 0,
ConfirmTime: time.Time{},
}
err = model.DB.Create(record).Error
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
}
RespOK(c, resp)
}
func UserDepositRefundRecordList(c *gin.Context) {
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
resp, err := model.GetDepositRefundRecordList(uc.Uid)
if err != nil {
logger.Errorf("err:%#v", err)
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, resp)
}
func UserMemberExpireDelayingInfo(c *gin.Context) {
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
unreturnedOrders, err := model.IsUserHaveUnreturnedOrder(uc.Uid)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
if unreturnedOrders {
logger.Error("unreturnedOrders")
RespJson(c, status.HaveUnreturnedOrders, nil)
return
}
resp, err := model.MemberExpireDelaying(uc.Uid)
if err != nil {
logger.Errorf("err:%#v", err)
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, resp)
}
func UserMemberExpireDelayingPay(c *gin.Context) {
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
var user model.User
err := model.NewUserQuerySet(model.DB).UidEq(uc.Uid).One(&user)
if err != nil {
logger.Error("user err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
var userMemberExpireDelay model.UserMemberExpireDelay
err = model.NewUserMemberExpireDelayQuerySet(model.DB).UidEq(uc.Uid).MemberExpireEq(user.MemberExpire).One(&userMemberExpireDelay)
if err != nil {
logger.Error("user member expire delay err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
configInfo, err := model.PayConfigInfo()
if err != nil {
logger.Error(err)
RespJson(c, status.InternalServerError, nil)
return
}
orderSn := model.GetOrderSn()
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, OrderId: 0, OrderType: 3, Attach: wxpay.WxPayMemberExpireDelay}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
//userMemberExpireDelay.DelayAmount = userMemberExpireDelay.DelayAmount / 100 // 测试TODO
//webPay, err := wxpay.WebPay(orderSn, uint32(userMemberExpireDelay.DelayAmount), user.WxOpenID, "N", wxpay.WxPayMemberExpireDelay, configInfo.NotifyUrl)
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
webPay, err := wxpay.HmJsPayUnifiedOrder(orderSn, uint32(userMemberExpireDelay.DelayAmount), user.WxOpenID, configInfo.NotifyUrl)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
ret := make(map[string]interface{}, 0)
ret["is_surrender"] = 1
ret["expire_days"] = userMemberExpireDelay.ExpireDays
ret["daily_fee"] = userMemberExpireDelay.DailyFee
ret["delay_amount"] = userMemberExpireDelay.DelayAmount
ret["web_pay"] = webPay
RespOK(c, ret)
return
}
func MemberConfigList(c *gin.Context) {
//uc := auth.GetCurrentUser(c)
//if uc == nil {
// RespJson(c, status.Unauthorized, nil)
// return
//}
resp, err := model.MemberConfigInfo()
if err != nil {
logger.Errorf("err:%#v", err)
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, resp)
}
func UserAttendance(c *gin.Context) {
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
//model.NewUserAttendanceRecordQuerySet()
todayZero := utils.TodayZeroDateFormat()
recordExist, err := model.QueryRecordExist(
fmt.Sprintf("SELECT * FROM user_attendance_record WHERE attendance_date = '%s' AND uid=%d", todayZero, uc.Uid))
if err != nil {
logger.Error("record exist err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
if recordExist {
logger.Error("user consecutive")
RespJson(c, status.TodayAttendance, nil)
return
}
configInfo, err := model.AttendanceVmConfigInfo()
if err != nil {
logger.Error("attendance vm config info err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
attendanceTime := time.Now()
record := &model.UserAttendanceRecord{
Uid: uc.Uid,
AttendanceTime: attendanceTime,
Vm: configInfo.VmDay1,
AttendanceDate: todayZero,
}
var userAttendance model.UserAttendance
err = model.NewUserAttendanceQuerySet(model.DB).UidEq(uc.Uid).One(&userAttendance)
if err != nil && err != model.RecordNotFound {
logger.Error("user attendance err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
if err == model.RecordNotFound {
userAttendance = model.UserAttendance{
Uid: uc.Uid,
LatestTime: attendanceTime,
ConsecutiveDays: 1,
IndexDay: 1,
}
err = model.DB.Create(&userAttendance).Error
if err != nil {
logger.Error("create user attendance err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
err = record.Add(model.VmEventAttendance, "连续签到获取积分")
if err != nil {
logger.Error("add user attendance record err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, nil)
return
}
var attendanceRecord model.UserAttendanceRecord
err = model.NewUserAttendanceRecordQuerySet(model.DB).UidEq(uc.Uid).OrderDescByID().Limit(1).One(&attendanceRecord)
if err != nil && err != model.RecordNotFound {
logger.Error(" user attendance record err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
if attendanceRecord.AttendanceDate == "" ||
attendanceRecord.AttendanceDate != utils.TodayZeroAddDaysDateFormat(-1) {
err = record.Add(model.VmEventAttendance, "连续签到获取积分")
if err != nil {
logger.Error("add user attendance record err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
_, err = model.NewUserAttendanceQuerySet(model.DB).UidEq(uc.Uid).GetUpdater().SetConsecutiveDays(1).
SetIndexDay(1).SetLatestTime(time.Now()).UpdateNum()
if err != nil {
logger.Error("update user attendance err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, nil)
return
}
userAttendance.ConsecutiveDays += 1
userAttendance.IndexDay = userAttendance.ConsecutiveDays % 7
if userAttendance.IndexDay == 0 {
userAttendance.IndexDay = 7
}
record.Vm = configInfo.Vm(userAttendance.ConsecutiveDays)
err = record.Add(model.VmEventAttendance, "连续签到获取积分")
if err != nil {
logger.Error("add user attendance record err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
_, err = model.NewUserAttendanceQuerySet(model.DB).UidEq(uc.Uid).GetUpdater().
SetConsecutiveDays(userAttendance.ConsecutiveDays).
SetIndexDay(userAttendance.IndexDay).SetLatestTime(time.Now()).UpdateNum()
if err != nil {
logger.Error("update user attendance err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, nil)
return
}
func UserAttendanceDetail(c *gin.Context) {
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
list := make([]model.AttendanceInfo, 0, 7)
configInfo, err := model.AttendanceVmConfigInfo()
if err != nil {
logger.Error("attendance vm config info err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
todayZero := utils.TodayZeroDateFormat()
//var attendanceRecord model.UserAttendanceRecord
//err = model.NewUserAttendanceRecordQuerySet(model.DB).UidEq(uc.Uid).AttendanceDateEq(utils.TodayZeroAddDaysDateFormat(-1)).One(&attendanceRecord)
//if err != nil && err != model.RecordNotFound {
// logger.Error("user attendance record err:")
// RespJson(c, status.InternalServerError, nil)
// return
//}
recordExist, err := model.QueryRecordExist(
fmt.Sprintf("SELECT * FROM user_attendance_record WHERE attendance_date in ('%s','%s') AND uid=%d",
utils.TodayZeroAddDaysDateFormat(-1), todayZero, uc.Uid))
if err != nil {
logger.Error("record exist err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
if !recordExist {
for i := 0; i < 7; i++ {
info := model.AttendanceInfo{
IndexDay: uint32(i) + 1,
Date: utils.TodayZeroAddDaysDateFormat(i),
State: 1,
Vm: configInfo.Vm(uint32(i) + 1),
}
list = append(list, info)
}
ret := map[string]interface{}{
"list": list,
"is_attendance": 1,
}
RespOK(c, ret)
return
}
var attendanceRecord model.UserAttendanceRecord
//err = model.NewUserAttendanceRecordQuerySet(model.DB).UidEq(uc.Uid).AttendanceDateEq(todayZero).One(&attendanceRecord)
err = model.NewUserAttendanceRecordQuerySet(model.DB).UidEq(uc.Uid).OrderDescByID().
Limit(1).One(&attendanceRecord)
if err != nil && err != model.RecordNotFound {
logger.Error("user attendance record err:")
RespJson(c, status.InternalServerError, nil)
return
}
var userAttendance model.UserAttendance
err = model.NewUserAttendanceQuerySet(model.DB).UidEq(uc.Uid).One(&userAttendance)
if err != nil && err != model.RecordNotFound {
logger.Error("user attendance record err:")
RespJson(c, status.InternalServerError, nil)
return
}
attendanceDays := int(userAttendance.ConsecutiveDays % 7)
if attendanceDays == 0 && attendanceRecord.AttendanceDate == todayZero {
attendanceDays = 7
}
//attendanceDays += 1
days := attendanceDays
for i := 0; i < 7; i++ {
state := uint32(1)
if attendanceDays > 0 {
state = 2
}
date := utils.TodayZeroAddDaysDateFormat(i - days)
if attendanceRecord.AttendanceDate == todayZero {
date = utils.TodayZeroAddDaysDateFormat(i + 1 - days)
}
info := model.AttendanceInfo{
IndexDay: uint32(i) + 1,
//Date: utils.TodayZeroAddDaysDateFormat((-1) * (7 - i)),
//Date: utils.TodayZeroAddDaysDateFormat(i + 1 - days),
//Date: utils.TodayZeroAddDaysDateFormat(i - days),
Date: date,
State: state,
Vm: configInfo.Vm(uint32(i) + 1),
}
list = append(list, info)
attendanceDays--
}
isAttendance := 1
if attendanceRecord.AttendanceDate == todayZero {
isAttendance = 2
}
ret := map[string]interface{}{
"list": list,
"is_attendance": isAttendance,
}
RespOK(c, ret)
return
}
func InviteMemberReportList(c *gin.Context) {
req := model.InviteMemberReportListReq{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("parameter err")
RespJson(c, status.BadRequest, nil)
return
}
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
req.Uid = uc.Uid
assistant := model.GetUserByUid(uc.Uid)
if assistant.UserType != 2 {
logger.Error("not assistant")
RespJson(c, status.InternalServerError, nil)
return
}
list, totalPage, err := req.List()
if err != nil {
logger.Errorf("err:%#v", err)
RespJson(c, status.InternalServerError, nil)
return
}
ret := map[string]interface{}{
"list": list,
"cur_page": req.PageNum,
"total_page": totalPage,
}
RespOK(c, ret)
return
}
// 升级 1-黄金会员 2-白金会员 3-黑金会员
// 开通会员
// 升级会员
// 订单
// 购物车
// 押金
// 会员列表 开通会员 下订单 借卡 还卡
// 会员升级
// 299会员 升级
// 订单 会员导数据
// 退押金记录