1、优化营收分析接口,"当前有效用户数"之前只计算了当月和上个月数据;目前已改成统计当月之前的所有数据。

This commit is contained in:
chenlin 2025-02-06 16:55:59 +08:00
parent e8fc850ca1
commit 962802d54f

View File

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