【 7. 轨迹增删改,去除对轨迹模板的依赖】
https://www.tapd.cn/60863849/prong/tasks/view/1160863849001027883
This commit is contained in:
parent
4d30d935ba
commit
bd0287dfb0
@ -26,4 +26,10 @@ public class TrackDeleteEvent
|
|||||||
/// 已经处理过的订单
|
/// 已经处理过的订单
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<int> Visited { get; set; } = new();
|
public List<int> Visited { get; set; } = new();
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return $"[TrackDelete by {OperationMan}] SubSystemId: {SubSystemId}, OrderIds: {string.Join(",",
|
||||||
|
OrderIds)}, TrackCodes: {string.Join(",", TrackCodes)}";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -58,4 +58,11 @@ public class TrackUpsertEvent
|
|||||||
/// 时区缺失和发生地缺失标记,1表示时区,2表示发生地,3表示两种
|
/// 时区缺失和发生地缺失标记,1表示时区,2表示发生地,3表示两种
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int DeficiencyTagValue { get; set; }
|
public int DeficiencyTagValue { get; set; }
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return
|
||||||
|
$"[{(IsAdd ? "TrackInsert" : "TrackUpdate")} by {OperationMan}] SubSystemId: {SubSystemId}, OrderIds: {string.Join(",",
|
||||||
|
OrderIdentifiers.Select(x => x.OrderId))}, TrackCode: {TrackCode}, TrackPlace: {TrackPlace}, TrackTime: {TrackTime}";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -32,7 +32,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
var dup = @event.Visited.Intersect(@event.OrderIds).ToArray();
|
var dup = @event.Visited.Intersect(@event.OrderIds).ToArray();
|
||||||
if (dup.Any())
|
if (dup.Any())
|
||||||
{
|
{
|
||||||
LogHelper.Error($"删除轨迹时,发现循环依赖:{dup.JoinAsString(",")}");
|
LogHelper.Warn($"删除轨迹时,发现循环依赖:{dup.JoinAsString(",")}", true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,7 +58,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
|
|
||||||
if (mapCodes.Count == 0)
|
if (mapCodes.Count == 0)
|
||||||
{
|
{
|
||||||
//throw new BusinessException(message: "订单跨子系统,未配置内容映射,请联系管理员");
|
LogHelper.Warn($"订单跨子系统,未配置内容映射,请联系管理员:{@event}", true);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -36,7 +36,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
var dup = @event.Visited.Intersect(orderIds).ToArray();
|
var dup = @event.Visited.Intersect(orderIds).ToArray();
|
||||||
if (dup.Any())
|
if (dup.Any())
|
||||||
{
|
{
|
||||||
LogHelper.Error($"{(@event.IsAdd ? "添加" : "修改")}轨迹时,发现循环依赖:{dup.JoinAsString(",")}");
|
LogHelper.Warn($"{(@event.IsAdd ? "添加" : "修改")}轨迹时,发现循环依赖:{dup.JoinAsString(",")}", true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,20 +108,19 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
|
|
||||||
private async Task HandleTrackAsync(TrackUpsertEvent @event, List<int> canNextOrderIds)
|
private async Task HandleTrackAsync(TrackUpsertEvent @event, List<int> canNextOrderIds)
|
||||||
{
|
{
|
||||||
var content = await _provideQueries.GetTrackContentAsync(@event.SubSystemId, @event.TrackCode);
|
var trackContent = await _provideQueries.GetTrackContentAsync(@event.SubSystemId, @event.TrackCode);
|
||||||
|
|
||||||
if (content == null) return;
|
if (trackContent == null)
|
||||||
|
{
|
||||||
|
// 找不到轨迹内容,直接结束
|
||||||
|
LogHelper.Warn($"找不到轨迹内容:{@event}", true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray();
|
var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray();
|
||||||
var tracks = await _trackDetailsRepository.GetListAsync(orderIds, @event.TrackCode, true);
|
|
||||||
|
|
||||||
// important:轨迹code相同,时间、发生地不同的,允许存在多条!!
|
// important:轨迹code相同,时间、发生地不同的,可能存在多条!!
|
||||||
var newOrderIds = orderIds
|
var tracks = await _trackDetailsRepository.GetListAsync(orderIds, @event.TrackCode, true);
|
||||||
.Except(tracks
|
|
||||||
.Where(x => x.TrackTime == @event.TrackTime && x.TrackPlace == @event.TrackPlace)
|
|
||||||
.Select(x => x.OrderId)
|
|
||||||
).ToArray();
|
|
||||||
var trackContents = await _provideQueries.MatchTrackContentAsync(newOrderIds, @event.TrackCode);
|
|
||||||
|
|
||||||
var insertTracks = new List<TrackDetailsIndex>();
|
var insertTracks = new List<TrackDetailsIndex>();
|
||||||
|
|
||||||
@ -148,22 +147,12 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
OriginTrackContent = @event.TrackRefreshData.OriginTrackContent ?? GlobalConst.EmptyString,
|
OriginTrackContent = @event.TrackRefreshData.OriginTrackContent ?? GlobalConst.EmptyString,
|
||||||
OriginTrackDataHash = @event.TrackRefreshData.OriginTrackDataHash ?? GlobalConst.EmptyString,
|
OriginTrackDataHash = @event.TrackRefreshData.OriginTrackDataHash ?? GlobalConst.EmptyString,
|
||||||
CreateUser = @event.OperationMan ?? GlobalConst.SystemUser,
|
CreateUser = @event.OperationMan ?? GlobalConst.SystemUser,
|
||||||
CreateTime = DateTime.Now
|
CreateTime = DateTime.Now,
|
||||||
|
TrackStatus = trackContent.TrackStatus,
|
||||||
|
TrackContent = trackContent.TrackContent,
|
||||||
|
TrackEnContent = trackContent.TrackEnContent
|
||||||
};
|
};
|
||||||
|
|
||||||
// 根据轨迹code在订单模板内容中寻找匹配的
|
|
||||||
var trackContent = trackContents.FirstOrDefault(x => x.OrderId == order.OrderId);
|
|
||||||
if (trackContent == default)
|
|
||||||
{
|
|
||||||
// 订单所绑定的模板,没有一条内容可以匹配发生的轨迹
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
track.TrackStatus = trackContent.Status;
|
|
||||||
track.TrackCode = trackContent.TrackCode;
|
|
||||||
track.TrackContent = trackContent.Content;
|
|
||||||
track.TrackEnContent = trackContent.EnContent;
|
|
||||||
track.IsCanDelete = trackContent.IsCanDelete;
|
|
||||||
track.ZeroTrackTime = Math.Abs(track.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1
|
track.ZeroTrackTime = Math.Abs(track.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1
|
||||||
? track.TrackTime
|
? track.TrackTime
|
||||||
: track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone));
|
: track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone));
|
||||||
@ -199,9 +188,9 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
CustomId = @event.CustomId,
|
CustomId = @event.CustomId,
|
||||||
OrderIds = canNextOrderIds.ToArray(),
|
OrderIds = canNextOrderIds.ToArray(),
|
||||||
IsCompleted = @event.TrackRefreshData.IsCompleted,
|
IsCompleted = @event.TrackRefreshData.IsCompleted,
|
||||||
TrackContent = content.TrackContent,
|
TrackContent = trackContent.TrackContent,
|
||||||
TrackEnContent = content.TrackEnContent,
|
TrackEnContent = trackContent.TrackEnContent,
|
||||||
TrackStatusId = content.TrackStatusId,
|
TrackStatusId = trackContent.TrackStatusId,
|
||||||
TrackPlace = @event.TrackPlace,
|
TrackPlace = @event.TrackPlace,
|
||||||
TrackTime = @event.TrackTime,
|
TrackTime = @event.TrackTime,
|
||||||
TrackTimeZone = @event.TrackTimeZone,
|
TrackTimeZone = @event.TrackTimeZone,
|
||||||
@ -219,8 +208,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
TrackCode = @event.TrackCode,
|
TrackCode = @event.TrackCode,
|
||||||
SystemPushInfo = new SystemPushStruct
|
SystemPushInfo = new SystemPushStruct
|
||||||
{
|
{
|
||||||
TrackStatus = content.TrackStatus,
|
TrackStatus = trackContent.TrackStatus,
|
||||||
TrackContent = content.TrackContent,
|
TrackContent = trackContent.TrackContent,
|
||||||
TrackPlace = @event.TrackPlace,
|
TrackPlace = @event.TrackPlace,
|
||||||
TrackTime = @event.TrackTime,
|
TrackTime = @event.TrackTime,
|
||||||
TrackTimeZone = @event.TrackTimeZone
|
TrackTimeZone = @event.TrackTimeZone
|
||||||
|
|||||||
@ -82,11 +82,6 @@ public class TrackDetailsIndex : IdBaseIndex
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime ZeroTrackTime { get; set; }
|
public DateTime ZeroTrackTime { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 是否可删
|
|
||||||
/// </summary>
|
|
||||||
public bool IsCanDelete { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 创建人
|
/// 创建人
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -1,34 +0,0 @@
|
|||||||
namespace SJZY.Track.Domain.Dtos.TrackDetails;
|
|
||||||
|
|
||||||
public class MatchTrackContentDto
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 订单Id
|
|
||||||
/// </summary>
|
|
||||||
public int OrderId { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 轨迹内容code
|
|
||||||
/// </summary>
|
|
||||||
public string TrackCode { get; set; } = null!;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 轨迹内容
|
|
||||||
/// </summary>
|
|
||||||
public string Content { get; set; } = null!;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 轨迹内容英文
|
|
||||||
/// </summary>
|
|
||||||
public string EnContent { get; set; } = null!;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 轨迹状态
|
|
||||||
/// </summary>
|
|
||||||
public string Status { get; set; } = null!;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 是否可删
|
|
||||||
/// </summary>
|
|
||||||
public bool IsCanDelete { get; set; }
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
namespace SJZY.Track.Domain.Dtos.TrackDetails;
|
|
||||||
|
|
||||||
public class MatchTrackContentsDto
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 轨迹代码
|
|
||||||
/// </summary>
|
|
||||||
public string TrackCode { get; set; } = null!;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 是否支持删除
|
|
||||||
/// </summary>
|
|
||||||
public bool IsCanDelete { get; set; }
|
|
||||||
}
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
namespace SJZY.Track.Domain.Dtos.TrackDetails;
|
|
||||||
|
|
||||||
public class TrackDetailsQueryInput : PageInfoInput
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 单号
|
|
||||||
/// </summary>
|
|
||||||
public List<string> OrderNos { get; set; } = new();
|
|
||||||
}
|
|
||||||
@ -1,6 +1,5 @@
|
|||||||
using SJZY.Track.Domain.Dtos.Order;
|
using SJZY.Track.Domain.Dtos.Order;
|
||||||
using SJZY.Track.Domain.Dtos.TrackContents;
|
using SJZY.Track.Domain.Dtos.TrackContents;
|
||||||
using SJZY.Track.Domain.Dtos.TrackDetails;
|
|
||||||
|
|
||||||
namespace SJZY.Track.Domain.Queries;
|
namespace SJZY.Track.Domain.Queries;
|
||||||
|
|
||||||
@ -9,14 +8,6 @@ namespace SJZY.Track.Domain.Queries;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IProvideQueries
|
public interface IProvideQueries
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// 根据订单id找到订单模板,匹配模板命中的轨迹内容
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="orderIds">订单ids</param>
|
|
||||||
/// <param name="code">轨迹代码</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
Task<List<MatchTrackContentDto>> MatchTrackContentAsync(int[] orderIds, string code);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 根据子系统内容映射,得到映射后的轨迹code
|
/// 根据子系统内容映射,得到映射后的轨迹code
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
||||||
using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
|
using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
|
||||||
using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
|
using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
|
||||||
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
|
|
||||||
using SJZY.Track.Domain.Dtos.Order;
|
using SJZY.Track.Domain.Dtos.Order;
|
||||||
using SJZY.Track.Domain.Dtos.TrackContents;
|
using SJZY.Track.Domain.Dtos.TrackContents;
|
||||||
using SJZY.Track.Domain.Dtos.TrackDetails;
|
|
||||||
using SJZY.Track.Domain.Queries;
|
using SJZY.Track.Domain.Queries;
|
||||||
using SJZY.Track.Domain.VEntities;
|
using SJZY.Track.Domain.VEntities;
|
||||||
|
|
||||||
@ -24,26 +22,6 @@ public class ProvideQueries : ISugarRepository, IProvideQueries,
|
|||||||
Context = SqlsugarScopeBasic.GetContextSafely("default");
|
Context = SqlsugarScopeBasic.GetContextSafely("default");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public async Task<List<MatchTrackContentDto>> MatchTrackContentAsync(int[] orderIds, string code)
|
|
||||||
{
|
|
||||||
if (orderIds.Length == 0) return new List<MatchTrackContentDto>();
|
|
||||||
return await Context.Queryable<OrderTemplateEntity>()
|
|
||||||
.LeftJoin<TrackTemplateContentEntity>((x, a) => x.TrackTemplateId == a.TrackTemplateId)
|
|
||||||
.LeftJoin<TrackContentEntity>((x, a, b) => a.TrackContentId == b.Id)
|
|
||||||
.LeftJoin<TrackStatusEntity>((x, a, b, c) => b.TrackStatusId == c.Id)
|
|
||||||
.Where((x, a, b) => orderIds.Contains(x.OrderId) && b.Code == code)
|
|
||||||
.Select((x, a, b, c) => new MatchTrackContentDto
|
|
||||||
{
|
|
||||||
OrderId = x.OrderId,
|
|
||||||
TrackCode = b.Code,
|
|
||||||
Content = b.Content,
|
|
||||||
EnContent = b.EnContent,
|
|
||||||
Status = c.Status
|
|
||||||
})
|
|
||||||
.ToListAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public async Task<List<string>> MapTrackCodesAsync(int upSubSystemId, int subSystemId, params string[] trackCodes)
|
public async Task<List<string>> MapTrackCodesAsync(int upSubSystemId, int subSystemId, params string[] trackCodes)
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user