using langguanApi.Extensions; using langguanApi.Extensions.AutoDI; using langguanApi.Model; using langguanApi.Model.Entity; using Mapster; using Microsoft.AspNetCore.Mvc.ApiExplorer; using System.Linq.Expressions; namespace langguanApi.Service { [ServiceInjection(InjectionType.Transient)] public class MenuService : BaseService { 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 { code = 0, msg = "保存菜单信息成功", data = true }; } /// /// 更改菜单 /// /// 菜单实体类 /// public async Task UpdateMenu(UpdateMenuDto menu) { var entity = menu.Adapt(); await base.UpdateAsync(entity.Id, entity); return new ApiResult() { code = 0, data = true, msg = "更新菜单成功" }; } /// /// 获取菜单树 /// /// public async Task GetMenuTree() { List dto = new List(); var MenuList = await GetChildList("0"); 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) }); } return new ApiResult() { data = dto }; } /// /// 递归获取子菜单列表 /// /// /// public async Task> GetChildList(string parentId) { Expression> exp = filter => filter.IsDelete == false&& filter.ParentId == parentId; var list = (await GetListWithExp(exp)) .OrderBy(x => x.Sort) .ToList().Adapt>(); var DataSourceList = (await GetAsync()).ToList();//拿到所有数据源,筛选结果 foreach (var item in list) { item.Children = await GetChildList(item.Id); item.ParentName = DataSourceList.FirstOrDefault(p => p.Id == item.ParentId)?.Name; item.ParentId = DataSourceList.FirstOrDefault(p => p.Id == item.ParentId)?.Id; } return list; } /// /// 作废菜单 (废弃,不做处理) /// /// 当前菜单id /// public async Task DeleteMenu(string id) { try { var entity = await base.GetAsync(id); if (entity == null) { return new ApiResult() { code = 0, data = false, msg = "删除菜单失败,Id不存在" }; } entity.IsDelete = true; await base.UpdateAsync(id, entity); } catch (Exception ex) { _logger.LogError($"删除菜单出现异常,请求参数:{Newtonsoft.Json.JsonConvert.SerializeObject(id)}," + $"请求接口:'api/Menu/DeleteMenu'," + $"异常信息:{ex.Message}," + $"异常位置:{ex.StackTrace}" ); return new ApiResult { code = 1, msg = "删除菜单失败", data = false }; } finally { _logger.LogInformation($"删除菜单参数:menuId:{id}"); } return new ApiResult() { code = 0, data = true, msg = "删除菜单成功" }; } } }