using Application.Dto.Email; using Service.EmailServices; namespace Application; /// /// 邮件消息应用服务接口 /// public interface IEmailMessageApplication { /// /// 获取邮件列表(分页) /// Task GetListAsync(EmailQueryRequest request); /// /// 根据ID获取邮件详情 /// Task GetByIdAsync(long id); /// /// 删除邮件 /// Task DeleteByIdAsync(long id); /// /// 重新分析邮件并刷新交易记录 /// Task RefreshTransactionRecordsAsync(long id); /// /// 立即同步邮件 /// Task SyncEmailsAsync(); } /// /// 邮件消息应用服务实现 /// public class EmailMessageApplication( IEmailMessageRepository emailRepository, ITransactionRecordRepository transactionRepository, IEmailHandleService emailHandleService, IEmailSyncService emailSyncService, ILogger logger ) : IEmailMessageApplication { public async Task GetListAsync(EmailQueryRequest request) { var (list, lastTime, lastId) = await emailRepository.GetPagedListAsync( request.LastReceivedDate, request.LastId); var total = await emailRepository.GetTotalCountAsync(); // 为每个邮件获取账单数量 var emailResponses = new List(); foreach (var email in list) { var transactionCount = await transactionRepository.GetCountByEmailIdAsync(email.Id); emailResponses.Add(MapToResponse(email, transactionCount)); } return new EmailPagedResult { Data = emailResponses.ToArray(), Total = (int)total, LastId = lastId, LastTime = lastTime }; } public async Task GetByIdAsync(long id) { var email = await emailRepository.GetByIdAsync(id); if (email == null) { throw new NotFoundException("邮件不存在"); } // 获取账单数量 var transactionCount = await transactionRepository.GetCountByEmailIdAsync(id); return MapToResponse(email, transactionCount); } public async Task DeleteByIdAsync(long id) { var success = await emailRepository.DeleteAsync(id); if (!success) { throw new BusinessException("删除邮件失败,邮件不存在"); } } public async Task RefreshTransactionRecordsAsync(long id) { var email = await emailRepository.GetByIdAsync(id); if (email == null) { throw new NotFoundException("邮件不存在"); } var success = await emailHandleService.RefreshTransactionRecordsAsync(id); if (!success) { throw new BusinessException("重新分析失败"); } } public async Task SyncEmailsAsync() { await emailSyncService.SyncEmailsAsync(); } private static EmailMessageResponse MapToResponse(EmailMessage email, int transactionCount) { return new EmailMessageResponse { Id = email.Id, Subject = email.Subject, From = email.From, Body = email.Body, HtmlBody = email.HtmlBody, ReceivedDate = email.ReceivedDate, CreateTime = email.CreateTime, UpdateTime = email.UpdateTime, TransactionCount = transactionCount, ToName = email.To.Split('<').FirstOrDefault()?.Trim() ?? "未知" }; } }