fix
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 22s
Docker Build & Deploy / Deploy to Production (push) Successful in 5s
Docker Build & Deploy / Cleanup Dangling Images (push) Successful in 1s
Docker Build & Deploy / WeChat Notification (push) Successful in 1s

This commit is contained in:
SunCheng
2026-01-21 18:52:31 +08:00
parent b2e903e968
commit 64aa24c07b
6 changed files with 326 additions and 127 deletions

View File

@@ -32,7 +32,8 @@ public class BudgetService(
IOpenAiService openAiService,
IMessageService messageService,
ILogger<BudgetService> logger,
IBudgetSavingsService budgetSavingsService
IBudgetSavingsService budgetSavingsService,
IDateTimeProvider dateTimeProvider
) : IBudgetService
{
public async Task<List<BudgetResult>> GetListAsync(DateTime referenceDate)
@@ -40,8 +41,8 @@ public class BudgetService(
var year = referenceDate.Year;
var month = referenceDate.Month;
var isArchive = year < DateTime.Now.Year
|| (year == DateTime.Now.Year && month < DateTime.Now.Month);
var isArchive = year < dateTimeProvider.Now.Year
|| (year == dateTimeProvider.Now.Year && month < dateTimeProvider.Now.Month);
if (isArchive)
{
@@ -49,7 +50,7 @@ public class BudgetService(
if (archive != null)
{
var (start, end) = GetPeriodRange(DateTime.Now, BudgetPeriodType.Month, referenceDate);
var (start, end) = GetPeriodRange(dateTimeProvider.Now, BudgetPeriodType.Month, referenceDate);
return [.. archive.Content.Select(c => new BudgetResult
{
Id = c.Id,
@@ -123,7 +124,7 @@ public class BudgetService(
public async Task<List<UncoveredCategoryDetail>> GetUncoveredCategoriesAsync(BudgetCategory category, DateTime? referenceDate = null)
{
var date = referenceDate ?? DateTime.Now;
var date = referenceDate ?? dateTimeProvider.Now;
var transactionType = category switch
{
BudgetCategory.Expense => TransactionType.Expense,
@@ -282,7 +283,7 @@ public class BudgetService(
groupByMonth);
decimal accumulated = 0;
var now = DateTime.Now;
var now = dateTimeProvider.Now;
if (statType == BudgetPeriodType.Month)
{
@@ -360,7 +361,7 @@ public class BudgetService(
if (archive != null)
{
archive.Content = content;
archive.ArchiveDate = DateTime.Now;
archive.ArchiveDate = dateTimeProvider.Now;
archive.ExpenseSurplus = expenseSurplus;
archive.IncomeSurplus = incomeSurplus;
if (!await budgetArchiveRepository.UpdateAsync(archive))
@@ -375,7 +376,7 @@ public class BudgetService(
Year = year,
Month = month,
Content = content,
ArchiveDate = DateTime.Now,
ArchiveDate = dateTimeProvider.Now,
ExpenseSurplus = expenseSurplus,
IncomeSurplus = incomeSurplus
};
@@ -503,7 +504,7 @@ public class BudgetService(
11. 不要使用 div 包裹大段内容
【系统信息】
当前时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}
当前时间:{dateTimeProvider.Now:yyyy-MM-dd HH:mm:ss}
预算归档周期:{year}年{month}月
直接输出纯净 HTML 内容,不要带有 Markdown 代码块包裹。
@@ -532,7 +533,7 @@ public class BudgetService(
private async Task<decimal> CalculateCurrentAmountAsync(BudgetRecord budget, DateTime? now = null)
{
var referenceDate = now ?? DateTime.Now;
var referenceDate = now ?? dateTimeProvider.Now;
var (startDate, endDate) = GetPeriodRange(budget.StartDate, budget.Type, referenceDate);
var actualAmount = await budgetRepository.GetCurrentAmountAsync(budget, startDate, endDate);
@@ -541,7 +542,7 @@ public class BudgetService(
if (actualAmount == 0
&& budget.IsMandatoryExpense
&& referenceDate.Year == startDate.Year
&& referenceDate.Month == startDate.Month)
&& (budget.Type == BudgetPeriodType.Year || referenceDate.Month == startDate.Month))
{
if (budget.Type == BudgetPeriodType.Month)
{
@@ -616,11 +617,11 @@ public record BudgetResult
public static BudgetResult FromEntity(
BudgetRecord entity,
decimal currentAmount = 0,
DateTime? referenceDate = null,
decimal currentAmount,
DateTime referenceDate,
string description = "")
{
var date = referenceDate ?? DateTime.Now;
var date = referenceDate;
var (start, end) = BudgetService.GetPeriodRange(entity.StartDate, entity.Type, date);
return new BudgetResult