From 9929331063761809622542e1b24df855b316d084 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Wed, 18 Dec 2024 16:05:05 +0800 Subject: [PATCH] =?UTF-8?q?=20update:=20=E8=B0=83=E6=95=B4=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9=E6=98=8E=E7=BB=86=E4=B8=AD=E6=89=A9=E5=B1=95=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=AD=98=E5=82=A8=E7=B1=BB=E5=9E=8B=20Dictionary=20=3D>=20string=EF=BC=8C=E6=B6=89=E5=8F=8A=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E4=BD=93=EF=BC=8CES=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProvideServices/BatchUpsertTrackInput.cs | 2 +- .../Dtos/ProvideServices/GetTrackOutput.cs | 2 +- .../Dtos/ProvideServices/UpsertTrackInput.cs | 2 +- .../Events/TrackChangeEto.cs | 2 +- .../Events/TrackPushEto.cs | 2 +- .../Events/TrackPushEvent.cs | 2 +- .../Events/TrackUpsertEvent.cs | 2 +- .../EventHandlers/TrackPushEventHandler.cs | 98 +++++++++++++++---- .../TrackDetailsIndex.cs | 2 +- .../Repositories/TrackDetailsEsRepository.cs | 1 - 10 files changed, 86 insertions(+), 29 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs index a8ced808..98bab43c 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs @@ -123,5 +123,5 @@ public class BatchUpsertTrackInput : OrderNosInfo /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public Dictionary? Extra { get; set; } + public string? Extra { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs index 59a4065e..fca510a7 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs @@ -104,5 +104,5 @@ public class TrackDetail /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public Dictionary? Extra { get; set; } + public string? Extra { 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 22762d6c..dcda0b0f 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs @@ -127,5 +127,5 @@ public class UpsertTrackInput : OrderNoInfo /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public Dictionary? Extra { get; set; } + public string? Extra { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Events/TrackChangeEto.cs b/src/SJZY.Track.Application.Contract/Events/TrackChangeEto.cs index 5f49e9ff..6319446e 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackChangeEto.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackChangeEto.cs @@ -132,5 +132,5 @@ public class TrackChangeEto /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public Dictionary? Extra { get; set; } + public string? Extra { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Events/TrackPushEto.cs b/src/SJZY.Track.Application.Contract/Events/TrackPushEto.cs index 3c7bdffd..01a421fe 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackPushEto.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackPushEto.cs @@ -155,5 +155,5 @@ public class TrackPushEto /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public Dictionary? Extra { get; set; } + public string? Extra { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs index ea168d9d..86581528 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs @@ -73,5 +73,5 @@ public struct SystemPushStruct /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public Dictionary? Extra { get; set; } + public string? Extra { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs index d08a1171..d6e2051b 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs @@ -144,7 +144,7 @@ public class TrackUpsertEvent /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public Dictionary? Extra { get; set; } + public string? Extra { get; set; } public override string ToString() { diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs index 0bb18a1e..6180b1bd 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs @@ -1,3 +1,4 @@ +using System.Text.Json; using DotNetCore.CAP; using Microsoft.Extensions.Options; using Newtonsoft.Json; @@ -128,7 +129,10 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode); if (config == null) return; - var tracks = await _trackDetailsEsRepository.GetListAsync(@event.OrderIds, @event.TrackCode); + var tracks = await _trackDetailsEsRepository.GetListAsync(@event.OrderIds, new List() + { + @event.TrackCode + }); tracks = tracks.DistinctBy(x => x.OrderId).ToList(); // 防止重复推送 if (tracks.Count == 0) return; // 一个能推的轨迹都不存在 @@ -254,14 +258,14 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe var dict = new Dictionary() { // 推真实的发生地和发生时间(时间是计算后的) - { "Location", log.TrackPlace }, - { "Date", trackDateStr }, - { "TimeZone", config.TrackTimeZone ?? log.TrackTimeZone }, - { "Description", config.TrackEnContentValue }, - { "DescriptionCn", config.TrackContentValue }, - { "Code", config.TrackContentCodeValue }, - { "Status", config.TrackStatusValue }, - { "Extra", config.ExpandFieldsValue } + // { "location", log.TrackPlace }, + // { "date", trackDateStr }, + // { "timeZone", config.TrackTimeZone ?? log.TrackTimeZone }, + // { "description", config.TrackEnContentValue }, + // { "descriptionCn", config.TrackContentValue }, + // { "code", config.TrackContentCodeValue }, + // { "status", config.TrackStatusValue }, + // { "extra", config.ExpandFieldsValue } }; body.Data.Add(dict); log.PushContent = body.ToJson(); @@ -293,15 +297,15 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe }; var dict = new Dictionary() { - // 推真实的发生地和发生时间(时间是计算后的) - { "Location", log.TrackPlace }, - { "Date", trackDateStr }, - { "TimeZone", config.TrackTimeZone ?? log.TrackTimeZone }, - { "Description", config.TrackEnContentValue }, - { "DescriptionCn", config.TrackContentValue }, - { "Code", config.TrackContentCodeValue }, - { "Status", config.TrackStatusValue }, - { "Extra", config.ExpandFieldsValue } + // // 推真实的发生地和发生时间(时间是计算后的) + // { "location", log.TrackPlace }, + // { "date", trackDateStr }, + // { "timeZone", config.TrackTimeZone ?? log.TrackTimeZone }, + // { "description", config.TrackEnContentValue }, + // { "descriptionCn", config.TrackContentValue }, + // { "code", config.TrackContentCodeValue }, + // { "status", config.TrackStatusValue }, + // { "extra", config.ExpandFieldsValue } }; body.Data.Add(dict); @@ -395,12 +399,16 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe /// 要扩展的参数字典 /// 来源扩展字段的参数名 /// - private void FillExtraParam(Dictionary? trackExtra, Dictionary? dict, List? paramNames) + private void FillExtraParam(string? trackExtraStr, Dictionary? dict, List? paramNames) { if (paramNames == null || paramNames.Count == 0) return; if (dict == null) return; - if (trackExtra == null || trackExtra.Count == 0) return; + if (string.IsNullOrWhiteSpace(trackExtraStr)) return; + + var trackExtra = ExtractTrackExtraDict(trackExtraStr); + + if (trackExtra.Count == 0) return; foreach (var item in trackExtra.Where(x => x.Value != null && paramNames.Contains(x.Key))) { @@ -408,4 +416,54 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe } } + + private Dictionary ExtractTrackExtraDict(string trackExtraStr) + { + var dict = new Dictionary(); + var trackExtra = JsonConvert.DeserializeObject>(trackExtraStr); + if (trackExtra == null) return dict; + foreach (var pair in trackExtra) + { + if (pair.Value is JsonElement jEl) + { + object? objVal = null; + switch (jEl.ValueKind) + { + case JsonValueKind.String: + objVal = jEl.GetString(); + // 处理字符串值 + break; + case JsonValueKind.Number: + objVal = jEl.GetDouble(); + // 处理数值 + break; + case JsonValueKind.True: + case JsonValueKind.False: + objVal = jEl.GetBoolean(); + // 处理布尔值 + break; + case JsonValueKind.Object: + // 处理对象 + break; + case JsonValueKind.Array: + // 处理数组 + break; + case JsonValueKind.Null: + // 处理空值 + break; + default: + // 处理未知类型 + break; + } + + if (objVal == null) continue; + dict.TryAdd(pair.Key, objVal); + continue; + } + + dict.TryAdd(pair.Key, pair.Value); + } + + return dict; + } } diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs index 60eed6a3..02cb6b51 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs @@ -190,5 +190,5 @@ public class TrackDetailsIndex : IdBaseIndex /// /// 扩展信息字段,用与轨迹推送的附加字段 /// - public Dictionary? Extra { get; set; } + public string? Extra { get; set; } } diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs index e25c9b89..f0c8f048 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsEsRepository.cs @@ -3,7 +3,6 @@ using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Expand.ElasticSearch.Services; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Consts; -using SJZY.Track.Domain.Dtos.TrackContents; using SJZY.Track.Domain.Enums; namespace SJZY.Track.Repository.Repositories;