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/UpdateOrderInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpdateOrderInput.cs index d9d6d235..a37ab135 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpdateOrderInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpdateOrderInput.cs @@ -81,7 +81,7 @@ public class UpdateOrderInput : OrderNoInfo /// /// 模板code /// - public List TemplateCodes { get; set; } + public List? TemplateCodes { get; set; } } public class PullConfigInfo 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.Contract/SJZY.Track.Application.Contract.csproj b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj index f8a1ce47..4782626f 100644 --- a/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj +++ b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj @@ -5,7 +5,7 @@ net7.0 True - 7.0.5 + 7.0.7 True 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.Application/Services/ProvideServices/OrderService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs index d529f83d..ed613ffb 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs @@ -76,7 +76,7 @@ public partial class OrderService : ApplicationService, IOrderService order.OrderFlights = ObjectMapper.Map, List>(input.FlightInfos); order.OrderPullStatus = BuiltOrderPullStatus(input.PullConfigInfos); order.OrderPlatformNumbers = BuiltOrderPlatformNumbers(input.PullConfigInfos); - order.TemplateCodes = string.Join(',', input.TemplateCodes); + order.TemplateCodes = input.TemplateCodes == null ? null : string.Join(',', input.TemplateCodes); var orderId = await _orderRepository.CreateOrderAsync(order); @@ -131,7 +131,7 @@ public partial class OrderService : ApplicationService, IOrderService order.OrderFlights = ObjectMapper.Map, List>(input.FlightInfos); order.OrderPullStatus = BuiltOrderPullStatus(input.PullConfigInfos); order.OrderPlatformNumbers = BuiltOrderPlatformNumbers(input.PullConfigInfos); - order.TemplateCodes = string.Join(',', input.TemplateCodes); + order.TemplateCodes = input.TemplateCodes == null ? null : string.Join(',', input.TemplateCodes); await _orderRepository.UpdateOrderAsync(order); } 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;