public async Task <IResponseOutput> SyncAsync(ViewSyncInput input) { //查询所有view var views = await _viewRepository.Select.ToListAsync(); var paths = views.Select(a => a.Path).ToList(); //path处理 foreach (var view in input.Views) { view.Path = view.Path?.Trim().ToLower(); view.ParentPath = view.ParentPath?.Trim().ToLower(); } #region 执行插入 //执行父级view插入 var parentViews = input.Views.FindAll(a => a.ParentPath.IsNull()); var pViews = (from a in parentViews where !paths.Contains(a.Path) select a).ToList(); if (pViews.Count > 0) { var insertPViews = _mapper.Map <List <ViewEntity> >(pViews); insertPViews = await _viewRepository.InsertAsync(insertPViews); views.AddRange(insertPViews); } //执行子级view插入 var childViews = input.Views.FindAll(a => a.ParentPath.NotNull()); var cViews = (from a in childViews where !paths.Contains(a.Path) select a).ToList(); if (cViews.Count > 0) { var insertCViews = _mapper.Map <List <ViewEntity> >(cViews); insertCViews = await _viewRepository.InsertAsync(insertCViews); views.AddRange(insertCViews); } #endregion #region 修改和禁用 //view修改 { ViewEntity a; List <string> labels; string label; string desc; foreach (var view in parentViews) { a = views.Find(a => a.Path == view.Path); if (a?.Id > 0) { labels = view.Label?.Split("\r\n")?.ToList(); label = labels != null && labels.Count > 0 ? labels[0] : string.Empty; desc = labels != null && labels.Count > 1 ? string.Join("\r\n", labels.GetRange(1, labels.Count() - 1)) : string.Empty; a.ParentId = 0; a.Label = label; a.Description = desc; a.Enabled = true; } } } { ViewEntity a; ViewEntity pa; List <string> labels; string label; string desc; foreach (var view in childViews) { a = views.Find(a => a.Path == view.Path); pa = views.Find(a => a.Path == view.ParentPath); if (a?.Id > 0) { labels = view.Label?.Split("\r\n")?.ToList(); label = labels != null && labels.Count > 0 ? labels[0] : string.Empty; desc = labels != null && labels.Count > 1 ? string.Join("\r\n", labels.GetRange(1, labels.Count() - 1)) : string.Empty; a.ParentId = pa.Id; a.Label = label; a.Description = desc; a.Enabled = true; } } } //view禁用 var inputPaths = input.Views.Select(a => a.Path).ToList(); var disabledViews = (from a in views where !inputPaths.Contains(a.Path) select a).ToList(); if (disabledViews.Count > 0) { foreach (var view in disabledViews) { view.Enabled = false; } } #endregion //批量更新 await _viewRepository.UpdateDiy.SetSource(views) .UpdateColumns(a => new { a.ParentId, a.Label, a.Description, a.Enabled }) .ExecuteAffrowsAsync(); return(ResponseOutput.Ok()); }
public async Task <IResponseOutput> Sync(ViewSyncInput input) { return(await _viewServices.SyncAsync(input)); }