From 4a759333ca265cd9e0dacdfce2d00f64d0bff5d9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Wed, 3 Apr 2024 09:13:47 +0800
Subject: [PATCH 01/22] =?UTF-8?q?change=EF=BC=9A=E6=8E=A8=E9=80=81?=
=?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../EventHandlers/TrackPushEventHandler.cs | 22 +++++++++++++------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
index e95906da..68ad47d4 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
@@ -39,9 +39,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
{
x.SubSystemId, x.LatestPushTrackCode, x.QuestionType, x.CustomId
});
- if (order == null || order.QuestionType == (int)TrackProblemType.Error) return; // 是否通知?
-
- TrackPushContentConfigDto? config;
+ if (order == null) return;
var log = new TrackPushRecordIndex
{
@@ -58,6 +56,8 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
CreateTime = DateTime.Now
};
+ TrackPushContentConfigDto? config = null;
+
switch (@event.OptionType)
{
case OptionType.无:
@@ -65,9 +65,12 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
case OptionType.新增:
if (@event.OperationMan == null)
{
- // 推送新增,需要根据上一次的推送 推断 本次推送 是否可行
- config = await _trackPushCacheService.IsValidPushAsync(order.SubSystemId, order.CustomId,
- order.LatestPushTrackCode, @event.TrackCode);
+ if (order.QuestionType != (int)TrackProblemType.Error)
+ {
+ // 推送新增,需要根据上一次的推送 推断 本次推送 是否可行
+ config = await _trackPushCacheService.IsValidPushAsync(order.SubSystemId, order.CustomId,
+ order.LatestPushTrackCode, @event.TrackCode);
+ }
}
else
{
@@ -132,12 +135,17 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
// tips:只有新增会影响推送进度?
order.LatestPushTrackCode = dto.TrackCode;
order.LatestPushTime = DateTime.Now;
+ await _orderRepository.UpdateColumnAsync(order, x => new
+ {
+ x.LatestPushTrackCode, x.LatestPushTime, x.QuestionType, x.LatestPushError
+ });
+ return;
}
}
await _orderRepository.UpdateColumnAsync(order, x => new
{
- x.LatestPushTrackCode, x.QuestionType, x.LatestPushError, x.LatestPushTime
+ x.QuestionType, x.LatestPushError
});
}
From 63e4c8b999ee5cbe2a497d14a11f5b78347134cb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Wed, 3 Apr 2024 17:00:30 +0800
Subject: [PATCH 02/22] =?UTF-8?q?fix=EF=BC=9A=E3=80=90=E3=80=90=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9=E8=BD=A8=E8=BF=B9=E5=86=85=E5=AE=B9=E3=80=91=E8=BD=A8?=
=?UTF-8?q?=E8=BF=B9=E6=A0=87=E8=AE=B0=E6=B2=A1=E6=9C=89=E5=80=BC=E6=97=B6?=
=?UTF-8?q?=EF=BC=8C=E6=98=BE=E7=A4=BA=E4=BA=86id=E3=80=91https://www.tapd?=
=?UTF-8?q?.cn/60863849/bugtrace/bugs/view=3Fbug=5Fid=3D116086384900103258?=
=?UTF-8?q?5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Dtos/TrackContents/EditTrackContentInput.cs | 2 +-
.../Services/TrackContents/TrackContentService.cs | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackContents/EditTrackContentInput.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackContents/EditTrackContentInput.cs
index d2a829ca..8a99f816 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/TrackContents/EditTrackContentInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/TrackContents/EditTrackContentInput.cs
@@ -88,7 +88,7 @@
///
/// 轨迹标记id
///
- public int TrackFlagId { get; set; }
+ public int? TrackFlagId { get; set; }
///
/// 轨迹标记
diff --git a/src/SJZY.Track.Application/Services/TrackContents/TrackContentService.cs b/src/SJZY.Track.Application/Services/TrackContents/TrackContentService.cs
index 657cc671..9ed8374e 100644
--- a/src/SJZY.Track.Application/Services/TrackContents/TrackContentService.cs
+++ b/src/SJZY.Track.Application/Services/TrackContents/TrackContentService.cs
@@ -59,6 +59,8 @@ public class TrackContentService : ApplicationService
}
var dto = ObjectMapper.Map(detailInfo);
+
+ if (dto.TrackFlagId == 0) dto.TrackFlagId = null;
return new UnifyResultDto("200", "", dto);
}
From 0b8e9da9180dd26848d0375580ca47d054f238ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Wed, 3 Apr 2024 17:51:00 +0800
Subject: [PATCH 03/22] =?UTF-8?q?change=EF=BC=9A=E8=BD=A8=E8=BF=B9?=
=?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=AF=B9=E5=A4=96=E9=80=BB=E8=BE=91=E8=B0=83?=
=?UTF-8?q?=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Dtos/ProvideServices/GetTrackOutput.cs | 13 +++--
.../ProvideServices/TrackService.Query.cs | 57 ++++++++++++-------
.../TrackTemplates/ITrackTemplateService.cs | 7 ---
.../Dtos/TrackTemplate/OrderedTrackCodeDto.cs | 5 ++
.../Queries/ProvideQueries.cs | 32 ++++-------
.../Repositories/TrackDetailsRepository.cs | 1 +
6 files changed, 59 insertions(+), 56 deletions(-)
delete mode 100644 src/SJZY.Track.Application/Services/TrackTemplates/ITrackTemplateService.cs
diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs
index eda7ecbc..dcafe452 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs
@@ -5,17 +5,18 @@ public class GetTrackOutput
///
/// 订单号
///
- public string OrderNo { get; set; }
+ public string OrderNo { get; set; } = null!;
- public List TrackDetails { get; set; }
+ public List TrackDetails { get; set; } = new();
}
public class TrackDetail
{
- public string Code { get; set; }
- public string Status { get; set; }
- public string Content { get; set; }
- public string Location { get; set; }
+ public string Code { get; set; } = null!;
+ public string Status { get; set; } = null!;
+ public string? Content { get; set; }
+ public string? OriginContent { get; set; }
+ public string Location { get; set; } = null!;
public DateTime Time { get; set; }
public float TimeZone { get; set; }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs
index 35237196..3864b604 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs
@@ -39,6 +39,7 @@ public partial class TrackService
Code = x.TrackCode,
Status = x.TrackStatus,
Content = x.TrackContent,
+ OriginContent = x.OriginTrackContent,
Location = x.TrackPlace,
Time = x.TrackTime.AddHours(input.TimeZone ?? 8 - x.TrackTimeZone),
TimeZone = input.TimeZone ?? 8
@@ -54,6 +55,29 @@ public partial class TrackService
private async Task TrackDetailSort(List list, GetTrackInput input)
{
+ var orderTemplates = await _provideQueries
+ .GetOrderTemplateLinksAsync(input.OrderType, input.OrderNos);
+ var distinctTemplateIds = orderTemplates.Select(x => x.TemplateId).Distinct().ToList();
+ var templateContent = await _provideQueries.GetOrderedTrackCodesAsync(distinctTemplateIds);
+
+ list.ForEach(item =>
+ {
+ var codes = new List();
+ // 多模板拼接显示
+ foreach (var orderTemplate in orderTemplates.Where(x => x.OrderNo == item.OrderNo))
+ {
+ codes.AddRange(templateContent
+ .Where(t => t.TemplateId == orderTemplate.TemplateId) // 按模板
+ .Where(t => t.IsExternal) // 过滤不对外的
+ .Select(t => t.Code));
+ }
+
+ item.TrackDetails = item.TrackDetails
+ .Where(x => codes.Contains(x.Code)) // 剔除不在模板内容中的元素
+ .OrderBy(x => codes.IndexOf(x.Code)) // 按照在模板内容的位置排序
+ .ToList();
+ });
+
switch (input.SortMethod)
{
case SortMethod.ByTrackTime:
@@ -64,30 +88,21 @@ public partial class TrackService
list.ForEach(item => item.TrackDetails.Sort((a, b) => b.Time.CompareTo(a.Time)));
break;
case SortMethod.ByTemplate:
- var orderTemplates = await _provideQueries
- .GetOrderTemplateLinksAsync(input.OrderType, input.OrderNos);
- var distinctTemplateIds = orderTemplates.Select(x => x.TemplateId).Distinct().ToList();
- var templateContent = await _provideQueries.GetOrderedTrackCodesAsync(distinctTemplateIds);
- list.ForEach(item =>
- {
- var codes = new List();
- // 多模板拼接显示
- foreach (var orderTemplate in orderTemplates.Where(x => x.OrderNo == item.OrderNo))
- {
- codes.AddRange(templateContent
- .Where(t => t.TemplateId == orderTemplate.TemplateId) // 按模板
- .Where(t => t.IsExternal) // 过滤不对外的
- .Select(t => t.Code));
- }
-
- item.TrackDetails = item.TrackDetails
- .Where(x => codes.Contains(x.Code)) // 剔除不在模板内容中的元素
- .OrderBy(x => codes.IndexOf(x.Code)) // 按照在模板内容的位置排序
- .ToList();
- });
break;
default:
throw new ArgumentOutOfRangeException(nameof(input.SortMethod), input.SortMethod, "不支持的排序方式");
}
+
+ // 显示原轨迹
+ list.ForEach(item =>
+ {
+ item.TrackDetails.ForEach(track =>
+ {
+ if (templateContent.First(x => x.Code == track.Code).ShowOrigin)
+ {
+ track.Content = track.OriginContent;
+ }
+ });
+ });
}
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/TrackTemplates/ITrackTemplateService.cs b/src/SJZY.Track.Application/Services/TrackTemplates/ITrackTemplateService.cs
deleted file mode 100644
index f6e29107..00000000
--- a/src/SJZY.Track.Application/Services/TrackTemplates/ITrackTemplateService.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace SJZY.Track.Application.Services.TrackTemplates
-{
- public interface ITrackTemplateService
- {
-
- }
-}
diff --git a/src/SJZY.Track.Domain/Dtos/TrackTemplate/OrderedTrackCodeDto.cs b/src/SJZY.Track.Domain/Dtos/TrackTemplate/OrderedTrackCodeDto.cs
index cb31744d..43805324 100644
--- a/src/SJZY.Track.Domain/Dtos/TrackTemplate/OrderedTrackCodeDto.cs
+++ b/src/SJZY.Track.Domain/Dtos/TrackTemplate/OrderedTrackCodeDto.cs
@@ -16,4 +16,9 @@ public class OrderedTrackCodeDto
/// 是否对外
///
public bool IsExternal { get; set; }
+
+ ///
+ /// 显示原轨迹
+ ///
+ public bool ShowOrigin { get; set; }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs
index cce3c885..7f144688 100644
--- a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs
+++ b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs
@@ -20,20 +20,6 @@ public class ProvideQueries : ISugarRepository, IProvideQueries,
Context = SqlsugarScopeBasic.GetContextSafely("default");
}
- public async Task> GetOrderTemplateLinksAsync(int orderType,
- params string[] orderNumbers)
- {
- return await Context.Queryable()
- .LeftJoin((a, b) => a.Id == b.OrderId)
- .Where(a => a.OrderType == orderType && orderNumbers.Contains(a.OrderNo))
- .Select((a, b) => new OrderTemplateLinkDto
- {
- OrderNo = a.OrderNo,
- TemplateId = b.TrackTemplateId
- })
- .ToListAsync();
- }
-
public async Task> GetOrderTemplateLinksAsync(int orderType, List orderNumbers)
{
return await Context.Queryable()
@@ -49,15 +35,17 @@ public class ProvideQueries : ISugarRepository, IProvideQueries,
public async Task> GetOrderedTrackCodesAsync(List templateIds)
{
- return await Context.Queryable()
- .LeftJoin((a, b) => a.TrackContentId == b.Id)
- .Where(a => templateIds.Contains(a.TrackTemplateId))
- .OrderBy(a => a.Sort)
- .Select((a, b) => new OrderedTrackCodeDto
+ return await Context.Queryable()
+ .LeftJoin((a, b) => a.Id == b.TrackTemplateId)
+ .LeftJoin((a, b, c) => b.TrackContentId == c.Id)
+ .Where(a => templateIds.Contains(a.Id))
+ .OrderBy((a, b) => b.Sort)
+ .Select((a, b, c) => new OrderedTrackCodeDto
{
- TemplateId = a.TrackTemplateId,
- Code = b.Code,
- IsExternal = a.IsExternal
+ TemplateId = a.Id,
+ ShowOrigin = a.ShowOrigin,
+ Code = c.Code,
+ IsExternal = b.IsExternal
})
.ToListAsync();
}
diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
index 1229eec7..03b3c7c9 100644
--- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
@@ -85,6 +85,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract f.TrackStatus)
.Field(f => f.TrackCode)
.Field(f => f.TrackContent)
+ .Field(f => f.OriginTrackContent)
.Field(f => f.TrackPlace)
.Field(f => f.TrackTime)
.Field(f => f.TrackTimeZone)
From d2de95a8039155fe1b9eff4d59a8cf95e27bac5e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Sun, 7 Apr 2024 20:07:38 +0800
Subject: [PATCH 04/22] =?UTF-8?q?fix=EF=BC=9A=E3=80=90=E3=80=90=E8=BD=A8?=
=?UTF-8?q?=E8=BF=B9=E8=AE=A2=E5=8D=95=E3=80=91=E8=BD=A8=E8=BF=B9=E6=98=8E?=
=?UTF-8?q?=E7=BB=86=EF=BC=88"=E6=9C=8D=E5=8A=A1=E5=95=86=E6=BA=90?=
=?UTF-8?q?=E8=BD=A8=E8=BF=B9=E5=86=85=E5=AE=B9"=E4=B8=8E"=E8=BD=A8?=
=?UTF-8?q?=E8=BF=B9=E5=86=85=E5=AE=B9"=E4=B8=8D=E5=8C=B9=E9=85=8D?=
=?UTF-8?q?=EF=BC=89=E5=B7=B2=E9=85=8D=E7=BD=AE=E6=98=A0=E5=B0=84=E3=80=91?=
=?UTF-8?q?https://www.tapd.cn/60863849/bugtrace/bugs/view=3Fbug=5Fid=3D11?=
=?UTF-8?q?60863849001032624?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Events/TrackUpsertEvent.cs | 10 ++++++++++
.../EventHandlers/TrackRefreshEventHandler.cs | 6 ++++++
.../EventHandlers/TrackUpsertEventHandler.cs | 2 ++
3 files changed, 18 insertions(+)
diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs
index 3533f2e6..53e0d856 100644
--- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs
+++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs
@@ -22,6 +22,16 @@ public class TrackUpsertEvent
///
public string? ServiceProviderName { get; set; }
+ ///
+ /// 原轨迹内容
+ ///
+ public string? OriginTrackContent { get; set; }
+
+ ///
+ /// 原轨迹报文
+ ///
+ public string? OriginTrackData { get; set; }
+
///
/// 表示订单是否完成(只由轨迹刷新配置决定)
/// tips:能够使得IsCompleted为true的点,全局只有一个:轨迹刷新
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs
index b4bfe207..61431b30 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs
@@ -218,6 +218,7 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
OrderType = context.OrderType,
OrderNo = context.OrderNo,
ServiceProviderName = context.ServiceProviderName,
+ OriginTrackData = JsonConvert.SerializeObject(trackToken),
IsCompleted = matchedContentConfig.IsCompleted,
SubSystemId = context.SubSystemId,
TrackCode = matchedContentConfig.TrackContentCode,
@@ -225,6 +226,11 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
TrackTime = trackTime ?? DateTime.Now,
TrackTimeZone = trackTimeZone ?? matchedContentConfig.TrackTimeZoneValue ?? 8
};
+ if (paramConfig.TrackContentName != null)
+ {
+ trackUpsertEvent.OriginTrackContent = trackToken[paramConfig.TrackContentName]?.Value();
+ }
+
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, trackUpsertEvent);
}
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs
index 41ce263b..105ef588 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs
@@ -131,6 +131,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
TrackTime = @event.TrackTime,
TrackTimeZone = @event.TrackTimeZone,
ServiceProviderName = @event.ServiceProviderName,
+ OriginTrackContent = @event.OriginTrackContent,
+ OriginTrackData = @event.OriginTrackData,
IsCanDelete = false,
CreateUser = @event.OperationMan ?? GlobalConst.SystemUser,
CreateTime = DateTime.Now
From 66d5a5c4d59dee0eaf4175e32eb109f864841226 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Sun, 7 Apr 2024 21:21:21 +0800
Subject: [PATCH 05/22] =?UTF-8?q?fix=EF=BC=9A=E3=80=90=E3=80=90=E8=BD=A8?=
=?UTF-8?q?=E8=BF=B9=E8=AE=A2=E5=8D=95=E3=80=91"=E6=98=AF=E5=90=A6?=
=?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=8E=A8=E9=80=81"=E4=B8=BA=E5=90=A6?=
=?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E8=BD=A8=E8=BF=B9=E6=98=8E=E7=BB=86?=
=?UTF-8?q?=E5=90=8E=EF=BC=8C=E5=BC=82=E5=B8=B8=E8=87=AA=E5=8A=A8=E6=8E=A8?=
=?UTF-8?q?=E9=80=81=E8=BD=A8=E8=BF=B9=E6=98=8E=E7=BB=86=E3=80=91https://w?=
=?UTF-8?q?ww.tapd.cn/60863849/bugtrace/bugs/view=3Fbug=5Fid=3D11608638490?=
=?UTF-8?q?01032644?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Services/ITrackPushCacheService.cs | 18 +++--
.../TrackPush/TrackPushCacheService.cs | 50 ++++++++------
.../Services/TrackPush/TrackPushService.cs | 65 +++++++++++--------
3 files changed, 76 insertions(+), 57 deletions(-)
diff --git a/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs b/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs
index d04c0fa2..8928ae11 100644
--- a/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs
+++ b/src/SJZY.Track.Application.Contract/Services/ITrackPushCacheService.cs
@@ -12,6 +12,14 @@ public interface ITrackPushCacheService
///
Task?> GetPushContentConfigsAsync(int subSystemId, int customId);
+ ///
+ /// 设置服务商拉取配置缓存
+ ///
+ ///
+ ///
+ ///
+ Task?> SetPushContentConfigsAsync(int subSystemId, int customId);
+
///
/// 获取服务商拉取配置
///
@@ -33,14 +41,4 @@ public interface ITrackPushCacheService
Task IsValidPushAsync(int subSystemId, int customId,
string? latestPushTrackCode,
string? trackCode);
-
- ///
- /// 设置推送配置缓存
- ///
- ///
- /// 子系统id
- /// 客户id
- ///
- Task?> SetPushContentConfigsAsync(int? id = null, int? subSystemId = null,
- int? customId = null);
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs
index 88d6b079..bf365f28 100644
--- a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs
+++ b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs
@@ -1,5 +1,4 @@
-using System.Linq.Expressions;
-using SJZY.Expand.ABP.Core;
+using SJZY.Expand.ABP.Core;
using SJZY.Track.Application.Contract.Dtos.TrackPush;
using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
@@ -22,11 +21,23 @@ public class TrackPushCacheService : ITrackPushCacheService, ITransientDependenc
public async Task?> GetPushContentConfigsAsync(int subSystemId, int customId)
{
- var data = await RedisHelper.Client.GetAsync>(
- TrackPushContentKey(subSystemId, customId));
+ var exists = await RedisHelper.Client.ExistsAsync(TrackPushContentKey(subSystemId, customId));
+ if (exists)
+ {
+ return await RedisHelper.Client.GetAsync>(
+ TrackPushContentKey(subSystemId, customId));
+ }
- data ??= await SetPushContentConfigsAsync(subSystemId: subSystemId, customId: customId);
+ return await SetPushContentConfigsAsync(subSystemId, customId);
+ }
+ public async Task?> SetPushContentConfigsAsync(int subSystemId, int customId)
+ {
+ // maybe is null
+ var data = await DoGetPushContentConfigsAsync(subSystemId, customId);
+ // ttl 3days
+ await RedisHelper.Client.SetAsync(TrackPushContentKey(subSystemId, customId),
+ data, 3 * 24 * 60 * 60);
return data;
}
@@ -58,23 +69,23 @@ public class TrackPushCacheService : ITrackPushCacheService, ITransientDependenc
return matched != null && matched.TrackCode == trackCode && matched.IsAutoPush ? matched : default;
}
- public async Task?> SetPushContentConfigsAsync(int? id = null,
- int? subSystemId = null,
- int? customId = null)
+ private async Task?> DoGetPushContentConfigsAsync(int subSystemId, int customId)
{
- Expression> exp = x => true;
- if (id.HasValue) exp = x => x.Id == id;
- else if (subSystemId.HasValue && customId.HasValue)
- exp = x => x.SubSystemId == subSystemId && x.CustomId == customId;
-
- var trackPushConfig = await _trackPushConfigRepository.GetFirstAsync(exp, x => new
+ var trackPushConfig = await _trackPushConfigRepository.GetFirstAsync(
+ x => x.SubSystemId == subSystemId && x.CustomId == customId, x => new
+ {
+ x.Id, x.IsAutoPush, x.IsAllPush, x.IsCanDelete, x.IsCanUpdate, x.SubSystemId, x.CustomId
+ });
+ if (trackPushConfig == null)
{
- x.Id, x.IsAutoPush, x.IsAllPush, x.IsCanDelete, x.IsCanUpdate, x.SubSystemId, x.CustomId
- });
- if (trackPushConfig == null) return null;
+ return null;
+ }
var trackPushContentList = await _trackPushConfigRepository.GetContentListAsync(trackPushConfig.Id);
- if (trackPushContentList.Count == 0) return null;
+ if (trackPushContentList.Count == 0)
+ {
+ return null;
+ }
// tips:hot path,auto mapper性能不如原生
var res = trackPushContentList.Select(item => new TrackPushContentConfigDto
@@ -95,9 +106,6 @@ public class TrackPushCacheService : ITrackPushCacheService, ITransientDependenc
ExpandFieldsValue = item.ExpandFieldsValue,
}).ToList();
- await RedisHelper.Client.SetAsync(TrackPushContentKey(trackPushConfig.SubSystemId, trackPushConfig.CustomId),
- res);
-
return res;
}
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/TrackPush/TrackPushService.cs b/src/SJZY.Track.Application/Services/TrackPush/TrackPushService.cs
index 5225e8db..f7d69e1d 100644
--- a/src/SJZY.Track.Application/Services/TrackPush/TrackPushService.cs
+++ b/src/SJZY.Track.Application/Services/TrackPush/TrackPushService.cs
@@ -95,12 +95,17 @@ public class TrackPushService : ApplicationService
throw new BusinessException(message: _stringLocalizer["IsTrackPushConfigAny"]);
}
+ using var ts = TransactionScopeHelper.Create();
+
switch (input.Options)
{
case OptionTypeNoNull.新增:
{
var trackPushEntity = ObjectMapper.Map(input);
+
await _trackPushConfigRepository.InsertReturnIdentityAsync(trackPushEntity);
+ await _trackPushCacheService.SetPushContentConfigsAsync(trackPushEntity.SubSystemId,
+ trackPushEntity.CustomId);
}
break;
@@ -111,21 +116,19 @@ public class TrackPushService : ApplicationService
ObjectMapper.Map(input, oldTrackPushEntity);
await _trackPushConfigRepository.UpdateAsync(oldTrackPushEntity);
-
- if (input.IsAutoPush!.Value) await _trackPushCacheService.SetPushContentConfigsAsync(input.Id);
+ await _trackPushCacheService.SetPushContentConfigsAsync(oldTrackPushEntity.SubSystemId,
+ oldTrackPushEntity.CustomId);
}
break;
case OptionTypeNoNull.删除:
{
- _ = await _trackPushConfigRepository.GetFirstAsync(x => x.Id == input.Id) ??
- throw new BusinessException(message: _stringLocalizer["NotFindData"]);
+ var entity = await _trackPushConfigRepository.GetFirstAsync(x => x.Id == input.Id) ??
+ throw new BusinessException(message: _stringLocalizer["NotFindData"]);
- using var ts = TransactionScopeHelper.Create();
await _trackPushConfigRepository.SoftDeleteAsync(x => x.Id == input.Id);
await _trackPushConfigRepository.SoftDeleteContentAsync(x => x.TrackPushConfigId == input.Id);
-
- ts.Complete();
+ await _trackPushCacheService.SetPushContentConfigsAsync(entity.SubSystemId, entity.CustomId);
}
break;
@@ -134,6 +137,7 @@ public class TrackPushService : ApplicationService
nameof(EditTrackPushConfigInput.Options)]);
}
+ ts.Complete();
return true;
}
@@ -172,6 +176,10 @@ public class TrackPushService : ApplicationService
throw new BusinessException(message: _stringLocalizer["IsTrackPushEnContentValueAny"]);
}
+ var trackPushConfigId = input.TrackPushConfigId;
+
+ using var ts = TransactionScopeHelper.Create();
+
switch (input.Options)
{
case OptionTypeNoNull.新增:
@@ -181,10 +189,7 @@ public class TrackPushService : ApplicationService
var entity = ObjectMapper.Map(input);
entity.Sort = maxSort + 1;
-
await _trackPushConfigRepository.InsertContentAsync(entity);
- await _trackPushCacheService.SetPushContentConfigsAsync(input.TrackPushConfigId);
-
break;
}
@@ -194,10 +199,7 @@ public class TrackPushService : ApplicationService
throw new BusinessException(message: _stringLocalizer["NotFindData"]);
ObjectMapper.Map(input, entity);
-
await _trackPushConfigRepository.UpdateContentAsync(entity);
- await _trackPushCacheService.SetPushContentConfigsAsync(entity.TrackPushConfigId);
-
break;
}
@@ -205,18 +207,10 @@ public class TrackPushService : ApplicationService
{
var entity = await _trackPushConfigRepository.GetContentByIdAsync(input.Id!.Value) ??
throw new BusinessException(message: _stringLocalizer["NotFindData"]);
-
- using (var ts = TransactionScopeHelper.Create())
- {
- await _trackPushConfigRepository.SoftDeleteContentAsync(x => x.Id == input.Id);
- await _trackPushConfigRepository.UpdateContentAsync(x => x.Sort == x.Sort - 1,
- x => x.TrackPushConfigId == entity.TrackPushConfigId && x.Sort > entity.Sort);
-
- ts.Complete();
- }
-
- await _trackPushCacheService.SetPushContentConfigsAsync(entity.TrackPushConfigId);
-
+ trackPushConfigId = entity.TrackPushConfigId;
+ await _trackPushConfigRepository.SoftDeleteContentAsync(x => x.Id == input.Id);
+ await _trackPushConfigRepository.UpdateContentAsync(x => x.Sort == x.Sort - 1,
+ x => x.TrackPushConfigId == entity.TrackPushConfigId && x.Sort > entity.Sort);
break;
}
@@ -225,6 +219,14 @@ public class TrackPushService : ApplicationService
nameof(EditTrackPushContentInput.Options)]);
}
+ var pushConfig = await _trackPushConfigRepository.GetFirstAsync(x => x.Id == trackPushConfigId);
+ if (pushConfig != null)
+ {
+ await _trackPushCacheService.SetPushContentConfigsAsync(pushConfig.SubSystemId, pushConfig.CustomId);
+ }
+
+ ts.Complete();
+
return true;
}
@@ -247,8 +249,19 @@ public class TrackPushService : ApplicationService
if (trackPushContentEntities.Count > 0)
{
+ using var ts = TransactionScopeHelper.Create();
+
await _trackPushConfigRepository.UpdateContentRangeAsync(trackPushContentEntities);
- await _trackPushCacheService.SetPushContentConfigsAsync(trackPushContentEntities[0].TrackPushConfigId);
+
+ var pushConfig =
+ await _trackPushConfigRepository.GetFirstAsync(x =>
+ x.Id == trackPushContentEntities[0].TrackPushConfigId);
+ if (pushConfig != null)
+ {
+ await _trackPushCacheService.SetPushContentConfigsAsync(pushConfig.SubSystemId, pushConfig.CustomId);
+ }
+
+ ts.Complete();
}
return true;
From f229371520ae8a90312974dd79bef48d07128387 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Mon, 8 Apr 2024 14:20:37 +0800
Subject: [PATCH 06/22] =?UTF-8?q?fix=EF=BC=9A=E8=BD=A8=E8=BF=B9=E6=8E=A8?=
=?UTF-8?q?=E9=80=81=E5=85=B7=E8=B1=A1=E5=AE=9E=E4=BD=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Dtos/TrackPush/TrackPushInput.cs | 20 +++++++++++
.../EventHandlers/TrackPushEventHandler.cs | 33 ++++++++++---------
2 files changed, 37 insertions(+), 16 deletions(-)
create mode 100644 src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushInput.cs
diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushInput.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushInput.cs
new file mode 100644
index 00000000..7875d4da
--- /dev/null
+++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushInput.cs
@@ -0,0 +1,20 @@
+namespace SJZY.Track.Application.Contract.Dtos.TrackPush;
+
+public class TrackPushInput
+{
+ public string OrderNo { get; set; } = null!;
+
+ public List Data { get; set; } = new();
+}
+
+public class TrackItem
+{
+ public string Location { get; set; } = null!;
+ public DateTime 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; }
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
index 68ad47d4..9ebea1f6 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
@@ -1,5 +1,5 @@
using DotNetCore.CAP;
-using Newtonsoft.Json.Linq;
+using Newtonsoft.Json;
using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.InterfaceRelay.Application.Contracts;
using SJZY.Track.Application.Contract.Dtos.TrackPush;
@@ -152,33 +152,33 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
private async Task DoAddAsync(TrackPushEvent @event,
TrackPushContentConfigDto config, TrackPushRecordIndex log)
{
- var track = new
+ var track = new TrackItem
{
// 推真实的发生地和发生时间(时间是计算后的)
- location = @event.TrackPlace,
- date = @event.TrackTime.AddHours(
+ Location = @event.TrackPlace,
+ Date = @event.TrackTime.AddHours(
config.TrackTimeZone ?? @event.TrackTimeZone - @event.TrackTimeZone),
- timeZone = config.TrackTimeZone ?? @event.TrackTimeZone,
- description = config.TrackEnContentValue,
- description_cn = config.TrackContentValue,
- code = config.TrackContentCodeValue,
- status = config.TrackStatusValue,
- extra = config.ExpandFieldsValue
+ TimeZone = config.TrackTimeZone ?? @event.TrackTimeZone,
+ Description = config.TrackEnContentValue,
+ DescriptionCn = config.TrackContentValue,
+ Code = config.TrackContentCodeValue,
+ Status = config.TrackStatusValue,
+ Extra = config.ExpandFieldsValue
};
- JObject body = JObject.FromObject(new
+ var body = new TrackPushInput()
{
- orderNo = @event.OrderNo,
- data = new[] { track }
- });
+ OrderNo = @event.OrderNo,
+ };
+ body.Data.Add(track);
if (config.IsAllPush)
{
var history = await _trackPushRecordsRepository.GetLatestTrackPushRecordAsync(@event.OrderId);
if (history != default)
{
- body = JObject.Parse(history.PushContent);
- ((JArray)body["data"]!).Add(JObject.FromObject(track));
+ body = JsonConvert.DeserializeObject(history.PushContent);
+ body!.Data.Add(track);
}
}
@@ -186,6 +186,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
config.ServiceProviderCode, body);
log.PushContent = body.ToJson();
+
log.IsSuccess = res.Code == InterfaceRelayConst.SuccessCode;
log.RequestId = res.RequestId;
log.Message = res.Msg;
From 5a6b2a0f5d9535500a42466de2cab91b27efc435 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Mon, 8 Apr 2024 18:42:51 +0800
Subject: [PATCH 07/22] =?UTF-8?q?change=EF=BC=9A=E5=8F=AA=E6=9C=89?=
=?UTF-8?q?=E8=BD=A8=E8=BF=B9=E5=A2=9E=E5=88=A0=E6=94=B9=E5=81=9A=E5=B9=82?=
=?UTF-8?q?=E7=AD=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/SJZY.Track.Application/EventHandlers/CAPFilter.cs | 5 +++--
.../EventHandlers/OrderLinkAfterFillTrackHandler.cs | 6 +-----
.../Services/ProvideServices/TrackPullService.cs | 2 +-
3 files changed, 5 insertions(+), 8 deletions(-)
diff --git a/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs b/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs
index d6186324..06bdeca3 100644
--- a/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs
+++ b/src/SJZY.Track.Application/EventHandlers/CAPFilter.cs
@@ -20,8 +20,9 @@ public class CapFilter : SubscribeFilter
{
context.DeliverMessage.Headers["sjzy-receive-time"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff");
- // 轨迹刷新不做幂等
- if (context.DeliverMessage.Headers["cap-msg-name"]!.EndsWith(GlobalConst.TrackRefreshSubscribe))
+ // 轨迹增删改要做幂等
+ if (!context.DeliverMessage.Headers["cap-msg-name"]
+ .IsIn(GlobalConst.TrackUpsertSubscribe, GlobalConst.TrackDeleteSubscribe))
return Task.CompletedTask;
// 本地调试不做幂等
diff --git a/src/SJZY.Track.Application/EventHandlers/OrderLinkAfterFillTrackHandler.cs b/src/SJZY.Track.Application/EventHandlers/OrderLinkAfterFillTrackHandler.cs
index 2d8a0ef5..37daa472 100644
--- a/src/SJZY.Track.Application/EventHandlers/OrderLinkAfterFillTrackHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/OrderLinkAfterFillTrackHandler.cs
@@ -1,6 +1,5 @@
using DotNetCore.CAP;
using SJZY.Track.Application.Contract.Events;
-using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Consts;
using Volo.Abp.DependencyInjection;
@@ -11,14 +10,11 @@ public class OrderLinkAfterFillTrackHandler : ITransientDependency, ICapSubscrib
{
private readonly ITrackDetailsRepository _trackDetailsRepository;
private readonly ICapPublisher _capPublisher;
- private readonly IOrderRepository _orderRepository;
- public OrderLinkAfterFillTrackHandler(ITrackDetailsRepository trackDetailsRepository, ICapPublisher capPublisher,
- IOrderRepository orderRepository)
+ public OrderLinkAfterFillTrackHandler(ITrackDetailsRepository trackDetailsRepository, ICapPublisher capPublisher)
{
_trackDetailsRepository = trackDetailsRepository;
_capPublisher = capPublisher;
- _orderRepository = orderRepository;
}
[CapSubscribe(GlobalConst.OrderLinkAfterFillTrack)]
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs
index d7b0bc94..7cf315b2 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPullService.cs
@@ -64,7 +64,7 @@ public class TrackPullService : ApplicationService
var attach = Base64Helper.SerializeObject(group.Key);
// 批量获取轨迹
- await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync(
+ var _ = await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync(
"A012", serviceProviderCode, data, GlobalConst.TrackRefreshSubscribe, attach);
}
From c5212f53f0f7d9bc65f5a9c92ab3426a29a13816 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Mon, 8 Apr 2024 19:11:24 +0800
Subject: [PATCH 08/22] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E6=8E=A5=E5=8F=A3?=
=?UTF-8?q?=E9=80=9Av7.1.9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/SJZY.Track.Application/SJZY.Track.Application.csproj | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/SJZY.Track.Application/SJZY.Track.Application.csproj b/src/SJZY.Track.Application/SJZY.Track.Application.csproj
index 172e83f5..99912fb3 100644
--- a/src/SJZY.Track.Application/SJZY.Track.Application.csproj
+++ b/src/SJZY.Track.Application/SJZY.Track.Application.csproj
@@ -12,7 +12,7 @@
-
+
From 4fbbbd0566546255d0fc1a831aef63afe5194531 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Mon, 8 Apr 2024 19:37:35 +0800
Subject: [PATCH 09/22] =?UTF-8?q?fix=EF=BC=9A=E3=80=90=E3=80=90=E8=BD=A8?=
=?UTF-8?q?=E8=BF=B9=E8=AE=A2=E5=8D=95-=E6=8E=A8=E9=80=81=E8=AE=B0?=
=?UTF-8?q?=E5=BD=95=E3=80=91=E8=BD=A8=E8=BF=B9=E5=8F=91=E7=94=9F=E6=97=B6?=
=?UTF-8?q?=E5=8C=BA=E9=9C=80=E8=B0=83=E6=95=B4=E4=B8=BA=E6=A0=BC=E6=9E=97?=
=?UTF-8?q?=E5=B0=BC=E6=B2=BB=E6=A0=87=E5=87=86=E6=97=B6=E9=97=B4=EF=BC=88?=
=?UTF-8?q?GTM=EF=BC=89=E3=80=91https://www.tapd.cn/60863849/bugtrace/bugs?=
=?UTF-8?q?/view=3Fbug=5Fid=3D1160863849001032649?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Dtos/TrackOrder/TrackPushRecordOutput.cs | 75 +++++++++++++++++++
.../AutoMapper/OrderAutoMapperProfile.cs | 4 +
.../Services/TrackOrders/TrackOrderService.cs | 16 +++-
3 files changed, 93 insertions(+), 2 deletions(-)
create mode 100644 src/SJZY.Track.Application.Contract/Dtos/TrackOrder/TrackPushRecordOutput.cs
diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackOrder/TrackPushRecordOutput.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackOrder/TrackPushRecordOutput.cs
new file mode 100644
index 00000000..bc136ca0
--- /dev/null
+++ b/src/SJZY.Track.Application.Contract/Dtos/TrackOrder/TrackPushRecordOutput.cs
@@ -0,0 +1,75 @@
+namespace SJZY.Track.Application.Contract.Dtos.TrackOrder;
+
+public class TrackPushRecordOutput
+{
+ ///
+ /// 订单Id
+ ///
+ public int OrderId { get; set; }
+
+ ///
+ /// 接口通请求Id
+ ///
+ public Guid RequestId { get; set; }
+
+ ///
+ /// 信息
+ ///
+ public string Message { get; set; } = null!;
+
+ ///
+ /// 操作类型
+ ///
+ public string OptionType { get; set; } = null!;
+
+ ///
+ /// 轨迹状态
+ ///
+ public string TrackStatus { get; set; } = null!;
+
+ ///
+ /// 轨迹内容代码
+ ///
+ public string TrackCode { get; set; } = null!;
+
+ ///
+ /// 轨迹内容
+ ///
+ public string TrackContent { get; set; } = null!;
+
+ ///
+ /// 轨迹发生地
+ ///
+ public string TrackPlace { get; set; } = null!;
+
+ ///
+ /// 轨迹发生时间
+ ///
+ public DateTime TrackTime { get; set; }
+
+ ///
+ /// 轨迹发生时区
+ ///
+ public float TrackTimeZone { get; set; }
+
+ ///
+ /// 轨迹发生时区
+ ///
+ public string TrackGTMTimeZone { get; set; } = null!;
+
+ ///
+ /// 是否成功
+ ///
+ public bool IsSuccess { get; set; }
+
+ ///
+ /// 推送内容(json)
+ ///
+ public string PushContent { get; set; } = null!;
+
+ /// 创建人
+ public string? CreateUser { get; set; }
+
+ /// 创建时间
+ public DateTime CreateTime { get; set; }
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/AutoMapper/OrderAutoMapperProfile.cs b/src/SJZY.Track.Application/AutoMapper/OrderAutoMapperProfile.cs
index 8befae94..dbe6b8f6 100644
--- a/src/SJZY.Track.Application/AutoMapper/OrderAutoMapperProfile.cs
+++ b/src/SJZY.Track.Application/AutoMapper/OrderAutoMapperProfile.cs
@@ -1,8 +1,10 @@
using AutoMapper;
using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
+using SJZY.Track.Application.Contract.Dtos.TrackOrder;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
+using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Dtos.Order;
using SJZY.Track.Domain.Enums;
using Volo.Abp.AutoMapper;
@@ -34,6 +36,8 @@ public class OrderAutoMapperProfile : Profile
.ForMember(dest => dest.Content, opt => opt.MapFrom(m => m.TrackContent))
.ForMember(dest => dest.EnContent, opt => opt.MapFrom(m => m.TrackEnContent))
.ForMember(dest => dest.TrackTimeZoneValue, opt => opt.MapFrom(m => m.TrackTimeZone));
+
+ CreateMap(MemberList.None);
}
///
diff --git a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs
index 5f3c1179..477456cb 100644
--- a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs
+++ b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs
@@ -160,8 +160,20 @@ public class TrackOrderService : ApplicationService
///
/// 订单id
[HttpGet("GetTrackPushRecords")]
- public async Task> GetTrackPushRecordsAsync(int orderId)
+ public async Task> GetTrackPushRecordsAsync(int orderId)
{
- return await _trackPushRecordsRepository.GetTrackPushRecordsAsync(orderId);
+ var records = await _trackPushRecordsRepository.GetTrackPushRecordsAsync(orderId);
+
+ var res = ObjectMapper.Map, List>(records);
+
+ res.ForEach(x =>
+ {
+ int hours = (int)x.TrackTimeZone; // 提取整数部分作为小时
+ int minutes = (int)((x.TrackTimeZone - hours) * 60); // 将小数部分乘以 60 转换为分钟
+ x.TrackGTMTimeZone =
+ $"GTM {(x.TrackTimeZone >= 0 ? "+" : "-")}{new TimeSpan(hours, minutes, 0).ToString().RemovePostFix(":00")}";
+ });
+
+ return res;
}
}
\ No newline at end of file
From d7cfd153b259b2cc07dac80a2d93a592125a0676 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Tue, 9 Apr 2024 14:33:40 +0800
Subject: [PATCH 10/22] =?UTF-8?q?opt=EF=BC=9A=E4=BC=98=E5=8C=96null=20?=
=?UTF-8?q?=E7=BC=93=E5=AD=985s?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Services/TrackPush/TrackPushCacheService.cs | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs
index bf365f28..eb4c2504 100644
--- a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs
+++ b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs
@@ -35,9 +35,11 @@ public class TrackPushCacheService : ITrackPushCacheService, ITransientDependenc
{
// maybe is null
var data = await DoGetPushContentConfigsAsync(subSystemId, customId);
+ var ttl = 3 * 24 * 60 * 60;
+ if (data == null) ttl = 5;
// ttl 3days
await RedisHelper.Client.SetAsync(TrackPushContentKey(subSystemId, customId),
- data, 3 * 24 * 60 * 60);
+ data, ttl);
return data;
}
From 9ddba4f5619c4ca2ac3b7647e99713a6ddeecfc4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Tue, 9 Apr 2024 14:38:26 +0800
Subject: [PATCH 11/22] =?UTF-8?q?fix=EF=BC=9A=E6=89=8B=E5=8A=A8=20?=
=?UTF-8?q?=E5=85=A8=E9=87=8F=20=E6=8E=A8=E9=80=81=20=E6=A0=A1=E9=AA=8Cbug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../EventHandlers/TrackPushEventHandler.cs | 4 ++++
.../Services/TrackPush/TrackPushCacheService.cs | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
index 9ebea1f6..a9a207e9 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
@@ -70,6 +70,10 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
// 推送新增,需要根据上一次的推送 推断 本次推送 是否可行
config = await _trackPushCacheService.IsValidPushAsync(order.SubSystemId, order.CustomId,
order.LatestPushTrackCode, @event.TrackCode);
+ if (config is not { IsAutoPush: true })
+ {
+ config = null;
+ }
}
}
else
diff --git a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs
index eb4c2504..e5d413f4 100644
--- a/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs
+++ b/src/SJZY.Track.Application/Services/TrackPush/TrackPushCacheService.cs
@@ -68,7 +68,7 @@ public class TrackPushCacheService : ITrackPushCacheService, ITransientDependenc
// find swap
cache.FirstOrDefault(x => x.TrackCode == cache[idx + 1].SwapTrackCode);
- return matched != null && matched.TrackCode == trackCode && matched.IsAutoPush ? matched : default;
+ return matched != null && matched.TrackCode == trackCode ? matched : default;
}
private async Task?> DoGetPushContentConfigsAsync(int subSystemId, int customId)
From f1a48cc9a60c269add9c2f459c5988559fc4d12f Mon Sep 17 00:00:00 2001
From: moyongzhen <2534173414@qq.com>
Date: Wed, 10 Apr 2024 15:04:30 +0800
Subject: [PATCH 12/22] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=BD=A8=E8=BF=B9=20?=
=?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=8F=82=E6=95=B0=E8=B0=83=E6=95=B4=E6=88=90?=
=?UTF-8?q?UnifyResultDto?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/SJZY.Track.Application.Contract/Services/ITrackService.cs | 2 +-
.../Services/ProvideServices/TrackService.Query.cs | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/SJZY.Track.Application.Contract/Services/ITrackService.cs b/src/SJZY.Track.Application.Contract/Services/ITrackService.cs
index 31dae617..904f834d 100644
--- a/src/SJZY.Track.Application.Contract/Services/ITrackService.cs
+++ b/src/SJZY.Track.Application.Contract/Services/ITrackService.cs
@@ -31,5 +31,5 @@ public interface ITrackService : IRemoteService
///
///
///
- Task> QueryAsync(GetTrackInput input);
+ Task QueryAsync(GetTrackInput input);
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs
index 3864b604..74f4e52f 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs
@@ -17,7 +17,7 @@ public partial class TrackService
///
///
[HttpPost("Track/Query")]
- public async Task> QueryAsync(GetTrackInput input)
+ public async Task QueryAsync(GetTrackInput input)
{
if (input.OrderNos.Count > 500)
{
@@ -50,7 +50,7 @@ public partial class TrackService
await TrackDetailSort(res, input);
- return res;
+ return new UnifyResultDto(true, res, "操作成功");
}
private async Task TrackDetailSort(List list, GetTrackInput input)
From 636f189e50de0c4207efc88309c473182dda1598 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Wed, 10 Apr 2024 15:22:17 +0800
Subject: [PATCH 13/22] =?UTF-8?q?version=EF=BC=9A7.0.1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../SJZY.Track.Application.Contract.csproj | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj
index 1b129506..7f1f52a3 100644
--- a/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj
+++ b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj
@@ -5,7 +5,7 @@
net7.0
True
- 7.0.0
+ 7.0.1
True
From 8e9f5931e4916d3751a8ed0703090a6b362deabc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Wed, 10 Apr 2024 15:27:52 +0800
Subject: [PATCH 14/22] =?UTF-8?q?opt=EF=BC=9A=E8=BD=A8=E8=BF=B9=E6=8E=A8?=
=?UTF-8?q?=E9=80=81=E5=90=8E=E6=9B=B4=E6=96=B0=E8=AE=A2=E5=8D=95=E5=90=88?=
=?UTF-8?q?=E5=B9=B6=E5=88=B0=E6=8E=A8=E9=80=81=E5=A4=84=E7=90=86=E9=80=BB?=
=?UTF-8?q?=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../TrackPushAfterUpdateOrderEventHandler.cs | 50 -------------------
1 file changed, 50 deletions(-)
delete mode 100644 src/SJZY.Track.Application/EventHandlers/TrackPushAfterUpdateOrderEventHandler.cs
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackPushAfterUpdateOrderEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackPushAfterUpdateOrderEventHandler.cs
deleted file mode 100644
index a6c65fdd..00000000
--- a/src/SJZY.Track.Application/EventHandlers/TrackPushAfterUpdateOrderEventHandler.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-using DotNetCore.CAP;
-using SJZY.Track.Application.Contract.Dtos.TrackPush;
-using SJZY.Track.Domain.Aggregates.OrderAggregate;
-using SJZY.Track.Domain.Consts;
-using SJZY.Track.Domain.Enums;
-using Volo.Abp.DependencyInjection;
-
-namespace SJZY.Track.Application.EventHandlers;
-
-public class TrackPushAfterUpdateOrderEventHandler : ITransientDependency, ICapSubscribe
-{
- private readonly IOrderRepository _orderRepository;
-
- public TrackPushAfterUpdateOrderEventHandler(IOrderRepository orderRepository)
- {
- _orderRepository = orderRepository;
- }
-
- [CapSubscribe(GlobalConst.TrackPushAfterUpdateOrderSubscribe)]
- public async Task ConsumerAsync(TrackPushAfterUpdateOrderDto dto)
- {
- var order = await _orderRepository.GetFirstAsync(x => x.Id == dto.OrderId);
- if (order == default) return;
-
- /*
- * 异常:最近一条推送是失败
- */
- if (!dto.IsSuccess)
- {
- order.QuestionType = (int)TrackProblemType.Error;
- order.LatestPushError = dto.Message;
- }
- else
- {
- order.QuestionType = (int)TrackProblemType.None;
- order.LatestPushError = null;
- if (dto.OptionType == OptionType.新增)
- {
- // tips:只有新增会影响推送进度
- order.LatestPushTrackCode = dto.TrackCode;
- order.LatestPushTime = DateTime.Now;
- }
- }
-
- await _orderRepository.UpdateColumnAsync(order, x => new
- {
- x.LatestPushTrackCode, x.QuestionType, x.LatestPushError, x.LatestPushTime
- });
- }
-}
\ No newline at end of file
From 6ef5ba86cf9f0e6cdc34807bb1910d8dd9a679b5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Wed, 10 Apr 2024 19:18:18 +0800
Subject: [PATCH 15/22] =?UTF-8?q?opt=EF=BC=9A=E5=BC=80=E5=90=AFcap?=
=?UTF-8?q?=E5=A4=9A=E7=BA=BF=E7=A8=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/SJZY.Track.Application/SjzyTrackApplicationModule.cs | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
index f9f5633a..26725fbd 100644
--- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
+++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
@@ -84,7 +84,13 @@ namespace SJZY.Track.Application
configure.UserName = configuration["RabbitMQ:UserName"]!;
configure.Password = configuration["RabbitMQ:Password"]!;
configure.Port = configuration.GetValue("RabbitMQ:Port");
+ configure.BasicQosOptions =
+ new RabbitMQOptions.BasicQos(configuration.GetValue("CAP:PrefetchCount"));
});
+ options.FailedRetryInterval = configuration.GetValue("CAP:FailedRetryInterval");
+ options.FailedRetryCount = configuration.GetValue("CAP:FailedRetryCount");
+ options.UseDispatchingPerGroup = configuration.GetValue("CAP:UseDispatchingPerGroup");
+ options.ConsumerThreadCount = configuration.GetValue("CAP:ConsumerThreadCount");
// options.TopicNamePrefix = "v1";
options.SucceedMessageExpiredAfter = 6 * 60 * 60;
From 80e1db40b2a0a1d17c027bed214eb0c50577d383 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Wed, 10 Apr 2024 19:21:37 +0800
Subject: [PATCH 16/22] attach
---
src/SJZY.Track.Application/SjzyTrackApplicationModule.cs | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
index 26725fbd..c7be9ea2 100644
--- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
+++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
@@ -87,15 +87,13 @@ namespace SJZY.Track.Application
configure.BasicQosOptions =
new RabbitMQOptions.BasicQos(configuration.GetValue("CAP:PrefetchCount"));
});
+ // options.TopicNamePrefix = "v1";
options.FailedRetryInterval = configuration.GetValue("CAP:FailedRetryInterval");
options.FailedRetryCount = configuration.GetValue("CAP:FailedRetryCount");
options.UseDispatchingPerGroup = configuration.GetValue("CAP:UseDispatchingPerGroup");
options.ConsumerThreadCount = configuration.GetValue("CAP:ConsumerThreadCount");
+ options.SucceedMessageExpiredAfter = configuration.GetValue("CAP:SucceedMessageExpiredAfter");
- // options.TopicNamePrefix = "v1";
- options.SucceedMessageExpiredAfter = 6 * 60 * 60;
- options.FailedRetryInterval = 60;
- options.FailedRetryCount = 3;
options.UseDashboard(dashboardOptions =>
{
dashboardOptions.PathBase = System.Diagnostics.Debugger.IsAttached
From 8c81406e6e2a669156b8170f10f44c3007d74884 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Wed, 10 Apr 2024 19:51:07 +0800
Subject: [PATCH 17/22] =?UTF-8?q?=E6=B5=8B=E8=AF=95cap=E5=8F=82=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/SJZY.Track.Application/SjzyTrackApplicationModule.cs | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
index c7be9ea2..d479f7f8 100644
--- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
+++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
@@ -93,6 +93,8 @@ namespace SJZY.Track.Application
options.UseDispatchingPerGroup = configuration.GetValue("CAP:UseDispatchingPerGroup");
options.ConsumerThreadCount = configuration.GetValue("CAP:ConsumerThreadCount");
options.SucceedMessageExpiredAfter = configuration.GetValue("CAP:SucceedMessageExpiredAfter");
+ options.UseDispatchingPerGroup = true;
+ options.EnableConsumerPrefetch = true;
options.UseDashboard(dashboardOptions =>
{
From 93417db5229975eb5c84a1e6b3978be884dc83ac Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Wed, 10 Apr 2024 19:51:46 +0800
Subject: [PATCH 18/22] 1
---
src/SJZY.Track.Application/SjzyTrackApplicationModule.cs | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
index d479f7f8..4e8f5fff 100644
--- a/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
+++ b/src/SJZY.Track.Application/SjzyTrackApplicationModule.cs
@@ -90,7 +90,6 @@ namespace SJZY.Track.Application
// options.TopicNamePrefix = "v1";
options.FailedRetryInterval = configuration.GetValue("CAP:FailedRetryInterval");
options.FailedRetryCount = configuration.GetValue("CAP:FailedRetryCount");
- options.UseDispatchingPerGroup = configuration.GetValue("CAP:UseDispatchingPerGroup");
options.ConsumerThreadCount = configuration.GetValue("CAP:ConsumerThreadCount");
options.SucceedMessageExpiredAfter = configuration.GetValue("CAP:SucceedMessageExpiredAfter");
options.UseDispatchingPerGroup = true;
From 3aecf92eb7ddf56b1684fedfa271933dbbd8ef15 Mon Sep 17 00:00:00 2001
From: moyongzhen <2534173414@qq.com>
Date: Thu, 11 Apr 2024 15:14:01 +0800
Subject: [PATCH 19/22] =?UTF-8?q?=E8=BD=A8=E8=BF=B9=E6=8E=A8=E9=80=81?=
=?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=85=B3=E7=B3=BB=E5=AF=B9=E5=A4=96=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../QueryTrackPullMappingsInput.cs | 60 +++++++++++++++++++
.../TrackPushConfigAutoMapperProfile.cs | 22 +++++++
.../ProvideServices/TrackPushConfigService.cs | 44 ++++++++++++++
.../ITrackPushConfigRepository.cs | 1 +
.../TrackPush/QueryTrackPullMappingsInfoVO.cs | 60 +++++++++++++++++++
.../Repositories/TrackPushConfigRepository.cs | 25 ++++++++
6 files changed, 212 insertions(+)
create mode 100644 src/SJZY.Track.Application.Contract/Dtos/ProvideServices/QueryTrackPullMappingsInput.cs
create mode 100644 src/SJZY.Track.Application/AutoMapper/TrackPushConfigAutoMapperProfile.cs
create mode 100644 src/SJZY.Track.Application/Services/ProvideServices/TrackPushConfigService.cs
create mode 100644 src/SJZY.Track.Domain/Dtos/TrackPush/QueryTrackPullMappingsInfoVO.cs
diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/QueryTrackPullMappingsInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/QueryTrackPullMappingsInput.cs
new file mode 100644
index 00000000..ed0e9da4
--- /dev/null
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/QueryTrackPullMappingsInput.cs
@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SJZY.Track.Application.Contract.Dtos.ProvideServices
+{
+ ///
+ /// 查询轨迹推送映射关系入参
+ ///
+ public class QueryTrackPullMappingsInput
+ {
+ ///
+ /// 子系统id
+ ///
+ public int SubsystemsId { get; set; }
+
+ ///
+ /// 客户id
+ ///
+ public int CustomerId { get; set; }
+ }
+
+ ///
+ /// 查询轨迹推送映射关系返参项
+ ///
+ public class QueryTrackPullMappingsInfo
+ {
+ ///
+ /// 轨迹代码
+ ///
+ public string? Code { get; set; }
+
+ ///
+ /// 订单类型
+ ///
+ public int OrderType { get; set; }
+
+ ///
+ /// 服务商轨迹代码
+ ///
+ public string? ServiceCode { get; set; }
+
+ ///
+ /// 服务商轨迹状态
+ ///
+ public string? Status { get; set; }
+
+ ///
+ /// 服务商轨迹内容
+ ///
+ public string? Content { get; set; }
+
+ ///
+ /// 服务商轨迹内容英文
+ ///
+ public string? ContentEn { get; set; }
+ }
+}
diff --git a/src/SJZY.Track.Application/AutoMapper/TrackPushConfigAutoMapperProfile.cs b/src/SJZY.Track.Application/AutoMapper/TrackPushConfigAutoMapperProfile.cs
new file mode 100644
index 00000000..7cb8ccd2
--- /dev/null
+++ b/src/SJZY.Track.Application/AutoMapper/TrackPushConfigAutoMapperProfile.cs
@@ -0,0 +1,22 @@
+using AutoMapper;
+using SJZY.Track.Application.Contract.Dtos.ProvideServices;
+using SJZY.Track.Application.Contract.Dtos.TrackPush;
+using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
+using SJZY.Track.Domain.Dtos.TrackPush;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SJZY.Track.Application.AutoMapper
+{
+ public class TrackPushConfigAutoMapperProfile : Profile
+ {
+ public TrackPushConfigAutoMapperProfile()
+ {
+ CreateMap(MemberList.None);
+ CreateMap(MemberList.None);
+ }
+ }
+}
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushConfigService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushConfigService.cs
new file mode 100644
index 00000000..4a575526
--- /dev/null
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushConfigService.cs
@@ -0,0 +1,44 @@
+using SJZY.Track.Application.Contract.Dtos.ProvideServices;
+using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
+using SJZY.Track.Domain.Dtos.TrackPush;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.ObjectMapping;
+
+namespace SJZY.Track.Application.Services.ProvideServices
+{
+ ///
+ /// 轨迹推送配置服务
+ ///
+ [ApiExplorerSettings(GroupName = "提供接口")]
+ [Route("/ProviderService")]
+ public class TrackPushConfigService : ApplicationService
+ {
+ private readonly ITrackPushConfigRepository _trackPushConfigRepository;
+
+ public TrackPushConfigService(
+ ITrackPushConfigRepository trackPushConfigRepository
+ )
+ {
+ _trackPushConfigRepository = trackPushConfigRepository;
+ }
+
+ ///
+ /// 查询轨迹推送配置关系
+ ///
+ ///
+ ///
+ [HttpPost("Track/QueryTrackPullMappings")]
+ public async Task QueryTrackPullMappingsAsync(QueryTrackPullMappingsInput input)
+ {
+ var vo = ObjectMapper.Map(input);
+ var result = await _trackPushConfigRepository.QueryTrackPullMappingsAsync(vo);
+ var output = ObjectMapper.Map, List>(result);
+
+ return new UnifyResultDto(true, output, "操作成功");
+ }
+ }
+}
diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushConfigRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushConfigRepository.cs
index 641fb386..3983cd7c 100644
--- a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushConfigRepository.cs
+++ b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushConfigRepository.cs
@@ -35,4 +35,5 @@ public interface ITrackPushConfigRepository : IBasicRepository UpdateContentAsync(Expression> columns,
Expression> whereExpression);
+ Task> QueryTrackPullMappingsAsync(QueryTrackPullMappingsInputVO input);
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Domain/Dtos/TrackPush/QueryTrackPullMappingsInfoVO.cs b/src/SJZY.Track.Domain/Dtos/TrackPush/QueryTrackPullMappingsInfoVO.cs
new file mode 100644
index 00000000..26f7b4a8
--- /dev/null
+++ b/src/SJZY.Track.Domain/Dtos/TrackPush/QueryTrackPullMappingsInfoVO.cs
@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SJZY.Track.Domain.Dtos.TrackPush
+{
+ ///
+ /// 查询轨迹推送关系入参
+ ///
+ public class QueryTrackPullMappingsInfoVO
+ {
+ ///
+ /// 轨迹代码
+ ///
+ public string? Code { get; set; }
+
+ ///
+ /// 订单类型
+ ///
+ public int OrderType { get; set; }
+
+ ///
+ /// 服务商轨迹代码
+ ///
+ public string? ServiceCode { get; set; }
+
+ ///
+ /// 服务商轨迹状态
+ ///
+ public string? Status { get; set; }
+
+ ///
+ /// 服务商轨迹内容
+ ///
+ public string? Content { get; set; }
+
+ ///
+ /// 服务商轨迹内容英文
+ ///
+ public string? ContentEn { get; set; }
+ }
+
+ ///
+ /// 查询轨迹推送关系返参项
+ ///
+ public class QueryTrackPullMappingsInputVO
+ {
+ ///
+ /// 子系统id
+ ///
+ public int SubsystemsId { get; set; }
+
+ ///
+ /// 客户id
+ ///
+ public int CustomerId { get; set; }
+ }
+}
diff --git a/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs
index 43bbae70..c7e21820 100644
--- a/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/TrackPushConfigRepository.cs
@@ -166,4 +166,29 @@ public class TrackPushConfigRepository : BasicRepository,
return await Context.Updateable().SetColumns(columns).Where(whereExpression)
.ExecuteCommandHasChangeAsync();
}
+
+ ///
+ /// 查询轨迹推送关系
+ ///
+ ///
+ ///
+ public async Task> QueryTrackPullMappingsAsync(QueryTrackPullMappingsInputVO input)
+ {
+ var result = await Context.Queryable().LeftJoin((a, b) => a.Id == b.TrackPushConfigId && !b.IsDeleted)
+ .LeftJoin((a, b, c) => b.TrackContentId == c.Id && !c.IsDeleted)
+ .Where((a, b, c) => !a.IsDeleted)
+ .Where((a, b, c) => a.SubSystemId == input.SubsystemsId && a.CustomId == input.CustomerId)
+ .Select((a, b, c) => new QueryTrackPullMappingsInfoVO
+ {
+ Code = c.Code,
+ OrderType = b.OrderNoType,
+ ServiceCode = b.TrackContentCodeValue,
+ Status = b.TrackStatusValue,
+ Content = b.TrackContentValue,
+ ContentEn = b.TrackEnContentValue
+ })
+ .ToListAsync();
+
+ return result;
+ }
}
\ No newline at end of file
From c2c1e24dcf5089fbeb0a6829efc5efbe540f8997 Mon Sep 17 00:00:00 2001
From: moyongzhen <2534173414@qq.com>
Date: Thu, 11 Apr 2024 15:21:38 +0800
Subject: [PATCH 20/22] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AF=B9=E5=A4=96?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Services/ITrackPushConfigService.cs | 20 +++++++++++++++++++
.../ProvideServices/TrackPushConfigService.cs | 3 ++-
2 files changed, 22 insertions(+), 1 deletion(-)
create mode 100644 src/SJZY.Track.Application.Contract/Services/ITrackPushConfigService.cs
diff --git a/src/SJZY.Track.Application.Contract/Services/ITrackPushConfigService.cs b/src/SJZY.Track.Application.Contract/Services/ITrackPushConfigService.cs
new file mode 100644
index 00000000..e191f6bb
--- /dev/null
+++ b/src/SJZY.Track.Application.Contract/Services/ITrackPushConfigService.cs
@@ -0,0 +1,20 @@
+using SJZY.Track.Application.Contract.Dtos.ProvideServices;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp;
+
+namespace SJZY.Track.Application.Contract.Services
+{
+ public interface ITrackPushConfigService : IRemoteService
+ {
+ ///
+ /// 查询轨迹推送配置关系
+ ///
+ ///
+ ///
+ Task QueryTrackPullMappingsAsync(QueryTrackPullMappingsInput input);
+ }
+}
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushConfigService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushConfigService.cs
index 4a575526..04a8ea53 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushConfigService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushConfigService.cs
@@ -1,4 +1,5 @@
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
+using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Dtos.TrackPush;
using System;
@@ -15,7 +16,7 @@ namespace SJZY.Track.Application.Services.ProvideServices
///
[ApiExplorerSettings(GroupName = "提供接口")]
[Route("/ProviderService")]
- public class TrackPushConfigService : ApplicationService
+ public class TrackPushConfigService : ApplicationService, ITrackPushConfigService
{
private readonly ITrackPushConfigRepository _trackPushConfigRepository;
From 0408ab8e136d65b1715767e7b8ee144ba3d5bf08 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Thu, 11 Apr 2024 15:31:35 +0800
Subject: [PATCH 21/22] =?UTF-8?q?version=EF=BC=9A7.0.2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../SJZY.Track.Application.Contract.csproj | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj
index 7f1f52a3..7a7f7902 100644
--- a/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj
+++ b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj
@@ -5,7 +5,7 @@
net7.0
True
- 7.0.1
+ 7.0.2
True
From 2bedb127b6087b8e0077a608c34916a180e8a613 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Fri, 12 Apr 2024 21:34:15 +0800
Subject: [PATCH 22/22] =?UTF-8?q?opt=EF=BC=9A=E9=87=8D=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Events/OrderIdentifier.cs | 8 +
.../Events/OrderLinkAfterFillTrackEvent.cs | 28 --
.../TrackChangeAfterUpdateOrderEvent.cs | 2 +-
.../Events/TrackDeleteEvent.cs | 19 +-
.../Events/TrackRefreshStruct.cs | 25 ++
.../Events/TrackUpsertEvent.cs | 46 +---
.../Events/TrackUpsertForRefreshEvent.cs | 94 +++++++
.../OrderLinkAfterFillTrackHandler.cs | 48 ----
...TrackChangeAfterUpdateOrderEventHandler.cs | 85 +++---
.../EventHandlers/TrackDeleteEventHandler.cs | 71 ++---
.../TrackInsertForNotMappedEventHandler.cs | 2 +-
.../EventHandlers/TrackPushEventHandler.cs | 9 +-
.../EventHandlers/TrackRefreshEventHandler.cs | 44 ++-
.../EventHandlers/TrackUpsertEventHandler.cs | 257 ++++++++++--------
.../ProvideServices/OrderService.Link.cs | 52 ++--
.../Services/ProvideServices/OrderService.cs | 4 +-
.../Services/ProvideServices/TrackService.cs | 30 +-
.../OrderAggregate/IOrderRepository.cs | 2 +-
.../ITrackDetailsRepository.cs | 22 +-
.../Consts/GlobalConst.MQ.cs | 5 +
src/SJZY.Track.Repository/EsExtensions.cs | 22 ++
.../Repositories/OrderRepository.cs | 6 +-
.../Repositories/TrackDetailsRepository.cs | 121 +++++----
23 files changed, 568 insertions(+), 434 deletions(-)
create mode 100644 src/SJZY.Track.Application.Contract/Events/OrderIdentifier.cs
delete mode 100644 src/SJZY.Track.Application.Contract/Events/OrderLinkAfterFillTrackEvent.cs
create mode 100644 src/SJZY.Track.Application.Contract/Events/TrackRefreshStruct.cs
create mode 100644 src/SJZY.Track.Application.Contract/Events/TrackUpsertForRefreshEvent.cs
delete mode 100644 src/SJZY.Track.Application/EventHandlers/OrderLinkAfterFillTrackHandler.cs
create mode 100644 src/SJZY.Track.Repository/EsExtensions.cs
diff --git a/src/SJZY.Track.Application.Contract/Events/OrderIdentifier.cs b/src/SJZY.Track.Application.Contract/Events/OrderIdentifier.cs
new file mode 100644
index 00000000..49e79b04
--- /dev/null
+++ b/src/SJZY.Track.Application.Contract/Events/OrderIdentifier.cs
@@ -0,0 +1,8 @@
+namespace SJZY.Track.Application.Contract.Events;
+
+public struct OrderIdentifier
+{
+ public int OrderId { get; set; }
+ public string OrderNo { get; set; }
+ public int OrderType { get; set; }
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application.Contract/Events/OrderLinkAfterFillTrackEvent.cs b/src/SJZY.Track.Application.Contract/Events/OrderLinkAfterFillTrackEvent.cs
deleted file mode 100644
index f4caa481..00000000
--- a/src/SJZY.Track.Application.Contract/Events/OrderLinkAfterFillTrackEvent.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-namespace SJZY.Track.Application.Contract.Events;
-
-public class OrderLinkAfterFillTrackEvent
-{
- ///
- /// 关联订单id
- ///
- public int OrderId { get; set; }
-
- ///
- /// 子系统id
- ///
- public int SubSystemId { get; set; }
-
- ///
- /// 关联订单
- ///
- public List LinkedOrders { get; set; } = null!;
-}
-
-public struct LinkedOrder
-{
- public int SubSystemId { get; set; }
-
- public int OrderId { get; set; }
- public string OrderNo { get; set; }
- public int OrderType { get; set; }
-}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs
index c779a647..544c98b1 100644
--- a/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs
+++ b/src/SJZY.Track.Application.Contract/Events/TrackChangeAfterUpdateOrderEvent.cs
@@ -5,7 +5,7 @@ public class TrackChangeAfterUpdateOrderEvent
///
/// 订单Id
///
- public int OrderId { get; set; }
+ public int[] OrderIds { get; set; }
///
/// 是否删除引起的更新
diff --git a/src/SJZY.Track.Application.Contract/Events/TrackDeleteEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackDeleteEvent.cs
index d5286726..73b4d0ac 100644
--- a/src/SJZY.Track.Application.Contract/Events/TrackDeleteEvent.cs
+++ b/src/SJZY.Track.Application.Contract/Events/TrackDeleteEvent.cs
@@ -2,25 +2,20 @@
public class TrackDeleteEvent
{
- ///
- /// 订单id
- ///
- public int OrderId { get; set; }
-
- ///
- /// 轨迹代码
- ///
- public List TrackCodes { get; set; } = null!;
-
///
/// 子系统id
///
public int SubSystemId { get; set; }
///
- /// 上游子系统id
+ /// 订单ids
///
- public int UpSubSystemId { get; set; }
+ public int[] OrderIds { get; set; } = null!;
+
+ ///
+ /// 轨迹代码
+ ///
+ public List TrackCodes { get; set; } = null!;
///
/// 操作人
diff --git a/src/SJZY.Track.Application.Contract/Events/TrackRefreshStruct.cs b/src/SJZY.Track.Application.Contract/Events/TrackRefreshStruct.cs
new file mode 100644
index 00000000..62bcf4a2
--- /dev/null
+++ b/src/SJZY.Track.Application.Contract/Events/TrackRefreshStruct.cs
@@ -0,0 +1,25 @@
+namespace SJZY.Track.Application.Contract.Events;
+
+public struct TrackRefreshStruct
+{
+ ///
+ /// 服务商
+ ///
+ public string? ServiceProviderName { get; set; }
+
+ ///
+ /// 原轨迹内容
+ ///
+ public string? OriginTrackContent { get; set; }
+
+ ///
+ /// 原轨迹报文
+ ///
+ public string? OriginTrackData { get; set; }
+
+ ///
+ /// 表示订单是否完成(只由轨迹刷新配置决定)
+ /// tips:能够使得IsCompleted为true的点,全局只有一个:轨迹刷新
+ ///
+ public bool IsCompleted { get; set; }
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs
index 53e0d856..3b449bbf 100644
--- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs
+++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs
@@ -3,50 +3,14 @@
public class TrackUpsertEvent
{
///
- /// 订单id
- ///
- public int OrderId { get; set; }
-
- ///
- /// 订单类型
- ///
- public int OrderType { get; set; }
-
- ///
- /// 订单号
- ///
- public string OrderNo { get; set; } = null!;
-
- ///
- /// 服务商
- ///
- public string? ServiceProviderName { get; set; }
-
- ///
- /// 原轨迹内容
- ///
- public string? OriginTrackContent { get; set; }
-
- ///
- /// 原轨迹报文
- ///
- public string? OriginTrackData { get; set; }
-
- ///
- /// 表示订单是否完成(只由轨迹刷新配置决定)
- /// tips:能够使得IsCompleted为true的点,全局只有一个:轨迹刷新
- ///
- public bool IsCompleted { get; set; }
-
- ///
- /// 子系统id
+ /// 子系统id(操作的订单都是相同子系统下的)
///
public int SubSystemId { get; set; }
///
- /// 上游子系统id(0表示事件起点)
+ /// 订单id
///
- public int UpSubSystemId { get; set; }
+ public OrderIdentifier[] OrderIdentifiers { get; set; } = null!;
///
/// 操作人(null则默认系统)
@@ -54,7 +18,7 @@ public class TrackUpsertEvent
public string? OperationMan { get; set; }
///
- /// true新增,false更新,null表示新增/更新
+ /// true新增,false更新,null表示刷新
///
public bool? IsAdd { get; set; }
@@ -82,4 +46,6 @@ public class TrackUpsertEvent
/// 已经处理过的订单
///
public List Visited { get; set; } = new();
+
+ public TrackRefreshStruct TrackRefreshData { get; set; }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertForRefreshEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertForRefreshEvent.cs
new file mode 100644
index 00000000..7069903a
--- /dev/null
+++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertForRefreshEvent.cs
@@ -0,0 +1,94 @@
+namespace SJZY.Track.Application.Contract.Events;
+
+public class TrackUpsertForRefreshEvent
+{
+ ///
+ /// 子系统id(操作的订单都是相同子系统下的)
+ ///
+ public int SubSystemId { get; set; }
+
+ ///
+ /// 订单
+ ///
+ public OrderIdentifier OrderIdentifiers { get; set; }
+
+ ///
+ /// 服务商
+ ///
+ public string? ServiceProviderName { get; set; }
+
+ ///
+ /// 原轨迹内容
+ ///
+ public string? OriginTrackContent { get; set; }
+
+ ///
+ /// 原轨迹报文
+ ///
+ public string? OriginTrackData { get; set; }
+
+ ///
+ /// 表示订单是否完成(只由轨迹刷新配置决定)
+ /// tips:能够使得IsCompleted为true的点,全局只有一个:轨迹刷新
+ ///
+ public bool IsCompleted { get; set; }
+
+ ///
+ /// 轨迹内容代码
+ ///
+ public string TrackCode { get; set; } = null!;
+
+ ///
+ /// 轨迹发生地
+ ///
+ public string TrackPlace { get; set; } = null!;
+
+ ///
+ /// 轨迹发生时间
+ ///
+ public DateTime TrackTime { get; set; }
+
+ ///
+ /// 轨迹发生时区
+ ///
+ public float TrackTimeZone { get; set; }
+}
+
+public class TrackHandledDto
+{
+ ///
+ /// 原轨迹内容
+ ///
+ public string? OriginTrackContent { get; set; }
+
+ ///
+ /// 原轨迹报文
+ ///
+ public string? OriginTrackData { get; set; }
+
+ ///
+ /// 表示订单是否完成(只由轨迹刷新配置决定)
+ /// tips:能够使得IsCompleted为true的点,全局只有一个:轨迹刷新
+ ///
+ public bool? IsCompleted { get; set; }
+
+ ///
+ /// 轨迹内容代码
+ ///
+ public string? TrackCode { get; set; }
+
+ ///
+ /// 轨迹发生地
+ ///
+ public string? TrackPlace { get; set; }
+
+ ///
+ /// 轨迹发生时间
+ ///
+ public DateTime? TrackTime { get; set; }
+
+ ///
+ /// 轨迹发生时区
+ ///
+ public float? TrackTimeZone { get; set; }
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/EventHandlers/OrderLinkAfterFillTrackHandler.cs b/src/SJZY.Track.Application/EventHandlers/OrderLinkAfterFillTrackHandler.cs
deleted file mode 100644
index 37daa472..00000000
--- a/src/SJZY.Track.Application/EventHandlers/OrderLinkAfterFillTrackHandler.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using DotNetCore.CAP;
-using SJZY.Track.Application.Contract.Events;
-using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
-using SJZY.Track.Domain.Consts;
-using Volo.Abp.DependencyInjection;
-
-namespace SJZY.Track.Application.EventHandlers;
-
-public class OrderLinkAfterFillTrackHandler : ITransientDependency, ICapSubscribe
-{
- private readonly ITrackDetailsRepository _trackDetailsRepository;
- private readonly ICapPublisher _capPublisher;
-
- public OrderLinkAfterFillTrackHandler(ITrackDetailsRepository trackDetailsRepository, ICapPublisher capPublisher)
- {
- _trackDetailsRepository = trackDetailsRepository;
- _capPublisher = capPublisher;
- }
-
- [CapSubscribe(GlobalConst.OrderLinkAfterFillTrack)]
- public async Task ConsumerAsync(OrderLinkAfterFillTrackEvent @event)
- {
- var tracks = await _trackDetailsRepository.GetListAsync(@event.OrderId);
-
-
- foreach (var order in @event.LinkedOrders)
- {
- // 补轨迹
- foreach (var track in tracks)
- {
- var fillTrackEvent = new TrackUpsertEvent
- {
- OrderId = order.OrderId,
- OrderType = order.OrderType,
- OrderNo = order.OrderNo,
- TrackCode = track.TrackCode,
- TrackPlace = track.TrackPlace,
- TrackTime = track.TrackTime,
- TrackTimeZone = track.TrackTimeZone,
- SubSystemId = order.SubSystemId,
- UpSubSystemId = @event.SubSystemId,
- };
-
- await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, fillTrackEvent);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs
index a738576e..25e74d44 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackChangeAfterUpdateOrderEventHandler.cs
@@ -22,53 +22,70 @@ public class TrackChangeAfterUpdateOrderEventHandler : ITransientDependency, ICa
[CapSubscribe(GlobalConst.TrackChangeAfterUpdateOrderSubscribe)]
public async Task ConsumerAsync(TrackChangeAfterUpdateOrderEvent @event)
{
- var order = await _orderRepository.GetFirstAsync(x => x.Id == @event.OrderId);
- if (order == default) return;
+ var orders = await _orderRepository.GetListAsync(x => @event.OrderIds.Contains(x.Id),
+ x => new OrderEntity
+ {
+ Id = x.Id,
+ IsCompleted = x.IsCompleted,
+ LatestTrackContent = x.LatestTrackContent,
+ LatestTrackEnContent = x.LatestTrackEnContent,
+ LatestTrackPlace = x.LatestTrackPlace,
+ LatestTrackTime = x.LatestTrackTime,
+ LatestTrackTimeZone = x.LatestTrackTimeZone,
+ });
+ if (orders.Count == 0) return;
+
+ // todo:delete可能发生回退,直接去es查最新轨迹,但是可能es还没有刷盘,导致回退失效,可以考虑加个定时任务弥补
if (@event.IsDelete)
{
- var track = await _trackDetailsRepository.GetLatestAsync(@event.OrderId);
-
- // 删除全部轨迹导致的重置行为
- if (track == default)
+ foreach (var order in orders)
{
- if (order.LatestTrackTime == null) return;
+ var tracks = await _trackDetailsRepository.GetListAsync(@event.OrderIds);
- // tips:订单是支持从已完成态到未完成态的
- order.ResetTrackInfo();
+ var track = tracks.Where(x => x.OrderId == order.Id).MaxBy(x => x.TrackTime);
+ // 删除全部轨迹导致的重置行为
+ if (track == default)
+ {
+ if (order.LatestTrackTime == null) return;
- await _orderRepository.UpdateAsync(order);
-
- return;
+ // tips:订单是支持从已完成态到未完成态的
+ order.ResetTrackInfo();
+ }
+ else
+ {
+ // 删除引发的回退更新
+ order.IsCompleted = @event.IsCompleted;
+ order.LatestTrackContent = track.TrackContent;
+ order.LatestTrackEnContent = track.TrackEnContent;
+ order.LatestTrackPlace = track.TrackPlace;
+ order.LatestTrackTime = track.TrackTime;
+ order.LatestTrackTimeZone = track.TrackTimeZone;
+ }
}
-
- // 删除引发的回退更新
- order.IsCompleted = @event.IsCompleted;
- order.LatestTrackContent = track.TrackContent;
- order.LatestTrackEnContent = track.TrackEnContent;
- order.LatestTrackPlace = track.TrackPlace;
- order.LatestTrackTime = track.TrackTime;
- order.LatestTrackTimeZone = track.TrackTimeZone;
}
- else
+ else // upsert可以直接计算
{
- if (order.LatestTrackTime != null &&
- @event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone)) <
- order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0)))
+ foreach (var order in orders)
{
- return;
- }
+ if (order.LatestTrackTime != null &&
+ @event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone)) <
+ order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0)))
+ {
+ continue;
+ }
- // upsert引发的更新
- order.IsCompleted = @event.IsCompleted;
- order.LatestTrackContent = @event.TrackContent;
- order.LatestTrackEnContent = @event.TrackEnContent;
- order.LatestTrackPlace = @event.TrackPlace;
- order.LatestTrackTime = @event.TrackTime;
- order.LatestTrackTimeZone = @event.TrackTimeZone;
+ // upsert引发的更新
+ order.IsCompleted = @event.IsCompleted;
+ order.LatestTrackContent = @event.TrackContent;
+ order.LatestTrackEnContent = @event.TrackEnContent;
+ order.LatestTrackPlace = @event.TrackPlace;
+ order.LatestTrackTime = @event.TrackTime;
+ order.LatestTrackTimeZone = @event.TrackTimeZone;
+ }
}
- await _orderRepository.UpdateColumnAsync(order, x => new
+ await _orderRepository.UpdateRangeAsync(orders, x => new
{
x.IsCompleted, x.LatestTrackContent, x.LatestTrackEnContent, x.LatestTrackPlace, x.LatestTrackTime,
x.LatestTrackTimeZone
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs
index 28b38520..ea6698fb 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs
@@ -29,34 +29,52 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
[CapSubscribe(GlobalConst.TrackDeleteSubscribe, Group = GlobalConst.TrackDeleteSubscribe)]
public async Task ConsumerAsync(TrackDeleteEvent @event)
{
- if (@event.Visited.Contains(@event.OrderId))
+ var dup = @event.Visited.Intersect(@event.OrderIds).ToArray();
+ if (dup.Any())
{
- LogHelper.Error($"删除轨迹订单时,发现循环依赖:{@event.Visited.JoinAsString(",")}");
+ LogHelper.Error($"删除轨迹订单时,发现循环依赖:{dup.JoinAsString(",")}");
return;
}
- // 不同子系统需要做内容映射
- if (@event.UpSubSystemId != 0 && @event.UpSubSystemId != @event.SubSystemId)
- {
- var mapCodes = await _provideQueries
- .MapTrackCodesAsync(@event.UpSubSystemId, @event.SubSystemId, @event.TrackCodes.ToArray());
-
- if (mapCodes.Count == 0)
- {
- //throw new BusinessException(message: "订单跨子系统,未配置内容映射,请联系管理员");
- return;
- }
-
- @event.TrackCodes = mapCodes;
- }
-
await DeleteTrackAsync(@event);
+
+ // 根据订单关联关系异步向下刷(异步)
+ var linkedOrders = await _orderRepository.GetLinkedOrdersAsync(@event.OrderIds);
+ foreach (var orderId in @event.OrderIds)
+ {
+ foreach (var group in linkedOrders.Where(x => x.OrderId == orderId)
+ .GroupBy(x => x.SubSystemId))
+ {
+ var nextEvent = @event.DeepCopy();
+ nextEvent.Visited.AddRange(@event.OrderIds);
+ nextEvent.TrackCodes = @event.TrackCodes;
+ nextEvent.SubSystemId = group.Key;
+
+
+ // 不同子系统需要做内容映射
+ if (@event.SubSystemId != nextEvent.SubSystemId)
+ {
+ var mapCodes = await _provideQueries
+ .MapTrackCodesAsync(@event.SubSystemId, nextEvent.SubSystemId, @event.TrackCodes.ToArray());
+
+ if (mapCodes.Count == 0)
+ {
+ //throw new BusinessException(message: "订单跨子系统,未配置内容映射,请联系管理员");
+ return;
+ }
+
+ nextEvent.TrackCodes = mapCodes;
+ }
+
+ await _capPublisher.PublishAsync(GlobalConst.TrackDeleteSubscribe, nextEvent);
+ }
+ }
}
private async Task DeleteTrackAsync(TrackDeleteEvent @event)
{
- // 删除轨迹
- var isOk = await _trackDetailsRepository.DeleteTrackAsync(@event.OrderId, @event.TrackCodes);
+ // 删除轨迹(删的是同子系统下的单,所以code是统一的)
+ var isOk = await _trackDetailsRepository.DeleteTrackAsync(@event.OrderIds, @event.TrackCodes);
if (isOk)
{
@@ -65,22 +83,9 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
GlobalConst.TrackChangeAfterUpdateOrderSubscribe,
new TrackChangeAfterUpdateOrderEvent
{
- OrderId = @event.OrderId,
+ OrderIds = @event.OrderIds,
IsDelete = true
});
}
-
- // 根据订单关联关系异步向下刷
- var linkedOrders = await _orderRepository.GetLinkedOrdersAsync(@event.OrderId);
- foreach (var linkedOrder in linkedOrders)
- {
- var nextEvent = @event.DeepCopy();
- nextEvent.Visited.Add(@event.OrderId);
- nextEvent.TrackCodes = @event.TrackCodes;
- nextEvent.SubSystemId = linkedOrder.SubSystemId;
- nextEvent.UpSubSystemId = @event.SubSystemId;
-
- await _capPublisher.PublishAsync(GlobalConst.TrackDeleteSubscribe, nextEvent);
- }
}
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackInsertForNotMappedEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackInsertForNotMappedEventHandler.cs
index f135b558..a0df5114 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackInsertForNotMappedEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackInsertForNotMappedEventHandler.cs
@@ -45,6 +45,6 @@ public class TrackInsertForNotMappedEventHandler : ITransientDependency, ICapSub
track.TrackEnContent = GlobalConst.EmptyString;
track.ZeroTrackTime = track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone));
- await _trackDetailsRepository.UpsertAsync(track);
+ await _trackDetailsRepository.UpdateAsync(track);
}
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
index a9a207e9..65e60991 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs
@@ -37,7 +37,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
var order = await _orderRepository.GetFirstAsync(x =>
x.Id == @event.OrderId, x => new
{
- x.SubSystemId, x.LatestPushTrackCode, x.QuestionType, x.CustomId
+ x.SubSystemId, x.LatestPushTrackCode, x.QuestionType, x.CustomId, x.OrderType
});
if (order == null) return;
@@ -70,10 +70,9 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
// 推送新增,需要根据上一次的推送 推断 本次推送 是否可行
config = await _trackPushCacheService.IsValidPushAsync(order.SubSystemId, order.CustomId,
order.LatestPushTrackCode, @event.TrackCode);
- if (config is not { IsAutoPush: true })
- {
- config = null;
- }
+ if (config == null) return;
+ if (!config.IsAutoPush) return;
+ if (config.OrderType != order.OrderType) return;
}
}
else
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs
index 61431b30..4c132e26 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs
@@ -9,6 +9,7 @@ using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Application.Helpers;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
+using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Enums;
using Volo.Abp.DependencyInjection;
@@ -20,13 +21,16 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
private readonly IOrderRepository _orderRepository;
private readonly ICapPublisher _capPublisher;
private readonly ITrackPullCacheService _trackPullCacheService;
+ private readonly ITrackDetailsRepository _trackDetailsRepository;
public TrackRefreshEventHandler(IOrderRepository orderRepository,
- ICapPublisher capPublisher, ITrackPullCacheService trackPullCacheService)
+ ICapPublisher capPublisher, ITrackPullCacheService trackPullCacheService,
+ ITrackDetailsRepository trackDetailsRepository)
{
_orderRepository = orderRepository;
_capPublisher = capPublisher;
_trackPullCacheService = trackPullCacheService;
+ _trackDetailsRepository = trackDetailsRepository;
}
[CapSubscribe(GlobalConst.TrackRefreshSubscribe, Group = GlobalConst.TrackRefreshSubscribe)]
@@ -89,15 +93,19 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
await HandleTrackAsync(item, paramWithContentConfig, context);
}
}
- else if (orderToken is JObject)
+ else if (trackToken is JObject)
{
- await HandleTrackAsync(orderToken, paramWithContentConfig, context);
+ await HandleTrackAsync(trackToken, paramWithContentConfig, context);
}
}
private async Task HandleTrackAsync(JToken trackToken, TrackPullParamWithContentConfigDto paramWithContentConfig,
TrackRefreshContext context)
{
+ var originTrackData = JsonConvert.SerializeObject(trackToken);
+ // 如果已经存在一模一样的报文了说明处理过了,直接return
+ if (await _trackDetailsRepository.AnyAsync(context.OrderId, originTrackData)) return;
+
var paramConfig = paramWithContentConfig.ParamConfig;
var contentConfigs = paramWithContentConfig.ContentConfigs;
TrackPullContentConfigDto? matchedContentConfig = null;
@@ -214,23 +222,31 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
// 新增/更新轨迹
var trackUpsertEvent = new TrackUpsertEvent
{
- OrderId = context.OrderId,
- OrderType = context.OrderType,
- OrderNo = context.OrderNo,
- ServiceProviderName = context.ServiceProviderName,
- OriginTrackData = JsonConvert.SerializeObject(trackToken),
- IsCompleted = matchedContentConfig.IsCompleted,
+ OrderIdentifiers = new[]
+ {
+ new OrderIdentifier
+ {
+ OrderId = context.OrderId,
+ OrderNo = context.OrderNo,
+ OrderType = context.OrderType
+ }
+ },
+ TrackRefreshData = new TrackRefreshStruct
+ {
+ ServiceProviderName = context.ServiceProviderName,
+ OriginTrackData = originTrackData,
+ IsCompleted = matchedContentConfig.IsCompleted,
+ OriginTrackContent = paramConfig.TrackContentName != null
+ ? trackToken[paramConfig.TrackContentName]?.Value()
+ : GlobalConst.EmptyString
+ },
SubSystemId = context.SubSystemId,
TrackCode = matchedContentConfig.TrackContentCode,
TrackPlace = trackPlace ?? GlobalConst.EmptyString,
TrackTime = trackTime ?? DateTime.Now,
TrackTimeZone = trackTimeZone ?? matchedContentConfig.TrackTimeZoneValue ?? 8
};
- if (paramConfig.TrackContentName != null)
- {
- trackUpsertEvent.OriginTrackContent = trackToken[paramConfig.TrackContentName]?.Value();
- }
- await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, trackUpsertEvent);
+ await _capPublisher.PublishAsync(GlobalConst.TrackUpsertForRefreshSubscribe, trackUpsertEvent);
}
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs
index 105ef588..81e954fe 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs
@@ -26,145 +26,166 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
_trackDetailsRepository = trackDetailsRepository;
}
+ [CapSubscribe(GlobalConst.TrackUpsertSubscribe, Group = GlobalConst.TrackUpsertSubscribe)]
[CapSubscribe(GlobalConst.TrackUpsertSubscribe, Group = GlobalConst.TrackUpsertSubscribe)]
public async Task ConsumerAsync(TrackUpsertEvent @event)
{
- if (@event.Visited.Contains(@event.OrderId))
+ var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray();
+
+ var dup = @event.Visited.Intersect(orderIds).ToArray();
+ if (dup.Any())
{
- LogHelper.Error($"轨迹订单循环依赖预警:{@event.Visited.JoinAsString(",")}");
+ LogHelper.Error($"删除轨迹订单时,发现循环依赖:{dup.JoinAsString(",")}");
return;
}
- // 不同子系统需要做内容映射
- if (@event.UpSubSystemId != 0 && @event.UpSubSystemId != @event.SubSystemId)
- {
- var mapCode = (await _provideQueries
- .MapTrackCodesAsync(@event.UpSubSystemId, @event.SubSystemId, @event.TrackCode))
- .FirstOrDefault();
+ await HandleTrackAsync(@event);
- if (mapCode == default)
+ // 根据订单关联关系异步向下刷(异步)
+ var linkedOrders = await _orderRepository.GetLinkedOrdersAsync(orderIds);
+ foreach (var order in @event.OrderIdentifiers)
+ {
+ // 理论上小包在这不会分组
+ foreach (var group in linkedOrders.Where(x => x.OrderId == order.OrderId)
+ .GroupBy(x => x.SubSystemId))
{
- // 跨子系统没做映射的轨迹不处理
- return;
+ var nextEvent = @event.DeepCopy();
+ nextEvent.Visited.AddRange(orderIds);
+ nextEvent.SubSystemId = group.Key;
+ nextEvent.OrderIdentifiers = group.Select(x => new OrderIdentifier
+ {
+ OrderId = x.OrderId,
+ OrderNo = x.OrderNo,
+ OrderType = x.OrderType
+ }).ToArray();
+ nextEvent.TrackRefreshData = new TrackRefreshStruct
+ {
+ ServiceProviderName = @event.TrackRefreshData.ServiceProviderName,
+ OriginTrackContent = @event.TrackRefreshData.OriginTrackContent,
+ OriginTrackData = @event.TrackRefreshData.OriginTrackData,
+ // tips:一定要重置为false,父级订单的完成不会使得关联订单完成,关联单也必须由刷新来完成或手动设置完成!!
+ IsCompleted = false
+ };
+
+ // 不同子系统需要做内容映射
+ if (@event.SubSystemId != nextEvent.SubSystemId)
+ {
+ var mapCode = (await _provideQueries
+ .MapTrackCodesAsync(@event.SubSystemId, nextEvent.SubSystemId, @event.TrackCode))
+ .FirstOrDefault();
+
+ if (mapCode == default)
+ {
+ // 跨子系统没做映射的轨迹不处理
+ return;
+ }
+
+ @event.TrackCode = mapCode;
+ }
+
+ await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, nextEvent);
+ }
+ }
+ }
+
+ private async Task HandleTrackAsync(TrackUpsertEvent @event)
+ {
+ var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray();
+ var tracks = await _trackDetailsRepository.GetListAsync(orderIds, @event.TrackCode);
+
+ var insertTracks = new List();
+
+ foreach (var order in @event.OrderIdentifiers)
+ {
+ var track = tracks.FirstOrDefault(x => x.OrderId == order.OrderId);
+
+ if (@event.IsAdd != null)
+ {
+ if (track == null && !@event.IsAdd!.Value) return; // 不存在不让改
+ if (track != null && @event.IsAdd!.Value) return; // 存在不让创建
}
- @event.TrackCode = mapCode;
- }
-
- var track = await _trackDetailsRepository.GetFirstOrDefaultAsync(@event.OrderId, @event.TrackCode);
-
- if (@event.IsAdd != null)
- {
- if (track == null && !@event.IsAdd!.Value) return; // 不存在不让改
- if (track != null && @event.IsAdd!.Value) return; // 存在不让创建
- }
-
- // step1、upsert es轨迹
- track = await UpsertTrackAsync(track, @event);
-
- if (track == null) return; // 模板没配该轨迹代码,不再继续
-
- // step2、触发轨迹推送事件(异步)
- var trackPushEvent = new TrackPushEvent
- {
- OptionType = track.Id.IsNullOrWhiteSpace() ? OptionType.新增 : OptionType.修改,
- OrderId = track.OrderId,
- OrderNo = track.OrderNo,
- TrackStatus = track.TrackStatus,
- TrackCode = track.TrackCode,
- TrackContent = track.TrackContent,
- TrackPlace = track.TrackPlace,
- TrackTime = track.TrackTime,
- TrackTimeZone = track.TrackTimeZone,
- };
-
- await _capPublisher.PublishAsync(GlobalConst.TrackPushSubscribe, trackPushEvent);
-
- // step3、触发订单主表更新事件(异步)
- await _capPublisher.PublishAsync(GlobalConst.TrackChangeAfterUpdateOrderSubscribe,
- new TrackChangeAfterUpdateOrderEvent
+ // step1、upsert es轨迹
+ if (track == default)
{
+ track = new TrackDetailsIndex
+ {
+ IndexName = $"{GlobalConst.TrackIndex}-{DateTime.Now:yyyy.MM.dd}",
+ OrderId = order.OrderId,
+ OrderNo = order.OrderNo,
+ OrderType = order.OrderType,
+ TrackCode = @event.TrackCode,
+ TrackPlace = @event.TrackPlace,
+ TrackTime = @event.TrackTime,
+ TrackTimeZone = @event.TrackTimeZone,
+ ServiceProviderName = @event.TrackRefreshData.ServiceProviderName,
+ OriginTrackContent = @event.TrackRefreshData.OriginTrackContent,
+ OriginTrackData = @event.TrackRefreshData.OriginTrackData,
+ IsCanDelete = false,
+ CreateUser = @event.OperationMan ?? GlobalConst.SystemUser,
+ CreateTime = DateTime.Now
+ };
+
+ //todo:可以优化?
+ // 根据轨迹code在订单模板内容中寻找匹配的
+ var trackContent = await _provideQueries.MatchTrackContentAsync(order.OrderId, @event.TrackCode);
+ if (trackContent == default)
+ {
+ // 订单所绑定的模板,没有一条内容可以匹配发生的轨迹
+ continue;
+ }
+
+ track.TrackStatus = trackContent.Status;
+ track.TrackCode = trackContent.TrackCode;
+ track.TrackContent = trackContent.Content;
+ track.TrackEnContent = trackContent.EnContent;
+ track.IsCanDelete = trackContent.IsCanDelete;
+ track.ZeroTrackTime = track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone));
+
+ insertTracks.Add(track);
+ }
+ else
+ {
+ track.TrackPlace = @event.TrackPlace;
+ track.TrackTime = @event.TrackTime;
+ track.TrackTimeZone = @event.TrackTimeZone;
+ track.UpdateUser = @event.OperationMan ?? GlobalConst.SystemUser;
+ track.UpdateTime = DateTime.Now;
+
+ await _trackDetailsRepository.UpdateAsync(track);
+ }
+
+ // step2、触发轨迹推送事件(异步)
+ var trackPushEvent = new TrackPushEvent
+ {
+ OptionType = track.Id.IsNullOrWhiteSpace() ? OptionType.新增 : OptionType.修改,
OrderId = track.OrderId,
- IsCompleted = @event.IsCompleted,
+ OrderNo = track.OrderNo,
+ TrackStatus = track.TrackStatus,
TrackCode = track.TrackCode,
TrackContent = track.TrackContent,
- TrackEnContent = track.TrackEnContent,
TrackPlace = track.TrackPlace,
TrackTime = track.TrackTime,
- TrackTimeZone = track.TrackTimeZone
- });
-
- // step4、根据订单关联关系异步向下刷(异步)
- var linkedOrders = await _orderRepository.GetLinkedOrdersAsync(@event.OrderId);
- foreach (var linkedOrder in linkedOrders)
- {
- var nextEvent = @event.DeepCopy();
- nextEvent.Visited.Add(@event.OrderId);
- // tips:一定要重置为false,父级订单的完成不会使得关联订单完成,关联单也必须由刷新来完成或手动设置完成!!
- nextEvent.IsCompleted = false; // 能够使得轨迹IsCompleted为true的点,全局只有一个:轨迹刷新
- nextEvent.OrderId = linkedOrder.OrderId;
- nextEvent.OrderType = linkedOrder.OrderType;
- nextEvent.OrderNo = linkedOrder.OrderNo;
- nextEvent.SubSystemId = linkedOrder.SubSystemId;
- nextEvent.UpSubSystemId = @event.SubSystemId;
- await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, nextEvent);
- }
- }
-
- ///
- /// 不存在则新增轨迹,存在则更新
- ///
- ///
- ///
- private async Task UpsertTrackAsync(TrackDetailsIndex? track, TrackUpsertEvent @event)
- {
- if (track == default)
- {
- track = new TrackDetailsIndex
- {
- IndexName = $"{GlobalConst.TrackIndex}-{DateTime.Now:yyyy.MM.dd}",
- OrderId = @event.OrderId,
- OrderNo = @event.OrderNo,
- OrderType = @event.OrderType,
- TrackCode = @event.TrackCode,
- TrackPlace = @event.TrackPlace,
- TrackTime = @event.TrackTime,
- TrackTimeZone = @event.TrackTimeZone,
- ServiceProviderName = @event.ServiceProviderName,
- OriginTrackContent = @event.OriginTrackContent,
- OriginTrackData = @event.OriginTrackData,
- IsCanDelete = false,
- CreateUser = @event.OperationMan ?? GlobalConst.SystemUser,
- CreateTime = DateTime.Now
+ TrackTimeZone = track.TrackTimeZone,
};
- //todo:可以优化
- // 根据轨迹code在订单模板内容中寻找匹配的
- var trackContent = await _provideQueries.MatchTrackContentAsync(@event.OrderId, @event.TrackCode);
- if (trackContent == default)
- {
- // 订单所绑定的模板,没有一条内容可以匹配发生的轨迹
- return null;
- }
+ await _capPublisher.PublishAsync(GlobalConst.TrackPushSubscribe, trackPushEvent);
- track.TrackStatus = trackContent.Status;
- track.TrackCode = trackContent.TrackCode;
- track.TrackContent = trackContent.Content;
- track.TrackEnContent = trackContent.EnContent;
- track.IsCanDelete = trackContent.IsCanDelete;
- track.ZeroTrackTime = track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone));
- }
- else
- {
- track.TrackPlace = @event.TrackPlace;
- track.TrackTime = @event.TrackTime;
- track.TrackTimeZone = @event.TrackTimeZone;
- track.UpdateUser = @event.OperationMan ?? GlobalConst.SystemUser;
- track.UpdateTime = DateTime.Now;
+ // step3、触发订单主表更新事件(异步)
+ await _capPublisher.PublishAsync(GlobalConst.TrackChangeAfterUpdateOrderSubscribe,
+ new TrackChangeAfterUpdateOrderEvent
+ {
+ OrderIds = new[] { track.OrderId },
+ IsCompleted = @event.TrackRefreshData.IsCompleted,
+ TrackCode = track.TrackCode,
+ TrackContent = track.TrackContent,
+ TrackEnContent = track.TrackEnContent,
+ TrackPlace = track.TrackPlace,
+ TrackTime = track.TrackTime,
+ TrackTimeZone = track.TrackTimeZone
+ });
}
- await _trackDetailsRepository.UpsertAsync(track);
-
- return track;
+ await _trackDetailsRepository.AddManyAsync(insertTracks);
}
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs
index 5eca209c..f37ff3b5 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs
@@ -2,6 +2,7 @@
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
+using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Queries;
@@ -14,6 +15,7 @@ public partial class OrderService
{
private readonly IBasicQuery _orderLinkQuery;
private readonly ICapPublisher _capPublisher;
+ private readonly ITrackDetailsRepository _trackDetailsRepository;
///
/// 关联、解除关联订单
@@ -52,23 +54,12 @@ public partial class OrderService
if (!input.IsLink) return await UnLinkOrderAsync(input);
// 关联订单
- var linkedOrders = await DoLinkOrderAsync(input, order.Id);
-
- // 补轨迹
- if (linkedOrders.Count > 0)
- {
- await _capPublisher.PublishAsync(GlobalConst.OrderLinkAfterFillTrack, new OrderLinkAfterFillTrackEvent
- {
- OrderId = order.Id,
- SubSystemId = order.SubSystemId,
- LinkedOrders = linkedOrders,
- });
- }
+ await DoLinkOrderAsync(input, order.Id);
return new UnifyResultDto(true, true);
}
- private async Task> DoLinkOrderAsync(LinkOrderInput input, int orderId)
+ private async Task DoLinkOrderAsync(LinkOrderInput input, int orderId)
{
// 获取已关联的订单
var linkOrderNos = await _orderLinkQuery.GetListAsync(x =>
@@ -81,9 +72,9 @@ public partial class OrderService
// 过滤掉不存在的订单
var canLinkOrders = await _orderRepository.GetListAsync(x =>
x.OrderType == input.LinkOrderType && noLinkOrderNos.Contains(x.OrderNo),
- x => new { x.Id, x.OrderNo, x.SubSystemId });
+ x => new { x.Id, x.OrderNo, x.OrderType, x.SubSystemId });
- if (canLinkOrders.Count == 0) return new List();
+ if (canLinkOrders.Count == 0) return;
await _orderRepository.LinkOrderAsync(canLinkOrders.Select(x => new OrderLinkEntity
{
@@ -95,13 +86,32 @@ public partial class OrderService
LinkOrderType = input.LinkOrderType
}).ToList());
- return canLinkOrders.Select(x => new LinkedOrder
+ var tracks = await _trackDetailsRepository.GetListAsync(orderId);
+
+ // 补轨迹
+ foreach (var group in canLinkOrders.GroupBy(x => x.SubSystemId))
{
- SubSystemId = x.SubSystemId,
- OrderId = x.Id,
- OrderNo = x.OrderNo,
- OrderType = input.LinkOrderType
- }).ToList();
+ foreach (var track in tracks)
+ {
+ var fillTrackEvent = new TrackUpsertEvent
+ {
+ SubSystemId = group.Key,
+ OrderIdentifiers = group.Select(x => new OrderIdentifier
+ {
+ OrderId = x.Id,
+ OrderNo = x.OrderNo,
+ OrderType = x.OrderType
+ }).ToArray(),
+ TrackCode = track.TrackCode,
+ TrackPlace = track.TrackPlace,
+ TrackTime = track.TrackTime,
+ TrackTimeZone = track.TrackTimeZone,
+ IsAdd = true
+ };
+
+ await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, fillTrackEvent);
+ }
+ }
}
private async Task UnLinkOrderAsync(LinkOrderInput input)
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
index d1086bf7..4a72f258 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
@@ -2,6 +2,7 @@
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
+using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Queries;
using SJZY.UserCenter.HttpApi.Services;
@@ -17,9 +18,10 @@ public partial class OrderService : ApplicationService, IOrderService
private readonly IOrderRepository _orderRepository;
public OrderService(IOrderRepository orderRepository, IBasicQuery orderLinkQuery,
- ICapPublisher capPublisher)
+ ICapPublisher capPublisher, ITrackDetailsRepository trackDetailsRepository)
{
_orderRepository = orderRepository;
+ _trackDetailsRepository = trackDetailsRepository;
_capPublisher = capPublisher;
_orderLinkQuery = orderLinkQuery;
}
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
index 1d081ead..1d20b169 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
@@ -43,7 +43,7 @@ public partial class TrackService : ApplicationService, ITrackService
var order = await _orderRepository.GetFirstAsync(x =>
x.OrderType == input.OrderType && x.OrderNo == input.OrderNo, x => new
{
- x.Id, x.SubSystemId
+ x.Id, x.SubSystemId, x.OrderNo, x.OrderType
});
if (order == default)
{
@@ -52,8 +52,16 @@ public partial class TrackService : ApplicationService, ITrackService
// 新增/更新轨迹
var @event = ObjectMapper.Map(input);
- @event.OrderId = order.Id;
@event.SubSystemId = order.SubSystemId;
+ @event.OrderIdentifiers = new[]
+ {
+ new OrderIdentifier
+ {
+ OrderId = order.Id,
+ OrderNo = order.OrderNo,
+ OrderType = order.OrderType
+ }
+ };
@event.OperationMan = CurrentUserRequest.CurrentUser.Name;
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, @event);
return new UnifyResultDto(true, true);
@@ -80,25 +88,29 @@ public partial class TrackService : ApplicationService, ITrackService
x.Id, x.OrderNo, x.SubSystemId
});
- foreach (var order in orders)
+ foreach (var group in orders.GroupBy(x => x.SubSystemId))
{
// 新增/更新轨迹
var @event = new TrackUpsertEvent
{
+ SubSystemId = group.Key,
+ OrderIdentifiers = group.Select(order => new OrderIdentifier
+ {
+ OrderId = order.Id,
+ OrderNo = order.OrderNo,
+ OrderType = input.OrderType
+ }).ToArray(),
IsAdd = input.IsAdd,
TrackCode = input.TrackCode,
TrackPlace = input.TrackPlace,
TrackTime = input.TrackTime!.Value,
TrackTimeZone = input.TrackTimeZone!.Value,
- OrderType = input.OrderType,
- OrderNo = order.OrderNo,
- OrderId = order.Id,
- SubSystemId = order.SubSystemId,
OperationMan = CurrentUserRequest.CurrentUser.Name
};
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, @event);
}
+
return new UnifyResultDto(true, true);
}
@@ -132,7 +144,7 @@ public partial class TrackService : ApplicationService, ITrackService
// 删除轨迹
var @event = new TrackDeleteEvent
{
- OrderId = order.Id,
+ OrderIds = new[] { order.Id },
TrackCodes = codes.Select(x => x.TrackCode).ToList(),
SubSystemId = order.SubSystemId,
OperationMan = CurrentUserRequest.CurrentUser.Name
@@ -173,7 +185,7 @@ public partial class TrackService : ApplicationService, ITrackService
{
var @event = new TrackDeleteEvent
{
- OrderId = group.Key,
+ OrderIds = group.Select(x => x.OrderId).ToArray(),
TrackCodes = codes.Select(x => x.TrackCode).ToList(),
SubSystemId = orders.First(x => x.Id == group.Key).SubSystemId,
OperationMan = CurrentUserRequest.CurrentUser.Name
diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs
index 7eaf030f..78cdd5df 100644
--- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs
+++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs
@@ -38,7 +38,7 @@ public interface IOrderRepository : IBasicRepository
///
///
///
- Task> GetLinkedOrdersAsync(int orderId);
+ Task> GetLinkedOrdersAsync(int[] orderId);
///
/// 关联订单
diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs
index 628acc1f..d32ed593 100644
--- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs
+++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs
@@ -4,11 +4,18 @@ namespace SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
public interface ITrackDetailsRepository
{
- Task GetFirstOrDefaultAsync(int orderId, string trackCode);
+ Task> GetListAsync(int[] orderIds, string trackCode);
+
+ Task> GetListAsync(int[] orderIds);
Task AnyAsync(int orderId, DateTime trackTime);
- Task UpsertAsync(TrackDetailsIndex index);
+ Task AnyAsync(int orderId, string originTrackData);
+
+ Task UpdateAsync(TrackDetailsIndex index);
+
+ Task AddManyAsync(List index);
+
Task> GetListAsync(int orderType, List orderNos);
@@ -20,15 +27,8 @@ public interface ITrackDetailsRepository
///
/// 删除轨迹
///
- ///
+ ///
///
///
- Task DeleteTrackAsync(int orderId, List trackCodes);
-
- ///
- /// 获取最近一条发生的轨迹
- ///
- ///
- ///
- Task GetLatestAsync(int orderId);
+ Task DeleteTrackAsync(int[] orderIds, List trackCodes);
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs b/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs
index 35179262..b855eb70 100644
--- a/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs
+++ b/src/SJZY.Track.Domain/Consts/GlobalConst.MQ.cs
@@ -7,6 +7,11 @@ public partial class GlobalConst
///
public const string TrackUpsertSubscribe = "SJZY.Track.TrackUpsert";
+ ///
+ /// 轨迹刷新引发的新增/更新 专用
+ ///
+ public const string TrackUpsertForRefreshSubscribe = "SJZY.Track.TrackUpsertForRefresh";
+
///
/// 无法映射的轨迹新增
///
diff --git a/src/SJZY.Track.Repository/EsExtensions.cs b/src/SJZY.Track.Repository/EsExtensions.cs
new file mode 100644
index 00000000..b926f93b
--- /dev/null
+++ b/src/SJZY.Track.Repository/EsExtensions.cs
@@ -0,0 +1,22 @@
+using Nest;
+using SJZY.Expand.ElasticSearch;
+
+namespace SJZY.Track.Repository;
+
+public static class EsExtensions
+{
+ public static List ToIdList(this ISearchResponse response) where T : IdBaseIndex
+ {
+ var dtos = new List();
+
+ foreach (var hit in response.Hits)
+ {
+ var dto = hit.Source;
+ dto.Id = hit.Id;
+
+ dtos.Add(dto);
+ }
+
+ return dtos;
+ }
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
index b2f48a68..5e78fc5f 100644
--- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
@@ -67,16 +67,16 @@ AND `a`.`IsDeleted` = 0 AND `b`.`IsDeleted` = 0;");
#region 订单关联
- public async Task> GetLinkedOrdersAsync(int orderId)
+ public async Task> GetLinkedOrdersAsync(int[] orderIds)
{
return await Context.Queryable()
.LeftJoin((a, b) => a.LinkOrderId == b.Id)
- .Where(a => a.OrderId == orderId)
+ .Where(a => orderIds.Contains(a.OrderId))
.Select((a, b) => new LinkedOrderVO
{
OrderId = b.Id,
- OrderType = b.OrderType,
OrderNo = b.OrderNo,
+ OrderType = b.OrderType,
SubSystemId = b.SubSystemId
})
.ToListAsync();
diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
index 03b3c7c9..b692a3f2 100644
--- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
@@ -2,6 +2,7 @@ using Nest;
using SJZY.Expand.ABP.Core.Logger;
using SJZY.Expand.ElasticSearch.Services;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
+using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Dtos.TrackDetails;
namespace SJZY.Track.Repository.Repositories;
@@ -13,29 +14,50 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract GetFirstOrDefaultAsync(int orderId, string trackCode)
+ public async Task> GetListAsync(int[] orderIds, string trackCode)
{
var r = await Context.SearchAsync(s => s
.Source()
.Query(q =>
- q.Term(f => f.OrderId, orderId)
+ q.Terms(t => t
+ .Field(f => f.OrderId)
+ .Terms(orderIds))
&& q.Term(f => f.TrackCode.Suffix("keyword"), trackCode)
+ && q.Term(f => f.ServiceProviderName.Suffix("keyword"), GlobalConst.EmptyString)
)
);
- var res = r.Documents.FirstOrDefault();
- if (res != default && r.Hits.FirstOrDefault() != default)
- {
- res.Id = r.Hits.FirstOrDefault()!.Id;
- }
+ return r.ToIdList();
+ }
- return res;
+ public async Task> GetListAsync(int[] orderIds)
+ {
+ var data = await Context.SearchAsync(x => x
+ .Source(s => s.Includes(fd => fd
+ .Field(f => f.TrackEnContent)
+ .Field(f => f.TrackContent)
+ .Field(f => f.TrackPlace)
+ .Field(f => f.TrackTime)
+ .Field(f => f.TrackTimeZone)
+ .Field(f => f.OrderId)
+ ))
+ .Query(q =>
+ q.Terms(t => t
+ .Field(f => f.OrderId)
+ .Terms(orderIds))
+ && q.Term(f => f.ServiceProviderName.Suffix("keyword"), GlobalConst.EmptyString)
+ )
+ .Sort(s => s.Field(f => f.TrackTime, SortOrder.Descending))
+ .Size(1)
+ );
+
+ return data.Documents.ToList();
}
public async Task AnyAsync(int orderId, DateTime trackTime)
{
var r = await Context.SearchAsync(x => x
- .Source(s => s.Includes(fd => fd.Field(f => f.Id)))
+ .Source(s => s.Includes(fd => fd.Field(f => f.TrackCode)))
.Query(q =>
q.Term(f => f.OrderId, orderId)
&& q.Term(f => f.TrackTime, trackTime)
@@ -45,33 +67,44 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract 0;
}
- public async Task UpsertAsync(TrackDetailsIndex index)
+ public async Task AnyAsync(int orderId, string originTrackData)
{
- if (index.Id.IsNullOrWhiteSpace())
- {
- // 按天写入es
- var r = await Context.IndexAsync(index, request => request
- .Index(index.IndexName)
- //.Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见
- );
+ var r = await Context.SearchAsync(x => x
+ .Source(s => s.Includes(fd => fd.Field(f => f.TrackCode)))
+ .Query(q =>
+ q.Term(f => f.OrderId, orderId)
+ && q.Term(f => f.OriginTrackData.Suffix("keyword"), originTrackData)
+ )
+ );
- if (!r.IsValid)
- {
- LogHelper.Error($"轨迹新增失败,原因:{r.DebugInformation}。");
- }
+ return r.Hits.Count > 0;
+ }
+
+
+ public async Task UpdateAsync(TrackDetailsIndex track)
+ {
+ var r = await Context.UpdateAsync(track.Id, u => u
+ .Index(track.IndexName)
+ .Doc(track)
+ //.Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见
+ );
+
+ if (!r.IsValid)
+ {
+ LogHelper.Error($"轨迹更新失败,原因:{r.DebugInformation}。");
}
- else
- {
- var r = await Context.UpdateAsync(index.Id, u => u
- .Index(index.IndexName)
- .Doc(index)
- //.Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见
- );
+ }
- if (!r.IsValid)
- {
- LogHelper.Error($"轨迹更新失败,原因:{r.DebugInformation}。");
- }
+ public async Task AddManyAsync(List tracks)
+ {
+ if (!tracks.Any()) return;
+
+ // 按天写入es
+ var r = await Context.IndexManyAsync(tracks, tracks.First().IndexName);
+
+ if (!r.IsValid)
+ {
+ LogHelper.Error($"{tracks.Count}条轨迹新增失败,原因:{r.DebugInformation}。");
}
}
@@ -140,32 +173,12 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract GetLatestAsync(int orderId)
- {
- var data = await Context.SearchAsync(x => x
- .Source(s => s.Includes(fd => fd
- .Field(f => f.TrackEnContent)
- .Field(f => f.TrackContent)
- .Field(f => f.TrackPlace)
- .Field(f => f.TrackTime)
- .Field(f => f.TrackTimeZone)
- ))
- .Query(q =>
- q.Term(f => f.OrderId, orderId)
- )
- .Sort(s => s.Field(f => f.TrackTime, SortOrder.Descending))
- .Size(1)
- );
-
- return data.Documents.FirstOrDefault();
- }
-
- public async Task DeleteTrackAsync(int orderId, List trackCodes)
+ public async Task DeleteTrackAsync(int[] orderIds, List trackCodes)
{
var r = await Context.DeleteByQueryAsync(x => x
.Query(
q =>
- q.Term(t => t.OrderId, orderId)
+ q.Terms(t => t.Field(f => f.OrderId).Terms(orderIds))
&& q.Term(t => t.IsCanDelete, true)
&& q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes)))
//.Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见