admin/src/Oms.Application/Services/Orders/PickupOrderParcelBuilder.cs
zzh 341a318f0b feat: 客户发件地址与揽收订单,复用小包创建全链路。
新增地址簿 CRUD、pickup/create、订单 orderSource 筛选;附带包裹商品图片上传接口。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-15 18:58:48 +08:00

90 lines
3.2 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 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
}
]
};
}
}