Merge pull request 'S06' (#78) from S06 into uat
Reviewed-on: https://git.shijizhongyun.com/Dotnet/SJZY.Track.Api/pulls/78
This commit is contained in:
commit
2cd747cde5
@ -44,9 +44,15 @@ public class BatchUpsertTrackInput : OrderNosInfo
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 客户是否可见
|
/// 客户是否可见
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Required]
|
[Obsolete("废弃的,请使用IsExternal")]
|
||||||
public bool IsVisibility { get; set; }
|
public bool IsVisibility { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否对外(可选的)
|
||||||
|
/// 如果未填则按照【轨迹内容】中的【是否可见】做为默认值
|
||||||
|
/// </summary>
|
||||||
|
public bool? IsExternal { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
||||||
/// 批量新增时使用指定轨迹来源,更新时无需指定
|
/// 批量新增时使用指定轨迹来源,更新时无需指定
|
||||||
|
|||||||
@ -11,4 +11,9 @@ public class FileItemDto
|
|||||||
/// 文件名称
|
/// 文件名称
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string FileName { get; set; }
|
public string FileName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 文件下载地址
|
||||||
|
/// </summary>
|
||||||
|
public string? DownloadUrl { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -72,6 +72,12 @@ public class TrackOrderDetailDto
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public float TrackTimeZoneValue { get; set; }
|
public float TrackTimeZoneValue { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 客户是否可见
|
||||||
|
/// </summary>
|
||||||
|
[Obsolete("废弃的,请使用IsExternal")]
|
||||||
|
public bool IsVisibility { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否对外
|
/// 是否对外
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -87,11 +93,6 @@ public class TrackOrderDetailDto
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string? CreateUser { get; set; }
|
public string? CreateUser { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 客户是否可见
|
|
||||||
/// </summary>
|
|
||||||
public bool IsVisibility { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -19,6 +19,7 @@ public class TrackDetail
|
|||||||
public string Code { get; set; } = null!;
|
public string Code { get; set; } = null!;
|
||||||
public string Status { get; set; } = null!;
|
public string Status { get; set; } = null!;
|
||||||
public string? Content { get; set; }
|
public string? Content { get; set; }
|
||||||
|
public string? EnContent { get; set; }
|
||||||
public string? OriginContent { get; set; }
|
public string? OriginContent { get; set; }
|
||||||
public string Location { get; set; } = null!;
|
public string Location { get; set; } = null!;
|
||||||
|
|
||||||
@ -35,13 +36,20 @@ public class TrackDetail
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否对外
|
/// 是否对外
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Obsolete("废弃的,请使用IsExternal")]
|
||||||
public bool IsDisplay { get; set; }
|
public bool IsDisplay { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 客户是否可见
|
/// 客户是否可见
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Obsolete("废弃的,请使用IsExternal")]
|
||||||
public bool IsVisibility { get; set; }
|
public bool IsVisibility { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否对外
|
||||||
|
/// </summary>
|
||||||
|
public bool IsExternal { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -49,9 +49,15 @@ public class UpsertTrackInput : OrderNoInfo
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 客户是否可见
|
/// 客户是否可见
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Required]
|
[Obsolete("废弃的,请使用IsExternal")]
|
||||||
public bool IsVisibility { get; set; }
|
public bool IsVisibility { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否对外(可选的)
|
||||||
|
/// 如果未填则按照【轨迹内容】中的【是否可见】做为默认值
|
||||||
|
/// </summary>
|
||||||
|
public bool? IsExternal { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -72,8 +72,14 @@ public class TrackChangeEto
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 客户是否可见
|
/// 客户是否可见
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Obsolete("废弃的,请使用IsExternal")]
|
||||||
public bool IsVisibility { get; set; }
|
public bool IsVisibility { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否对外
|
||||||
|
/// </summary>
|
||||||
|
public bool IsExternal { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -74,8 +74,14 @@ public class TrackUpsertEvent
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 客户是否可见
|
/// 客户是否可见
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Obsolete("废弃的,请使用IsExternal")]
|
||||||
public bool IsVisibility { get; set; }
|
public bool IsVisibility { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否对外
|
||||||
|
/// </summary>
|
||||||
|
public bool? IsExternal { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -10,17 +10,10 @@ public interface IBroadcastingService : ITransientDependency
|
|||||||
/// 轨迹变更广播(新增/修改)
|
/// 轨迹变更广播(新增/修改)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="eto"></param>
|
/// <param name="eto"></param>
|
||||||
|
/// <param name="contentIsExternal"></param>
|
||||||
/// <param name="subSystemCode"></param>
|
/// <param name="subSystemCode"></param>
|
||||||
/// <param name="trackStatusCode"></param>
|
/// <param name="trackStatusCode"></param>
|
||||||
void TrackChangePublicTopic(TrackUpsertEvent eto, string subSystemCode, string trackStatusCode);
|
void TrackChangePublicTopic(TrackUpsertEvent eto,bool contentIsExternal, string subSystemCode, string trackStatusCode);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 轨迹变更广播(删除)
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="eto"></param>
|
|
||||||
/// <param name="subSystemCode"></param>
|
|
||||||
/// <param name="trackStatusCode"></param>
|
|
||||||
void TrackChangePublicTopic(TrackDeleteEvent eto, OrderIdentifier[] orderIdentifiers, string trackCode, string trackStatusCode, string subSystemCode);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 轨迹变更广播(删除)
|
/// 轨迹变更广播(删除)
|
||||||
|
|||||||
@ -339,6 +339,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
Remarks = track.Remarks,
|
Remarks = track.Remarks,
|
||||||
Source = track.Source,
|
Source = track.Source,
|
||||||
IsVisibility = track.IsVisibility,
|
IsVisibility = track.IsVisibility,
|
||||||
|
IsExternal = track.IsExternal,
|
||||||
TrackTimeZone = track.TrackTimeZone,
|
TrackTimeZone = track.TrackTimeZone,
|
||||||
TrackTime = track.TrackTime,
|
TrackTime = track.TrackTime,
|
||||||
TrackPlace = track.TrackPlace,
|
TrackPlace = track.TrackPlace,
|
||||||
|
|||||||
@ -56,7 +56,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
|
|
||||||
// 处理广播事件
|
// 处理广播事件
|
||||||
if (content != null && (content.IsToMq || @event.IsToMq))
|
if (content != null && (content.IsToMq || @event.IsToMq))
|
||||||
_ = EnsureWriteAfterPublicTopicAsync(@event, content.SubSystemCode, content.TrackStatusCode);
|
_ = EnsureWriteAfterPublicTopicAsync(@event, content.IsExternal, content.SubSystemCode, content.TrackStatusCode);
|
||||||
|
|
||||||
if (canNextOrderIds.Count == 0) return;
|
if (canNextOrderIds.Count == 0) return;
|
||||||
// 根据订单关联关系异步向下刷(异步)
|
// 根据订单关联关系异步向下刷(异步)
|
||||||
@ -144,8 +144,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo: 在这里,判断存在性
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,7 +155,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
{
|
{
|
||||||
// 找不到轨迹内容,直接结束
|
// 找不到轨迹内容,直接结束
|
||||||
LogHelper.Warn($"找不到轨迹内容:{@event}", true);
|
LogHelper.Warn($"找不到轨迹内容:{@event}", true);
|
||||||
return default;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
//#7001:未来潜在需求,当轨迹内容匹配预设,记录一个标记,保证下刷过程都是使用预设内容
|
//#7001:未来潜在需求,当轨迹内容匹配预设,记录一个标记,保证下刷过程都是使用预设内容
|
||||||
@ -302,13 +300,15 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
{
|
{
|
||||||
if (existTracks.Count > 1)
|
if (existTracks.Count > 1)
|
||||||
{
|
{
|
||||||
// todo: 所有的event handle 多写log,取缔注释,特别是continue,return,这种跳出的地方,方便排查问题
|
|
||||||
_logger.LogInformation("订单存在多条轨迹不允许修改:{@event}", @event);
|
_logger.LogInformation("订单存在多条轨迹不允许修改:{@event}", @event);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo:例如这里
|
if (track == null)
|
||||||
if (track == null) continue; // 不存在不让改
|
{
|
||||||
|
_logger.LogInformation("订单不存在轨迹不允许修改:{@event}", @event);
|
||||||
|
continue; // 不存在不让改
|
||||||
|
}
|
||||||
|
|
||||||
updateTracks.Add(BuiltUpdateTrack(@event, track, order, trackContent));
|
updateTracks.Add(BuiltUpdateTrack(@event, track, order, trackContent));
|
||||||
operationRecords.Add(BuildOrderOperationRecord(@event, track, order));
|
operationRecords.Add(BuildOrderOperationRecord(@event, track, order));
|
||||||
@ -316,7 +316,11 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 不允许重复轨迹,跳过
|
// 不允许重复轨迹,跳过
|
||||||
if (!trackContent.IsRepeatable && existTracks.Count > 0) continue;
|
if (!trackContent.IsRepeatable && existTracks.Count > 0)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("订单已经存在不允许重复的轨迹,不允许重复添加:{@event}", @event);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
insertTracks.Add(BuiltNewTrack(@event, order, trackContent));
|
insertTracks.Add(BuiltNewTrack(@event, order, trackContent));
|
||||||
}
|
}
|
||||||
@ -359,6 +363,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
track.TrackEnContent = @event.EnStatus ?? trackContent.TrackEnContent;
|
track.TrackEnContent = @event.EnStatus ?? trackContent.TrackEnContent;
|
||||||
//S06新增
|
//S06新增
|
||||||
track.IsVisibility = @event.IsVisibility;
|
track.IsVisibility = @event.IsVisibility;
|
||||||
|
//当传入的IsExternal为空,则使用轨迹内容中的IsExternal
|
||||||
|
track.IsExternal = @event.IsExternal ?? trackContent.IsExternal;
|
||||||
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
|
||||||
{
|
{
|
||||||
@ -406,6 +412,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
TrackEnContent = @event.EnStatus ?? trackContent.TrackEnContent,
|
TrackEnContent = @event.EnStatus ?? trackContent.TrackEnContent,
|
||||||
//S06新增轨迹明细字段
|
//S06新增轨迹明细字段
|
||||||
IsVisibility = @event.IsVisibility,
|
IsVisibility = @event.IsVisibility,
|
||||||
|
//当传入的IsExternal为空,则使用轨迹内容中的IsExternal
|
||||||
|
IsExternal = @event.IsExternal ?? trackContent.IsExternal,
|
||||||
Source = @event.Source,
|
Source = @event.Source,
|
||||||
Remarks = @event.Remarks ?? GlobalConst.EmptyString,
|
Remarks = @event.Remarks ?? GlobalConst.EmptyString,
|
||||||
Files = @event.Files?.Select(x => new FileItem
|
Files = @event.Files?.Select(x => new FileItem
|
||||||
@ -446,7 +454,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task EnsureWriteAfterPublicTopicAsync(TrackUpsertEvent @event, string subSystemCode, string statusCode)
|
private async Task EnsureWriteAfterPublicTopicAsync(TrackUpsertEvent @event, bool contentIsExternal, string subSystemCode, string statusCode)
|
||||||
{
|
{
|
||||||
//理想情况在写入之后1s会刷盘 https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-refresh.html
|
//理想情况在写入之后1s会刷盘 https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-refresh.html
|
||||||
//增加一个版本号来确定是否真的变更了
|
//增加一个版本号来确定是否真的变更了
|
||||||
@ -455,6 +463,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
//方案2:考虑强制刷盘(对es压力大)后发送
|
//方案2:考虑强制刷盘(对es压力大)后发送
|
||||||
//方案3:采用一个较大延时,不查询直接发
|
//方案3:采用一个较大延时,不查询直接发
|
||||||
await Task.Delay(1000);
|
await Task.Delay(1000);
|
||||||
_broadcastingService.TrackChangePublicTopic(@event, subSystemCode, statusCode);
|
_broadcastingService.TrackChangePublicTopic(@event, contentIsExternal, subSystemCode, statusCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,6 +10,7 @@
|
|||||||
"TrackFlagExist": "Duplicate code or flag in the current subsystem",
|
"TrackFlagExist": "Duplicate code or flag in the current subsystem",
|
||||||
"IsExistTrackPullConfig": "Track Pull The template has been bound. Delete the track pull before deleting the template",
|
"IsExistTrackPullConfig": "Track Pull The template has been bound. Delete the track pull before deleting the template",
|
||||||
"IsExistTrackStatus": "The trajectory content has been bound to the trajectory status. Delete the trajectory content before deleting the trajectory status",
|
"IsExistTrackStatus": "The trajectory content has been bound to the trajectory status. Delete the trajectory content before deleting the trajectory status",
|
||||||
"IsExistTrackFlag": "The track content has been bound to the track mark. Delete the track content before deleting the track mark"
|
"IsExistTrackFlag": "The track content has been bound to the track mark. Delete the track content before deleting the track mark",
|
||||||
|
"IsTrackPushConfigAny": "This subsystem already has the push mapping of this customer, and it cannot be added repeatedly"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,6 +10,7 @@
|
|||||||
"TrackFlagExist": "当前子系统下代码或标记重复",
|
"TrackFlagExist": "当前子系统下代码或标记重复",
|
||||||
"IsExistTrackPullConfig": "轨迹拉取已绑定了该模版,请先删除轨迹拉取再删除该模版",
|
"IsExistTrackPullConfig": "轨迹拉取已绑定了该模版,请先删除轨迹拉取再删除该模版",
|
||||||
"IsExistTrackStatus": "轨迹内容已经绑定了该轨迹状态,请先删除轨迹内容后再删除该轨迹状态",
|
"IsExistTrackStatus": "轨迹内容已经绑定了该轨迹状态,请先删除轨迹内容后再删除该轨迹状态",
|
||||||
"IsExistTrackFlag": "轨迹内容已经绑定了该轨迹标记,请先删除轨迹内容后再删除该轨迹标记"
|
"IsExistTrackFlag": "轨迹内容已经绑定了该轨迹标记,请先删除轨迹内容后再删除该轨迹标记",
|
||||||
|
"IsTrackPushConfigAny": "这个子系统已经存在这个客户的推送映射,无法重复添加"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -261,7 +261,9 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler
|
|||||||
IsAdd = true,
|
IsAdd = true,
|
||||||
//S06新增
|
//S06新增
|
||||||
IsVisibility = false,
|
IsVisibility = false,
|
||||||
Source = (int)TrackSourceEnum.ExternalServiceProvide,
|
//服务商轨迹默认不对外
|
||||||
|
IsExternal = false,
|
||||||
|
Source = (int) TrackSourceEnum.ExternalServiceProvide,
|
||||||
Remarks = null,
|
Remarks = null,
|
||||||
Files = null,
|
Files = null,
|
||||||
Content = null,
|
Content = null,
|
||||||
@ -308,6 +310,8 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler
|
|||||||
TrackEnContent = GlobalConst.EmptyString,
|
TrackEnContent = GlobalConst.EmptyString,
|
||||||
//S06新增轨迹明细字段
|
//S06新增轨迹明细字段
|
||||||
IsVisibility = false,
|
IsVisibility = false,
|
||||||
|
//服务商轨迹默认不对外
|
||||||
|
IsExternal = false,
|
||||||
Source = (int) TrackSourceEnum.ExternalServiceProvide,
|
Source = (int) TrackSourceEnum.ExternalServiceProvide,
|
||||||
Remarks = null,
|
Remarks = null,
|
||||||
Files = null,
|
Files = null,
|
||||||
@ -315,7 +319,7 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler
|
|||||||
TrackPlaceCityId = null,
|
TrackPlaceCityId = null,
|
||||||
TrackPlaceProvince = null,
|
TrackPlaceProvince = null,
|
||||||
TrackPlaceProvinceId = null,
|
TrackPlaceProvinceId = null,
|
||||||
TrackPlaceNation =null,
|
TrackPlaceNation = null,
|
||||||
TrackPlaceNationId = null,
|
TrackPlaceNationId = null,
|
||||||
TrackPlacePostcode = null,
|
TrackPlacePostcode = null,
|
||||||
DestinationTimeZone = null,
|
DestinationTimeZone = null,
|
||||||
|
|||||||
@ -23,10 +23,11 @@ public class BroadcastingService : IBroadcastingService
|
|||||||
/// 轨迹变更广播
|
/// 轨迹变更广播
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="eto"></param>
|
/// <param name="eto"></param>
|
||||||
|
/// <param name="contentIsExternal">轨迹内容中的是否对外</param>
|
||||||
/// <param name="subSystemCode">子系统代码</param>
|
/// <param name="subSystemCode">子系统代码</param>
|
||||||
/// <param name="trackStatusCode">轨迹状态代码</param>
|
/// <param name="trackStatusCode">轨迹状态代码</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public void TrackChangePublicTopic(TrackUpsertEvent eto, string subSystemCode, string trackStatusCode)
|
public void TrackChangePublicTopic(TrackUpsertEvent eto, bool contentIsExternal, string subSystemCode, string trackStatusCode)
|
||||||
{
|
{
|
||||||
var data = new TrackChangeEto
|
var data = new TrackChangeEto
|
||||||
{
|
{
|
||||||
@ -42,8 +43,9 @@ public class BroadcastingService : IBroadcastingService
|
|||||||
Remarks = eto.Remarks,
|
Remarks = eto.Remarks,
|
||||||
Source = eto.Source,
|
Source = eto.Source,
|
||||||
IsVisibility = eto.IsVisibility,
|
IsVisibility = eto.IsVisibility,
|
||||||
|
IsExternal = eto.IsExternal ?? contentIsExternal,
|
||||||
TrackTimeZone = eto.TrackTimeZone,
|
TrackTimeZone = eto.TrackTimeZone,
|
||||||
TrackTime = eto.TrackTime,
|
TrackTime = eto.NewTrackTime ?? eto.TrackTime,
|
||||||
TrackPlace = eto.TrackPlace,
|
TrackPlace = eto.TrackPlace,
|
||||||
TrackStatusCode = trackStatusCode,
|
TrackStatusCode = trackStatusCode,
|
||||||
OrderNo = eto.OrderIdentifiers.First().OrderNo,
|
OrderNo = eto.OrderIdentifiers.First().OrderNo,
|
||||||
@ -66,22 +68,6 @@ public class BroadcastingService : IBroadcastingService
|
|||||||
Encoding.UTF8.GetBytes(data.ToJson()));
|
Encoding.UTF8.GetBytes(data.ToJson()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TrackChangePublicTopic(TrackDeleteEvent eto, OrderIdentifier[] orderIdentifiers, string trackCode, string trackStatusCode, string subSystemCode)
|
|
||||||
{
|
|
||||||
var data = new TrackChangeEto
|
|
||||||
{
|
|
||||||
OrderIdentifiers = orderIdentifiers,
|
|
||||||
TrackStatusCode = trackStatusCode,
|
|
||||||
TrackCode = trackCode,
|
|
||||||
OperationMan = eto.OperationMan,
|
|
||||||
SubSystemId = eto.SubSystemId,
|
|
||||||
Option = 2
|
|
||||||
};
|
|
||||||
|
|
||||||
_rabbitClientBus.Publish(GlobalConst.TrackChangeExchange, $"TrackChange.{subSystemCode}",
|
|
||||||
Encoding.UTF8.GetBytes(data.ToJson()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void TrackChangePublicTopic(TrackChangeEto eto, string subSystemCode)
|
public void TrackChangePublicTopic(TrackChangeEto eto, string subSystemCode)
|
||||||
{
|
{
|
||||||
eto.Option = 2;
|
eto.Option = 2;
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using SJZY.Expand.AliyunOSS;
|
||||||
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
|
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
|
||||||
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
|
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
|
||||||
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
|
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
|
||||||
@ -34,29 +35,21 @@ public partial class TrackService
|
|||||||
//内部子系统不过滤外部轨迹
|
//内部子系统不过滤外部轨迹
|
||||||
var isFilterExternal = await HasFilterExternalTrack();
|
var isFilterExternal = await HasFilterExternalTrack();
|
||||||
|
|
||||||
// 是否对外
|
var ossKeys = details
|
||||||
var trackCodes = details.Select(x => x.TrackCode)
|
.Where(x => x.Files != null && x.Files.Count > 0)
|
||||||
.WhereIf(isFilterExternal, x => x != GlobalConst.EmptyString)
|
.SelectMany(x => x.Files!.Select(y => y.OssKey))
|
||||||
.Distinct()
|
.ToArray();
|
||||||
.ToList();
|
//根据osskey获取下载地址
|
||||||
|
var ossKeyUrlDict = OSSHelper.GetUrlByKeys(ossKeys);
|
||||||
var trackContentDic = new Dictionary<string, bool>();
|
|
||||||
if (!trackCodes.IsNullOrEmpty())
|
|
||||||
{
|
|
||||||
var trackContents = await _trackContentRepository.GetListAsync(x =>
|
|
||||||
x.SubSystemId == input.SubSystemId && trackCodes.Contains(x.Code),
|
|
||||||
x => new
|
|
||||||
{
|
|
||||||
x.Code,
|
|
||||||
x.IsExternal
|
|
||||||
});
|
|
||||||
trackContents.ForEach(x => trackContentDic.Add(x.Code, x.IsExternal));
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var group in details.GroupBy(x => x.OrderId))
|
foreach (var group in details.GroupBy(x => x.OrderId))
|
||||||
{
|
{
|
||||||
var item = new GetTrackOutput();
|
var item = new GetTrackOutput();
|
||||||
var trackDetails = group.ToList();
|
var trackDetails = group
|
||||||
|
.WhereIf(isFilterExternal, x => x.IsExternal)
|
||||||
|
.ToList();
|
||||||
|
if (trackDetails.Count == 0)
|
||||||
|
continue;
|
||||||
item.OrderNo = trackDetails.First().OrderNo;
|
item.OrderNo = trackDetails.First().OrderNo;
|
||||||
|
|
||||||
item.TrackDetails = trackDetails.Select(x => new TrackDetail
|
item.TrackDetails = trackDetails.Select(x => new TrackDetail
|
||||||
@ -65,6 +58,7 @@ public partial class TrackService
|
|||||||
Code = x.TrackCode,
|
Code = x.TrackCode,
|
||||||
Status = x.TrackStatus,
|
Status = x.TrackStatus,
|
||||||
Content = x.TrackContent,
|
Content = x.TrackContent,
|
||||||
|
EnContent = x.TrackEnContent,
|
||||||
OriginContent = x.OriginTrackContent,
|
OriginContent = x.OriginTrackContent,
|
||||||
Location = x.TrackPlace,
|
Location = x.TrackPlace,
|
||||||
Time = Math.Abs(x.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1
|
Time = Math.Abs(x.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1
|
||||||
@ -73,14 +67,16 @@ public partial class TrackService
|
|||||||
TimeZone = Math.Abs(x.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1
|
TimeZone = Math.Abs(x.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1
|
||||||
? null
|
? null
|
||||||
: input.TimeZone ?? 8,
|
: input.TimeZone ?? 8,
|
||||||
IsDisplay = trackContentDic.TryGetValue(x.TrackCode, out var isExternal) && isExternal,
|
IsDisplay = x.IsExternal,
|
||||||
IsVisibility = x.IsVisibility,
|
IsVisibility = x.IsVisibility,
|
||||||
|
IsExternal = x.IsExternal,
|
||||||
Source = x.Source,
|
Source = x.Source,
|
||||||
Remarks = x.Remarks,
|
Remarks = x.Remarks,
|
||||||
Files = x.Files?.Select(y => new FileItemDto
|
Files = x.Files?.Select(y => new FileItemDto
|
||||||
{
|
{
|
||||||
FileName = y.FileName,
|
FileName = y.FileName,
|
||||||
OssKey = y.OssKey
|
OssKey = y.OssKey,
|
||||||
|
DownloadUrl = ossKeyUrlDict.TryGetValue(y.OssKey, out var url) ? url : null
|
||||||
}).ToList(),
|
}).ToList(),
|
||||||
TrackPlaceCity = x.TrackPlaceCity,
|
TrackPlaceCity = x.TrackPlaceCity,
|
||||||
TrackPlaceCityId = x.TrackPlaceCityId,
|
TrackPlaceCityId = x.TrackPlaceCityId,
|
||||||
@ -97,6 +93,7 @@ public partial class TrackService
|
|||||||
res.Add(item);
|
res.Add(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 排序
|
// 排序
|
||||||
var sortedList = await TracksOrdered(res, input, input.SortMethod);
|
var sortedList = await TracksOrdered(res, input, input.SortMethod);
|
||||||
|
|
||||||
@ -120,29 +117,21 @@ public partial class TrackService
|
|||||||
//内部子系统不过滤外部轨迹
|
//内部子系统不过滤外部轨迹
|
||||||
var isFilterExternal = await HasFilterExternalTrack();
|
var isFilterExternal = await HasFilterExternalTrack();
|
||||||
|
|
||||||
// 是否对外
|
var ossKeys = details
|
||||||
var trackCodes = details.Select(x => x.TrackCode)
|
.Where(x => x.Files != null && x.Files.Count > 0)
|
||||||
.WhereIf(isFilterExternal, x => x != GlobalConst.EmptyString)
|
.SelectMany(x => x.Files!.Select(y => y.OssKey))
|
||||||
.Distinct()
|
.ToArray();
|
||||||
.ToList();
|
//根据osskey获取下载地址
|
||||||
|
var ossKeyUrlDict = OSSHelper.GetUrlByKeys(ossKeys);
|
||||||
var trackContentDic = new Dictionary<string, bool>();
|
|
||||||
if (!trackCodes.IsNullOrEmpty())
|
|
||||||
{
|
|
||||||
var trackContents = await _trackContentRepository.GetListAsync(x =>
|
|
||||||
x.SubSystemId == input.SubSystemId && trackCodes.Contains(x.Code),
|
|
||||||
x => new
|
|
||||||
{
|
|
||||||
x.Code,
|
|
||||||
x.IsExternal
|
|
||||||
});
|
|
||||||
trackContents.ForEach(x => trackContentDic.Add(x.Code, x.IsExternal));
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var group in details.GroupBy(x => x.OrderId))
|
foreach (var group in details.GroupBy(x => x.OrderId))
|
||||||
{
|
{
|
||||||
var item = new GetTrackOutput();
|
var item = new GetTrackOutput();
|
||||||
var trackDetails = group.ToList();
|
var trackDetails = group
|
||||||
|
.WhereIf(isFilterExternal, x => x.IsExternal)
|
||||||
|
.ToList();
|
||||||
|
if (trackDetails.Count == 0)
|
||||||
|
continue;
|
||||||
item.OrderNo = trackDetails.First().OrderNo;
|
item.OrderNo = trackDetails.First().OrderNo;
|
||||||
|
|
||||||
item.TrackDetails = trackDetails.Select(x => new TrackDetail
|
item.TrackDetails = trackDetails.Select(x => new TrackDetail
|
||||||
@ -151,18 +140,21 @@ public partial class TrackService
|
|||||||
Code = x.TrackCode,
|
Code = x.TrackCode,
|
||||||
Status = x.TrackStatus,
|
Status = x.TrackStatus,
|
||||||
Content = x.TrackContent,
|
Content = x.TrackContent,
|
||||||
|
EnContent = x.TrackEnContent,
|
||||||
OriginContent = x.OriginTrackContent,
|
OriginContent = x.OriginTrackContent,
|
||||||
Location = x.TrackPlace,
|
Location = x.TrackPlace,
|
||||||
Time = x.TrackTime,
|
Time = x.TrackTime,
|
||||||
TimeZone = x.TrackTimeZone,
|
TimeZone = x.TrackTimeZone,
|
||||||
IsDisplay = trackContentDic.TryGetValue(x.TrackCode, out var isExternal) && isExternal,
|
IsDisplay = x.IsExternal,
|
||||||
IsVisibility = x.IsVisibility,
|
IsVisibility = x.IsVisibility,
|
||||||
|
IsExternal = x.IsExternal,
|
||||||
Source = x.Source,
|
Source = x.Source,
|
||||||
Remarks = x.Remarks,
|
Remarks = x.Remarks,
|
||||||
Files = x.Files?.Select(y => new FileItemDto
|
Files = x.Files?.Select(y => new FileItemDto
|
||||||
{
|
{
|
||||||
FileName = y.FileName,
|
FileName = y.FileName,
|
||||||
OssKey = y.OssKey
|
OssKey = y.OssKey,
|
||||||
|
DownloadUrl = ossKeyUrlDict.TryGetValue(y.OssKey, out var url) ? url : null
|
||||||
}).ToList(),
|
}).ToList(),
|
||||||
TrackPlaceCity = x.TrackPlaceCity,
|
TrackPlaceCity = x.TrackPlaceCity,
|
||||||
TrackPlaceCityId = x.TrackPlaceCityId,
|
TrackPlaceCityId = x.TrackPlaceCityId,
|
||||||
|
|||||||
@ -399,6 +399,7 @@ public partial class TrackService : ApplicationService, ITrackService
|
|||||||
OperationMan = userInfo.Data.UserName,
|
OperationMan = userInfo.Data.UserName,
|
||||||
OperationManId = userInfo.Data.UserId,
|
OperationManId = userInfo.Data.UserId,
|
||||||
IsVisibility = input.IsVisibility,
|
IsVisibility = input.IsVisibility,
|
||||||
|
IsExternal = input.IsExternal,
|
||||||
Source = input.Source,
|
Source = input.Source,
|
||||||
Remarks = input.Remarks,
|
Remarks = input.Remarks,
|
||||||
Files = input.Files,
|
Files = input.Files,
|
||||||
|
|||||||
@ -141,24 +141,6 @@ public class TrackOrderService : ApplicationService
|
|||||||
|
|
||||||
var list = ObjectMapper.Map<List<TrackDetailsIndex>, List<TrackOrderDetailDto>>(trackDetails);
|
var list = ObjectMapper.Map<List<TrackDetailsIndex>, List<TrackOrderDetailDto>>(trackDetails);
|
||||||
|
|
||||||
var trackCodes = list.Select(x => x.Code)
|
|
||||||
.Where(x => x != GlobalConst.EmptyString)
|
|
||||||
.Distinct()
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
// 是否对外
|
|
||||||
if (!trackCodes.IsNullOrEmpty())
|
|
||||||
{
|
|
||||||
var trackContents = await _trackContentRepository.GetListAsync(x =>
|
|
||||||
x.SubSystemId == order.SubSystemId && trackCodes.Contains(x.Code), x => new
|
|
||||||
{
|
|
||||||
x.Code,
|
|
||||||
x.IsExternal
|
|
||||||
});
|
|
||||||
|
|
||||||
list.ForEach(x => x.IsExternal = trackContents.FirstOrDefault(y => y.Code == x.Code)?.IsExternal ?? false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 计算时区
|
// 计算时区
|
||||||
list.ForEach(a =>
|
list.ForEach(a =>
|
||||||
{
|
{
|
||||||
@ -217,7 +199,7 @@ public class TrackOrderService : ApplicationService
|
|||||||
foreach (var item in trackDetails)
|
foreach (var item in trackDetails)
|
||||||
{
|
{
|
||||||
//如果是外部系统,且轨迹内容不对外则跳过这条轨迹内容
|
//如果是外部系统,且轨迹内容不对外则跳过这条轨迹内容
|
||||||
if (system.SystemProperty == 2 && !item.IsVisibility)
|
if (system.SystemProperty == 2 && !item.IsExternal)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
//时间和时区任意一个为空则使用创建时间做为排序参照值
|
//时间和时区任意一个为空则使用创建时间做为排序参照值
|
||||||
|
|||||||
@ -15,10 +15,10 @@ public interface IOrderRepository : IBasicRepository<OrderEntity>
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 通过三方平台和三方单号查询订单
|
/// 通过三方平台和三方单号查询订单
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="serviceProvidrCode">三方平台</param>
|
/// <param name="serviceProviderCode">三方平台</param>
|
||||||
/// <param name="orderNo">三方平台单号</param>
|
/// <param name="orderNo">三方平台单号</param>
|
||||||
/// <returns>(主单号id,客户id)</returns>
|
/// <returns>(主单号id,客户id)</returns>
|
||||||
Task<(int MainOrderId, int CustomId)> GetTrackOrderByProviderAndOrderNo(string serviceProvidrCode, string orderNo);
|
Task<(int MainOrderId, int CustomId)> GetTrackOrderByProviderAndOrderNo(string serviceProviderCode, string orderNo);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 创建订单
|
/// 创建订单
|
||||||
|
|||||||
@ -186,12 +186,15 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot
|
|||||||
[SugarColumn(ColumnName = "TemplateCodes")]
|
[SugarColumn(ColumnName = "TemplateCodes")]
|
||||||
public string? TemplateCodes { get; set; }
|
public string? TemplateCodes { get; set; }
|
||||||
|
|
||||||
[SugarColumn(IsIgnore = true)] public List<OrderFlightEntity> OrderFlights { get; set; }
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public List<OrderFlightEntity> OrderFlights { get; set; }
|
||||||
|
|
||||||
[SugarColumn(IsIgnore = true)] public List<OrderPullStatusEntity> OrderPullStatus { get; set; }
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public List<OrderPullStatusEntity> OrderPullStatus { get; set; }
|
||||||
|
|
||||||
[Navigate(NavigateType.OneToMany, nameof(OrderPlatformNumberEntity.OrderId))]
|
[Navigate(NavigateType.OneToMany, nameof(OrderPlatformNumberEntity.OrderId))]
|
||||||
[SugarColumn(IsIgnore = true)] public List<OrderPlatformNumberEntity> OrderPlatformNumbers { get; set; }
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public List<OrderPlatformNumberEntity> OrderPlatformNumbers { get; set; }
|
||||||
|
|
||||||
public void ResetTrackInfo()
|
public void ResetTrackInfo()
|
||||||
{
|
{
|
||||||
|
|||||||
@ -35,4 +35,6 @@ public interface ITrackDetailsEsRepository : IElasticsearchClientService<TrackDe
|
|||||||
Task<List<TrackDetailsIndex>> GetDataByIds(string[] ids);
|
Task<List<TrackDetailsIndex>> GetDataByIds(string[] ids);
|
||||||
|
|
||||||
Task<TrackDetailsIndex> GetDetailAsync(string orderNo, string trackCode, int orderType, int subSystemId, DateTime trackTime);
|
Task<TrackDetailsIndex> GetDetailAsync(string orderNo, string trackCode, int orderType, int subSystemId, DateTime trackTime);
|
||||||
|
|
||||||
|
Task MigrateAsync();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -125,8 +125,14 @@ public class TrackDetailsIndex : IdBaseIndex
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 客户是否可见
|
/// 客户是否可见
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Obsolete("废弃的,请使用IsExternal")]
|
||||||
public bool IsVisibility { get; set; }
|
public bool IsVisibility { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否对外
|
||||||
|
/// </summary>
|
||||||
|
public bool IsExternal { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -67,6 +67,11 @@ public class TrackContentVO
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsToMq { get; set; }
|
public bool IsToMq { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否对外
|
||||||
|
/// </summary>
|
||||||
|
public bool IsExternal { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 轨迹内容code
|
/// 轨迹内容code
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -104,15 +104,18 @@ public class ProvideQueries : ISugarRepository, IProvideQueries, ITransientDepen
|
|||||||
.Where(x => x.SubSystemId == subSystemId && x.Code == trackCode)
|
.Where(x => x.SubSystemId == subSystemId && x.Code == trackCode)
|
||||||
.Select((x, y, z, k) => new TrackContentVO
|
.Select((x, y, z, k) => new TrackContentVO
|
||||||
{
|
{
|
||||||
|
SubSystemId = x.SubSystemId,
|
||||||
SubSystemCode = z.Key,
|
SubSystemCode = z.Key,
|
||||||
TrackStatusId = x.TrackStatusId,
|
TrackStatusId = x.TrackStatusId,
|
||||||
TrackStatus = y.Status,
|
TrackStatus = y.Status,
|
||||||
TrackStatusCode = y.Code,
|
TrackStatusCode = y.Code,
|
||||||
TrackContentCode = x.Code,
|
TrackContentCode = x.Code,
|
||||||
|
TrackContentId = x.Id,
|
||||||
TrackContent = x.Content,
|
TrackContent = x.Content,
|
||||||
TrackEnContent = x.EnContent,
|
TrackEnContent = x.EnContent,
|
||||||
IsCompleted = y.IsCompleted,
|
IsCompleted = y.IsCompleted,
|
||||||
IsRepeatable = x.IsRepeatable,
|
IsRepeatable = x.IsRepeatable,
|
||||||
|
IsExternal = x.IsExternal,
|
||||||
IsAllowManuallyUpdate = x.IsAllowManuallyUpdate,
|
IsAllowManuallyUpdate = x.IsAllowManuallyUpdate,
|
||||||
IsAllowManuallyCreate = x.IsAllowManuallyCreate,
|
IsAllowManuallyCreate = x.IsAllowManuallyCreate,
|
||||||
IsToMq = y.IsToMq || k.IsToMq,
|
IsToMq = y.IsToMq || k.IsToMq,
|
||||||
@ -135,10 +138,12 @@ public class ProvideQueries : ISugarRepository, IProvideQueries, ITransientDepen
|
|||||||
TrackStatus = y.Status,
|
TrackStatus = y.Status,
|
||||||
TrackStatusCode = y.Code,
|
TrackStatusCode = y.Code,
|
||||||
TrackContentCode = x.Code,
|
TrackContentCode = x.Code,
|
||||||
|
TrackContentId = x.Id,
|
||||||
TrackContent = x.Content,
|
TrackContent = x.Content,
|
||||||
TrackEnContent = x.EnContent,
|
TrackEnContent = x.EnContent,
|
||||||
IsCompleted = y.IsCompleted,
|
IsCompleted = y.IsCompleted,
|
||||||
IsRepeatable = x.IsRepeatable,
|
IsRepeatable = x.IsRepeatable,
|
||||||
|
IsExternal = x.IsExternal,
|
||||||
IsAllowManuallyUpdate = x.IsAllowManuallyUpdate,
|
IsAllowManuallyUpdate = x.IsAllowManuallyUpdate,
|
||||||
IsAllowManuallyCreate = x.IsAllowManuallyCreate,
|
IsAllowManuallyCreate = x.IsAllowManuallyCreate,
|
||||||
IsToMq = y.IsToMq || k.IsToMq,
|
IsToMq = y.IsToMq || k.IsToMq,
|
||||||
|
|||||||
@ -11,12 +11,13 @@ namespace SJZY.Track.Repository.Repositories;
|
|||||||
|
|
||||||
public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, ITransientDependency
|
public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, ITransientDependency
|
||||||
{
|
{
|
||||||
|
//tips:后期提供缓存清理接口
|
||||||
//MemoryCache本身线程安全简单使用,短暂数据不一致可以容忍,每过固定时间强制清除缓存
|
//MemoryCache本身线程安全简单使用,短暂数据不一致可以容忍,每过固定时间强制清除缓存
|
||||||
private static readonly MemoryCache _memoryCache = new(new MemoryCacheOptions());
|
private static readonly MemoryCache _memoryCache = new(new MemoryCacheOptions());
|
||||||
private static readonly Dictionary<int, string> _empty = new();
|
private static readonly Dictionary<int, string> _empty = new();
|
||||||
private static readonly Dictionary<string, Dictionary<int, string>> _empty2 = new();
|
private static readonly Dictionary<string, Dictionary<int, string>> _empty2 = new();
|
||||||
private const int ThirdPartyOrderNumberCacheTimeSpan = 3 * 60;
|
private static readonly TimeSpan _thirdPartyOrderNumberCacheTimeSpan = TimeSpan.FromMinutes(3);
|
||||||
private const int MainDataEnumCacheTimeSpan = 5 * 60;
|
private static readonly TimeSpan _mainDataEnumCacheTimeSpan = TimeSpan.FromMinutes(5);
|
||||||
|
|
||||||
private async Task<Dictionary<int, string>> GetThirdPartyOrderNumberForCacheAsync(int[] orderIds)
|
private async Task<Dictionary<int, string>> GetThirdPartyOrderNumberForCacheAsync(int[] orderIds)
|
||||||
{
|
{
|
||||||
@ -48,7 +49,7 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
|
|||||||
|
|
||||||
_memoryCache.Set(key, dict, new MemoryCacheEntryOptions
|
_memoryCache.Set(key, dict, new MemoryCacheEntryOptions
|
||||||
{
|
{
|
||||||
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(ThirdPartyOrderNumberCacheTimeSpan),
|
AbsoluteExpirationRelativeToNow = _thirdPartyOrderNumberCacheTimeSpan,
|
||||||
Size = dict.Count
|
Size = dict.Count
|
||||||
});
|
});
|
||||||
return dict;
|
return dict;
|
||||||
@ -92,7 +93,7 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
|
|||||||
|
|
||||||
_memoryCache.Set(key, dict, new MemoryCacheEntryOptions
|
_memoryCache.Set(key, dict, new MemoryCacheEntryOptions
|
||||||
{
|
{
|
||||||
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(MainDataEnumCacheTimeSpan),
|
AbsoluteExpirationRelativeToNow = _mainDataEnumCacheTimeSpan,
|
||||||
Size = dict.Count
|
Size = dict.Count
|
||||||
});
|
});
|
||||||
return dict;
|
return dict;
|
||||||
@ -247,12 +248,12 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
|
|||||||
return pageList;
|
return pageList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<(int MainOrderId, int CustomId)> GetTrackOrderByProviderAndOrderNo(string serviceProvidrCode, string orderNo)
|
public async Task<(int MainOrderId, int CustomId)> GetTrackOrderByProviderAndOrderNo(string serviceProviderCode, string orderNo)
|
||||||
{
|
{
|
||||||
var orderList = await Context.Queryable<OrderEntity>()
|
var orderList = await Context.Queryable<OrderEntity>()
|
||||||
.LeftJoin<OrderPlatformNumberEntity>((a, b) => a.Id == b.OrderId && b.IsDeleted == false)
|
.LeftJoin<OrderPlatformNumberEntity>((a, b) => a.Id == b.OrderId && b.IsDeleted == false)
|
||||||
.Where((a, b) => a.OrderNo == orderNo
|
.Where((a, b) => a.OrderNo == orderNo
|
||||||
|| (b.Platform == serviceProvidrCode && b.OrderNumber == orderNo))
|
|| (b.Platform == serviceProviderCode && b.OrderNumber == orderNo))
|
||||||
.Select((a, b) => new
|
.Select((a, b) => new
|
||||||
{
|
{
|
||||||
a.Id,
|
a.Id,
|
||||||
@ -269,7 +270,7 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
|
|||||||
|
|
||||||
var order = orderList.First();
|
var order = orderList.First();
|
||||||
//当出现了多条记录匹配,优先使用外部单匹配提升精确度
|
//当出现了多条记录匹配,优先使用外部单匹配提升精确度
|
||||||
var matchOrder = orderList.FirstOrDefault(x => x.Platform == serviceProvidrCode && x.OrderNumber == orderNo);
|
var matchOrder = orderList.FirstOrDefault(x => x.Platform == serviceProviderCode && x.OrderNumber == orderNo);
|
||||||
return matchOrder != null
|
return matchOrder != null
|
||||||
? (matchOrder.Id, matchOrder.CustomId)
|
? (matchOrder.Id, matchOrder.CustomId)
|
||||||
: (order.Id, order.CustomId);
|
: (order.Id, order.CustomId);
|
||||||
|
|||||||
@ -270,6 +270,7 @@ public class TrackContentRepository : BasicRepository<TrackContentEntity>, ITrac
|
|||||||
IsAllowManuallyUpdate = x.IsAllowManuallyUpdate,
|
IsAllowManuallyUpdate = x.IsAllowManuallyUpdate,
|
||||||
IsAllowManuallyCreate = x.IsAllowManuallyCreate,
|
IsAllowManuallyCreate = x.IsAllowManuallyCreate,
|
||||||
IsToMq = y.IsToMq,
|
IsToMq = y.IsToMq,
|
||||||
|
IsExternal = x.IsExternal
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -162,6 +162,7 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract<TrackDetail
|
|||||||
track.TrackContent,
|
track.TrackContent,
|
||||||
track.TrackEnContent,
|
track.TrackEnContent,
|
||||||
track.IsVisibility,
|
track.IsVisibility,
|
||||||
|
track.IsExternal,
|
||||||
track.Remarks,
|
track.Remarks,
|
||||||
track.Files,
|
track.Files,
|
||||||
track.TrackPlaceCity,
|
track.TrackPlaceCity,
|
||||||
@ -173,7 +174,7 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract<TrackDetail
|
|||||||
track.TrackPlacePostcode,
|
track.TrackPlacePostcode,
|
||||||
track.DestinationTimeZone,
|
track.DestinationTimeZone,
|
||||||
track.EstimatedDeliveryDate,
|
track.EstimatedDeliveryDate,
|
||||||
track.Extra
|
Extra = track.Extra
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -207,6 +208,7 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract<TrackDetail
|
|||||||
ctx._source.trackContent = params.trackContent;
|
ctx._source.trackContent = params.trackContent;
|
||||||
ctx._source.trackEnContent = params.trackEnContent;
|
ctx._source.trackEnContent = params.trackEnContent;
|
||||||
ctx._source.isVisibility = params.isVisibility;
|
ctx._source.isVisibility = params.isVisibility;
|
||||||
|
ctx._source.isExternal = params.isExternal;
|
||||||
ctx._source.remarks = params.remarks;
|
ctx._source.remarks = params.remarks;
|
||||||
ctx._source.files = params.files;
|
ctx._source.files = params.files;
|
||||||
ctx._source.trackPlaceCity = params.trackPlaceCity;
|
ctx._source.trackPlaceCity = params.trackPlaceCity;
|
||||||
@ -230,6 +232,7 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract<TrackDetail
|
|||||||
.Add("trackContent", track.TrackContent)
|
.Add("trackContent", track.TrackContent)
|
||||||
.Add("trackEnContent", track.TrackEnContent)
|
.Add("trackEnContent", track.TrackEnContent)
|
||||||
.Add("isVisibility", track.IsVisibility)
|
.Add("isVisibility", track.IsVisibility)
|
||||||
|
.Add("isExternal", track.IsExternal)
|
||||||
.Add("remarks", track.Remarks)
|
.Add("remarks", track.Remarks)
|
||||||
.Add("files", track.Files)
|
.Add("files", track.Files)
|
||||||
.Add("trackPlaceCity", track.TrackPlaceCity)
|
.Add("trackPlaceCity", track.TrackPlaceCity)
|
||||||
@ -284,6 +287,7 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract<TrackDetail
|
|||||||
ctx._source.trackContent = params.trackContent;
|
ctx._source.trackContent = params.trackContent;
|
||||||
ctx._source.trackEnContent = params.trackEnContent;
|
ctx._source.trackEnContent = params.trackEnContent;
|
||||||
ctx._source.isVisibility = params.isVisibility;
|
ctx._source.isVisibility = params.isVisibility;
|
||||||
|
ctx._source.isExternal = params.isExternal;
|
||||||
ctx._source.remarks = params.remarks;
|
ctx._source.remarks = params.remarks;
|
||||||
ctx._source.files = params.files;
|
ctx._source.files = params.files;
|
||||||
ctx._source.trackPlaceCity = params.trackPlaceCity;
|
ctx._source.trackPlaceCity = params.trackPlaceCity;
|
||||||
@ -306,6 +310,7 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract<TrackDetail
|
|||||||
.Add("trackContent", track.TrackContent)
|
.Add("trackContent", track.TrackContent)
|
||||||
.Add("trackEnContent", track.TrackEnContent)
|
.Add("trackEnContent", track.TrackEnContent)
|
||||||
.Add("isVisibility", track.IsVisibility)
|
.Add("isVisibility", track.IsVisibility)
|
||||||
|
.Add("isExternal", track.IsExternal)
|
||||||
.Add("remarks", track.Remarks)
|
.Add("remarks", track.Remarks)
|
||||||
.Add("files", track.Files)
|
.Add("files", track.Files)
|
||||||
.Add("trackPlaceCity", track.TrackPlaceCity)
|
.Add("trackPlaceCity", track.TrackPlaceCity)
|
||||||
@ -590,4 +595,15 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract<TrackDetail
|
|||||||
|
|
||||||
return res.Documents.FirstOrDefault();
|
return res.Documents.FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task MigrateAsync()
|
||||||
|
{
|
||||||
|
await Context.MapAsync<TrackDetailsIndex>(m => m
|
||||||
|
.AutoMap());
|
||||||
|
//字段迁移,isVisibility => isExternal
|
||||||
|
await Context.UpdateByQueryAsync<TrackDetailsIndex>(u => u
|
||||||
|
.Query(q => q.MatchAll())
|
||||||
|
.Script(s=>s.Source("ctx._source.isExternal = ctx._source.isVisibility"))
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user