admin/src/Oms.Application/Services/Orders/PriceCheckHintBuilder.cs
zzh 74a71991b2
All checks were successful
Build and Deploy / deploy (push) Successful in 1m2s
feat: 统一价格/黑名单/偏远分区匹配,并落库 MatchDim
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-05 16:12:09 +08:00

80 lines
3.1 KiB
C#

using Oms.Application.Dtos.Orders;
namespace Oms.Application.Services.Orders;
internal static class PriceCheckHintBuilder
{
public static OrderPriceCheckHintOutput BuildQueryHint(PriceCheckInputProfile profile)
{
var missing = profile.MissingFieldCodes.ToList();
var disclaimers = BuildDisclaimers(missing);
if (profile.IsQueryEstimated)
{
disclaimers.Add("以下报价可能含估算项,最终以预报/入库计费为准。");
}
return new OrderPriceCheckHintOutput
{
QuoteLevel = profile.IsQueryEstimated
? PriceCheckQuoteLevelCodes.Estimated
: PriceCheckQuoteLevelCodes.Exact,
MissingFieldCodes = missing,
Disclaimers = disclaimers
};
}
public static (string QuoteLevel, List<string> MissingFieldCodes, List<string> Disclaimers) BuildItemHint(
PriceCheckInputProfile profile,
bool usedZoneFallback)
{
var missing = profile.MissingFieldCodes.ToList();
if (usedZoneFallback && !missing.Contains(PriceCheckMissingFieldCodes.PostalCode))
{
missing.Add(PriceCheckMissingFieldCodes.PostalCode);
}
var disclaimers = BuildDisclaimers(missing);
if (usedZoneFallback)
{
disclaimers.Add("未匹配到精确分区,本行按可匹配分区参考价展示,下单后可能调整。");
}
var estimated = missing.Count > 0 || usedZoneFallback;
return (
estimated ? PriceCheckQuoteLevelCodes.Estimated : PriceCheckQuoteLevelCodes.Exact,
missing,
disclaimers);
}
private static List<string> BuildDisclaimers(IReadOnlyList<string> missingFieldCodes)
{
var disclaimers = new List<string>();
foreach (var code in missingFieldCodes)
{
var text = code switch
{
PriceCheckMissingFieldCodes.Dimensions =>
"未填写包裹尺寸:计费重按实重估算,入库实测尺寸后价格可能变化。",
PriceCheckMissingFieldCodes.PostalCode =>
"未填写邮编:优先按州/市或国家级分区匹配,精确邮编可能调整价格。",
PriceCheckMissingFieldCodes.Province =>
"未填写省州:无邮编时无法按州/市降级匹配,分区可能按国家级兜底。",
PriceCheckMissingFieldCodes.City =>
"未填写城市:无邮编且州未命中时无法按城市匹配。",
PriceCheckMissingFieldCodes.CargoType =>
"未选择货物属性:已分别试算普货/带电/敏感货等,下单时以所选属性为准。",
PriceCheckMissingFieldCodes.Warehouse =>
"未选择仓库:展示各仓库报价,下单时请确认发货仓。",
_ => null
};
if (!string.IsNullOrWhiteSpace(text))
{
disclaimers.Add(text);
}
}
return disclaimers;
}
}