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; } } }