using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using ZhonTai.Admin.Core.Attributes; using ZhonTai.Admin.Core.Dto; using ZhonTai.Admin.Domain.View; using ZhonTai.Admin.Services.View.Dto; using ZhonTai.DynamicApi; using ZhonTai.DynamicApi.Attributes; using ZhonTai.Admin.Core.Consts; namespace ZhonTai.Admin.Services.View; /// /// 视图服务 /// [DynamicApi(Area = AdminConsts.AreaName)] public class ViewService : BaseService, IViewService, IDynamicApi { private IViewRepository _viewRepository => LazyGetRequiredService(); public ViewService() { } /// /// 查询视图 /// /// /// public async Task GetAsync(long id) { var result = await _viewRepository.GetAsync(id); return result; } /// /// 查询列表 /// /// /// public async Task> GetListAsync(string key) { var data = await _viewRepository .WhereIf(key.NotNull(), a => a.Path.Contains(key) || a.Label.Contains(key)) .OrderBy(a => a.ParentId) .OrderBy(a => a.Sort) .ToListAsync(); return data; } /// /// 新增 /// /// /// public async Task AddAsync(ViewAddInput input) { var entity = Mapper.Map(input); await _viewRepository.InsertAsync(entity); return entity.Id; } /// /// 修改 /// /// /// public async Task UpdateAsync(ViewUpdateInput input) { var entity = await _viewRepository.GetAsync(input.Id); if (!(entity?.Id > 0)) { throw ResultOutput.Exception("视图不存在!"); } Mapper.Map(input, entity); await _viewRepository.UpdateAsync(entity); } /// /// 彻底删除 /// /// /// public async Task DeleteAsync(long id) { await _viewRepository.DeleteAsync(m => m.Id == id); } /// /// 删除 /// /// /// public async Task SoftDeleteAsync(long id) { await _viewRepository.SoftDeleteAsync(id); } /// /// 批量删除 /// /// /// public async Task BatchSoftDeleteAsync(long[] ids) { await _viewRepository.SoftDeleteAsync(ids); } /// /// 同步 /// /// /// [AdminTransaction] public virtual async Task SyncAsync(ViewSyncInput input) { //查询所有视图 var views = await _viewRepository.Select.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.Enabled = true; } } //禁用 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.Enabled = false; } } updateViews.AddRange(disabledViews); await _viewRepository.UpdateDiy.SetSource(updateViews) .UpdateColumns(a => new { a.Label, a.Name, a.Path, a.Enabled, a.Description }) .ExecuteAffrowsAsync(); } } }