重构接口

This commit is contained in:
lzw
2021-10-29 23:23:32 +08:00
parent 9d83b24a8d
commit 0bf80f0f51
16 changed files with 508 additions and 245 deletions

View File

@@ -40,7 +40,7 @@ namespace Yi.Framework.ApiMicroservice.Controllers
public async Task<Result> Login(user _user)
{
var user_data = await _userService.Login(_user);
var menuList = await _userService.GetMenusByUser(user_data);
var menuList = await _menuService.GetTopMenuByUserId(user_data.id);
if ( user_data!=null)
{
var token = MakeJwt.app(new jwtUser() {user=user_data,menuIds= menuList});
@@ -112,9 +112,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers
[HttpPut]
[Authorize]
public async Task<Result> ChangePassword(ChangePwdDto pwdDto)
{
var uid= pwdDto.user.id;
var user_data = await _userService.GetUserById(uid);
{
var user_data = await _userService.GetUserById(pwdDto.user.id);
string msg = "修改成功";
if (! string.IsNullOrEmpty( pwdDto.newPassword))
{

View File

@@ -31,7 +31,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers
/// <returns></returns>
[HttpGet]
public async Task<Result> GetMenuInMould()
{
{
return Result.Success().SetData(await _menuService.GetMenuInMould());
}
/// <summary>
@@ -68,6 +69,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers
[HttpPost]
public async Task<Result> AddTopMenu(menu _menu)
{
await _menuService.AddTopMenu(_menu);
return Result.Success();
}
/// <summary>
@@ -79,6 +82,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers
[HttpPost]
public async Task<Result> SetMouldByMenu(IdDto<int> idDto)
{
await _menuService.SetMouldByMenu(idDto.id1, idDto.id2);
return Result.Success();
}
@@ -90,6 +95,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers
[HttpPost]
public async Task<Result> AddChildrenMenu(ChildrenDto<menu> childrenDto)
{
await _menuService.AddChildrenMenu(childrenDto.parentId, childrenDto.data);
return Result.Success();
}
/// <summary>
@@ -100,6 +107,9 @@ namespace Yi.Framework.ApiMicroservice.Controllers
[HttpGet]
public async Task<Result> GetTopMenusByHttpUser()
{
HttpContext.GetCurrentUserInfo(out List<int> menuIds);
return Result.Success().SetData(await _menuService.GetTopMenusByTopMenuIds(menuIds));
}
}
}

View File

@@ -65,6 +65,17 @@ namespace Yi.Framework.ApiMicroservice.Controllers
return Result.Success();
}
/// <summary>
/// 根据用户id得到该用户有哪些角色
/// 用于显示用户详情中的角色说明
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<Result> GetRolesByUserId(int userId)
{
return Result.Success().SetData(await _roleService.GetRolesByUserId(userId));
}
/// <summary>
/// 给角色设置菜单多个角色与多个菜单让每一个角色都设置ids1为角色ids2为菜单
/// 用于设置角色
@@ -74,6 +85,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers
[HttpPost]
public async Task<Result> SetMenuByRole(IdsListDto<int> idsListDto)
{
await _roleService.SetMenusByRolesId(idsListDto.ids2, idsListDto.ids1);
return Result.Success();
}
/// <summary>
/// 用于给角色设置菜单的时候,点击一个角色,显示这个角色拥有的并列的菜单
@@ -83,6 +96,7 @@ namespace Yi.Framework.ApiMicroservice.Controllers
[HttpGet]
public async Task<Result> GetTopMenusByRoleId(int roleId)
{
return Result.Success().SetData(await _roleService.GetTopMenusByRoleId(roleId) ); ;
}
}
}

View File

@@ -120,8 +120,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers
[HttpGet]
public async Task<Result> GetAxiosByRouter(string router)
{
var _user = HttpContext.GetCurrentUserInfo(out List<int> ids);
var menuList= await _userService.GetAxiosByRouter(router, _user.id, ids);
var _user = HttpContext.GetCurrentUserInfo(out List<int> menuIds);
var menuList= await _userService.GetAxiosByRouter(router, _user.id, menuIds);
AxiosUrlsModel urlsModel = new();
menuList.ForEach(u =>
{

View File

@@ -17,8 +17,8 @@
"RabbitMQ_Enabled": false,
"Redis_Enabled": false,
"Kafka_Enabled": false,
"MutiDB_Enabled": true,
"DbList": [ "Sqlite", "Mysql", "Sqlserver","Oracle"],
"MutiDB_Enabled": false,
"DbList": [ "Sqlite", "Mysql", "Sqlserver", "Oracle" ],
"DbSelect": "Mysql",
"DbConn": {

View File

@@ -9,57 +9,35 @@ namespace Yi.Framework.Interface
{
public partial interface IMenuService:IBaseService<menu>
{
Task<bool> DelListByUpdateAsync(List<int> _ids);
/// <summary>
/// 获取所有菜单
/// 获取所有菜单,关联接口
/// 这个是要递归的,但是要过滤掉删除的,所以,可以写一个通用过滤掉删除的方法
/// </summary>
/// <returns></returns>
Task<IEnumerable<menu>> GetAllEntitiesTrueAsync();
Task<menu> GetMenuInMould();
/// <summary>
/// 通过menu得到mould1对1关系
///
/// 现在top菜单只允许为一个
/// </summary>
/// <param name="_menu"></param>
/// <returns></returns>
Task<mould> GetMouldByMenu(menu _menu);
Task<bool> AddTopMenu(menu _menu);
/// <summary>
/// 通过menu得到他自己与mould注意确保返回的menu里含有mould
/// 给一个菜单设置一个接口,Id1为菜单id,Id2为接口id
/// 用于给菜单设置接口
/// </summary>
/// <param name="_menu"></param>
/// <returns></returns>
Task<menu> GetMenuMouldByMenu(menu _menu);
Task<menu> SetMouldByMenu(int id1, int id2);
/// <summary>
/// 得到该菜单下所有的子类
/// 给一个菜单添加子节点(注意:添加,不是覆盖)
/// </summary>
/// <param name="_menu"></param>
/// <returns></returns>
Task<List<menu>> GetChildrenByMenu(menu _menu);
/// <summary>
/// 给菜单设置接口1对1关系
/// </summary>
/// <param name="mouldId"></param>
/// <param name="menuId"></param>
/// <returns></returns>
Task<bool> SetMouldByMenu(int mouldId,int menuId);
/// <summary>
/// 添加子菜单
/// </summary>
/// <param name="_menu"></param>
/// <returns></returns>
Task<menu> AddChildrenMenu(int menu_id, menu _children);
/// <summary>
/// 获取目录菜单
/// 获取用户的目录菜单,不包含接口
/// 用于账户信息页面,显示这个用户有哪些菜单,需要并列
/// </summary>
/// <returns></returns>
Task<List<menu>> GetTopMenu();
/// <summary>
/// 获取子菜单
/// </summary>
/// <returns></returns>
Task<List<menu>> GetChildrenMenu(menu _menu);
Task<List<menu>> GetMenuMould();
Task<List<menu>> GetTopMenusByTopMenuIds(List<int> menuIds);
Task<List<menu>> GetTopMenuByUserId(int userId);
}
}

View File

@@ -9,8 +9,7 @@ namespace Yi.Framework.Interface
{
public partial interface IMouldService : IBaseService<mould>
{
Task<bool> DelListByUpdateAsync(List<int> _ids);
Task<IEnumerable<mould>> GetAllEntitiesTrueAsync();
/// <summary>
/// 得到该接口属于哪个菜单的

View File

@@ -9,22 +9,13 @@ namespace Yi.Framework.Interface
{
public partial interface IRoleService:IBaseService<role>
{
Task<bool> DelListByUpdateAsync(List<int> _ids);
Task<IEnumerable<role>> GetAllEntitiesTrueAsync();
/// <summary>
/// 获取该角色的所有菜单
/// </summary>
/// <param name="_role"></param>
/// <param name="roleId"></param>
/// <returns></returns>
Task<List<menu>> GetMenusByRole(role _role);
/// <summary>
/// 获取含有该角色的所有用户
/// </summary>
/// <param name="_role"></param>
/// <returns></returns>
Task<List<user>> GetUsersByRole(role _role);
Task<List<menu>> GetMenusByRole(int roleId);
/// <summary>
/// 给多个角色设置多个菜单
@@ -38,7 +29,19 @@ namespace Yi.Framework.Interface
/// </summary>
/// <param name="roleIds"></param>
/// <returns></returns>
Task<List<menu>> GetMenusByRoleId(int roleId);
Task<List<menu>> GetMenusByRoleId(List<int> roleIds);
/// <summary>
/// 获取用户的角色
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
Task<List<role>> GetRolesByUserId(int userId);
/// <summary>
/// 获取该角色的top菜单
/// </summary>
/// <param name="roleId"></param>
/// <returns></returns>
Task<List<menu>> GetTopMenusByRoleId(int roleId);
}
}

View File

@@ -28,6 +28,8 @@ namespace Yi.Framework.Model
_connStr = connstr;
return this;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)

View File

@@ -0,0 +1,199 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Yi.Framework.Model;
namespace Yi.Framework.Model.Migrations
{
[DbContext(typeof(DataContext))]
[Migration("20211029124310_yi-2")]
partial class yi2
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("Relational:MaxIdentifierLength", 64)
.HasAnnotation("ProductVersion", "5.0.11");
modelBuilder.Entity("Yi.Framework.Model.Models.menu", b =>
{
b.Property<int>("id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
b.Property<string>("icon")
.HasColumnType("longtext");
b.Property<int>("is_delete")
.HasColumnType("int");
b.Property<int>("is_show")
.HasColumnType("int");
b.Property<int>("is_top")
.HasColumnType("int");
b.Property<string>("menu_name")
.HasColumnType("longtext");
b.Property<int?>("menuid")
.HasColumnType("int");
b.Property<int?>("mouldid")
.HasColumnType("int");
b.Property<int?>("roleid")
.HasColumnType("int");
b.Property<string>("router")
.HasColumnType("longtext");
b.Property<int>("sort")
.HasColumnType("int");
b.HasKey("id");
b.HasIndex("menuid");
b.HasIndex("mouldid");
b.HasIndex("roleid");
b.ToTable("menu");
});
modelBuilder.Entity("Yi.Framework.Model.Models.mould", b =>
{
b.Property<int>("id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
b.Property<int>("is_delete")
.HasColumnType("int");
b.Property<string>("mould_name")
.HasColumnType("longtext");
b.Property<string>("url")
.HasColumnType("longtext");
b.HasKey("id");
b.ToTable("mould");
});
modelBuilder.Entity("Yi.Framework.Model.Models.role", b =>
{
b.Property<int>("id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
b.Property<string>("introduce")
.HasColumnType("longtext");
b.Property<int>("is_delete")
.HasColumnType("int");
b.Property<string>("role_name")
.HasColumnType("longtext");
b.Property<int?>("userid")
.HasColumnType("int");
b.HasKey("id");
b.HasIndex("userid");
b.ToTable("role");
});
modelBuilder.Entity("Yi.Framework.Model.Models.user", b =>
{
b.Property<int>("id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
b.Property<string>("address")
.HasColumnType("longtext");
b.Property<int?>("age")
.HasColumnType("int");
b.Property<string>("email")
.HasColumnType("longtext");
b.Property<string>("icon")
.HasColumnType("longtext");
b.Property<string>("introduction")
.HasColumnType("longtext");
b.Property<string>("ip")
.HasColumnType("longtext");
b.Property<int>("is_delete")
.HasColumnType("int");
b.Property<string>("nick")
.HasColumnType("longtext");
b.Property<string>("password")
.HasColumnType("longtext");
b.Property<int?>("phone")
.HasColumnType("int");
b.Property<string>("username")
.HasColumnType("longtext");
b.HasKey("id");
b.ToTable("user");
});
modelBuilder.Entity("Yi.Framework.Model.Models.menu", b =>
{
b.HasOne("Yi.Framework.Model.Models.menu", null)
.WithMany("children")
.HasForeignKey("menuid");
b.HasOne("Yi.Framework.Model.Models.mould", "mould")
.WithMany()
.HasForeignKey("mouldid");
b.HasOne("Yi.Framework.Model.Models.role", null)
.WithMany("menus")
.HasForeignKey("roleid");
b.Navigation("mould");
});
modelBuilder.Entity("Yi.Framework.Model.Models.role", b =>
{
b.HasOne("Yi.Framework.Model.Models.user", null)
.WithMany("roles")
.HasForeignKey("userid");
});
modelBuilder.Entity("Yi.Framework.Model.Models.menu", b =>
{
b.Navigation("children");
});
modelBuilder.Entity("Yi.Framework.Model.Models.role", b =>
{
b.Navigation("menus");
});
modelBuilder.Entity("Yi.Framework.Model.Models.user", b =>
{
b.Navigation("roles");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,141 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace Yi.Framework.Model.Migrations
{
public partial class yi2 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "menurole");
migrationBuilder.DropTable(
name: "roleuser");
migrationBuilder.AddColumn<int>(
name: "userid",
table: "role",
type: "int",
nullable: true);
migrationBuilder.AddColumn<int>(
name: "roleid",
table: "menu",
type: "int",
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_role_userid",
table: "role",
column: "userid");
migrationBuilder.CreateIndex(
name: "IX_menu_roleid",
table: "menu",
column: "roleid");
migrationBuilder.AddForeignKey(
name: "FK_menu_role_roleid",
table: "menu",
column: "roleid",
principalTable: "role",
principalColumn: "id",
onDelete: ReferentialAction.Restrict);
migrationBuilder.AddForeignKey(
name: "FK_role_user_userid",
table: "role",
column: "userid",
principalTable: "user",
principalColumn: "id",
onDelete: ReferentialAction.Restrict);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_menu_role_roleid",
table: "menu");
migrationBuilder.DropForeignKey(
name: "FK_role_user_userid",
table: "role");
migrationBuilder.DropIndex(
name: "IX_role_userid",
table: "role");
migrationBuilder.DropIndex(
name: "IX_menu_roleid",
table: "menu");
migrationBuilder.DropColumn(
name: "userid",
table: "role");
migrationBuilder.DropColumn(
name: "roleid",
table: "menu");
migrationBuilder.CreateTable(
name: "menurole",
columns: table => new
{
menusid = table.Column<int>(type: "int", nullable: false),
rolesid = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_menurole", x => new { x.menusid, x.rolesid });
table.ForeignKey(
name: "FK_menurole_menu_menusid",
column: x => x.menusid,
principalTable: "menu",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_menurole_role_rolesid",
column: x => x.rolesid,
principalTable: "role",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
})
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateTable(
name: "roleuser",
columns: table => new
{
rolesid = table.Column<int>(type: "int", nullable: false),
usersid = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_roleuser", x => new { x.rolesid, x.usersid });
table.ForeignKey(
name: "FK_roleuser_role_rolesid",
column: x => x.rolesid,
principalTable: "role",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_roleuser_user_usersid",
column: x => x.usersid,
principalTable: "user",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
})
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateIndex(
name: "IX_menurole_rolesid",
table: "menurole",
column: "rolesid");
migrationBuilder.CreateIndex(
name: "IX_roleuser_usersid",
table: "roleuser",
column: "usersid");
}
}
}

View File

@@ -44,6 +44,9 @@ namespace Yi.Framework.Model.Migrations
b.Property<int?>("mouldid")
.HasColumnType("int");
b.Property<int?>("roleid")
.HasColumnType("int");
b.Property<string>("router")
.HasColumnType("longtext");
@@ -56,6 +59,8 @@ namespace Yi.Framework.Model.Migrations
b.HasIndex("mouldid");
b.HasIndex("roleid");
b.ToTable("menu");
});
@@ -94,8 +99,13 @@ namespace Yi.Framework.Model.Migrations
b.Property<string>("role_name")
.HasColumnType("longtext");
b.Property<int?>("userid")
.HasColumnType("int");
b.HasKey("id");
b.HasIndex("userid");
b.ToTable("role");
});
@@ -143,36 +153,6 @@ namespace Yi.Framework.Model.Migrations
b.ToTable("user");
});
modelBuilder.Entity("menurole", b =>
{
b.Property<int>("menusid")
.HasColumnType("int");
b.Property<int>("rolesid")
.HasColumnType("int");
b.HasKey("menusid", "rolesid");
b.HasIndex("rolesid");
b.ToTable("menurole");
});
modelBuilder.Entity("roleuser", b =>
{
b.Property<int>("rolesid")
.HasColumnType("int");
b.Property<int>("usersid")
.HasColumnType("int");
b.HasKey("rolesid", "usersid");
b.HasIndex("usersid");
b.ToTable("roleuser");
});
modelBuilder.Entity("Yi.Framework.Model.Models.menu", b =>
{
b.HasOne("Yi.Framework.Model.Models.menu", null)
@@ -183,43 +163,34 @@ namespace Yi.Framework.Model.Migrations
.WithMany()
.HasForeignKey("mouldid");
b.HasOne("Yi.Framework.Model.Models.role", null)
.WithMany("menus")
.HasForeignKey("roleid");
b.Navigation("mould");
});
modelBuilder.Entity("menurole", b =>
modelBuilder.Entity("Yi.Framework.Model.Models.role", b =>
{
b.HasOne("Yi.Framework.Model.Models.menu", null)
.WithMany()
.HasForeignKey("menusid")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Yi.Framework.Model.Models.role", null)
.WithMany()
.HasForeignKey("rolesid")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("roleuser", b =>
{
b.HasOne("Yi.Framework.Model.Models.role", null)
.WithMany()
.HasForeignKey("rolesid")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Yi.Framework.Model.Models.user", null)
.WithMany()
.HasForeignKey("usersid")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
.WithMany("roles")
.HasForeignKey("userid");
});
modelBuilder.Entity("Yi.Framework.Model.Models.menu", b =>
{
b.Navigation("children");
});
modelBuilder.Entity("Yi.Framework.Model.Models.role", b =>
{
b.Navigation("menus");
});
modelBuilder.Entity("Yi.Framework.Model.Models.user", b =>
{
b.Navigation("roles");
});
#pragma warning restore 612, 618
}
}

View File

@@ -11,118 +11,74 @@ 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 _Db.Set<menu>().Include(u => u.children).Where(u => u.id == menu_id).FirstOrDefaultAsync();
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;
}
/// <summary>
/// 这个getEntity没有关联子类怎么能得到子类呢这是一个错误的接口
/// </summary>
/// <param name="_menu"></param>
/// <returns></returns>
public async Task<List<menu>> GetChildrenByMenu(menu _menu)
public async Task<bool> AddTopMenu(menu _menu)
{
var menu_data = await GetEntity(u=>u.id==_menu.id&& u.is_delete == (short)Common.Enum.DelFlagEnum.Normal);
var childrenList = menu_data.children.ToList();
return childrenList;
_menu.is_top = (short)Common.Enum.TopFlagEnum.Children;
return await AddAsync(_menu);
}
/// <summary>
/// 不要返回一个新创的变量直接返回menu.children,只要id就不要传一个对象
/// </summary>
/// <param name="_menu"></param>
/// <returns></returns>
public async Task<List<menu>> GetChildrenMenu(menu _menu)
public async Task<menu> GetMenuInMould()
{
var menu= await _Db.Set<menu>().Include(u => u.children).Include(u=>u.mould)
.Where(u =>u.id==_menu.id&& u.is_top == (short)Common.Enum.TopFlagEnum.Children )
.FirstOrDefaultAsync();
var childrenList = menu.children.ToList();
return childrenList;
}
public async Task<List<menu>> GetMenuMould()
{
var menuList= await _Db.Set<menu>().Include(u => u.children).Include(u => u.mould)
.Where(u => u.is_delete == (short)Common.Enum.DelFlagEnum.Normal )
.ToListAsync();
return menuList;
}
/// <summary>
/// 和GetChildrenMenu方法可以合并
/// </summary>
/// <param name="_menu"></param>
/// <returns></returns>
public async Task<menu> GetMenuMouldByMenu(menu _menu)
{
var menu_data = await _Db.Set<menu>().Include(u => u.children).Include(u=>u.mould)
.Where(u=>u.id==_menu.id&& u.is_delete == (short)Common.Enum.ShowFlagEnum.Show)
.FirstOrDefaultAsync();
return menu_data;
}
public async Task<mould> GetMouldByMenu(menu _menu)
{
var menu_data =await _Db.Set<menu>().Include(u => u.mould).Where(u => u.id == _menu.id).FirstOrDefaultAsync();
return menu_data.mould;
}
/// <summary>
/// 5层迭代
/// </summary>
/// <returns></returns>
public async Task<List<menu>> GetTopMenu()
{
var menu_data= await _Db.Set<menu>().Include(u=>u.mould)
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 == (short)Common.Enum.DelFlagEnum.Normal && u.is_top == (short)Common.Enum.ShowFlagEnum.Show)
.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)
.ToListAsync();
.FirstOrDefaultAsync();
return TopMenuBuild(menu_data);
}
public async Task<List<menu>> GetTopMenusByHttpUser(List<int> menuIds)
{
return await _DbRead.Set<menu>().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 List<menu> TopMenuBuild(List<menu> menu_data)
private menu TopMenuBuild(menu menu_data)
{
for(int i = menu_data.Count()-1; i >=0; i--)
for (int i = menu_data.children.Count() - 1; i >= 0; i--)
{
if(menu_data[i].is_delete == (short)Common.Enum.DelFlagEnum.Deleted)
if (menu_data.children[i].is_delete == (short)Common.Enum.DelFlagEnum.Deleted)
{
menu_data.Remove(menu_data[i]);
menu_data.children.Remove(menu_data.children[i]);
}
else if (menu_data.children[i] != null)
{
TopMenuBuild(menu_data.children[i]);
}
else if(menu_data[i].children != null)
{
menu_data[i].children= TopMenuBuild(menu_data[i].children.ToList());
}
}
return menu_data;
}
/// <summary>
/// 要关联啊menudata要关联mould而且能用find就用find
/// </summary>
/// <param name="mouldId"></param>
/// <param name="menuId"></param>
/// <returns></returns>
public async Task<bool> SetMouldByMenu(int mouldId, int menuId)
public async Task<List<menu>> GetTopMenuByUserId(int userId)
{
var menu_data = await GetEntity(u => u.id == menuId);
var mould_data = await _Db.Set<mould>().Where(u => u.id==mouldId).FirstOrDefaultAsync();
menu_data.mould = mould_data;
return await UpdateAsync(menu_data);
throw new Exception();
}
}
}

View File

@@ -11,58 +11,52 @@ namespace Yi.Framework.Service
{
public partial class RoleService:BaseService<role>, IRoleService
{
/// <summary>
/// 该方法返回的是并列角色并列的菜单,无递归
/// </summary>
/// <param name="_role"></param>
/// <returns></returns>
public async Task<List<menu>> GetMenusByRole(role _role)
short Normal = (short)Common.Enum.DelFlagEnum.Normal;
public async Task<List<role>> GetRolesByUserId(int userId)
{
var role_data =await _Db.Set<role>().Include(u => u.menus)
.Where(u => u.id == _role.id && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).FirstOrDefaultAsync();
var menuList =role_data.menus.Where(u => u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).ToList();
return menuList;
}
/// <summary>
/// 这个接口好像没用,算作废吧,怎么能通过角色获取用户呢?数据库表也得改,不能通过角色获取用户
/// </summary>
/// <param name="_role"></param>
/// <returns></returns>
public async Task<List<user>> GetUsersByRole(role _role)
{
var role_data = await _Db.Set<role>().Include(u => u.users)
.Where(u => u.id == _role.id && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).FirstOrDefaultAsync();
return role_data.users.ToList();
var user_data =await _Db.Set<user>().Include(u => u.roles).Where(u => u.id==userId).FirstOrDefaultAsync();
var roleList = user_data.roles.Where(u=>u.is_delete==Normal).ToList();
return roleList;
}
public async Task<bool> SetMenusByRolesId(List<int> menuIds,List<int> roleIds)
{
var role_data = await _Db.Set<role>().Include(u=>u.menus).Where(u =>roleIds.Contains(u.id) && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).ToListAsync();
if (role_data == null)
{
return false;
}
var menuList = await _Db.Set<menu>().Where(u => menuIds.Contains(u.id)&&u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).ToListAsync();
var role_data = await _Db.Set<role>().Include(u => u.menus).ThenInclude(u => u.children).Where(u =>roleIds.Contains(u.id) && u.is_delete == Normal).ToListAsync();
var menuList = await _Db.Set<menu>().Where(u => menuIds.Contains(u.id)&&u.is_delete ==Normal).ToListAsync();
foreach(var role in role_data)
{
role.menus =menuList;
}
return await UpdateListAsync(role_data);
}
/// <summary>
/// 好像也不需要通过菜单来获取角色啊,这个数据库也得改
/// </summary>
/// <param name="roleId"></param>
/// <returns></returns>
public async Task<List<menu>> GetMenusByRoleId(int roleId)
public async Task<List<menu>> GetMenusByRoleId(List< int> roleIds)
{
var role_data = await _Db.Set<role>().Include(u=>u.menus).Where(u =>u.id==roleId && u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).FirstOrDefaultAsync();
var menuList = role_data.menus.ToList();
menuList.ForEach(u => u.roles = null);
var role_data = await _Db.Set<role>().Include(u => u.menus).Where(u => roleIds.Contains(u.id) && u.is_delete == Normal).ToListAsync();
List<menu> menuList = new();
role_data.ForEach(u =>
{
var m = u.menus.Where(u => u.is_delete == Normal).ToList();
menuList = menuList.Union(m).ToList();
});
return menuList;
}
public async Task<List<menu>> GetTopMenusByRoleId(int roleId)
{
var role_data = await _Db.Set<role>().Where(u => u.id == roleId).FirstOrDefaultAsync();
var menuList = role_data.menus.Where(u => u.is_delete == Normal).ToList();
menuList.ForEach(u => u.children = null);
return menuList;
}
public async Task<List<menu>> GetMenusByRole(int roleId)
{
var role_data = await _Db.Set<role>().Include(u => u.menus).Where(u => u.id == roleId).FirstOrDefaultAsync();
var menuList = role_data.menus.Where(u => u.is_delete == Normal).ToList();
return menuList;
}
}
}

View File

@@ -38,7 +38,7 @@ namespace Yi.Framework.Service
/// <returns></returns>
public async Task<user> GetUserById(int userId)
{
return await _Db.Set<user>().Include(u => u.roles).ThenInclude(u => u.menus).ThenInclude(u => u.children).ThenInclude(u => u.mould).Where(u=>u.id==userId).FirstOrDefaultAsync();
return await _DbRead.Set<user>().Include(u => u.roles).ThenInclude(u => u.menus).ThenInclude(u => u.children).ThenInclude(u => u.mould).Where(u=>u.id==userId).FirstOrDefaultAsync();
}
public async Task<List<menu>> GetAxiosByRouter(string router, int userId, List<int> menuIds)
@@ -47,7 +47,7 @@ namespace Yi.Framework.Service
List<menu> menuList = new();
foreach(var item in user_data.roles)
{
var m= item.menus.Where(u => u.router.ToUpper() == router.ToUpper()).FirstOrDefault();
var m=item.menus.Where(u => u.router.ToUpper() == router.ToUpper()).FirstOrDefault();
menuList= m.children.Where(u => menuIds.Contains(u.id)&&u.is_delete==Normal).ToList();
if (m != null) { break; }
}
@@ -73,7 +73,7 @@ namespace Yi.Framework.Service
List<menu> endMenu = new();
foreach (var item in topMenu)
{
var p = await _Db.Set<menu>().Where(u => u.id == item.id).Include(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ToListAsync();
var p = await _DbRead.Set<menu>().Where(u => u.id == item.id).Include(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ToListAsync();
endMenu = endMenu.Union(p).ToList();
}
@@ -92,10 +92,7 @@ namespace Yi.Framework.Service
for (int i = menu_data.Count() - 1; i >= 0; i--)
{
if (menu_data[i].icon == null)
{
menu_data[i].icon = "Yi";
}
if (!allMenuIds.Contains(menu_data[i].id) || menu_data[i].is_delete == (short)Common.Enum.DelFlagEnum.Deleted || menu_data[i].is_show == (short)Common.Enum.ShowFlagEnum.NoShow)
{
@@ -139,7 +136,7 @@ namespace Yi.Framework.Service
public async Task<user> Login(user _user)
{
var user_data = await _Db.Set<user>().Include(u => u.roles).Where(u => u.username == _user.username && u.password ==_user.password &&u.is_delete == (short)Common.Enum.DelFlagEnum.Normal).FirstOrDefaultAsync();
var user_data = await _DbRead.Set<user>().Include(u => u.roles).Where(u => u.username == _user.username && u.password ==_user.password &&u.is_delete == Normal).FirstOrDefaultAsync();
return user_data;
}
@@ -155,8 +152,8 @@ namespace Yi.Framework.Service
public async Task<bool> SetRoleByUser(List<int> roleIds, List<int> userIds)
{
var user_data = await _Db.Set<user>().Include(u => u.roles).Where(u => userIds.Contains(u.id)).ToListAsync();
var roleList = await _Db.Set<role>().Where(u => roleIds.Contains(u.id)).ToListAsync();
var user_data = await _DbRead.Set<user>().Include(u => u.roles).Where(u => userIds.Contains(u.id)).ToListAsync();
var roleList = await _DbRead.Set<role>().Where(u => roleIds.Contains(u.id)).ToListAsync();
user_data.ForEach(u => u.roles = roleList);
return await UpdateListAsync(user_data);
}

View File

@@ -47,7 +47,7 @@ namespace Yi.Framework.StaticPageProcessor
services.AddHostedService<InitPageWorker>();
#region
services.Configure<MySqlConnOptions>(configuration.GetSection("MysqlConn"));
//services.Configure<MySqlConnOptions>(configuration.GetSection("MysqlConn"));
services.AddTransient<CacheClientDB, CacheClientDB>();
services.Configure<RedisConnOptions>(configuration.GetSection("RedisConn"));