433 lines
9.6 KiB
Go
433 lines
9.6 KiB
Go
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/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"` // 昵称
|
|
}{}
|
|
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)
|
|
|
|
//configInfo, err := model.PayConfigInfo()
|
|
//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
|
|
}
|
|
|
|
//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
|
|
if user.Deposit == memberConfig.MemberDeposit {
|
|
totalFee = memberConfig.MemberFee
|
|
}
|
|
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()
|
|
orderSn := model.GetOrderSn()
|
|
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 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
|
|
}
|
|
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)
|
|
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 // 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)
|
|
}
|
|
|
|
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
|
|
}
|
|
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
|
|
}
|
|
|
|
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, 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)
|
|
}
|
|
|
|
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)
|
|
}
|
|
|
|
// 升级 1-黄金会员 2-白金会员 3-黑金会员
|
|
// 开通会员
|
|
// 升级会员
|
|
// 订单
|
|
// 购物车
|
|
// 押金
|
|
|
|
// 会员列表 开通会员 下订单 借卡 还卡
|
|
// 会员升级
|