From ef5cce1ce88f395bacab3408e582408ef588da89 Mon Sep 17 00:00:00 2001
From: pangwenpeng <17302161021@163.com>
Date: Wed, 29 May 2024 17:22:41 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BA=BA=E5=91=98=E7=AE=A1=E7=90=86=EF=BC=8C?=
 =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=8C=E6=9F=A5=E8=AF=A2=E5=88=97=E8=A1=A8?=
 =?UTF-8?q?=EF=BC=8C=E6=9F=A5=E8=AF=A2=E5=8D=95=E4=B8=AA=EF=BC=8C=E4=BF=AE?=
 =?UTF-8?q?=E6=94=B9=EF=BC=8C=E5=88=A0=E9=99=A4=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
 langguanApi/Common/StringHelper.cs            |  53 +++++
 langguanApi/Controllers/UserController.cs     |  60 +++--
 .../Dto/SystemConfigurationDto/UserDto.cs     |  91 ++------
 langguanApi/Model/Entity/UserEntity.cs        |   2 +-
 langguanApi/Service/RoleService.cs            |  13 ++
 langguanApi/Service/UserService.cs            | 214 +++++++++++++++---
 6 files changed, 311 insertions(+), 122 deletions(-)
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
     }