namespace Repository;
///
/// 周期性账单仓储接口
///
public interface ITransactionPeriodicRepository : IBaseRepository
{
///
/// 获取分页列表
///
Task> GetPagedListAsync(int pageIndex, int pageSize, string? searchKeyword = null);
///
/// 获取总数
///
Task GetTotalCountAsync(string? searchKeyword = null);
///
/// 获取需要执行的周期性账单(包含今天应该执行的)
///
Task> GetPendingPeriodicBillsAsync();
///
/// 更新执行时间
///
Task UpdateExecuteTimeAsync(long id, DateTime lastExecuteTime, DateTime? nextExecuteTime);
}
///
/// 周期性账单仓储实现
///
public class TransactionPeriodicRepository(IFreeSql freeSql)
: BaseRepository(freeSql), ITransactionPeriodicRepository
{
public async Task> GetPagedListAsync(
int pageIndex,
int pageSize,
string? searchKeyword = null)
{
var query = FreeSql.Select();
// 搜索关键词
if (!string.IsNullOrWhiteSpace(searchKeyword))
{
query = query.Where(x =>
x.Reason.Contains(searchKeyword) ||
x.Classify.Contains(searchKeyword));
}
return await query
.OrderByDescending(x => x.CreateTime)
.Skip((pageIndex - 1) * pageSize)
.Take(pageSize)
.ToListAsync();
}
public async Task GetTotalCountAsync(string? searchKeyword = null)
{
var query = FreeSql.Select();
if (!string.IsNullOrWhiteSpace(searchKeyword))
{
query = query.Where(x =>
x.Reason.Contains(searchKeyword) ||
x.Classify.Contains(searchKeyword));
}
return await query.CountAsync();
}
public async Task> GetPendingPeriodicBillsAsync()
{
var now = DateTime.Now;
return await FreeSql.Select()
.Where(x => x.IsEnabled)
.Where(x => x.NextExecuteTime == null || x.NextExecuteTime <= now)
.ToListAsync();
}
public async Task UpdateExecuteTimeAsync(long id, DateTime lastExecuteTime, DateTime? nextExecuteTime)
{
try
{
var result = await FreeSql.Update()
.Set(x => x.LastExecuteTime, lastExecuteTime)
.Set(x => x.NextExecuteTime, nextExecuteTime)
.Set(x => x.UpdateTime, DateTime.Now)
.Where(x => x.Id == id)
.ExecuteAffrowsAsync();
return result == 1;
}
catch
{
return false;
}
}
}