1.增加首页数据查询接口;

2.历史汇总和实时汇总增加退订率字段;
This commit is contained in:
chenlin 2024-10-22 16:22:38 +08:00
parent aa4a350da7
commit 2f382db28d
6 changed files with 620 additions and 24 deletions

View File

@ -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-咪咕-管理后台

View File

@ -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

View File

@ -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) // 查询首页汇总数据
}
}

View File

@ -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() {

View File

@ -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": {

View File

@ -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: