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