using System.Linq.Expressions;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Options;
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.Application.Options;
using SJZY.Track.Domain.Aggregates.TrackPullAggregate;
using SJZY.Track.Domain.Dtos.Common;
using SJZY.Track.Domain.Dtos.TrackPull;
using SqlSugar;
namespace SJZY.Track.Application.Services.TrackPull;
///
/// 轨迹拉取
///
[ApiExplorerSettings(GroupName = "轨迹拉取")]
[Route("/Track/PullConfig")]
public class TrackPullService : ApplicationService
{
private readonly IOptionsMonitor _options;
private readonly IStringLocalizer _stringLocalizer;
private readonly ITrackPullCacheService _trackPullCacheService;
private readonly ITrackPullConfigRepository _trackPullConfigRepository;
public TrackPullService(
IStringLocalizer stringLocalizer,
ITrackPullConfigRepository trackPullConfigRepository,
ITrackPullCacheService trackPullCacheService, IOptionsMonitor options)
{
_stringLocalizer = stringLocalizer;
_trackPullConfigRepository = trackPullConfigRepository;
_trackPullCacheService = trackPullCacheService;
_options = options;
}
///
/// 轨迹拉取配置列表
///
///
///
[HttpPost("GetPage")]
public async Task> GetPageAsync([FromBody] KeywordsInputVO input)
{
return await _trackPullConfigRepository.GetPageAsync(input);
}
///
/// 轨迹拉取配置内容列表
///
///
///
[HttpPost("GetContentPage")]
public async Task> GetContentPageAsync(
[FromBody] GetTrackPullContentPageInputVO input)
{
return await _trackPullConfigRepository.GetContentPageAsync(input);
}
///
/// 轨迹拉取配置详情
///
///
///
[HttpGet("GetDetail")]
public async Task GetDetailAsync(int id)
{
var res = await _trackPullConfigRepository.GetDetailAsync(id);
if (res == null)
{
throw new BusinessException(message: "轨迹拉取配置不存在");
}
return res;
}
///
/// 轨迹拉取配置内容详情
///
///
///
[HttpGet("GetContentDetail")]
public async Task GetContentDetailAsync(int id)
{
return await _trackPullConfigRepository.GetContentDetailAsync(id);
}
///
/// 轨迹拉取配置编辑
///
///
///
[HttpPost("Edit")]
public async Task EditAsync([FromBody] EditTrackPullConfigInput input)
{
if (input.PullInterval < 60) input.PullInterval = 60;
if (input.Options != OptionTypeNoNull.删除)
{
Expression> isAnyExp = x =>
x.SubSystemId == input.SubSystemId && x.ServiceProviderId == input.ServiceProviderId;
if (input.Options == OptionTypeNoNull.修改) isAnyExp = isAnyExp.And(x => x.Id != input.Id);
if (await _trackPullConfigRepository.IsAnyAsync(isAnyExp))
throw new BusinessException(message: _stringLocalizer["IsTrackPullConfigAny"]);
}
switch (input.Options)
{
case OptionTypeNoNull.新增:
{
var trackPullEntity = ObjectMapper.Map(input);
if (input.ParseMethod == (int) ParseMethod.InterfaceRelay)
{
var paramsConfig = _options.CurrentValue;
if (paramsConfig == null)
{
throw new BusinessException(message: "未找到接口通参数配置,联系管理员添加");
}
trackPullEntity.OrderPath = paramsConfig.OrderPath;
trackPullEntity.OrderNoName = paramsConfig.OrderNoName;
trackPullEntity.TrackDetailsPath = paramsConfig.TrackDetailsPath;
trackPullEntity.TrackContentCodeName = paramsConfig.TrackContentCodeName;
trackPullEntity.TrackStatusName = paramsConfig.TrackStatusName;
trackPullEntity.TrackContentName = paramsConfig.TrackContentName;
trackPullEntity.TrackPlaceName = paramsConfig.TrackPlaceName;
trackPullEntity.TrackIsoTimeName = paramsConfig.TrackIsoTimeName;
trackPullEntity.TrackTimeName = paramsConfig.TrackTimeName;
trackPullEntity.TrackTimeZoneName = paramsConfig.TrackTimeZoneName;
}
var id = await _trackPullConfigRepository.InsertReturnIdentityAsync(trackPullEntity);
await _trackPullCacheService.SetPullConfigAsync(id);
}
break;
case OptionTypeNoNull.修改:
{
var oldTrackPullEntity = await _trackPullConfigRepository.GetFirstAsync(x => x.Id == input.Id) ??
throw new BusinessException(message: _stringLocalizer["NotFindData"]);
ObjectMapper.Map(input, oldTrackPullEntity);
if (input.ParseMethod == (int) ParseMethod.InterfaceRelay)
{
var paramsConfig = _options.CurrentValue;
if (paramsConfig == null)
{
throw new BusinessException(message: "未找到接口通参数配置,联系管理员添加");
}
oldTrackPullEntity.OrderPath = paramsConfig.OrderPath;
oldTrackPullEntity.OrderNoName = paramsConfig.OrderNoName;
oldTrackPullEntity.TrackDetailsPath = paramsConfig.TrackDetailsPath;
oldTrackPullEntity.TrackContentCodeName = paramsConfig.TrackContentCodeName;
oldTrackPullEntity.TrackStatusName = paramsConfig.TrackStatusName;
oldTrackPullEntity.TrackContentName = paramsConfig.TrackContentName;
oldTrackPullEntity.TrackPlaceName = paramsConfig.TrackPlaceName;
oldTrackPullEntity.TrackIsoTimeName = paramsConfig.TrackIsoTimeName;
oldTrackPullEntity.TrackTimeName = paramsConfig.TrackTimeName;
oldTrackPullEntity.TrackTimeZoneName = paramsConfig.TrackTimeZoneName;
}
await _trackPullConfigRepository.UpdateAsync(oldTrackPullEntity);
await _trackPullCacheService.SetPullConfigAsync(input.Id!.Value);
}
break;
case OptionTypeNoNull.删除:
using (var ts = TransactionScopeHelper.Create())
{
await _trackPullConfigRepository.SoftDeleteAsync(x => x.Id == input.Id);
await _trackPullConfigRepository.SoftDeleteContentAsync(x => x.TrackPullConfigId == input.Id);
await _trackPullCacheService.SetPullConfigAsync(input.Id!.Value);
ts.Complete();
}
break;
default:
throw new BusinessException(message: _stringLocalizer[SjzyBasicLocalization.Validation_IsInEnum,
nameof(EditTrackPullConfigInput.Options)]);
}
return true;
}
///
/// 轨迹拉取配置内容编辑
///
///
///
[HttpPost("EditContent")]
public async Task EditContentAsync([FromBody] EditTrackPullContentInput input)
{
if (input.Options != OptionTypeNoNull.删除)
{
Expression> isContentAnyExp = x =>
x.TrackPullConfigId == input.TrackPullConfigId;
if (input.Options == OptionTypeNoNull.修改)
{
isContentAnyExp = isContentAnyExp.And(x => x.Id != input.Id);
}
if (await _trackPullConfigRepository.IsContentAnyAsync(isContentAnyExp.And(x =>
x.TrackContentId == input.TrackContentId)))
throw new BusinessException(message: _stringLocalizer["IsTrackPullContentAny"]);
if (!input.TrackStatusValues.IsNullOrEmpty())
{
Expression> trackStatusValuesExp = _ => false;
input.TrackStatusValues!.ForEach(item =>
{
trackStatusValuesExp = trackStatusValuesExp.Or(x => SqlFunc.SplitIn(x.TrackStatusValue, item));
});
if (await _trackPullConfigRepository.IsContentAnyAsync(isContentAnyExp.And(trackStatusValuesExp)))
throw new BusinessException(message: _stringLocalizer["IsTrackPullContentStatusValueAny"]);
}
if (!input.TrackKeywords.IsNullOrEmpty())
{
Expression> trackKeywordExp = _ => false;
input.TrackKeywords!.ForEach(item =>
{
trackKeywordExp = trackKeywordExp.Or(x => SqlFunc.SplitIn(x.TrackKeyword, item));
});
if (await _trackPullConfigRepository.IsContentAnyAsync(isContentAnyExp.And(trackKeywordExp)))
throw new BusinessException(message: _stringLocalizer["IsTrackPullContentKeywordsAny"]);
}
}
switch (input.Options)
{
case OptionTypeNoNull.新增:
{
var entity = ObjectMapper.Map(input);
await _trackPullConfigRepository.InsertContentAsync(entity);
await _trackPullCacheService.SetPullConfigAsync(input.TrackPullConfigId!.Value);
break;
}
case OptionTypeNoNull.修改:
{
var oldTrackPullContentEntity =
await _trackPullConfigRepository.GetContentByIdAsync(input.Id!.Value) ??
throw new BusinessException(message: _stringLocalizer["NotFindData"]);
ObjectMapper.Map(input, oldTrackPullContentEntity);
await _trackPullConfigRepository.UpdateContentAsync(oldTrackPullContentEntity);
await _trackPullCacheService.SetPullConfigAsync(oldTrackPullContentEntity.TrackPullConfigId);
break;
}
case OptionTypeNoNull.删除:
{
var oldTrackPullContentEntity =
await _trackPullConfigRepository.GetContentByIdAsync(input.Id!.Value) ??
throw new BusinessException(message: _stringLocalizer["NotFindData"]);
await _trackPullConfigRepository.SoftDeleteContentAsync(x => x.Id == input.Id);
await _trackPullCacheService.SetPullConfigAsync(oldTrackPullContentEntity.TrackPullConfigId);
break;
}
default:
throw new BusinessException(message: _stringLocalizer[SjzyBasicLocalization.Validation_IsInEnum,
nameof(EditTrackPullContentInput.Options)]);
}
return true;
}
}