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 MissingFieldCodes, List 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 BuildDisclaimers(IReadOnlyList missingFieldCodes) { var disclaimers = new List(); foreach (var code in missingFieldCodes) { var text = code switch { PriceCheckMissingFieldCodes.Dimensions => "未填写包裹尺寸:计费重按实重估算,入库实测尺寸后价格可能变化。", PriceCheckMissingFieldCodes.PostalCode => "未填写邮编:未校验黑名单/偏远/精确分区,报价仅供参考。", PriceCheckMissingFieldCodes.Province => "未填写省州:分区按国家级匹配,精确地址可能调整价格。", PriceCheckMissingFieldCodes.CargoType => "未选择货物属性:已分别试算普货/带电/敏感货等,下单时以所选属性为准。", PriceCheckMissingFieldCodes.Warehouse => "未选择仓库:展示各仓库报价,下单时请确认发货仓。", _ => null }; if (!string.IsNullOrWhiteSpace(text)) { disclaimers.Add(text); } } return disclaimers; } }