Files
Yi.Admin/Yi.Framework/Yi.Framework.Service/MenuService.cs
2021-10-31 17:18:57 +08:00

92 lines
3.7 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 Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yi.Framework.Interface;
using Yi.Framework.Model.Models;
namespace Yi.Framework.Service
{
public partial class MenuService:BaseService<menu>, IMenuService
{
short Normal = (short)Common.Enum.DelFlagEnum.Normal;
public async Task<menu> AddChildrenMenu(int menu_id, menu _children)
{
var menu_data = await _DbRead.Set<menu>().Include(u => u.children).Where(u => u.id == menu_id).FirstOrDefaultAsync();
_children.is_top = (short)Common.Enum.TopFlagEnum.Children;
menu_data.children.Add(_children);
await UpdateAsync(menu_data);
return menu_data;
}
public async Task<bool> AddTopMenu(menu _menu)
{
_menu.is_top = (short)Common.Enum.TopFlagEnum.Children;
return await AddAsync(_menu);
}
public async Task<menu> GetMenuInMould()
{
var menu_data= await _DbRead.Set<menu>().Include(u=>u.mould)
.Include(u => u.children).ThenInclude(u => u.mould)
.Include(u=>u.children).ThenInclude(u => u.children).ThenInclude(u => u.mould)
.Include(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.mould)
.Include(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.mould)
.Where(u =>u.is_delete == Normal && u.is_show == (short)Common.Enum.ShowFlagEnum.Show && u.is_top == (short)Common.Enum.TopFlagEnum.Top)
.OrderByDescending(u=>u.sort)
.FirstOrDefaultAsync();
return TopMenuBuild(menu_data);
}
public async Task<List<menu>> GetTopMenusByTopMenuIds(List<int> menuIds)
{
return await _DbRead.Set<menu>().AsNoTracking().Where(u => menuIds.Contains(u.id)).ToListAsync();
}
public async Task<menu> SetMouldByMenu(int id1,int id2)
{
var menu_data = await _DbRead.Set<menu>().Include(u => u.mould).Where(u => u.id == id1).FirstOrDefaultAsync();
var mould_data = await _DbRead.Set<mould>().Where(u => u.id == id1).FirstOrDefaultAsync();
menu_data.mould = mould_data;
_Db.Update(menu_data);
return menu_data;
}
/// <summary>
/// 过滤已经被删除的这个应该是别的地方有方法的不应该写到service层里面的
/// </summary>
/// <param name="menu_data"></param>
/// <returns></returns>
private menu TopMenuBuild(menu menu_data)
{
for (int i = menu_data.children.Count() - 1; i >= 0; i--)
{
if (menu_data.children[i].is_delete == (short)Common.Enum.DelFlagEnum.Deleted)
{
menu_data.children.Remove(menu_data.children[i]);
}
else if (menu_data.children[i] != null)
{
TopMenuBuild(menu_data.children[i]);
}
}
return menu_data;
}
public async Task<List<menu>> GetTopMenuByUserId(int userId)
{
var user_data = await _DbRead.Set<user>().Include(u => u.roles).ThenInclude(u => u.menus).FirstOrDefaultAsync();
List<menu> menuList = new();
user_data.roles.ForEach(u =>
{
var m = u.menus.Where(u => u.is_delete == Normal).ToList();
menuList = menuList.Union(m).ToList();
});
return menuList;
}
}
}