using System.Linq.Expressions; 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.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; using Volo.Abp.DependencyInjection; namespace SJZY.Track.Application.Services.TrackPull; /// /// 轨迹拉取 /// [ApiExplorerSettings(GroupName = "轨迹拉取")] [Route("/Track/PullConfig")] public class TrackPullService : ApplicationService, ITransientDependency { private readonly IStringLocalizer _stringLocalizer; private readonly ITrackPullConfigRepository _trackPullConfigRepository; private readonly ITrackTemplateRepository _trackTemplateRepository; public TrackPullService( IStringLocalizer stringLocalizer, ITrackPullConfigRepository trackPullConfigRepository, ITrackTemplateRepository trackTemplateRepository) { _stringLocalizer = stringLocalizer; _trackPullConfigRepository = trackPullConfigRepository; _trackTemplateRepository = trackTemplateRepository; } /// /// 轨迹拉取配置列表 /// /// /// [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) { return await _trackPullConfigRepository.GetDetailAsync(id); } /// /// 轨迹拉取配置内容详情 /// /// /// [HttpGet("GetContentDetail")] public async Task GetContentDetailAsync(int id) { return await _trackPullConfigRepository.GetContentDetailAsync(id); } /// /// 轨迹拉取配置编辑 /// /// /// [HttpPost("Edit")] public async Task EditAsync([FromBody] EditTrackPullConfigInput input) { if (input.Options != OptionTypeNoNull.删除) { Expression> isAnyExp = x => x.SubSystemId == input.SubSystemId && x.TrackTemplateId == input.TrackTemplateId && 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); var trackPullParamsEntity = ObjectMapper.Map(input); var trackTemplateContentEntities = await _trackTemplateRepository.GetContentListAsync(x => x.TrackTemplateId == input.TrackTemplateId); var trackPullContentEntities = new List(); using (var ts = TransactionScopeHelper.Create()) { int id = await _trackPullConfigRepository.InsertReturnIdentityAsync(trackPullEntity); trackPullParamsEntity.PullOrPushConfigId = id; await _trackPullConfigRepository.InsertParamsAsync(trackPullParamsEntity); foreach (var item in trackTemplateContentEntities) { trackPullContentEntities.Add(new() { TrackPullConfigId = id, TrackContentId = item.TrackContentId }); } await _trackPullConfigRepository.InsertContentRangeAsync(trackPullContentEntities); ts.Complete(); } } break; case OptionTypeNoNull.修改: { var oldTrackPullEntity = await _trackPullConfigRepository.GetFirstAsync(x => x.Id == input.Id) ?? throw new BusinessException(message: _stringLocalizer["NotFindData"]); var oldTrackPullParamsEntity = await _trackPullConfigRepository.GetParamsSingleAsync(x => x.PullOrPushConfigId == input.Id && !x.IsPush); var trackPullContentEntities = new List(); if (oldTrackPullEntity.TrackTemplateId != input.TrackTemplateId) { var trackTemplateContentEntities = await _trackTemplateRepository.GetContentListAsync(x => x.TrackTemplateId == input.TrackTemplateId); foreach (var item in trackTemplateContentEntities) { trackPullContentEntities.Add(new() { TrackPullConfigId = oldTrackPullEntity.Id, TrackContentId = item.TrackContentId }); } } ObjectMapper.Map(input, oldTrackPullEntity); ObjectMapper.Map(input, oldTrackPullParamsEntity); using (var ts = TransactionScopeHelper.Create()) { await _trackPullConfigRepository.UpdateAsync(oldTrackPullEntity); await _trackPullConfigRepository.UpdateParamsAsync(oldTrackPullParamsEntity); if (oldTrackPullEntity.TrackTemplateId != input.TrackTemplateId) { await _trackPullConfigRepository.SoftDeleteContentAsync(x => x.TrackPullConfigId == input.Id); await _trackPullConfigRepository.InsertContentRangeAsync(trackPullContentEntities); } ts.Complete(); } } break; case OptionTypeNoNull.删除: using (var ts = TransactionScopeHelper.Create()) { await _trackPullConfigRepository.SoftDeleteAsync(x => x.Id == input.Id); await _trackPullConfigRepository.SoftDeleteParamsAsync(x => x.PullOrPushConfigId == input.Id && !x.IsPush); await _trackPullConfigRepository.SoftDeleteContentAsync(x => x.TrackPullConfigId == input.Id); ts.Complete(); } break; default: throw new BusinessException(message: _stringLocalizer[SjzyBasicLocalization.Validation_IsInEnum, nameof(EditTrackPullConfigInput.Options)]); } return true; } /// /// 轨迹拉取配置内容修改 /// /// /// [HttpPost("UpdateContent")] public async Task UpdateContentAsync([FromBody] UpdateTrackPullContentInput input) { Expression> isContentAnyExp = x => x.Id != input.Id && x.TrackPullConfigId == input.TrackPullConfigId; var trackKeywordExp = Expressionable.Create() .And(x => x.TrackContentId == input.TrackContentId || (input.TrackContentCodeValue != null && x.TrackContentCodeValue == input.TrackContentCodeValue) || (input.TrackStatusValue != null && x.TrackStatusValue == input.TrackStatusValue) || (input.TrackContentValue != null && x.TrackContentValue == input.TrackContentValue)); input.TrackKeywords?.ForEach(item => { trackKeywordExp.Or(x => SqlFunc.SplitIn(x.TrackKeyword, item)); }); isContentAnyExp = isContentAnyExp.And(trackKeywordExp.ToExpression()); if (await _trackPullConfigRepository.IsContentAnyAsync(isContentAnyExp)) throw new BusinessException(message: _stringLocalizer["IsTrackPullContentAny"]); var oldTrackPullContentEntity = await _trackPullConfigRepository.GetContentByIdAsync(input.Id) ?? throw new BusinessException(message: _stringLocalizer["NotFindData"]); ObjectMapper.Map(input, oldTrackPullContentEntity); await _trackPullConfigRepository.UpdateContentAsync(oldTrackPullContentEntity); return true; } }