namespace WebApi.Controllers.Dto; public class BudgetDto { public long Id { get; set; } public string Name { get; set; } = string.Empty; public BudgetPeriodType Type { get; set; } public decimal Limit { get; set; } public decimal Current { get; set; } public BudgetCategory Category { get; set; } public string[] SelectedCategories { get; set; } = Array.Empty(); public bool IsStopped { get; set; } public string StartDate { get; set; } = string.Empty; public string Period { get; set; } = string.Empty; public DateTime? PeriodStart { get; set; } public DateTime? PeriodEnd { get; set; } public string Description { get; set; } = string.Empty; public static BudgetDto FromEntity( BudgetRecord entity, decimal currentAmount = 0, DateTime? referenceDate = null, string description = "") { var date = referenceDate ?? DateTime.Now; var (start, end) = BudgetService.GetPeriodRange(entity.StartDate, entity.Type, date); return new BudgetDto { Id = entity.Id, Name = entity.Name, Type = entity.Type, Limit = entity.Limit, Current = currentAmount, Category = entity.Category, SelectedCategories = string.IsNullOrEmpty(entity.SelectedCategories) ? Array.Empty() : entity.SelectedCategories.Split(','), IsStopped = entity.IsStopped, StartDate = entity.StartDate.ToString("yyyy-MM-dd"), Period = entity.Type switch { BudgetPeriodType.Year => $"{start:yy}年", BudgetPeriodType.Month => $"{start:yy}年第{start.Month}月", _ => $"{start:yyyy-MM-dd} ~ {end:yyyy-MM-dd}" }, PeriodStart = start, PeriodEnd = end, Description = description }; } } public class CreateBudgetDto { public string Name { get; set; } = string.Empty; public BudgetPeriodType Type { get; set; } = BudgetPeriodType.Month; public decimal Limit { get; set; } public BudgetCategory Category { get; set; } public string[] SelectedCategories { get; set; } = Array.Empty(); public DateTime? StartDate { get; set; } } public class UpdateBudgetDto : CreateBudgetDto { public long Id { get; set; } public bool IsStopped { get; set; } }