【 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>
|
||||
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表示两种
|
||||
/// </summary>
|
||||
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();
|
||||
if (dup.Any())
|
||||
{
|
||||
LogHelper.Error($"删除轨迹时,发现循环依赖:{dup.JoinAsString(",")}");
|
||||
LogHelper.Warn($"删除轨迹时,发现循环依赖:{dup.JoinAsString(",")}", true);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -58,7 +58,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
|
||||
|
||||
if (mapCodes.Count == 0)
|
||||
{
|
||||
//throw new BusinessException(message: "订单跨子系统,未配置内容映射,请联系管理员");
|
||||
LogHelper.Warn($"订单跨子系统,未配置内容映射,请联系管理员:{@event}", true);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@ -36,7 +36,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
||||
var dup = @event.Visited.Intersect(orderIds).ToArray();
|
||||
if (dup.Any())
|
||||
{
|
||||
LogHelper.Error($"{(@event.IsAdd ? "添加" : "修改")}轨迹时,发现循环依赖:{dup.JoinAsString(",")}");
|
||||
LogHelper.Warn($"{(@event.IsAdd ? "添加" : "修改")}轨迹时,发现循环依赖:{dup.JoinAsString(",")}", true);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -108,20 +108,19 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
||||
|
||||
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 tracks = await _trackDetailsRepository.GetListAsync(orderIds, @event.TrackCode, true);
|
||||
|
||||
// important:轨迹code相同,时间、发生地不同的,允许存在多条!!
|
||||
var newOrderIds = orderIds
|
||||
.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);
|
||||
// important:轨迹code相同,时间、发生地不同的,可能存在多条!!
|
||||
var tracks = await _trackDetailsRepository.GetListAsync(orderIds, @event.TrackCode, true);
|
||||
|
||||
var insertTracks = new List<TrackDetailsIndex>();
|
||||
|
||||
@ -148,22 +147,12 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
||||
OriginTrackContent = @event.TrackRefreshData.OriginTrackContent ?? GlobalConst.EmptyString,
|
||||
OriginTrackDataHash = @event.TrackRefreshData.OriginTrackDataHash ?? GlobalConst.EmptyString,
|
||||
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.TrackTime
|
||||
: track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone));
|
||||
@ -199,9 +188,9 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
||||
CustomId = @event.CustomId,
|
||||
OrderIds = canNextOrderIds.ToArray(),
|
||||
IsCompleted = @event.TrackRefreshData.IsCompleted,
|
||||
TrackContent = content.TrackContent,
|
||||
TrackEnContent = content.TrackEnContent,
|
||||
TrackStatusId = content.TrackStatusId,
|
||||
TrackContent = trackContent.TrackContent,
|
||||
TrackEnContent = trackContent.TrackEnContent,
|
||||
TrackStatusId = trackContent.TrackStatusId,
|
||||
TrackPlace = @event.TrackPlace,
|
||||
TrackTime = @event.TrackTime,
|
||||
TrackTimeZone = @event.TrackTimeZone,
|
||||
@ -219,8 +208,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
||||
TrackCode = @event.TrackCode,
|
||||
SystemPushInfo = new SystemPushStruct
|
||||
{
|
||||
TrackStatus = content.TrackStatus,
|
||||
TrackContent = content.TrackContent,
|
||||
TrackStatus = trackContent.TrackStatus,
|
||||
TrackContent = trackContent.TrackContent,
|
||||
TrackPlace = @event.TrackPlace,
|
||||
TrackTime = @event.TrackTime,
|
||||
TrackTimeZone = @event.TrackTimeZone
|
||||
|
||||
@ -82,11 +82,6 @@ public class TrackDetailsIndex : IdBaseIndex
|
||||
/// </summary>
|
||||
public DateTime ZeroTrackTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否可删
|
||||
/// </summary>
|
||||
public bool IsCanDelete { get; set; }
|
||||
|
||||
/// <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.TrackContents;
|
||||
using SJZY.Track.Domain.Dtos.TrackDetails;
|
||||
|
||||
namespace SJZY.Track.Domain.Queries;
|
||||
|
||||
@ -9,14 +8,6 @@ namespace SJZY.Track.Domain.Queries;
|
||||
/// </summary>
|
||||
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>
|
||||
/// 根据子系统内容映射,得到映射后的轨迹code
|
||||
/// </summary>
|
||||
|
||||
@ -1,10 +1,8 @@
|
||||
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
||||
using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
|
||||
using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
|
||||
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
|
||||
using SJZY.Track.Domain.Dtos.Order;
|
||||
using SJZY.Track.Domain.Dtos.TrackContents;
|
||||
using SJZY.Track.Domain.Dtos.TrackDetails;
|
||||
using SJZY.Track.Domain.Queries;
|
||||
using SJZY.Track.Domain.VEntities;
|
||||
|
||||
@ -24,26 +22,6 @@ public class ProvideQueries : ISugarRepository, IProvideQueries,
|
||||
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 />
|
||||
public async Task<List<string>> MapTrackCodesAsync(int upSubSystemId, int subSystemId, params string[] trackCodes)
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user