Merge remote-tracking branch 'origin/S06' into S06

This commit is contained in:
eli 2024-11-15 16:20:20 +08:00
commit 0a38291987
2 changed files with 23 additions and 17 deletions

View File

@ -194,6 +194,14 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
return default; return default;
} }
//虽然在引发事件之前做了判断,引发之后并不一定立即处理,在此过程中轨迹内容仍然可能被修改,所以要二次进行判断。
//通过来源指示是否为手动操作
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); var insertTracks = await UpsertTrackAsync(@event, canNextOrderIds, trackContent);
if (canNextOrderIds.Count == 0) return trackContent; if (canNextOrderIds.Count == 0) return trackContent;
@ -262,15 +270,11 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray(); var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray();
// important:轨迹code相同,时间、发生地不同的,可能存在多条!! // important:轨迹code相同,时间、发生地不同的,可能存在多条!!
//todo:查出多条轨迹,同订单同code也可能出现多条,
//按同code找轨迹如果有多条则不允许修改,如果没有则进行新增
var tracks = await _trackDetailsEsRepository.GetListAsync(orderIds, @event.TrackCode, true); var tracks = await _trackDetailsEsRepository.GetListAsync(orderIds, @event.TrackCode, true);
var insertTracks = new List<TrackDetailsIndex>(); var insertTracks = new List<TrackDetailsIndex>();
var updateTracks = new List<TrackDetailsIndex>(); var updateTracks = new List<TrackDetailsIndex>();
//todo:标识轨迹内容是否是重复的,将来需要替换会从轨迹内容中获取
var isRepeatable = true;
foreach (var order in @event.OrderIdentifiers) foreach (var order in @event.OrderIdentifiers)
{ {
TrackDetailsIndex? track; TrackDetailsIndex? track;
@ -299,12 +303,13 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
// 场景B:允许重复,一条 => 新增(约束受限新增,否则跳过新增) // 场景B:允许重复,一条 => 新增(约束受限新增,否则跳过新增)
// 场景C:允许重复,多条 => 新增(约束受限新增,否则跳过新增) // 场景C:允许重复,多条 => 新增(约束受限新增,否则跳过新增)
// 场景D:不允许重复,零条 => 新增 // 场景D:不允许重复,零条 => 新增
// 场景E:不允许重复,一条 => 更新 // 场景E:不允许重复,一条 => 跳过
// 场景F:不允许重复,(理想不会出现多条) => 跳过 // 场景F:不允许重复,(理想不会出现多条) => 跳过
var existTracks = tracks.Where(x => x.OrderId == order.OrderId).ToArray(); var existTracks = tracks.Where(x => x.OrderId == order.OrderId).ToArray();
track = existTracks.FirstOrDefault(); 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)) if (existTracks.Any(x => x.TrackPlace == @event.TrackPlace && x.TrackTime == @event.TrackTime))
{ {
@ -316,10 +321,14 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
track = null; track = null;
} }
if (!isRepeatable && existTracks.Length > 1) //不允许重复,并且记录大于等于一条,跳过
//覆盖场景:E,F
if (!trackContent.IsRepeatable && existTracks.Length >= 1)
{ {
continue; continue;
} }
//其余情况:A,D都为新增操作,无需检查数量,track为null执行新增操作
} }
if (track == default) if (track == default)
@ -344,7 +353,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
TrackStatusCode = trackContent.TrackStatusCode, TrackStatusCode = trackContent.TrackStatusCode,
TrackContent = trackContent.TrackContent, TrackContent = trackContent.TrackContent,
TrackEnContent = trackContent.TrackEnContent, TrackEnContent = trackContent.TrackEnContent,
//新增轨迹明细字段 //S06新增轨迹明细字段
IsVisibility = @event.IsVisibility, IsVisibility = @event.IsVisibility,
Source = @event.Source, Source = @event.Source,
Remarks = @event.Remarks ?? GlobalConst.EmptyString, Remarks = @event.Remarks ?? GlobalConst.EmptyString,
@ -377,14 +386,11 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
track.UpdateUser = @event.OperationMan ?? GlobalConst.SystemUser; track.UpdateUser = @event.OperationMan ?? GlobalConst.SystemUser;
track.UpdateTime = DateTime.Now; track.UpdateTime = DateTime.Now;
//允许二次修改,在修改了轨迹内容后进行修改轨迹操作,如果输入的轨迹内容和英文则进行更改 //允许二次修改,在修改了轨迹内容后进行修改轨迹操作,如果输入的轨迹内容则以输入为准
track.TrackStatus = trackContent.TrackStatus; //todo?允许修改状么?
track.TrackContent = @event.Content ?? trackContent.TrackContent; track.TrackContent = @event.Content ?? trackContent.TrackContent;
track.TrackEnContent = @event.EnStatus ?? trackContent.TrackEnContent; track.TrackEnContent = @event.EnStatus ?? trackContent.TrackEnContent;
//S06新增
//todo:修改轨迹增加字段(其中某些字段不允许更改)
track.IsVisibility = @event.IsVisibility; track.IsVisibility = @event.IsVisibility;
//track.Source = @event.Source; //来源不允许更改
track.Remarks = @event.Remarks ?? GlobalConst.EmptyString; track.Remarks = @event.Remarks ?? GlobalConst.EmptyString;
track.Files = @event.Files?.Select(x => new FileItem 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}不允许手动更新"); 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); 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}不允许重复添加"); 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}不允许手动更新"); 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); 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}不允许重复添加"); throw new BusinessException(message: $"轨迹代码:{input.TrackCode}不允许重复添加");
} }