mh_server/controller/user.go

1197 lines
32 KiB
Go
Raw Normal View History

2021-06-30 02:12:05 +00:00
package controller
import (
"errors"
2021-12-25 08:38:30 +00:00
"fmt"
2021-06-30 02:12:05 +00:00
"github.com/codinl/go-logger"
"github.com/gin-gonic/gin"
"mh-server/lib/auth"
"mh-server/lib/status"
2022-04-26 06:28:41 +00:00
"mh-server/lib/utils"
2021-06-30 02:12:05 +00:00
"mh-server/lib/wxpay"
"mh-server/model"
2021-12-25 08:38:30 +00:00
"time"
)
const (
MemberFee = 299 * 100 // 会员费
DepositFee = 300 * 100 // 押金费
2021-06-30 02:12:05 +00:00
)
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 {
2021-12-25 08:38:30 +00:00
logger.Error("err:", err)
2021-06-30 02:12:05 +00:00
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 {
2021-12-25 08:38:30 +00:00
logger.Error("err:", err)
2021-06-30 02:12:05 +00:00
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 {
2021-12-25 08:38:30 +00:00
logger.Error("err:", err)
2021-06-30 02:12:05 +00:00
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) {
2022-01-16 08:56:20 +00:00
req := struct {
2022-06-29 08:03:50 +00:00
MemberLevel uint32 `json:"member_level"` // 昵称
UserCouponId uint32 `json:"user_coupon_id"` // 优惠券id
2022-01-16 08:56:20 +00:00
}{}
if c.ShouldBindJSON(&req) != nil {
logger.Error("parameter err")
RespJson(c, status.BadRequest, nil)
return
}
2021-06-30 02:12:05 +00:00
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
user := model.GetUserByUid(uc.Uid)
2021-11-01 03:32:23 +00:00
2022-01-16 08:56:20 +00:00
//configInfo, err := model.PayConfigInfo()
//if err != nil {
// logger.Error("err:", err)
// RespJson(c, status.InternalServerError, nil)
// return
//}
memberConfig, err := model.GetMemberConfig(req.MemberLevel)
2021-12-25 08:38:30 +00:00
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
2022-01-16 08:56:20 +00:00
2021-12-25 08:38:30 +00:00
//totalFee := uint32(MemberFee + DepositFee)
2022-04-21 09:03:33 +00:00
////totalFee = uint32(3) // TODO 测试 上线修改
2021-12-25 08:38:30 +00:00
//if user.Deposit == 300 {
// totalFee = MemberFee
2022-04-21 09:03:33 +00:00
// // //totalFee = uint32(1) // TODO 测试 上线修改
2021-12-25 08:38:30 +00:00
//}
2021-11-01 03:32:23 +00:00
2022-01-16 08:56:20 +00:00
fmt.Println("configInfo.MemberFee : configInfo.DepositFee", memberConfig.MemberFee, memberConfig.MemberDeposit)
2022-01-29 02:21:38 +00:00
totalFee := memberConfig.MemberFee + memberConfig.MemberDeposit - user.Deposit
2022-01-16 08:56:20 +00:00
if user.Deposit == memberConfig.MemberDeposit {
totalFee = memberConfig.MemberFee
2021-12-25 08:38:30 +00:00
}
if totalFee == 0 {
logger.Error(errors.New("totalFee is 0"))
RespJson(c, status.InternalServerError, nil)
return
}
2022-07-12 13:20:57 +00:00
2022-08-31 07:25:45 +00:00
if req.UserCouponId != 0 {
2022-06-29 08:03:50 +00:00
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
}
2022-08-31 07:25:45 +00:00
if user.IsMember() && coupon.Uid == uc.Uid && coupon.MemberLevel == req.MemberLevel &&
2022-06-29 08:03:50 +00:00
coupon.ActivityId == 1 && coupon.State == 1 {
totalFee -= coupon.Value
2022-07-12 13:20:57 +00:00
2022-11-01 06:23:06 +00:00
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()
}()
}
2022-08-31 07:25:45 +00:00
} else if coupon.State == 1 && coupon.ActivityType == 2 {
totalFee -= coupon.Value
2022-06-29 08:03:50 +00:00
} else {
req.UserCouponId = 0
}
}
2021-06-30 02:12:05 +00:00
//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
//}
2021-11-01 03:32:23 +00:00
//orderSn := utils.GetSerialNo32HEXString()
orderSn := model.GetOrderSn()
2022-06-29 08:03:50 +00:00
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, MemberLevel: req.MemberLevel,
2022-11-26 08:52:05 +00:00
UserCouponId: req.UserCouponId, Attach: wxpay.WxPayMember}.Insert()
2022-01-26 08:02:21 +00:00
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
2022-04-25 05:59:56 +00:00
configInfo, err := model.PayConfigInfo()
if err != nil {
logger.Error(err)
RespJson(c, status.InternalServerError, nil)
return
}
2022-11-23 02:10:14 +00:00
//webPay, err := wxpay.WebPay(orderSn, totalFee, user.WxOpenID, "N", wxpay.WxPayMember, configInfo.NotifyUrl)
2022-11-22 07:42:48 +00:00
//if err != nil {
// logger.Error(errors.New("WebPay err"))
// RespJson(c, status.InternalServerError, nil)
// return
//}
2022-11-26 08:52:05 +00:00
webPay, err := wxpay.HmJsPayUnifiedOrder(orderSn, totalFee, user.WxOpenID, configInfo.NotifyUrl)
2022-11-23 02:10:14 +00:00
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
2022-01-26 08:02:21 +00:00
RespOK(c, webPay)
}
func UpgradeMember(c *gin.Context) {
req := struct {
2022-07-12 13:20:57 +00:00
MemberLevel uint32 `json:"member_level"` // 昵称
UserCouponId uint32 `json:"user_coupon_id"`
2022-01-26 08:02:21 +00:00
}{}
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)
2022-06-29 08:03:50 +00:00
//if user.MemberLevel != 2 && user.MemberLevel != 4 {
// logger.Error("MemberLevel err:")
// RespJson(c, status.InternalServerError, nil)
// return
//}
2022-01-27 14:24:29 +00:00
originalMemberConfig, err := model.GetMemberConfig(user.MemberLevel)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
2022-01-26 08:02:21 +00:00
memberConfig, err := model.GetMemberConfig(req.MemberLevel)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
2022-01-27 14:24:29 +00:00
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
}
2022-01-26 08:02:21 +00:00
2022-01-27 14:24:29 +00:00
// 补押金
depositMendFee := int64(memberConfig.MemberDeposit) - int64(user.Deposit)
2022-01-26 08:02:21 +00:00
2022-06-29 08:03:50 +00:00
count, err := model.NewUserRedeemCodeQuerySet(model.DB).UidEq(uc.Uid).CodeTypeEq(model.CodeTypeMemberCard30).
StatusEq(model.RedeemCodeStatusUsed).Count()
2022-01-27 14:24:29 +00:00
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
fmt.Println("count:", count)
// 抵扣天数
deductionDays := int64(0)
2022-06-29 08:03:50 +00:00
deductionTime := user.MemberExpire.Unix() - int64(count*30*24*3600) - time.Now().Unix() + 1*3600
2022-01-27 14:24:29 +00:00
if deductionTime < 0 {
deductionTime = 0
}
if deductionTime > 0 {
deductionDays = deductionTime / int64(24*3600)
}
2022-07-29 02:02:33 +00:00
memberYare := 0
memberMendFee := int64(0)
2022-01-27 14:24:29 +00:00
// 抵扣金
deductionFee := (((int64(memberFee) * deductionDays) / 365) / 100) * 100
2022-07-29 02:02:33 +00:00
if deductionDays < 365 {
memberYare = 1
// 补会员费
memberMendFee = int64(memberConfig.MemberFee*uint32(memberYare)) - deductionFee
} else {
// 补会员费
memberMendFee = int64((int64(memberConfig.MemberFee)*deductionDays)/365) - deductionFee
}
2022-01-27 14:24:29 +00:00
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
2022-01-26 08:02:21 +00:00
}
2022-01-27 14:24:29 +00:00
//totalFee := memberConfig.MemberFee + memberConfig.MemberDeposit
//if user.Deposit == memberConfig.MemberDeposit {
// totalFee = memberConfig.MemberFee
//}
2022-01-26 08:02:21 +00:00
if totalFee == 0 {
logger.Error(errors.New("totalFee is 0"))
RespJson(c, status.InternalServerError, nil)
return
}
2022-11-30 01:43:36 +00:00
2022-08-31 07:25:45 +00:00
if req.UserCouponId != 0 {
2022-07-12 13:20:57 +00:00
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
}
2022-08-31 07:25:45 +00:00
if user.IsMember() && coupon.Uid == uc.Uid && coupon.MemberLevel == req.MemberLevel &&
2022-07-12 13:20:57 +00:00
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()
}()
2022-08-31 07:25:45 +00:00
} else if coupon.State == 1 && coupon.ActivityType == 2 {
totalFee -= int64(coupon.Value)
2022-07-12 13:20:57 +00:00
} else {
req.UserCouponId = 0
}
}
2022-08-31 07:25:45 +00:00
totalFee += 50
totalFee = (totalFee / 100) * 100
2022-01-26 08:02:21 +00:00
//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()
2022-07-29 02:02:33 +00:00
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))
}
2022-01-26 08:02:21 +00:00
orderSn := model.GetOrderSn()
2022-01-27 14:24:29 +00:00
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn,
2022-07-12 13:20:57 +00:00
MemberLevel: req.MemberLevel, OrderType: 9, MemberExpire: memberExpire,
2022-11-26 08:52:05 +00:00
UserCouponId: req.UserCouponId, Attach: wxpay.WxPayUpgradeMember}.Insert()
2021-06-30 02:12:05 +00:00
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
2022-04-25 05:59:56 +00:00
configInfo, err := model.PayConfigInfo()
if err != nil {
logger.Error(err)
RespJson(c, status.InternalServerError, nil)
return
}
2022-11-26 08:52:05 +00:00
//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)
2021-06-30 02:12:05 +00:00
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, webPay)
}
2022-01-27 14:24:29 +00:00
func UpgradeMemberInfo(c *gin.Context) {
req := struct {
2022-07-12 13:20:57 +00:00
MemberLevel uint32 `json:"member_level"` // 昵称
UserCouponId uint32 `json:"user_coupon_id"`
2022-01-27 14:24:29 +00:00
}{}
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)
2022-06-29 08:03:50 +00:00
//if user.MemberLevel != 2 && user.MemberLevel != 4 {
// logger.Error("MemberLevel err:")
// RespJson(c, status.InternalServerError, nil)
// return
//}
2022-01-27 14:24:29 +00:00
//configInfo, err := model.PayConfigInfo()
//if err != nil {
// logger.Error("err:", err)
// RespJson(c, status.InternalServerError, nil)
// return
//}
originalMemberConfig, err := model.GetMemberConfig(user.MemberLevel)
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
memberConfig, err := model.GetMemberConfig(req.MemberLevel)
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)
2022-06-29 08:03:50 +00:00
count, err := model.NewUserRedeemCodeQuerySet(model.DB).UidEq(uc.Uid).CodeTypeEq(model.CodeTypeMemberCard30).
StatusEq(model.RedeemCodeStatusUsed).Count()
2022-01-27 14:24:29 +00:00
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
fmt.Println("count:", count)
// 抵扣天数
deductionDays := int64(0)
2022-06-29 08:03:50 +00:00
deductionTime := user.MemberExpire.Unix() - int64(count*30*24*3600) - time.Now().Unix() + 1*3600
2022-01-27 14:24:29 +00:00
if deductionTime < 0 {
deductionTime = 0
}
if deductionTime > 0 {
deductionDays = deductionTime / int64(24*3600)
}
2022-07-29 02:02:33 +00:00
//memberYare := deductionDays/365 + 1
//// 抵扣金
//deductionFee := (((int64(memberFee) * deductionDays) / 365) / 100) * 100
//
//// 补会员费
//memberMendFee := int64(memberConfig.MemberFee*uint32(memberYare)) - deductionFee
memberYare := 0
memberMendFee := int64(0)
2022-01-27 14:24:29 +00:00
// 抵扣金
deductionFee := (((int64(memberFee) * deductionDays) / 365) / 100) * 100
2022-07-29 02:02:33 +00:00
if deductionDays < 365 {
memberYare = 1
// 补会员费
memberMendFee = int64(memberConfig.MemberFee*uint32(memberYare)) - deductionFee
} else {
// 补会员费
memberMendFee = int64((int64(memberConfig.MemberFee)*deductionDays)/365) - deductionFee
}
2022-01-27 14:24:29 +00:00
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
}
2022-08-04 03:57:21 +00:00
2022-07-12 13:20:57 +00:00
var coupon model.UserCoupon
2022-08-31 07:25:45 +00:00
if req.UserCouponId != 0 {
2022-07-12 13:20:57 +00:00
err = model.NewUserCouponQuerySet(model.DB).IDEq(req.UserCouponId).One(&coupon)
if err != nil {
logger.Error("coupon err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
2022-08-31 07:25:45 +00:00
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 {
2022-07-12 13:20:57 +00:00
totalFee -= int64(coupon.Value)
} else {
req.UserCouponId = 0
}
2022-08-31 07:25:45 +00:00
fmt.Println("totalFee:", totalFee)
2022-07-12 13:20:57 +00:00
}
2022-01-27 14:24:29 +00:00
2022-08-31 07:25:45 +00:00
totalFee += 50
totalFee = (totalFee / 100) * 100
2022-01-27 14:24:29 +00:00
RespOK(c, map[string]interface{}{
"deduction_fee": deductionFee, // 会员抵扣费
"deduction_days": deductionDays, // 会员抵扣天数
"member_mend_fee": memberMendFee, // 会员补费
"deposit_mend_fee": depositMendFee, // 补押金
"total_fee": totalFee, // 总费用
2022-07-12 13:20:57 +00:00
"coupon": coupon.Value,
2022-01-27 14:24:29 +00:00
})
}
2021-12-25 08:38:30 +00:00
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()
2022-11-26 08:52:05 +00:00
err := model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, Attach: wxpay.WxPayDeposit}.Insert()
2021-12-25 08:38:30 +00:00
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
2022-01-16 08:56:20 +00:00
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)
2021-12-25 08:38:30 +00:00
if err != nil {
2022-01-26 08:02:21 +00:00
logger.Error("GetMemberConfig err:", err)
2022-01-16 08:56:20 +00:00
RespJson(c, status.InternalServerError, nil)
2021-12-25 08:38:30 +00:00
return
}
2022-01-16 08:56:20 +00:00
totalFee := memberConfig.MemberDeposit
2021-12-25 08:38:30 +00:00
if totalFee == 0 || user.Deposit == totalFee {
logger.Error(errors.New("totalFee is 0"))
RespJson(c, status.InternalServerError, nil)
return
}
2022-04-21 09:03:33 +00:00
//totalFee = 1 // 测试
2022-04-25 05:59:56 +00:00
configInfo, err := model.PayConfigInfo()
if err != nil {
logger.Error(err)
RespJson(c, status.InternalServerError, nil)
return
}
2022-11-26 08:52:05 +00:00
//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)
2021-12-25 08:38:30 +00:00
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, webPay)
}
2021-06-30 02:12:05 +00:00
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
}
2021-12-25 08:38:30 +00:00
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
}
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
}
2022-03-26 03:25:15 +00:00
resp, err := model.MemberExpireDelaying(uc.Uid)
if err != nil {
2022-05-28 07:24:17 +00:00
logger.Errorf("err:%#v", err)
2022-03-26 03:25:15 +00:00
RespJson(c, status.InternalServerError, nil)
2021-12-25 08:38:30 +00:00
return
}
2022-03-26 03:25:15 +00:00
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
}
2021-12-25 08:38:30 +00:00
}
2022-03-26 03:25:15 +00:00
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)
2021-12-25 08:38:30 +00:00
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
}
2022-03-26 03:25:15 +00:00
RespOK(c, resp)
2021-12-25 08:38:30 +00:00
}
2022-03-26 03:25:15 +00:00
func UserMemberExpireDelayingInfo(c *gin.Context) {
2021-12-25 08:38:30 +00:00
uc := auth.GetCurrentUser(c)
if uc == nil {
RespJson(c, status.Unauthorized, nil)
return
}
2022-03-26 03:25:15 +00:00
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)
2021-12-25 08:38:30 +00:00
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, resp)
}
2022-01-15 13:10:00 +00:00
2022-03-26 03:25:15 +00:00
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
}
2022-04-25 05:59:56 +00:00
configInfo, err := model.PayConfigInfo()
if err != nil {
logger.Error(err)
RespJson(c, status.InternalServerError, nil)
return
}
2022-03-26 03:25:15 +00:00
orderSn := model.GetOrderSn()
2022-11-26 08:52:05 +00:00
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, OrderId: 0, OrderType: 3, Attach: wxpay.WxPayMemberExpireDelay}.Insert()
2022-03-26 03:25:15 +00:00
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
2022-11-26 08:52:05 +00:00
2022-11-30 01:43:36 +00:00
//userMemberExpireDelay.DelayAmount = userMemberExpireDelay.DelayAmount / 100 // 测试TODO
2022-11-26 08:52:05 +00:00
//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)
2022-03-26 03:25:15 +00:00
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
}
2022-01-16 08:56:20 +00:00
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 {
2022-05-28 07:24:17 +00:00
logger.Errorf("err:%#v", err)
2022-01-16 08:56:20 +00:00
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, resp)
}
2022-04-26 06:28:41 +00:00
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")
2022-04-27 02:25:55 +00:00
RespJson(c, status.TodayAttendance, nil)
2022-04-26 06:28:41 +00:00
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
}
2022-04-27 02:25:55 +00:00
if attendanceRecord.AttendanceDate == "" ||
attendanceRecord.AttendanceDate != utils.TodayZeroAddDaysDateFormat(-1) {
2022-04-26 06:28:41 +00:00
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
}
2022-04-27 02:25:55 +00:00
_, err = model.NewUserAttendanceQuerySet(model.DB).UidEq(uc.Uid).GetUpdater().
SetConsecutiveDays(userAttendance.ConsecutiveDays).
2022-04-26 06:28:41 +00:00
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(
2022-04-27 02:25:55 +00:00
fmt.Sprintf("SELECT * FROM user_attendance_record WHERE attendance_date in ('%s','%s') AND uid=%d",
utils.TodayZeroAddDaysDateFormat(-1), todayZero, uc.Uid))
2022-04-26 06:28:41 +00:00
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)
2022-05-10 07:17:34 +00:00
err = model.NewUserAttendanceRecordQuerySet(model.DB).UidEq(uc.Uid).OrderDescByID().
Limit(1).One(&attendanceRecord)
2022-04-26 06:28:41 +00:00
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
}
2022-04-27 02:25:55 +00:00
date := utils.TodayZeroAddDaysDateFormat(i - days)
if attendanceRecord.AttendanceDate == todayZero {
date = utils.TodayZeroAddDaysDateFormat(i + 1 - days)
}
2022-04-26 06:28:41 +00:00
info := model.AttendanceInfo{
IndexDay: uint32(i) + 1,
//Date: utils.TodayZeroAddDaysDateFormat((-1) * (7 - i)),
//Date: utils.TodayZeroAddDaysDateFormat(i + 1 - days),
2022-04-27 02:25:55 +00:00
//Date: utils.TodayZeroAddDaysDateFormat(i - days),
Date: date,
2022-04-26 06:28:41 +00:00
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
}
2022-05-10 07:17:34 +00:00
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
2022-05-12 05:42:45 +00:00
assistant := model.GetUserByUid(uc.Uid)
if assistant.UserType != 2 {
logger.Error("not assistant")
RespJson(c, status.InternalServerError, nil)
return
}
2022-05-10 07:17:34 +00:00
list, totalPage, err := req.List()
if err != nil {
2022-05-28 07:24:17 +00:00
logger.Errorf("err:%#v", err)
2022-05-10 07:17:34 +00:00
RespJson(c, status.InternalServerError, nil)
return
}
ret := map[string]interface{}{
"list": list,
"cur_page": req.PageNum,
"total_page": totalPage,
}
RespOK(c, ret)
return
}
2022-01-15 13:10:00 +00:00
// 升级 1-黄金会员 2-白金会员 3-黑金会员
// 开通会员
// 升级会员
// 订单
// 购物车
// 押金
2022-01-16 08:56:20 +00:00
// 会员列表 开通会员 下订单 借卡 还卡
// 会员升级
2022-01-26 08:02:21 +00:00
// 299会员 升级
2022-03-26 03:25:15 +00:00
// 订单 会员导数据
// 退押金记录