package coinapi import ( "fmt" "net/url" "videoweb/app/service/coinser" "videoweb/app/service/rechargeser" "videoweb/pub/common" "videoweb/pub/common/enum/consts" "videoweb/pub/common/ipaddr" "videoweb/pub/common/srvdef" "github.com/gin-gonic/gin" ) type buyCoinReq struct { PackageId int64 `json:"packageId" binding:"required"` // 购买套餐ID(金币充值) PayMode string `json:"payMode" binding:"required"` // 支付方式:alipay/wechat SourcePageKey string `json:"sourcePageKey"` // 下单来源页面标识 SourcePageName string `json:"sourcePageName"` // 下单来源页面名称 } // BuyCoin 购买金币(发起第三方支付) // @Tags 金币 // @Summary 购买金币 // @Description 根据指定金币套餐发起第三方支付,返回支付链接 // @Accept json // @Produce json // @Param param body buyCoinReq true "购买参数" // @Success 200 {object} coinser.BuyCoinResp "支付链接" // @Security ApiKeyAuth // @Router /api/app/coin/buy [POST] func BuyCoin(ctx *gin.Context) { var req buyCoinReq if err := ctx.ShouldBind(&req); err != nil { common.ServerJSON(ctx, srvdef.ErrParamError, nil) return } userId := common.GetUserId(ctx) sysType := ctx.GetString(consts.CtxSysType) devType := ctx.GetString(consts.CtxDevType) ip := ipaddr.ResolveClientIP(ctx) user, serr := coinser.GetUserInfo(ctx, userId) if serr != nil || user == nil { common.ServerJSON(ctx, srvdef.ErrUserNotExsit, nil) return } deviceID := rechargeser.PayDeviceID(ctx.GetString(consts.CtxDevId), user.DevID, user.DevV2) resp, serr := coinser.CreateCoinOrder(ctx, userId, user.NickName, req.PackageId, req.PayMode, sysType, devType, deviceID, ip, user.DistrictCode, req.SourcePageKey, req.SourcePageName) if serr != nil { common.ServerJSON(ctx, serr.Code, serr.Tips) return } common.ServerJSON(ctx, srvdef.Success, resp) } // ExportCoinTrans 导出当前用户金币余额明细 // @Tags 金币 // @Summary 导出金币余额明细 -- by 王鸣 // @Description 导出当前登录用户的金币收入、支出流水CSV;type=0全部 1充值 2消费 3奖励 // @Produce text/csv // @Param type query int false "类型:0全部 1充值 2消费 3奖励" // @Success 200 {file} file "CSV文件" // @Security ApiKeyAuth // @Router /api/app/coin/trans/export [GET] func ExportCoinTrans(ctx *gin.Context) { var req coinTransListReq _ = ctx.ShouldBindQuery(&req) data, fileName, err := coinser.ExportCoinTrans(ctx, common.GetUserId(ctx), req.Type) if err != nil { common.ServerJSON(ctx, err.Code, err.Tips) return } ctx.Header("Content-Type", "text/csv; charset=utf-8") ctx.Header("Content-Disposition", fmt.Sprintf("attachment; filename*=UTF-8''%s", url.QueryEscape(fileName))) ctx.Data(200, "text/csv; charset=utf-8", data) } type coinOrderHistoryReq struct { Page int64 `json:"page" form:"page"` PageSize int64 `json:"pageSize" form:"pageSize"` } // GetCoinOrderHistory 查询当前用户金币购买记录 // @Tags 金币 // @Summary 查询金币购买记录 // @Produce json // @Param page query int false "页码(默认1)" // @Param pageSize query int false "每页数量(默认10)" // @Success 200 {object} object "订单列表" // @Security ApiKeyAuth // @Router /api/app/coin/orders [GET] func GetCoinOrderHistory(ctx *gin.Context) { var req coinOrderHistoryReq _ = ctx.ShouldBindQuery(&req) if req.Page <= 0 { req.Page = 1 } if req.PageSize <= 0 { req.PageSize = 10 } userId := common.GetUserId(ctx) list, total, serr := coinser.GetCoinOrderHistory(ctx, userId, req.Page, req.PageSize) if serr != nil { common.ServerJSON(ctx, serr.Code, serr.Tips) return } common.ServerJSON(ctx, srvdef.Success, gin.H{"total": total, "list": list}) } type coinTransListReq struct { // 页码,默认1 Page int64 `json:"page" form:"page"` // 每页数量,默认10,最大100 PageSize int64 `json:"pageSize" form:"pageSize"` // 类型:0-全部 1-充值 2-消费 3-奖励 Type int64 `json:"type" form:"type"` } // GetCoinTransList 查询当前用户金币余额明细 // @Tags 金币 // @Summary 查询金币余额明细 -- by 旺鸣 // @Description 返回当前登录用户的金币收入、支出流水,按交易时间倒序;type=0全部 1充值 2消费 3奖励 // @Produce json // @Param page query int false "页码(默认1)" // @Param pageSize query int false "每页数量(默认10,最大100)" // @Param type query int false "类型:0全部 1充值 2消费 3奖励" // @Success 200 {object} response.BasePageResp{list=[]proto.CoinTransListItemResp} "成功" // @Security ApiKeyAuth // @Router /api/app/coin/trans/list [GET] func GetCoinTransList(ctx *gin.Context) { var req coinTransListReq _ = ctx.ShouldBindQuery(&req) userId := common.GetUserId(ctx) resp, err := coinser.GetCoinTransList(ctx, userId, req.Page, req.PageSize, req.Type) if err != nil { common.ServerJSON(ctx, err.Code, err.Tips) return } common.ServerJSON(ctx, srvdef.Success, resp) }