diff --git a/src/Oms.Application/Dtos/Marketing/MemberOverviewOutput.cs b/src/Oms.Application/Dtos/Marketing/MemberOverviewOutput.cs index b2b1cf3..90798de 100644 --- a/src/Oms.Application/Dtos/Marketing/MemberOverviewOutput.cs +++ b/src/Oms.Application/Dtos/Marketing/MemberOverviewOutput.cs @@ -4,8 +4,12 @@ public class MemberOverviewOutput { public int? MemberLevelId { get; set; } + public string? MemberLevelCode { get; set; } + public string? MemberLevelName { get; set; } + public string? IconUrl { get; set; } + public string? PriceTierKey { get; set; } public int TotalPoints { get; set; } diff --git a/src/Oms.Application/Dtos/Orders/OrderReceiverOutput.cs b/src/Oms.Application/Dtos/Orders/OrderReceiverOutput.cs index f5eb79a..c2c75fa 100644 --- a/src/Oms.Application/Dtos/Orders/OrderReceiverOutput.cs +++ b/src/Oms.Application/Dtos/Orders/OrderReceiverOutput.cs @@ -31,9 +31,9 @@ public class OrderReceiverOutput public string? Email { get; set; } /// - /// 国家/地区代码。 + /// 国家/地区二字码。 /// - public int? CountryCode { get; set; } + public string? CountryCode { get; set; } /// /// 省份。 diff --git a/src/Oms.Application/Dtos/Orders/OrderSenderOutput.cs b/src/Oms.Application/Dtos/Orders/OrderSenderOutput.cs index fe7fbc9..e9793d1 100644 --- a/src/Oms.Application/Dtos/Orders/OrderSenderOutput.cs +++ b/src/Oms.Application/Dtos/Orders/OrderSenderOutput.cs @@ -31,9 +31,9 @@ public class OrderSenderOutput public string? Email { get; set; } /// - /// 国家/地区代码。 + /// 国家/地区二字码。 /// - public int? CountryCode { get; set; } + public string? CountryCode { get; set; } /// /// 省份。 diff --git a/src/Oms.Application/Services/Marketing/MarketingPortalMemberService.cs b/src/Oms.Application/Services/Marketing/MarketingPortalMemberService.cs index 15726fa..8bdb9c7 100644 --- a/src/Oms.Application/Services/Marketing/MarketingPortalMemberService.cs +++ b/src/Oms.Application/Services/Marketing/MarketingPortalMemberService.cs @@ -57,7 +57,9 @@ public class MarketingPortalMemberService : ApplicationService return new MemberOverviewOutput { MemberLevelId = currentLevel?.Id, + MemberLevelCode = currentLevel?.LevelCode, MemberLevelName = currentLevel?.LevelName, + IconUrl = currentLevel?.IconUrl, PriceTierKey = MarketingCustomerHelper.NormalizePriceTierKeyOrDefault(mainCustomer.PriceTierKey), TotalPoints = account.TotalPoints, RollingPoints = rollingPoints, diff --git a/src/Oms.Application/Services/Orders/OrderService.Helpers.cs b/src/Oms.Application/Services/Orders/OrderService.Helpers.cs index 9444025..c5d6e34 100644 --- a/src/Oms.Application/Services/Orders/OrderService.Helpers.cs +++ b/src/Oms.Application/Services/Orders/OrderService.Helpers.cs @@ -79,6 +79,20 @@ public partial class OrderService : await CountryRepository.GetListAsync(x => countryCodes.Contains(x.CountryCode)); var countryMap = countries.ToDictionary(x => x.CountryCode, StringComparer.OrdinalIgnoreCase); + var addressCountryIds = senders + .Select(x => x.Country) + .Concat(recipients.Select(x => x.Country)) + .Where(x => x.HasValue) + .Select(x => x!.Value) + .Distinct() + .ToArray(); + var addressCountries = addressCountryIds.Length == 0 + ? [] + : await CountryRepository.GetListAsync(x => addressCountryIds.Contains(x.Id)); + var countryIdCodeMap = addressCountries.ToDictionary( + x => x.Id, + x => x.CountryCode ?? string.Empty); + var auditUserNameMap = await UserDisplayNameResolver.ResolveManyAsync( orders.SelectMany(x => new[] { x.CreateUserId, x.UpdateUserId })); @@ -252,8 +266,8 @@ public partial class OrderService CreateBy = OmsRbacUserDisplayNameResolver.FormatUserId(order.CreateUserId, auditUserNameMap), UpdateTime = OmsDocHelper.NullIfDefault(order.UpdateTime), UpdateBy = OmsRbacUserDisplayNameResolver.FormatUserId(order.UpdateUserId, auditUserNameMap), - Sender = MapSender(sender), - Receiver = MapReceiver(recipient), + Sender = MapSender(sender, countryIdCodeMap), + Receiver = MapReceiver(recipient, countryIdCodeMap), Items = (items ?? []).Select(MapDeclaration).ToList(), WeightList = (orderWeights ?? []).Select(MapWeight).ToList(), FeeList = feeOutputs, @@ -705,7 +719,9 @@ public partial class OrderService : null; } - private static OrderSenderOutput? MapSender(OrderSender? sender) + private static OrderSenderOutput? MapSender( + OrderSender? sender, + IReadOnlyDictionary countryIdCodeMap) { return sender == null ? null @@ -716,7 +732,7 @@ public partial class OrderService Phone = sender.Phone, TelePhone = sender.TelePhone, Email = sender.Email, - CountryCode = sender.Country, + CountryCode = ResolveCountryCode(sender.Country, countryIdCodeMap), Province = sender.Province, City = sender.City, ZipCode = sender.ZipCode, @@ -727,7 +743,9 @@ public partial class OrderService }; } - private static OrderReceiverOutput? MapReceiver(OrderRecipient? recipient) + private static OrderReceiverOutput? MapReceiver( + OrderRecipient? recipient, + IReadOnlyDictionary countryIdCodeMap) { return recipient == null ? null @@ -738,7 +756,7 @@ public partial class OrderService Phone = recipient.Phone, TelePhone = recipient.TelePhone, Email = recipient.Email, - CountryCode = recipient.Country, + CountryCode = ResolveCountryCode(recipient.Country, countryIdCodeMap), Province = recipient.Province, City = recipient.City, StreetNumber = recipient.StreetNumber, @@ -755,6 +773,20 @@ public partial class OrderService }; } + private static string? ResolveCountryCode( + int? countryId, + IReadOnlyDictionary countryIdCodeMap) + { + if (!countryId.HasValue) + { + return null; + } + + return countryIdCodeMap.TryGetValue(countryId.Value, out var code) && !string.IsNullOrWhiteSpace(code) + ? code + : null; + } + private OrderItemOutput MapDeclaration(OrderDeclaration x) { return new OrderItemOutput