public async Task <IResponseOutput> Sync(ApiSyncInput input) { return(await _apiServices.SyncAsync(input)); }
public async Task <IResponseOutput> SyncAsync(ApiSyncInput input) { //查询所有api var apis = await _apiRepository.Select.ToListAsync(); var paths = apis.Select(a => a.Path).ToList(); //path处理 foreach (var api in input.Apis) { api.Path = api.Path?.Trim().ToLower(); api.ParentPath = api.ParentPath?.Trim().ToLower(); } #region 执行插入 //执行父级api插入 var parentApis = input.Apis.FindAll(a => a.ParentPath.IsNull()); var pApis = (from a in parentApis where !paths.Contains(a.Path) select a).ToList(); if (pApis.Count > 0) { var insertPApis = _mapper.Map <List <ApiEntity> >(pApis); insertPApis = await _apiRepository.InsertAsync(insertPApis); apis.AddRange(insertPApis); } //执行子级api插入 var childApis = input.Apis.FindAll(a => a.ParentPath.NotNull()); var cApis = (from a in childApis where !paths.Contains(a.Path) select a).ToList(); if (cApis.Count > 0) { var insertCApis = _mapper.Map <List <ApiEntity> >(cApis); insertCApis = await _apiRepository.InsertAsync(insertCApis); apis.AddRange(insertCApis); } #endregion #region 修改和禁用 { //api修改 ApiEntity a; List <string> labels; string label; string desc; foreach (var api in parentApis) { a = apis.Find(a => a.Path == api.Path); if (a?.Id > 0) { labels = api.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; } } } { //api修改 ApiEntity a; ApiEntity pa; List <string> labels; string label; string desc; foreach (var api in childApis) { a = apis.Find(a => a.Path == api.Path); pa = apis.Find(a => a.Path == api.ParentPath); if (a?.Id > 0) { labels = api.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.HttpMethods = api.HttpMethods; a.Enabled = true; } } } { //api禁用 var inputPaths = input.Apis.Select(a => a.Path).ToList(); var disabledApis = (from a in apis where !inputPaths.Contains(a.Path) select a).ToList(); if (disabledApis.Count > 0) { foreach (var api in disabledApis) { api.Enabled = false; } } } #endregion //批量更新 await _apiRepository.UpdateDiy.SetSource(apis) .UpdateColumns(a => new { a.ParentId, a.Label, a.HttpMethods, a.Description, a.Enabled }) .ExecuteAffrowsAsync(); return(ResponseOutput.Ok()); }