service/app/mix/controller/vas.go

490 lines
14 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}