diff --git a/langguanApi/Service/MenuService.cs b/langguanApi/Service/MenuService.cs index adfd2f4..0a3fe7f 100644 --- a/langguanApi/Service/MenuService.cs +++ b/langguanApi/Service/MenuService.cs @@ -11,19 +11,43 @@ namespace langguanApi.Service [ServiceInjection(InjectionType.Transient)] public class MenuService : BaseService { - public MenuService(IConfiguration config) : base(config, nameof(Menu)) + private ILogger _logger; + public MenuService(IConfiguration config, ILogger logger) : base(config, nameof(Menu)) { + _logger = logger; } public async Task> GetMenusByParentId(string parentId) { Expression> exp = filter => filter.IsDelete == false && filter.ParentId == parentId; return (await base.GetListWithExp(exp)).OrderBy(x => x.Sort).ToList(); } + /// + /// 新增菜单 + /// + /// 菜单实体 + /// public async Task AddMenu(AddMenuDto menu) { - var entity = menu.Adapt(); - await base.CreateAsync(entity); - return new ApiResult(); + try + { + var entity = menu.Adapt(); + await base.CreateAsync(entity); + } + catch (Exception ex) + { + + _logger.LogError($"新增菜单出现异常,请求参数:{Newtonsoft.Json.JsonConvert.SerializeObject(menu)}," + + $"请求接口:'api/Menu/AddMenu'," + + $"异常信息:{ex.Message}," + + $"异常位置:{ex.StackTrace}" + ); + return new ApiResult { code = 1, msg = "保存菜单失败", data = false }; + } + finally + { + _logger.LogInformation($"新增菜单参数:menu:{Newtonsoft.Json.JsonConvert.SerializeObject(menu)}"); + } + return new ApiResult { code = 0, msg = "保存菜单信息成功", data = true }; } public async Task UpdateMenu(UpdateMenuDto menu) { @@ -38,32 +62,67 @@ namespace langguanApi.Service /// public async Task Pager(reqpage input) { - Expression> exp = filter => filter.IsDelete == false; - if (!string.IsNullOrEmpty(input.key)) - { - exp = exp.And(filter => filter.Name.Contains(input.key)); - } List dto = new List(); - var MenuList = await GetChildList(null); - foreach (var item in MenuList) + try { - dto.Add(new MenuTreeDto() + var MenuList = await GetChildList("0");//获取跟节点 + if (MenuList.Any()) { - Id = item.Id, - Name = item.Name, - Sort = item.Sort, - ParentId = item.ParentId, - ParentName = item.ParentName, - Children = await GetChildList(item.Id) - }); + foreach (var item in MenuList) + { + dto.Add(new MenuTreeDto() + { + Id = item.Id, + Name = item.Name, + Sort = item.Sort, + ParentId = item.ParentId, + ParentName = item.ParentName, + Children = await GetChildList(item.Id) + }); + } + //筛选数据 + if (!string.IsNullOrEmpty(input.key)) + { + if (dto.Exists(p => p.Name == input.key) || + dto.Exists(p => p.Children.Exists(c => c.Name == input.key)) || + dto.Exists(p => p.ParentName == input.key)) + { + if (dto.Exists(p => p.Name == input.key)) + { + dto = dto.Where(p => p.Name == input.key).ToList(); + } + else if (dto.Exists(p => p.Children.Exists(c => c.Name == input.key))) + { + dto = dto.SelectMany(p => p.Children).Where(p => p.Name == input.key).ToList(); + } + else + { + dto = dto.SelectMany(p => p.Children).Where(p => p.ParentName == input.key).ToList(); + } + return new ApiResult() { code = 0, data = dto, msg = "获取菜单列表" }; + } + else + { + return new ApiResult() { code = 0, data = null, msg = "获取菜单列表不存在" }; + } + } + } } - return new ApiResult() { data = dto }; + catch (Exception ex) + { - //return await base.GetPager(new ReqPaing() - //{ - // pageSize = input.pageSize, - // current = input.current - //}, exp); + _logger.LogError($"获取菜单列表出现异常,请求参数:{Newtonsoft.Json.JsonConvert.SerializeObject(input)}," + + $"请求接口:'api/Menu/Pager'," + + $"异常信息:{ex.Message}," + + $"异常位置:{ex.StackTrace}" + ); + return new ApiResult { code = 1, msg = "获取菜单列表失败", data = false }; + } + finally + { + _logger.LogInformation($"获取菜单列表参数:menu:{Newtonsoft.Json.JsonConvert.SerializeObject(input)}"); + } + return new ApiResult() { code = 0, data = dto, msg = "获取菜单列表" }; } /// /// 递归获取子菜单列表 @@ -73,13 +132,18 @@ namespace langguanApi.Service public async Task> GetChildList(string parentId) { Expression> exp = filter => filter.IsDelete == false && filter.ParentId == parentId; + Expression> expDataSource = filter => filter.IsDelete; var list = (await GetListWithExp(exp)) - .OrderByDescending(x => x.Sort) + .OrderBy(x => x.Sort) .ToList().Adapt>(); + var DataSourceList = (await GetAsync()) + .OrderBy(x => x.Sort) + .ToList();//拿到所有数据源,筛选结果 foreach (var item in list) { item.Children = await GetChildList(item.Id); - item.ParentName = (await base.GetAsync(item.ParentId))?.Name; + item.ParentName = DataSourceList.FirstOrDefault(p => p.Id == item.ParentId)?.Name; + item.ParentId = DataSourceList.FirstOrDefault(p => p.Id == item.ParentId)?.Id; } return list; }