All checks were successful
Build and Deploy / deploy (push) Successful in 1m47s
Co-authored-by: Cursor <cursoragent@cursor.com>
130 lines
4.9 KiB
C#
130 lines
4.9 KiB
C#
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;
|
|
|
|
/// <summary>
|
|
/// 揽收订单 → 小包创建入参组装。
|
|
/// </summary>
|
|
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 warehouseContact = string.IsNullOrWhiteSpace(warehouse.Recipient)
|
|
? warehouse.WarehouseName
|
|
: warehouse.Recipient!.Trim();
|
|
var warehouseStreet = string.IsNullOrWhiteSpace(warehouse.ShippingAddress)
|
|
? warehouse.WarehouseName
|
|
: warehouse.ShippingAddress!.Trim();
|
|
|
|
var isReverse = string.Equals(
|
|
PickupDirectionCodes.NormalizeOrDefault(input.Direction),
|
|
PickupDirectionCodes.Reverse,
|
|
StringComparison.OrdinalIgnoreCase);
|
|
|
|
// 正向:客户揽收地址 → 仓库;逆向:仓库 → 客户揽收地址
|
|
var sender = isReverse
|
|
? new OrderParcelSenderInput
|
|
{
|
|
SenderName = warehouseContact,
|
|
Phone = warehouse.ContactPhone,
|
|
CountryCode = "CN",
|
|
StreetAddress1 = warehouseStreet,
|
|
ZipCode = "000000"
|
|
}
|
|
: 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
|
|
};
|
|
|
|
var receiver = isReverse
|
|
? new OrderParcelReceiverInput
|
|
{
|
|
RecipientsName = senderAddress.SenderName,
|
|
CompanyName = senderAddress.Company,
|
|
Phone = senderAddress.Phone,
|
|
TelePhone = senderAddress.TelePhone,
|
|
Email = senderAddress.Email,
|
|
CountryCode = senderCountryCode ?? "CN",
|
|
Province = senderAddress.Province,
|
|
City = senderAddress.City,
|
|
ZipCode = senderAddress.ZipCode ?? "000000",
|
|
StreetAddress1 = senderAddress.StreetAddress1,
|
|
StreetAddress2 = senderAddress.StreetAddress2,
|
|
StreetAddress3 = senderAddress.StreetAddress3,
|
|
StreetNumber = senderAddress.HouseNumber
|
|
}
|
|
: new OrderParcelReceiverInput
|
|
{
|
|
RecipientsName = warehouseContact,
|
|
Phone = warehouse.ContactPhone,
|
|
CountryCode = "CN",
|
|
ZipCode = "000000",
|
|
StreetAddress1 = warehouseStreet
|
|
};
|
|
|
|
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,
|
|
InboundMethod = OrderInboundMethodCodes.DoorPickup,
|
|
SenderAddressId = input.SenderAddressId,
|
|
ExpectPickupTime = input.PickupTime,
|
|
PickupDirection = PickupDirectionCodes.NormalizeOrDefault(input.Direction),
|
|
Sender = sender,
|
|
Receiver = receiver,
|
|
Items =
|
|
[
|
|
new OrderParcelItemInput
|
|
{
|
|
CnName = cargoName,
|
|
EnName = cargoName,
|
|
UnitPrice = 1,
|
|
UnitWeight = weight,
|
|
Quantity = 1,
|
|
Amount = 1,
|
|
Weight = weight
|
|
}
|
|
]
|
|
};
|
|
}
|
|
}
|