namespace WebApi.Controllers;
using Repository;
///
/// 周期性账单控制器
///
[ApiController]
[Route("api/[controller]/[action]")]
public class TransactionPeriodicController(
ITransactionPeriodicRepository periodicRepository,
ITransactionPeriodicService periodicService,
ILogger logger
) : ControllerBase
{
///
/// 获取周期性账单列表(分页)
///
[HttpGet]
public async Task> GetListAsync(
[FromQuery] int pageIndex = 1,
[FromQuery] int pageSize = 20,
[FromQuery] string? searchKeyword = null
)
{
try
{
var list = await periodicRepository.GetPagedListAsync(pageIndex, pageSize, searchKeyword);
var total = await periodicRepository.GetTotalCountAsync(searchKeyword);
return new PagedResponse
{
Success = true,
Data = list.ToArray(),
Total = (int)total
};
}
catch (Exception ex)
{
logger.LogError(ex, "获取周期性账单列表失败");
return PagedResponse.Fail($"获取列表失败: {ex.Message}");
}
}
///
/// 根据ID获取周期性账单详情
///
[HttpGet("{id}")]
public async Task> GetByIdAsync(long id)
{
try
{
var periodic = await periodicRepository.GetByIdAsync(id);
if (periodic == null)
{
return BaseResponse.Fail("周期性账单不存在");
}
return new BaseResponse
{
Success = true,
Data = periodic
};
}
catch (Exception ex)
{
logger.LogError(ex, "获取周期性账单详情失败,ID: {Id}", id);
return BaseResponse.Fail($"获取详情失败: {ex.Message}");
}
}
///
/// 创建周期性账单
///
[HttpPost]
public async Task> CreateAsync([FromBody] CreatePeriodicRequest request)
{
try
{
var periodic = new TransactionPeriodic
{
PeriodicType = request.PeriodicType,
PeriodicConfig = request.PeriodicConfig ?? string.Empty,
Amount = request.Amount,
Type = request.Type,
Classify = request.Classify ?? string.Empty,
Reason = request.Reason ?? string.Empty,
IsEnabled = true
};
// 计算下次执行时间
periodic.NextExecuteTime = periodicService.CalculateNextExecuteTime(periodic, DateTime.Now);
var success = await periodicRepository.AddAsync(periodic);
if (!success)
{
return BaseResponse.Fail("创建周期性账单失败");
}
return new BaseResponse
{
Success = true,
Data = periodic,
Message = "创建成功"
};
}
catch (Exception ex)
{
logger.LogError(ex, "创建周期性账单失败");
return BaseResponse.Fail($"创建失败: {ex.Message}");
}
}
///
/// 更新周期性账单
///
[HttpPost]
public async Task> UpdateAsync([FromBody] UpdatePeriodicRequest request)
{
try
{
var periodic = await periodicRepository.GetByIdAsync(request.Id);
if (periodic == null)
{
return BaseResponse