Merge remote-tracking branch 'origin/S02-轨迹中台' into S02-轨迹中台
This commit is contained in:
commit
94852251a5
@ -1,5 +1,18 @@
|
|||||||
namespace SJZY.Track.Application.Contract.Dtos.ProvideServices;
|
namespace SJZY.Track.Application.Contract.Dtos.ProvideServices;
|
||||||
|
|
||||||
|
public class TrackPushConfigDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 是否自动推送
|
||||||
|
/// </summary>
|
||||||
|
public bool IsAutoPush { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹推送内容配置
|
||||||
|
/// </summary>
|
||||||
|
public List<TrackPushContentConfigDto> ContentConfigs { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
public class TrackPushContentConfigDto
|
public class TrackPushContentConfigDto
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -38,5 +38,5 @@ public interface ITrackPushCacheService
|
|||||||
/// <param name="subSystemId">子系统id</param>
|
/// <param name="subSystemId">子系统id</param>
|
||||||
/// <param name="customId">客户id</param>
|
/// <param name="customId">客户id</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<List<TrackPushContentConfigDto>> SetPushContentConfigsAsync(int? id = null, int? subSystemId = null, int? customId = null);
|
Task<TrackPushConfigDto> SetPushContentConfigsAsync(int? id = null, int? subSystemId = null, int? customId = null);
|
||||||
}
|
}
|
||||||
@ -73,8 +73,7 @@ public class TrackPullCacheService : ApplicationService, ITrackPullCacheService,
|
|||||||
trackPullContentList);
|
trackPullContentList);
|
||||||
|
|
||||||
await RedisHelper.Client.SetAsync(
|
await RedisHelper.Client.SetAsync(
|
||||||
TrackPullContentKey(trackPullConfigEntity.SubSystemId, trackPullConfigEntity.ServiceProviderId), data,
|
TrackPullContentKey(trackPullConfigEntity.SubSystemId, trackPullConfigEntity.ServiceProviderId), data);
|
||||||
(int)TimeSpan.FromDays(1).TotalSeconds);
|
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,45 +21,47 @@ public class TrackPushCacheService : ApplicationService, ITrackPushCacheService,
|
|||||||
[NonAction]
|
[NonAction]
|
||||||
public async Task<List<TrackPushContentConfigDto>> GetPushContentConfigsAsync(int subSystemId, int customId)
|
public async Task<List<TrackPushContentConfigDto>> GetPushContentConfigsAsync(int subSystemId, int customId)
|
||||||
{
|
{
|
||||||
var data = await RedisHelper.Client.GetAsync<List<TrackPushContentConfigDto>>(TrackPushContentKey(subSystemId, customId));
|
var data = await GetPushConfigAsync(subSystemId, customId);
|
||||||
|
|
||||||
data ??= await SetPushContentConfigsAsync(subSystemId: subSystemId, customId: customId);
|
return data.ContentConfigs;
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<TrackPushContentConfigDto> GetPushContentConfigAsync(int subSystemId, int customId, int trackContentId)
|
[NonAction]
|
||||||
|
public async Task<TrackPushContentConfigDto> GetPushContentConfigAsync(int subSystemId, int customId, int trackContentId)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
var data = await GetPushContentConfigsAsync(subSystemId, customId);
|
||||||
|
|
||||||
|
return data.Single(x => x.TrackContentId == trackContentId);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NonAction]
|
[NonAction]
|
||||||
public async Task<TrackPushContentConfigDto?> InferNextPushContentOrNullAsync(int subSystemId, int customId, int? trackContentId)
|
public async Task<TrackPushContentConfigDto?> InferNextPushContentOrNullAsync(int subSystemId, int customId, int? trackContentId)
|
||||||
{
|
{
|
||||||
var data = await GetPushContentConfigsAsync(subSystemId, customId);
|
var data = await GetPushConfigAsync(subSystemId, customId);
|
||||||
|
if (!data.IsAutoPush) return null;
|
||||||
|
|
||||||
if (trackContentId.HasValue)
|
if (trackContentId.HasValue)
|
||||||
{
|
{
|
||||||
if (data.Count > 1 && data.Any(x => x.TrackContentId == trackContentId))
|
if (data.ContentConfigs.Count > 1 && data.ContentConfigs.Any(x => x.TrackContentId == trackContentId))
|
||||||
{
|
{
|
||||||
int index = data.FindIndex(x => x.TrackContentId == trackContentId);
|
int index = data.ContentConfigs.FindIndex(x => x.TrackContentId == trackContentId);
|
||||||
int nextIndex = (index + 1) % data.Count; // 计算下一个索引,处理最后一个元素的情况
|
int nextIndex = (index + 1) % data.ContentConfigs.Count; // 计算下一个索引,处理最后一个元素的情况
|
||||||
|
|
||||||
return data[nextIndex];
|
return data.ContentConfigs[nextIndex];
|
||||||
}
|
}
|
||||||
else return null;
|
else return null;
|
||||||
}
|
}
|
||||||
else return data.FirstOrDefault();
|
else return data.ContentConfigs.FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
[NonAction]
|
[NonAction]
|
||||||
public async Task<List<TrackPushContentConfigDto>> SetPushContentConfigsAsync(int? id = null, int? subSystemId = null, int? customId = null)
|
public async Task<TrackPushConfigDto> SetPushContentConfigsAsync(int? id = null, int? subSystemId = null, int? customId = null)
|
||||||
{
|
{
|
||||||
var data = new List<TrackPushContentConfigDto>();
|
var data = new TrackPushConfigDto { ContentConfigs = [] };
|
||||||
|
|
||||||
Expression<Func<TrackPushConfigEntity, bool>> exp = x => true;
|
Expression<Func<TrackPushConfigEntity, bool>> exp = x => true;
|
||||||
if (id.HasValue) exp = x => x.Id == id;
|
if (id.HasValue) exp = x => x.Id == id;
|
||||||
else if (subSystemId.HasValue && customId.HasValue)
|
else if (subSystemId.HasValue && customId.HasValue) exp = x => x.SubSystemId == subSystemId && x.CustomId == customId;
|
||||||
exp = x => x.SubSystemId == subSystemId && x.CustomId == customId;
|
|
||||||
|
|
||||||
var trackPushConfigEntity = await _trackPushConfigRepository.GetFirstAsync(exp);
|
var trackPushConfigEntity = await _trackPushConfigRepository.GetFirstAsync(exp);
|
||||||
if (trackPushConfigEntity == null) return data;
|
if (trackPushConfigEntity == null) return data;
|
||||||
@ -69,9 +71,19 @@ public class TrackPushCacheService : ApplicationService, ITrackPushCacheService,
|
|||||||
|
|
||||||
trackPushContentList = trackPushContentList.OrderBy(x => x.Sort).ToList();
|
trackPushContentList = trackPushContentList.OrderBy(x => x.Sort).ToList();
|
||||||
|
|
||||||
data = ObjectMapper.Map<List<TrackPushContentConfigEntity>, List<TrackPushContentConfigDto>>(trackPushContentList);
|
data.IsAutoPush = trackPushConfigEntity.IsAutoPush;
|
||||||
|
data.ContentConfigs = ObjectMapper.Map<List<TrackPushContentConfigEntity>, List<TrackPushContentConfigDto>>(trackPushContentList);
|
||||||
|
|
||||||
await RedisHelper.Client.SetAsync(TrackPushContentKey(trackPushConfigEntity.SubSystemId, trackPushConfigEntity.CustomId), data, (int)TimeSpan.FromDays(1).TotalSeconds);
|
await RedisHelper.Client.SetAsync(TrackPushContentKey(trackPushConfigEntity.SubSystemId, trackPushConfigEntity.CustomId), data);
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<TrackPushConfigDto> GetPushConfigAsync(int subSystemId, int customId)
|
||||||
|
{
|
||||||
|
var data = await RedisHelper.Client.GetAsync<TrackPushConfigDto>(TrackPushContentKey(subSystemId, customId));
|
||||||
|
|
||||||
|
data ??= await SetPushContentConfigsAsync(subSystemId: subSystemId, customId: customId);
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -142,6 +142,8 @@ public class TrackPushService : ApplicationService
|
|||||||
|
|
||||||
ts.Complete();
|
ts.Complete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (input.IsAutoPush!.Value) await _trackPushCacheService.SetPushContentConfigsAsync(input.Id);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user