71 lines
2.3 KiB
C#
71 lines
2.3 KiB
C#
using Fake.Messaging;
|
|
using TrackCenter.Application.Dtos.ProvideServices;
|
|
using TrackCenter.Domain.Aggregates.OrderAggregate;
|
|
using TrackCenter.Domain.Aggregates.TrackDetailsAggregate;
|
|
using TrackCenter.Domain.Aggregates.TrackPullAggregate;
|
|
using TrackCenter.Application.Services.Warning.Handlers;
|
|
using TrackCenter.Repository.Aggregates.OrderAggregate;
|
|
|
|
namespace TrackCenter.Application.Services.ProvideServices;
|
|
|
|
/// <summary>
|
|
/// 订单服务
|
|
/// </summary>
|
|
[ApiExplorerSettings(GroupName = "OpenApi")]
|
|
[Route("/ProviderService")]
|
|
public partial class OrderService(
|
|
IOrderRepository orderRepository,
|
|
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
|
|
ITrackPullConfigRepository trackPullConfigRepository,
|
|
IMessagePublisher messagePublisher,
|
|
ITrackDetailsEsRepository trackDetailsEsRepository,
|
|
IServiceProvider serviceProvider)
|
|
: ApplicationServiceBase
|
|
{
|
|
/// <summary>
|
|
/// 删除订单
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="BusinessException"></exception>
|
|
[HttpPost("Order/Delete")]
|
|
public async Task<IdBaseDto> DeleteOrderAsync(DeleteOrderInput input)
|
|
{
|
|
var order = await orderRepository.GetFirstAsync(x =>
|
|
x.AppKey == input.AppKey && x.OrderType == input.OrderType && x.OrderNo == input.OrderNo);
|
|
if (order == null)
|
|
{
|
|
throw ProviderServiceActionResult.Exception("删除订单失败", $"订单:{input.OrderNo}不存在");
|
|
}
|
|
|
|
await orderRepository.DeleteOrderAsync(order.Id);
|
|
|
|
// 预警计算
|
|
WarningCalc_OrderDeletedOrCompleted(order);
|
|
|
|
return new IdBaseDto { Id = order.Id };
|
|
}
|
|
|
|
private void WarningCalc_OrderDeletedOrCompleted(OrderEntity order)
|
|
{
|
|
order.IsDeleted = true;
|
|
_ = Task.Run(async () =>
|
|
{
|
|
var scope = serviceProvider.CreateAsyncScope();
|
|
try
|
|
{
|
|
var handler = scope.ServiceProvider.GetRequiredService<IOrderWarningHandler>();
|
|
await handler.HandleOrderDeletedOrCompletedAsync(order);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.Error(ex.ToString());
|
|
}
|
|
finally
|
|
{
|
|
await scope.DisposeAsync();
|
|
}
|
|
});
|
|
}
|
|
}
|