mh_server/controller/user.go

655 lines
16 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"
"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 {
MemberLevel uint32 `json:"member_level"` // 昵称
}{}
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)
////totalFee = uint32(3) // TODO 测试
//if user.Deposit == 300 {
// totalFee = MemberFee
// // //totalFee = uint32(1) // TODO 测试
//}
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
}
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-01-26 08:02:21 +00:00
err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, MemberLevel: req.MemberLevel}.Insert()
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
webPay, err := wxpay.WebPay(orderSn, totalFee, user.WxOpenID, "N", wxpay.WxPayMember)
if err != nil {
logger.Error(errors.New("WebPay err"))
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, webPay)
}
func UpgradeMember(c *gin.Context) {
req := struct {
MemberLevel uint32 `json:"member_level"` // 昵称
}{}
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
}
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-01-27 14:24:29 +00:00
count, err := model.NewUserRedeemCodeQuerySet(model.DB).UidEq(uc.Uid).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() + 12*3600
if deductionTime < 0 {
deductionTime = 0
}
if deductionTime > 0 {
deductionDays = deductionTime / int64(24*3600)
}
2022-01-26 08:02:21 +00:00
2022-01-27 14:24:29 +00:00
// 抵扣金
deductionFee := (((int64(memberFee) * deductionDays) / 365) / 100) * 100
// 补会员费
memberMendFee := int64(memberConfig.MemberFee) - 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
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
}
//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-01-27 14:24:29 +00:00
memberExpire := time.Now().AddDate(1, 0, count*30)
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,
MemberLevel: req.MemberLevel, OrderType: 3, MemberExpire: memberExpire}.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-01-27 14:24:29 +00:00
webPay, err := wxpay.WebPay(orderSn, uint32(totalFee), user.WxOpenID, "N", wxpay.WxPayUpgradeMember)
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 {
MemberLevel uint32 `json:"member_level"` // 昵称
}{}
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)
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)
count, err := model.NewUserRedeemCodeQuerySet(model.DB).UidEq(uc.Uid).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() + 12*3600
if deductionTime < 0 {
deductionTime = 0
}
if deductionTime > 0 {
deductionDays = deductionTime / int64(24*3600)
}
// 抵扣金
deductionFee := (((int64(memberFee) * deductionDays) / 365) / 100) * 100
// 补会员费
memberMendFee := int64(memberConfig.MemberFee) - 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
}
RespOK(c, map[string]interface{}{
"deduction_fee": deductionFee, // 会员抵扣费
"deduction_days": deductionDays, // 会员抵扣天数
"member_mend_fee": memberMendFee, // 会员补费
"deposit_mend_fee": depositMendFee, // 补押金
"total_fee": totalFee, // 总费用
})
}
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()
err := model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn}.Insert()
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
}
//totalFee = 1 // TODO 测试
webPay, err := wxpay.WebPay(orderSn, totalFee, user.WxOpenID, "N", wxpay.WxPayDeposit)
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-01-15 13:10:00 +00:00
count, err := model.NewDepositRefundRecordQuerySet(model.DB).UidEq(uc.Uid).StatusNotIn(model.DepositRefundStatusRefunded, model.DepositRefundStatusRefused).Count()
2021-12-25 08:38:30 +00:00
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, nil)
}
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:", err)
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, resp)
}
2022-01-15 13:10:00 +00:00
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 {
logger.Errorf("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
RespOK(c, resp)
}
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会员 升级
// 订单 会员导数据
// 退押金记录