From 7bd2784bfaae2f8ed24d90a6d443da754779ce57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E9=BE=99=20=E7=8E=8B?= Date: Fri, 15 Nov 2024 15:52:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E3=80=90=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9=E6=96=B0=E5=A2=9E/=E6=9B=B4=E6=96=B0=E3=80=91?= =?UTF-8?q?=E6=A0=A1=E9=AA=8Cbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit update:调整轨迹更新事件处理逻辑,场景覆盖已经通过自测 --- .../EventHandlers/TrackUpsertEventHandler.cs | 32 +++++++++++-------- .../Services/ProvideServices/TrackService.cs | 8 ++--- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index a5035d63..4ec5b545 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -137,6 +137,14 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe return; } + //虽然在引发事件之前做了判断,引发之后并不一定立即处理,在此过程中轨迹内容仍然可能被修改,所以要二次进行判断。 + //通过来源指示是否为手动操作 + var manualOperation = @event.Source == (int) TrackSourceEnum.Artificial; + //轨迹内容标识不允许手动创建的 + if (manualOperation && @event.IsAdd && trackContent.IsAllowManuallyCreate == false) return; + //轨迹内容标识不允许手动更新的 + if (manualOperation && !@event.IsAdd && trackContent.IsAllowManuallyUpdate == false) return; + var insertTracks = await UpsertTrackAsync(@event, canNextOrderIds, trackContent); if (canNextOrderIds.Count == 0) return; @@ -203,15 +211,11 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray(); // important:轨迹code相同,时间、发生地不同的,可能存在多条!! - //todo:查出多条轨迹,同订单同code也可能出现多条, - //按同code找轨迹如果有多条则不允许修改,如果没有则进行新增 var tracks = await _trackDetailsEsRepository.GetListAsync(orderIds, @event.TrackCode, true); var insertTracks = new List(); var updateTracks = new List(); - //todo:标识轨迹内容是否是重复的,将来需要替换会从轨迹内容中获取 - var isRepeatable = true; foreach (var order in @event.OrderIdentifiers) { TrackDetailsIndex? track; @@ -240,12 +244,13 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe // 场景B:允许重复,一条 => 新增(约束受限新增,否则跳过新增) // 场景C:允许重复,多条 => 新增(约束受限新增,否则跳过新增) // 场景D:不允许重复,零条 => 新增 - // 场景E:不允许重复,一条 => 更新 + // 场景E:不允许重复,一条 => 跳过 // 场景F:不允许重复,(理想不会出现多条) => 跳过 var existTracks = tracks.Where(x => x.OrderId == order.OrderId).ToArray(); track = existTracks.FirstOrDefault(); - if (isRepeatable && existTracks.Length >= 1) + //覆盖场景:B,C + if (trackContent.IsRepeatable && existTracks.Length >= 1) { if (existTracks.Any(x => x.TrackPlace == @event.TrackPlace && x.TrackTime == @event.TrackTime)) { @@ -257,10 +262,14 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe track = null; } - if (!isRepeatable && existTracks.Length > 1) + //不允许重复,并且记录大于等于一条,跳过 + //覆盖场景:E,F + if (!trackContent.IsRepeatable && existTracks.Length >= 1) { continue; } + + //其余情况:A,D都为新增操作,无需检查数量,track为null执行新增操作 } if (track == default) @@ -285,7 +294,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe TrackStatusCode = trackContent.TrackStatusCode, TrackContent = trackContent.TrackContent, TrackEnContent = trackContent.TrackEnContent, - //新增轨迹明细字段 + //S06新增轨迹明细字段 IsVisibility = @event.IsVisibility, Source = @event.Source, Remarks = @event.Remarks ?? GlobalConst.EmptyString, @@ -318,14 +327,11 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe track.UpdateUser = @event.OperationMan ?? GlobalConst.SystemUser; track.UpdateTime = DateTime.Now; - //允许二次修改,在修改了轨迹内容后进行修改轨迹操作,如果输入的轨迹内容和英文则进行更改 - track.TrackStatus = trackContent.TrackStatus; //todo?允许修改状么? + //允许二次修改,在修改了轨迹内容后进行修改轨迹操作,如果输入的轨迹内容则以输入为准 track.TrackContent = @event.Content ?? trackContent.TrackContent; track.TrackEnContent = @event.EnStatus ?? trackContent.TrackEnContent; - - //todo:修改轨迹增加字段(其中某些字段不允许更改) + //S06新增 track.IsVisibility = @event.IsVisibility; - //track.Source = @event.Source; //来源不允许更改 track.Remarks = @event.Remarks ?? GlobalConst.EmptyString; track.Files = @event.Files?.Select(x => new FileItem { diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index 48967bfb..37a6e394 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -82,7 +82,7 @@ public partial class TrackService : ApplicationService, ITrackService } //不允许手动更新 - if (manualOperation && !input.IsAdd && trackContent.IsAllowManuallyUpdate) + if (manualOperation && !input.IsAdd && !trackContent.IsAllowManuallyUpdate) { throw new BusinessException(message: $"轨迹代码:{input.TrackCode}不允许手动更新"); } @@ -90,7 +90,7 @@ public partial class TrackService : ApplicationService, ITrackService var tracks = await _trackDetailsEsRepository.GetListAsync(new[] { order.Id }, input.TrackCode, true); //轨迹内容不允许重复,并且已经存在了轨迹记录 - if (!trackContent.IsRepeatable && tracks.Count >= 1) + if (input.IsAdd && !trackContent.IsRepeatable && tracks.Count >= 1) { throw new BusinessException(message: $"轨迹代码:{input.TrackCode}不允许重复添加"); } @@ -281,7 +281,7 @@ public partial class TrackService : ApplicationService, ITrackService } //不允许手动更新 - if (manualOperation && !input.IsAdd && trackContent.IsAllowManuallyUpdate) + if (manualOperation && !input.IsAdd && !trackContent.IsAllowManuallyUpdate) { throw new BusinessException(message: $"轨迹代码:{input.TrackCode}不允许手动更新"); } @@ -289,7 +289,7 @@ public partial class TrackService : ApplicationService, ITrackService var tracks = await _trackDetailsEsRepository.GetListAsync(new[] { order.Id }, input.TrackCode, true); //轨迹内容不允许重复,并且已经存在了轨迹记录 - if (!trackContent.IsRepeatable && tracks.Count >= 1) + if (input.IsAdd && !trackContent.IsRepeatable && tracks.Count >= 1) { throw new BusinessException(message: $"轨迹代码:{input.TrackCode}不允许重复添加"); }