/// <summary> /// 添加菜单模块 /// </summary> /// <param name="module"></param> /// <returns></returns> public async Task Add(SysModule module) { var max = await _moduleRep.GetLayerCount(); if (max.Count < 31) { module.Layer = max.Layer; module.Number = Convert.ToInt64(Math.Pow(2, max.Count.Value)); } else if (max.Count == 31) //0次方 到 30次方 共31个数 js语言的限制 导致 位运算 32位 { module.Layer = ++max.Layer; module.Number = 1; } else { throw new H_Exception("数据库数据异常,请检查"); } try { await _moduleRep.InsertAsync(module); } catch (PostgresException ex) { H_AssertEx.That(ex.SqlState == H_PostgresSqlState.E23505, "添加失败,请重新添加"); } }
/// <summary> /// 获取用户 /// </summary> /// <param name="userId"></param> /// <returns></returns> public async Task <SysUser> Get(long userId) { var user = await _userRep.GetAsync(userId); H_AssertEx.That(user == null, "用户不存在"); H_AssertEx.That(user.IsDeleted, "用户已删除"); return(user); }
/// <summary> /// 获取字典 /// </summary> /// <param name="id"></param> /// <returns></returns> public async Task <SysDict> Get(long id) { var dict = await _dictRep.GetAsync(id); H_AssertEx.That(dict == null, "字典数据不存在"); H_AssertEx.That(dict.IsDeleted, "字典数据已删除"); return(dict); }
/// <summary> /// 获取菜单模块 /// </summary> /// <param name="id"></param> /// <returns></returns> public async Task <SysModule> Get(long id) { var module = await _moduleRep.GetAsync(id); H_AssertEx.That(module == null, "模块或资源不存在"); H_AssertEx.That(module.IsDeleted, "模块或资源已删除"); return(module); }
/// <summary> /// 获取角色 /// </summary> /// <param name="roleId"></param> /// <returns></returns> public async Task <SysRole> Get(long roleId) { var item = await _roleRep.GetAsync(roleId); H_AssertEx.That(item == null, "角色不存在"); H_AssertEx.That(item.IsDeleted, "角色已删除"); return(item); }
/// <summary> /// 检查是否存在相同名字or相同编码 /// </summary> /// <returns></returns> public async Task CheckNameCode(string name, string code) { var sameItems = await _dictRep.GetListAsync(new DictQuery { DictName = name }); H_AssertEx.That(sameItems.Count > 0, "字典名称已存在,请重新输入"); sameItems = await _dictRep.GetListAsync(new DictQuery { DictCode = code }); H_AssertEx.That(sameItems.Count > 0, "字典名称已存在,请重新输入"); }
/// <summary> /// 检查字典数据项是否存在相同名字or相同值 /// </summary> /// <param name="name"></param> /// <param name="value"></param> /// <param name="parentId"></param> /// <returns></returns> public async Task CheckItemNameValue(string name, int value, long parentId) { var sameItems = await _dictRep.GetListAsync(new DictQuery { ParentId = parentId, ItemName = name }); H_AssertEx.That(sameItems.Count > 0, "数据项名称已存在,请重新输入"); sameItems = await _dictRep.GetListAsync(new DictQuery { ParentId = parentId, ItemValue = value }); H_AssertEx.That(sameItems.Count > 0, "数据项值已存在,请重新输入"); }
/// <summary> /// 更新用户密码 /// </summary> /// <param name="userId"></param> /// <param name="oldPwd"></param> /// <param name="newPwd"></param> /// <returns></returns> public async Task UpdatePwd(long userId, string oldPwd, string newPwd) { var user = await Get(userId); oldPwd = H_EncryptProvider.HMACSHA256(oldPwd, _appSettings.Key.Sha256Key); H_AssertEx.That(user.Password != oldPwd, "原密码错误"); user.PasswordLevel = (PasswordLevel)H_Util.CheckPasswordLevel(newPwd); user.Password = H_EncryptProvider.HMACSHA256(newPwd, _appSettings.Key.Sha256Key); await _userRep.UpdateAsync(user, user => new { user.Password, user.PasswordLevel }); }
/// <summary> /// 删除模块 /// </summary> /// <param name="id"></param> /// <returns></returns> public async Task Delete(long id) { MustNotRoot(id); var module = await Get(id); var childs = await _moduleRep.GetListAsync(new ModuleQuery() { ParentId = module.Id }); H_AssertEx.That(childs != null && childs.Count > 0, "存在子节点无法删除"); await _moduleRep.DeleteAsync(module); }
/// <summary> /// 添加用户 /// </summary> /// <param name="user"></param> /// <returns></returns> public async Task Add(SysUser user) { try { var users = await _userRep.GetAllAsync(new UserQuery { Account = user.Account }); H_AssertEx.That(users.Count > 0, "账号已存在"); H_AssertEx.That(user.RoleLevel <= _currentUser.RoleLevel, "无法添加同级及高级角色用户"); await _userRep.InsertAsync(user); } catch (PostgresException ex) { H_AssertEx.That(ex.SqlState == H_PostgresSqlState.E23505, "账号已存在"); } }
/// <summary> /// 根据账号密码登录 /// </summary> /// <param name="account"></param> /// <param name="password"></param> /// <returns></returns> public async Task <SysUser> LoginByAccountPwd(string account, string password) { var users = await _userRep.GetUserByAccountPwd(account, password); H_AssertEx.That(users.Count == 0, "账号或密码错误"); H_AssertEx.That(users.Count > 1, "用户数据异常"); var user = users.First(); H_AssertEx.That(!user.Enabled.Value, "用户已注销"); H_AssertEx.That(string.IsNullOrWhiteSpace(user.AuthNumbers), "没有系统权限,暂时无法登录,请联系管理员"); var authNums = JsonConvert.DeserializeObject <List <long> >(user.AuthNumbers); H_AssertEx.That(authNums.Count == 0, "没有系统权限,暂时无法登录,请联系管理员"); return(user); }
/// <summary> /// 是否存在相同别名的模块 /// </summary> public async Task CheckAlias(string alias, ModuleType?moduleType, long?parentId, long?id = null) { var modules = await _moduleRep.GetSameAlias(alias, moduleType, parentId, id); H_AssertEx.That(modules.Count > 0, "存在相同别名的模块或资源"); }
/// <summary> /// 是否存在相同名字的模块 /// </summary> public async Task CheckName(string name, ModuleType?moduleType, long?parentId, long?id = null) { var modules = await _moduleRep.GetSameName(name, moduleType, parentId, id); H_AssertEx.That(modules.Count > 0, "存在相同名称的模块或资源"); }
/// <summary> /// 检测必须不是根节点方可继续操作 /// </summary> /// <param name="id"></param> /// <returns></returns> public void MustNotRoot(long id) { H_AssertEx.That(id == 0, "无法操作系统根节点"); }
/// <summary> /// 检测用户 /// </summary> /// <param name="userId"></param> /// <returns></returns> public void CheckUser(long userId) { H_AssertEx.That(userId == _currentUser.Id, "无法操作当前登录用户"); H_AssertEx.That(userId == -1, "无法操作系统管理员账户"); }
/// <summary> /// 导入excel /// </summary> /// <param name="files"></param> /// <returns></returns> public async Task Import(IFormFileCollection files) { H_AssertEx.That(files == null || files.Count == 0, "请选择Excel文件"); //格式限制 var allowType = new string[] { "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }; H_AssertEx.That(files.Any(b => !allowType.Contains(b.ContentType)), "只能上传Excel文件"); ////大小限制 //if (files.Sum(b => b.Length) >= 1024 * 1024 * 4) //{ //} var users = new List <SysUser>(); foreach (IFormFile file in files) { string rootPath = _appSettings.FilePath.ImportExcelPath; H_File.CreateDirectory(rootPath); string filePath = Path.Combine(rootPath, file.FileName); using (var fs = System.IO.File.Create(filePath)) { // 复制文件 file.CopyTo(fs); // 清空缓冲区数据 fs.Flush(); } using (var ep = new ExcelPackage(new FileInfo(filePath))) { var worksheet = ep.Workbook.Worksheets[0]; if (worksheet != null && worksheet.Cells[1, 1].Text.Trim() != "姓名") { throw new H_Exception("上传数据列名有误,请检查"); } foreach (var ws in ep.Workbook.Worksheets) { int colStart = ws.Dimension.Start.Column; //工作区开始列,start=1 int colEnd = ws.Dimension.End.Column; //工作区结束列 int rowStart = ws.Dimension.Start.Row; //工作区开始行号,start=1 int rowEnd = ws.Dimension.End.Row; //工作区结束行号 for (int i = rowStart + 1; i <= rowEnd; i++) //第1行是列名,跳过 { var user = new SysUser(); user.Name = ws.Cells[i, colStart].Text; user.FirstNameInitial = WordsHelper.GetFirstPinyin(user.Name.Substring(0, 1)); user.Password = H_EncryptProvider.HMACSHA256("123456", _appSettings.Key.Sha256Key); users.Add(user); } } } } if (users.Count == 0) { return; } await _userRep.InsertAsync(users); }