diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs index a90592fe..d695a433 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs @@ -356,14 +356,22 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe body = DeserializeForTextJson(history.PushContent); if (config.IsAllPushWithLatest) { + //同code同比较字段保证唯一 var old = body!.Data - .Where(x => x["code"] == cur["code"]) - .WhereIf(!compareFields.IsNullOrWhiteSpace(), x => + .Where(x => + { + //反序列化出的JsonElement和字典字符串类型做比较 + var a = ((JsonElement) x["code"]!).GetString(); + var b = cur["code"]!.ToString(); //tips: 需要要将object类型的字符串转为string类型,否则使用的是引用比较,反序列化出的string一定和本地string引用不同 + return a == b; + }).WhereIf(!compareFields.IsNullOrWhiteSpace(), x => { if (x["extra"] == null || log.Extra == null) return false; - return EqExtraByFieldForTextJson(x["extra"]!, DeserializeForTextJson(log.Extra)!, compareFields!); + return EqExtraByFieldForTextJson(x["extra"]!, DeserializeForTextJson(log.Extra), compareFields!); }) .FirstOrDefault(); + + if (old != null) { body.Data.Remove(old);