Files
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

92 lines
3.1 KiB
Go

package statctrl
import (
"91porn-server/common"
"91porn-server/common/stderr"
"91porn-server/models/commod"
"91porn-server/models/s/statordermod"
"91porn-server/web/service/statser"
"github.com/gin-gonic/gin"
"time"
)
// OrderStats doc
// @Summary 订单统计
// @Description 订单统计
// @Tags statctrl
// @Accept mpfd,json
// @Produce json,html
// @Param pageNumber query integer true "当前页"
// @Param pageSize query integer true "每页条数"
// @Param type query integer true "订单类型"
// @Param channel query string false "渠道"
// @Param start query string false "开始时间UTC时间戳"
// @Param end query string false "结束时间UTC时间戳"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /web/stats/order/list [get]
func OrderStats(ctx *gin.Context) {
type Query struct {
Type *statordermod.OrderType `form:"type" json:"type"` //订单类型
Channel *string `form:"channel" json:"channel"`
Start *time.Time `form:"start" json:"start"`
End *time.Time `form:"end" json:"end"`
}
var arg struct {
commod.Page
Query
}
if err := ctx.ShouldBind(&arg); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, "stat VideoEarnStats arg error "+err.Error())
return
}
endTime := time.Now()
if arg.End != nil {
endTime = *arg.End
}
var startTime time.Time
if arg.Start != nil {
startTime = *arg.Start
}
skip := int64((arg.PageNumber - 1) * arg.PageSize)
limit := int64(arg.PageSize)
page, err := statser.OrderPages(skip, limit,
statser.OrderChannelMatch{arg.Channel},
statser.OrderTypeMatch{arg.Type},
statser.OrderSumDateGTEAndLTMatch{&startTime, &endTime},
)
if err != nil {
common.ServeJSON(ctx, stderr.Failure, "statctrl OrderPages error: "+err.Error())
return
}
common.ServeJSON(ctx, stderr.Success, page)
}
// RchSucRate doc
// @Summary 充值成功率
// @Description 充值成功率
// @Tags statctrl
// @Accept mpfd,json
// @Produce json,html
// @Param sumDate query string true "日期"
// @Param channel query string true "渠道"
// @Success 200 {string} json "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /web/admin/stats/order/sucRate [post]
func RchSucRate(ctx *gin.Context) {
var args struct {
SumDate time.Time `form:"sumDate" json:"sumDate" binding:"required"`
Channel string `form:"channel" json:"channel" binding:"required"`
}
if err := ctx.ShouldBind(&args); err != nil {
common.ServeJSON(ctx, stderr.ErrParamError, "stat RchSucRate arg error "+err.Error())
return
}
rchSucRateMap, err := statser.RechargeSucRateMap(args.SumDate, args.Channel)
if err != nil {
common.ServeJSON(ctx, stderr.Failure, "statctrl OrderPages error: "+err.Error())
return
}
common.ServeJSON(ctx, stderr.Success, rchSucRateMap)
}