lg_backend/langguanApi/Service/MenuService.cs

212 lines
8.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
{
try
{
var entity = menu.Adapt<Menu>();
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 };
}
/// <summary>
/// 更改菜单
/// </summary>
/// <param name="menu">菜单实体类</param>
/// <returns></returns>
public async Task<ApiResult> UpdateMenu(UpdateMenuDto menu)
{
try
{
if (string.IsNullOrEmpty(menu.Id))
{
return new ApiResult() { code = 0, data = false, msg = "更新菜单失败Id不能为空" };
}
var entity = menu.Adapt<Menu>();
await base.UpdateAsync(entity.Id, entity);
}
catch (Exception ex)
{
_logger.LogError($"修改菜单出现异常,请求参数:{Newtonsoft.Json.JsonConvert.SerializeObject(menu)}," +
$"请求接口:'api/Menu/UpdateMenu'" +
$"异常信息:{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, data = true, msg = "更新菜单成功" };
}
/// <summary>
/// 获取菜单树
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<ApiResult> Pager(reqpage input)
{
List<MenuTreeDto> dto = new List<MenuTreeDto>();
try
{
var MenuList = await GetChildList("0");//获取跟节点
if (MenuList.Any())
{
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 = "获取菜单列表不存在" };
}
}
}
}
catch (Exception ex)
{
_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 = "获取菜单列表" };
}
/// <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;
Expression<Func<Menu, bool>> expDataSource = filter => filter.IsDelete;
var list = (await GetListWithExp(exp))
.OrderBy(x => x.Sort)
.ToList().Adapt<List<MenuTreeDto>>();
var DataSourceList = (await GetAsync())
.OrderBy(x => x.Sort)
.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 = "删除菜单成功" };
}
}
}