1
This commit is contained in:
@@ -10,6 +10,11 @@ public interface ITransactionStatisticsService
|
||||
|
||||
Task<List<CategoryStatistics>> GetCategoryStatisticsAsync(int year, int month, TransactionType type);
|
||||
|
||||
/// <summary>
|
||||
/// 按日期范围获取分类统计数据
|
||||
/// </summary>
|
||||
Task<List<CategoryStatistics>> GetCategoryStatisticsByDateRangeAsync(DateTime startDate, DateTime endDate, TransactionType type);
|
||||
|
||||
Task<List<TrendStatistics>> GetTrendStatisticsAsync(int startYear, int startMonth, int monthCount);
|
||||
|
||||
Task<(List<ReasonGroupDto> list, int total)> GetReasonGroupsAsync(int pageIndex = 1, int pageSize = 20);
|
||||
@@ -145,6 +150,40 @@ public class TransactionStatisticsService(
|
||||
return categoryGroups;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 按日期范围获取分类统计数据
|
||||
/// </summary>
|
||||
public async Task<List<CategoryStatistics>> GetCategoryStatisticsByDateRangeAsync(DateTime startDate, DateTime endDate, TransactionType type)
|
||||
{
|
||||
var records = await transactionRepository.QueryAsync(
|
||||
startDate: startDate,
|
||||
endDate: endDate,
|
||||
type: type,
|
||||
pageSize: int.MaxValue);
|
||||
|
||||
var categoryGroups = records
|
||||
.GroupBy(t => t.Classify)
|
||||
.Select(g => new CategoryStatistics
|
||||
{
|
||||
Classify = g.Key,
|
||||
Amount = g.Sum(t => Math.Abs(t.Amount)),
|
||||
Count = g.Count()
|
||||
})
|
||||
.OrderByDescending(c => c.Amount)
|
||||
.ToList();
|
||||
|
||||
var total = categoryGroups.Sum(c => c.Amount);
|
||||
if (total > 0)
|
||||
{
|
||||
foreach (var category in categoryGroups)
|
||||
{
|
||||
category.Percent = Math.Round((category.Amount / total) * 100, 1);
|
||||
}
|
||||
}
|
||||
|
||||
return categoryGroups;
|
||||
}
|
||||
|
||||
public async Task<List<TrendStatistics>> GetTrendStatisticsAsync(int startYear, int startMonth, int monthCount)
|
||||
{
|
||||
var trends = new List<TrendStatistics>();
|
||||
|
||||
Reference in New Issue
Block a user