using Oms.Application.Dtos.Orders; using Oms.Domain.OrdersAggregate.Consts; using Oms.Domain.OrdersAggregate.Entities; using Oms.Domain.SystemAggregate.Entities; namespace Oms.Application.Services.Orders; /// /// 揽收订单 → 小包创建入参组装。 /// public static class PickupOrderParcelBuilder { public static OrderParcelCreateInput Build( OrderPickupCreateInput input, CustomerSenderAddress senderAddress, WarehouseAddress warehouse, int customerId, string? senderCountryCode) { var cargoName = input.CargoName.Trim(); var weight = input.ActualWeight; var clientNo = string.IsNullOrWhiteSpace(input.ClientNo) ? $"PK{DateTime.Now:yyyyMMddHHmmss}{Random.Shared.Next(1000, 9999)}" : input.ClientNo.Trim(); var receiverName = string.IsNullOrWhiteSpace(warehouse.Recipient) ? warehouse.WarehouseName : warehouse.Recipient!.Trim(); var street = string.IsNullOrWhiteSpace(warehouse.ShippingAddress) ? warehouse.WarehouseName : warehouse.ShippingAddress!.Trim(); return new OrderParcelCreateInput { RequestId = string.IsNullOrWhiteSpace(input.RequestId) ? null : input.RequestId.Trim(), ClientNo = clientNo, ProductCode = input.ProductCode.Trim(), WarehouseId = input.WarehouseId, CustomerId = customerId, Length = 1, Width = 1, Height = 1, ActualWeight = weight, CargoAttribute = string.IsNullOrWhiteSpace(input.CargoAttribute) ? CargoAttributeCodes.General : input.CargoAttribute.Trim(), DeclaredCurrency = "CNY", DeclaredSum = 1, Quantity = 1, Sender = new OrderParcelSenderInput { SenderName = senderAddress.SenderName, Company = senderAddress.Company, Phone = senderAddress.Phone, TelePhone = senderAddress.TelePhone, Email = senderAddress.Email, CountryCode = senderCountryCode ?? "CN", Province = senderAddress.Province, City = senderAddress.City, ZipCode = senderAddress.ZipCode, StreetAddress1 = senderAddress.StreetAddress1, StreetAddress2 = senderAddress.StreetAddress2, StreetAddress3 = senderAddress.StreetAddress3, HouseNumber = senderAddress.HouseNumber }, Receiver = new OrderParcelReceiverInput { RecipientsName = receiverName, Phone = warehouse.ContactPhone, CountryCode = "CN", ZipCode = "000000", StreetAddress1 = street }, Items = [ new OrderParcelItemInput { CnName = cargoName, EnName = cargoName, UnitPrice = 1, UnitWeight = weight, Quantity = 1, Amount = 1, Weight = weight } ] }; } }