package activityctrl import ( "strconv" "91porn-server/app/service/activityser" "91porn-server/common" "91porn-server/common/log" "91porn-server/common/stderr" "github.com/gin-gonic/gin" ) type CurrencyListReq struct { UserID string `json:"userId" binding:"required"` } func CurrencyList(c *gin.Context) { var req CurrencyListReq if err := c.ShouldBindJSON(&req); err != nil { common.ServeJSONNoEncrypt(c, stderr.ErrParamError, nil) return } data, code := activityser.GetCurrencyList(c) if code != stderr.Success { common.ServeJSONNoEncrypt(c, code, nil) return } common.ServeJSONNoEncrypt(c, stderr.Success, gin.H{ "list": data, }) } // VipDeductReq 会员卡当前可用抵扣(按抵扣后金额匹配支付通道) type VipDeductReq struct { ProductID string `json:"productId"` // 会员卡ID DeductAmount int64 `json:"deductAmount"` // 券面额(分) } type ProductListReq struct { UserID string `json:"userId" binding:"required"` Deducts []VipDeductReq `json:"deducts"` // 各会员卡可用抵扣;按抵扣后有效金额匹配支付通道,可选 } func ProductList(c *gin.Context) { var req ProductListReq if err := c.ShouldBindJSON(&req); err != nil { common.ServeJSONNoEncrypt(c, stderr.ErrParamError, nil) return } uid, err := strconv.ParseUint(req.UserID, 10, 64) if err != nil { common.ServeJSONNoEncrypt(c, stderr.ErrParamError, "invalid userId") return } deducts := make([]activityser.VipDeduct, 0, len(req.Deducts)) for _, d := range req.Deducts { deducts = append(deducts, activityser.VipDeduct{ProductID: d.ProductID, DeductAmount: d.DeductAmount}) } res, err := activityser.GetProductList(c, uid, deducts) if err != nil { log.ErrorX(c, "活动服-获取会员卡列表异常", log.Any("uid", req.UserID), log.E(err)) common.ServeJSONNoEncrypt(c, stderr.ErrNetWorkBusy, nil) return } common.ServeJSONNoEncrypt(c, stderr.Success, gin.H{ "list": res, }) } type RechargeOrderReq struct { UserID string `json:"userId" binding:"required"` RechargeType string `json:"rechargeType" binding:"required"` ProductID string `json:"productId" binding:"required"` BuyType int `json:"buyType" binding:"required"` ActivityID string `json:"activityId"` ExperimentID string `json:"experimentId"` ExperimentVariant string `json:"experimentVariant"` SessionID string `json:"sessionId"` CouponID string `json:"couponId"` // 会员抵扣券ID(可选,购买会员卡时自动抵扣) DeductAmount int64 `json:"deductAmount"` // 活动服建议抵扣金额(分,可选),本服按券自行校验上限后折价 } func RechargeOrder(c *gin.Context) { var req RechargeOrderReq if err := c.ShouldBindJSON(&req); err != nil { common.ServeJSONNoEncrypt(c, stderr.ErrParamError, nil) return } uid, err := strconv.ParseUint(req.UserID, 10, 64) if err != nil { common.ServeJSONNoEncrypt(c, stderr.ErrParamError, "invalid userId") return } payUrl, mode, err := activityser.CreateRechargeOrder( c, uid, req.RechargeType, req.ProductID, req.BuyType, c.ClientIP(), activityser.RechargeAttribution{ ActivityID: req.ActivityID, ExperimentID: req.ExperimentID, ExperimentVariant: req.ExperimentVariant, SessionID: req.SessionID, }, req.CouponID, req.DeductAmount, ) if err != nil { log.ErrorX(c, "活动服-充值下单异常", log.Any("uid", req.UserID), log.E(err)) common.ServeJSONNoEncrypt(c, stderr.RechargeFaile, err.Error()) return } common.ServeJSONNoEncrypt(c, stderr.Success, gin.H{ "payUrl": payUrl, "mode": mode, }) } type BuyCoinProductReq struct { UserID string `json:"userId" binding:"required"` ProductID string `json:"productId" binding:"required"` } func BuyCoinProduct(c *gin.Context) { var req BuyCoinProductReq if err := c.ShouldBindJSON(&req); err != nil { common.ServeJSONNoEncrypt(c, stderr.ErrParamError, nil) return } uid, err := strconv.ParseUint(req.UserID, 10, 64) if err != nil { common.ServeJSONNoEncrypt(c, stderr.ErrParamError, "invalid userId") return } code, err := activityser.BuyCoinProduct(c, uid, req.ProductID, "") if err != nil { log.ErrorX(c, "活动服-金币购买异常", log.Any("uid", req.UserID), log.Any("productId", req.ProductID), log.E(err)) if code == stderr.InsufficientBalance { common.ServeJSONNoEncrypt(c, 201, "余额不足") return } common.ServeJSONNoEncrypt(c, code, err.Error()) return } common.ServeJSONNoEncrypt(c, stderr.Success, nil) } type UserBalanceReq struct { UserID string `json:"userId" binding:"required"` } func UserBalance(c *gin.Context) { var req UserBalanceReq if err := c.ShouldBindJSON(&req); err != nil { common.ServeJSONNoEncrypt(c, stderr.ErrParamError, nil) return } uid, err := strconv.ParseUint(req.UserID, 10, 64) if err != nil { common.ServeJSONNoEncrypt(c, stderr.ErrParamError, "invalid userId") return } balance, err := activityser.GetUserBalance(uid) if err != nil { log.ErrorX(c, "活动服-查询余额异常", log.Any("uid", req.UserID), log.E(err)) common.ServeJSONNoEncrypt(c, stderr.ErrNetWorkBusy, nil) return } common.ServeJSONNoEncrypt(c, stderr.Success, balance) } type AppInfoReq struct { UserID string `json:"userId" binding:"required"` } func AppInfo(c *gin.Context) { var req AppInfoReq if err := c.ShouldBindJSON(&req); err != nil { common.ServeJSONNoEncrypt(c, stderr.ErrParamError, nil) return } uid, err := strconv.ParseUint(req.UserID, 10, 64) if err != nil { common.ServeJSONNoEncrypt(c, stderr.ErrParamError, "invalid userId") return } data, err := activityser.GetAppInfo(c, uid) if err != nil { log.ErrorX(c, "活动服-获取应用信息异常", log.Any("uid", req.UserID), log.E(err)) common.ServeJSONNoEncrypt(c, stderr.ErrNetWorkBusy, nil) return } common.ServeJSONNoEncrypt(c, stderr.Success, data) } func Reward(c *gin.Context) { var req activityser.RewardReq if err := c.ShouldBindJSON(&req); err != nil { common.ServeJSONNoEncrypt(c, stderr.ErrParamError, nil) return } if err := activityser.GrantReward(c, &req); err != nil { log.ErrorX(c, "活动服-发奖异常", log.Any("uid", req.UserId), log.Any("rewardType", req.RewardType), log.Any("amount", req.Amount), log.E(err)) common.ServeJSONNoEncrypt(c, stderr.Failure, err.Error()) return } common.ServeJSONNoEncrypt(c, stderr.Success, nil) } func BatchReward(c *gin.Context) { var req activityser.BatchRewardReq if err := c.ShouldBindJSON(&req); err != nil { common.ServeJSONNoEncrypt(c, stderr.ErrParamError, nil) return } if err := activityser.GrantBatchReward(c, &req); err != nil { log.ErrorX(c, "活动服-批量发奖异常", log.Any("uid", req.UserId), log.Any("rewardCount", len(req.Rewards)), log.E(err)) common.ServeJSONNoEncrypt(c, stderr.Failure, err.Error()) return } common.ServeJSONNoEncrypt(c, stderr.Success, nil) } func Deduct(c *gin.Context) { var req activityser.DeductReq if err := c.ShouldBindJSON(&req); err != nil { common.ServeJSONNoEncrypt(c, stderr.ErrParamError, nil) return } code, err := activityser.Deduct(c, &req) if err != nil { log.ErrorX(c, "活动服-扣款异常", log.Any("uid", req.UserId), log.Any("deductType", req.DeductType), log.Any("amount", req.Amount), log.E(err)) common.ServeJSONNoEncrypt(c, code, err.Error()) return } common.ServeJSONNoEncrypt(c, stderr.Success, nil) }