From c4917d66cca351828b3fc52668920532a8d8df11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Tue, 19 Mar 2024 15:51:15 +0800 Subject: [PATCH 01/16] =?UTF-8?q?fix=20=E5=BE=AA=E7=8E=AF=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E5=BC=82=E5=B8=B8case?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/TrackDeleteEventHandler.cs | 15 ++++++--------- .../EventHandlers/TrackUpsertEventHandler.cs | 3 +-- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs index 4f402731..28b38520 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs @@ -1,5 +1,6 @@ using DotNetCore.CAP; using SJZY.Expand.ABP.Core.Logger; +using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Track.Application.Contract.Events; using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; @@ -34,8 +35,6 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe return; } - @event.Visited.Add(@event.OrderId); - // 不同子系统需要做内容映射 if (@event.UpSubSystemId != 0 && @event.UpSubSystemId != @event.SubSystemId) { @@ -75,13 +74,11 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe var linkedOrders = await _orderRepository.GetLinkedOrdersAsync(@event.OrderId); foreach (var linkedOrder in linkedOrders) { - var nextEvent = new TrackDeleteEvent - { - OrderId = linkedOrder.OrderId, - TrackCodes = @event.TrackCodes, - SubSystemId = linkedOrder.SubSystemId, - UpSubSystemId = @event.SubSystemId - }; + var nextEvent = @event.DeepCopy(); + nextEvent.Visited.Add(@event.OrderId); + nextEvent.TrackCodes = @event.TrackCodes; + nextEvent.SubSystemId = linkedOrder.SubSystemId; + nextEvent.UpSubSystemId = @event.SubSystemId; await _capPublisher.PublishAsync(GlobalConst.TrackDeleteSubscribe, nextEvent); } diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 6de64141..208b3a85 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -42,8 +42,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe return; } - @event.Visited.Add(@event.OrderId); - // 不同子系统需要做内容映射 if (@event.UpSubSystemId != 0 && @event.UpSubSystemId != @event.SubSystemId) { @@ -88,6 +86,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe foreach (var linkedOrder in linkedOrders) { var nextEvent = @event.DeepCopy(); + nextEvent.Visited.Add(@event.OrderId); nextEvent.OrderId = linkedOrder.OrderId; nextEvent.OrderType = linkedOrder.OrderType; nextEvent.OrderNo = linkedOrder.OrderNo; From 038c495dfaa547e839f5d41a10584efec405c547 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Wed, 20 Mar 2024 17:23:08 +0800 Subject: [PATCH 02/16] =?UTF-8?q?fix=20=E6=8E=A8=E9=80=81=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=8F=AF=E8=83=BD=E6=98=AF=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/ITrackPushCacheService.cs | 2 +- .../EventHandlers/TrackUpsertEventHandler.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs b/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs index a4a57bc0..ab34ac01 100644 --- a/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs +++ b/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs @@ -19,7 +19,7 @@ public interface ITrackPushCacheService /// 服务商id /// /// - Task GetPushContentConfigAsync(int subSystemId, int customId, int trackContentId); + Task GetPushContentConfigAsync(int subSystemId, int customId, int trackContentId); /// /// 根据轨迹代码推断下一个(升序)要推送的内容,如果找不到或者已经是最后一个了,返回null diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 208b3a85..7410c881 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -162,7 +162,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe { config = await _trackPushCacheService.GetPushContentConfigAsync( @event.SubSystemId, @event.CustomId, track.TrackContentId); - if (!config.IsCanUpdate) return; + if (config == null || !config.IsCanUpdate) return; } else { From 07572a58380c44d684436599fbe5ff6df76acd99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=B3=E6=96=87=E7=BF=94?= <878130837@qq.com> Date: Wed, 20 Mar 2024 17:26:59 +0800 Subject: [PATCH 03/16] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E8=BF=94=E5=9B=9E=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/ITrackPushCacheService.cs | 2 +- .../Services/TrackPush/TrackPushCacheService.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs b/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs index a4a57bc0..ab34ac01 100644 --- a/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs +++ b/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs @@ -19,7 +19,7 @@ public interface ITrackPushCacheService /// 服务商id /// /// - Task GetPushContentConfigAsync(int subSystemId, int customId, int trackContentId); + Task GetPushContentConfigAsync(int subSystemId, int customId, int trackContentId); /// /// 根据轨迹代码推断下一个(升序)要推送的内容,如果找不到或者已经是最后一个了,返回null diff --git a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs index 46155e2e..5dc319f8 100644 --- a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs +++ b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs @@ -28,12 +28,12 @@ public class TrackPushCacheService : ApplicationService, ITrackPushCacheService } [NonAction] - public async Task GetPushContentConfigAsync(int subSystemId, int customId, + public async Task GetPushContentConfigAsync(int subSystemId, int customId, int trackContentId) { var data = await GetPushContentConfigsAsync(subSystemId, customId); - return data.Single(x => x.TrackContentId == trackContentId); + return data?.FirstOrDefault(x => x.TrackContentId == trackContentId); } [NonAction] From 0cb30b3d4b10ba67c2e90516bdb0424075c1a949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Wed, 20 Mar 2024 18:36:12 +0800 Subject: [PATCH 04/16] fix upsert --- .../EventHandlers/TrackUpsertEventHandler.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 7410c881..48d1d3f9 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -61,7 +61,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe var track = await _trackDetailsRepository.GetFirstOrDefaultAsync(@event.OrderId, @event.TrackCode); // step1、upsert es轨迹 - await UpsertTrackAsync(track, @event); + track = await UpsertTrackAsync(track, @event); Debug.Assert(track != null, nameof(track) + " != null"); // step2、触发轨迹推送事件(异步) @@ -103,7 +103,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe /// /// /// - private async Task UpsertTrackAsync(TrackDetailsIndex? track, TrackUpsertEvent @event) + private async Task UpsertTrackAsync(TrackDetailsIndex? track, TrackUpsertEvent @event) { if (track == default) { @@ -113,7 +113,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe if (trackContent == default) { // 订单所绑定的模板,没有一条内容可以匹配发生的轨迹 - return; + return null; } track = new TrackDetailsIndex @@ -146,6 +146,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe } await _trackDetailsRepository.UpsertAsync(track); + + return track; } /// From 367211f755fe07ad9b894ae1e1845610c9390e84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Thu, 21 Mar 2024 09:25:11 +0800 Subject: [PATCH 05/16] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8E=9F=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Events/TrackUpsertEvent.cs | 10 ++++++++++ .../EventHandlers/TrackRefreshEventHandler.cs | 2 ++ .../EventHandlers/TrackUpsertEventHandler.cs | 2 ++ .../TrackDetailsAggregate/TrackDetailsIndex.cs | 5 ----- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs index eb836245..d6fcb03a 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs @@ -38,4 +38,14 @@ public class TrackUpsertEvent : UpsertTrackInput /// 已经处理过的订单 /// public List Visited { get; set; } = new(); + + /// + /// 原轨迹内容 + /// + public string? OriginTrackContent { get; set; } + + /// + /// 原轨迹报文 + /// + public string? OriginTrackData { get; set; } } \ No newline at end of file diff --git a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs index 9d0e410d..be24fbf0 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs @@ -95,6 +95,7 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe TrackUpsertEvent @event) { var trackUpsertEvent = @event.DeepCopy(); + trackUpsertEvent.OriginTrackData = JsonConvert.SerializeObject(trackToken); var paramConfig = paramWithContentConfig.ParamConfig; var contentConfigs = paramWithContentConfig.ContentConfigs; TrackPullContentConfigDto? matchedContentConfig = null; @@ -123,6 +124,7 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe var trackContent = trackToken[paramConfig.TrackContentName]?.Value(); if (!trackContent.IsNullOrWhiteSpace()) { + trackUpsertEvent.OriginTrackContent = trackContent; Debug.Assert(trackContent != null, nameof(trackContent) + " != null"); matchedContentConfig = contentConfigs.FirstOrDefault(x => x.TrackContentValue == trackContent); diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 48d1d3f9..0e5da045 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -132,6 +132,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe TrackTime = @event.TrackTime!.Value, TrackTimeZone = @event.TrackTimeZone!.Value, IsCanDelete = trackContent.IsCanDelete, + OriginTrackContent = @event.OriginTrackContent, + OriginTrackData = @event.OriginTrackData, CreateUser = CurrentUserRequest.CurrentUser.Name, CreateTime = DateTime.Now }; diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs index 5581c19d..b596c85a 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs @@ -52,11 +52,6 @@ public class TrackDetailsIndex : IdBaseIndex /// public bool IsCompleted { get; set; } - /// - /// 原轨迹状态 - /// - public string? OriginTrackStatus { get; set; } - /// /// 原轨迹内容 /// From 8dcc0596806ff0babd228e2db22d36ccb2d1a9a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Thu, 21 Mar 2024 10:00:56 +0800 Subject: [PATCH 06/16] =?UTF-8?q?cap=E6=B6=88=E8=B4=B9=E5=B9=82=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/CAPFilter.cs | 109 ++++++++++++++++++ .../SjzyTrackApplicationModule.cs | 9 +- 2 files changed, 114 insertions(+), 4 deletions(-) create mode 100644 src/SJZY.Track.Application/EventHandlers/CAPFilter.cs diff --git a/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs b/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs new file mode 100644 index 00000000..fbee07b0 --- /dev/null +++ b/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs @@ -0,0 +1,109 @@ +using System.Globalization; +using DotNetCore.CAP.Filter; +using SJZY.Expand.ABP.Core; +using SJZY.Expand.ABP.Core.Logger; +using SJZY.Expand.ABP.Core.PublicMethords; + +namespace SJZY.Track.Application.EventHandlers; + +public class CAPFilter : SubscribeFilter +{ + const string _ERROR_CODE = "Error599"; + + /// + /// 执行前 + /// + /// + /// + public override Task OnSubscribeExecutingAsync(ExecutingContext context) + { + var argumentJsonStr = context.Arguments.ToJson(); + + context.DeliverMessage.Headers["sjzy-receive-time"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"); + context.DeliverMessage.Headers["sjzy-arguments"] = argumentJsonStr; + + if (!string.IsNullOrEmpty(argumentJsonStr)) + { + var hash = argumentJsonStr.GetHash(); + using (RedisHelper.Client.Lock("Filter:" + hash, 10)) + { + var isSkip = !string.IsNullOrEmpty(RedisHelper.Client.Get($"CapExcuteFilter:{hash}")); + if (isSkip) + throw new BusinessException(_ERROR_CODE, $"检测到重复消费,消费参数:{argumentJsonStr}"); + + RedisHelper.Client.Set($"CapExcuteFilter:{hash}", 60 * 10, + TimeSpan.FromDays(1).Seconds); // 1天内不允许一模一样的参数重复消费 + } + } + + return Task.CompletedTask; + } + + /// + /// 执行后 + /// + /// + /// + public override Task OnSubscribeExecutedAsync(ExecutedContext context) + { + context.DeliverMessage.Headers.TryGetValue("sjzy-receive-time", out var receiveTime); + context.DeliverMessage.Headers.TryGetValue("cap-msg-name", out var receiveName); + context.DeliverMessage.Headers.TryGetValue("sjzy-arguments", out var arguments); + context.DeliverMessage.Headers.TryGetValue("cap-msg-id", out var messageId); + + BuildLog(receiveTime, receiveName, arguments, false, messageId); + + return Task.CompletedTask; + } + + + /// + /// 消费异常事件 + /// + /// + /// + public override Task OnSubscribeExceptionAsync(ExceptionContext context) + { + context.ExceptionHandled = true; + + if (context.Exception is BusinessException ex && ex.Code == _ERROR_CODE) + LogHelper.Warn(ex.ToString()); + else + LogHelper.Error(context.Exception.ToString()); + + + context.DeliverMessage.Headers.TryGetValue("sjzy-receive-time", out var receiveTime); + context.DeliverMessage.Headers.TryGetValue("cap-msg-id", out var messageId); + context.DeliverMessage.Headers.TryGetValue("cap-msg-name", out var receiveName); + context.DeliverMessage.Headers.TryGetValue("sjzy-arguments", out var arguments); + + BuildLog(receiveTime, receiveName, arguments, true, messageId); + + return Task.CompletedTask; + } + + + private void BuildLog(string receiveTime, string receiveName, string arguments, bool isFromExecptionFliter, + string messageId) + { + var parsedDate = DateTime.ParseExact(receiveTime, "yyyy-MM-dd HH:mm:ss fff", CultureInfo.InvariantCulture); + var useTime = DateTime.Now - parsedDate; + + var log = $@" +|-消息编号:{messageId} +|-消费者名:{receiveName} +|-跳过执行:{(isFromExecptionFliter ? "是" : "否")} +|-执行时间:{receiveTime} +|-消费耗时:{useTime.Milliseconds}毫秒 +|-请求参数:{arguments}"; + + if (useTime.Minutes > 20) + { + LogHelper.Error(log); + } + else + { + //LogHelper.Info(log); + } + } +} \ No newline at end of file diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs index b2b2cd06..88062bb8 100644 --- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs +++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs @@ -6,6 +6,7 @@ using SJZY.Expand.ABP.Core.Logger; using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.InterfaceRelay.Application.Contracts; using SJZY.Track.Application.Contract; +using SJZY.Track.Application.EventHandlers; using SJZY.Track.Application.Localization; using SJZY.UserCenter.Contracts; using SJZY.UserCenter.SharedModel; @@ -90,7 +91,7 @@ namespace SJZY.Track.Application { dashboardOptions.PathBase = System.Diagnostics.Debugger.IsAttached ? "" - : configuration["Swagger:JsonUrlPrefix"]; + : configuration["Swagger:JsonUrlPrefix"]!; }); options.FailedThresholdCallback = faileCalback => { @@ -99,15 +100,15 @@ namespace SJZY.Track.Application LogHelper.Error($@" |-CAP失败回调事件: |-处理类型:{(faileCalback.MessageType == DotNetCore.CAP.Messages.MessageType.Subscribe ? "消费消息达到最大重试次数,需要开发人员介入" : "生产消息推送失败")} - |-头部信息:{faileCalback?.Message?.Headers?.ToJson()} - |-消息内容:{((JsonElement)faileCalback?.Message?.Value).GetRawText()}"); + |-头部信息:{faileCalback.Message.Headers.ToJson()} + |-消息内容:{((JsonElement?)faileCalback.Message.Value)?.GetRawText()}"); } catch (Exception ex) { LogHelper.Error("【严重】CAP失败回调事件发生未处理异常" + ex); } }; - }); + }).AddSubscribeFilter(); } public override void PreConfigureServices(ServiceConfigurationContext context) From 0a9bf47df3c0ab89b3f0b0960b1b73c62a892167 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Thu, 21 Mar 2024 10:32:00 +0800 Subject: [PATCH 07/16] =?UTF-8?q?=E8=BD=A8=E8=BF=B9=E7=B4=A2=E5=BC=95?= =?UTF-8?q?=E5=A4=9A=E5=AD=98=E4=B8=80=E4=B8=AAzero=20track=20time?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/TrackUpsertEventHandler.cs | 2 ++ .../Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 0e5da045..f5d542ef 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -137,6 +137,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe CreateUser = CurrentUserRequest.CurrentUser.Name, CreateTime = DateTime.Now }; + + track.ZeroTrackTime = track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone)); } else { diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs index b596c85a..b3319d35 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs @@ -82,6 +82,11 @@ public class TrackDetailsIndex : IdBaseIndex /// public float TrackTimeZone { get; set; } + /// + /// 转化后的轨迹发生时间 + /// + public DateTime ZeroTrackTime { get; set; } + /// 是否可删 public bool IsCanDelete { get; set; } From 4166a36bf0995d7f9a8ddba5643b147a7692c970 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Thu, 21 Mar 2024 10:52:53 +0800 Subject: [PATCH 08/16] =?UTF-8?q?=E8=BD=A8=E8=BF=B9=20=E4=B8=8D=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E6=96=B0=E5=A2=9E/=E5=AD=98=E5=9C=A8=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=20=E5=88=86=E7=B1=BB=E8=AE=A8=E8=AE=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/ProvideServices/UpsertTrackInput.cs | 5 +++++ .../EventHandlers/TrackUpsertEventHandler.cs | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs index 8248c8e0..ce97f715 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs @@ -4,6 +4,11 @@ namespace SJZY.Track.Application.Contract.Dtos.ProvideServices; public class UpsertTrackInput : OrderNoInfo { + /// + /// true新增,false更新 + /// + public bool IsAdd { get; set; } + /// /// 轨迹内容代码 /// diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index f5d542ef..6c8fd767 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -105,7 +105,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe /// private async Task UpsertTrackAsync(TrackDetailsIndex? track, TrackUpsertEvent @event) { - if (track == default) + if (track == default && @event.IsAdd) { //todo:可以优化 // 根据轨迹code在订单模板内容中寻找匹配的 @@ -140,7 +140,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe track.ZeroTrackTime = track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone)); } - else + + if (track != default && !@event.IsAdd) { track.TrackPlace = @event.TrackPlace; track.TrackTime = @event.TrackTime!.Value; From 4b189b378d142a028badf416078b18c722e043d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Thu, 21 Mar 2024 11:34:06 +0800 Subject: [PATCH 09/16] =?UTF-8?q?=E6=89=B9=E9=87=8Fupsert=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9=E4=B9=9F=E5=8C=BA=E5=88=86isAdd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/ProvideServices/BatchUpsertTrackInput.cs | 5 +++++ .../Services/ProvideServices/TrackService.cs | 1 + 2 files changed, 6 insertions(+) diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs index fa5d3880..1c90e3a9 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs @@ -4,6 +4,11 @@ namespace SJZY.Track.Application.Contract.Dtos.ProvideServices; public class BatchUpsertTrackInput : OrderNosInfo { + /// + /// true新增,false更新 + /// + public bool IsAdd { get; set; } + /// /// 轨迹内容代码 /// diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index b45d9313..3e03dc21 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -86,6 +86,7 @@ public partial class TrackService : ApplicationService, ITrackService // 新增/更新轨迹 var @event = new TrackUpsertEvent { + IsAdd = input.IsAdd, TrackCode = input.TrackCode, TrackPlace = input.TrackPlace, TrackTime = input.TrackTime, From 7f0f11d0a3f2d78d98a2247e713db742fb1490a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Thu, 21 Mar 2024 14:50:04 +0800 Subject: [PATCH 10/16] =?UTF-8?q?=E6=8E=A8=E6=8B=89=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/ProvideServices/TrackPullService.cs | 2 +- .../Services/ProvideServices/TrackPushService.cs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs index de894ef4..9fd4cd56 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs @@ -102,7 +102,7 @@ public class TrackPullService : ApplicationService GlobalConst.TrackRefreshSubscribe, JsonConvert.SerializeObject(group.Key)); } - await RedisHelper.Client.SetExAsync(redisKey, config.PullInterval * 60, 1); + await RedisHelper.Client.SetExAsync(redisKey, config.PullInterval * 60, orders.Count); } diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs index 2fee5408..810aff3b 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs @@ -1,4 +1,5 @@ using DotNetCore.CAP; +using Microsoft.AspNetCore.Authorization; using SJZY.Track.Application.Contract.Dtos.ProvideServices; using SJZY.Track.Application.Contract.Events; using SJZY.Track.Application.Contract.Services; @@ -107,6 +108,7 @@ public class TrackPushService : ApplicationService /// 定时任务推送预警(》12小时没有推送的) /// /// + [AllowAnonymous] [HttpPost("Track/PushWarnForTask")] public async Task PushWarnForTaskAsync() { From c76f8a99088a68c032785e968e4ac84fcb3bfb45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Fri, 22 Mar 2024 09:27:42 +0800 Subject: [PATCH 11/16] =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=BD=A8=E8=BF=B9upser?= =?UTF-8?q?t=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/TrackUpsertEventHandler.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 6c8fd767..2da1fd9b 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -1,5 +1,4 @@ -using System.Diagnostics; -using DotNetCore.CAP; +using DotNetCore.CAP; using SJZY.Expand.ABP.Core.Logger; using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Track.Application.Contract.Dtos.ProvideServices; @@ -59,10 +58,12 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe } var track = await _trackDetailsRepository.GetFirstOrDefaultAsync(@event.OrderId, @event.TrackCode); + if (track == null && !@event.IsAdd) return; + if (track != null && @event.IsAdd) return; // step1、upsert es轨迹 track = await UpsertTrackAsync(track, @event); - Debug.Assert(track != null, nameof(track) + " != null"); + if (track == null) return; // 模板没配该轨迹代码,无法入库 // step2、触发轨迹推送事件(异步) await HandleTrackPushAsync(@event, track); @@ -105,7 +106,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe /// private async Task UpsertTrackAsync(TrackDetailsIndex? track, TrackUpsertEvent @event) { - if (track == default && @event.IsAdd) + if (track == default) { //todo:可以优化 // 根据轨迹code在订单模板内容中寻找匹配的 @@ -140,8 +141,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe track.ZeroTrackTime = track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone)); } - - if (track != default && !@event.IsAdd) + else { track.TrackPlace = @event.TrackPlace; track.TrackTime = @event.TrackTime!.Value; From 3bc9b233d5e847220d18696bd87adac6e3cf1d38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Sat, 23 Mar 2024 14:12:02 +0800 Subject: [PATCH 12/16] 1 --- .../TrackPushConfigDto.cs} | 2 +- .../Services/ITrackPushCacheService.cs | 2 +- .../AutoMapper/TrackPushAutoMapperProfile.cs | 5 +- .../EventHandlers/TrackUpsertEventHandler.cs | 2 +- .../TrackPush/TrackPushCacheService.cs | 12 ++-- .../ITrackPushConfigRepository.cs | 11 +++- .../TrackPush/TrackPushContentConfigVO.cs | 59 +++++++++++++++++ .../Repositories/TrackPushConfigRepository.cs | 64 +++++++++++++++---- 8 files changed, 127 insertions(+), 30 deletions(-) rename src/SJZY.Track.Application.Contract/Dtos/{ProvideServices/TrackPushContentConfigDto.cs => TrackPush/TrackPushConfigDto.cs} (96%) create mode 100644 src/SJZY.Track.Domain/Dtos/TrackPush/TrackPushContentConfigVO.cs diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/TrackPushContentConfigDto.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushConfigDto.cs similarity index 96% rename from src/SJZY.Track.Application.Contract/Dtos/ProvideServices/TrackPushContentConfigDto.cs rename to src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushConfigDto.cs index a019087f..1f129458 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/TrackPushContentConfigDto.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushConfigDto.cs @@ -1,4 +1,4 @@ -namespace SJZY.Track.Application.Contract.Dtos.ProvideServices; +namespace SJZY.Track.Application.Contract.Dtos.TrackPush; public class TrackPushConfigDto { diff --git a/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs b/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs index ab34ac01..91b80c3e 100644 --- a/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs +++ b/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs @@ -1,4 +1,4 @@ -using SJZY.Track.Application.Contract.Dtos.ProvideServices; +using SJZY.Track.Application.Contract.Dtos.TrackPush; namespace SJZY.Track.Application.Contract.Services; diff --git a/src/SJZY.Track.Application/AutoMapper/TrackPushAutoMapperProfile.cs b/src/SJZY.Track.Application/AutoMapper/TrackPushAutoMapperProfile.cs index 6be69d46..213d7872 100644 --- a/src/SJZY.Track.Application/AutoMapper/TrackPushAutoMapperProfile.cs +++ b/src/SJZY.Track.Application/AutoMapper/TrackPushAutoMapperProfile.cs @@ -1,8 +1,8 @@ using AutoMapper; -using SJZY.Track.Application.Contract.Dtos.ProvideServices; using SJZY.Track.Application.Contract.Dtos.TrackPush; using SJZY.Track.Domain.Aggregates.TrackPullAggregate; using SJZY.Track.Domain.Aggregates.TrackPushAggregate; +using SJZY.Track.Domain.Dtos.TrackPush; using Volo.Abp.AutoMapper; namespace SJZY.Track.Application.AutoMapper; @@ -15,7 +15,6 @@ public class TrackPushAutoMapperProfile : Profile CreateMap(MemberList.None).Ignore(dest => dest.Id) .ForMember(dest => dest.IsPush, opt => opt.MapFrom(source => true)); CreateMap(MemberList.None); - CreateMap(MemberList.None) - .ForMember(dest => dest.OrderType, opt => opt.MapFrom(source => source.OrderNoType)); + CreateMap(MemberList.None); } } \ No newline at end of file diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 2da1fd9b..97a07e17 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -1,7 +1,7 @@ using DotNetCore.CAP; using SJZY.Expand.ABP.Core.Logger; using SJZY.Expand.ABP.Core.PublicMethords; -using SJZY.Track.Application.Contract.Dtos.ProvideServices; +using SJZY.Track.Application.Contract.Dtos.TrackPush; using SJZY.Track.Application.Contract.Events; using SJZY.Track.Application.Contract.Services; using SJZY.Track.Domain.Aggregates.OrderAggregate; diff --git a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs index 5dc319f8..fe72985a 100644 --- a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs +++ b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs @@ -1,9 +1,10 @@ using System.Linq.Expressions; using SJZY.Expand.ABP.Core; -using SJZY.Track.Application.Contract.Dtos.ProvideServices; +using SJZY.Track.Application.Contract.Dtos.TrackPush; using SJZY.Track.Application.Contract.Services; using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Consts; +using SJZY.Track.Domain.Dtos.TrackPush; namespace SJZY.Track.Application.Services.TrackPush; @@ -74,16 +75,13 @@ public class TrackPushCacheService : ApplicationService, ITrackPushCacheService var trackPushConfigEntity = await _trackPushConfigRepository.GetFirstAsync(exp); if (trackPushConfigEntity == null) return data; - var trackPushContentList = - await _trackPushConfigRepository.GetContentListAsync(x => x.TrackPushConfigId == trackPushConfigEntity.Id); + var trackPushContentList = await _trackPushConfigRepository.GetContentListAsync(trackPushConfigEntity.Id); if (trackPushContentList.Count == 0) return data; - trackPushContentList = trackPushContentList.OrderBy(x => x.Sort).ToList(); - data.IsAutoPush = trackPushConfigEntity.IsAutoPush; data.ContentConfigs = - ObjectMapper.Map, List>(trackPushContentList); - + ObjectMapper.Map, List>(trackPushContentList); + ; await RedisHelper.Client.SetAsync( TrackPushContentKey(trackPushConfigEntity.SubSystemId, trackPushConfigEntity.CustomId), data); diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushConfigRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushConfigRepository.cs index 80013967..641fb386 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushConfigRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushConfigRepository.cs @@ -23,11 +23,16 @@ public interface ITrackPushConfigRepository : IBasicRepository UpdateContentAsync(TrackPushContentConfigEntity updateObj); - Task> GetContentListAsync(Expression> whereExpression); + Task> GetContentListAsync( + Expression> whereExpression); + + Task> GetContentListAsync(int configId); Task UpdateContentRangeAsync(List updateObjs); - Task ContentMaxAsync(Expression> columns, Expression> whereExpression); + Task ContentMaxAsync(Expression> columns, + Expression> whereExpression); - Task UpdateContentAsync(Expression> columns, Expression> whereExpression); + Task UpdateContentAsync(Expression> columns, + Expression> whereExpression); } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Dtos/TrackPush/TrackPushContentConfigVO.cs b/src/SJZY.Track.Domain/Dtos/TrackPush/TrackPushContentConfigVO.cs new file mode 100644 index 00000000..1f67fb8d --- /dev/null +++ b/src/SJZY.Track.Domain/Dtos/TrackPush/TrackPushContentConfigVO.cs @@ -0,0 +1,59 @@ +namespace SJZY.Track.Domain.Dtos.TrackPush; + +public class TrackPushContentConfigVO +{ + /// + /// 是否自动推送 + /// + public bool IsAutoPush { get; set; } + + /// + /// 是否支持更新 + /// + public bool IsCanUpdate { get; set; } + + /// + /// 服务商code + /// + public string ServiceProviderCode { get; set; } = null!; + + /// + /// 扩展字段参数值 + /// + public string? ExpandFieldsValue { get; set; } + + /// + /// 推送单号类型(主数据枚举TrackOrderType) + /// + public int OrderType { get; set; } + + /// + /// 轨迹代码参数值 + /// + public string? TrackContentCodeValue { get; set; } + + /// + /// 轨迹内容id + /// + public int TrackContentId { get; set; } + + /// + /// 轨迹内容参数值 + /// + public string? TrackContentValue { get; set; } + + /// + /// 轨迹内容英文参数值 + /// + public string? TrackEnContentValue { get; set; } + + /// + /// 轨迹状态参数值 + /// + public string? TrackStatusValue { get; set; } + + /// + /// 轨迹时区GMT + /// + public double? TrackTimeZone { get; set; } +} \ No newline at end of file diff --git a/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs index e58b1020..74bfc0d3 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs @@ -1,14 +1,13 @@ -using SJZY.Expand.ABP.Core.PublicMethords; +using System.Linq.Expressions; +using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Track.Domain.Aggregates.TrackContentAggregate; using SJZY.Track.Domain.Aggregates.TrackPullAggregate; using SJZY.Track.Domain.Aggregates.TrackPushAggregate; -using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate; using SJZY.Track.Domain.Dtos.Common; using SJZY.Track.Domain.Dtos.TrackPush; using SJZY.Track.Domain.Enums; using SJZY.Track.Domain.VEntities; using SJZY.Track.Repository.VData.Entitys; -using System.Linq.Expressions; namespace SJZY.Track.Repository.Repositories; @@ -19,11 +18,14 @@ public class TrackPushConfigRepository : BasicRepository, { return await AsQueryable() .LeftJoin((trackPush, system) => trackPush.SubSystemId == system.Id && !system.IsDeleted) - .LeftJoin((trackPush, system, externalSubject) => trackPush.CustomId == externalSubject.Id && !externalSubject.IsDeleted) + .LeftJoin((trackPush, system, externalSubject) => + trackPush.CustomId == externalSubject.Id && !externalSubject.IsDeleted) .Filter(null, true) .Where(trackPush => !trackPush.IsDeleted) .WhereIF(input.SubSystemId.HasValue, trackPush => trackPush.SubSystemId == input.SubSystemId) - .WhereIF(!input.Keywords.IsNullOrWhiteSpace(), (trackPush, system, externalSubject) => externalSubject.Abbreviation.Contains(input.Keywords!) || externalSubject.Name.Contains(input.Keywords!)) + .WhereIF(!input.Keywords.IsNullOrWhiteSpace(), + (trackPush, system, externalSubject) => externalSubject.Abbreviation.Contains(input.Keywords!) || + externalSubject.Name.Contains(input.Keywords!)) .OrderByDescending(trackPush => trackPush.CreateTime) .Select((trackPush, system, externalSubject) => new GetTrackPushConfigPageOutputVO { @@ -36,11 +38,14 @@ public class TrackPushConfigRepository : BasicRepository, .ToPagedListAsync(input.PageIndex, input.PageSize); } - public async Task> GetContentPageAsync(GetTrackPushContentPageInputVO input) + public async Task> GetContentPageAsync( + GetTrackPushContentPageInputVO input) { return await Context.Queryable() .InnerJoin((pushContent, trackContent) => pushContent.TrackContentId == trackContent.Id) - .LeftJoin((pushContent, trackContent, enumValue) => enumValue.Property == EnumPropertyEnums.单号类型.GetDescription() && pushContent.OrderNoType == enumValue.Enumkey && !enumValue.IsDeleted) + .LeftJoin((pushContent, trackContent, enumValue) => + enumValue.Property == EnumPropertyEnums.单号类型.GetDescription() && + pushContent.OrderNoType == enumValue.Enumkey && !enumValue.IsDeleted) .Where(pushContent => pushContent.TrackPushConfigId == input.TrackPushConfigId) .OrderBy(pushContent => pushContent.Sort) .Select((pushContent, trackContent, enumValue) => new GetTrackPushContentPageOutputVO @@ -56,9 +61,12 @@ public class TrackPushConfigRepository : BasicRepository, { return await AsQueryable() .LeftJoin((trackPush, system) => trackPush.SubSystemId == system.Id && !system.IsDeleted) - .LeftJoin((trackPush, system, externalSubject) => trackPush.CustomId == externalSubject.Id && !externalSubject.IsDeleted) - .LeftJoin((trackPush, system, externalSubject, service) => trackPush.ServiceProviderId == service.Id && !service.IsDeleted) - .InnerJoin((trackPush, system, externalSubject, service, paramsConfig) => trackPush.Id == paramsConfig.PullOrPushConfigId && paramsConfig.IsPush && !paramsConfig.IsDeleted) + .LeftJoin((trackPush, system, externalSubject) => + trackPush.CustomId == externalSubject.Id && !externalSubject.IsDeleted) + .LeftJoin((trackPush, system, externalSubject, service) => + trackPush.ServiceProviderId == service.Id && !service.IsDeleted) + .InnerJoin((trackPush, system, externalSubject, service, paramsConfig) => + trackPush.Id == paramsConfig.PullOrPushConfigId && paramsConfig.IsPush && !paramsConfig.IsDeleted) .Filter(null, true) .Where(trackPush => trackPush.Id == id && !trackPush.IsDeleted) .Select((trackPush, system, externalSubject, service, paramsConfig) => new GetTrackPushConfigDetailOutputVO @@ -112,7 +120,32 @@ public class TrackPushConfigRepository : BasicRepository, return await Context.Updateable(updateObj).ExecuteCommandHasChangeAsync(); } - public async Task> GetContentListAsync(Expression> whereExpression) + public async Task> GetContentListAsync(int configId) + { + return await Context.Queryable() + .LeftJoin((a, b) => a.Id == b.TrackPushConfigId) + .LeftJoin((a, b, c) => a.ServiceProviderId == c.Id) + .Where(a => a.Id == configId) + .OrderBy((a, b) => b.Sort) + .Select((a, b, c) => new TrackPushContentConfigVO + { + IsAutoPush = a.IsAutoPush, + IsCanUpdate = a.IsCanUpdate, + ServiceProviderCode = c.Code, + ExpandFieldsValue = b.ExpandFieldsValue, + OrderType = b.OrderNoType, + TrackContentCodeValue = b.TrackContentCodeValue, + TrackContentId = b.TrackContentId, + TrackContentValue = b.TrackContentValue, + TrackEnContentValue = b.TrackEnContentValue, + TrackStatusValue = b.TrackStatusValue, + TrackTimeZone = b.TrackTimeZone + }) + .ToListAsync(); + } + + public async Task> GetContentListAsync( + Expression> whereExpression) { return await Context.Queryable().Where(whereExpression).ToListAsync(); } @@ -122,13 +155,16 @@ public class TrackPushConfigRepository : BasicRepository, return await Context.Updateable(updateObjs).ExecuteCommandHasChangeAsync(); } - public async Task ContentMaxAsync(Expression> columns, Expression> whereExpression) + public async Task ContentMaxAsync(Expression> columns, + Expression> whereExpression) { return await Context.Queryable().Where(whereExpression).MaxAsync(columns); } - public async Task UpdateContentAsync(Expression> columns, Expression> whereExpression) + public async Task UpdateContentAsync(Expression> columns, + Expression> whereExpression) { - return await Context.Updateable().SetColumns(columns).Where(whereExpression).ExecuteCommandHasChangeAsync(); + return await Context.Updateable().SetColumns(columns).Where(whereExpression) + .ExecuteCommandHasChangeAsync(); } } \ No newline at end of file From 33f26e19f139dd8368c8a465b680947d1e193eaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Sat, 23 Mar 2024 15:07:49 +0800 Subject: [PATCH 13/16] =?UTF-8?q?=E6=8E=A8=E9=80=81=E6=97=B6=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E8=AE=A2=E5=8D=95id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/TrackUpsertEventHandler.cs | 1 + .../Services/ProvideServices/TrackPushService.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 97a07e17..e51481e5 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -192,6 +192,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe OptionType = optionType, ServiceProviderCode = config.ServiceProviderCode, OrderNo = track.OrderNo, + OrderId = track.OrderId, TrackContentId = config.TrackContentId, TrackStatus = track.TrackStatus, TrackCode = track.TrackCode, diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs index 810aff3b..b0972b56 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs @@ -79,6 +79,7 @@ public class TrackPushService : ApplicationService { ServiceProviderCode = config.ServiceProviderCode, OrderNo = order.OrderNo, + OrderId = order.Id, TrackContentId = config.TrackContentId, TrackStatus = track.TrackStatus, TrackCode = track.TrackCode, From 89bd93ad9ed094e15c407f22dfc849f0e34e68d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Sat, 23 Mar 2024 15:14:34 +0800 Subject: [PATCH 14/16] attach --- .../EventHandlers/TrackPushEventHandler.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs index a4336631..58ddb13a 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs @@ -51,6 +51,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe RequestId = res.RequestId, Message = res.Msg, OptionType = @event.OptionType.ToString(), + OrderId = @event.OrderId, TrackStatus = @event.TrackStatus, TrackCode = @event.TrackCode, TrackContent = @event.TrackContent, From 9ab866df9e8927025cd56e77a1a3f85ce31c5d9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Sat, 23 Mar 2024 15:27:09 +0800 Subject: [PATCH 15/16] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8Dnest=20=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9=E6=8E=A8=E9=80=81=E7=B4=A2=E5=BC=95=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repositories/TrackPushRecordsRepository.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/SJZY.Track.Repository/Repositories/TrackPushRecordsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackPushRecordsRepository.cs index c1bb968f..b537adb1 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackPushRecordsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackPushRecordsRepository.cs @@ -3,6 +3,7 @@ using SJZY.Expand.ABP.Core.Logger; using SJZY.Expand.ElasticSearch.Services; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Aggregates.TrackPushAggregate; +using SJZY.Track.Domain.Consts; namespace SJZY.Track.Repository.Repositories; @@ -30,6 +31,7 @@ public class TrackPushRecordsRepository : ElasticSearchContextAbstract> GetTrackPushRecordsAsync(int orderId) { var data = await Context.SearchAsync(x => x + .Index(GlobalConst.TrackPushRecordsIndex) .Query(q => q.Term(t => t.OrderId, orderId) ) From c053a83a27470b30ef1d4bb73712c29d31c0c3bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Mon, 25 Mar 2024 17:39:23 +0800 Subject: [PATCH 16/16] =?UTF-8?q?=E9=A2=84=E8=AD=A6=E5=8F=AA=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=9C=AA=E5=AE=8C=E6=88=90=E7=9A=84=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProvideServices/TrackPushService.cs | 17 ++++++++++++----- .../OrderAggregate/IOrderRepository.cs | 5 +++++ .../Queries/TrackOrderQueries.cs | 2 ++ .../Repositories/OrderRepository.cs | 18 ++++++++++++++++++ 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs index b0972b56..85e48c02 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs @@ -75,6 +75,8 @@ public class TrackPushService : ApplicationService await _pushCacheService.GetPushContentConfigAsync(order.SubSystemId, order.CustomId, track.TrackContentId); + if (config == null) continue; + var trackPushEvent = new TrackPushEvent { ServiceProviderCode = config.ServiceProviderCode, @@ -113,14 +115,19 @@ public class TrackPushService : ApplicationService [HttpPost("Track/PushWarnForTask")] public async Task PushWarnForTaskAsync() { - var time = DateTime.Now.Subtract(TimeSpan.FromHours(12)); - var orders = await _orderRepository.GetListAsync(x => - !x.IsCompleted && x.QuestionType == 0 && x.LatestPushTime < time); + var orders = await _orderRepository.GetPushWarnOrdersAsync(); - orders.ForEach(x => { x.QuestionType = (int)TrackProblemType.Warn; }); + var time = DateTime.Now.Subtract(TimeSpan.FromHours(12)); + + orders.ForEach(x => + { + x.QuestionType = x.LatestPushTime == null || x.LatestPushTime < time + ? (int)TrackProblemType.Warn + : (int)TrackProblemType.None; + }); await _orderRepository.UpdateRangeAsync(orders, x => new { x.QuestionType }); - return $"成功将{orders.Select(x => x.OrderNo).JoinAsString(",")}置为预警单"; + return $"成功将:{orders.Count(x => x.QuestionType == (int)TrackProblemType.Warn)}个订单置为预警"; } } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs index acc0d4de..10832b40 100644 --- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs @@ -25,6 +25,11 @@ public interface IOrderRepository : IBasicRepository /// Task DeleteOrderAsync(int orderId); + /// + /// 获取推送预警单 + /// + /// + Task> GetPushWarnOrdersAsync(); #region 订单关联 diff --git a/src/SJZY.Track.Repository/Queries/TrackOrderQueries.cs b/src/SJZY.Track.Repository/Queries/TrackOrderQueries.cs index 8d9d2504..841a3555 100644 --- a/src/SJZY.Track.Repository/Queries/TrackOrderQueries.cs +++ b/src/SJZY.Track.Repository/Queries/TrackOrderQueries.cs @@ -1,6 +1,7 @@ using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate; using SJZY.Track.Domain.Dtos.Order; +using SJZY.Track.Domain.Enums; using SJZY.Track.Domain.Queries; using SJZY.Track.Domain.VEntities; using SJZY.Track.Repository.VData.Entitys; @@ -38,6 +39,7 @@ public class TrackOrderQueries : ISugarRepository, ITrackOrderQueries, .WhereIF(input.CustomerId > 0, (a, b, c) => a.CustomId == input.CustomerId) .WhereIF(input.TrackOrderType > 0, (a, b, c) => a.OrderType == input.TrackOrderType) .WhereIF(input.TabType > 0, (a, b, c) => a.QuestionType == input.TabType) + .WhereIF(input.TabType == (int)TrackProblemType.Warn, (a, b, c) => !a.IsCompleted) .OrderByDescending((a, b, c) => a.CreateTime) .Select((a, b, c) => new TrackOrderVO { diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs index 26a8ed2b..3d18de17 100644 --- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs @@ -1,6 +1,8 @@ using SJZY.Track.Domain; using SJZY.Track.Domain.Aggregates.OrderAggregate; +using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Dtos.Order; +using SJZY.Track.Domain.Enums; namespace SJZY.Track.Repository.Repositories; @@ -53,6 +55,22 @@ public class OrderRepository : BasicRepository, IOrderRepository, I tran.Complete(); } + public async Task> GetPushWarnOrdersAsync() + { + var errorType = (int)TrackProblemType.Error; + + return await Context.Queryable() + .LeftJoin((a, b) => a.SubSystemId == b.SubSystemId && a.CustomId == b.CustomId) + .Where((a, b) => !b.IsCompleted && b.QuestionType != errorType) + .Select((a, b) => new OrderEntity + { + Id = b.Id, + QuestionType = b.QuestionType, + LatestPushTime = b.LatestPushTime + }) + .ToListAsync(); + } + #region 订单关联 public async Task> GetLinkedOrdersAsync(int orderId)