diff --git a/scripts/sql/migrate_track_pull_config_order_type.sql b/scripts/sql/migrate_track_pull_config_order_type.sql new file mode 100644 index 00000000..a7894259 --- /dev/null +++ b/scripts/sql/migrate_track_pull_config_order_type.sql @@ -0,0 +1,6 @@ +-- 轨迹拉取配置增加订单类型(小包/大包/主单),用于同一应用+服务商下按订单类型区分配置 +-- 库:TrackCenter(t_track_pull_config) +-- MySQL;若 OrderType 列已存在可跳过 + +ALTER TABLE t_track_pull_config + ADD COLUMN OrderType INT NOT NULL DEFAULT 1 COMMENT '订单类型(TrackOrderType:1小包 2大包 4主单)' AFTER ServiceProviderCode; diff --git a/src/TrackCenter.Application/Rabbit/TrackRefreshEventHandler.cs b/src/TrackCenter.Application/Rabbit/TrackRefreshEventHandler.cs index eb5b6206..6d5f68d1 100644 --- a/src/TrackCenter.Application/Rabbit/TrackRefreshEventHandler.cs +++ b/src/TrackCenter.Application/Rabbit/TrackRefreshEventHandler.cs @@ -81,7 +81,7 @@ public class TrackRefreshEventHandler( // 客户A 渠道B 产品A var config = await trackPullCacheService.GetPullParamsWithContentAsync(attach.AppKey, - attach.ServiceProviderCode); + attach.ServiceProviderCode, attach.OrderType); if (config is null) { logger.LogWarning("请求id: {@RequestId},轨迹消费失败,找不到拉取配置:{@Attach}", attach.ToJson(), @event.RequestId); diff --git a/src/TrackCenter.Application/Services/TrackPull/TrackPullCacheService.cs b/src/TrackCenter.Application/Services/TrackPull/TrackPullCacheService.cs index d44624fe..306580c7 100644 --- a/src/TrackCenter.Application/Services/TrackPull/TrackPullCacheService.cs +++ b/src/TrackCenter.Application/Services/TrackPull/TrackPullCacheService.cs @@ -20,12 +20,12 @@ public class TrackPullCacheService : ITransientDependency $"{GlobalConst.TrackPullKeyPrefix}:{config.AppKey}:{config.ServiceProviderCode}:{config.Customer}"; public async Task GetPullParamsWithContentAsync(string appKey, - string serviceProviderCode) + string serviceProviderCode, TrackOrderType orderType) { var data = await RedisHelper.Client.GetAsync(TrackPullContentKey( - appKey, serviceProviderCode)); + appKey, serviceProviderCode, orderType)); - var pullId = await _trackPullConfigRepository.FindIdAsync(appKey, serviceProviderCode); + var pullId = await _trackPullConfigRepository.FindIdAsync(appKey, serviceProviderCode, orderType); data ??= await SetPullConfigAsync(pullId); return data; @@ -53,12 +53,13 @@ public class TrackPullCacheService : ITransientDependency trackPullContentList) }; - var key = TrackPullContentKey(trackPullConfigDetail.AppKey, trackPullConfigDetail.ServiceProviderCode); + var key = TrackPullContentKey(trackPullConfigDetail.AppKey, trackPullConfigDetail.ServiceProviderCode, + trackPullConfigDetail.OrderType); await RedisHelper.Client.SetAsync(key, data, TimeSpan.FromHours(24)); return data; } - public static string TrackPullContentKey(string appKey, string serviceProviderCode) => - $"{GlobalConst.TrackPullContentKeyPrefix}:{appKey}:{serviceProviderCode}"; + public static string TrackPullContentKey(string appKey, string serviceProviderCode, TrackOrderType orderType) => + $"{GlobalConst.TrackPullContentKeyPrefix}:{appKey}:{serviceProviderCode}:{(int)orderType}"; } diff --git a/src/TrackCenter.Application/Services/TrackPull/TrackPullService.cs b/src/TrackCenter.Application/Services/TrackPull/TrackPullService.cs index 0506cead..8c4b6322 100644 --- a/src/TrackCenter.Application/Services/TrackPull/TrackPullService.cs +++ b/src/TrackCenter.Application/Services/TrackPull/TrackPullService.cs @@ -83,9 +83,13 @@ public class TrackPullService( if (input.Options != OptionTypeNoNull.删除) { + if (!Enum.IsDefined(typeof(TrackOrderType), input.OrderType)) + throw new BusinessException("请选择订单类型"); + Expression> isAnyExp = x => x.AppKey == input.AppKey && - x.ServiceProviderCode == input.ServiceProviderCode; + x.ServiceProviderCode == input.ServiceProviderCode && + x.OrderType == input.OrderType; if (input.Options == OptionTypeNoNull.修改) isAnyExp = isAnyExp.And(x => x.Id != input.Id); if (await trackPullConfigRepository.IsAnyAsync(isAnyExp)) diff --git a/src/TrackCenter.Domain/Aggregates/TrackPullAggregate/ITrackPullConfigRepository.cs b/src/TrackCenter.Domain/Aggregates/TrackPullAggregate/ITrackPullConfigRepository.cs index 492b5874..5e0cbb77 100644 --- a/src/TrackCenter.Domain/Aggregates/TrackPullAggregate/ITrackPullConfigRepository.cs +++ b/src/TrackCenter.Domain/Aggregates/TrackPullAggregate/ITrackPullConfigRepository.cs @@ -75,5 +75,5 @@ public interface ITrackPullConfigRepository : IBasicRepository IsPriorityAnyAsync(Expression> whereExpression); - Task FindIdAsync(string appKey, string serviceProviderCode); + Task FindIdAsync(string appKey, string serviceProviderCode, TrackOrderType orderType); } diff --git a/src/TrackCenter.Domain/Aggregates/TrackPullAggregate/TrackPullConfigEntity.cs b/src/TrackCenter.Domain/Aggregates/TrackPullAggregate/TrackPullConfigEntity.cs index 43820fcb..4f90a91f 100644 --- a/src/TrackCenter.Domain/Aggregates/TrackPullAggregate/TrackPullConfigEntity.cs +++ b/src/TrackCenter.Domain/Aggregates/TrackPullAggregate/TrackPullConfigEntity.cs @@ -20,6 +20,12 @@ public class TrackPullConfigEntity : FullAuditedAggregateRoot [SugarColumn(ColumnName = "ServiceProviderCode")] public string ServiceProviderCode { get; set; } + /// + /// 订单类型(主数据枚举TrackOrderType) + /// + [SugarColumn(ColumnName = "OrderType")] + public TrackOrderType OrderType { get; set; } + /// /// 开始轨迹code /// diff --git a/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs b/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs index a3892ef5..4a5cbd8f 100644 --- a/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs +++ b/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs @@ -26,6 +26,11 @@ public class GetTrackPullConfigDetailOutputVO /// public string AppKey { get; set; } + /// + /// 订单类型(主数据枚举TrackOrderType) + /// + public TrackOrderType OrderType { get; set; } + /// /// 轨迹扩展信息参数名集合(逗号分割) /// diff --git a/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullConfigPageOutputVO.cs b/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullConfigPageOutputVO.cs index cce27290..ebe196a5 100644 --- a/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullConfigPageOutputVO.cs +++ b/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullConfigPageOutputVO.cs @@ -1,3 +1,5 @@ +using TrackCenter.Domain.Enums; + namespace TrackCenter.Domain.Dtos.TrackPull; public class GetTrackPullConfigPageOutputVO @@ -14,6 +16,11 @@ public class GetTrackPullConfigPageOutputVO /// public string ServiceProvider { get; set; } + /// + /// 服务商code + /// + public string ServiceProviderCode { get; set; } + /// /// 应用 /// @@ -23,4 +30,9 @@ public class GetTrackPullConfigPageOutputVO /// 应用 /// public string AppKey { get; set; } + + /// + /// 订单类型(主数据枚举TrackOrderType) + /// + public TrackOrderType OrderType { get; set; } } diff --git a/src/TrackCenter.Repository/Repositories/TrackPullConfigRepository.cs b/src/TrackCenter.Repository/Repositories/TrackPullConfigRepository.cs index 08bea8ee..8e16bfe2 100644 --- a/src/TrackCenter.Repository/Repositories/TrackPullConfigRepository.cs +++ b/src/TrackCenter.Repository/Repositories/TrackPullConfigRepository.cs @@ -5,6 +5,7 @@ using TrackCenter.Domain.Aggregates.TrackPullAggregate; using TrackCenter.Domain.Aggregates.TrackStatusAggregate; using TrackCenter.Domain.Dtos.Common; using TrackCenter.Domain.Dtos.TrackPull; +using TrackCenter.Domain.Enums; using TrackCenter.Domain.VEntities; namespace TrackCenter.Repository.Repositories; @@ -27,6 +28,8 @@ public class TrackPullConfigRepository : BasicRepository, AppKey = system.AppKey, App = system.Name, ServiceProvider = service.Name, + ServiceProviderCode = service.Code, + OrderType = trackPull.OrderType, CreateTime = trackPull.CreateTime }) .ToPagedListAsync(input.PageIndex, input.PageSize); @@ -216,11 +219,12 @@ public class TrackPullConfigRepository : BasicRepository, return await Context.Queryable().Where(whereExpression).AnyAsync(); } - public async Task FindIdAsync(string appKey, string serviceProviderCode) + public async Task FindIdAsync(string appKey, string serviceProviderCode, TrackOrderType orderType) { return await AsQueryable() .Where(trackPull => trackPull.AppKey == appKey - && trackPull.ServiceProviderCode == serviceProviderCode) + && trackPull.ServiceProviderCode == serviceProviderCode + && trackPull.OrderType == orderType) .Select(trackPull => trackPull.Id) .FirstAsync(); }