1.增加首页数据查询接口;
2.历史汇总和实时汇总增加退订率字段;
This commit is contained in:
parent
aa4a350da7
commit
2f382db28d
|
@ -397,7 +397,11 @@ func (e MiGuDeployService) HistoricalSummaryList(c *gin.Context) {
|
|||
AND DATE(created_at) = DATE(mg_order.subscribe_time)) AS submission_count,
|
||||
COUNT(CASE WHEN mg_order.is_one_hour_cancel = 1 THEN 1 END) AS new_user_unsub_within_hour,
|
||||
COUNT(CASE WHEN mg_order.state = 2 THEN 1 END) AS new_user_unsub_on_day,
|
||||
COUNT(*) AS new_user_count`).
|
||||
COUNT(*) AS new_user_count,
|
||||
CONCAT(ROUND(COUNT(CASE WHEN mg_order.is_one_hour_cancel = 1 THEN 1 END) * 100.0 /
|
||||
NULLIF(COUNT(*), 0), 2), '%') AS new_user_unsub_within_hour_rate,
|
||||
CONCAT(ROUND(COUNT(CASE WHEN mg_order.state = 2 THEN 1 END) * 100.0 /
|
||||
NULLIF(COUNT(*), 0), 2), '%') AS new_user_unsub_on_day_rate`).
|
||||
Where("mg_order.subscribe_time >= ? AND mg_order.subscribe_time <= ?", startTime, endTime).
|
||||
Group("DATE(mg_order.subscribe_time), mg_order.product_id, mg_order.channel_code").
|
||||
Order("mg_order.product_id, mg_order.channel_code, mg_order.subscribe_time").
|
||||
|
@ -496,8 +500,12 @@ func (e MiGuDeployService) RealtimeSummaryList(c *gin.Context) {
|
|||
AND created_at <= ?) AS submission_count,
|
||||
COUNT(CASE WHEN mg_order.is_one_hour_cancel = 1 THEN 1 END) AS new_user_unsub_within_hour,
|
||||
COUNT(CASE WHEN mg_order.state = 2 THEN 1 END) AS new_user_unsub_on_day,
|
||||
COUNT(CASE WHEN mg_order.created_at >= ? AND mg_order.created_at <= ? THEN 1 END) AS new_user_count`,
|
||||
startDate, endDate, startDate, endDate).
|
||||
COUNT(CASE WHEN mg_order.created_at >= ? AND mg_order.created_at <= ? THEN 1 END) AS new_user_count,
|
||||
CONCAT(ROUND(COUNT(CASE WHEN mg_order.is_one_hour_cancel = 1 THEN 1 END) * 100.0 /
|
||||
NULLIF(COUNT(CASE WHEN mg_order.created_at >= ? AND mg_order.created_at <= ? THEN 1 END), 0), 2), '%') AS new_user_unsub_within_hour_rate,
|
||||
CONCAT(ROUND(COUNT(CASE WHEN mg_order.state = 2 THEN 1 END) * 100.0 /
|
||||
NULLIF(COUNT(CASE WHEN mg_order.created_at >= ? AND mg_order.created_at <= ? THEN 1 END), 0), 2), '%') AS new_user_unsub_on_day_rate`,
|
||||
startDate, endDate, startDate, endDate, startDate, endDate, startDate, endDate).
|
||||
Where("mg_order.created_at >= ? AND mg_order.created_at <= ?", startDate, endDate).
|
||||
Group("product_id, channel_code").
|
||||
Order("product_id, channel_code").
|
||||
|
@ -594,16 +602,32 @@ func (e MiGuDeployService) UserRetentionList(c *gin.Context) {
|
|||
var retentionList []models.MgUserRetention
|
||||
|
||||
// 查询用户留存数据
|
||||
err = e.Orm.Model(&models.MgOrder{}).
|
||||
qs := e.Orm.Model(&models.MgOrder{}).
|
||||
Select(`DATE_FORMAT(created_at, '%Y-%m') AS retention_month,
|
||||
COUNT(DISTINCT phone_number) AS new_user_count,
|
||||
COUNT(DISTINCT CASE WHEN state != 2 THEN phone_number END) AS retained_user_count,
|
||||
channel_code, product_id,
|
||||
IFNULL(FORMAT(COUNT(DISTINCT CASE WHEN state != 2 THEN phone_number END) / NULLIF(COUNT(DISTINCT phone_number), 0) * 100, 2), 0) AS retention_rate`).
|
||||
Where("created_at >= ? AND created_at <= ?", startDate, endDate).
|
||||
Group("retention_month, channel_code, product_id").
|
||||
Where("created_at >= ? AND created_at <= ?", startDate, endDate)
|
||||
|
||||
// 处理产品编号 (SkuCode) 过滤条件
|
||||
if req.SkuCode != "" {
|
||||
qs = qs.Where("product_id = ?", req.SkuCode)
|
||||
}
|
||||
|
||||
// 处理渠道名称 (Channel) 过滤条件
|
||||
if req.Channel != "" {
|
||||
qs = qs.Where("channel_code = ?", req.Channel)
|
||||
}
|
||||
|
||||
err = qs.Group("retention_month, channel_code, product_id").
|
||||
Order("retention_month").
|
||||
Find(&retentionList).Error
|
||||
if err != nil {
|
||||
logger.Errorf("DailyData query err: %#v", err)
|
||||
response.Error(c, http.StatusInternalServerError, err, "查询失败")
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
e.Logger.Errorf("UserRetentionList query error: %#v", err)
|
||||
|
@ -737,6 +761,132 @@ func (e MiGuDeployService) SysChannelList(c *gin.Context) {
|
|||
e.OK(resp, "")
|
||||
}
|
||||
|
||||
// HomepageDataSummary 查询首页汇总数据
|
||||
// @Summary 查询首页汇总数据
|
||||
// @Tags 2024-咪咕-管理后台
|
||||
// @Produce json
|
||||
// @Accept json
|
||||
// @Param request body models.HomepageDataSummaryReq true "查询首页汇总数据"
|
||||
// @Success 200 {object} models.HomepageDataSummaryResp
|
||||
// @Router /api/v1/admin/home/data [post]
|
||||
func (e MiGuDeployService) HomepageDataSummary(c *gin.Context) {
|
||||
fmt.Println("HomepageDataSummary")
|
||||
err := e.MakeContext(c).MakeOrm().Errors
|
||||
if err != nil {
|
||||
fmt.Println("MakeContext err:", err)
|
||||
e.Logger.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
// 请求参数绑定
|
||||
req := &models.HomepageDataSummaryReq{}
|
||||
if c.ShouldBindJSON(req) != nil {
|
||||
logger.Errorf("para err")
|
||||
response.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
|
||||
return
|
||||
}
|
||||
|
||||
resp := models.HomepageDataSummaryResp{}
|
||||
var summaryData models.SummaryData
|
||||
|
||||
// 设置开始时间和结束时间
|
||||
startTime := req.StartTime
|
||||
endTime := req.EndTime
|
||||
if startTime == "" {
|
||||
startTime = "1970-01-01 00:00:00"
|
||||
}
|
||||
if endTime == "" {
|
||||
endTime = time.Now().Format("2006-01-02 15:04:05")
|
||||
}
|
||||
|
||||
// 查询汇总数据
|
||||
qs := e.Orm.Model(&models.MgOrder{}).
|
||||
Select(`COUNT(*) AS total_user_count,
|
||||
COUNT(CASE WHEN state = 2 THEN 1 END) AS unsubscribed_user_count,
|
||||
COUNT(CASE WHEN is_one_hour_cancel = 1 THEN 1 END) AS one_hour_unsubscribed_user_count`).
|
||||
Where("subscribe_time >= ? AND subscribe_time <= ?", startTime, endTime)
|
||||
|
||||
// 添加产品和渠道的过滤条件
|
||||
if req.SkuCode != "" {
|
||||
qs = qs.Where("product_id = ?", req.SkuCode)
|
||||
}
|
||||
if req.Channel != "" {
|
||||
qs = qs.Where("channel_code = ?", req.Channel)
|
||||
}
|
||||
|
||||
err = qs.Find(&summaryData).Error
|
||||
if err != nil {
|
||||
logger.Errorf("HomepageDataSummary query err: %#v", err)
|
||||
response.Error(c, http.StatusInternalServerError, err, "查询失败")
|
||||
return
|
||||
}
|
||||
|
||||
// 计算留存用户数
|
||||
summaryData.RetainedUserCount = summaryData.TotalUserCount - summaryData.UnsubscribedUserCount
|
||||
|
||||
// 计算留存率
|
||||
if summaryData.TotalUserCount > 0 {
|
||||
summaryData.RetentionRate = fmt.Sprintf("%.2f%%", float64(summaryData.RetainedUserCount)*100.0/float64(summaryData.TotalUserCount))
|
||||
} else {
|
||||
summaryData.RetentionRate = "0.00%"
|
||||
}
|
||||
|
||||
// 计算退订率
|
||||
if summaryData.TotalUserCount > 0 {
|
||||
summaryData.UnsubscribeRate = fmt.Sprintf("%.2f%%", float64(summaryData.UnsubscribedUserCount)*100.0/float64(summaryData.TotalUserCount))
|
||||
summaryData.OneHourUnsubscribeRate = fmt.Sprintf("%.2f%%", float64(summaryData.OneHourUnsubscribedUserCount)*100.0/float64(summaryData.TotalUserCount))
|
||||
} else {
|
||||
summaryData.UnsubscribeRate = "0.00%"
|
||||
summaryData.OneHourUnsubscribeRate = "0.00%"
|
||||
}
|
||||
|
||||
resp.Summary = summaryData
|
||||
|
||||
// 查询每日数据
|
||||
var dailyDataList []models.DailyData
|
||||
dailyQuery := e.Orm.Model(&models.MgOrder{}).
|
||||
Select(`DATE(subscribe_time) AS date,
|
||||
COUNT(*) AS new_user_count,
|
||||
COUNT(CASE WHEN state = 2 THEN 1 END) AS unsubscribed_user_count,
|
||||
COUNT(CASE WHEN is_one_hour_cancel = 1 THEN 1 END) AS unsubscribed_within_one_hour`).
|
||||
Where("subscribe_time >= ? AND subscribe_time <= ?", startTime, endTime)
|
||||
|
||||
// 处理产品编号 (SkuCode) 过滤条件
|
||||
if req.SkuCode != "" {
|
||||
dailyQuery = dailyQuery.Where("product_id = ?", req.SkuCode)
|
||||
}
|
||||
|
||||
// 处理渠道名称 (Channel) 过滤条件
|
||||
if req.Channel != "" {
|
||||
dailyQuery = dailyQuery.Where("channel_code = ?", req.Channel)
|
||||
}
|
||||
|
||||
err = dailyQuery.Group("DATE(subscribe_time)").
|
||||
Order("DATE(subscribe_time)").
|
||||
Find(&dailyDataList).Error
|
||||
if err != nil {
|
||||
logger.Errorf("DailyData query err: %#v", err)
|
||||
response.Error(c, http.StatusInternalServerError, err, "查询失败")
|
||||
return
|
||||
}
|
||||
|
||||
// 计算每日退订率
|
||||
for i := range dailyDataList {
|
||||
if dailyDataList[i].NewUserCount > 0 {
|
||||
dailyDataList[i].UnsubscribeRate = fmt.Sprintf("%.2f%%", float64(dailyDataList[i].UnsubscribedUserCount)*100.0/float64(dailyDataList[i].NewUserCount))
|
||||
dailyDataList[i].UnsubscribeWithinOneHourRate = fmt.Sprintf("%.2f%%", float64(dailyDataList[i].UnsubscribedWithinOneHour)*100.0/float64(dailyDataList[i].NewUserCount))
|
||||
} else {
|
||||
dailyDataList[i].UnsubscribeRate = "0.00%"
|
||||
dailyDataList[i].UnsubscribeWithinOneHourRate = "0.00%"
|
||||
}
|
||||
}
|
||||
|
||||
resp.DailyDataList = dailyDataList
|
||||
|
||||
// 返回结果
|
||||
e.OK(resp, "")
|
||||
}
|
||||
|
||||
// AddChannel 新增渠道
|
||||
// @Summary 新增渠道
|
||||
// @Tags 2024-咪咕-管理后台
|
||||
|
|
|
@ -79,24 +79,28 @@ type MgChannel struct {
|
|||
|
||||
// MgHistoricalSummary 历史汇总查询表对应的结构体
|
||||
type MgHistoricalSummary struct {
|
||||
Date string `gorm:"type:date" json:"date"` // 日期
|
||||
ProductID int64 `json:"product_id"` // 产品ID
|
||||
ChannelCode string `gorm:"size:255" json:"channel_code"` // 渠道编码
|
||||
SubmissionCount int `json:"submission_count"` // 提交数
|
||||
NewUserCount int `json:"new_user_count"` // 新用户数
|
||||
NewUserUnsubWithinHour int `json:"new_user_unsub_within_hour"` // 当日新用户退订数(1小时以内)
|
||||
NewUserUnsubOnDay int `json:"new_user_unsub_on_day"` // 当日新用户退订数
|
||||
Date string `gorm:"type:date" json:"date"` // 日期
|
||||
ProductID int64 `json:"product_id"` // 产品ID
|
||||
ChannelCode string `gorm:"size:255" json:"channel_code"` // 渠道编码
|
||||
SubmissionCount int `json:"submission_count"` // 提交数
|
||||
NewUserCount int `json:"new_user_count"` // 新用户数
|
||||
NewUserUnsubWithinHour int `json:"new_user_unsub_within_hour"` // 当日新用户退订数(1小时以内)
|
||||
NewUserUnsubWithinHourRate string `json:"new_user_unsub_within_hour_rate"` // 当日新用户退订率(1小时以内)
|
||||
NewUserUnsubOnDay int `json:"new_user_unsub_on_day"` // 当日新用户退订数
|
||||
NewUserUnsubOnDayRate string `json:"new_user_unsub_on_day_rate"` // 当日新用户退订率
|
||||
//Province string `gorm:"size:255" json:"province"` // 省份
|
||||
}
|
||||
|
||||
// MgRealtimeSummary 当日实时汇总表对应的结构体
|
||||
type MgRealtimeSummary struct {
|
||||
ProductID int64 `json:"product_id"` // 产品ID
|
||||
ChannelCode string `json:"channel_code"` // 渠道编码
|
||||
SubmissionCount int `json:"submission_count"` // 提交数
|
||||
NewUserCount int `json:"new_user_count"` // 新用户数
|
||||
NewUserUnsubWithinHour int `json:"new_user_unsub_within_hour"` // 当日新用户退订数(1小时以内)
|
||||
NewUserUnsubOnDay int `json:"new_user_unsub_on_day"` // 当日新用户退订数
|
||||
ProductID int64 `json:"product_id"` // 产品ID
|
||||
ChannelCode string `json:"channel_code"` // 渠道编码
|
||||
SubmissionCount int `json:"submission_count"` // 提交数
|
||||
NewUserCount int `json:"new_user_count"` // 新用户数
|
||||
NewUserUnsubWithinHour int `json:"new_user_unsub_within_hour"` // 当日新用户退订数(1小时以内)
|
||||
NewUserUnsubWithinHourRate string `json:"new_user_unsub_within_hour_rate"` // 当日新用户退订率(1小时以内)
|
||||
NewUserUnsubOnDay int `json:"new_user_unsub_on_day"` // 当日新用户退订数
|
||||
NewUserUnsubOnDayRate string `json:"new_user_unsub_on_day_rate"` // 当日新用户退订率
|
||||
//Province string `json:"province"` // 省份
|
||||
}
|
||||
|
||||
|
@ -485,6 +489,38 @@ type DeleteChannelResp struct {
|
|||
// Any relevant response fields can go here
|
||||
}
|
||||
|
||||
type HomepageDataSummaryReq struct {
|
||||
StartTime string `json:"start_time"` // 查询开始时间
|
||||
EndTime string `json:"end_time"` // 查询结束时间
|
||||
SkuCode string `json:"sku_code"` // 产品编号
|
||||
Channel string `json:"channel"` // 渠道名称
|
||||
}
|
||||
|
||||
type DailyData struct {
|
||||
Date string `json:"date"` // 日期
|
||||
NewUserCount int64 `json:"new_user_count"` // 新增用户数
|
||||
UnsubscribedUserCount int64 `json:"unsubscribed_user_count"` // 退订用户数
|
||||
UnsubscribedWithinOneHour int64 `json:"unsubscribed_within_one_hour"` // 1小时内退订用户数
|
||||
UnsubscribeRate string `json:"unsubscribe_rate"` // 退订率
|
||||
UnsubscribeWithinOneHourRate string `json:"unsubscribe_within_one_hour_rate"` // 1小时内退订率
|
||||
}
|
||||
|
||||
type HomepageDataSummaryResp struct {
|
||||
Summary SummaryData `json:"summary"` // 汇总数据
|
||||
DailyDataList []DailyData `json:"daily_data"` // 每天的数据列表
|
||||
}
|
||||
|
||||
// SummaryData represents the overall summary data
|
||||
type SummaryData struct {
|
||||
TotalUserCount int `json:"total_user_count"` // 总用户数
|
||||
UnsubscribedUserCount int `json:"unsubscribed_user_count"` // 退订用户数
|
||||
OneHourUnsubscribedUserCount int `json:"one_hour_unsubscribed_user_count"` // 1小时内退订用户数
|
||||
RetainedUserCount int `json:"retained_user_count"` // 留存用户数
|
||||
UnsubscribeRate string `json:"unsubscribe_rate"` // 退订率 (字符串,保留两位小数,如 "26.35%")
|
||||
OneHourUnsubscribeRate string `json:"one_hour_unsubscribe_rate"` // 1小时退订率 (字符串,保留两位小数,如 "26.35%")
|
||||
RetentionRate string `json:"retention_rate"` // 留存率 (字符串,保留两位小数,如 "73.65%")
|
||||
}
|
||||
|
||||
// MiGuCaptchaRequest 调用下单接口(森越转发)
|
||||
func MiGuCaptchaRequest(r *MiGuSendCaptchaReq) (MiGuRsp, error) {
|
||||
var miGuResp MiGuRsp
|
||||
|
|
|
@ -27,6 +27,7 @@ func registerMiGuControlManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.Gi
|
|||
api.POST("realtime_summary/list", apiMiGu.RealtimeSummaryList) // 当日实时汇总
|
||||
api.POST("user_retention/list", apiMiGu.UserRetentionList) // 用户留存记录
|
||||
api.POST("sys_channel/list", apiMiGu.SysChannelList) // 查询系统所有渠道编码
|
||||
api.POST("home/data", apiMiGu.HomepageDataSummary) // 查询首页汇总数据
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -118,6 +118,39 @@ const docTemplateadmin = `{
|
|||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/admin/home/data": {
|
||||
"post": {
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
"produces": [
|
||||
"application/json"
|
||||
],
|
||||
"tags": [
|
||||
"2024-咪咕-管理后台"
|
||||
],
|
||||
"summary": "查询首页汇总数据",
|
||||
"parameters": [
|
||||
{
|
||||
"description": "查询首页汇总数据",
|
||||
"name": "request",
|
||||
"in": "body",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"$ref": "#/definitions/models.HomepageDataSummaryReq"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/models.HomepageDataSummaryResp"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/admin/order/list": {
|
||||
"post": {
|
||||
"consumes": [
|
||||
|
@ -4738,7 +4771,7 @@ const docTemplateadmin = `{
|
|||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"description": "状态 (0: 停用, 1: 启用) (必填)",
|
||||
"description": "状态 (2: 停用, 1: 启用) (必填)",
|
||||
"type": "integer"
|
||||
},
|
||||
"sub_channel_code": {
|
||||
|
@ -4899,6 +4932,35 @@ const docTemplateadmin = `{
|
|||
}
|
||||
}
|
||||
},
|
||||
"models.DailyData": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"date": {
|
||||
"description": "日期",
|
||||
"type": "string"
|
||||
},
|
||||
"new_user_count": {
|
||||
"description": "新增用户数",
|
||||
"type": "integer"
|
||||
},
|
||||
"unsubscribe_rate": {
|
||||
"description": "退订率",
|
||||
"type": "string"
|
||||
},
|
||||
"unsubscribe_within_one_hour_rate": {
|
||||
"description": "1小时内退订率",
|
||||
"type": "string"
|
||||
},
|
||||
"unsubscribed_user_count": {
|
||||
"description": "退订用户数",
|
||||
"type": "integer"
|
||||
},
|
||||
"unsubscribed_within_one_hour": {
|
||||
"description": "1小时内退订用户数",
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
},
|
||||
"models.HistoricalSummaryListReq": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
@ -4948,6 +5010,47 @@ const docTemplateadmin = `{
|
|||
}
|
||||
}
|
||||
},
|
||||
"models.HomepageDataSummaryReq": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"channel": {
|
||||
"description": "渠道名称",
|
||||
"type": "string"
|
||||
},
|
||||
"end_time": {
|
||||
"description": "查询结束时间",
|
||||
"type": "string"
|
||||
},
|
||||
"sku_code": {
|
||||
"description": "产品编号",
|
||||
"type": "string"
|
||||
},
|
||||
"start_time": {
|
||||
"description": "查询开始时间",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"models.HomepageDataSummaryResp": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"daily_data": {
|
||||
"description": "每天的数据列表",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/models.DailyData"
|
||||
}
|
||||
},
|
||||
"summary": {
|
||||
"description": "汇总数据",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/models.SummaryData"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"models.MgChannel": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
@ -5006,10 +5109,18 @@ const docTemplateadmin = `{
|
|||
"description": "当日新用户退订数",
|
||||
"type": "integer"
|
||||
},
|
||||
"new_user_unsub_on_day_rate": {
|
||||
"description": "当日新用户退订率",
|
||||
"type": "string"
|
||||
},
|
||||
"new_user_unsub_within_hour": {
|
||||
"description": "当日新用户退订数(1小时以内)",
|
||||
"type": "integer"
|
||||
},
|
||||
"new_user_unsub_within_hour_rate": {
|
||||
"description": "当日新用户退订率(1小时以内)",
|
||||
"type": "string"
|
||||
},
|
||||
"product_id": {
|
||||
"description": "产品ID",
|
||||
"type": "integer"
|
||||
|
@ -5133,10 +5244,18 @@ const docTemplateadmin = `{
|
|||
"description": "当日新用户退订数",
|
||||
"type": "integer"
|
||||
},
|
||||
"new_user_unsub_on_day_rate": {
|
||||
"description": "当日新用户退订率",
|
||||
"type": "string"
|
||||
},
|
||||
"new_user_unsub_within_hour": {
|
||||
"description": "当日新用户退订数(1小时以内)",
|
||||
"type": "integer"
|
||||
},
|
||||
"new_user_unsub_within_hour_rate": {
|
||||
"description": "当日新用户退订率(1小时以内)",
|
||||
"type": "string"
|
||||
},
|
||||
"product_id": {
|
||||
"description": "产品ID",
|
||||
"type": "integer"
|
||||
|
@ -5689,6 +5808,39 @@ const docTemplateadmin = `{
|
|||
}
|
||||
}
|
||||
},
|
||||
"models.SummaryData": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"one_hour_unsubscribe_rate": {
|
||||
"description": "1小时退订率 (字符串,保留两位小数,如 \"26.35%\")",
|
||||
"type": "string"
|
||||
},
|
||||
"one_hour_unsubscribed_user_count": {
|
||||
"description": "1小时内退订用户数",
|
||||
"type": "integer"
|
||||
},
|
||||
"retained_user_count": {
|
||||
"description": "留存用户数",
|
||||
"type": "integer"
|
||||
},
|
||||
"retention_rate": {
|
||||
"description": "留存率 (字符串,保留两位小数,如 \"73.65%\")",
|
||||
"type": "string"
|
||||
},
|
||||
"total_user_count": {
|
||||
"description": "总用户数",
|
||||
"type": "integer"
|
||||
},
|
||||
"unsubscribe_rate": {
|
||||
"description": "退订率 (字符串,保留两位小数,如 \"26.35%\")",
|
||||
"type": "string"
|
||||
},
|
||||
"unsubscribed_user_count": {
|
||||
"description": "退订用户数",
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
},
|
||||
"models.SysChannelListReq": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
@ -6144,8 +6296,8 @@ var SwaggerInfoadmin = &swag.Spec{
|
|||
Description: "基于Gin + Vue + Element UI的前后端分离权限管理系统的接口文档\n添加qq群: 521386980 进入技术交流群 请先star,谢谢!",
|
||||
InfoInstanceName: "admin",
|
||||
SwaggerTemplate: docTemplateadmin,
|
||||
//LeftDelim: "{{",
|
||||
//RightDelim: "}}",
|
||||
LeftDelim: "{{",
|
||||
RightDelim: "}}",
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
|
|
@ -110,6 +110,39 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/admin/home/data": {
|
||||
"post": {
|
||||
"consumes": [
|
||||
"application/json"
|
||||
],
|
||||
"produces": [
|
||||
"application/json"
|
||||
],
|
||||
"tags": [
|
||||
"2024-咪咕-管理后台"
|
||||
],
|
||||
"summary": "查询首页汇总数据",
|
||||
"parameters": [
|
||||
{
|
||||
"description": "查询首页汇总数据",
|
||||
"name": "request",
|
||||
"in": "body",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"$ref": "#/definitions/models.HomepageDataSummaryReq"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "OK",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/models.HomepageDataSummaryResp"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/api/v1/admin/order/list": {
|
||||
"post": {
|
||||
"consumes": [
|
||||
|
@ -4730,7 +4763,7 @@
|
|||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"description": "状态 (0: 停用, 1: 启用) (必填)",
|
||||
"description": "状态 (2: 停用, 1: 启用) (必填)",
|
||||
"type": "integer"
|
||||
},
|
||||
"sub_channel_code": {
|
||||
|
@ -4891,6 +4924,35 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"models.DailyData": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"date": {
|
||||
"description": "日期",
|
||||
"type": "string"
|
||||
},
|
||||
"new_user_count": {
|
||||
"description": "新增用户数",
|
||||
"type": "integer"
|
||||
},
|
||||
"unsubscribe_rate": {
|
||||
"description": "退订率",
|
||||
"type": "string"
|
||||
},
|
||||
"unsubscribe_within_one_hour_rate": {
|
||||
"description": "1小时内退订率",
|
||||
"type": "string"
|
||||
},
|
||||
"unsubscribed_user_count": {
|
||||
"description": "退订用户数",
|
||||
"type": "integer"
|
||||
},
|
||||
"unsubscribed_within_one_hour": {
|
||||
"description": "1小时内退订用户数",
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
},
|
||||
"models.HistoricalSummaryListReq": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
@ -4940,6 +5002,47 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"models.HomepageDataSummaryReq": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"channel": {
|
||||
"description": "渠道名称",
|
||||
"type": "string"
|
||||
},
|
||||
"end_time": {
|
||||
"description": "查询结束时间",
|
||||
"type": "string"
|
||||
},
|
||||
"sku_code": {
|
||||
"description": "产品编号",
|
||||
"type": "string"
|
||||
},
|
||||
"start_time": {
|
||||
"description": "查询开始时间",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"models.HomepageDataSummaryResp": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"daily_data": {
|
||||
"description": "每天的数据列表",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/models.DailyData"
|
||||
}
|
||||
},
|
||||
"summary": {
|
||||
"description": "汇总数据",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/models.SummaryData"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"models.MgChannel": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
@ -4998,10 +5101,18 @@
|
|||
"description": "当日新用户退订数",
|
||||
"type": "integer"
|
||||
},
|
||||
"new_user_unsub_on_day_rate": {
|
||||
"description": "当日新用户退订率",
|
||||
"type": "string"
|
||||
},
|
||||
"new_user_unsub_within_hour": {
|
||||
"description": "当日新用户退订数(1小时以内)",
|
||||
"type": "integer"
|
||||
},
|
||||
"new_user_unsub_within_hour_rate": {
|
||||
"description": "当日新用户退订率(1小时以内)",
|
||||
"type": "string"
|
||||
},
|
||||
"product_id": {
|
||||
"description": "产品ID",
|
||||
"type": "integer"
|
||||
|
@ -5125,10 +5236,18 @@
|
|||
"description": "当日新用户退订数",
|
||||
"type": "integer"
|
||||
},
|
||||
"new_user_unsub_on_day_rate": {
|
||||
"description": "当日新用户退订率",
|
||||
"type": "string"
|
||||
},
|
||||
"new_user_unsub_within_hour": {
|
||||
"description": "当日新用户退订数(1小时以内)",
|
||||
"type": "integer"
|
||||
},
|
||||
"new_user_unsub_within_hour_rate": {
|
||||
"description": "当日新用户退订率(1小时以内)",
|
||||
"type": "string"
|
||||
},
|
||||
"product_id": {
|
||||
"description": "产品ID",
|
||||
"type": "integer"
|
||||
|
@ -5681,6 +5800,39 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"models.SummaryData": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"one_hour_unsubscribe_rate": {
|
||||
"description": "1小时退订率 (字符串,保留两位小数,如 \"26.35%\")",
|
||||
"type": "string"
|
||||
},
|
||||
"one_hour_unsubscribed_user_count": {
|
||||
"description": "1小时内退订用户数",
|
||||
"type": "integer"
|
||||
},
|
||||
"retained_user_count": {
|
||||
"description": "留存用户数",
|
||||
"type": "integer"
|
||||
},
|
||||
"retention_rate": {
|
||||
"description": "留存率 (字符串,保留两位小数,如 \"73.65%\")",
|
||||
"type": "string"
|
||||
},
|
||||
"total_user_count": {
|
||||
"description": "总用户数",
|
||||
"type": "integer"
|
||||
},
|
||||
"unsubscribe_rate": {
|
||||
"description": "退订率 (字符串,保留两位小数,如 \"26.35%\")",
|
||||
"type": "string"
|
||||
},
|
||||
"unsubscribed_user_count": {
|
||||
"description": "退订用户数",
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
},
|
||||
"models.SysChannelListReq": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
|
|
@ -872,7 +872,7 @@ definitions:
|
|||
description: 备注 (非必填)
|
||||
type: string
|
||||
status:
|
||||
description: '状态 (0: 停用, 1: 启用) (必填)'
|
||||
description: '状态 (2: 停用, 1: 启用) (必填)'
|
||||
type: integer
|
||||
sub_channel_code:
|
||||
description: 子渠道编码 (必填)
|
||||
|
@ -989,6 +989,27 @@ definitions:
|
|||
requestId:
|
||||
type: string
|
||||
type: object
|
||||
models.DailyData:
|
||||
properties:
|
||||
date:
|
||||
description: 日期
|
||||
type: string
|
||||
new_user_count:
|
||||
description: 新增用户数
|
||||
type: integer
|
||||
unsubscribe_rate:
|
||||
description: 退订率
|
||||
type: string
|
||||
unsubscribe_within_one_hour_rate:
|
||||
description: 1小时内退订率
|
||||
type: string
|
||||
unsubscribed_user_count:
|
||||
description: 退订用户数
|
||||
type: integer
|
||||
unsubscribed_within_one_hour:
|
||||
description: 1小时内退订用户数
|
||||
type: integer
|
||||
type: object
|
||||
models.HistoricalSummaryListReq:
|
||||
properties:
|
||||
channel:
|
||||
|
@ -1023,6 +1044,33 @@ definitions:
|
|||
page_size:
|
||||
type: integer
|
||||
type: object
|
||||
models.HomepageDataSummaryReq:
|
||||
properties:
|
||||
channel:
|
||||
description: 渠道名称
|
||||
type: string
|
||||
end_time:
|
||||
description: 查询结束时间
|
||||
type: string
|
||||
sku_code:
|
||||
description: 产品编号
|
||||
type: string
|
||||
start_time:
|
||||
description: 查询开始时间
|
||||
type: string
|
||||
type: object
|
||||
models.HomepageDataSummaryResp:
|
||||
properties:
|
||||
daily_data:
|
||||
description: 每天的数据列表
|
||||
items:
|
||||
$ref: '#/definitions/models.DailyData'
|
||||
type: array
|
||||
summary:
|
||||
allOf:
|
||||
- $ref: '#/definitions/models.SummaryData'
|
||||
description: 汇总数据
|
||||
type: object
|
||||
models.MgChannel:
|
||||
properties:
|
||||
createdAt:
|
||||
|
@ -1065,9 +1113,15 @@ definitions:
|
|||
new_user_unsub_on_day:
|
||||
description: 当日新用户退订数
|
||||
type: integer
|
||||
new_user_unsub_on_day_rate:
|
||||
description: 当日新用户退订率
|
||||
type: string
|
||||
new_user_unsub_within_hour:
|
||||
description: 当日新用户退订数(1小时以内)
|
||||
type: integer
|
||||
new_user_unsub_within_hour_rate:
|
||||
description: 当日新用户退订率(1小时以内)
|
||||
type: string
|
||||
product_id:
|
||||
description: 产品ID
|
||||
type: integer
|
||||
|
@ -1157,9 +1211,15 @@ definitions:
|
|||
new_user_unsub_on_day:
|
||||
description: 当日新用户退订数
|
||||
type: integer
|
||||
new_user_unsub_on_day_rate:
|
||||
description: 当日新用户退订率
|
||||
type: string
|
||||
new_user_unsub_within_hour:
|
||||
description: 当日新用户退订数(1小时以内)
|
||||
type: integer
|
||||
new_user_unsub_within_hour_rate:
|
||||
description: 当日新用户退订率(1小时以内)
|
||||
type: string
|
||||
product_id:
|
||||
description: 产品ID
|
||||
type: integer
|
||||
|
@ -1548,6 +1608,30 @@ definitions:
|
|||
linkId:
|
||||
type: string
|
||||
type: object
|
||||
models.SummaryData:
|
||||
properties:
|
||||
one_hour_unsubscribe_rate:
|
||||
description: 1小时退订率 (字符串,保留两位小数,如 "26.35%")
|
||||
type: string
|
||||
one_hour_unsubscribed_user_count:
|
||||
description: 1小时内退订用户数
|
||||
type: integer
|
||||
retained_user_count:
|
||||
description: 留存用户数
|
||||
type: integer
|
||||
retention_rate:
|
||||
description: 留存率 (字符串,保留两位小数,如 "73.65%")
|
||||
type: string
|
||||
total_user_count:
|
||||
description: 总用户数
|
||||
type: integer
|
||||
unsubscribe_rate:
|
||||
description: 退订率 (字符串,保留两位小数,如 "26.35%")
|
||||
type: string
|
||||
unsubscribed_user_count:
|
||||
description: 退订用户数
|
||||
type: integer
|
||||
type: object
|
||||
models.SysChannelListReq:
|
||||
properties:
|
||||
page_num:
|
||||
|
@ -1917,6 +2001,27 @@ paths:
|
|||
summary: 历史汇总查询
|
||||
tags:
|
||||
- 2024-咪咕-管理后台
|
||||
/api/v1/admin/home/data:
|
||||
post:
|
||||
consumes:
|
||||
- application/json
|
||||
parameters:
|
||||
- description: 查询首页汇总数据
|
||||
in: body
|
||||
name: request
|
||||
required: true
|
||||
schema:
|
||||
$ref: '#/definitions/models.HomepageDataSummaryReq'
|
||||
produces:
|
||||
- application/json
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
schema:
|
||||
$ref: '#/definitions/models.HomepageDataSummaryResp'
|
||||
summary: 查询首页汇总数据
|
||||
tags:
|
||||
- 2024-咪咕-管理后台
|
||||
/api/v1/admin/order/list:
|
||||
post:
|
||||
consumes:
|
||||
|
|
Loading…
Reference in New Issue
Block a user