2
This commit is contained in:
@@ -51,23 +51,30 @@ type UVTrendData struct {
|
||||
|
||||
// GetDailyUV 获取UV趋势
|
||||
func GetDailyUV(startDate, endDate string) ([]UVTrendData, error) {
|
||||
query := config.DB.Model(&models.UserAccessLog{}).
|
||||
Select("FROM_UNIXTIME(access_time, '%Y-%m-%d') as date, COUNT(DISTINCT user_ip) as count")
|
||||
|
||||
// 确定日期范围
|
||||
var startTime, endTime time.Time
|
||||
if startDate != "" {
|
||||
startUnix := parseDateToUnix(startDate, false)
|
||||
query = query.Where("access_time >= ?", startUnix)
|
||||
startTime = time.Unix(startUnix, 0)
|
||||
} else {
|
||||
// 默认最近7天
|
||||
startUnix := time.Now().AddDate(0, 0, -6).Unix()
|
||||
query = query.Where("access_time >= ?", startUnix)
|
||||
startTime = time.Now().AddDate(0, 0, -6)
|
||||
startTime = time.Date(startTime.Year(), startTime.Month(), startTime.Day(), 0, 0, 0, 0, time.Local)
|
||||
}
|
||||
|
||||
if endDate != "" {
|
||||
endUnix := parseDateToUnix(endDate, true)
|
||||
query = query.Where("access_time <= ?", endUnix)
|
||||
endTime = time.Unix(endUnix, 0)
|
||||
} else {
|
||||
endTime = time.Now()
|
||||
endTime = time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 23, 59, 59, 0, time.Local)
|
||||
}
|
||||
|
||||
// 查询数据库
|
||||
query := config.DB.Model(&models.UserAccessLog{}).
|
||||
Select("FROM_UNIXTIME(access_time, '%Y-%m-%d') as date, COUNT(DISTINCT user_ip) as count").
|
||||
Where("access_time >= ?", startTime.Unix()).
|
||||
Where("access_time <= ?", endTime.Unix())
|
||||
|
||||
var results []UVTrendData
|
||||
err := query.Group("date").
|
||||
Order("date ASC").
|
||||
@@ -77,13 +84,36 @@ func GetDailyUV(startDate, endDate string) ([]UVTrendData, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 暂未实现真实的同比环比计算逻辑,设为0
|
||||
for i := range results {
|
||||
results[i].YoY = 0
|
||||
results[i].MoM = 0
|
||||
// 创建日期到数据的映射
|
||||
resultMap := make(map[string]UVTrendData)
|
||||
for _, r := range results {
|
||||
resultMap[r.Date] = r
|
||||
}
|
||||
|
||||
return results, nil
|
||||
// 生成完整日期列表
|
||||
var fullResults []UVTrendData
|
||||
current := time.Date(startTime.Year(), startTime.Month(), startTime.Day(), 0, 0, 0, 0, time.Local)
|
||||
endDay := time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, time.Local)
|
||||
|
||||
for !current.After(endDay) {
|
||||
dateStr := current.Format("2006-01-02")
|
||||
if data, exists := resultMap[dateStr]; exists {
|
||||
data.YoY = 0
|
||||
data.MoM = 0
|
||||
fullResults = append(fullResults, data)
|
||||
} else {
|
||||
// 填充0值
|
||||
fullResults = append(fullResults, UVTrendData{
|
||||
Date: dateStr,
|
||||
Count: 0,
|
||||
YoY: 0,
|
||||
MoM: 0,
|
||||
})
|
||||
}
|
||||
current = current.AddDate(0, 0, 1)
|
||||
}
|
||||
|
||||
return fullResults, nil
|
||||
}
|
||||
|
||||
// GetUserRegions 获取用户地域分布
|
||||
|
||||
@@ -352,23 +352,31 @@ func GetTopPosts(limit int) ([]models.Post, error) {
|
||||
|
||||
// GetNewPostsTrend 获取新增文章趋势
|
||||
func GetNewPostsTrend(startDate, endDate string) ([]TrendData, error) {
|
||||
query := config.DB.Model(&models.Post{}).
|
||||
Select("FROM_UNIXTIME(created_at, '%Y-%m-%d') as date, COUNT(*) as count").
|
||||
Where("deleted_at = ?", 0)
|
||||
|
||||
// 确定日期范围
|
||||
var startTime, endTime time.Time
|
||||
if startDate != "" {
|
||||
startUnix := parseDateToUnix(startDate, false)
|
||||
query = query.Where("created_at >= ?", startUnix)
|
||||
startTime = time.Unix(startUnix, 0)
|
||||
} else {
|
||||
startUnix := time.Now().AddDate(0, 0, -6).Unix()
|
||||
query = query.Where("created_at >= ?", startUnix)
|
||||
startTime = time.Now().AddDate(0, 0, -6)
|
||||
startTime = time.Date(startTime.Year(), startTime.Month(), startTime.Day(), 0, 0, 0, 0, time.Local)
|
||||
}
|
||||
|
||||
if endDate != "" {
|
||||
endUnix := parseDateToUnix(endDate, true)
|
||||
query = query.Where("created_at <= ?", endUnix)
|
||||
endTime = time.Unix(endUnix, 0)
|
||||
} else {
|
||||
endTime = time.Now()
|
||||
endTime = time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 23, 59, 59, 0, time.Local)
|
||||
}
|
||||
|
||||
// 查询数据库
|
||||
query := config.DB.Model(&models.Post{}).
|
||||
Select("FROM_UNIXTIME(created_at, '%Y-%m-%d') as date, COUNT(*) as count").
|
||||
Where("deleted_at = ?", 0).
|
||||
Where("created_at >= ?", startTime.Unix()).
|
||||
Where("created_at <= ?", endTime.Unix())
|
||||
|
||||
var results []TrendData
|
||||
err := query.Group("date").
|
||||
Order("date ASC").
|
||||
@@ -378,13 +386,36 @@ func GetNewPostsTrend(startDate, endDate string) ([]TrendData, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Set YoY and MoM to 0
|
||||
for i := range results {
|
||||
results[i].YoY = 0
|
||||
results[i].MoM = 0
|
||||
// 创建日期到数据的映射
|
||||
resultMap := make(map[string]TrendData)
|
||||
for _, r := range results {
|
||||
resultMap[r.Date] = r
|
||||
}
|
||||
|
||||
return results, nil
|
||||
// 生成完整日期列表
|
||||
var fullResults []TrendData
|
||||
current := time.Date(startTime.Year(), startTime.Month(), startTime.Day(), 0, 0, 0, 0, time.Local)
|
||||
endDay := time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, time.Local)
|
||||
|
||||
for !current.After(endDay) {
|
||||
dateStr := current.Format("2006-01-02")
|
||||
if data, exists := resultMap[dateStr]; exists {
|
||||
data.YoY = 0
|
||||
data.MoM = 0
|
||||
fullResults = append(fullResults, data)
|
||||
} else {
|
||||
// 填充0值
|
||||
fullResults = append(fullResults, TrendData{
|
||||
Date: dateStr,
|
||||
Count: 0,
|
||||
YoY: 0,
|
||||
MoM: 0,
|
||||
})
|
||||
}
|
||||
current = current.AddDate(0, 0, 1)
|
||||
}
|
||||
|
||||
return fullResults, nil
|
||||
}
|
||||
|
||||
// GetPostHistory 获取文章修改历史
|
||||
|
||||
Reference in New Issue
Block a user