fix
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 39s
Docker Build & Deploy / Deploy to Production (push) Successful in 12s
Docker Build & Deploy / Cleanup Dangling Images (push) Successful in 1s
Docker Build & Deploy / WeChat Notification (push) Successful in 2s
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 39s
Docker Build & Deploy / Deploy to Production (push) Successful in 12s
Docker Build & Deploy / Cleanup Dangling Images (push) Successful in 1s
Docker Build & Deploy / WeChat Notification (push) Successful in 2s
This commit is contained in:
@@ -58,6 +58,7 @@ public class BudgetService(
|
||||
Category = c.Category,
|
||||
SelectedCategories = c.SelectedCategories,
|
||||
NoLimit = c.NoLimit,
|
||||
IsMandatoryExpense = c.IsMandatoryExpense,
|
||||
Description = c.Description,
|
||||
PeriodStart = periodRange.start,
|
||||
PeriodEnd = periodRange.end,
|
||||
@@ -206,7 +207,8 @@ public class BudgetService(
|
||||
Limit = budget.Limit,
|
||||
Category = budget.Category,
|
||||
SelectedCategories = selectedCategories,
|
||||
StartDate = new DateTime(referenceDate.Year, referenceDate.Month, 1)
|
||||
StartDate = new DateTime(referenceDate.Year, referenceDate.Month, 1),
|
||||
IsMandatoryExpense = budget.IsMandatoryExpense
|
||||
}, referenceDate);
|
||||
if (budget.Type == statType)
|
||||
{
|
||||
@@ -254,6 +256,7 @@ public class BudgetService(
|
||||
Category = b.Category,
|
||||
SelectedCategories = b.SelectedCategories,
|
||||
NoLimit = b.NoLimit,
|
||||
IsMandatoryExpense = b.IsMandatoryExpense,
|
||||
Description = b.Description
|
||||
}).ToArray();
|
||||
|
||||
@@ -437,7 +440,40 @@ public class BudgetService(
|
||||
var referenceDate = now ?? DateTime.Now;
|
||||
var (startDate, endDate) = GetPeriodRange(budget.StartDate, budget.Type, referenceDate);
|
||||
|
||||
return await budgetRepository.GetCurrentAmountAsync(budget, startDate, endDate);
|
||||
var actualAmount = await budgetRepository.GetCurrentAmountAsync(budget, startDate, endDate);
|
||||
|
||||
// 如果是硬性消费,且是当前年当前月,则根据经过的天数累加
|
||||
if (actualAmount == 0
|
||||
&& budget.IsMandatoryExpense
|
||||
&& referenceDate.Year == startDate.Year
|
||||
&& referenceDate.Month == startDate.Month)
|
||||
{
|
||||
if (budget.Type == BudgetPeriodType.Month)
|
||||
{
|
||||
// 计算本月的天数
|
||||
var daysInMonth = DateTime.DaysInMonth(referenceDate.Year, referenceDate.Month);
|
||||
// 计算当前已经过的天数(包括今天)
|
||||
var daysElapsed = referenceDate.Day;
|
||||
// 根据预算金额和经过天数计算应累加的金额
|
||||
var mandatoryAccumulation = budget.Limit * daysElapsed / daysInMonth;
|
||||
// 返回实际消费和硬性消费累加中的较大值
|
||||
return mandatoryAccumulation;
|
||||
}
|
||||
else if (budget.Type == BudgetPeriodType.Year)
|
||||
{
|
||||
// 计算本年的天数(考虑闰年)
|
||||
var daysInYear = DateTime.IsLeapYear(referenceDate.Year) ? 366 : 365;
|
||||
// 计算当前已经过的天数(包括今天)
|
||||
var daysElapsed = referenceDate.DayOfYear;
|
||||
// 根据预算金额和经过天数计算应累加的金额
|
||||
var mandatoryAccumulation = budget.Limit * daysElapsed / daysInYear;
|
||||
// 返回实际消费和硬性消费累加中的较大值
|
||||
return mandatoryAccumulation;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return actualAmount;
|
||||
}
|
||||
|
||||
internal static (DateTime start, DateTime end) GetPeriodRange(DateTime startDate, BudgetPeriodType type, DateTime referenceDate)
|
||||
@@ -793,6 +829,7 @@ public record BudgetResult
|
||||
public DateTime? PeriodStart { get; set; }
|
||||
public DateTime? PeriodEnd { get; set; }
|
||||
public bool NoLimit { get; set; } = false;
|
||||
public bool IsMandatoryExpense { get; set; } = false;
|
||||
public string Description { get; set; } = string.Empty;
|
||||
|
||||
public static BudgetResult FromEntity(
|
||||
@@ -825,6 +862,7 @@ public record BudgetResult
|
||||
PeriodStart = start,
|
||||
PeriodEnd = end,
|
||||
NoLimit = entity.NoLimit,
|
||||
IsMandatoryExpense = entity.IsMandatoryExpense,
|
||||
Description = description
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user