fix
This commit is contained in:
131
Application/EmailMessageApplication.cs
Normal file
131
Application/EmailMessageApplication.cs
Normal file
@@ -0,0 +1,131 @@
|
||||
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() ?? "未知"
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user