示例#1
0
        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));
 }