Files
EmailBill/Application/EmailMessageApplication.cs

132 lines
3.7 KiB
C#
Raw Normal View History

2026-02-10 17:49:19 +08:00
using Application.Dto.Email;
using Service.EmailServices;
namespace Application;
/// <summary>
/// 邮件消息应用服务接口
/// </summary>
public interface IEmailMessageApplication
{
/// <summary>
/// 获取邮件列表(分页)
/// </summary>
Task<EmailPagedResult> GetListAsync(EmailQueryRequest request);
/// <summary>
/// 根据ID获取邮件详情
/// </summary>
Task<EmailMessageResponse> GetByIdAsync(long id);
/// <summary>
/// 删除邮件
/// </summary>
Task DeleteByIdAsync(long id);
/// <summary>
/// 重新分析邮件并刷新交易记录
/// </summary>
Task RefreshTransactionRecordsAsync(long id);
/// <summary>
/// 立即同步邮件
/// </summary>
Task SyncEmailsAsync();
}
/// <summary>
/// 邮件消息应用服务实现
/// </summary>
public class EmailMessageApplication(
IEmailMessageRepository emailRepository,
ITransactionRecordRepository transactionRepository,
IEmailHandleService emailHandleService,
IEmailSyncService emailSyncService,
ILogger<EmailMessageApplication> logger
) : IEmailMessageApplication
{
public async Task<EmailPagedResult> GetListAsync(EmailQueryRequest request)
{
var (list, lastTime, lastId) = await emailRepository.GetPagedListAsync(
request.LastReceivedDate,
request.LastId);
var total = await emailRepository.GetTotalCountAsync();
// 为每个邮件获取账单数量
var emailResponses = new List<EmailMessageResponse>();
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<EmailMessageResponse> 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() ?? "未知"
};
}
}