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 { // PayType uint32 `json:"pay_type"` // 1-开通会员 2- //}{} //if c.ShouldBindJSON(&req) != nil { // RespJson(c, status.BadRequest, nil) // return //} uc := auth.GetCurrentUser(c) if uc == nil { RespJson(c, status.Unauthorized, nil) return } user := model.GetUserByUid(uc.Uid) //uid := fmt.Sprintf("%d", uc.Uid) //totalFee := MemberFee + DepositFee //uid := "623892011" //user := model.GetUserByUid(62389201) //totalFee = uint32(3) //if user.MemberLevel > 1 { // totalFee = DepositFee // //totalFee = uint32(1) //} configInfo, err := model.PayConfigInfo() 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", configInfo.MemberFee, configInfo.DepositFee) totalFee := configInfo.MemberFee + configInfo.DepositFee if user.Deposit == configInfo.DepositFee { totalFee = configInfo.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}.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 } configInfo, err := model.PayConfigInfo() if err != nil { logger.Error("err:", err) return } totalFee := configInfo.DepositFee 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) }