yyk
2024-08-22 1310b47a24f0cc70f0128c820bd490dca6a1a921
Wms/WMS.BLL/SysServer/RoleRightServer.cs
@@ -7,7 +7,10 @@
using AutoMapper;
using Model.ModelDto.SysDto;
using Model.ModelVm.SysVm;
using SqlSugar;
using Utility;
using WMS.DAL.SystemService;
using WMS.Entity.Context;
using WMS.Entity.SysEntity;
using WMS.IBLL.ISysServer;
using WMS.IDAL.ISysInterface;
@@ -22,14 +25,15 @@
        /// <summary>
        /// 依赖注入
        /// </summary>
        public IRoleRightRepository _rolerights { get; set; }
        private static readonly SqlSugarScope Db = DataContext.Db;
        private readonly UserManager _userManager;
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="roles"></param>
        public RoleRightServer(IRoleRightRepository rolerights)
        public RoleRightServer(UserManager userManager)
        {
            _rolerights = rolerights;
            _userManager = userManager;
        }
        /// <summary>
@@ -37,28 +41,25 @@
        /// </summary>
        /// <param name="userId">用户Id</param>
        /// <returns></returns>
        public List<RoleRightDto> GetRoleMenuList(int userId)
        public async Task<List<RoleRightDto>> GetRoleMenuList()
        {
            try
            var modUser = await Db.Queryable<SysUserInfor>().FirstAsync(m => m.Id == _userManager.UserId && m.IsDel == "0");
            if (modUser == null)
            {
                var user = _rolerights.GetRoleMenuList(userId);
                return user;
                throw Oops.Bah("未查询到登录人信息");
            }
            catch (Exception e)
            if (string.IsNullOrWhiteSpace(modUser.RoleNo))
            {
                throw new Exception(e.Message);
                throw Oops.Bah("未查询到登录人的所属角色信息");
            }
        }
        /// <summary>
        /// 获取角色权限信息列表
        /// 多表:角色权限、角色、菜单
        /// </summary>
        /// <returns></returns>
        public List<RoleRightDto> GetRoleRightList()
        {
            List<RoleRightDto> roleRightDtos = _rolerights.GetRoleRightList();
            return roleRightDtos;
            return await Db.Queryable<SysRoleRight>()
                            .LeftJoin<SysFunctionMenu>((a, b) => a.MenuNo == b.MenuNo)
                            .LeftJoin<SysRoles>((a, b, c) => a.RoleNo == c.RoleNo)
                            .Where((a, b, c) => a.IsDel == "0" && b.IsDel == "0" && c.IsDel == "0")
                            .Where((a, b, c) => a.RoleNo == modUser.RoleNo)
                            .OrderBy((a, b, c) => b.Ord)            //.OrderBy((a, b, c) => SqlFunc.ToInt32(a.MenuNo))
                            .Select<RoleRightDto>()
                            .ToListAsync();
        }
        /// <summary>
@@ -66,21 +67,9 @@
        /// </summary>
        /// <param name="rolerightids">角色权限id</param>
        /// <returns></returns>
        public List<SysRoleRight> GetRoleRightOneListById(int id)
        public async Task<List<SysRoleRight>> GetRoleRightOneListById(int id)
        {
            List<SysRoleRight> roleRights = _rolerights.GetRoleRightOneListById(id);
            return roleRights;
        }
        /// <summary>
        /// 根据角色号获取角色权限信息列表(单表)
        /// </summary>
        /// <param name="roleno">角色好</param>
        /// <returns></returns>
        public List<SysRoleRight> GetRoleRightOneListByNo(string roleno)
        {
            List<SysRoleRight> roleRights = _rolerights.GetRoleRightOneListByNo(roleno);
            return roleRights;
            return await Db.Queryable<SysRoleRight>().Where(s => s.IsDel == "0" && s.RoleNo == SqlFunc.Subqueryable<SysRoles>().Where(c => c.IsDel == "0" && c.Id == id).Select(c => c.RoleNo)).ToListAsync();
        }
        /// <summary>
@@ -90,79 +79,44 @@
        /// <param name="RoleNo">角色号</param>
        /// <returns></returns>
        /// <exception cref="Exception">捕获异常</exception>
        public async Task<int> InsertRoleRight(string MenuNo, string RoleNo, string userId)
        public async Task InsertRoleRight(string MenuNo, string RoleNo)
        {
            //捕获异常
            try
            List<SysRoleRight> listRole = await Db.Queryable<SysRoleRight>().Where(s => s.RoleNo == RoleNo).ToListAsync();
            if (listRole.Count > 0)
            {
                //将菜单号进行分割 存储数组中
                var arr = MenuNo.Split(',');
                int i = 0;
                //查询该角色是否拥有权限
                List<SysRoleRight> rolelist = GetRoleRightOneListByNo(RoleNo);
                //有
                if (rolelist.Count > 0)
                await Db.Deleteable<SysRoleRight>().Where(s => s.RoleNo == RoleNo).ExecuteCommandAsync();
            }
            var arr = MenuNo.Split(',');
            var listRight = new List<SysRoleRight>();
            //循环将菜单数组分别加入到数据模型中
            for (int j = 0; j < arr.Count(); j++)
            {
                SysRoleRight roleright = new SysRoleRight();
                roleright.RoleNo = RoleNo;//角色号
                roleright.MenuNo = arr[j];//菜单号
                roleright.CreateUser = _userManager.UserId;//创建人
                roleright.CreateTime = DateTime.Now;
                listRight.Add(roleright);
            }
            await Db.Insertable(listRight).ExecuteCommandAsync();
            //删除子级角色权限信息。(角色权限减少,角色下级权限同时减少)
            List<SysRoles> listRoleDel = await Db.Queryable<SysRoles>().Where(s => SqlFunc.Subqueryable<SysUserInfor>().Where(c => c.RoleNo == RoleNo && s.Id == c.Id).Any()).ToListAsync();
            var listRoleNo = listRoleDel.Select(s => s.RoleNo).Distinct().ToList();
            List<SysRoleRight> listRoleRight = await Db.Queryable<SysRoleRight>().Where(s => listRoleNo.Contains(s.RoleNo)).ToListAsync();
            foreach (var item in listRoleDel)
            {
                var listChildRoleRight = listRoleRight.Where(s => s.RoleNo == item.RoleNo).ToList();
                foreach (var right in listChildRoleRight)
                {
                    //删除该角色所有菜单信息
                    i = await DeleteRoleRight(RoleNo);
                }
                //无
                else if (rolelist.Count == 0)
                {
                    i = 1;
                }
                //开始新增权限
                if (i > 0)
                {
                    SysRoleRight roleright = new SysRoleRight();
                    //循环将菜单数组分别加入到数据模型中
                    for (int j = 0; j < arr.Count(); j++)
                    int first1 = Array.IndexOf(arr, right.MenuNo);
                    if (first1 <= -1)
                    {
                        roleright.RoleNo = RoleNo;//角色号
                        roleright.MenuNo = arr[j];//菜单号
                        roleright.CreateUser = Convert.ToInt32(userId);//创建人
                        //成功 将菜单号和角色号新增为新的数据
                        i = await _rolerights.InsertRoleRight(roleright);
                        await Db.Deleteable<SysRoleRight>().Where(s => s.RoleNo == item.RoleNo && s.MenuNo == right.MenuNo).ExecuteCommandAsync();
                    }
                    //删除子级角色权限信息。(角色权限减少,角色下级权限同时减少)
                    await _rolerights.DeleteChildRoleRight(RoleNo, MenuNo);
                    //返回
                    return i;
                }
                else
                {
                    return i;
                }
            }
            catch (Exception ex)
            {
                //抛出异常
                throw new Exception("新增角色权限信息异常", ex);
            }
        }
        /// <summary>
        /// 删除角色权限信息
        /// </summary>
        /// <param name="RoleNo">角色号</param>
        /// <returns></returns>
        /// <exception cref="Exception">捕获异常</exception>
        public async Task<int> DeleteRoleRight(string RoleNo)
        {
            //捕获异常
            try
            {
                //删除
                int i = await _rolerights.DeleteRoleRight(RoleNo);
                return i;
            }
            catch (Exception ex)
            {
                //抛出异常
                throw new Exception("删除角色权限信息异常", ex);
            }
        }
    }
}