using ATS.NonCustodial.Application.Base; using ATS.NonCustodial.Application.Contracts.Interfaces.Admins.View; using ATS.NonCustodial.Application.Contracts.Interfaces.Admins.View.Input; using ATS.NonCustodial.Application.Contracts.Interfaces.Admins.View.Output; using ATS.NonCustodial.Domain.Entities.Admins; using ATS.NonCustodial.Domain.Shared.OrmRepositories.Basic.EfCore; using ATS.NonCustodial.DynamicApi; using ATS.NonCustodial.DynamicApi.Attributes; using ATS.NonCustodial.Shared.Common.Enums; using ATS.NonCustodial.Shared.Common.UnifiedResults; using ATS.NonCustodial.Shared.Extensions; using AutoMapper.QueryableExtensions; using Microsoft.EntityFrameworkCore; namespace ATS.NonCustodial.Application.Impl.Admins { /// /// 视图服务 /// /// Author:mxg /// CreatedTimed:2022-05-15 10:08 PM [DynamicApi(Area = "admin")] public class ViewService : AdminAppServiceBase, IViewService, IDynamicApi { #region Identity private readonly IEfRepository _viewRepository; public ViewService(IEfRepository moduleRepository) { _viewRepository = moduleRepository; } #endregion Identity /// /// 查询视图 /// /// /// public async Task GetAsync(long id) { var rtn = await base.GetAsync(_viewRepository, id); return ResultOutput.Ok(rtn); } /// /// 查询列表 /// /// /// public async Task GetListAsync(string key) { var data = await _viewRepository.AsQueryable(false, true) .WhereIf(key.NotNull(), a => a.Path.Contains(key) || a.Label.Contains(key)) .ProjectTo(Mapper.ConfigurationProvider) .OrderByDescending(r => r.CreatedTime) .ToListAsync() .ConfigureAwait(false); return ResultOutput.Ok(data); } /// /// 新增 /// /// /// public async Task AddAsync(ViewAddInput input) { var entity = Mapper.Map(input); await _viewRepository.InsertAsync(entity); return ResultOutput.Result(entity.Id > 0); } /// /// 修改 /// /// /// public async Task UpdateAsync(ViewUpdateInput input) { if (!(input?.Id > 0)) return ResultOutput.NotOk(); var entity = await _viewRepository.FindAsync(input.Id); if (!(entity?.Id > 0)) return ResultOutput.NotOk("视图不存在!"); Mapper.Map(input, entity); await _viewRepository.UpdateAsync(entity); return ResultOutput.Ok(); } /// /// 彻底删除 /// /// /// public async Task DeleteAsync(long id) { var result = false; if (id > 0) result = (await _viewRepository.DeleteAsync(m => m.Id == id)) > 0; return ResultOutput.Result(result); } /// /// 删除 /// /// /// public async Task SoftDeleteAsync(long id) { var result = await _viewRepository.DeleteAsync(w => w.Id == id); return ResultOutput.Result(result > 0); } /// /// 批量删除 /// /// /// public async Task BatchSoftDeleteAsync(long[] ids) { var result = await _viewRepository.DeleteAsync(w => ids.Contains(w.Id)); return ResultOutput.Result(result > 0); } /// /// 同步 /// /// /// public async Task SyncAsync(ViewSyncInput input) { //查询所有视图 var views = await _viewRepository.AsQueryable(false, true).ToListAsync(); var names = views.Select(a => a.Name).ToList(); var paths = views.Select(a => a.Path).ToList(); //path处理 foreach (var view in input.Views) { view.Path = view.Path?.Trim(); } //批量插入 { var inputViews = (from a in input.Views where !(paths.Contains(a.Path) || names.Contains(a.Name)) select a).ToList(); if (inputViews.Count > 0) { var insertViews = Mapper.Map>(inputViews); foreach (var insertView in insertViews) { if (insertView.Label.IsNull()) { insertView.Label = insertView.Name; } } insertViews = await _viewRepository.InsertAsync(insertViews); views.AddRange(insertViews); } } //批量更新 { var inputPaths = input.Views.Select(a => a.Path).ToList(); var inputNames = input.Views.Select(a => a.Name).ToList(); //修改 var updateViews = (from a in views where inputPaths.Contains(a.Path) || inputNames.Contains(a.Name) select a).ToList(); if (updateViews.Count > 0) { foreach (var view in updateViews) { var inputView = input.Views.Where(a => a.Name == view.Name || a.Path == view.Path).FirstOrDefault(); if (view.Label.IsNull()) { view.Label = inputView.Label ?? inputView.Name; } if (view.Description.IsNull()) { view.Description = inputView.Description; } view.Name = inputView.Name; view.Path = inputView.Path; view.DataStatus = DataStatusEnum.Normal; } } //禁用 var disabledViews = (from a in views where (a.Path.NotNull() || a.Name.NotNull()) && (!inputPaths.Contains(a.Path) || !inputNames.Contains(a.Name)) select a).ToList(); if (disabledViews.Count > 0) { foreach (var view in disabledViews) { view.DataStatus = DataStatusEnum.Disable; } } updateViews.AddRange(disabledViews); //批量更新 await _viewRepository.UpdateAsync( updateViews, UpdatingProps(x => x.Label, x => x.Path, x => x.Name, x => x.Description, x => x.DataStatus) ); } return ResultOutput.Ok(); } } }