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; /// /// 订单服务 /// [ApiExplorerSettings(GroupName = "OpenApi")] [Route("/ProviderService")] public partial class OrderService( IOrderRepository orderRepository, IOrderOperationRecordEsRepository orderOperationRecordEsRepository, ITrackPullConfigRepository trackPullConfigRepository, IMessagePublisher messagePublisher, ITrackDetailsEsRepository trackDetailsEsRepository, IServiceProvider serviceProvider) : ApplicationServiceBase { /// /// 删除订单 /// /// /// /// [HttpPost("Order/Delete")] public async Task 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(); await handler.HandleOrderDeletedOrCompletedAsync(order); } catch (Exception ex) { Log.Error(ex.ToString()); } finally { await scope.DisposeAsync(); } }); } }