From f4b7645ddfe5534a6a5857ce3b5e1e749612f9bb 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, 12 Mar 2024 15:59:34 +0800
Subject: [PATCH 1/7] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=89=B9=E9=87=8F?=
=?UTF-8?q?=E6=96=B0=E5=A2=9E=E3=80=81=E6=9B=B4=E6=96=B0=E8=BD=A8=E8=BF=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ProvideServices/BatchDeleteTrackInput.cs | 15 +---
.../ProvideServices/BatchUpsertTrackInput.cs | 33 +++++++++
.../Dtos/ProvideServices/GetTrackInput.cs | 14 +---
.../Dtos/ProvideServices/OrderNoInfo.cs | 16 +++++
.../Dtos/ProvideServices/UpsertTrackInput.cs | 14 ----
.../SJZY.Track.Application.Contract.csproj | 1 +
.../EventHandlers/TrackDeleteEventHandler.cs | 2 +-
.../EventHandlers/TrackRefreshEventHandler.cs | 63 +++++++++++------
.../SJZY.Track.Application.csproj | 2 +-
.../ProvideServices/OrderService.Link.cs | 6 ++
.../Services/ProvideServices/OrderService.cs | 11 +++
.../ProvideServices/TrackPushPullService.cs | 6 +-
.../ProvideServices/TrackService.Query.cs | 6 ++
.../Services/ProvideServices/TrackService.cs | 68 +++++++++++++++++--
.../Repositories/TrackDetailsRepository.cs | 3 +-
15 files changed, 187 insertions(+), 73 deletions(-)
create mode 100644 src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs
diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchDeleteTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchDeleteTrackInput.cs
index 5616f912..0a79e008 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchDeleteTrackInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchDeleteTrackInput.cs
@@ -2,21 +2,8 @@
namespace SJZY.Track.Application.Contract.Dtos.ProvideServices;
-public class BatchDeleteTrackInput
+public class BatchDeleteTrackInput : OrderNosInfo
{
- ///
- /// 订单类型,必填
- ///
- [Required]
- [Range(1, int.MaxValue)]
- public int OrderType { get; set; }
-
- ///
- /// 订单号,必填
- ///
- [Required]
- public List OrderNos { get; set; } = new();
-
///
/// 轨迹code,必填
///
diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs
new file mode 100644
index 00000000..fa5d3880
--- /dev/null
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs
@@ -0,0 +1,33 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace SJZY.Track.Application.Contract.Dtos.ProvideServices;
+
+public class BatchUpsertTrackInput : OrderNosInfo
+{
+ ///
+ /// 轨迹内容代码
+ ///
+ [Required]
+ [MaxLength(50)]
+ public string TrackCode { get; set; } = null!;
+
+ ///
+ /// 轨迹发生地
+ ///
+ [Required]
+ [MaxLength(200)]
+ public string TrackPlace { get; set; } = null!;
+
+ ///
+ /// 轨迹发生时间
+ ///
+ [Required]
+ public DateTime? TrackTime { get; set; }
+
+ ///
+ /// 轨迹发生时区
+ ///
+ [Required]
+ [Range(-12, 12)]
+ public float? TrackTimeZone { get; set; }
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs
index 598ee759..8fa3dec0 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs
@@ -2,20 +2,8 @@ using System.ComponentModel.DataAnnotations;
namespace SJZY.Track.Application.Contract.Dtos.ProvideServices;
-public class GetTrackInput
+public class GetTrackInput : OrderNosInfo
{
- ///
- /// 订单类型
- ///
- [Required]
- [Range(1, int.MaxValue)]
- public int OrderType { get; set; }
-
- ///
- /// 订单号
- ///
- public List OrderNos { get; set; } = new();
-
///
/// 时区 +8 +8.25 -8.5 -9
/// 不传默认+8
diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/OrderNoInfo.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/OrderNoInfo.cs
index eda65e4a..3ec49a17 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/OrderNoInfo.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/OrderNoInfo.cs
@@ -17,4 +17,20 @@ public class OrderNoInfo
[Required]
[MaxLength(100)]
public string OrderNo { get; set; } = null!;
+}
+
+public class OrderNosInfo
+{
+ ///
+ /// 订单类型
+ ///
+ [Required]
+ [Range(1, int.MaxValue)]
+ public int OrderType { get; set; }
+
+ ///
+ /// 订单号
+ ///
+ [Required]
+ public List OrderNos { get; set; } = new();
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs
index b62cf77b..8248c8e0 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs
@@ -30,18 +30,4 @@ public class UpsertTrackInput : OrderNoInfo
[Required]
[Range(-12, 12)]
public float? TrackTimeZone { get; set; }
-}
-
-public class NotNullAttribute : ValidationAttribute
-{
- protected override ValidationResult IsValid(object value, ValidationContext validationContext)
- {
- if (value == null)
- {
- return new ValidationResult(ErrorMessage ?? "The field is required.",
- new[] { validationContext.MemberName });
- }
-
- return ValidationResult.Success;
- }
}
\ No newline at end of file
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 0a863be2..68b939c0 100644
--- a/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj
+++ b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj
@@ -4,6 +4,7 @@
net7.0
+ True
1.0.0
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs
index 55bb5b1d..5fa44212 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs
@@ -29,7 +29,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
{
if (@event.Visited.Contains(@event.OrderId))
{
- LogHelper.Error($"轨迹订单循环依赖预警:{@event.Visited.JoinAsString(",")}");
+ LogHelper.Error($"删除轨迹订单时,发现循环依赖:{@event.Visited.JoinAsString(",")}");
return;
}
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs
index 50cabb23..e898fcf7 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs
@@ -1,4 +1,5 @@
-using System.Linq.Expressions;
+using System.Diagnostics;
+using System.Linq.Expressions;
using DotNetCore.CAP;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
@@ -94,47 +95,71 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
var trackUpsertEvent = @event.DeepCopy();
var paramConfig = config.ParamConfig;
var contentConfigs = config.ContentConfigs;
- TrackPullContentConfigDto? trackContent = null;
+ TrackPullContentConfigDto? matchedContentConfig = null;
// 1、匹配轨迹代码
- var serviceProviderTrackCode = trackToken[paramConfig.TrackContentCodeName]?.Value();
- if (!serviceProviderTrackCode.IsNullOrWhiteSpace())
+ var trackCode = trackToken[paramConfig.TrackContentCodeName]?.Value();
+ if (!trackCode.IsNullOrWhiteSpace())
{
- trackContent = contentConfigs.FirstOrDefault(x => x.TrackContentCodeValue == serviceProviderTrackCode);
+ matchedContentConfig = contentConfigs.FirstOrDefault(x => x.TrackContentCodeValue == trackCode);
}
// 2、匹配轨迹状态
- if (trackContent is null)
+ if (matchedContentConfig is null)
{
- var serviceProviderTrackStatus = trackToken[paramConfig.TrackStatusName]?.Value();
- if (!serviceProviderTrackStatus.IsNullOrWhiteSpace())
+ var trackStatus = trackToken[paramConfig.TrackStatusName]?.Value();
+ if (!trackStatus.IsNullOrWhiteSpace())
{
- trackContent = contentConfigs.FirstOrDefault(x => x.TrackStatusValue == serviceProviderTrackCode);
+ matchedContentConfig = contentConfigs.FirstOrDefault(x => x.TrackStatusValue == trackCode);
}
}
// 3、匹配轨迹内容
- if (trackContent is null)
+ if (matchedContentConfig is null)
{
- var serviceProviderTrackContent = trackToken[paramConfig.TrackContentName]?.Value();
- if (!serviceProviderTrackContent.IsNullOrWhiteSpace())
+ var trackContent = trackToken[paramConfig.TrackContentName]?.Value();
+ if (!trackContent.IsNullOrWhiteSpace())
{
- trackContent = contentConfigs.FirstOrDefault(x => x.TrackContentValue == serviceProviderTrackCode);
+ Debug.Assert(trackContent != null, nameof(trackContent) + " != null");
+ matchedContentConfig = contentConfigs.FirstOrDefault(x => x.TrackContentValue == trackCode);
- // 3.1、按关键字匹配
- if (trackContent is null)
+ // 按关键字分析轨迹内容
+ if (matchedContentConfig is null)
{
+ foreach (var contentConfig in contentConfigs)
+ {
+ foreach (var keyword in contentConfig.TrackKeyword?.Split(',') ?? Enumerable.Empty())
+ {
+ if (trackContent.Contains(keyword, StringComparison.OrdinalIgnoreCase))
+ {
+ matchedContentConfig = contentConfig;
+ break;
+ }
+ }
+
+ if (matchedContentConfig is null) continue;
+
+ foreach (var keyword in contentConfig.TrackKeywordReverse?.Split(',') ??
+ Enumerable.Empty())
+ {
+ if (trackContent.Contains(keyword, StringComparison.OrdinalIgnoreCase))
+ {
+ matchedContentConfig = null;
+ break;
+ }
+ }
+ }
}
}
}
- if (trackContent is null) return;
+ if (matchedContentConfig is null) return;
var trackPlace = trackToken[paramConfig.TrackPlaceName]?.Value();
if (trackPlace.IsNullOrWhiteSpace())
{
Expression> resultExpression =
- (TrackLocationValue?)trackContent.TrackPlaceValue switch
+ (TrackLocationValue?)matchedContentConfig.TrackPlaceValue switch
{
TrackLocationValue.ArrivalPort => x => x.ArrivalPort,
TrackLocationValue.ArriveCity => x => x.ArrivalCity,
@@ -149,11 +174,11 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
}
// 新增/更新轨迹
- trackUpsertEvent.TrackCode = trackContent.TrackContentCode;
+ trackUpsertEvent.TrackCode = matchedContentConfig.TrackContentCode;
trackUpsertEvent.TrackPlace = trackPlace ?? "CN";
trackUpsertEvent.TrackTime = trackToken[paramConfig.TrackTimeName]?.Value() ?? DateTime.Now;
trackUpsertEvent.TrackTimeZone = trackToken[paramConfig.TrackTimeZoneName]?.Value() ??
- trackContent.TrackTimeZoneValue ?? 8;
+ matchedContentConfig.TrackTimeZoneValue ?? 8;
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, trackUpsertEvent);
}
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/SJZY.Track.Application.csproj b/src/SJZY.Track.Application/SJZY.Track.Application.csproj
index d2b2eafd..da60d1a4 100644
--- a/src/SJZY.Track.Application/SJZY.Track.Application.csproj
+++ b/src/SJZY.Track.Application/SJZY.Track.Application.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs
index 5c35b728..51f50f3b 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs
@@ -14,6 +14,12 @@ public partial class OrderService
private readonly IBasicQuery _orderLinkQuery;
private readonly ICapPublisher _capPublisher;
+ ///
+ /// 关联、解除关联订单
+ ///
+ ///
+ ///
+ ///
[HttpPost("Order/Link")]
public async Task LinkOrderAsync(LinkOrderInput input)
{
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
index 5c56337d..765ff6ad 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
@@ -24,6 +24,11 @@ public partial class OrderService : ApplicationService, IOrderService
_orderLinkQuery = orderLinkQuery;
}
+ ///
+ /// 新增、更新订单(存在就更新)
+ ///
+ ///
+ ///
[HttpPost("Order/Upsert")]
public async Task UpsertAsync(UpsertOrderInput input)
{
@@ -45,6 +50,12 @@ public partial class OrderService : ApplicationService, IOrderService
return "创建成功";
}
+ ///
+ /// 删除订单
+ ///
+ ///
+ ///
+ ///
[HttpPost("Order/Delete")]
public async Task DeleteOrderAsync(DeleteOrderInput input)
{
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs
index 66625f36..2e1dd08b 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs
@@ -15,10 +15,10 @@ namespace SJZY.Track.Application.Services.ProvideServices;
public class TrackPushPullService : ApplicationService
{
private readonly IOrderRepository _orderRepository;
- private readonly IHttpClientProxy _httpClientProxy;
+ private readonly IHttpClientProxy _httpClientProxy;
public TrackPushPullService(IOrderRepository orderRepository,
- IHttpClientProxy httpClientProxy)
+ IHttpClientProxy httpClientProxy)
{
_orderRepository = orderRepository;
_httpClientProxy = httpClientProxy;
@@ -51,7 +51,7 @@ public class TrackPushPullService : ApplicationService
// 批量获取轨迹
await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync(
- "A012", group.Key.ServiceProviderCode, 42, data,
+ "A012", group.Key.ServiceProviderCode, data,
GlobalConst.TrackRefreshSubscribe, JsonConvert.SerializeObject(group.Key));
}
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs
index 372d3f01..35237196 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs
@@ -10,6 +10,12 @@ public partial class TrackService
{
private readonly ITrackDetailsRepository _trackDetailsRepository;
+ ///
+ /// 查询轨迹
+ ///
+ ///
+ ///
+ ///
[HttpPost("Track/Query")]
public async Task> QueryAsync(GetTrackInput input)
{
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
index 7c84dbc3..fbd0fd99 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
@@ -29,6 +29,12 @@ public partial class TrackService : ApplicationService, ITrackService
_trackDetailsRepository = trackDetailsRepository;
}
+ ///
+ /// 新增、更新轨迹(存在就更新)
+ ///
+ ///
+ ///
+ ///
[HttpPost("Track/Upsert")]
public async Task UpsertTrackAsync(UpsertTrackInput input)
{
@@ -52,24 +58,68 @@ public partial class TrackService : ApplicationService, ITrackService
return true;
}
+ ///
+ /// 批量新增、更新轨迹
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("Track/BatchUpsert")]
+ public async Task BatchUpsertTrackAsync(BatchUpsertTrackInput input)
+ {
+ input.OrderNos = input.OrderNos.Where(x => !x.IsNullOrWhiteSpace()).Distinct().ToList(); // 单号去重、去空
+ if (input.OrderNos.Count == 0)
+ {
+ throw new BusinessException(message: "订单一个都不存在");
+ }
+
+ var orders = await _orderRepository.GetListAsync(x =>
+ x.OrderType == input.OrderType && input.OrderNos.Contains(x.OrderNo), x => new
+ {
+ x.Id, x.OrderNo, x.SubSystemId, x.IsPushCompleted, x.CustomId
+ });
+
+ foreach (var order in orders)
+ {
+ // 新增/更新轨迹
+ var @event = new TrackUpsertEvent
+ {
+ TrackCode = input.TrackCode,
+ TrackPlace = input.TrackPlace,
+ TrackTime = input.TrackTime,
+ TrackTimeZone = input.TrackTimeZone,
+ OrderType = input.OrderType,
+ OrderNo = order.OrderNo,
+ OrderId = order.Id,
+ SubSystemId = order.SubSystemId,
+ IsPushCompleted = order.IsPushCompleted,
+ CustomId = order.CustomId
+ };
+ await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, @event);
+ }
+
+ return true;
+ }
+
+ ///
+ /// 删除轨迹
+ ///
+ ///
+ ///
+ ///
[HttpPost("Track/Delete")]
public async Task DeleteTrackAsync(DeleteTrackInput input)
{
var order = await _orderRepository.GetFirstAsync(x =>
x.OrderType == input.OrderType && x.OrderNo == input.OrderNo, x => new
{
- x.Id, x.SubSystemId, x.IsCompleted
+ x.Id, x.SubSystemId
});
if (order == default)
{
throw new BusinessException(message: $"订单:{input.OrderNo}不存在");
}
- if (order.IsCompleted)
- {
- throw new BusinessException(message: $"订单:{input.OrderNo}已完成无法删除轨迹");
- }
-
var codes = await _provideQueries.GetCanDeleteTrackCodesAsync(new List(order.Id), input.TrackCodes);
if (codes.Count == 0)
@@ -89,6 +139,12 @@ public partial class TrackService : ApplicationService, ITrackService
return true;
}
+ ///
+ /// 批量删除轨迹
+ ///
+ ///
+ ///
+ ///
[HttpPost("Track/BatchDelete")]
public async Task BatchDeleteTrackAsync(BatchDeleteTrackInput input)
{
diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
index e6aae4f0..99290105 100644
--- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
@@ -1,4 +1,3 @@
-using Elasticsearch.Net;
using Nest;
using SJZY.Expand.ABP.Core.Logger;
using SJZY.Expand.ElasticSearch.Services;
@@ -40,7 +39,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract request
.Index(index.IndexName)
- .Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见
+ //.Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见
);
if (!r.IsValid)
From 2e86b7f7ba6aa1b2e227e4a6a9fce3d0921a7f4e 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, 12 Mar 2024 17:28:15 +0800
Subject: [PATCH 2/7] =?UTF-8?q?change=E3=80=90=E6=9B=B4=E6=96=B0=E8=BD=A8?=
=?UTF-8?q?=E8=BF=B9=E9=9C=80=E8=A6=81=E6=9B=B4=E6=96=B0=E8=AE=A2=E5=8D=95?=
=?UTF-8?q?=E7=9A=84=E6=9C=80=E6=96=B0=E8=BD=A8=E8=BF=B9=E4=BF=A1=E6=81=AF?=
=?UTF-8?q?=E3=80=91https://www.tapd.cn/60863849/prong/tasks/view/11608638?=
=?UTF-8?q?49001016391?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Events/UpdateOrderTrackEvent.cs | 11 +++++---
.../EventHandlers/TrackDeleteEventHandler.cs | 25 ++++++++++++++++++-
.../EventHandlers/TrackUpsertEventHandler.cs | 2 +-
.../UpdateOrderTrackEventHandler.cs | 22 ++++++++++++----
.../Aggregates/OrderAggregate/OrderEntity.cs | 20 ++++++++++-----
.../ITrackDetailsRepository.cs | 9 ++++++-
.../TrackDetailsIndex.cs | 5 ++++
src/SJZY.Track.Domain/GlobalConst.cs | 5 ++++
.../Repositories/TrackDetailsRepository.cs | 25 ++++++++++++++++++-
9 files changed, 106 insertions(+), 18 deletions(-)
diff --git a/src/SJZY.Track.Application.Contract/Events/UpdateOrderTrackEvent.cs b/src/SJZY.Track.Application.Contract/Events/UpdateOrderTrackEvent.cs
index f04cd86c..779415e2 100644
--- a/src/SJZY.Track.Application.Contract/Events/UpdateOrderTrackEvent.cs
+++ b/src/SJZY.Track.Application.Contract/Events/UpdateOrderTrackEvent.cs
@@ -7,11 +7,16 @@ public class UpdateOrderTrackEvent
///
public int OrderId { get; set; }
+ ///
+ /// 是否删除引起的更新
+ ///
+ public bool IsDelete { get; set; }
+
///
/// 此次发生的轨迹是否意味完成
///
public bool IsCompleted { get; set; }
-
+
///
/// 轨迹内容
///
@@ -21,7 +26,7 @@ public class UpdateOrderTrackEvent
/// 轨迹内容英文
///
public string TrackEnContent { get; set; } = null!;
-
+
///
/// 轨迹发生地
///
@@ -31,7 +36,7 @@ public class UpdateOrderTrackEvent
/// 轨迹发生时间
///
public DateTime TrackTime { get; set; }
-
+
///
/// 轨迹时区
///
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs
index 5fa44212..1994118d 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs
@@ -56,7 +56,30 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
private async Task DeleteTrackAsync(TrackDeleteEvent @event)
{
// 删除轨迹
- await _trackDetailsRepository.DeleteTrackAsync(@event.OrderId, @event.TrackCodes);
+ var isOk = await _trackDetailsRepository.DeleteTrackAsync(@event.OrderId, @event.TrackCodes);
+
+ // 触发订单主表更新事件
+ if (isOk)
+ {
+ var track = await _trackDetailsRepository.GetLatestAsync(@event.OrderId);
+ var updateOrderEvent = track == default
+ ? new UpdateOrderTrackEvent
+ {
+ OrderId = @event.OrderId,
+ IsDelete = true
+ }
+ : new UpdateOrderTrackEvent
+ {
+ OrderId = @event.OrderId,
+ IsCompleted = track.IsCompleted,
+ TrackContent = track.TrackContent,
+ TrackEnContent = track.TrackEnContent,
+ TrackPlace = track.TrackPlace,
+ TrackTime = track.TrackTime,
+ TrackTimeZone = track.TrackTimeZone
+ };
+ await _capPublisher.PublishAsync(GlobalConst.UpdateOrderTrackSubscribe, updateOrderEvent);
+ }
// 根据订单关联关系异步向下刷
var linkedOrders = await _orderRepository.GetLinkedOrdersAsync(@event.OrderId);
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs
index 5784d125..21ddffc0 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs
@@ -88,7 +88,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
TrackStatus = trackContent.Status,
TrackCode = @event.TrackCode,
TrackContent = trackContent.Content,
-
+ IsCompleted = orderIsCompleted,
TrackEnContent = trackContent.EnContent,
TrackPlace = @event.TrackPlace,
TrackTime = @event.TrackTime!.Value,
diff --git a/src/SJZY.Track.Application/EventHandlers/UpdateOrderTrackEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/UpdateOrderTrackEventHandler.cs
index 0901b2a0..f2fca16a 100644
--- a/src/SJZY.Track.Application/EventHandlers/UpdateOrderTrackEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/UpdateOrderTrackEventHandler.cs
@@ -20,16 +20,28 @@ public class UpdateOrderTrackEventHandler : ITransientDependency, ICapSubscribe
var order = await _orderRepository.GetFirstAsync(x => x.Id == @event.OrderId);
if (order == default) return;
- if (order.IsCompleted) return;
+ if (@event.IsDelete)
+ {
+ if (@event.TrackTime == default)
+ {
+ // 删除全部轨迹导致的重置行为
+ order.ResetTrackInfo();
+ }
+ else if (@event.TrackTime == order.LatestTrackTime) return;
+ }
+ else // upsert引发的更新,需要校验发生时间是否大于最新时间
+ {
+ if (order.LatestTrackTime != null &&
+ order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0)) >
+ @event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone))) return;
+ }
+
+ order.IsCompleted = @event.IsCompleted;
order.LatestTrackContent = @event.TrackContent;
order.LatestTrackEnContent = @event.TrackEnContent;
order.LatestTrackPlace = @event.TrackPlace;
order.LatestTrackTime = @event.TrackTime;
order.LatestTrackTimeZone = @event.TrackTimeZone;
- if (@event.IsCompleted) order.IsCompleted = true;
- else if (order.LatestTrackTime != null &&
- order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0)) >
- @event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone))) return;
await _orderRepository.UpdateColumnAsync(order, x => new
{
diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
index 04432d30..69d5f706 100644
--- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
+++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
@@ -41,7 +41,7 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot
///
[SugarColumn(ColumnName = "IsCompleted")]
public bool IsCompleted { get; set; }
-
+
///
/// 订单是否推送完成(异步维护)
///
@@ -65,7 +65,7 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot
///
[SugarColumn(ColumnName = "LatestTrackTime")]
public DateTime? LatestTrackTime { get; set; }
-
+
///
/// 最新轨迹时区(异步维护)
///
@@ -114,8 +114,16 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot
[SugarColumn(ColumnName = "LeavePort")]
public string? LeavePort { get; set; }
- [SugarColumn(IsIgnore = true)]
- public List OrderFlights { get; set; }
- [SugarColumn(IsIgnore = true)]
- public List OrderTemplates { get; set; }
+ [SugarColumn(IsIgnore = true)] public List OrderFlights { get; set; }
+ [SugarColumn(IsIgnore = true)] public List OrderTemplates { get; set; }
+
+ public void ResetTrackInfo()
+ {
+ IsCompleted = false;
+ LatestTrackContent = null;
+ LatestTrackEnContent = null;
+ LatestTrackTime = null;
+ LatestTrackPlace = null;
+ LatestTrackTimeZone = null;
+ }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs
index 4025579e..34cdac01 100644
--- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs
+++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs
@@ -19,7 +19,14 @@ public interface ITrackDetailsRepository
///
///
///
- Task DeleteTrackAsync(int orderId, List trackCodes);
+ Task DeleteTrackAsync(int orderId, List trackCodes);
Task?> GetListAsync(List orderIds);
+
+ ///
+ /// 获取最近一条发生的轨迹
+ ///
+ ///
+ ///
+ Task GetLatestAsync(int orderId);
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs
index d4f5c9e1..d5909320 100644
--- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs
+++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs
@@ -46,6 +46,11 @@ public class TrackDetailsIndex : IdBaseIndex
///
public string TrackContent { get; set; } = null!;
+ ///
+ /// 是否意味着完成
+ ///
+ public bool IsCompleted { get; set; }
+
///
/// 原轨迹内容
///
diff --git a/src/SJZY.Track.Domain/GlobalConst.cs b/src/SJZY.Track.Domain/GlobalConst.cs
index 27a07bb1..629149a8 100644
--- a/src/SJZY.Track.Domain/GlobalConst.cs
+++ b/src/SJZY.Track.Domain/GlobalConst.cs
@@ -27,6 +27,11 @@ public class GlobalConst
///
public const string UpdateOrderTrackSubscribe = "SJZY.Track.UpdateOrderTrack";
+ ///
+ /// 轨迹删除后触发更新订单轨迹 mq订阅名称
+ ///
+ public const string DeleteTrackAfterUpdateOrderSubscribe = "SJZY.Track.DeleteTrackAfterUpdateOrder";
+
///
/// 关联订单后补轨迹 mq订阅名称
///
diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
index 99290105..8bc2739d 100644
--- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
@@ -110,7 +110,28 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract trackCodes)
+ public async Task GetLatestAsync(int orderId)
+ {
+ var data = await Context.SearchAsync(x => x
+ .Source(s => s.Includes(fd => fd
+ .Field(f => f.IsCompleted)
+ .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)
{
var r = await Context.DeleteByQueryAsync(x => x
.Query(
@@ -122,6 +143,8 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract 0;
}
public async Task<(List list, long total)> GetListAsync(TrackDetailsQueryInput input)
From d23edffffc77a2c12b7f32c6d098de61d552c869 Mon Sep 17 00:00:00 2001
From: moyongzhen <2534173414@qq.com>
Date: Tue, 12 Mar 2024 21:13:20 +0800
Subject: [PATCH 3/7] =?UTF-8?q?=E8=BD=A8=E8=BF=B9=E8=AE=A2=E5=8D=95?=
=?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=97=AE=E9=A2=98=E7=B1=BB=E5=9E=8B=E5=AD=97?=
=?UTF-8?q?=E6=AE=B5=E5=92=8C=E9=97=AE=E9=A2=98=E6=8F=8F=E8=BF=B0=E8=BF=94?=
=?UTF-8?q?=E5=8F=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ProvideServices/GetPageTrackOrderInput.cs | 33 +++++++++++++++++++
.../ProvideServices/TrackPushPullService.cs | 4 +--
.../Aggregates/OrderAggregate/OrderEntity.cs | 12 +++++++
.../Dtos/Order/GetPageTrackOrderInputVO.cs | 29 ++++++++++++++++
.../Repositories/OrderRepository.cs | 7 +++-
5 files changed, 82 insertions(+), 3 deletions(-)
diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs
index 81aa553e..64191392 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs
@@ -17,6 +17,16 @@ public class GetPageTrackOrderInput : PageInfoInput
///
public string? OrderNos { get; set; }
+ ///
+ /// tab标签类型 0 全部, 1 异常 2 预警
+ ///
+ public int TabType { get; set; }
+
+ ///
+ /// 当tab选中 0 默认不传 1 直接写死传值 [1,4] 2 传 [2,4]
+ ///
+ public List? QuestionTypeIds { get; set; }
+
///
/// 创建时间开始
///
@@ -113,5 +123,28 @@ public class TrackOrderDto
///
public string SubSystem { get; set; }
+ ///
+ /// 子系统id
+ ///
public int SubSystemId { get; set; }
+
+ ///
+ /// 问题类型(主数据枚举TrackQuestionType)
+ ///
+ public int QuestionType { get; set; }
+
+ ///
+ /// 问题类型名称
+ ///
+ public string? QuestionTypeName { get; set; }
+
+ ///
+ /// 问题描述(主数据枚举TrackProblemDescription)
+ ///
+ public int ProblemDescription { get; set; }
+
+ ///
+ /// 问题描述名称
+ ///
+ public string? ProblemDescriptionName { get; set; }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs
index 2e1dd08b..53b71e31 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs
@@ -49,9 +49,9 @@ public class TrackPushPullService : ApplicationService
x.OrderNo
}).ToList();
- // 批量获取轨迹
+ // 批量获取轨迹 这里报错了,我先随便给个 写死的主体值
await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync(
- "A012", group.Key.ServiceProviderCode, data,
+ "A012", group.Key.ServiceProviderCode, 42, data,
GlobalConst.TrackRefreshSubscribe, JsonConvert.SerializeObject(group.Key));
}
diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
index 69d5f706..66f704a3 100644
--- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
+++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
@@ -108,6 +108,18 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot
[SugarColumn(ColumnName = "LeaveCountry")]
public string LeaveCountry { get; set; } = null!;
+ ///
+ /// 问题类型(主数据枚举TrackQuestionType)
+ ///
+ [SugarColumn(ColumnName = "QuestionType")]
+ public int QuestionType { get; set; }
+
+ ///
+ /// 问题描述(主数据枚举TrackProblemDescription)
+ ///
+ [SugarColumn(ColumnName = "ProblemDescription")]
+ public int ProblemDescription { get; set; }
+
///
/// 起运港口
///
diff --git a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
index c1b97cc5..99a8d068 100644
--- a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
+++ b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
@@ -18,6 +18,15 @@ namespace SJZY.Track.Domain.Dtos.Order
/////
//public List? OrderNos { get; set; }
+ ///
+ /// 当tab选中 0 默认不传 1 直接写死传值 [1,4] 2 传 [2,4]
+ ///
+ public int TabType { get; set; }
+
+ ///
+ /// 当tab选中 1 直接写死传值 [1,4] 2 传 [2,4]
+ ///
+ public List? QuestionTypeIds { get; set; }
///
/// 单号
@@ -124,5 +133,25 @@ namespace SJZY.Track.Domain.Dtos.Order
/// 轨迹模板Id数组
///
public List? TrackTemplateIds { get; set; }
+
+ ///
+ /// 问题类型(主数据枚举TrackQuestionType)
+ ///
+ public int QuestionType { get; set; }
+
+ ///
+ /// 问题类型名称
+ ///
+ public string? QuestionTypeName { get; set; }
+
+ ///
+ /// 问题描述(主数据枚举TrackProblemDescription)
+ ///
+ public int ProblemDescription { get; set; }
+
+ ///
+ /// 问题描述名称
+ ///
+ public string? ProblemDescriptionName { get; set; }
}
}
diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
index be9cc648..eeeeeb14 100644
--- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
@@ -137,6 +137,7 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
(a, b, c) => a.CreateTime >= input.CreateTimeStart)
.WhereIF((!input.CreateTimeStart.HasValue) && input.CreateTimeEnd.HasValue,
(a, b, c) => a.CreateTime <= input.CreateTimeEnd)
+ .WhereIF(input.TabType>0 && (!input.QuestionTypeIds.IsNullOrEmpty()), (a, b, c) => input.QuestionTypeIds.Contains(a.QuestionType))
.OrderByDescending((a, b, c) => a.CreateTime)
.Select((a, b, c) => new TrackOrderVO
{
@@ -148,6 +149,10 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
.Return("箱/袋单").ElseIF(a.OrderType == 4).Return("FBA订单").End(""),
CustomerShortName = b.Abbreviation,
CustomerCode = b.Code,
+ QuestionType = a.QuestionType,
+ QuestionTypeName = SqlFunc.IF(a.QuestionType == 1).Return("异常").ElseIF(a.QuestionType == 2).Return("预警").End(""),
+ ProblemDescription = a.ProblemDescription,
+ ProblemDescriptionName =SqlFunc.IF(a.ProblemDescription == 1).Return("推送异常").ElseIF(a.ProblemDescription == 2).Return("推送预警").End(""),
//TrackTemplateNames = SqlFunc.Subqueryable()
// .LeftJoin((aa, bb) => aa.TrackTemplateId == bb.Id)
// .Where((aa, bb) => a.Id == aa.OrderId).SelectStringJoin((aa, bb) => bb.Name, ","),
@@ -206,7 +211,7 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
a.TrackTemplateNames = trackTemplateList.Where(b => b.OrderId == a.Id).Select(a => a.Name)
.JoinAsString(",");
- a.TrackTemplateIds = trackTemplateList.Where(b => b.OrderId == a.Id).Select(a => a.TemplateId).ToList();
+ a.TrackTemplateIds = trackTemplateList.Where(b => b.OrderId == a.Id).Where(b => b.TemplateId>0).Select(a => a.TemplateId).ToList();
});
}
From 10a68b817af4deac4a2a5bddbcdba2c227ca5303 Mon Sep 17 00:00:00 2001
From: moyongzhen <2534173414@qq.com>
Date: Tue, 12 Mar 2024 21:23:47 +0800
Subject: [PATCH 4/7] =?UTF-8?q?=E9=87=8D=E6=96=B0=E8=A7=A3=E5=86=B3?=
=?UTF-8?q?=E6=8A=A5=E9=94=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Services/ProvideServices/TrackPushPullService.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs
index 53b71e31..8e32d1c1 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs
@@ -51,7 +51,7 @@ public class TrackPushPullService : ApplicationService
// 批量获取轨迹 这里报错了,我先随便给个 写死的主体值
await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync(
- "A012", group.Key.ServiceProviderCode, 42, data,
+ "A012", group.Key.ServiceProviderCode, data,
GlobalConst.TrackRefreshSubscribe, JsonConvert.SerializeObject(group.Key));
}
From 6bea8224f09417457199af70b09f2e5ced7eb63e Mon Sep 17 00:00:00 2001
From: moyongzhen <2534173414@qq.com>
Date: Wed, 13 Mar 2024 09:34:42 +0800
Subject: [PATCH 5/7] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=8F=82=E6=95=B0?=
=?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ProvideServices/GetPageTrackOrderInput.cs | 19 +++++++++++++++++--
.../Dtos/Order/GetPageTrackOrderInputVO.cs | 13 +++++++++----
.../Repositories/OrderRepository.cs | 13 ++++++++++++-
3 files changed, 38 insertions(+), 7 deletions(-)
diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs
index 64191392..9bd8fcc9 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs
@@ -22,10 +22,20 @@ public class GetPageTrackOrderInput : PageInfoInput
///
public int TabType { get; set; }
+ /////
+ ///// 当tab选中 0 默认不传 1 直接写死传值 [1,4] 2 传 [2,4]
+ /////
+ //public List? QuestionTypeIds { get; set; }
+
///
- /// 当tab选中 0 默认不传 1 直接写死传值 [1,4] 2 传 [2,4]
+ /// 订单类型
///
- public List? QuestionTypeIds { get; set; }
+ public int? TrackOrderType { get; set; }
+
+ ///
+ /// 客户id
+ ///
+ public int? CustomerId { get; set; }
///
/// 创建时间开始
@@ -83,6 +93,11 @@ public class TrackOrderDto
///
public string? CustomerCode { get; set; }
+ ///
+ /// 客户id
+ ///
+ public int CustomerId { get; set; }
+
///
/// 订单明细(json)
///
diff --git a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
index 99a8d068..b0abd5b0 100644
--- a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
+++ b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
@@ -23,10 +23,10 @@ namespace SJZY.Track.Domain.Dtos.Order
///
public int TabType { get; set; }
- ///
- /// 当tab选中 1 直接写死传值 [1,4] 2 传 [2,4]
- ///
- public List? QuestionTypeIds { get; set; }
+ /////
+ ///// 当tab选中 1 直接写死传值 [1,4] 2 传 [2,4]
+ /////
+ //public List? QuestionTypeIds { get; set; }
///
/// 单号
@@ -84,6 +84,11 @@ namespace SJZY.Track.Domain.Dtos.Order
///
public string? CustomerCode { get; set; }
+ ///
+ /// 客户id
+ ///
+ public int CustomerId { get; set; }
+
/////
///// 订单明细(json)
/////
diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
index eeeeeb14..43de6ccb 100644
--- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
@@ -5,6 +5,7 @@ using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
using SJZY.Track.Domain.Dtos.Order;
using SJZY.Track.Domain.VEntities;
using SJZY.Track.Repository.VData.Entitys;
+using SqlSugar;
namespace SJZY.Track.Repository.Repositories;
@@ -121,10 +122,19 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
public async Task> GetPageTrackOrder(GetPageTrackOrderInputVO input)
{
List orderNoList = new List();
+ List questionTypeIds = new List();
if (!input.OrderNos.IsNullOrWhiteSpace())
{
orderNoList = input.OrderNos.Split(new char[] { ',', ',', ':', ':' }).ToList();
}
+ if (input.TabType==1)
+ {
+ questionTypeIds= new List { 1, 4 };
+ }
+ else if (input.TabType==2)
+ {
+ questionTypeIds= new List { 2, 4 };
+ }
var pageList = await Context.Queryable()
.LeftJoin((a, b) => a.CustomId == b.Id && b.IsDeleted == false)
@@ -137,7 +147,7 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
(a, b, c) => a.CreateTime >= input.CreateTimeStart)
.WhereIF((!input.CreateTimeStart.HasValue) && input.CreateTimeEnd.HasValue,
(a, b, c) => a.CreateTime <= input.CreateTimeEnd)
- .WhereIF(input.TabType>0 && (!input.QuestionTypeIds.IsNullOrEmpty()), (a, b, c) => input.QuestionTypeIds.Contains(a.QuestionType))
+ .WhereIF(input.TabType>0 && (!questionTypeIds.IsNullOrEmpty()), (a, b, c) => questionTypeIds.Contains(a.QuestionType))
.OrderByDescending((a, b, c) => a.CreateTime)
.Select((a, b, c) => new TrackOrderVO
{
@@ -149,6 +159,7 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
.Return("箱/袋单").ElseIF(a.OrderType == 4).Return("FBA订单").End(""),
CustomerShortName = b.Abbreviation,
CustomerCode = b.Code,
+ CustomerId = a.CustomId,
QuestionType = a.QuestionType,
QuestionTypeName = SqlFunc.IF(a.QuestionType == 1).Return("异常").ElseIF(a.QuestionType == 2).Return("预警").End(""),
ProblemDescription = a.ProblemDescription,
From f19ba6c01a3a760fefc74773f448759d5ad2a1d0 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, 13 Mar 2024 10:08:41 +0800
Subject: [PATCH 6/7] =?UTF-8?q?add=20=E5=88=A0=E9=99=A4=E5=BC=95=E5=8F=91?=
=?UTF-8?q?=E8=BD=A8=E8=BF=B9=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../EventHandlers/UpdateOrderTrackEventHandler.cs | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/SJZY.Track.Application/EventHandlers/UpdateOrderTrackEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/UpdateOrderTrackEventHandler.cs
index f2fca16a..72316cef 100644
--- a/src/SJZY.Track.Application/EventHandlers/UpdateOrderTrackEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/UpdateOrderTrackEventHandler.cs
@@ -24,12 +24,15 @@ public class UpdateOrderTrackEventHandler : ITransientDependency, ICapSubscribe
{
if (@event.TrackTime == default)
{
+ if (order.LatestTrackTime == null) return;
// 删除全部轨迹导致的重置行为
order.ResetTrackInfo();
}
- else if (@event.TrackTime == order.LatestTrackTime) return;
+ else if (order.LatestTrackTime != null &&
+ order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0)) ==
+ @event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone))) return;
}
- else // upsert引发的更新,需要校验发生时间是否大于最新时间
+ else // upsert引发的更新
{
if (order.LatestTrackTime != null &&
order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0)) >
From 953bca93f54b51dcf3768ba14bfa2e37f23df645 Mon Sep 17 00:00:00 2001
From: moyongzhen <2534173414@qq.com>
Date: Wed, 13 Mar 2024 10:16:27 +0800
Subject: [PATCH 7/7] =?UTF-8?q?=E8=BD=A8=E8=BF=B9=E8=AE=A2=E5=8D=95?=
=?UTF-8?q?=E5=8F=82=E6=95=B0=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Dtos/ProvideServices/GetPageTrackOrderInput.cs | 10 +++++-----
.../Dtos/Order/GetPageTrackOrderInputVO.cs | 10 ++++++++++
.../Repositories/OrderRepository.cs | 7 ++++++-
3 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs
index 9bd8fcc9..c6a143df 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs
@@ -22,11 +22,6 @@ public class GetPageTrackOrderInput : PageInfoInput
///
public int TabType { get; set; }
- /////
- ///// 当tab选中 0 默认不传 1 直接写死传值 [1,4] 2 传 [2,4]
- /////
- //public List? QuestionTypeIds { get; set; }
-
///
/// 订单类型
///
@@ -37,6 +32,11 @@ public class GetPageTrackOrderInput : PageInfoInput
///
public int? CustomerId { get; set; }
+ /////
+ ///// 当tab选中 0 默认不传 1 直接写死传值 [1,4] 2 传 [2,4]
+ /////
+ //public List? QuestionTypeIds { get; set; }
+
///
/// 创建时间开始
///
diff --git a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
index b0abd5b0..788c9fb8 100644
--- a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
+++ b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
@@ -28,6 +28,16 @@ namespace SJZY.Track.Domain.Dtos.Order
/////
//public List? QuestionTypeIds { get; set; }
+ ///
+ /// 订单类型
+ ///
+ public int? TrackOrderType { get; set; }
+
+ ///
+ /// 客户id
+ ///
+ public int? CustomerId { get; set; }
+
///
/// 单号
///
diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
index 43de6ccb..e160ec0b 100644
--- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
@@ -123,6 +123,7 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
{
List orderNoList = new List();
List questionTypeIds = new List();
+ int ques = 0;
if (!input.OrderNos.IsNullOrWhiteSpace())
{
orderNoList = input.OrderNos.Split(new char[] { ',', ',', ':', ':' }).ToList();
@@ -130,10 +131,12 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
if (input.TabType==1)
{
questionTypeIds= new List { 1, 4 };
+ ques = questionTypeIds.Sum();
}
else if (input.TabType==2)
{
questionTypeIds= new List { 2, 4 };
+ ques = questionTypeIds.Sum();
}
var pageList = await Context.Queryable()
@@ -147,7 +150,9 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
(a, b, c) => a.CreateTime >= input.CreateTimeStart)
.WhereIF((!input.CreateTimeStart.HasValue) && input.CreateTimeEnd.HasValue,
(a, b, c) => a.CreateTime <= input.CreateTimeEnd)
- .WhereIF(input.TabType>0 && (!questionTypeIds.IsNullOrEmpty()), (a, b, c) => questionTypeIds.Contains(a.QuestionType))
+ .WhereIF(input.CustomerId>0, (a, b, c) => a.CustomId==input.CustomerId)
+ .WhereIF(input.TrackOrderType>0, (a, b, c) => a.OrderType==input.TrackOrderType)
+ .WhereIF(input.TabType>0 && (!questionTypeIds.IsNullOrEmpty()), (a, b, c) => (a.QuestionType&ques)>0)
.OrderByDescending((a, b, c) => a.CreateTime)
.Select((a, b, c) => new TrackOrderVO
{