important:重构
This commit is contained in:
parent
24c5f0a2ed
commit
76aec6c78f
@ -123,7 +123,7 @@ public class BatchUpsertTrackInput : OrderNosInfo
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 扩展信息字段,用与轨迹推送的附加字段
|
/// 扩展信息字段,用与轨迹推送的附加字段
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? Extra { get; set; }
|
public Dictionary<string, object>? Extra { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否强制推送
|
/// 是否强制推送
|
||||||
|
|||||||
@ -105,5 +105,5 @@ public class TrackDetail
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 扩展信息字段,用与轨迹推送的附加字段
|
/// 扩展信息字段,用与轨迹推送的附加字段
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? Extra { get; set; }
|
public Dictionary<string, object>? Extra { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -132,7 +132,7 @@ public class UpsertTrackInput : OrderNoInfo
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 扩展信息字段,用与轨迹推送的附加字段
|
/// 扩展信息字段,用与轨迹推送的附加字段
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? Extra { get; set; }
|
public Dictionary<string, object>? Extra { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否强制推送
|
/// 是否强制推送
|
||||||
|
|||||||
@ -19,15 +19,3 @@ public class TrackUpdateInput
|
|||||||
|
|
||||||
public string Log { get; set; }
|
public string Log { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TrackItem
|
|
||||||
{
|
|
||||||
public string Location { get; set; } = null!;
|
|
||||||
public string Date { get; set; }
|
|
||||||
public double TimeZone { get; set; }
|
|
||||||
public string? Description { get; set; }
|
|
||||||
public string? DescriptionCn { get; set; }
|
|
||||||
public string? Code { get; set; }
|
|
||||||
public string? Status { get; set; }
|
|
||||||
public string? Extra { get; set; }
|
|
||||||
}
|
|
||||||
|
|||||||
@ -85,5 +85,5 @@ public class TrackPushRecordDto
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 轨迹的额外新
|
/// 轨迹的额外新
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? Extra { get; set; }
|
public Dictionary<string, object>? Extra { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -132,5 +132,5 @@ public class TrackChangeEto
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 扩展信息字段,用与轨迹推送的附加字段
|
/// 扩展信息字段,用与轨迹推送的附加字段
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? Extra { get; set; }
|
public Dictionary<string, object>? Extra { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -83,5 +83,5 @@ public class TrackPushCompletedEvent
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 轨迹的额外新
|
/// 轨迹的额外新
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? Extra { get; set; }
|
public Dictionary<string, object>? Extra { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -80,8 +80,13 @@ public struct SystemPushStruct
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public float TrackTimeZone { get; set; }
|
public float TrackTimeZone { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 重复的情况下,用什么比较
|
||||||
|
/// </summary>
|
||||||
|
public string? CompareFields { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 扩展信息字段,用与轨迹推送的附加字段
|
/// 扩展信息字段,用与轨迹推送的附加字段
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? Extra { get; set; }
|
public Dictionary<string, object>? Extra { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -146,10 +146,15 @@ public class TrackUpsertEvent
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public float? DestinationTimeZone { get; set; }
|
public float? DestinationTimeZone { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 重复的情况下,用什么比较
|
||||||
|
/// </summary>
|
||||||
|
public string? CompareFields { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 扩展信息字段,用与轨迹推送的附加字段
|
/// 扩展信息字段,用与轨迹推送的附加字段
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? Extra { get; set; }
|
public Dictionary<string, object>? Extra { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否强制推送
|
/// 是否强制推送
|
||||||
|
|||||||
@ -26,5 +26,5 @@ public interface IBroadcastingService : ITransientDependency
|
|||||||
/// 轨迹推送完成广播(推送完成回调)
|
/// 轨迹推送完成广播(推送完成回调)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="log"></param>
|
/// <param name="log"></param>
|
||||||
void TrackPushCompletedPublicTopicAsync(TrackPushRecordDto log);
|
void TrackPushCompletedPublicTopic(TrackPushRecordDto log);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -158,6 +158,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// todo:多个相同code的轨迹删除,也需要考虑??
|
||||||
private async Task<List<TrackDetailsIndex>> DeleteTrackAsync(TrackDeleteEvent @event)
|
private async Task<List<TrackDetailsIndex>> DeleteTrackAsync(TrackDeleteEvent @event)
|
||||||
{
|
{
|
||||||
List<int> orderIds;
|
List<int> orderIds;
|
||||||
|
|||||||
@ -10,7 +10,6 @@ using SJZY.Track.Application.Helpers;
|
|||||||
using SJZY.Track.Application.Options;
|
using SJZY.Track.Application.Options;
|
||||||
using SJZY.Track.Application.Track2InterfaceRelay;
|
using SJZY.Track.Application.Track2InterfaceRelay;
|
||||||
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
||||||
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
|
|
||||||
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
|
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
|
||||||
using SJZY.Track.Domain.Enums;
|
using SJZY.Track.Domain.Enums;
|
||||||
using Volo.Abp.DependencyInjection;
|
using Volo.Abp.DependencyInjection;
|
||||||
@ -127,7 +126,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
IsToMq = @event.IsToMq,
|
IsToMq = @event.IsToMq,
|
||||||
Extra = @event.SystemPushInfo.Extra
|
Extra = @event.SystemPushInfo.Extra
|
||||||
};
|
};
|
||||||
var item = await BuiltPushItem(config, log, @event.SystemPushInfo.Extra);
|
var item = await BuiltPushItem(config, log, @event.SystemPushInfo.CompareFields);
|
||||||
item.Log = JsonConvert.SerializeObject(log);
|
item.Log = JsonConvert.SerializeObject(log);
|
||||||
items.Add(item);
|
items.Add(item);
|
||||||
}
|
}
|
||||||
@ -171,7 +170,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
IsToMq = @event.IsToMq,
|
IsToMq = @event.IsToMq,
|
||||||
Extra = @event.SystemPushInfo.Extra
|
Extra = @event.SystemPushInfo.Extra
|
||||||
};
|
};
|
||||||
var item = await BuiltPushItem(config, log, @event.SystemPushInfo.Extra);
|
var item = await BuiltPushItem(config, log, @event.SystemPushInfo.CompareFields);
|
||||||
item.Log = JsonConvert.SerializeObject(log);
|
item.Log = JsonConvert.SerializeObject(log);
|
||||||
items.Add(item);
|
items.Add(item);
|
||||||
}
|
}
|
||||||
@ -223,7 +222,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
IsToMq = @event.IsToMq,
|
IsToMq = @event.IsToMq,
|
||||||
Extra = @event.SystemPushInfo.Extra
|
Extra = @event.SystemPushInfo.Extra
|
||||||
};
|
};
|
||||||
var item = BuiltUpdateItem(config, log, @event.SystemPushInfo.Extra);
|
var item = BuiltUpdateItem(config, log);
|
||||||
item.Log = JsonConvert.SerializeObject(log);
|
item.Log = JsonConvert.SerializeObject(log);
|
||||||
items.Add(item);
|
items.Add(item);
|
||||||
}
|
}
|
||||||
@ -247,7 +246,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private TrackUpdateInput BuiltUpdateItem(TrackPushContentConfigDto config, TrackPushRecordIndex log, string? extraJson)
|
private TrackUpdateInput BuiltUpdateItem(TrackPushContentConfigDto config, TrackPushRecordIndex log)
|
||||||
{
|
{
|
||||||
var trackDatetime = log.TrackTime.AddHours(config.TrackTimeZone ?? log.TrackTimeZone - log.TrackTimeZone);
|
var trackDatetime = log.TrackTime.AddHours(config.TrackTimeZone ?? log.TrackTimeZone - log.TrackTimeZone);
|
||||||
var trackDateStr = DateTimeFormat(trackDatetime, config.TrackTimeZone ?? log.TrackTimeZone, config);
|
var trackDateStr = DateTimeFormat(trackDatetime, config.TrackTimeZone ?? log.TrackTimeZone, config);
|
||||||
@ -266,7 +265,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
{ "descriptionCn", config.TrackContentValue },
|
{ "descriptionCn", config.TrackContentValue },
|
||||||
{ "code", config.TrackContentCodeValue },
|
{ "code", config.TrackContentCodeValue },
|
||||||
{ "status", config.TrackStatusValue },
|
{ "status", config.TrackStatusValue },
|
||||||
{ "extra", DeserializeForTextJson<object>(extraJson) }
|
{ "extra", log.Extra }
|
||||||
};
|
};
|
||||||
body.Data.Add(dict);
|
body.Data.Add(dict);
|
||||||
log.PushContent = body.ToJson();
|
log.PushContent = body.ToJson();
|
||||||
@ -274,7 +273,8 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
return body;
|
return body;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<TrackPushInput> BuiltPushItem(TrackPushContentConfigDto config, TrackPushRecordIndex log, string? extraJson)
|
private async Task<TrackPushInput> BuiltPushItem(TrackPushContentConfigDto config, TrackPushRecordIndex log,
|
||||||
|
string? compareFields)
|
||||||
{
|
{
|
||||||
var trackDatetime = log.TrackTime.AddHours(config.TrackTimeZone ?? log.TrackTimeZone - log.TrackTimeZone);
|
var trackDatetime = log.TrackTime.AddHours(config.TrackTimeZone ?? log.TrackTimeZone - log.TrackTimeZone);
|
||||||
var trackDateStr = DateTimeFormat(trackDatetime, config.TrackTimeZone ?? log.TrackTimeZone, config);
|
var trackDateStr = DateTimeFormat(trackDatetime, config.TrackTimeZone ?? log.TrackTimeZone, config);
|
||||||
@ -283,7 +283,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
{
|
{
|
||||||
OrderNo = log.OrderNo,
|
OrderNo = log.OrderNo,
|
||||||
};
|
};
|
||||||
var cur = new Dictionary<string, object?>()
|
var cur = new Dictionary<string, object?>
|
||||||
{
|
{
|
||||||
// 推真实的发生地和发生时间(时间是计算后的)
|
// 推真实的发生地和发生时间(时间是计算后的)
|
||||||
{ "location", log.TrackPlace },
|
{ "location", log.TrackPlace },
|
||||||
@ -293,7 +293,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
{ "descriptionCn", config.TrackContentValue },
|
{ "descriptionCn", config.TrackContentValue },
|
||||||
{ "code", config.TrackContentCodeValue },
|
{ "code", config.TrackContentCodeValue },
|
||||||
{ "status", config.TrackStatusValue },
|
{ "status", config.TrackStatusValue },
|
||||||
{ "extra", DeserializeForTextJson<object>(extraJson) }
|
{ "extra", log.Extra }
|
||||||
};
|
};
|
||||||
body.Data.Add(cur);
|
body.Data.Add(cur);
|
||||||
|
|
||||||
@ -305,10 +305,20 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
body = DeserializeForTextJson<TrackPushInput>(history.PushContent);
|
body = DeserializeForTextJson<TrackPushInput>(history.PushContent);
|
||||||
if (config.IsAllPushWithLatest)
|
if (config.IsAllPushWithLatest)
|
||||||
{
|
{
|
||||||
var last = body!.Data.Last();
|
var old = body!.Data
|
||||||
if (cur["code"] == last["code"])
|
.WhereIf(!compareFields.IsNullOrWhiteSpace(), x =>
|
||||||
{
|
{
|
||||||
body.Data.Remove(last);
|
if (x["extra"] is Dictionary<string, object> extra && extra.TryGetValue(compareFields!, out var value))
|
||||||
|
{
|
||||||
|
return value ==log.Extra![compareFields!];
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
.FirstOrDefault(x => x["code"] == cur["code"]);
|
||||||
|
if (old != null)
|
||||||
|
{
|
||||||
|
body.Data.Remove(old);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
body!.Data.Add(cur);
|
body!.Data.Add(cur);
|
||||||
|
|||||||
@ -216,6 +216,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
TrackPlace = @event.TrackPlace,
|
TrackPlace = @event.TrackPlace,
|
||||||
TrackTime = @event.NewTrackTime ?? @event.TrackTime,
|
TrackTime = @event.NewTrackTime ?? @event.TrackTime,
|
||||||
TrackTimeZone = @event.TrackTimeZone,
|
TrackTimeZone = @event.TrackTimeZone,
|
||||||
|
CompareFields = @event.CompareFields,
|
||||||
Extra = @event.Extra
|
Extra = @event.Extra
|
||||||
},
|
},
|
||||||
ForcedPush = @event.ForcedPush,
|
ForcedPush = @event.ForcedPush,
|
||||||
@ -231,6 +232,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
{
|
{
|
||||||
var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray();
|
var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray();
|
||||||
|
|
||||||
|
// todo:条件命名写反了
|
||||||
// important:轨迹code相同,时间、发生地不同的,可能存在多条!!
|
// important:轨迹code相同,时间、发生地不同的,可能存在多条!!
|
||||||
var tracks = await _trackDetailsEsRepository.GetListAsync(orderIds, @event.TrackCode, false);
|
var tracks = await _trackDetailsEsRepository.GetListAsync(orderIds, @event.TrackCode, false);
|
||||||
|
|
||||||
@ -239,27 +241,56 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
|
|
||||||
foreach (var order in @event.OrderIdentifiers)
|
foreach (var order in @event.OrderIdentifiers)
|
||||||
{
|
{
|
||||||
TrackDetailsIndex? track;
|
// fast path: by update with es id case
|
||||||
|
if (!@event.IsAdd && !string.IsNullOrWhiteSpace(@event.EsId))
|
||||||
|
{
|
||||||
|
var trackById = tracks.FirstOrDefault(x => x.Id == @event.EsId);
|
||||||
|
if (trackById != null)
|
||||||
|
{
|
||||||
|
updateTracks.Add(BuiltUpdateTrack(@event, trackById, order, trackContent));
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var existTracks = tracks.Where(x => x.OrderId == order.OrderId).ToList();
|
||||||
|
|
||||||
|
if (@event.CompareFields.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
existTracks = existTracks.Where(x => x.TrackTime == @event.TrackTime).ToList();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (@event.Extra == null ||
|
||||||
|
@event.Extra.TryGetValue(@event.CompareFields, out var compareValue) == false)
|
||||||
|
{
|
||||||
|
throw new BusinessException(message: "轨迹比较字段不存在,请检查拓展字段");
|
||||||
|
}
|
||||||
|
|
||||||
|
existTracks = existTracks.Where(x =>
|
||||||
|
{
|
||||||
|
// tips:注意兼容性,历史轨迹的字段可能为空
|
||||||
|
if (x.Extra == null || !x.Extra.TryGetValue(@event.CompareFields, out var oldValue))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return oldValue == compareValue;
|
||||||
|
}).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
var track = existTracks.FirstOrDefault();
|
||||||
|
|
||||||
if (!@event.IsAdd)
|
if (!@event.IsAdd)
|
||||||
{
|
{
|
||||||
//如果命中了esId
|
if (existTracks.Count > 1)
|
||||||
track = string.IsNullOrWhiteSpace(@event.EsId)
|
|
||||||
? null
|
|
||||||
: tracks.FirstOrDefault(x => x.Id == @event.EsId);
|
|
||||||
if (track != null) goto TipEsIdTrack;
|
|
||||||
|
|
||||||
//同一订单同轨迹code同一轨迹时间如果有多条轨迹明细则不允许修改
|
|
||||||
var existTracks = tracks.Where(x => x.OrderId == order.OrderId
|
|
||||||
&& x.TrackTime == @event.TrackTime).ToArray();
|
|
||||||
if (existTracks.Length > 1)
|
|
||||||
{
|
{
|
||||||
// 修改轨迹时,订单存在多条轨迹不允许修改
|
// 修改轨迹时,订单存在多条轨迹不允许修改
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
track = existTracks.FirstOrDefault();
|
|
||||||
|
|
||||||
if (track == null) continue; // 不存在不让改
|
if (track == null) continue; // 不存在不让改
|
||||||
|
|
||||||
|
updateTracks.Add(BuiltUpdateTrack(@event, track, order, trackContent));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -271,37 +302,84 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
// 场景D:不允许重复,零条 => 新增
|
// 场景D:不允许重复,零条 => 新增
|
||||||
// 场景E:不允许重复,一条 => 跳过
|
// 场景E:不允许重复,一条 => 跳过
|
||||||
// 场景F:不允许重复,(理想不会出现多条) => 跳过
|
// 场景F:不允许重复,(理想不会出现多条) => 跳过
|
||||||
var existTracks = tracks.Where(x => x.OrderId == order.OrderId).ToArray();
|
|
||||||
track = existTracks.FirstOrDefault();
|
|
||||||
|
|
||||||
//覆盖场景:B,C
|
// 不允许重复轨迹
|
||||||
if (trackContent.IsRepeatable && existTracks.Length >= 1)
|
if (!trackContent.IsRepeatable && existTracks.Count > 0) continue;
|
||||||
{
|
|
||||||
if (existTracks.Any(x => x.TrackTime == @event.TrackTime))
|
insertTracks.Add(BuiltNewTrack(@event, order, trackContent));
|
||||||
{
|
|
||||||
//TrackCode TrackTime联合不能重复
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置null后面执行新增逻辑
|
canNextOrderIds.Add(order.OrderId);
|
||||||
track = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//不允许重复,并且记录大于等于一条,跳过
|
if (updateTracks.Any())
|
||||||
//覆盖场景:E,F
|
|
||||||
if (!trackContent.IsRepeatable && existTracks.Length >= 1)
|
|
||||||
{
|
{
|
||||||
continue;
|
//批量差异化更新轨迹
|
||||||
|
await _trackDetailsEsRepository.BulkUpdateAsync(updateTracks);
|
||||||
}
|
}
|
||||||
|
|
||||||
//其余情况:A,D都为新增操作,无需检查数量,track为null执行新增操作
|
return insertTracks;
|
||||||
}
|
}
|
||||||
|
|
||||||
//通过esId命中了轨迹
|
|
||||||
TipEsIdTrack:
|
private TrackDetailsIndex BuiltUpdateTrack(TrackUpsertEvent @event, TrackDetailsIndex track, OrderIdentifier order,
|
||||||
if (track == default)
|
TrackContentVO trackContent)
|
||||||
{
|
{
|
||||||
track = new TrackDetailsIndex
|
//外部轨迹,轨迹发生地,轨迹发生时间,轨迹发生时区,不允许更改
|
||||||
|
if (track.Source != (int) TrackSourceEnum.ExternalServiceProvide)
|
||||||
|
{
|
||||||
|
track.TrackPlace = @event.TrackPlace;
|
||||||
|
track.TrackTime = @event.NewTrackTime ?? @event.TrackTime;
|
||||||
|
track.TrackTimeZone = @event.TrackTimeZone;
|
||||||
|
}
|
||||||
|
|
||||||
|
track.ZeroTrackTime = Math.Abs(track.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1
|
||||||
|
? track.TrackTime
|
||||||
|
: track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone));
|
||||||
|
track.UpdateUser = @event.OperationMan ?? GlobalConst.SystemUser;
|
||||||
|
track.UpdateTime = DateTime.Now;
|
||||||
|
|
||||||
|
//允许二次修改,在修改了轨迹内容后进行修改轨迹操作,如果输入的轨迹内容则以输入为准
|
||||||
|
//跨子系统?
|
||||||
|
track.TrackContent = @event.Content ?? trackContent.TrackContent;
|
||||||
|
track.TrackEnContent = @event.EnStatus ?? trackContent.TrackEnContent;
|
||||||
|
//S06新增
|
||||||
|
track.IsVisibility = @event.IsVisibility;
|
||||||
|
track.Remarks = @event.Remarks ?? GlobalConst.EmptyString;
|
||||||
|
track.Files = @event.Files?.Select(x => new FileItem
|
||||||
|
{
|
||||||
|
OssKey = x.OssKey,
|
||||||
|
FileName = x.FileName
|
||||||
|
}).ToList();
|
||||||
|
track.TrackPlaceCity = @event.TrackPlaceCity ?? GlobalConst.EmptyString;
|
||||||
|
track.TrackPlaceCityId = @event.TrackPlaceCityId ?? GlobalConst.NotExistId;
|
||||||
|
track.TrackPlaceProvince = @event.TrackPlaceProvince ?? GlobalConst.EmptyString;
|
||||||
|
track.TrackPlaceProvinceId = @event.TrackPlaceProvinceId ?? GlobalConst.NotExistId;
|
||||||
|
track.TrackPlaceNation = @event.TrackPlaceNation ?? GlobalConst.EmptyString;
|
||||||
|
track.TrackPlaceNationId = @event.TrackPlaceNationId ?? GlobalConst.NotExistId;
|
||||||
|
track.TrackPlacePostcode = @event.TrackPlacePostcode ?? GlobalConst.EmptyString;
|
||||||
|
track.DestinationTimeZone = @event.DestinationTimeZone;
|
||||||
|
track.EstimatedDeliveryDate = @event.EstimatedDeliveryDate;
|
||||||
|
track.Extra = @event.Extra;
|
||||||
|
|
||||||
|
// 写入操作日志
|
||||||
|
_ = _orderOperationRecordEsRepository.AddAsync(new OrderOperationRecordIndex
|
||||||
|
{
|
||||||
|
OrderId = order.OrderId,
|
||||||
|
OrderNo = order.OrderNo,
|
||||||
|
OptionType = OrderOperationType.修改轨迹.ToString(),
|
||||||
|
Content = track.ToJson(),
|
||||||
|
CreateUserId = @event.OperationManId,
|
||||||
|
CreateUserName = @event.OperationMan ?? "",
|
||||||
|
CreateTime = DateTime.Now
|
||||||
|
});
|
||||||
|
|
||||||
|
return track;
|
||||||
|
}
|
||||||
|
|
||||||
|
private TrackDetailsIndex BuiltNewTrack(TrackUpsertEvent @event, OrderIdentifier order, TrackContentVO trackContent)
|
||||||
|
{
|
||||||
|
var track = new TrackDetailsIndex
|
||||||
{
|
{
|
||||||
SubSystemId = @event.SubSystemId,
|
SubSystemId = @event.SubSystemId,
|
||||||
OrderId = order.OrderId,
|
OrderId = order.OrderId,
|
||||||
@ -348,7 +426,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
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));
|
||||||
insertTracks.Add(track);
|
|
||||||
|
|
||||||
// 写入操作日志
|
// 写入操作日志
|
||||||
_ = _orderOperationRecordEsRepository.AddAsync(new OrderOperationRecordIndex
|
_ = _orderOperationRecordEsRepository.AddAsync(new OrderOperationRecordIndex
|
||||||
@ -361,70 +438,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
CreateUserName = @event.OperationMan ?? "",
|
CreateUserName = @event.OperationMan ?? "",
|
||||||
CreateTime = DateTime.Now
|
CreateTime = DateTime.Now
|
||||||
});
|
});
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//外部轨迹,轨迹发生地,轨迹发生时间,轨迹发生时区,不允许更改
|
|
||||||
if (track.Source != (int) TrackSourceEnum.ExternalServiceProvide)
|
|
||||||
{
|
|
||||||
track.TrackPlace = @event.TrackPlace;
|
|
||||||
track.TrackTime = @event.NewTrackTime ?? @event.TrackTime;
|
|
||||||
track.TrackTimeZone = @event.TrackTimeZone;
|
|
||||||
}
|
|
||||||
|
|
||||||
track.ZeroTrackTime = Math.Abs(track.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1
|
return track;
|
||||||
? track.TrackTime
|
|
||||||
: track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone));
|
|
||||||
track.UpdateUser = @event.OperationMan ?? GlobalConst.SystemUser;
|
|
||||||
track.UpdateTime = DateTime.Now;
|
|
||||||
|
|
||||||
//允许二次修改,在修改了轨迹内容后进行修改轨迹操作,如果输入的轨迹内容则以输入为准
|
|
||||||
//跨子系统?
|
|
||||||
track.TrackContent = @event.Content ?? trackContent.TrackContent;
|
|
||||||
track.TrackEnContent = @event.EnStatus ?? trackContent.TrackEnContent;
|
|
||||||
//S06新增
|
|
||||||
track.IsVisibility = @event.IsVisibility;
|
|
||||||
track.Remarks = @event.Remarks ?? GlobalConst.EmptyString;
|
|
||||||
track.Files = @event.Files?.Select(x => new FileItem
|
|
||||||
{
|
|
||||||
OssKey = x.OssKey,
|
|
||||||
FileName = x.FileName
|
|
||||||
}).ToList();
|
|
||||||
track.TrackPlaceCity = @event.TrackPlaceCity ?? GlobalConst.EmptyString;
|
|
||||||
track.TrackPlaceCityId = @event.TrackPlaceCityId ?? GlobalConst.NotExistId;
|
|
||||||
track.TrackPlaceProvince = @event.TrackPlaceProvince ?? GlobalConst.EmptyString;
|
|
||||||
track.TrackPlaceProvinceId = @event.TrackPlaceProvinceId ?? GlobalConst.NotExistId;
|
|
||||||
track.TrackPlaceNation = @event.TrackPlaceNation ?? GlobalConst.EmptyString;
|
|
||||||
track.TrackPlaceNationId = @event.TrackPlaceNationId ?? GlobalConst.NotExistId;
|
|
||||||
track.TrackPlacePostcode = @event.TrackPlacePostcode ?? GlobalConst.EmptyString;
|
|
||||||
track.DestinationTimeZone = @event.DestinationTimeZone;
|
|
||||||
track.EstimatedDeliveryDate = @event.EstimatedDeliveryDate;
|
|
||||||
track.Extra = @event.Extra;
|
|
||||||
|
|
||||||
updateTracks.Add(track);
|
|
||||||
|
|
||||||
// 写入操作日志
|
|
||||||
_ = _orderOperationRecordEsRepository.AddAsync(new OrderOperationRecordIndex
|
|
||||||
{
|
|
||||||
OrderId = order.OrderId,
|
|
||||||
OrderNo = order.OrderNo,
|
|
||||||
OptionType = OrderOperationType.修改轨迹.ToString(),
|
|
||||||
Content = track.ToJson(),
|
|
||||||
CreateUserId = @event.OperationManId,
|
|
||||||
CreateUserName = @event.OperationMan ?? "",
|
|
||||||
CreateTime = DateTime.Now
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
canNextOrderIds.Add(order.OrderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (updateTracks.Any())
|
|
||||||
{
|
|
||||||
//批量差异化更新轨迹
|
|
||||||
await _trackDetailsEsRepository.BulkUpdateAsync(updateTracks);
|
|
||||||
}
|
|
||||||
|
|
||||||
return insertTracks;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,6 +4,7 @@ using BSI.Stack.Rabbit.Handler;
|
|||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using RabbitMQ.Client.Events;
|
using RabbitMQ.Client.Events;
|
||||||
using SJZY.Expand.ABP.Core.Logger;
|
using SJZY.Expand.ABP.Core.Logger;
|
||||||
|
using SJZY.Expand.ABP.Core.PublicMethords;
|
||||||
using SJZY.InterfaceRelay.Application.Contracts;
|
using SJZY.InterfaceRelay.Application.Contracts;
|
||||||
using SJZY.Track.Application.Contract.Dtos.TrackPush;
|
using SJZY.Track.Application.Contract.Dtos.TrackPush;
|
||||||
using SJZY.Track.Application.Contract.Services;
|
using SJZY.Track.Application.Contract.Services;
|
||||||
@ -70,7 +71,7 @@ public class TrackPushCompletedEventHandler : ITransientDependency, IRabbitHandl
|
|||||||
|
|
||||||
// 推送广播
|
// 推送广播
|
||||||
if (log.IsToMq)
|
if (log.IsToMq)
|
||||||
_broadcastingService.TrackPushCompletedPublicTopicAsync(BuildDto(log));
|
_broadcastingService.TrackPushCompletedPublicTopic(BuildDto(log));
|
||||||
|
|
||||||
// 往es 写推送日志
|
// 往es 写推送日志
|
||||||
await _trackPushRecordEsRepository.AddAsync(log);
|
await _trackPushRecordEsRepository.AddAsync(log);
|
||||||
|
|||||||
@ -86,7 +86,7 @@ public class BroadcastingService : IBroadcastingService
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="log"></param>
|
/// <param name="log"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public void TrackPushCompletedPublicTopicAsync(TrackPushRecordDto log)
|
public void TrackPushCompletedPublicTopic(TrackPushRecordDto log)
|
||||||
{
|
{
|
||||||
var data = new TrackPushCompletedEvent
|
var data = new TrackPushCompletedEvent
|
||||||
{
|
{
|
||||||
|
|||||||
@ -117,6 +117,7 @@ public class TrackPushService : ApplicationService, ITrackPushService
|
|||||||
TrackPlace = track.TrackPlace,
|
TrackPlace = track.TrackPlace,
|
||||||
TrackTime = track.TrackTime,
|
TrackTime = track.TrackTime,
|
||||||
TrackTimeZone = track.TrackTimeZone,
|
TrackTimeZone = track.TrackTimeZone,
|
||||||
|
// todo: 这里也要改,重复code问题,到底推哪个
|
||||||
Extra = track.Extra
|
Extra = track.Extra
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -240,6 +240,8 @@ public partial class TrackService : ApplicationService, ITrackService
|
|||||||
throw new BusinessException(message: "存在来源于外部服务商的轨迹,不允许删除");
|
throw new BusinessException(message: "存在来源于外部服务商的轨迹,不允许删除");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// todo:非必须不用goto,除非是在写算法,业务逻辑理论上都能通过if和方法规避
|
||||||
NO_DELETE_TRACK:
|
NO_DELETE_TRACK:
|
||||||
if (tracks.Count == 0)
|
if (tracks.Count == 0)
|
||||||
{
|
{
|
||||||
@ -357,6 +359,9 @@ public partial class TrackService : ApplicationService, ITrackService
|
|||||||
return new UnifyResultDto(true, true);
|
return new UnifyResultDto(true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// todo:代码封装性太差了,拆小一点
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 批量新增、更新轨迹
|
/// 批量新增、更新轨迹
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -436,6 +441,7 @@ public partial class TrackService : ApplicationService, ITrackService
|
|||||||
.Where(x => x.TrackTime == input.TrackTime)
|
.Where(x => x.TrackTime == input.TrackTime)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
|
// todo:这块代码抽出去
|
||||||
//当为更新操作时发现更新的数目为0进行重试操作
|
//当为更新操作时发现更新的数目为0进行重试操作
|
||||||
if (!input.IsAdd && tracks.Count == 0)
|
if (!input.IsAdd && tracks.Count == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -190,5 +190,5 @@ public class TrackDetailsIndex : IdBaseIndex
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 扩展信息字段,用与轨迹推送的附加字段
|
/// 扩展信息字段,用与轨迹推送的附加字段
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? Extra { get; set; }
|
public Dictionary<string, object>? Extra { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -96,5 +96,5 @@ public class TrackPushRecordIndex : IdBaseIndex
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 轨迹额外信息
|
/// 轨迹额外信息
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? Extra { get; set; }
|
public Dictionary<string, object>? Extra { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user