diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs
index b36217c3..e2249ae1 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs
@@ -1,5 +1,8 @@
namespace SJZY.Track.Application.Contract.Dtos.ProvideServices;
+///
+/// 支持模板,传入时区补正,按轨迹发生时间升序降序
+///
public class GetTrackInput : OrderNosInfo
{
private float? _timeZone;
@@ -8,16 +11,28 @@ public class GetTrackInput : OrderNosInfo
/// 时区 +8 +8.25 -8.5 -9
/// 不传默认+8
///
- public float? TimeZone
- {
- get => _timeZone ?? 8;
- set => _timeZone = value;
- }
+ public float? TimeZone { get => _timeZone ?? 8; set => _timeZone = value; }
///
/// 排序方式,默认按轨迹发生时间降序
///
public SortMethod? SortMethod { get; set; }
+
+ ///
+ /// 轨迹模板代码
+ ///
+ public string? TrackTemplateCode { get; set; }
+}
+
+///
+/// 不支持模板,无时区补正,按轨迹发生时间升序降序
+///
+public class GetTrackInputV2 : OrderNosInfo
+{
+ ///
+ /// 排序方式,默认按轨迹发生时间降序
+ ///
+ public SortMethod? SortMethod { get; set; }
}
public enum SortMethod
@@ -25,10 +40,20 @@ public enum SortMethod
///
/// 按轨迹发生时间排序
///
- ByTrackTime,
+ ByTrackTime = 0,
///
/// 按轨迹发生时间降序
///
- ByTrackTimeDesc,
+ ByTrackTimeDesc = 1,
+
+ ///
+ /// 模板排序+轨迹发生时间
+ ///
+ ByTemplateAndTrackTime = 2,
+
+ ///
+ /// 模板排序+轨迹发生时间
+ ///
+ ByTemplateAndTrackTimeDesc = 3
}
diff --git a/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs b/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs
index 1b2fdbd9..0f79f83d 100644
--- a/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs
+++ b/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs
@@ -4,10 +4,10 @@ using Volo.Abp.DependencyInjection;
namespace SJZY.Track.Application.Contract.Services;
-public interface IBroadcastingService :ITransientDependency
+public interface IBroadcastingService : ITransientDependency
{
///
- /// 轨迹变更广播
+ /// 轨迹变更广播(新增/修改)
///
///
///
@@ -15,7 +15,15 @@ public interface IBroadcastingService :ITransientDependency
void TrackChangePublicTopicAsync(TrackUpsertEvent eto, string subSystemCode, string trackStatusCode);
///
- /// 轨迹推送完成广播
+ /// 轨迹变更广播(删除)
+ ///
+ ///
+ ///
+ ///
+ void TrackChangePublicTopicAsync(TrackDeleteEvent eto, OrderIdentifier[] orderIdentifiers, string trackCode, string trackStatusCode, string subSystemCode);
+
+ ///
+ /// 轨迹推送完成广播(推送完成回调)
///
///
void TrackPushCompletedPublicTopicAsync(TrackPushRecordDto log);
diff --git a/src/SJZY.Track.Application.Contract/Services/ProvideServices/ITrackService.cs b/src/SJZY.Track.Application.Contract/Services/ProvideServices/ITrackService.cs
index c5fd0430..0921c05d 100644
--- a/src/SJZY.Track.Application.Contract/Services/ProvideServices/ITrackService.cs
+++ b/src/SJZY.Track.Application.Contract/Services/ProvideServices/ITrackService.cs
@@ -35,8 +35,17 @@ public interface ITrackService : IRemoteService
///
/// 根据订单号获取轨迹
+ /// 支持模板,传入时区补正,按轨迹发生时间升序降序
///
///
///
Task>> QueryAsync(GetTrackInput input);
+
+ ///
+ /// 根据订单号获取轨迹
+ /// 不支持模板,无时区补正,可按轨迹发生时间升序降序
+ ///
+ ///
+ ///
+ Task>> QueryV2Async(GetTrackInputV2 input);
}
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
index 7d3c37bc..7568071b 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
@@ -1,14 +1,11 @@
-using System.Text;
-using BSI.Stack.Rabbit;
using DotNetCore.CAP;
using SJZY.Expand.ABP.Core.Logger;
using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
using SJZY.Track.Application.Contract.Events;
+using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
-using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
-using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
using SJZY.Track.Domain.Enums;
using SJZY.Track.Domain.Queries;
using Volo.Abp.DependencyInjection;
@@ -21,27 +18,21 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private readonly IOrderOperationRecordEsRepository _orderOperationRecordEsRepository;
private readonly IOrderRepository _orderRepository;
private readonly IProvideQueries _provideQueries;
- private readonly RabbitClientBus _rabbitClientBus;
- private readonly ITrackContentRepository _trackContentRepository;
private readonly ITrackDetailsEsRepository _trackDetailsEsRepository;
- private readonly ITrackStatusRepository _trackStatusRepository;
+ private readonly IBroadcastingService _broadcastingService;
public TrackDeleteEventHandler(IProvideQueries provideQueries,
IOrderRepository orderRepository, ICapPublisher capPublisher,
ITrackDetailsEsRepository trackDetailsEsRepository,
- RabbitClientBus rabbitClientBus,
- ITrackStatusRepository trackStatusRepository,
- ITrackContentRepository trackContentRepository,
- IOrderOperationRecordEsRepository orderOperationRecordEsRepository)
+ IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
+ IBroadcastingService broadcastingService)
{
_provideQueries = provideQueries;
_orderRepository = orderRepository;
_capPublisher = capPublisher;
_trackDetailsEsRepository = trackDetailsEsRepository;
- _rabbitClientBus = rabbitClientBus;
- _trackStatusRepository = trackStatusRepository;
- _trackContentRepository = trackContentRepository;
_orderOperationRecordEsRepository = orderOperationRecordEsRepository;
+ _broadcastingService = broadcastingService;
}
[CapSubscribe(GlobalConst.TrackDeleteSubscribe, Group = GlobalConst.TrackDeleteSubscribe)]
@@ -51,8 +42,9 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
var trackList = await DeleteTrackAsync(@event);
- //发布事件
- await PublicTrackTopicAsync(@event, trackList);
+ //当轨迹删除,根据轨迹标记/状态上IsToMq选择进行广播
+ if (trackList.Count != 0)
+ await PublicTrackTopicAsync(@event, trackList);
// 根据订单关联关系异步向下刷(异步)
await DownByOrderLink(@event);
@@ -128,48 +120,41 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private async Task PublicTrackTopicAsync(TrackDeleteEvent eto, List trackList)
{
- // // todo: review 这里查库太多了
- if (trackList == null)
- return;
+ var systemIds = trackList.Select(x => x.SubSystemId).Distinct().ToArray();
+ var trackCodes = trackList.Select(x => x.TrackCode).Distinct().ToArray();
- var statusList = await _trackStatusRepository.GetListAsync(m => m.SubSystemId == eto.SubSystemId);
- if (statusList == null)
- return;
+ //从轨迹内容中查询出标记是否需要mq广播
+ var contentList = await _provideQueries.GetTrackContentsAsync(systemIds, trackCodes);
+ var toMqDict = contentList
+ .ToDictionary(x => x.SubSystemId + x.TrackContentCode, y => y.IsToMq);
- var contentList = await _trackContentRepository.GetTrackContentBySyetemIdAsync(eto.SubSystemId);
- if (contentList == null)
- return;
+ //选出需要广播的轨迹,并按code和订单号分组
+ var trackGroup = trackList
+ .Where(x => toMqDict[x.SubSystemId + x.TrackCode])
+ .GroupBy(m => new
+ {
+ m.TrackCode,
+ m.OrderNo
+ })
+ .ToList();
+ if (trackGroup.Count == 0) return;
- foreach (var dataItem in trackList.GroupBy(m => new
- {
- m.TrackCode,
- m.OrderNo
- }))
+ foreach (var dataItem in trackGroup)
{
var item = dataItem.First();
- var status = statusList.FirstOrDefault(m => m.Code == item.TrackStatusCode);
- if (status == null || !status.IsToMq)
- continue;
+ var content = contentList.First(m => m.TrackContentCode == item.TrackCode);
- var content = contentList.FirstOrDefault(m => m.TrackContentCode == item.TrackCode);
-
- var data = new TrackChangeEto()
- {
- OrderIdentifiers = dataItem.Select(m => new OrderIdentifier
+ _broadcastingService.TrackChangePublicTopicAsync(eto,
+ dataItem.Select(m => new OrderIdentifier
{
OrderId = m.OrderId,
OrderNo = m.OrderNo,
OrderType = m.OrderType
}).ToArray(),
- TrackStatusCode = item.TrackStatusCode,
- TrackCode = item.TrackCode,
- OperationMan = eto.OperationMan,
- SubSystemId = eto.SubSystemId,
- Option = 2
- };
-
- _rabbitClientBus.Publish(GlobalConst.TrackChangeExchange, $"TrackChange.{content.SubSystemCode}",
- Encoding.UTF8.GetBytes(data.ToJson()));
+ item.TrackCode,
+ item.TrackStatusCode,
+ content.SubSystemCode
+ );
}
}
diff --git a/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
index 1fc0f24a..9dfb2eb6 100644
--- a/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
+++ b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
@@ -65,6 +65,22 @@ public class BroadcastingService : IBroadcastingService
Encoding.UTF8.GetBytes(data.ToJson()));
}
+ public void TrackChangePublicTopicAsync(TrackDeleteEvent eto, OrderIdentifier[] orderIdentifiers, string trackCode, string trackStatusCode, string subSystemCode)
+ {
+ var data = new TrackChangeEto
+ {
+ OrderIdentifiers = orderIdentifiers,
+ TrackStatusCode = trackStatusCode,
+ TrackCode = trackCode,
+ OperationMan = eto.OperationMan,
+ SubSystemId = eto.SubSystemId,
+ Option = 2
+ };
+
+ _rabbitClientBus.Publish(GlobalConst.TrackChangeExchange, $"TrackChange.{subSystemCode}",
+ Encoding.UTF8.GetBytes(data.ToJson()));
+ }
+
///
/// 轨迹推送完成广播
///
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs
index 6e36fae2..7e4376cf 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs
@@ -1,5 +1,7 @@
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
+using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
+using SJZY.Track.Domain.Dtos.TrackTemplate;
namespace SJZY.Track.Application.Services.ProvideServices;
@@ -9,6 +11,7 @@ namespace SJZY.Track.Application.Services.ProvideServices;
public partial class TrackService
{
private readonly ITrackDetailsEsRepository _trackDetailsEsRepository;
+ private readonly ITrackTemplateRepository _trackTemplateRepository;
///
/// 查询轨迹
@@ -63,13 +66,13 @@ public partial class TrackService
? null
: input.TimeZone ?? 8,
IsDisplay = trackContentDic.TryGetValue(x.TrackCode, out var isExternal) && isExternal,
- IsVisibility = x.IsVisibility,
+ IsVisibility = x.IsVisibility,
Source = x.Source,
Remarks = x.Remarks,
Files = x.Files?.Select(y => new FileItemDto
{
- FileName = y.FileName,
- OssKey = y.OssKey
+ FileName = y.FileName,
+ OssKey = y.OssKey
}).ToList(),
TrackPlaceCity = x.TrackPlaceCity,
TrackPlaceCityId = x.TrackPlaceCityId,
@@ -87,25 +90,240 @@ public partial class TrackService
}
// 排序
- TracksOrdered(res, input);
+ var sortedList = await TracksOrdered(res, input);
- return new UnifyResultDto>(true, res, "操作成功");
+ return new UnifyResultDto>(true, sortedList, "操作成功");
}
- private void TracksOrdered(List list, GetTrackInput input)
+
+ [HttpPost("Track/QueryV2")]
+ public async Task>> QueryV2Async(GetTrackInputV2 input)
+ {
+ var res = new List();
+ input.OrderNos = input.OrderNos.Where(x => !x.IsNullOrWhiteSpace()).Distinct().ToList(); // 单号去重、去空
+
+ var details = await _trackDetailsEsRepository.GetListAsync(input.SubSystemId, input.OrderType, input.OrderNos);
+
+ // 是否对外
+ var trackCodes = details.Select(x => x.TrackCode)
+ .Where(x => x != GlobalConst.EmptyString)
+ .Distinct()
+ .ToList();
+
+ var trackContentDic = new Dictionary();
+ if (!trackCodes.IsNullOrEmpty())
+ {
+ var trackContents = await _trackContentRepository.GetListAsync(x =>
+ x.SubSystemId == input.SubSystemId && trackCodes.Contains(x.Code),
+ x => new
+ {
+ x.Code,
+ x.IsExternal
+ });
+ trackContents.ForEach(x => trackContentDic.Add(x.Code, x.IsExternal));
+ }
+
+ foreach (var group in details.GroupBy(x => x.OrderId))
+ {
+ var item = new GetTrackOutput();
+ var trackDetails = group.ToList();
+ item.OrderNo = trackDetails.First().OrderNo;
+
+ item.TrackDetails = trackDetails.Select(x => new TrackDetail
+ {
+ Code = x.TrackCode,
+ Status = x.TrackStatus,
+ Content = x.TrackContent,
+ OriginContent = x.OriginTrackContent,
+ Location = x.TrackPlace,
+ Time = x.TrackTime,
+ TimeZone = x.TrackTimeZone,
+ IsDisplay = trackContentDic.TryGetValue(x.TrackCode, out var isExternal) && isExternal,
+ IsVisibility = x.IsVisibility,
+ Source = x.Source,
+ Remarks = x.Remarks,
+ Files = x.Files?.Select(y => new FileItemDto
+ {
+ FileName = y.FileName,
+ OssKey = y.OssKey
+ }).ToList(),
+ TrackPlaceCity = x.TrackPlaceCity,
+ TrackPlaceCityId = x.TrackPlaceCityId,
+ TrackPlaceProvince = x.TrackPlaceProvince,
+ TrackPlaceProvinceId = x.TrackPlaceProvinceId,
+ TrackPlaceNation = x.TrackPlaceNation,
+ TrackPlaceNationId = x.TrackPlaceNationId,
+ TrackPlacePostcode = x.TrackPlacePostcode,
+ DestinationTimeZone = x.DestinationTimeZone,
+ EstimatedDeliveryDate = x.EstimatedDeliveryDate,
+ Extra = x.Extra
+ }).ToList();
+
+ res.Add(item);
+ }
+
+ // 排序
+ var sortedList = await TracksOrdered(res, input);
+
+ return new UnifyResultDto>(true, sortedList, "操作成功");
+ }
+
+
+ private async Task> TracksOrdered(List list, GetTrackInput input)
{
switch (input.SortMethod)
{
case SortMethod.ByTrackTime:
+ case SortMethod.ByTemplateAndTrackTime:
// tips:quick-sort 直接修改原list
list.ForEach(item => item.TrackDetails.Sort((a, b) => a.Time.CompareTo(b.Time)));
break;
case null:
case SortMethod.ByTrackTimeDesc:
+ case SortMethod.ByTemplateAndTrackTimeDesc:
list.ForEach(item => item.TrackDetails.Sort((a, b) => b.Time.CompareTo(a.Time)));
break;
default:
throw new ArgumentOutOfRangeException(nameof(input.SortMethod), input.SortMethod, "不支持的排序方式");
}
+
+ if (input.SortMethod != SortMethod.ByTemplateAndTrackTime
+ && input.SortMethod != SortMethod.ByTemplateAndTrackTimeDesc)
+ {
+ return list;
+ }
+
+ //查出订单模板
+ var templates = await _trackTemplateRepository.GetTrackTemplateListAsync(new GetTrackTemplateListInputVo
+ {
+ SubSystemId = input.SubSystemId,
+ TemplateCode = input.TrackTemplateCode
+ });
+
+ if (templates.Count == 0)
+ {
+ throw new BusinessException("轨迹模板不存在");
+ }
+
+ foreach (var getTrackOutput in list)
+ {
+ getTrackOutput.TrackDetails = SortByTemplate(getTrackOutput.TrackDetails, templates, input.SortMethod.Value);
+ }
+
+ return list;
+ }
+
+
+ private async Task> TracksOrdered(List list, GetTrackInputV2 input)
+ {
+ switch (input.SortMethod)
+ {
+ case SortMethod.ByTrackTime:
+ case SortMethod.ByTemplateAndTrackTime:
+ // tips:quick-sort 直接修改原list
+ list.ForEach(item => item.TrackDetails.Sort((a, b) => a.Time.CompareTo(b.Time)));
+ break;
+ case null:
+ case SortMethod.ByTrackTimeDesc:
+ case SortMethod.ByTemplateAndTrackTimeDesc:
+ list.ForEach(item => item.TrackDetails.Sort((a, b) => b.Time.CompareTo(a.Time)));
+ break;
+ default:
+ throw new ArgumentOutOfRangeException(nameof(input.SortMethod), input.SortMethod, "不支持的排序方式");
+ }
+
+ return list;
+ }
+
+ //按模板排序
+ private static List SortByTemplate(List tracks, List templates, SortMethod sortMethod)
+ {
+ if (templates.Count == 0 ||
+ tracks.Count == 0)
+ {
+ return new List();
+ }
+
+ var isAsc = sortMethod == SortMethod.ByTemplateAndTrackTime;
+
+ var allTemplateCodes = new HashSet();
+
+ foreach (var template in templates)
+ {
+ tracks = Sort(tracks, template, isAsc, allTemplateCodes);
+ }
+ // tracks = templates.Aggregate(tracks,
+ // (current, template) => Sort(current, template, isAsc, allTemplateCodes));
+
+ return tracks;
+ }
+
+ private static List Sort(List seq, TrackTemplateOutputVo template, bool isAsc = true, HashSet? allTemplateCodes = null)
+ {
+ if (template.TemplateContents.Count == 0)
+ {
+ return seq;
+ }
+
+ // 创建一个字典,用于存储排序序列中元素的索引
+ var sortDict = new Dictionary();
+ template.TemplateContents.Sort((x, y) => x.Sort.CompareTo(y.Sort));
+ var sortSeq = template.TemplateContents
+ .Select(x => seq.FirstOrDefault(y => y.Code == x.Code))
+ .Where(x => x != null)
+ .ToList();
+ for (var i = 0; i < sortSeq.Count; i++)
+ {
+ sortDict[sortSeq[i]!] = isAsc ? i : sortSeq.Count - i;
+ }
+
+ // 将模板code添加到上下文集合中
+ if (allTemplateCodes != null)
+ {
+ allTemplateCodes.UnionWith(template.TemplateContents.Select(x => x.Code));
+ }
+
+ // 根据排序序列和字典中的索引对序列进行排序
+ // 使用稳定排序算法,如OrderBy,它保持相等元素的相对顺序
+ var sorted = seq.OrderBy(item => sortDict.GetValueOrDefault(item, int.MaxValue)).ToList();
+
+ // 存在
+ if (allTemplateCodes != null)
+ {
+ //查询到没有命中到模板的轨迹
+ var noTipTemplateTracks = sorted.Where(x => !allTemplateCodes.Contains(x.Code)).ToList();
+
+ //查询未命中轨迹的索引字典
+ var trackIdxDict = new Dictionary();
+ var trackSortDict = new SortedDictionary();
+ foreach (var track in noTipTemplateTracks)
+ {
+ trackIdxDict[track] = sorted.IndexOf(track);
+ trackSortDict[trackIdxDict[track]] = track;
+ }
+
+ //没有命中的轨迹排序
+ var noTipTemplateTrackSorted = (isAsc
+ ? noTipTemplateTracks.OrderBy(x => x.Time)
+ : noTipTemplateTracks.OrderByDescending(x => x.Time))
+ .ToList();
+
+ for (var i = 0; i < trackSortDict.Count; i++)
+ {
+ //在序列中的实际位置
+ var (idx, st) = trackSortDict.ElementAt(0);
+ //在这个位置它应该是哪个轨迹
+ var track = noTipTemplateTrackSorted[0];
+ //交换位置
+ if (track != st)
+ {
+ var idx2 = trackIdxDict[track];
+ sorted[idx2] = st;
+ sorted[idx] = track;
+ }
+ }
+ }
+
+ return sorted;
}
}
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
index 83b36226..f20c415e 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
@@ -5,6 +5,7 @@ using SJZY.Track.Application.Contract.Services.ProvideServices;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
+using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
using SJZY.Track.Domain.Enums;
using SJZY.UserCenter.HttpApi.Services;
using SJZY.UserCenter.HttpApi.Services.User;
@@ -26,12 +27,13 @@ public partial class TrackService : ApplicationService, ITrackService
public TrackService(IOrderRepository orderRepository, ICapPublisher capPublisher,
ITrackDetailsEsRepository trackDetailsEsRepository, ITrackContentRepository trackContentRepository,
- IHttpClientProxy requestCurrentUserService)
+ IHttpClientProxy requestCurrentUserService, ITrackTemplateRepository trackTemplateRepository)
{
_orderRepository = orderRepository;
_capPublisher = capPublisher;
_trackContentRepository = trackContentRepository;
_requestCurrentUserService = requestCurrentUserService;
+ _trackTemplateRepository = trackTemplateRepository;
_trackDetailsEsRepository = trackDetailsEsRepository;
}
diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs
index ebb18d38..b434e8b6 100644
--- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs
+++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsEsRepository.cs
@@ -31,6 +31,8 @@ public interface ITrackDetailsEsRepository : IElasticsearchClientService> DeleteTrackAsync(int[] orderIds, List trackCodes);
Task DeleteTrackByIdAsync(string id, string indexName);
+
Task> GetDataByIds(string[] ids);
+
Task GetDetailAsync(string orderNo, string trackCode, int orderType, int subSystemId, DateTime trackTime);
}
diff --git a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs
index d60f5cf0..3dc93cee 100644
--- a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs
+++ b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs
@@ -1,5 +1,6 @@
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
+using SJZY.Track.Domain.Aggregates.TrackFlagAggregate;
using SJZY.Track.Domain.Aggregates.TrackPullAggregate;
using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
using SJZY.Track.Domain.Dtos.Order;
@@ -99,20 +100,22 @@ public class ProvideQueries : ISugarRepository, IProvideQueries, ITransientDepen
return await Context.Queryable()
.LeftJoin((x, y) => x.TrackStatusId == y.Id)
.LeftJoin((x, y, z) => x.SubSystemId == z.Id)
+ .LeftJoin((x, y, z, k) => x.SubSystemId == k.SubSystemId && k.Code == x.Code)
.Where(x => x.SubSystemId == subSystemId && x.Code == trackCode)
- .Select((x, y, z) => new TrackContentVO
+ .Select((x, y, z, k) => new TrackContentVO
{
SubSystemCode = z.Key,
TrackStatusId = x.TrackStatusId,
TrackStatus = y.Status,
TrackStatusCode = y.Code,
+ TrackContentCode = x.Code,
TrackContent = x.Content,
TrackEnContent = x.EnContent,
IsCompleted = y.IsCompleted,
IsRepeatable = x.IsRepeatable,
IsAllowManuallyUpdate = x.IsAllowManuallyUpdate,
IsAllowManuallyCreate = x.IsAllowManuallyCreate,
- IsToMq = y.IsToMq,
+ IsToMq = y.IsToMq || k.IsToMq,
})
.FirstAsync();
}
@@ -122,21 +125,23 @@ public class ProvideQueries : ISugarRepository, IProvideQueries, ITransientDepen
return await Context.Queryable()
.LeftJoin((x, y) => x.TrackStatusId == y.Id)
.LeftJoin((x, y, z) => x.SubSystemId == z.Id)
+ .LeftJoin((x, y, z, k) => x.SubSystemId == k.SubSystemId && k.Code == x.Code)
.Where(x => subSystemIds.Contains(x.SubSystemId) && trackCodes.Contains(x.Code))
- .Select((x, y, z) => new TrackContentVO
+ .Select((x, y, z, k) => new TrackContentVO
{
SubSystemId = x.SubSystemId,
SubSystemCode = z.Key,
TrackStatusId = x.TrackStatusId,
TrackStatus = y.Status,
TrackStatusCode = y.Code,
+ TrackContentCode = x.Code,
TrackContent = x.Content,
TrackEnContent = x.EnContent,
IsCompleted = y.IsCompleted,
IsRepeatable = x.IsRepeatable,
IsAllowManuallyUpdate = x.IsAllowManuallyUpdate,
IsAllowManuallyCreate = x.IsAllowManuallyCreate,
- IsToMq = y.IsToMq,
+ IsToMq = y.IsToMq || k.IsToMq,
})
.ToListAsync();
}
diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs
index 80398584..d7e28fbe 100644
--- a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs
@@ -430,7 +430,10 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract t.OrderId, orderId)
)
.Size(SafelyLimit)
- .Sort(s => s.Field(f => f.ZeroTrackTime, SortOrder.Descending)));
+ .Sort(s => s
+ .Field(f => f.ZeroTrackTime, SortOrder.Descending)
+ .Field(f => f.CreateTime, SortOrder.Descending)
+ ));
if (!r.IsValid)
{
@@ -463,7 +466,10 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract query)
.Size(SafelyLimit)
- .Sort(s => s.Field(f => f.ZeroTrackTime, SortOrder.Descending)));
+ .Sort(s => s
+ .Field(f => f.ZeroTrackTime, SortOrder.Descending)
+ .Field(f => f.CreateTime, SortOrder.Descending))
+ );
if (!r.IsValid)
{