All checks were successful
Build and Deploy / deploy (push) Successful in 1m2s
Co-authored-by: Cursor <cursoragent@cursor.com>
100 lines
2.9 KiB
C#
100 lines
2.9 KiB
C#
namespace Oms.Application.Services.Orders;
|
|
|
|
using Oms.Application.Dtos.Orders;
|
|
|
|
/// <summary>
|
|
/// 查价入参完整度(用于估算逻辑与对客提示)。
|
|
/// </summary>
|
|
internal sealed class PriceCheckInputProfile
|
|
{
|
|
public bool HasDimensions { get; init; }
|
|
|
|
public bool HasPostalCode { get; init; }
|
|
|
|
public bool HasProvince { get; init; }
|
|
|
|
public bool HasCity { get; init; }
|
|
|
|
public bool HasCargoTypeFilter { get; init; }
|
|
|
|
public bool HasWarehouseFilter { get; init; }
|
|
|
|
public bool HasShippingMethodFilter { get; init; }
|
|
|
|
public IReadOnlyList<string> MissingFieldCodes { get; init; } = [];
|
|
|
|
public static PriceCheckInputProfile FromInput(OrderPriceCheckInput input)
|
|
{
|
|
var hasDimensions = input.Length is > 0 && input.Width is > 0 && input.Height is > 0;
|
|
var hasPostal = !string.IsNullOrWhiteSpace(input.PostalCode);
|
|
var hasProvince = !string.IsNullOrWhiteSpace(input.DestinationProvince);
|
|
var hasCity = !string.IsNullOrWhiteSpace(input.DestinationCity);
|
|
var cargoCodes = (input.CargoTypes ?? [])
|
|
.Where(x => !string.IsNullOrWhiteSpace(x))
|
|
.ToList();
|
|
if (cargoCodes.Count == 0 && !string.IsNullOrWhiteSpace(input.CargoType))
|
|
{
|
|
cargoCodes.Add(input.CargoType.Trim());
|
|
}
|
|
|
|
var hasCargoFilter = cargoCodes.Count > 0;
|
|
var hasWarehouseFilter = (input.WarehouseIds ?? []).Any(x => x > 0);
|
|
var hasShippingFilter = !string.IsNullOrWhiteSpace(input.ShippingMethod);
|
|
|
|
var missing = new List<string>();
|
|
if (!hasDimensions)
|
|
{
|
|
missing.Add(PriceCheckMissingFieldCodes.Dimensions);
|
|
}
|
|
|
|
if (!hasPostal)
|
|
{
|
|
missing.Add(PriceCheckMissingFieldCodes.PostalCode);
|
|
}
|
|
|
|
if (!hasProvince)
|
|
{
|
|
missing.Add(PriceCheckMissingFieldCodes.Province);
|
|
}
|
|
|
|
if (!hasCargoFilter)
|
|
{
|
|
missing.Add(PriceCheckMissingFieldCodes.CargoType);
|
|
}
|
|
|
|
if (!hasWarehouseFilter)
|
|
{
|
|
missing.Add(PriceCheckMissingFieldCodes.Warehouse);
|
|
}
|
|
|
|
return new PriceCheckInputProfile
|
|
{
|
|
HasDimensions = hasDimensions,
|
|
HasPostalCode = hasPostal,
|
|
HasProvince = hasProvince,
|
|
HasCity = hasCity,
|
|
HasCargoTypeFilter = hasCargoFilter,
|
|
HasWarehouseFilter = hasWarehouseFilter,
|
|
HasShippingMethodFilter = hasShippingFilter,
|
|
MissingFieldCodes = missing
|
|
};
|
|
}
|
|
|
|
public bool IsQueryEstimated => MissingFieldCodes.Count > 0;
|
|
}
|
|
|
|
internal static class PriceCheckMissingFieldCodes
|
|
{
|
|
public const string Dimensions = "dimensions";
|
|
|
|
public const string PostalCode = "postalCode";
|
|
|
|
public const string Province = "province";
|
|
|
|
public const string City = "city";
|
|
|
|
public const string CargoType = "cargoType";
|
|
|
|
public const string Warehouse = "warehouse";
|
|
}
|