package controller import ( "service/api/errcode" vasproto "service/api/proto/vas/proto" "service/app/mix/service" "service/bizcommon/common" "service/bizcommon/util" "service/dbstruct" "service/library/apollo" "service/library/logger" "time" "github.com/gin-gonic/gin" ) // 获取充值商品 func GetCoinsProductList(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.GetCoinsProductListReq) if req.Channel == "h5" { req.DevType = common.DeviceTypeH5 } data, ec := service.DefaultService.GetCoinsProductList(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("GetCoinsProductList fail, req: %v, ec: %v", util.ToJson(req), ec) ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, data) } // 获取会员商品 func GetMembershipProductList(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.GetMembershipProductListReq) if req.Channel == "h5" { req.DevType = common.DeviceTypeH5 } data, ec := service.DefaultService.GetMembershipProductList(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("GetMembershipProductList fail, req: %v, ec: %v", util.ToJson(req), ec) ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, data) } // 充值 创建订单 func CreateOrder(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.CreateOrderReq) if !req.IsValid() || len(req.PayType) <= 0 || len(req.ProductId) <= 0 { logger.Error("CreateOrder, invalid param, req: %v", util.ToJson(req)) ReplyErrCodeMsg(ctx, errcode.ErrCodeBadParam) return } if len(req.Model) >= 28 { req.Model = req.Model[:28] } // 检查能用金币支付的商品 if req.PayType == vasproto.PayTypeCoin && !dbstruct.CoinPayValidProductIdMap[req.ProductId] { ReplyErrorMsg(ctx, "商品错误") return } data, ec, err := service.DefaultService.CreateOrder(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("CreateOrder fail, req: %v, ec: %v", util.ToJson(req), ec) if ec == errcode.ErrCodeVasSrvFail && err != nil { ReplyErrorMsg(ctx, err.Error()) return } ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, data) } func CreateOrderWxPub(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.CreateOrderReq) if req.From != dbstruct.VasCoinOrderFromWxPub { logger.Error("CreateOrder, invalid param, req: %v", util.ToJson(req)) ReplyErrCodeMsg(ctx, errcode.ErrCodeBadParam) return } if req.Mid1 <= 0 || len(req.PayType) <= 0 || len(req.ProductId) <= 0 { logger.Error("CreateOrder, invalid param, req: %v", util.ToJson(req)) ReplyErrCodeMsg(ctx, errcode.ErrCodeBadParam) return } if len(req.Model) >= 28 { req.Model = req.Model[:28] } // 检查能用金币支付的商品 if req.PayType == vasproto.PayTypeCoin && !dbstruct.CoinPayValidProductIdMap[req.ProductId] { ReplyErrorMsg(ctx, "商品错误") return } data, ec, err := service.DefaultService.CreateOrder(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("CreateOrder fail, req: %v, ec: %v", util.ToJson(req), ec) if ec == errcode.ErrCodeVasSrvFail && err != nil { ReplyErrorMsg(ctx, err.Error()) return } ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, data) } func CreateOrderOuter(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.CreateOrderReq) if req.From != dbstruct.VasCoinOrderFromOuterRaven { logger.Error("CreateOrder, invalid param, req: %v", util.ToJson(req)) ReplyErrCodeMsg(ctx, errcode.ErrCodeBadParam) return } if req.PayType != vasproto.PayTypeAlipayH5 || len(req.ProductId) <= 0 { logger.Error("CreateOrder, invalid param, req: %v", util.ToJson(req)) ReplyErrCodeMsg(ctx, errcode.ErrCodeBadParam) return } if len(req.Model) >= 28 { req.Model = req.Model[:28] } req.Mid = 100000001 data, ec, err := service.DefaultService.CreateOrderOuter(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("CreateOrder fail, req: %v, ec: %v", util.ToJson(req), ec) if ec == errcode.ErrCodeVasSrvFail && err != nil { ReplyErrorMsg(ctx, err.Error()) return } ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, data) } // op充值 func OpCreateOrder(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.OpCreateOrderReq) if req.Operator != "yezian" { logger.Warn("invalid operator, req: %v", util.ToJson(req)) ReplyErrCodeMsg(ctx, errcode.ErrCodeVasInvalidParam) return } ec := service.DefaultService.OpCreateOrder(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("OpCreateOrder fail, req: %v, ec: %v", util.ToJson(req), ec) ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, nil) } // 一键解锁 func OneStepUnlock(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.OneStepUnlockContactReq) if !req.IsValid() || req.Uid <= 0 || len(req.ContactProductId) <= 0 { logger.Error("OneStepUnlock, invalid param, req: %v", util.ToJson(req)) ReplyErrCodeMsg(ctx, errcode.ErrCodeBadParam) return } data, ec := service.DefaultService.OneStepUnlockContact(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("GetAddWechatList fail, req: %v, ec: %v", util.ToJson(req), ec) ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, data) } // 填写地址 func ConsumerFillContact(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.ConsumerFillContactReq) if req.Mid <= 0 || len(req.OrderId) <= 0 { logger.Error("ConsumerFillContact, invalid param, req: %v", util.ToJson(req)) ReplyErrCodeMsg(ctx, errcode.ErrCodeBadParam) return } ec := service.DefaultService.ConsumerFillContact(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("ConsumerFillContact fail, req: %v, ec: %v", util.ToJson(req), ec) ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, nil) } // 待添加微信列表 func GetAddWechatList(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.GetAddWechatListReq) if !req.IsValid() { logger.Error("GetAddWechatList, invalid param, req: %v", util.ToJson(req)) ReplyErrCodeMsg(ctx, errcode.ErrCodeBadParam) return } data, ec := service.DefaultService.GetAddWechatList(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("GetAddWechatList fail, req: %v, ec: %v", util.ToJson(req), ec) ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, data) } // 完成添加微信 func ConfirmAddWechat(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.ConfirmAddWechatReq) if !req.IsValid() { logger.Error("ConfirmAddWechat, invalid param, req: %v", util.ToJson(req)) ReplyErrCodeMsg(ctx, errcode.ErrCodeBadParam) return } data, ec := service.DefaultService.ConfirmAddWechat(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("ConfirmAddWechat fail, req: %v, ec: %v", util.ToJson(req), ec) ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, data) } // 已解锁微信列表 func GetUnlockWechatList(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.GetUnlockWechatListReq) if req.Mid <= 0 { logger.Error("GetUnlockWechatList, invalid param, req: %v", util.ToJson(req)) ReplyErrCodeMsg(ctx, errcode.ErrCodeBadParam) return } data, ec := service.DefaultService.GetUnlockWechatList(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("GetUnlockWechatList fail, req: %v, ec: %v", util.ToJson(req), ec) ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, data) } // 明细 func GetCHList(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.GetCHListReq) if !req.IsValid() { logger.Error("GetCHList, invalid param, req: %v", util.ToJson(req)) ReplyErrCodeMsg(ctx, errcode.ErrCodeBadParam) return } data, ec := service.DefaultService.GetCHList(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("GetCHList fail, req: %v, ec: %v", util.ToJson(req), ec) ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, data) } // 网红设置微信 func UpdateWechat(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.UpdateWechatReq) ec := service.DefaultService.UpdateWechat(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("UpdateWechat fail, req: %v, ec: %v", util.ToJson(req), ec) ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, nil) } // 查看微信 func QueryWechat(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.QueryWechatReq) isUnlock, lockType, wechat, ec := service.DefaultService.QueryWechat(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("QueryWechat fail, req: %v, ec: %v", util.ToJson(req), ec) ReplyErrCodeMsg(ctx, ec) return } data := &vasproto.QueryWechatData{ IsUnlock: isUnlock, LockType: lockType, WechatContact: wechat, } ReplyOk(ctx, data) } // h5直接解锁 func H5DirectUnlockWechat(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.H5DirectUnlockWechatReq) data, ec := service.DefaultService.H5DirectUnlockWechat(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("H5DirectUnlockWechat fail, req: %v, ec: %v", util.ToJson(req), ec) ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, data) } // 提现页面 func WithdrawPage(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.WithdrawPageReq) data, ec := service.DefaultService.WithdrawPage(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("WithdrawPage fail, req: %v, ec: %v", util.ToJson(req), ec) ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, data) } var WithdrawFreezeMidMap = map[int64]bool{ //16311: true, 159: true, 772128: true, 450124: true, 904914: true, 513920: true, } func isWithdrawFreeze(mid int64) bool { m := getWithdrawFreezeMidMap() freeze := false if _, ok := m[mid]; ok { freeze = true } logger.Info("isWithdrawFreeze mid: %v, freeze: %v", mid, freeze) return freeze } // 任意额度提现 var WithdrawAnyDiasMap = map[int64]bool{ 74: true, } func isWithdrawAnyDiasEnable(mid int64) bool { return WithdrawAnyDiasMap[mid] } // 提现发送验证码 func WithdrawSendVerifycode(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.WithdrawSendVerifycodeReq) if isWithdrawFreeze(req.Mid) { ReplyErrorMsg(ctx, "当前提现功能已冻结") return } ec := service.DefaultService.WithdrawSendVerifycode(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("WithdrawSendVerifycode fail, req: %v, ec: %v", util.ToJson(req), ec) ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, nil) } // 提现申请 func WithdrawApply(ctx *gin.Context) { //ReplyErrorMsg(ctx, "提现功能维护中,请72小时后再试") //return req := ctx.MustGet("client_req").(*vasproto.WithdrawApplyReq) if isWithdrawFreeze(req.Mid) { ReplyErrorMsg(ctx, "当前提现功能已冻结") return } if req.Diamonds < 1000 { ReplyErrorMsg(ctx, "最低提现金额不能小于100元") return } //if !vasproto.IsWithdrawAnyDiasEnable(req.Mid) && req.Diamonds > 20000 { // ReplyErrorMsg(ctx, "最大提现金额不能大于2000元") // return //} time.Sleep(time.Second * 1) data, ec, err := service.DefaultService.WithdrawApply(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("WithdrawApply fail, req: %v, data: %v, ec: %v", util.ToJson(req), data, ec) if err != nil { ReplyErrorMsg(ctx, err.Error()) return } ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, nil) } // 处理一个订单 func DealOneCoinOrder(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.DealOneCoinOrderReq) ec, err := service.DefaultService.DealOneCoinOrder(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("DealOneCoinOrder fail, req: %v, ec: %v", util.ToJson(req), ec) if err != nil { ReplyErrorMsg(ctx, err.Error()) return } ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, nil) } // 处理一个订单 func DealOneOrder(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.DealOneOrderReq) ec, err := service.DefaultService.DealOneOrder(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("DealOneOrder fail, req: %v, ec: %v", util.ToJson(req), ec) if err != nil { ReplyErrorMsg(ctx, err.Error()) return } ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, nil) } // 订单退款 func RefundOrder(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.RefundOrderReq) ec, err := service.DefaultService.RefundOrder(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("RefundOrder fail, req: %v, ec: %v", util.ToJson(req), ec) if err != nil { ReplyErrorMsg(ctx, err.Error()) return } ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, nil) } // 金币订单退款 func RefundCoinOrder(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.RefundCoinOrderReq) ec, err := service.DefaultService.RefundCoinOrder(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("RefundCoinOrder fail, req: %v, ec: %v", util.ToJson(req), ec) if err != nil { ReplyErrorMsg(ctx, err.Error()) return } ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, nil) } func IncomePage(ctx *gin.Context) { req := ctx.MustGet("client_req").(*vasproto.IncomePageReq) data, ec, err := service.DefaultService.VasIncomePage(ctx, req) if ec != errcode.ErrCodeVasSrvOk { logger.Error("RefundCoinOrder fail, req: %v, ec: %v", util.ToJson(req), ec) if err != nil { ReplyErrorMsg(ctx, err.Error()) return } ReplyErrCodeMsg(ctx, ec) return } ReplyOk(ctx, data) } func PayMeans(ctx *gin.Context) { data := vasproto.PayMeansData{} err := apollo.GetJson("pay_means", &data, apollo.ApolloOpts().SetNamespace("application")) if err != nil { logger.Error("apollo.GetJson fail, key: %v, err: %v", "pay_means", err) } ReplyOk(ctx, data) } func getWithdrawFreezeMidMap() map[int64]int { m := make(map[int64]int) err := apollo.GetJson("withdraw_freeze", &m, apollo.ApolloOpts().SetNamespace("application")) if err != nil { logger.Error("apollo.GetJson fail, key: %v, err: %v", "withdraw_freeze", err) } logger.Info("withdraw_freeze_map: %v", util.ToJson(m)) return m }