From edf9704ffe1c6a138a083a8e6a32801e80c91437 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9F=B3=E6=96=87=E7=BF=94?= <878130837@qq.com>
Date: Mon, 11 Mar 2024 09:46:17 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=82=E6=95=B0=E8=A1=A8?=
=?UTF-8?q?=E5=AD=97=E6=AE=B5=EF=BC=9B=E6=B7=BB=E5=8A=A0=E6=8B=89=E5=8E=BB?=
=?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=BC=93=E5=AD=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../TrackPull/EditTrackPullConfigInput.cs | 2 +-
.../Dtos/TrackPull/TrackPullParamConfigDto.cs | 7 +--
.../TrackPush/EditTrackPushConfigInput.cs | 2 +-
.../Services/ITrackPullCacheService.cs | 9 ++++
.../AutoMapper/TrackPullAutoMapperProfile.cs | 3 ++
.../TrackPull/TrackPullCacheService.cs | 53 +++++++++++++++++++
.../Services/TrackPull/TrackPullService.cs | 20 ++++---
.../EditTrackPullConfigInputValidation.cs | 2 +-
.../ITrackPullConfigRepository.cs | 7 +++
.../TrackPushPullParamsConfigEntity.cs | 4 +-
.../GetTrackPullConfigDetailOutputVO.cs | 2 +-
.../GetTrackPullContentListCacheVO.cs | 44 +++++++++++++++
.../GetTrackPushConfigDetailOutputVO.cs | 2 +-
src/SJZY.Track.Domain/GlobalConst.cs | 5 ++
.../Repositories/TrackPullConfigRepository.cs | 17 ++++--
15 files changed, 157 insertions(+), 22 deletions(-)
create mode 100644 src/SJZY.Track.Application/Services/TrackPull/TrackPullCacheService.cs
create mode 100644 src/SJZY.Track.Domain/Dtos/TrackPull/GetTrackPullContentListCacheVO.cs
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()