124 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C#
		
	
	
	
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<Menu>
 | 
						||
    {
 | 
						||
        private ILogger<MenuService> _logger;
 | 
						||
        public MenuService(IConfiguration config, ILogger<MenuService> logger) : base(config, nameof(Menu))
 | 
						||
        {
 | 
						||
            _logger = logger;
 | 
						||
        }
 | 
						||
        public async Task<List<Menu>> GetMenusByParentId(string parentId)
 | 
						||
        {
 | 
						||
            Expression<Func<Menu, bool>> exp = filter => filter.IsDelete == false && filter.ParentId == parentId;
 | 
						||
            return (await base.GetListWithExp(exp)).OrderBy(x => x.Sort).ToList();
 | 
						||
        }
 | 
						||
        /// <summary>
 | 
						||
        /// 新增菜单
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="menu">菜单实体</param>
 | 
						||
        /// <returns></returns>
 | 
						||
        public async Task<ApiResult> AddMenu(AddMenuDto menu)
 | 
						||
        {
 | 
						||
            var entity = menu.Adapt<Menu>();
 | 
						||
            await base.CreateAsync(entity);
 | 
						||
            return new ApiResult { code = 0, msg = "保存菜单信息成功", data = true };
 | 
						||
        }
 | 
						||
        /// <summary>
 | 
						||
        /// 更改菜单
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="menu">菜单实体类</param>
 | 
						||
        /// <returns></returns>
 | 
						||
        public async Task<ApiResult> UpdateMenu(UpdateMenuDto menu)
 | 
						||
        {
 | 
						||
            var entity = menu.Adapt<Menu>();
 | 
						||
            await base.UpdateAsync(entity.Id, entity);
 | 
						||
            return new ApiResult() { code = 0, data = true, msg = "更新菜单成功" };
 | 
						||
        }
 | 
						||
        /// <summary>
 | 
						||
        /// 获取菜单树
 | 
						||
        /// </summary>
 | 
						||
        /// <returns></returns>
 | 
						||
        public async Task<ApiResult> GetMenuTree()
 | 
						||
        {
 | 
						||
            List<MenuTreeDto> dto = new List<MenuTreeDto>();
 | 
						||
            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 };
 | 
						||
        }
 | 
						||
        /// <summary>
 | 
						||
        /// 递归获取子菜单列表
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="parentId"></param>
 | 
						||
        /// <returns></returns>
 | 
						||
        public async Task<List<MenuTreeDto>> GetChildList(string parentId)
 | 
						||
        {
 | 
						||
            Expression<Func<Menu, bool>> exp = filter => filter.IsDelete == false&& filter.ParentId == parentId;
 | 
						||
            var list = (await GetListWithExp(exp))
 | 
						||
                .OrderBy(x => x.Sort)
 | 
						||
                .ToList().Adapt<List<MenuTreeDto>>();
 | 
						||
            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;
 | 
						||
        }
 | 
						||
 | 
						||
        /// <summary>
 | 
						||
        /// 作废菜单 (废弃,不做处理)
 | 
						||
        /// </summary>
 | 
						||
        /// <param name="id">当前菜单id</param>
 | 
						||
        /// <returns></returns>
 | 
						||
        public async Task<ApiResult> 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 = "删除菜单成功" };
 | 
						||
        }
 | 
						||
    }
 | 
						||
}
 |