using Fake.Application; using Newtonsoft.Json; using Oms.Application.Dtos.Orders; using Oms.Application.Messaging; using Oms.Application.Services.Orders.Batch; using Oms.Application.Services.Orders.Templates; using Oms.Domain.OrdersAggregate.Consts; namespace Oms.Application.Services.Orders; public partial class OrderService { private IOrderBatchJobPublisher BatchJobPublisher => LazyServiceProvider.GetRequiredService(); /// /// 批量 Worker 导入单行 Excel 数据。 /// public async Task ImportRowForBatchAsync( OrderBatchImportRowPayload payload, int operatorUserId, CancellationToken cancellationToken = default) { var template = await OrderTemplateRepository.FirstOrDefaultAsync(x => x.Id == payload.TemplateId, cancellationToken) ?? throw new BusinessException("模板不存在"); OrderTemplateImportMapping.EnsureTemplateReadyForImport(template); var mapping = OrderTemplateImportMapping.Resolve(template); var sourceValues = JsonConvert.DeserializeObject>(payload.RowDataJson) ?? throw new BusinessException("行数据无效"); var input = OrderTemplateRowMapper.MapToParcelCreateInput(sourceValues, mapping, payload.CustomerId); return await CreateParcelForBatchAsync(input, operatorUserId, cancellationToken); } public async Task TryResolveImportOrderIdAsync( OrderBatchImportRowPayload payload, CancellationToken cancellationToken = default) { try { var template = await OrderTemplateRepository.FirstOrDefaultAsync(x => x.Id == payload.TemplateId, cancellationToken); if (template == null) { return null; } var mapping = OrderTemplateImportMapping.Resolve(template); var sourceValues = JsonConvert.DeserializeObject>(payload.RowDataJson); if (sourceValues == null || sourceValues.Count == 0) { return null; } var input = OrderTemplateRowMapper.MapToParcelCreateInput(sourceValues, mapping, payload.CustomerId); if (string.IsNullOrWhiteSpace(input.ClientNo)) { return null; } var order = await OrderRepository.GetByCustomerAndClientNoAsync( payload.CustomerId, input.ClientNo.Trim(), cancellationToken); return order?.Id; } catch { return null; } } /// /// 批量 Worker 创建小包订单。 /// public async Task CreateParcelForBatchAsync( OrderParcelCreateInput input, int operatorUserId, CancellationToken cancellationToken = default) { return await CreateParcelForBatchAsync(input, operatorUserId, orderSource: null, cancellationToken); } /// /// 批量 Worker 创建小包订单(可指定 )。 /// public async Task CreateParcelForBatchAsync( OrderParcelCreateInput input, int operatorUserId, string? orderSource, CancellationToken cancellationToken = default) { ParcelCreateContext? createContext = null; if (!string.IsNullOrWhiteSpace(orderSource)) { createContext = new ParcelCreateContext { OrderSource = orderSource.Trim() }; } return await CreateParcelCoreAsync(input, operatorUserId, createContext); } }