fix: 修复【轨迹新增/更新】校验bug

update:调整轨迹更新事件处理逻辑,场景覆盖已经通过自测
This commit is contained in:
云龙 王 2024-11-15 15:52:21 +08:00
parent 69e0731b7e
commit 7bd2784bfa
2 changed files with 23 additions and 17 deletions

View File

@ -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<TrackDetailsIndex>();
var updateTracks = new List<TrackDetailsIndex>();
//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
{

View File

@ -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}不允许重复添加");
}