using DS.Module.Core; using DS.Module.Core.Extensions; using DS.Module.UserModule; using DS.WMS.Core.System.Dtos; using DS.WMS.Core.System.Entity; using DS.WMS.Core.System.Interface; using Mapster; using Microsoft.Extensions.DependencyInjection; using SqlSugar; namespace DS.WMS.Core.System.Method; /// /// /// public class SysRoleService : ISysRoleService { private readonly IServiceProvider _serviceProvider; private readonly ISqlSugarClient db; private readonly IUser user; /// /// /// /// public SysRoleService(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; db = _serviceProvider.GetRequiredService(); user = _serviceProvider.GetRequiredService(); } /// /// /// /// /// public DataResult> GetListByPage(PageRequest request) { //序列化查询条件 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.IsNullOrEmpty()) { var isExist = db.Queryable().Where(x => x.RoleCode == model.RoleCode).First(); if (isExist != null) { return DataResult.Failed("角色唯一编码已存在!"); } var data = model.Adapt(); var role = db.Insertable(data).ExecuteReturnEntity(); return DataResult.Successed("添加成功!", role.Id); } 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("更新成功!"); } } /// /// /// /// /// public DataResult GetRoleInfo(string id) { var data = db.Queryable() .Where(a => a.Id == id) .First(); return DataResult.Success(data); } /// /// 获取角色权限树 /// /// 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).ToArray(); return DataResult.Success("获取数据成功!", data); } /// /// 获取角色权限 /// /// /// public DataResult GetRolePermission(string id) { var data = db.Queryable().Where(x => x.RoleId == id && x.IsPermission == 1).Select(x => x.PermissionId).ToArray(); return DataResult.Success("获取数据成功!", data); } 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.Updateable() .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 addRolePermissions) { var permission = new SysRolePermission { RoleId = model.RoleId, PermissionId = item, IsPermission = 1, }; db.Insertable(permission).ExecuteCommand(); } } return DataResult.Successed("更新成功!"); } }