From 5913929dcca5ffa313b532829c1ce4a636cda281 Mon Sep 17 00:00:00 2001
From: hardstylewyl <827778732@qq.com>
Date: Fri, 10 Jan 2025 11:17:52 +0800
Subject: [PATCH] =?UTF-8?q?update:=E8=BD=A8=E8=BF=B9=E6=96=B0=E5=A2=9E/?=
=?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=94=AF=E6=8C=81=E6=8C=89=E6=89=A9=E5=B1=95?=
=?UTF-8?q?=E5=86=85=E5=AE=B9=E6=9F=90=E4=B8=AA=E5=AD=97=E6=AE=B5=E6=AF=94?=
=?UTF-8?q?=E8=BE=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ProvideServices/BatchUpsertTrackInput.cs | 5 ++++
.../Dtos/ProvideServices/UpsertTrackInput.cs | 5 ++++
.../EventHandlers/TrackPushEventHandler.cs | 28 ++++++++++---------
.../EventHandlers/TrackUpsertEventHandler.cs | 18 +++++++++---
.../Services/ProvideServices/TrackService.cs | 1 +
5 files changed, 40 insertions(+), 17 deletions(-)
diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs
index 90e159cc..276ad83b 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs
@@ -120,6 +120,11 @@ public class BatchUpsertTrackInput : OrderNosInfo
[Range(-12, 12)]
public float? DestinationTimeZone { get; set; }
+ ///
+ /// 重复的情况下,用什么比较
+ ///
+ public string? CompareFields { get; set; }
+
///
/// 扩展信息字段,用与轨迹推送的附加字段
///
diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs
index 2b15e904..d7679cda 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs
@@ -129,6 +129,11 @@ public class UpsertTrackInput : OrderNoInfo
///
public int OptionUserId { get; set; }
+ ///
+ /// 重复的情况下,用什么比较
+ ///
+ public string? CompareFields { get; set; }
+
///
/// 扩展信息字段,用与轨迹推送的附加字段
///
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs
index eff95d65..109f96a5 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs
@@ -1,7 +1,7 @@
+using System.Text.Json;
using DotNetCore.CAP;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.InterfaceRelay.Application.Contracts;
using SJZY.Track.Application.Contract.Dtos.TrackPush;
@@ -308,14 +308,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
.WhereIf(!compareFields.IsNullOrWhiteSpace(), x =>
{
if (x["extra"] == null || log.Extra == null) return false;
- // todo:这里也改成统一使用system txt json,不用newtonsoft了
- var extra = JObject.FromObject(x["extra"]!);
- var curExtra = JObject.FromObject(log.Extra!);
- if (extra.TryGetValue(compareFields!, out var value) && curExtra.TryGetValue(compareFields!, out var curValue) )
- {
- return value == curValue;
- }
- return false;
+ return EqExtraByFieldForTextJson(x["extra"]!, DeserializeForTextJson(log.Extra)!, compareFields!);
})
.FirstOrDefault();
if (old != null)
@@ -323,6 +316,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
body.Data.Remove(old);
}
}
+
body!.Data.Add(cur);
}
}
@@ -383,10 +377,18 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
return string.IsNullOrWhiteSpace(json) ? default : System.Text.Json.JsonSerializer.Deserialize(json);
}
- private Dictionary? GetExtraDictForTextJson(string? extraStr)
+ //比较扩展中的某个字段的相等性
+ private bool EqExtraByFieldForTextJson(object a, object b, string fieldName)
{
- return string.IsNullOrWhiteSpace(extraStr)
- ? null
- : System.Text.Json.JsonSerializer.Deserialize>(extraStr);
+ if (a is not JsonElement aJsonElement || b is not JsonElement bJsonElement)
+ return false;
+
+ if (aJsonElement.TryGetProperty(fieldName, out var aValue)
+ && bJsonElement.TryGetProperty(fieldName, out var bValue))
+ {
+ return aValue.ToString() == bValue.ToString();
+ }
+
+ return false;
}
}
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index cfdba588..3bf950a9 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -1,4 +1,5 @@
using System.Diagnostics;
+using System.Text.Json;
using DotNetCore.CAP;
using Microsoft.Extensions.Logging;
using SJZY.Expand.ABP.Core.Logger;
@@ -237,7 +238,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
{
var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray();
- // todo:条件命名写反了
// important:轨迹code相同,时间、发生地不同的,可能存在多条!!
var tracks = await _trackDetailsEsRepository.GetListAsync(orderIds, @event.TrackCode, true);
@@ -282,7 +282,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
return false;
}
- return oldValue == compareValue;
+ return EqJsonElementObject(oldValue, compareValue);
}).ToList();
}
@@ -445,10 +445,20 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
return track;
}
- private Dictionary? GetExtraDictForTextJson(string? extraStr)
+ private Dictionary? GetExtraDictForTextJson(string? extraStr)
{
return string.IsNullOrWhiteSpace(extraStr)
? null
- : System.Text.Json.JsonSerializer.Deserialize>(extraStr);
+ : System.Text.Json.JsonSerializer.Deserialize>(extraStr);
+ }
+
+ private bool EqJsonElementObject(object? a, object? b)
+ {
+ if (a is JsonElement aJsonElement && b is JsonElement bJsonElement)
+ {
+ return aJsonElement.ToString() == bJsonElement.ToString();
+ }
+
+ return false;
}
}
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
index e13a1a30..0af5624e 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
@@ -519,6 +519,7 @@ public partial class TrackService : ApplicationService, ITrackService
TrackPlacePostcode = input.TrackPlacePostcode,
EstimatedDeliveryDate = input.EstimatedDeliveryDate,
DestinationTimeZone = input.DestinationTimeZone,
+ CompareFields = input.CompareFields,
Extra = input.Extra,
ForcedPush = input.ForcedPush,
IsToMq = input.IsToMq,