From 7c3e458642255fd406b95e941974fe70c7e130f4 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Fri, 14 Feb 2025 10:04:02 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E6=9F=A5=E8=AF=A2=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9=E6=98=A0=E5=B0=84-=E6=8E=A8=E9=80=81=E6=98=A0?= =?UTF-8?q?=E5=B0=84=E9=85=8D=E7=BD=AE=EF=BC=8C=E6=9F=A5=E8=AF=A2=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E7=9A=84=E6=94=AF=E6=8C=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TrackPush/TrackPushContentConfigDto.cs | 5 + .../EventHandlers/TrackPushEventHandler.cs | 147 ++++++++++++------ .../TrackPush/TrackPushCacheService.cs | 1 + .../Services/TrackPush/TrackPushService.cs | 21 +-- .../GetTrackPushContentPageInputVO.cs | 5 + .../TrackPush/TrackPushContentConfigVO.cs | 5 + .../Repositories/TrackPushConfigRepository.cs | 2 + 7 files changed, 127 insertions(+), 59 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushContentConfigDto.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushContentConfigDto.cs index 7c1c1568..d67b7454 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushContentConfigDto.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushContentConfigDto.cs @@ -42,6 +42,11 @@ public class TrackPushContentConfigDto /// public string TrackCode { get; set; } = null!; + /// + /// 推送顺序 + /// + public int Sort { get; set; } + /// /// 可交换顺序的轨迹code /// diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs index cd792aa6..110f5c73 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs @@ -31,6 +31,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe private readonly IBroadcastingService _broadcastingService; private List _orders = null!; private List _pushConfigs = null!; + private Dictionary> _orderTypeSortedConfigsDict = null!; //订单类型,根据sort从小到大排序后的配置字典 public TrackPushEventHandler(IHttpClientProxy httpClientProxy, IOrderRepository orderRepository, @@ -61,6 +62,11 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe } _pushConfigs = pushConfigs; + _orderTypeSortedConfigsDict = pushConfigs + .GroupBy(x => x.OrderType) + .ToDictionary(x => x.Key, + y => y.OrderBy(item => item.Sort).ToList() + ); var orders = await _orderRepository.GetListAsync(x => @event.OrderIds.Contains(x.Id), @@ -142,33 +148,43 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe private async Task BuiltManualPushItemsAsync(TrackPushEvent @event, List items) { - // tips: 手工强制推送直接使用配置 - var config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode); foreach (var order in _orders) { - if (config is { IsAllPush: true }) + // tips:不同订单类型可能会有不同的顺序 + if (!_orderTypeSortedConfigsDict.TryGetValue(order.OrderType, out var sortedConfigs)) { - // 非强制推送需要 推断 本次推送 是否可行 - if (!@event.ForcedPush) - { - config = GetValidPushConfigAsync(_pushConfigs, order.LatestPushTrackCode, @event); - } + TrackPushFailedPublicTopic($"子系统id:[{@event.SubSystemId}],客户id:[{@event.CustomId}],没有订单类型[{order.OrderType}]的推送映射配置", @event, order); + continue; + } + + // tips: 手工/强制推送直接使用配置 + var config = sortedConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode); + + if (config == null) + { + TrackPushFailedPublicTopic($"针对于订单类型[{order.OrderType}]没有找到轨迹代码[{@event.TrackCode}]对应的配置", @event, order); + continue; + } + + // 非强制推送需要 推断 本次推送 是否可行 + if (config.IsAllPush && !@event.ForcedPush) + { + config = GetValidPushConfigAsync(sortedConfigs, order.LatestPushTrackCode, @event); } if (config == null) { - TrackPushFailedPublicTopic("推送顺序异常,找不到有效推送配置", @event, order); + TrackPushFailedPublicTopic($"推送顺序有误,针对于订单类型[{order.OrderType}],轨迹代码[{@event.TrackCode}]", @event, order); return; } - - //配置的类型如何和订单类型不一致则不允许推送 - if (config.OrderType != order.OrderType) - { - TrackPushFailedPublicTopic($"订单类型{order.OrderType}和配置中的订单类型[{config.OrderType}]不一致,不能推送", @event, - order); - continue; - } + // //配置的类型如何和订单类型不一致则不允许推送 + // if (config.OrderType != order.OrderType) + // { + // TrackPushFailedPublicTopic($"订单类型{order.OrderType}和配置中的订单类型[{config.OrderType}]不一致,不能推送", @event, + // order); + // continue; + // } var log = new TrackPushRecordIndex { @@ -194,12 +210,21 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe private async Task BuiltSystemPushItemsAsync(TrackPushEvent @event, List items) { - var config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode); foreach (var order in _orders) { + // tips:不同订单类型可能会有不同的顺序 + if (!_orderTypeSortedConfigsDict.TryGetValue(order.OrderType, out var sortedConfigs)) + { + TrackPushFailedPublicTopic($"子系统id:[{@event.SubSystemId}],客户id:[{@event.CustomId}],没有订单类型[{order.OrderType}]的推送映射配置", @event, order); + continue; + } + + // tips: 手工/强制推送直接使用配置 + var config = sortedConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode); if (config == null) { - TrackPushFailedPublicTopic($"没有在推送映射配置中找到关于轨迹代码[{@event.TrackCode}]的配置", @event, order); + TrackPushFailedPublicTopic($"子系统id:[{@event.SubSystemId}],客户id:[{@event.CustomId}],没有订单类型[{order.OrderType}]的推送映射配置," + + $"没有在推送映射配置中找到关于轨迹代码[{@event.TrackCode}]的配置", @event, order); return; } @@ -214,7 +239,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe // 如果当前推送code与订单上的最后的code不一致,则考虑推送映射顺序 if (!string.Equals(order.LatestPushTrackCode, @event.TrackCode)) { - config = GetValidPushConfigAsync(_pushConfigs, order.LatestPushTrackCode, @event); + config = GetValidPushConfigAsync(sortedConfigs, order.LatestPushTrackCode, @event); if (config == null) { TrackPushFailedPublicTopic("推送顺序异常,找不到有效推送配置", @event, order); @@ -229,13 +254,13 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe continue; } - // 配置的类型如何和订单类型不一致则不允许推送 - if (config.OrderType != order.OrderType) - { - TrackPushFailedPublicTopic($"订单类型{order.OrderType}和配置中的订单类型[{config.OrderType}]不一致,不能推送", @event, - order); - continue; - } + // // 配置的类型如何和订单类型不一致则不允许推送 + // if (config.OrderType != order.OrderType) + // { + // TrackPushFailedPublicTopic($"订单类型{order.OrderType}和配置中的订单类型[{config.OrderType}]不一致,不能推送", @event, + // order); + // continue; + // } var log = new TrackPushRecordIndex { @@ -267,14 +292,29 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe var items = new List(); foreach (var order in _orders) { - //配置的类型如何和订单类型不一致则不允许推送 - if (config.OrderType != order.OrderType) + // tips:不同订单类型可能会有不同的顺序 + if (!_orderTypeSortedConfigsDict.TryGetValue(order.OrderType, out var sortedConfigs)) { - TrackPushFailedPublicTopic($"订单类型{order.OrderType}和配置中的订单类型[{config.OrderType}]不一致,不能推送", @event, - order); + TrackPushFailedPublicTopic($"子系统id:[{@event.SubSystemId}],客户id:[{@event.CustomId}],没有订单类型[{order.OrderType}]的推送映射配置", @event, order); continue; } + // tips:更新轨迹要求只能更新已经推过的历史轨迹 + config = sortedConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode); + if (config == null) + { + TrackPushFailedPublicTopic($"针对于订单类型[{order.OrderType}]没有找到轨迹代码[{@event.TrackCode}]对应的配置", @event, order); + continue; + } + + // //配置的类型如何和订单类型不一致则不允许推送 + // if (config.OrderType != order.OrderType) + // { + // TrackPushFailedPublicTopic($"订单类型{order.OrderType}和配置中的订单类型[{config.OrderType}]不一致,不能推送", @event, + // order); + // continue; + // } + var log = new TrackPushRecordIndex { OptionType = @event.OptionType.ToString(), @@ -353,7 +393,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe var body = new TrackPushInput { - OrderNo = log.OrderNo, + OrderNo = log.OrderNo }; var cur = new Dictionary { @@ -372,7 +412,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe if (config.IsAllPush) { var history = await _trackPushRecordEsRepository.GetLatestTrackPushRecordAsync(log.OrderId, true); - if (history != default) + if (history != null) { body = TextJsonHelper.Deserialize(history.PushContent); @@ -382,13 +422,18 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe var trackIdentifies = tracks.Select(x => { //寻找映射配置(转换后的code) - var code = _pushConfigs.First(y => y.TrackCode == x.TrackCode).TrackContentCodeValue; + var matchConfig = _orderTypeSortedConfigsDict.TryGetValue(x.OrderType, out var sortedConfigs) + ? sortedConfigs.FirstOrDefault(y => y.TrackCode == x.TrackCode) + : null; + if (matchConfig == null) return null; + var code = matchConfig.TrackContentCodeValue; var timeStr = DateTimeFormat(x.TrackTime, config.TrackTimeZone ?? log.TrackTimeZone, config); return string.IsNullOrWhiteSpace(compareFields) ? $"{code}{timeStr}" : $"{code}{TextJsonHelper.ExtractValue(x.Extra, compareFields)}"; - } - ).ToImmutableHashSet(); + }) + .Where(x => x != null) + .ToImmutableHashSet(); //在历史中选取在订单当前轨迹明细中的记录 body!.Data = body.Data.Where(x => { @@ -431,7 +476,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe } } - // 添加当前要推送的轨迹 + // 添加当前要推送的轨迹,到末尾 body.Data.Add(cur); } } @@ -457,7 +502,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe return cache[idx]; } - if (idx + 1 >= cache.Count) return default; // 推完了 + if (idx + 1 >= cache.Count) return null; // 推完了 // find next var matched = cache[idx + 1].TrackCode == trackCode @@ -466,7 +511,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe : cache.FirstOrDefault(x => x.TrackCode == cache[idx + 1].SwapTrackCode); //没推完,可能不符合推送顺序 - return matched != null && matched.TrackCode == trackCode ? matched : default; + return matched != null && matched.TrackCode == trackCode ? matched : null; } /// @@ -494,17 +539,18 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe { _broadcastingService.TrackPushFailedPubilcTopic(new TrackPushRecordDto { + SubSystemCode = @event.SubSystemCode, + IsManualPush = @event.OperationMan != null, + PushTime = DateTime.Now, //还没请求接口通 RequestId = null, - IsSuccess = false, Message = failedMessage, OperationMan = @event.OperationMan, - PushTime = DateTime.Now, OptionType = @event.OptionType.ToString(), - IsManualPush = @event.OperationMan != null, + OrderNo = order.OrderNo, + IsSuccess = false, //还没到构建推送内容那一步就被拦截 PushContent = string.Empty, - OrderNo = order.OrderNo, TrackStatus = @event.SystemPushInfo.TrackStatus, TrackContent = @event.SystemPushInfo.TrackStatus, TrackTimeZone = @event.SystemPushInfo.TrackTimeZone, @@ -526,15 +572,16 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe { _broadcastingService.TrackPushFailedPubilcTopic(new TrackPushRecordDto { - RequestId = requestId, - IsSuccess = false, - Message = failedMessage, - OperationMan = @event.OperationMan, - PushTime = DateTime.Now, - OptionType = @event.OptionType.ToString(), + SubSystemCode = @event.SubSystemCode, IsManualPush = @event.OperationMan != null, - PushContent = TextJsonHelper.Serialize(pushInput), + PushTime = DateTime.Now, + OperationMan = @event.OperationMan, OrderNo = pushInput.OrderNo, + RequestId = requestId, + Message = failedMessage, + OptionType = @event.OptionType.ToString(), + IsSuccess = false, + PushContent = TextJsonHelper.Serialize(pushInput), TrackStatus = @event.SystemPushInfo.TrackStatus, TrackContent = @event.SystemPushInfo.TrackStatus, TrackTimeZone = @event.SystemPushInfo.TrackTimeZone, diff --git a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs index 5b64b496..83c393ed 100644 --- a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs +++ b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs @@ -85,6 +85,7 @@ public class TrackPushCacheService : ITrackPushCacheService, ITransientDependenc ServiceProviderCode = item.ServiceProviderCode, OrderType = item.OrderType, TrackCode = item.TrackCode, + Sort = item.Sort, SwapTrackCode = item.SwapTrackCode, TrackStatusValue = item.TrackStatusValue, TrackContentCodeValue = item.TrackContentCodeValue, diff --git a/src/SJZY.Track.Application/Services/TrackPush/TrackPushService.cs b/src/SJZY.Track.Application/Services/TrackPush/TrackPushService.cs index 66e95cf2..1c535b13 100644 --- a/src/SJZY.Track.Application/Services/TrackPush/TrackPushService.cs +++ b/src/SJZY.Track.Application/Services/TrackPush/TrackPushService.cs @@ -159,7 +159,8 @@ public class TrackPushService : ApplicationService, ISingletonDependency if (input.Options != OptionTypeNoNull.删除) { Expression> isContentAnyExp = x => - x.TrackPushConfigId == input.TrackPushConfigId; + x.TrackPushConfigId == input.TrackPushConfigId + && x.OrderNoType == input.OrderNoType; if (input.Options == OptionTypeNoNull.修改) isContentAnyExp = isContentAnyExp.And(x => x.Id != input.Id); if (await _trackPushConfigRepository.IsContentAnyAsync(isContentAnyExp.And(x => @@ -191,8 +192,10 @@ public class TrackPushService : ApplicationService, ISingletonDependency { case OptionTypeNoNull.新增: { - int maxSort = await _trackPushConfigRepository.ContentMaxAsync(x => x.Sort, - x => x.TrackPushConfigId == input.TrackPushConfigId); + var maxSort = await _trackPushConfigRepository.ContentMaxAsync(x => x.Sort, x => + x.OrderNoType == input.OrderNoType + && x.TrackPushConfigId == input.TrackPushConfigId + ); var entity = ObjectMapper.Map(input); entity.Sort = maxSort + 1; @@ -216,8 +219,11 @@ public class TrackPushService : ApplicationService, ISingletonDependency throw new BusinessException(message: _stringLocalizer["NotFindData"]); trackPushConfigId = entity.TrackPushConfigId; await _trackPushConfigRepository.SoftDeleteContentAsync(x => x.Id == input.Id); - await _trackPushConfigRepository.UpdateContentAsync(x => x.Sort == x.Sort - 1, - x => x.TrackPushConfigId == entity.TrackPushConfigId && x.Sort > entity.Sort); + await _trackPushConfigRepository.UpdateContentAsync(x => x.Sort == x.Sort - 1, x => + x.OrderNoType == entity.OrderNoType + && x.TrackPushConfigId == entity.TrackPushConfigId + && x.Sort > entity.Sort + ); break; } @@ -249,10 +255,7 @@ public class TrackPushService : ApplicationService, ISingletonDependency var trackPushContentEntities = await _trackPushConfigRepository.GetContentListAsync(x => ids.Contains(x.Id)); - trackPushContentEntities.ForEach(item => - { - item.Sort = input.SortInfo.Single(x => x.Key == item.Id.ToString()).Value; - }); + trackPushContentEntities.ForEach(item => { item.Sort = input.SortInfo.Single(x => x.Key == item.Id.ToString()).Value; }); if (trackPushContentEntities.Count > 0) { diff --git a/src/SJZY.Track.Domain/Dtos/TrackPush/GetTrackPushContentPageInputVO.cs b/src/SJZY.Track.Domain/Dtos/TrackPush/GetTrackPushContentPageInputVO.cs index 57bf0626..6ad38fbe 100644 --- a/src/SJZY.Track.Domain/Dtos/TrackPush/GetTrackPushContentPageInputVO.cs +++ b/src/SJZY.Track.Domain/Dtos/TrackPush/GetTrackPushContentPageInputVO.cs @@ -6,4 +6,9 @@ public class GetTrackPushContentPageInputVO : PageInfoInput /// 轨迹推送配置id /// public int TrackPushConfigId { get; set; } + + /// + /// 配置单号类型,当为空时查所有,不区分单号类型 + /// + public int? OrderNoType { get; set; } } diff --git a/src/SJZY.Track.Domain/Dtos/TrackPush/TrackPushContentConfigVO.cs b/src/SJZY.Track.Domain/Dtos/TrackPush/TrackPushContentConfigVO.cs index 66db8889..b8b53dc0 100644 --- a/src/SJZY.Track.Domain/Dtos/TrackPush/TrackPushContentConfigVO.cs +++ b/src/SJZY.Track.Domain/Dtos/TrackPush/TrackPushContentConfigVO.cs @@ -27,6 +27,11 @@ public class TrackPushContentConfigVO /// public string TrackCode { get; set; } = null!; + /// + /// 推送顺序 + /// + public int Sort { get; set; } + /// /// 可交换顺序的轨迹code /// diff --git a/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs index 050d7d9e..98654c32 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs @@ -45,6 +45,7 @@ public class TrackPushConfigRepository : BasicRepository, enumValue.Property == EnumPropertyEnums.单号类型.GetDescription() && pushContent.OrderNoType == enumValue.Enumkey && !enumValue.IsDeleted) .Where(pushContent => pushContent.TrackPushConfigId == input.TrackPushConfigId) + .WhereIF(input.OrderNoType.HasValue, pushContent => pushContent.OrderNoType == input.OrderNoType) .OrderBy(pushContent => pushContent.Sort) .Select( (pushContent, trackContent, enumValue) => new GetTrackPushContentPageOutputVO @@ -138,6 +139,7 @@ public class TrackPushConfigRepository : BasicRepository, OrderType = b.OrderNoType, TrackCode = d.Code, SwapTrackCode = e.Code, + Sort = b.Sort, TrackContentCodeValue = b.TrackContentCodeValue, TrackContentValue = b.TrackContentValue, TrackEnContentValue = b.TrackEnContentValue, From 52b9a461478b375daa40ba0d9cd1cce169f59748 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Mon, 17 Feb 2025 10:21:57 +0800 Subject: [PATCH 2/3] =?UTF-8?q?add-interface:=20=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E6=98=A0=E5=B0=84=E8=AE=A2=E5=8D=95=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E9=80=89=E9=A1=B9=E5=8D=A1=20/Track/PushConfig/GetCon?= =?UTF-8?q?figTags?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add-interface: 查询订单类型名称字典 /Track/Order/GetOrderTypeDict --- .../Dtos/TrackPush/TrackPushConfigTagDto.cs | 14 ++++++++++ .../Services/TrackOrders/TrackOrderService.cs | 9 +++++++ .../Services/TrackPush/TrackPushService.cs | 26 ++++++++++++++++++- .../OrderAggregate/IOrderRepository.cs | 9 ++++++- .../ITrackPushConfigRepository.cs | 1 + .../Consts/GlobalConst.Redis.cs | 5 ++++ .../Dtos/TrackPush/GetConfigTagsInputVO.cs | 9 +++++++ .../Repositories/OrderRepository.cs | 23 ++++++++++++++++ .../Repositories/TrackPushConfigRepository.cs | 10 +++++++ 9 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushConfigTagDto.cs create mode 100644 src/SJZY.Track.Domain/Dtos/TrackPush/GetConfigTagsInputVO.cs diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushConfigTagDto.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushConfigTagDto.cs new file mode 100644 index 00000000..964a71bd --- /dev/null +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushConfigTagDto.cs @@ -0,0 +1,14 @@ +namespace SJZY.Track.Application.Contract.Dtos.TrackPush; + +public class TrackPushConfigTagDto +{ + /// + /// 订单类型值 + /// + public int Type { get; set; } + + /// + /// 订单类型名称 + /// + public string Name { get; set; } +} diff --git a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs index 71487d75..89041d1f 100644 --- a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs +++ b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs @@ -60,6 +60,15 @@ public class TrackOrderService : ApplicationService #endregion + /// + /// 获取订单类型字典 + /// + /// + [HttpGet("GetOrderTypeDict")] + public async Task> GetOrderTypeDict() + { + return await _orderRepository.GetTrackOrderTypeDict(); + } /// /// 更新订单状态 diff --git a/src/SJZY.Track.Application/Services/TrackPush/TrackPushService.cs b/src/SJZY.Track.Application/Services/TrackPush/TrackPushService.cs index 1c535b13..fcf66ef8 100644 --- a/src/SJZY.Track.Application/Services/TrackPush/TrackPushService.cs +++ b/src/SJZY.Track.Application/Services/TrackPush/TrackPushService.cs @@ -5,6 +5,7 @@ using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Track.Application.Contract.Dtos.TrackPush; using SJZY.Track.Application.Contract.Services; using SJZY.Track.Application.Localization; +using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Dtos.Common; using SJZY.Track.Domain.Dtos.TrackPush; @@ -22,15 +23,18 @@ public class TrackPushService : ApplicationService, ISingletonDependency private readonly IStringLocalizer _stringLocalizer; private readonly ITrackPushCacheService _trackPushCacheService; private readonly ITrackPushConfigRepository _trackPushConfigRepository; + private readonly IOrderRepository _orderRepository; public TrackPushService( IStringLocalizer stringLocalizer, ITrackPushConfigRepository trackPushConfigRepository, - ITrackPushCacheService trackPushCacheService) + ITrackPushCacheService trackPushCacheService, + IOrderRepository orderRepository) { _stringLocalizer = stringLocalizer; _trackPushConfigRepository = trackPushConfigRepository; _trackPushCacheService = trackPushCacheService; + _orderRepository = orderRepository; } /// @@ -44,6 +48,26 @@ public class TrackPushService : ApplicationService, ISingletonDependency return await _trackPushConfigRepository.GetPageAsync(input); } + /// + /// 获取推送配置类型标签卡列表 + /// + /// + [HttpPost("GetConfigTags")] + public async Task> GetConfigTags([FromBody] GetConfigTagsInputVO inputVo) + { + var orderTypes = await _trackPushConfigRepository.GetConfigTags(inputVo); + if (orderTypes.Count == 0) return new List(); + var trackOrderTypes = await _orderRepository.GetTrackOrderTypeDict(); + + return orderTypes.Select(x => new TrackPushConfigTagDto + { + Type = x, + Name = trackOrderTypes[x.ToString()] + }) + .OrderBy(x => x.Type) + .ToList(); + } + /// /// 轨迹推送配置内容列表 /// diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs index 183b02dd..7548d8d8 100644 --- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs @@ -5,6 +5,13 @@ namespace SJZY.Track.Domain.Aggregates.OrderAggregate; public interface IOrderRepository : IBasicRepository { + /// + /// 获取订单类型字典 + /// key:OrderType value:TypeName + /// + /// + Task> GetTrackOrderTypeDict(); + /// /// 获取分页的轨迹订单 /// @@ -78,7 +85,7 @@ public interface IOrderRepository : IBasicRepository /// /// /// - Task> GetOrderTemplateAsync(int subSystemId,int orderType,List orderNos); + Task> GetOrderTemplateAsync(int subSystemId, int orderType, List orderNos); #endregion diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushConfigRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushConfigRepository.cs index 7784d57f..7ad686ec 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushConfigRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushConfigRepository.cs @@ -39,4 +39,5 @@ public interface ITrackPushConfigRepository : IBasicRepository> QueryTrackPullMappingsAsync(QueryTrackPullMappingsInputVO input); Task> GetTrackPushContentListAsync(int subSystemId, int customerId); Task GetServiceCodeByCustomerIdAsync(int customerId); + Task> GetConfigTags(GetConfigTagsInputVO inputVo); } diff --git a/src/SJZY.Track.Domain/Consts/GlobalConst.Redis.cs b/src/SJZY.Track.Domain/Consts/GlobalConst.Redis.cs index 918762fe..718a09ee 100644 --- a/src/SJZY.Track.Domain/Consts/GlobalConst.Redis.cs +++ b/src/SJZY.Track.Domain/Consts/GlobalConst.Redis.cs @@ -71,4 +71,9 @@ public partial class GlobalConst /// 轨迹推送预警redis key前缀 /// public const string TrackPushWaringKeyPrefix = "TrackPushWaring"; + + /// + /// 轨迹订单类型redis key前缀(hash类型) + /// + public const string TrackOrderTypeKey = "TrackOrderType"; } diff --git a/src/SJZY.Track.Domain/Dtos/TrackPush/GetConfigTagsInputVO.cs b/src/SJZY.Track.Domain/Dtos/TrackPush/GetConfigTagsInputVO.cs new file mode 100644 index 00000000..95c4745b --- /dev/null +++ b/src/SJZY.Track.Domain/Dtos/TrackPush/GetConfigTagsInputVO.cs @@ -0,0 +1,9 @@ +namespace SJZY.Track.Domain.Dtos.TrackPush; + +public class GetConfigTagsInputVO +{ + /// + /// 轨迹推送配置id + /// + public int TrackPushConfigId { get; set; } +} diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs index 3e5bc514..946ebde2 100644 --- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs @@ -18,6 +18,7 @@ public class OrderRepository : BasicRepository, IOrderRepository, I private static readonly Dictionary> _empty2 = new(); private static readonly TimeSpan _thirdPartyOrderNumberCacheTimeSpan = TimeSpan.FromMinutes(3); private static readonly TimeSpan _mainDataEnumCacheTimeSpan = TimeSpan.FromMinutes(5); + private static readonly TimeSpan _orderTypeCacheTimeSpan = TimeSpan.FromMinutes(1); private async Task> GetThirdPartyOrderNumberForCacheAsync(int[] orderIds) { @@ -99,6 +100,28 @@ public class OrderRepository : BasicRepository, IOrderRepository, I return dict; } + public async Task> GetTrackOrderTypeDict() + { + const string key = "TrackOrderType"; + var orderTypes = await _memoryCache.GetOrCreateAsync(key, async (entry) => + { + // 固定时间周期后强制更新 + entry.AbsoluteExpirationRelativeToNow = _orderTypeCacheTimeSpan; + // 查询主数据 + return await Context.Queryable() + .Where(x => x.Property == GlobalConst.MainDataKey_OrderType) + .ToDictionaryAsync(x => x.Enumkey, x => x.Disp); + }); + + // 更新redis缓存 + await RedisHelper.Client.HMSetAsync(GlobalConst.TrackOrderTypeKey, orderTypes); + + // redis内数据只更新不清理 + var dict = RedisHelper.Client.HGetAll(GlobalConst.TrackOrderTypeKey); + + return dict; + } + public async Task> GetTrackOrderPagedList(GetPageTrackOrderInputVO input) { //查询完去重 diff --git a/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs index 98654c32..a23d744e 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs @@ -228,4 +228,14 @@ public class TrackPushConfigRepository : BasicRepository, .Select(x => x.ApiServiceCode) .FirstAsync(); } + + public async Task> GetConfigTags(GetConfigTagsInputVO input) + { + var orderTypes = await Context.Queryable() + .Where(x => x.TrackPushConfigId == input.TrackPushConfigId) + .Select(x => x.OrderNoType) + .ToListAsync(); + + return new HashSet(orderTypes); + } } From 078a7bf2a84ab2a60c6a098bbfeb498558a4aba2 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Mon, 17 Feb 2025 14:11:48 +0800 Subject: [PATCH 3/3] =?UTF-8?q?config-item-remove:=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E9=80=9A=E4=B8=8D=E5=BF=85=E8=A6=81=E7=9A=84?= =?UTF-8?q?=E5=8F=82=E6=95=B0=20=20-=20PushTrackInterfaceId=20=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E6=8E=A5=E5=8F=A3id=20=20-=20PushTrackItemParamAliasP?= =?UTF-8?q?refix=20=E6=8E=A8=E9=80=81=E6=8E=A5=E5=8F=A3=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E9=A1=B9=20=E5=8F=82=E6=95=B0=E5=88=AB=E5=90=8D=E5=89=8D?= =?UTF-8?q?=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Options/InterfaceRelayParamsConfigOptions.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/SJZY.Track.Application/Options/InterfaceRelayParamsConfigOptions.cs b/src/SJZY.Track.Application/Options/InterfaceRelayParamsConfigOptions.cs index e2a3d78e..59a6ab9c 100644 --- a/src/SJZY.Track.Application/Options/InterfaceRelayParamsConfigOptions.cs +++ b/src/SJZY.Track.Application/Options/InterfaceRelayParamsConfigOptions.cs @@ -57,16 +57,6 @@ public class InterfaceRelayParamsConfigOptions /// public string PushTrackInterfaceCode { get; set; } - /// - /// 推送轨迹接口Id - /// - public int PushTrackInterfaceId { get; set; } - - /// - /// 推送轨迹接口 内容项 参数别名前缀 - /// - public string PushTrackItemParamAliasPrefix { get; set; } - /// /// 更新轨迹接口代码 ///