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