This commit is contained in:
2025-12-06 15:46:46 +08:00
parent 89367fb2ee
commit af88bcc8eb
4 changed files with 55 additions and 16 deletions

View File

@@ -2275,6 +2275,10 @@ func (s *StatisticsApplicationServiceImpl) AdminGetApiDomainStatistics(ctx conte
s.logger.Error("解析开始日期失败", zap.Error(err))
return nil, err
}
// 如果是月统计将开始日期调整为当月1号00:00:00
if period == "month" {
startTime = time.Date(startTime.Year(), startTime.Month(), 1, 0, 0, 0, 0, startTime.Location())
}
}
if endDate != "" {
endTime, err = time.Parse("2006-01-02", endDate)
@@ -2282,6 +2286,14 @@ func (s *StatisticsApplicationServiceImpl) AdminGetApiDomainStatistics(ctx conte
s.logger.Error("解析结束日期失败", zap.Error(err))
return nil, err
}
if period == "month" {
// 如果是月统计将结束日期调整为下个月1号00:00:00
// 这样在查询时使用 created_at < endTime 可以包含整个月份的数据到本月最后一天23:59:59.999
endTime = time.Date(endTime.Year(), endTime.Month()+1, 1, 0, 0, 0, 0, endTime.Location())
} else {
// 日统计将结束日期设置为次日00:00:00这样在查询时使用 created_at < endTime 可以包含当天的所有数据
endTime = endTime.AddDate(0, 0, 1)
}
}
// 获取API调用统计数据
@@ -2318,6 +2330,10 @@ func (s *StatisticsApplicationServiceImpl) AdminGetConsumptionDomainStatistics(c
s.logger.Error("解析开始日期失败", zap.Error(err))
return nil, err
}
// 如果是月统计将开始日期调整为当月1号00:00:00
if period == "month" {
startTime = time.Date(startTime.Year(), startTime.Month(), 1, 0, 0, 0, 0, startTime.Location())
}
}
if endDate != "" {
endTime, err = time.Parse("2006-01-02", endDate)
@@ -2325,6 +2341,14 @@ func (s *StatisticsApplicationServiceImpl) AdminGetConsumptionDomainStatistics(c
s.logger.Error("解析结束日期失败", zap.Error(err))
return nil, err
}
if period == "month" {
// 如果是月统计将结束日期调整为下个月1号00:00:00
// 这样在查询时使用 created_at < endTime 可以包含整个月份的数据到本月最后一天23:59:59.999
endTime = time.Date(endTime.Year(), endTime.Month()+1, 1, 0, 0, 0, 0, endTime.Location())
} else {
// 日统计将结束日期设置为次日00:00:00这样在查询时使用 created_at < endTime 可以包含当天的所有数据
endTime = endTime.AddDate(0, 0, 1)
}
}
// 获取消费统计数据
@@ -2370,7 +2394,7 @@ func (s *StatisticsApplicationServiceImpl) AdminGetConsumptionDomainStatistics(c
defaultEndDate := time.Now()
defaultStartDate := defaultEndDate.AddDate(0, 0, -7)
consumptionTrend, err = s.walletTransactionRepo.GetSystemDailyStats(ctx, defaultStartDate, defaultEndDate)
if err != nil {
if err != nil {
s.logger.Error("获取消费每日趋势失败", zap.Error(err))
return nil, err
}
@@ -2406,6 +2430,10 @@ func (s *StatisticsApplicationServiceImpl) AdminGetRechargeDomainStatistics(ctx
s.logger.Error("解析开始日期失败", zap.Error(err))
return nil, err
}
// 如果是月统计将开始日期调整为当月1号00:00:00
if period == "month" {
startTime = time.Date(startTime.Year(), startTime.Month(), 1, 0, 0, 0, 0, startTime.Location())
}
}
if endDate != "" {
endTime, err = time.Parse("2006-01-02", endDate)
@@ -2413,6 +2441,14 @@ func (s *StatisticsApplicationServiceImpl) AdminGetRechargeDomainStatistics(ctx
s.logger.Error("解析结束日期失败", zap.Error(err))
return nil, err
}
if period == "month" {
// 如果是月统计将结束日期调整为下个月1号00:00:00
// 这样在查询时使用 created_at < endTime 可以包含整个月份的数据到本月最后一天23:59:59.999
endTime = time.Date(endTime.Year(), endTime.Month()+1, 1, 0, 0, 0, 0, endTime.Location())
} else {
// 日统计将结束日期设置为次日00:00:00这样在查询时使用 created_at < endTime 可以包含当天的所有数据
endTime = endTime.AddDate(0, 0, 1)
}
}
// 获取充值统计数据
@@ -2716,15 +2752,15 @@ func (s *StatisticsApplicationServiceImpl) AdminGetTodayCertifiedEnterprises(ctx
}
enterprise := map[string]interface{}{
"id": cert.ID,
"user_id": cert.UserID,
"username": user.Username,
"enterprise_name": enterpriseInfo.CompanyName,
"legal_person_name": enterpriseInfo.LegalPersonName,
"legal_person_phone": enterpriseInfo.LegalPersonPhone,
"unified_social_code": enterpriseInfo.UnifiedSocialCode,
"enterprise_address": enterpriseInfo.EnterpriseAddress,
"certified_at": cert.CompletedAt.Format(time.RFC3339),
"id": cert.ID,
"user_id": cert.UserID,
"username": user.Username,
"enterprise_name": enterpriseInfo.CompanyName,
"legal_person_name": enterpriseInfo.LegalPersonName,
"legal_person_phone": enterpriseInfo.LegalPersonPhone,
"unified_social_code": enterpriseInfo.UnifiedSocialCode,
"enterprise_address": enterpriseInfo.EnterpriseAddress,
"certified_at": cert.CompletedAt.Format(time.RFC3339),
}
enterprises = append(enterprises, enterprise)
}

View File

@@ -431,10 +431,11 @@ func (r *GormApiCallRepository) GetSystemTotalCalls(ctx context.Context) (int64,
}
// GetSystemCallsByDateRange 获取系统指定时间范围内的API调用次数
// endDate 应该是结束日期当天的次日00:00:00日统计或下个月1号00:00:00月统计使用 < 而不是 <=
func (r *GormApiCallRepository) GetSystemCallsByDateRange(ctx context.Context, startDate, endDate time.Time) (int64, error) {
var count int64
err := r.GetDB(ctx).Model(&entities.ApiCall{}).
Where("created_at >= ? AND created_at <= ?", startDate, endDate).
Where("created_at >= ? AND created_at < ?", startDate, endDate).
Count(&count).Error
return count, err
}
@@ -472,7 +473,7 @@ func (r *GormApiCallRepository) GetSystemMonthlyStats(ctx context.Context, start
COUNT(*) as calls
FROM api_calls
WHERE created_at >= $1
AND created_at <= $2
AND created_at < $2
GROUP BY TO_CHAR(created_at, 'YYYY-MM')
ORDER BY month ASC
`

View File

@@ -426,10 +426,11 @@ func (r *GormRechargeRecordRepository) GetSystemTotalAmount(ctx context.Context)
}
// GetSystemAmountByDateRange 获取系统指定时间范围内的充值金额(排除赠送)
// endDate 应该是结束日期当天的次日00:00:00日统计或下个月1号00:00:00月统计使用 < 而不是 <=
func (r *GormRechargeRecordRepository) GetSystemAmountByDateRange(ctx context.Context, startDate, endDate time.Time) (float64, error) {
var total float64
err := r.GetDB(ctx).Model(&entities.RechargeRecord{}).
Where("status = ? AND recharge_type != ? AND created_at >= ? AND created_at <= ?", entities.RechargeStatusSuccess, entities.RechargeTypeGift, startDate, endDate).
Where("status = ? AND recharge_type != ? AND created_at >= ? AND created_at < ?", entities.RechargeStatusSuccess, entities.RechargeTypeGift, startDate, endDate).
Select("COALESCE(SUM(amount), 0)").
Scan(&total).Error
return total, err
@@ -472,7 +473,7 @@ func (r *GormRechargeRecordRepository) GetSystemMonthlyStats(ctx context.Context
WHERE status = ?
AND recharge_type != ?
AND created_at >= ?
AND created_at <= ?
AND created_at < ?
GROUP BY TO_CHAR(created_at, 'YYYY-MM')
ORDER BY month ASC
`

View File

@@ -586,10 +586,11 @@ func (r *GormWalletTransactionRepository) GetSystemTotalAmount(ctx context.Conte
}
// GetSystemAmountByDateRange 获取系统指定时间范围内的消费金额
// endDate 应该是结束日期当天的次日00:00:00日统计或下个月1号00:00:00月统计使用 < 而不是 <=
func (r *GormWalletTransactionRepository) GetSystemAmountByDateRange(ctx context.Context, startDate, endDate time.Time) (float64, error) {
var total float64
err := r.GetDB(ctx).Model(&entities.WalletTransaction{}).
Where("created_at >= ? AND created_at <= ?", startDate, endDate).
Where("created_at >= ? AND created_at < ?", startDate, endDate).
Select("COALESCE(SUM(amount), 0)").
Scan(&total).Error
return total, err
@@ -628,7 +629,7 @@ func (r *GormWalletTransactionRepository) GetSystemMonthlyStats(ctx context.Cont
COALESCE(SUM(amount), 0) as amount
FROM wallet_transactions
WHERE created_at >= ?
AND created_at <= ?
AND created_at < ?
GROUP BY TO_CHAR(created_at, 'YYYY-MM')
ORDER BY month ASC
`