diff --git a/langguanApi/Common/StringHelper.cs b/langguanApi/Common/StringHelper.cs index f3f3e0c..0cc0d3b 100644 --- a/langguanApi/Common/StringHelper.cs +++ b/langguanApi/Common/StringHelper.cs @@ -28,5 +28,58 @@ namespace langguanApi.Common } return pwd; } + + /// + /// 加密 + /// + /// 需要加密的字符串 + /// 加密后的字符串 + //[OperationContract] + public static string Encrypt(string strSource) + { + //把字符串放到byte数组中 + byte[] bytIn = System.Text.Encoding.Default.GetBytes(strSource); + //建立加密对象的密钥和偏移量 + byte[] iv = { 102, 16, 93, 156, 78, 4, 218, 32 };//定义偏移量 + byte[] key = { 55, 103, 246, 79, 36, 99, 167, 3 };//定义密钥 + //实例DES加密类 + DESCryptoServiceProvider mobjCryptoService = new DESCryptoServiceProvider(); + mobjCryptoService.Key = iv; + mobjCryptoService.IV = key; + ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor(); + //实例MemoryStream流加密密文件 + System.IO.MemoryStream ms = new System.IO.MemoryStream(); + CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write); + cs.Write(bytIn, 0, bytIn.Length); + cs.FlushFinalBlock(); + + string strOut = System.Convert.ToBase64String(ms.ToArray()); + return strOut; + + } + /// + /// 解密 + /// + /// 需要解密的字符串 + /// 解密后的字符串 + //[OperationContract] + public static string Decrypt(string Source) + { + if (Source == null) return string.Empty; + //将解密字符串转换成字节数组 + byte[] bytIn = System.Convert.FromBase64String(Source); + //给出解密的密钥和偏移量,密钥和偏移量必须与加密时的密钥和偏移量相同 + byte[] iv = { 102, 16, 93, 156, 78, 4, 218, 32 };//定义偏移量 + byte[] key = { 55, 103, 246, 79, 36, 99, 167, 3 };//定义密钥 + DESCryptoServiceProvider mobjCryptoService = new DESCryptoServiceProvider(); + mobjCryptoService.Key = iv; + mobjCryptoService.IV = key; + //实例流进行解密 + System.IO.MemoryStream ms = new System.IO.MemoryStream(bytIn, 0, bytIn.Length); + ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor(); + CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read); + StreamReader strd = new StreamReader(cs, Encoding.Default); + return strd.ReadToEnd(); + } } } diff --git a/langguanApi/Controllers/UserController.cs b/langguanApi/Controllers/UserController.cs index e771242..5dc9ba2 100644 --- a/langguanApi/Controllers/UserController.cs +++ b/langguanApi/Controllers/UserController.cs @@ -56,30 +56,8 @@ namespace langguanApi.Controllers var result = await _userService.GetPage(input); return Ok(result); } - ///删除用户 - /// - /// - /// - [HttpDelete("Delete")] - public async Task Delete(string id) - { - await _userService.DeleteUser(id); - return Ok(new ApiResult() { code = 0 }); - } - /// - /// 修改用户信息 - /// - /// - /// - [HttpPut("Update")] - public async Task Update([FromBody] UserUpdate input) - { - await _userService.UpdateUser(input); - return Ok(new ApiResult() { code = 0 }); - } #region 用户管理相关接口 - /// ///新增用户 /// @@ -103,8 +81,42 @@ namespace langguanApi.Controllers var result = await _userService.GetUserList(input); return Ok(result); } - - + //根据用户Id获取用户信息 + /// + /// 根据用户Id获取用户信息 + /// + /// + /// + [HttpGet("GetUserById")] + public async Task GetUserById(string userId) + { + var result = await _userService.GetUserById(userId); + return Ok(result); + } + //修改用户信息 + /// + /// 修改用户信息 + /// + /// + /// + [HttpPost("UpdateUser")] + public async Task UpdateUser([FromBody] UserDto input) + { + var result = await _userService.UpdateUser(input); + return Ok(result); + } + //删除用户 + /// + /// 删除用户 + /// + /// + /// + [HttpPost("DeleteUser")] + public async Task DeleteUser(string userId) + { + var result = await _userService.DeleteUser(userId); + return Ok(result); + } #endregion } } diff --git a/langguanApi/Model/Dto/SystemConfigurationDto/UserDto.cs b/langguanApi/Model/Dto/SystemConfigurationDto/UserDto.cs index 8e9e631..a938ad1 100644 --- a/langguanApi/Model/Dto/SystemConfigurationDto/UserDto.cs +++ b/langguanApi/Model/Dto/SystemConfigurationDto/UserDto.cs @@ -27,41 +27,10 @@ namespace langguanApi.Model.Dto.SystemConfigurationDto /// public string Email { get; set; } /// - /// 学历 - /// - public string Education { get; set; } - /// /// 手机号 /// public string Tel { get; set; } /// - /// 性别 0表示男 1表示女 - /// - public byte Sex { get; set; } - /// - /// 毕业院校 - /// - public string University { get; set; } - /// - /// 出生日期 - /// - public string BrithdayDateTime { get; set; } - public DateTime? Brithday { get; set; } - - /// - /// 入职日期 - /// - public string HiredateDateTime { get; set; } = DateTime.Now.ToString(); - public DateTime? Hiredate { get; set; } - /// - /// 籍贯 - /// - public string Native { get; set; } - /// - /// 居住地 - /// - public string Address { get; set; } - /// /// 是否管理员 0否 1是 /// public byte IsAdmin { get; set; } @@ -69,8 +38,10 @@ namespace langguanApi.Model.Dto.SystemConfigurationDto /// 是否删除 0否 1是 /// public byte IsDel { get; set; } - //是否启用 0表示未启用 1表示启用 - public byte IsEnable { get; set; } + /// + /// 密码 md5加密 + /// + public string Password { get; set; } } /// ///根据用户条件查询 @@ -85,64 +56,50 @@ namespace langguanApi.Model.Dto.SystemConfigurationDto /// 手机号 /// public string Tel { get; set; } = ""; - //入职开始时间 - public string HiredateStart { get; set; } = ""; - //入职结束时间 - public string HiredateEnd { get; set; } = ""; + /// + /// 当前条数 + /// + public int PageSize { get; set; } = 10; + /// + /// 当前页数 + /// + public int PageIndex { get; set; } = 1; } /// /// 用户列表展示 /// - public class UserListDto + public class UserDetailDto { + /// + /// 用户ID,方便查看详情操作 + /// + public string UserId { get; set; } /// /// 用户名 /// public string Username { get; set; } /// - /// 学历 - /// - public string Education { get; set; } - /// /// 邮箱 /// public string Email { get; set; } /// + /// 角色id + /// + public string RoleId { get; set; } + /// /// 角色名称 /// - public string roleName{ get; set; } - /// - /// 性别 - /// - public string Sex { get; set; } - /// - /// 毕业院校 - /// - public string University { get; set; } + public string RoleName{ get; set; } /// /// 联系方式 /// public string Tel { get; set; } /// - /// 出生日期 - /// - public string Brithday { get; set; } - /// - /// 籍贯 - /// - public string Native { get; set; } - /// - /// 居住地 - /// - public string Address { get; set; } - /// - /// 入职日期 - /// - public string Hiredate { get; set; } - /// /// 是否管理员 0否 1是 /// public string IsAdmin { get; set; } } + + } diff --git a/langguanApi/Model/Entity/UserEntity.cs b/langguanApi/Model/Entity/UserEntity.cs index 799dc71..d79a11f 100644 --- a/langguanApi/Model/Entity/UserEntity.cs +++ b/langguanApi/Model/Entity/UserEntity.cs @@ -19,7 +19,7 @@ namespace langguanApi.Model.Entity /// /// 角色id /// - public string roleId { get; set; } + public string RoleId { get; set; } /// /// 邮箱 /// diff --git a/langguanApi/Service/RoleService.cs b/langguanApi/Service/RoleService.cs index fbb7924..7f62785 100644 --- a/langguanApi/Service/RoleService.cs +++ b/langguanApi/Service/RoleService.cs @@ -141,5 +141,18 @@ namespace langguanApi.Service var list = (await base.GetListWithExp(exp)).ToList(); return list; } + + #region 用户管理角色相关 + /// + /// 根据id获取角色信息 + /// + /// + /// + public async Task GetRoleById(string roleId) + { + return await base.GetAsync(roleId); + } + #endregion + } } diff --git a/langguanApi/Service/UserService.cs b/langguanApi/Service/UserService.cs index c13a2c5..a34892c 100644 --- a/langguanApi/Service/UserService.cs +++ b/langguanApi/Service/UserService.cs @@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Mvc.Filters; using MongoDB.Bson.IO; using MongoDB.Driver.Linq; using Org.BouncyCastle.Asn1.Ocsp; +using System.Collections.Generic; using System.Linq.Expressions; namespace langguanApi.Service @@ -83,18 +84,6 @@ namespace langguanApi.Service current = input.current }, exp); } - ///更新用户信息 - public async Task UpdateUser(UserUpdate user) - { - var entity = user.Adapt(); - entity.Password = StringHelper.MD5Encrypt32(user.Password); - await base.UpdateAsync(user.Id, entity); - } - ///删除用户 - public async Task DeleteUser(string id) - { - await base.RemoveAsync(id); - } #region 用户管理 /// @@ -136,24 +125,18 @@ namespace langguanApi.Service } #endregion #region 组织数据 - - if (!string.IsNullOrEmpty(input.BrithdayDateTime)) - { - input.Brithday = Convert.ToDateTime(input.BrithdayDateTime); - } - if (!string.IsNullOrEmpty(input.HiredateDateTime)) - { - input.Hiredate = Convert.ToDateTime(input.HiredateDateTime); - } - input.IsEnable = 1; var entity = input.Adapt(); + entity.Phone = input.Tel; + if (!string.IsNullOrEmpty(input.Password)) + { + entity.Password = StringHelper.MD5Encrypt32(input.Password); + } #endregion #region 保存数据 if (entity != null && string.IsNullOrEmpty(entity.Id)) { await base.CreateAsync(entity); } - #endregion } catch (Exception ex) @@ -172,12 +155,13 @@ namespace langguanApi.Service return new ApiResult { code = 0, msg = "保存用户信息成功" }; } /// - /// + /// 获取用户列表 /// /// /// public async Task GetUserList(UserQueryDto input) { + List list = new List(); try { #region 组织查询条件 @@ -186,25 +170,40 @@ namespace langguanApi.Service { exp = filter => filter.Username.Contains(input.Username); } + if (!string.IsNullOrEmpty(input.Tel)) + { + exp = filter => filter.Phone.Contains(input.Tel); + } #endregion - #region 获取数据 var result = await base.GetListWithExp(exp);//获取人员信息 - var roleList = await _roleService.GetRoleListByIds(result.Select(s => s.roleId).ToList()); + if (result.Count() > 0) + { + result = result.Skip((input.PageIndex - 1) * input.PageSize).Take(input.PageSize); + } + else + { + return new ApiResult { code = 0, data = null, msg = "没有用户信息" }; + } + var roleList = await _roleService.GetRoleListByIds(result.Select(s => s.RoleId).ToList());//根据角色Id获取角色信息 #endregion + //md5解密 + //var password = StringHelper.MD5Decrypt32(item.Password); #region 组装返回数据 - List list = new List(); foreach (var item in result) { - list.Add(new UserListDto + list.Add(new UserDetailDto { + UserId = item.Id, Username = item.Username, Email = item.Email, - roleName = roleList.FirstOrDefault(s => s.Id == item.roleId)?.RoleName, + RoleId = item.RoleId, + RoleName = roleList.FirstOrDefault(s => s.Id == item.RoleId)?.RoleName, + IsAdmin = item.IsAdmin == 0 ? "男" : "女", + Tel = item.Phone, }); } #endregion - return new ApiResult { code = 0, data = list }; } catch (Exception ex) { @@ -219,6 +218,161 @@ namespace langguanApi.Service { _logger.LogInformation($"获取用户列表参数:userQuery:{Newtonsoft.Json.JsonConvert.SerializeObject(input)}"); } + return new ApiResult { code = 0, data = list }; + } + + /// + /// 根据用户Id获取用户信息 + /// + /// + /// + public async Task GetUserById(string userId) + { + UserDetailDto userDetail = null; + try + { + #region 校验数据 + if (string.IsNullOrEmpty(userId)) + { + return new ApiResult { code = 1, msg = "获取用户信息失败,userId非空" }; + } + #endregion + #region 获取数据 + var user = await base.GetAsync(userId);//根据userId获取用户信息 + if (user == null) + { + return new ApiResult { code = 1, msg = "用户不存在" }; + } + var role = await _roleService.GetRoleById(user.RoleId);//根据角色Id获取角色信息 + if (role == null) + { + return new ApiResult { code = 1, msg = "角色不存在" }; + } + #endregion + #region 组织需要展示的数据 + userDetail = new UserDetailDto + { + UserId = user.Id, + Username = user.Username, + Email = user.Email, + RoleId = user.RoleId, + RoleName = role.RoleName, + IsAdmin = user.IsAdmin == 0 ? "男" : "女", + Tel = user.Phone + }; + #endregion + } + catch (Exception ex) + { + _logger.LogError($"获取用户信息出现异常,请求参数:userId:{userId}," + + $"请求接口:'api/User/GetUserById'," + + $"异常信息:{ex.Message}," + + $"异常位置:{ex.StackTrace}" + ); + return new ApiResult { code = 1, msg = "获取用户信息失败" }; + } + finally + { + _logger.LogInformation($"获取用户信息参数:userId:{userId}"); + } + return new ApiResult { code = 0, data = userDetail }; + } + + + //更新用户信息方法 + public async Task UpdateUser(UserDto input) + { + try + { + #region 校验参数 + if (string.IsNullOrEmpty(input.Id)) + { + return new ApiResult { code = 1, msg = "用户Id不能为空" }; + } + if (string.IsNullOrEmpty(input.Username)) + { + return new ApiResult { code = 1, msg = "用户名不能为空" }; + } + if (string.IsNullOrEmpty(input.Tel)) + { + return new ApiResult { code = 1, msg = "手机号不能为空" }; + } + if (string.IsNullOrEmpty(input.Email)) + { + return new ApiResult { code = 1, msg = "邮箱不能为空" }; + } + if (string.IsNullOrEmpty(input.roleId)) + { + return new ApiResult { code = 1, msg = "角色不能为空" }; + } + #endregion + #region 组织数据 + var userEntity = input.Adapt(); + userEntity.Phone = input.Tel; + if (!string.IsNullOrEmpty(input.Password)) + { + userEntity.Password = StringHelper.MD5Encrypt32(input.Password); + } + #endregion + #region 更新数据 + await base.UpdateAsync(input.Id, userEntity);//更新用户信息 + #endregion + } + catch (Exception ex) + { + _logger.LogError($"更新用户信息出现异常,请求参数:user:{Newtonsoft.Json.JsonConvert.SerializeObject(input)}," + + $"请求接口:'api/User/UpdateUser'," + + $"异常信息:{ex.Message}," + + $"异常位置:{ex.StackTrace}" + ); + return new ApiResult { code = 1, msg = "更新用户信息失败" }; + } + finally + { + _logger.LogInformation($"更新用户信息参数:user:{Newtonsoft.Json.JsonConvert.SerializeObject(input)}"); + } + return new ApiResult { code = 0, msg = "更新用户信息成功" }; + } + + /// + /// 作废用户的方法 + /// + /// + /// + public async Task DeleteUser(string userId) + { + try + { + #region 校验数据 + if (string.IsNullOrEmpty(userId)) + { + return new ApiResult { code = 1, msg = "用户Id不能为空" }; + } + #endregion + #region 更新数据 + var user = await base.GetAsync(userId);//根据userId获取用户信息 + if (user == null) + { + return new ApiResult { code = 1, msg = "用户不存在" }; + } + user.IsDelete = true; + await base.UpdateAsync(userId, user);//更新用户信息 + #endregion + } + catch (Exception ex) + { + _logger.LogError($"删除用户信息出现异常,请求参数:userId:{userId}," + + $"请求接口:'api/User/DeleteUser'," + + $"异常信息:{ex.Message}," + + $"异常位置:{ex.StackTrace}" + ); + return new ApiResult { code = 1, msg = "删除用户信息失败" }; + } + finally + { + _logger.LogInformation($"删除用户信息参数:userId:{userId}"); + } + return new ApiResult { code = 0, msg = "删除用户信息成功" }; } #endregion }