From 962802d54ff1e05205aa0c9587d3679dc04dfc7f Mon Sep 17 00:00:00 2001 From: chenlin Date: Thu, 6 Feb 2025 16:55:59 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BC=98=E5=8C=96=E8=90=A5=E6=94=B6?= =?UTF-8?q?=E5=88=86=E6=9E=90=E6=8E=A5=E5=8F=A3=EF=BC=8C"=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E6=9C=89=E6=95=88=E7=94=A8=E6=88=B7=E6=95=B0"?= =?UTF-8?q?=E4=B9=8B=E5=89=8D=E5=8F=AA=E8=AE=A1=E7=AE=97=E4=BA=86=E5=BD=93?= =?UTF-8?q?=E6=9C=88=E5=92=8C=E4=B8=8A=E4=B8=AA=E6=9C=88=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=EF=BC=9B=E7=9B=AE=E5=89=8D=E5=B7=B2=E6=94=B9=E6=88=90=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E5=BD=93=E6=9C=88=E4=B9=8B=E5=89=8D=E7=9A=84=E6=89=80?= =?UTF-8?q?=E6=9C=89=E6=95=B0=E6=8D=AE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/apis/migumanage/migu_admin.go | 87 +++++++++++++++++++++---- 1 file changed, 73 insertions(+), 14 deletions(-) diff --git a/app/admin/apis/migumanage/migu_admin.go b/app/admin/apis/migumanage/migu_admin.go index 65bcd4b..11993a9 100644 --- a/app/admin/apis/migumanage/migu_admin.go +++ b/app/admin/apis/migumanage/migu_admin.go @@ -7,6 +7,7 @@ import ( "github.com/go-admin-team/go-admin-core/logger" "github.com/go-admin-team/go-admin-core/sdk/pkg/response" "go-admin/app/admin/models" + "gorm.io/gorm" "net/http" "sort" "strconv" @@ -2056,26 +2057,44 @@ func (e MiGuDeployService) CalculateRevenueAnalysis(c *gin.Context) { // 查询每个月的上个月未退订用户数 for i := 0; i < len(result); i++ { - // 获取当前记录的月份 currentMonth := result[i].Month - // 计算上个月的月份字符串 - currentMonthDate, _ := time.Parse("2006-01", currentMonth) - lastMonth := currentMonthDate.AddDate(0, -1, 0).Format("2006-01") - - // 查询上个月未退订的用户数 - var lastMonthValidUsersCount int64 - err = e.Orm.Model(&models.MgOrder{}). - Where("unsubscribe_time IS NULL"). - Where("DATE_FORMAT(subscribe_time, '%Y-%m') = ?", lastMonth). - Count(&lastMonthValidUsersCount).Error + // 查询当前月之前所有月份未退订的用户数 + totalValidUsers, err := GetTotalValidUsers(e.Orm, currentMonth) if err != nil { - response.Error(c, http.StatusInternalServerError, err, "上个月数据查询失败") + response.Error(c, http.StatusInternalServerError, err, "未退订用户查询失败") return } - // 将上个月的未退订用户数累加到当前月的有效用户数 - result[i].ValidUsersCount += int(lastMonthValidUsersCount) + // 查询当前月之前所有月份在本月2号之后退订的用户数 + totalUnsubscribedUsers, err := GetTotalUnsubscribedUsers(e.Orm, currentMonth) + if err != nil { + response.Error(c, http.StatusInternalServerError, err, "退订用户查询失败") + return + } + + result[i].ValidUsersCount += totalValidUsers + totalUnsubscribedUsers + + //// 获取当前记录的月份 + //currentMonth := result[i].Month + // + //// 计算上个月的月份字符串 + //currentMonthDate, _ := time.Parse("2006-01", currentMonth) + //lastMonth := currentMonthDate.AddDate(0, -1, 0).Format("2006-01") + // + //// 查询上个月未退订的用户数 + //var lastMonthValidUsersCount int64 + //err = e.Orm.Model(&models.MgOrder{}). + // Where("unsubscribe_time IS NULL"). + // Where("DATE_FORMAT(subscribe_time, '%Y-%m') = ?", lastMonth). + // Count(&lastMonthValidUsersCount).Error + //if err != nil { + // response.Error(c, http.StatusInternalServerError, err, "上个月数据查询失败") + // return + //} + // + //// 将上个月的未退订用户数累加到当前月的有效用户数 + //result[i].ValidUsersCount += int(lastMonthValidUsersCount) } // 计算总的新用户数和有效用户数 @@ -2095,6 +2114,46 @@ func (e MiGuDeployService) CalculateRevenueAnalysis(c *gin.Context) { response.OK(c, resp, "查询成功") } +// GetTotalValidUsers 计算所有之前月份的未退订用户总数 +func GetTotalValidUsers(db *gorm.DB, currentMonth string) (int, error) { + var totalValidUsers int + + err := db.Raw(` + SELECT + COUNT(*) + FROM mg_order + WHERE unsubscribe_time IS NULL + AND DATE_FORMAT(subscribe_time, '%Y-%m') < ?`, currentMonth).Scan(&totalValidUsers).Error + + if err != nil { + return 0, err + } + + return totalValidUsers, nil +} + +// GetTotalUnsubscribedUsers 计算所有之前月份在本月2号之后退订的用户总数 +func GetTotalUnsubscribedUsers(db *gorm.DB, currentMonth string) (int, error) { + var totalUnsubscribedUsers int + + // 计算当前月份的 2 号 00:00:00 + currentMonthFirstDay := currentMonth + "-02 00:00:00" + + err := db.Raw(` + SELECT + COUNT(*) + FROM mg_order + WHERE unsubscribe_time >= ? + AND DATE_FORMAT(subscribe_time, '%Y-%m') < ?`, + currentMonthFirstDay, currentMonth).Scan(&totalUnsubscribedUsers).Error + + if err != nil { + return 0, err + } + + return totalUnsubscribedUsers, nil +} + // AddChannel 新增渠道 // @Summary 新增渠道 // @Tags 2024-咪咕-管理后台