using DS.Module.Core; using DS.Module.Core.Extensions; using DS.Module.Core.Helpers; using DS.Module.UserModule; using DS.WMS.Core.Sys.Dtos; using DS.WMS.Core.Sys.Entity; using DS.WMS.Core.Sys.Interface; using Mapster; using Microsoft.Extensions.DependencyInjection; using SqlSugar; namespace DS.WMS.Core.Sys.Method; /// /// /// public class SysRoleService : ISysRoleService { private readonly IServiceProvider _serviceProvider; private readonly ISqlSugarClient db; private readonly IUser user; private readonly ICommonService _commonService; /// /// /// /// public SysRoleService(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; db = _serviceProvider.GetRequiredService(); user = _serviceProvider.GetRequiredService(); _commonService = _serviceProvider.GetRequiredService(); } /// /// /// /// /// public DataResult> GetListByPage(PageRequest request) { // var query = _commonService.GetDataRuleFilter(); //序列化查询条件 var whereList = db.ConfigQuery.Context.Utilities.JsonToConditionalModels(request.QueryCondition); var data = db.Queryable() .Where(whereList).ToQueryPage(request.PageCondition); return data; } /// /// /// /// /// public DataResult EditRole(RoleInput model) { if (model.Id == 0) { var isExist = db.Queryable().Filter(null, true).Where(x => x.RoleCode == model.RoleCode).First(); if (isExist != null) { return DataResult.Failed("角色唯一编码已存在!", MultiLanguageConst.UserCodeExist); } var data = model.Adapt(); var role = db.Insertable(data).ExecuteReturnEntity(); return DataResult.Successed("添加成功!", role.Id, MultiLanguageConst.DataCreateSuccess); } else { var info = db.Queryable().Where(x => x.Id == model.Id).First(); info = model.Adapt(info); db.Updateable(info).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand(); return DataResult.Successed("更新成功!", MultiLanguageConst.DataUpdateSuccess); } } /// /// /// /// /// public DataResult GetRoleInfo(string id) { var data = db.Queryable() .Where(a => a.Id == long.Parse(id)) .First(); return DataResult.Success(data, MultiLanguageConst.DataQuerySuccess); } /// /// 获取角色权限树 /// /// public DataResult GetRolePermissionTree() { var data = new RolePermissionTreeViewModel(); //查询一级菜单 var info = db.Queryable().Filter(null, true) .OrderBy(st => st.SortCode, OrderByType.Asc) .Where(st => st.ParentId == 0 && st.MenuType == 1)//&& (st.PermissionType == (int)PermissionType.Public || st.PermissionType == user.PermissionIdentity ) .Select(a => new RolePermissionTree { Title = a.PermissionName, Key = a.Id, }).ToList(); //循环下级权限 if (info.Count > 0) { foreach (var item in info) { var childs = db.Queryable().Filter(null, true).Where(x => x.MenuType == 2 && x.ParentId == item.Key) //&& (x.PermissionType == (int)PermissionType.Public || x.PermissionType == user.PermissionIdentity ) .Select(a => new RolePermissionTree { Title = a.PermissionName, Key = a.Id, }) .ToList(); if (childs.Count > 0) { foreach (var child in childs) { var buttons = db.Queryable().Filter(null, true).Where(x => x.MenuType == 3 && x.ParentId == child.Key) .Select(a => new RolePermissionTree { Title = a.PermissionName, Key = a.Id, }) .ToList(); if (buttons.Count > 0) child.Children = buttons; } item.Children = childs; } } } data.TreeData = info; data.Ids = db.Queryable().Select(x => x.Id.ToString()).ToArray(); return DataResult.Success("获取数据成功!", data, MultiLanguageConst.DataQuerySuccess); } /// /// 获取角色权限树-客户端 /// /// public DataResult GetClientRolePermissionTree() { var data = new RolePermissionTreeViewModel(); //查询一级菜单 var info = db.Queryable() .OrderBy(st => st.SortCode, OrderByType.Asc) .Where(st => st.ParentId == 0 && st.MenuType == 1)//&& (st.PermissionType == (int)PermissionType.Public || st.PermissionType == user.PermissionIdentity ) .Select(a => new RolePermissionTree { Title = a.PermissionName, EnTitle = a.PermissionEnName, Key = a.PermissionId, }).ToList(); //循环下级权限 if (info.Count > 0) { foreach (var item in info) { var childs = db.Queryable().Where(x => x.MenuType == 2 && x.ParentId == item.Key) //&& (x.PermissionType == (int)PermissionType.Public || x.PermissionType == user.PermissionIdentity ) .Select(a => new RolePermissionTree { Title = a.PermissionName, EnTitle = a.PermissionEnName, Key = a.PermissionId, }) .ToList(); if (childs.Count > 0) { foreach (var child in childs) { var buttons = db.Queryable().Filter(null, true).Where(x => (x.MenuType == 3 || x.MenuType == 2) && x.ParentId == child.Key) .Select(a => new RolePermissionTree { Title = a.PermissionName, EnTitle = a.PermissionEnName, Key = a.Id, }) .ToList(); if (buttons.Count > 0) child.Children = buttons; } item.Children = childs; } } } data.TreeData = info; data.Ids = db.Queryable().Select(x => x.Id.ToString()).ToArray(); return DataResult.Success("获取数据成功!", data, MultiLanguageConst.DataQuerySuccess); } /// /// 获取角色权限 /// /// /// public DataResult GetRolePermission(string id) { var tempIds = db.Queryable().Where(x=>x.MenuType == 1).Select(x => x.Id).ToList(); var data = db.Queryable().Where(x => x.RoleId == long.Parse(id) && x.IsPermission == 1 && !tempIds.Contains((long)x.PermissionId)) .Select(x => x.PermissionId).ToArray(); return DataResult.Success("获取数据成功!", data, MultiLanguageConst.DataQuerySuccess); } public DataResult UpdateRolePermission(RolePermissionInput model) { var existPermissions = db.Queryable().Where(x => x.RoleId == model.RoleId && x.IsPermission == 1).Select(n => n.PermissionId).ToArray(); IEnumerable delPermissions = existPermissions.AsQueryable().Except(model.PermissionIds); if (delPermissions.Count() > 0) { db.Deleteable() //.SetColumns(it => it.IsPermission == 0)//SetColumns是可以叠加的 写2个就2个字段赋值 .Where(it => it.RoleId == model.RoleId && delPermissions.Contains(it.PermissionId)) .ExecuteCommand(); } IEnumerable addPermissions = model.PermissionIds.AsQueryable().Except(existPermissions); if (addPermissions.Count() > 0) { //var existNoPermissions = db.Queryable().Where(x => x.RoleId == model.RoleId && x.IsPermission == 0).Select(n => n.PermissionId).ToArray(); //IEnumerable updatePermissions = existNoPermissions.AsQueryable().Except(addPermissions); //if (updatePermissions.Count() > 0) //{ // db.Updateable() // .SetColumns(it => it.IsPermission == 1) // .Where(it => it.RoleId == model.RoleId && updatePermissions.Contains(it.PermissionId)) // .ExecuteCommand(); //} //IEnumerable addRolePermissions = addPermissions.AsQueryable().Except(existNoPermissions); foreach (var item in addPermissions) { var permission = new SysRolePermission { RoleId = model.RoleId, PermissionId = item, IsPermission = 1, }; db.Insertable(permission).ExecuteCommand(); } } return DataResult.Successed("更新成功!", MultiLanguageConst.DataUpdateSuccess); } public DataResult UpdateClientRolePermission(RolePermissionInput model) { var existPermissions = db.Queryable().Where(x => x.RoleId == model.RoleId && x.IsPermission == 1).Select(n => n.PermissionId).ToArray(); IEnumerable delPermissions = existPermissions.AsQueryable().Except(model.PermissionIds); if (delPermissions.Count() > 0) { db.Deleteable() //.SetColumns(it => it.IsPermission == 0)//SetColumns是可以叠加的 写2个就2个字段赋值 .Where(it => it.RoleId == model.RoleId && delPermissions.Contains(it.PermissionId)) .ExecuteCommand(); } IEnumerable addPermissions = model.PermissionIds.AsQueryable().Except(existPermissions); if (addPermissions.Count() > 0) { //var existNoPermissions = db.Queryable().Where(x => x.RoleId == model.RoleId && x.IsPermission == 0).Select(n => n.PermissionId).ToArray(); //IEnumerable updatePermissions = existNoPermissions.AsQueryable().Except(addPermissions); //if (updatePermissions.Count() > 0) //{ // db.Updateable() // .SetColumns(it => it.IsPermission == 1) // .Where(it => it.RoleId == model.RoleId && updatePermissions.Contains(it.PermissionId)) // .ExecuteCommand(); //} //IEnumerable addRolePermissions = addPermissions.AsQueryable().Except(existNoPermissions); #region 租户模块权限检测 var tenant = db.Queryable().Where(x => x.Id == long.Parse(user.TenantId)).First(); foreach (var item in addPermissions) { var per = db.Queryable().Where(x => x.Id == item) .First(); if (per != null && per.MenuType == 2) { //取加密授权信息 var perAuth = db.Queryable().Where(x => x.PermissionId == item).First(); if (perAuth.IsNotNull()) { //解密 var authNum = EncrypteHelper.DecryptData(perAuth.AuthNum, tenant.AppSecret); //角色列表去重 var roleList = db.Queryable() .Where(x => x.PermissionId == item && x.IsPermission == 1).Select(n => n.RoleId).ToList(); roleList.Add(model.RoleId); roleList.Distinct(); //用户列表去重 var userList = new List(); foreach (var role in roleList) { var userArr = db.Queryable().Where(x => x.RoleId == role).Select(n => n.UserId) .ToList(); userList.AddRange(userArr); } userList.Distinct(); //比较授权 var userCount = userList.Count(); if (userCount > int.Parse(authNum)) { return DataResult.Failed(string.Format("{0}模块数量超出授权数量{1}", per.PermissionName, int.Parse(authNum)), MultiLanguageConst.PerAuthNumLimit); } } } } #endregion foreach (var item in addPermissions) { var permission = new SysRolePermission { RoleId = model.RoleId, PermissionId = item, IsPermission = 1, }; db.Insertable(permission).ExecuteCommand(); } } return DataResult.Successed("更新成功!", MultiLanguageConst.DataUpdateSuccess); } }