diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPull/EditTrackPullConfigInput.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPull/EditTrackPullConfigInput.cs index 10f5c720..f60beeb4 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/TrackPull/EditTrackPullConfigInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPull/EditTrackPullConfigInput.cs @@ -37,7 +37,7 @@ public class EditTrackPullConfigInput /// /// 拉取轨迹时区 /// - public string? TackTimeZoneName { get; set; } + public string? TrackTimeZoneName { get; set; } /// /// 拉取轨迹内容代码 diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackPullParamConfigDto.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackPullParamConfigDto.cs index 39de6d21..b8f22ac1 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackPullParamConfigDto.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPull/TrackPullParamConfigDto.cs @@ -10,7 +10,7 @@ public class TrackPullParamConfigDto /// /// 轨迹时区参数名 /// - public string TackTimeZoneName { get; set; } = null!; + public string TrackTimeZoneName { get; set; } = null!; /// /// 轨迹代码参数名 @@ -37,11 +37,6 @@ public class TrackPullParamConfigDto /// public string TrackTimeName { get; set; } = null!; - /// - /// 轨迹发生时间参数名 - /// - public string TrackTimeZoneName { get; set; } = null!; - /// /// 订单数组路径 /// diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/EditTrackPushConfigInput.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/EditTrackPushConfigInput.cs index ebd8e0be..20473d85 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/EditTrackPushConfigInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/EditTrackPushConfigInput.cs @@ -42,7 +42,7 @@ public class EditTrackPushConfigInput /// /// 推送轨迹时区 /// - public string? TackTimeZoneName { get; set; } + public string? TrackTimeZoneName { get; set; } /// /// 推送轨迹内容代码 diff --git a/src/SJZY.Track.Application.Contract/Services/ITrackPullCacheService.cs b/src/SJZY.Track.Application.Contract/Services/ITrackPullCacheService.cs index 24a9ecb5..7eb93992 100644 --- a/src/SJZY.Track.Application.Contract/Services/ITrackPullCacheService.cs +++ b/src/SJZY.Track.Application.Contract/Services/ITrackPullCacheService.cs @@ -11,4 +11,13 @@ public interface ITrackPullCacheService /// 服务商id /// Task GetPullConfigAsync(int subSystemId, int serviceProviderId); + + /// + /// 设置拉取配置缓存 + /// + /// + /// 子系统id + /// 服务商id + /// + Task SetPullConfigAsync(int? id = null, int? subSystemId = null, int? serviceProviderId = null); } \ No newline at end of file diff --git a/src/SJZY.Track.Application/AutoMapper/TrackPullAutoMapperProfile.cs b/src/SJZY.Track.Application/AutoMapper/TrackPullAutoMapperProfile.cs index 02553894..c2409eea 100644 --- a/src/SJZY.Track.Application/AutoMapper/TrackPullAutoMapperProfile.cs +++ b/src/SJZY.Track.Application/AutoMapper/TrackPullAutoMapperProfile.cs @@ -1,6 +1,7 @@ using AutoMapper; using SJZY.Track.Application.Contract.Dtos.TrackPull; using SJZY.Track.Domain.Aggregates.TrackPullAggregate; +using SJZY.Track.Domain.Dtos.TrackPull; using Volo.Abp.AutoMapper; namespace SJZY.Track.Application.AutoMapper; @@ -15,5 +16,7 @@ public class TrackPullAutoMapperProfile : Profile CreateMap(MemberList.None) .ForMember(dest => dest.TrackKeyword, opt => opt.MapFrom(src => string.Join(',', src.TrackKeywords))) .ForMember(dest => dest.TrackKeywordReverse, opt => opt.MapFrom(src => string.Join(',', src.TrackKeywordReverses))); + CreateMap(MemberList.None); + CreateMap(MemberList.None); } } \ No newline at end of file diff --git a/src/SJZY.Track.Application/Services/TrackPull/TrackPullCacheService.cs b/src/SJZY.Track.Application/Services/TrackPull/TrackPullCacheService.cs new file mode 100644 index 00000000..0367196b --- /dev/null +++ b/src/SJZY.Track.Application/Services/TrackPull/TrackPullCacheService.cs @@ -0,0 +1,53 @@ +using SJZY.Expand.ABP.Core; +using SJZY.Track.Application.Contract.Dtos.TrackPull; +using SJZY.Track.Application.Contract.Services; +using SJZY.Track.Domain.Aggregates.TrackPullAggregate; +using SJZY.Track.Domain.Dtos.TrackPull; +using System.Linq.Expressions; +using Volo.Abp.DependencyInjection; + +namespace SJZY.Track.Application.Services.TrackPull; + +public class TrackPullCacheService : ApplicationService, ITrackPullCacheService, ITransientDependency +{ + private readonly ITrackPullConfigRepository _trackPullConfigRepository; + + private string RedisKey(int subSystemId, int serviceProviderId) => GlobalConst.TrackPushKeyPrefix + subSystemId + ":" + serviceProviderId; + + public TrackPullCacheService(ITrackPullConfigRepository trackPullConfigRepository) + { + _trackPullConfigRepository = trackPullConfigRepository; + } + + [NonAction] + public async Task GetPullConfigAsync(int subSystemId, int serviceProviderId) + { + var data = await RedisHelper.Client.GetAsync(RedisKey(subSystemId, serviceProviderId)); + + data ??= await SetPullConfigAsync(subSystemId: subSystemId, serviceProviderId: serviceProviderId); + + return data; + } + + [NonAction] + public async Task SetPullConfigAsync(int? id = null, int? subSystemId = null, int? serviceProviderId = null) + { + var data = new TrackPullConfigDto(); + + Expression> exp = x => id.HasValue ? x.Id == id : x.SubSystemId == subSystemId && x.ServiceProviderId == serviceProviderId; + var trackPullConfigEntity = await _trackPullConfigRepository.GetFirstAsync(exp); + if (trackPullConfigEntity == null) return data; + + var trackPullConfigDetail = await _trackPullConfigRepository.GetDetailAsync(trackPullConfigEntity.Id); + if (trackPullConfigDetail is null) return data; + var trackPullContentList = await _trackPullConfigRepository.GetContentListCacheAsync(trackPullConfigEntity.Id); + if (trackPullContentList.Count == 0) return data; + + data.ParamConfig = ObjectMapper.Map(trackPullConfigDetail); + data.ContentConfigs = ObjectMapper.Map, List>(trackPullContentList); + + await RedisHelper.Client.SetAsync(RedisKey(trackPullConfigEntity.SubSystemId, trackPullConfigEntity.ServiceProviderId), data, 86400); + + return data; + } +} \ No newline at end of file diff --git a/src/SJZY.Track.Application/Services/TrackPull/TrackPullService.cs b/src/SJZY.Track.Application/Services/TrackPull/TrackPullService.cs index 7161b54c..90f6bbcb 100644 --- a/src/SJZY.Track.Application/Services/TrackPull/TrackPullService.cs +++ b/src/SJZY.Track.Application/Services/TrackPull/TrackPullService.cs @@ -3,9 +3,9 @@ using Microsoft.Extensions.Localization; using SJZY.Expand.ABP.Core.Localization; using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Track.Application.Contract.Dtos.TrackPull; +using SJZY.Track.Application.Contract.Services; using SJZY.Track.Application.Localization; using SJZY.Track.Domain.Aggregates.TrackPullAggregate; -using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate; using SJZY.Track.Domain.Dtos.Common; using SJZY.Track.Domain.Dtos.TrackPull; using SqlSugar; @@ -22,16 +22,16 @@ public class TrackPullService : ApplicationService, ITransientDependency { private readonly IStringLocalizer _stringLocalizer; private readonly ITrackPullConfigRepository _trackPullConfigRepository; - private readonly ITrackTemplateRepository _trackTemplateRepository; + private readonly ITrackPullCacheService _trackPullCacheService; public TrackPullService( IStringLocalizer stringLocalizer, ITrackPullConfigRepository trackPullConfigRepository, - ITrackTemplateRepository trackTemplateRepository) + ITrackPullCacheService trackPullCacheService) { _stringLocalizer = stringLocalizer; _trackPullConfigRepository = trackPullConfigRepository; - _trackTemplateRepository = trackTemplateRepository; + _trackPullCacheService = trackPullCacheService; } /// @@ -104,15 +104,19 @@ public class TrackPullService : ApplicationService, ITransientDependency var trackPullEntity = ObjectMapper.Map(input); var trackPullParamsEntity = ObjectMapper.Map(input); + int id = 0; + using (var ts = TransactionScopeHelper.Create()) { - int id = await _trackPullConfigRepository.InsertReturnIdentityAsync(trackPullEntity); + id = await _trackPullConfigRepository.InsertReturnIdentityAsync(trackPullEntity); trackPullParamsEntity.PullOrPushConfigId = id; await _trackPullConfigRepository.InsertParamsAsync(trackPullParamsEntity); ts.Complete(); } + + await _trackPullCacheService.SetPullConfigAsync(id); } break; @@ -132,6 +136,8 @@ public class TrackPullService : ApplicationService, ITransientDependency ts.Complete(); } + + await _trackPullCacheService.SetPullConfigAsync(input.Id); } break; @@ -156,7 +162,7 @@ public class TrackPullService : ApplicationService, ITransientDependency } /// - /// 轨迹拉取配置内容修改 + /// 轨迹拉取配置内容编辑 /// /// /// @@ -193,6 +199,7 @@ public class TrackPullService : ApplicationService, ITransientDependency var entity = ObjectMapper.Map(input); await _trackPullConfigRepository.InsertContentAsync(entity); + await _trackPullCacheService.SetPullConfigAsync(input.TrackPullConfigId); break; } @@ -205,6 +212,7 @@ public class TrackPullService : ApplicationService, ITransientDependency ObjectMapper.Map(input, oldTrackPullContentEntity); await _trackPullConfigRepository.UpdateContentAsync(oldTrackPullContentEntity); + await _trackPullCacheService.SetPullConfigAsync(input.TrackPullConfigId); break; } diff --git a/src/SJZY.Track.Application/Validations/TrackPull/EditTrackPullConfigInputValidation.cs b/src/SJZY.Track.Application/Validations/TrackPull/EditTrackPullConfigInputValidation.cs index 988f801b..50beea14 100644 --- a/src/SJZY.Track.Application/Validations/TrackPull/EditTrackPullConfigInputValidation.cs +++ b/src/SJZY.Track.Application/Validations/TrackPull/EditTrackPullConfigInputValidation.cs @@ -48,7 +48,7 @@ public class EditTrackPullConfigInputValidation : AbstractValidator x.ParseMethod == 1, () => { - RuleFor(x => x.TackTimeZoneName).NotEmpty().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotEmpty, nameof(EditTrackPullConfigInput.TackTimeZoneName)]); + RuleFor(x => x.TrackTimeZoneName).NotEmpty().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotEmpty, nameof(EditTrackPullConfigInput.TrackTimeZoneName)]); RuleFor(x => x.TrackContentCodeName).NotEmpty().WithMessage(stringLocalizer[SjzyBasicLocalization.Validation_NotEmpty, nameof(EditTrackPullConfigInput.TrackContentCodeName)]); diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPullAggregate/ITrackPullConfigRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackPullAggregate/ITrackPullConfigRepository.cs index 606f813f..c21eef77 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackPullAggregate/ITrackPullConfigRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackPullAggregate/ITrackPullConfigRepository.cs @@ -19,6 +19,13 @@ public interface ITrackPullConfigRepository : IBasicRepository Task> GetContentPageAsync(GetTrackPullContentPageInputVO input); + /// + /// 轨迹拉取配置内容集合(缓存使用) + /// + /// + /// + Task> GetContentListCacheAsync(int trackPullConfigId); + /// /// 轨迹拉取配置详情 /// diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPullAggregate/TrackPushPullParamsConfigEntity.cs b/src/SJZY.Track.Domain/Aggregates/TrackPullAggregate/TrackPushPullParamsConfigEntity.cs index 785f9979..a603ad65 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackPullAggregate/TrackPushPullParamsConfigEntity.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackPullAggregate/TrackPushPullParamsConfigEntity.cs @@ -39,8 +39,8 @@ public class TrackPushPullParamsConfigEntity : IFullAuditedBasicEntitys, IEntity /// /// 轨迹时区参数名 /// - [SugarColumn(ColumnName = "TackTimeZoneName")] - public string TackTimeZoneName { get; set; } + [SugarColumn(ColumnName = "TrackTimeZoneName")] + public string TrackTimeZoneName { get; set; } /// /// 轨迹代码参数名 diff --git a/src/SJZY.Track.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs b/src/SJZY.Track.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs index c8b3934d..c52c081b 100644 --- a/src/SJZY.Track.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs +++ b/src/SJZY.Track.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs @@ -42,7 +42,7 @@ public class GetTrackPullConfigDetailOutputVO /// /// 拉取轨迹时区 /// - public string TackTimeZoneName { get; set; } + public string TrackTimeZoneName { get; set; } /// /// 拉取轨迹内容代码 diff --git a/src/SJZY.Track.Domain/Dtos/TrackPull/GetTrackPullContentListCacheVO.cs b/src/SJZY.Track.Domain/Dtos/TrackPull/GetTrackPullContentListCacheVO.cs new file mode 100644 index 00000000..1551647d --- /dev/null +++ b/src/SJZY.Track.Domain/Dtos/TrackPull/GetTrackPullContentListCacheVO.cs @@ -0,0 +1,44 @@ +namespace SJZY.Track.Domain.Dtos.TrackPull; + +public class GetTrackPullContentListCacheVO +{ + /// + /// 轨迹内容代码 + /// + public string TrackContentCode { get; set; } + + /// + /// 服务商轨迹状态参数值 + /// + public string? TrackStatusValue { get; set; } + + /// + /// 服务商轨迹代码参数值 + /// + public string? TrackContentCodeValue { get; set; } + + /// + /// 服务商轨迹内容参数值 + /// + public string? TrackContentValue { get; set; } + + /// + /// 轨迹关键词(正向),多个逗分隔 + /// + public string? TrackKeyword { get; set; } + + /// + /// 轨迹关键词(反向),多个逗分隔 + /// + public string? TrackKeywordReverse { get; set; } + + /// + /// 轨迹发生地参数值(主数据枚举) + /// + public int? TrackPlaceValue { get; set; } + + /// + /// 轨迹时区GMT + /// + public float? TrackTimeZone { get; set; } +} \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Dtos/TrackPush/GetTrackPushConfigDetailOutputVO.cs b/src/SJZY.Track.Domain/Dtos/TrackPush/GetTrackPushConfigDetailOutputVO.cs index 46bf32f8..9b3255ab 100644 --- a/src/SJZY.Track.Domain/Dtos/TrackPush/GetTrackPushConfigDetailOutputVO.cs +++ b/src/SJZY.Track.Domain/Dtos/TrackPush/GetTrackPushConfigDetailOutputVO.cs @@ -54,7 +54,7 @@ public class GetTrackPushConfigDetailOutputVO /// /// 推送轨迹时区 /// - public string TackTimeZoneName { get; set; } + public string TrackTimeZoneName { get; set; } /// /// 推送轨迹内容代码 diff --git a/src/SJZY.Track.Domain/GlobalConst.cs b/src/SJZY.Track.Domain/GlobalConst.cs index 2768048e..27a07bb1 100644 --- a/src/SJZY.Track.Domain/GlobalConst.cs +++ b/src/SJZY.Track.Domain/GlobalConst.cs @@ -36,4 +36,9 @@ public class GlobalConst /// 轨迹要推送的客户redis key前缀 /// public const string TrackPushKeyPrefix = "TrackPush:"; + + /// + /// 轨迹拉取配置信息redis key前缀 + /// + public const string TrackPullConfigInfoKeyPrefix = "TrackPullConfigInfo:"; } \ No newline at end of file diff --git a/src/SJZY.Track.Repository/Repositories/TrackPullConfigRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackPullConfigRepository.cs index 23061501..5f71c4c2 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackPullConfigRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackPullConfigRepository.cs @@ -36,11 +36,10 @@ public class TrackPullConfigRepository : BasicRepository, { return await Context.Queryable() .InnerJoin((pullContent, trackContent) => pullContent.TrackContentId == trackContent.Id) - .InnerJoin((pullContent, trackContent, trackPull) => pullContent.TrackPullConfigId == trackPull.Id) - .LeftJoin((pullContent, trackContent, trackPull, enumValue) => enumValue.Property == EnumPropertyEnums.轨迹发生地.GetDescription() && pullContent.TrackPlaceValue == enumValue.Enumkey) + .LeftJoin((pullContent, trackContent, enumValue) => enumValue.Property == EnumPropertyEnums.轨迹发生地.GetDescription() && pullContent.TrackPlaceValue == enumValue.Enumkey) .Where(pullContent => pullContent.TrackPullConfigId == input.TrackPullConfigId) .OrderBy(pullContent => pullContent.CreateTime) - .Select((pullContent, trackContent, trackPull, enumValue) => new GetTrackPullContentPageOutputVO + .Select((pullContent, trackContent, enumValue) => new GetTrackPullContentPageOutputVO { Id = pullContent.Id, TrackPlaceValue = enumValue.Disp @@ -48,6 +47,18 @@ public class TrackPullConfigRepository : BasicRepository, .ToPagedListAsync(input.PageIndex, input.PageSize); } + public async Task> GetContentListCacheAsync(int trackPullConfigId) + { + return await Context.Queryable() + .InnerJoin((pullContent, trackContent) => pullContent.TrackContentId == trackContent.Id) + .Where(pullContent => pullContent.TrackPullConfigId == trackPullConfigId) + .Select((pullContent, trackContent) => new GetTrackPullContentListCacheVO + { + TrackContentCode = trackContent.Code + }, true) + .ToListAsync(); + } + public async Task GetDetailAsync(int id) { return await AsQueryable()