diff --git a/langguanApi.xml b/langguanApi.xml
index c3ea93b..263c3e1 100644
--- a/langguanApi.xml
+++ b/langguanApi.xml
@@ -61,6 +61,18 @@
             
             
         
+        
+            
+            字符串处理类
+            
+        
+        
+            
+            MD5加密算法
+            
+            
+            
+        
         
             
             
@@ -126,6 +138,35 @@
             
             
         
+        
+            
+            登陆
+            
+            
+            
+        
+        
+            
+            注册
+            
+            
+            
+        
+        
+            
+            get user list
+            
+            
+            
+        
+        
+        
+            
+            修改用户信息
+            
+            
+            
+        
         
             
             注入生命周期
@@ -473,6 +514,61 @@
             原始数据
             是否通过
         
+        
+            
+            用户名
+            
+        
+        
+            
+            密码 md5加密
+            
+        
+        
+            
+             角色id
+            
+        
+        
+            
+            邮箱
+            
+        
+        
+            
+            用户更新
+            
+        
+        
+            
+            id
+            
+        
+        
+            
+            用户实体
+            
+        
+        
+            
+            用户名
+            
+        
+        
+            
+            密码 md5加密
+            
+        
+        
+            
+             角色id
+            
+        
+        
+            
+            邮箱
+            
+        
         
             
             污染物因子编码
@@ -1256,6 +1352,44 @@
             
             
         
+        
+            
+            登录
+            
+            
+            
+            
+        
+        
+            
+            根据用户名获取用户信息
+            
+            
+            
+        
+        
+            
+            根据用户ID获取用户信息
+            
+            
+            
+        
+        
+            新加用户
+        
+        
+            
+            分页取数据
+            
+            
+            
+        
+        
+            更新用户信息
+        
+        
+            删除用户
+        
         
             
             爬气象局的天气数据%
diff --git a/langguanApi/Common/StringHelper.cs b/langguanApi/Common/StringHelper.cs
new file mode 100644
index 0000000..f3f3e0c
--- /dev/null
+++ b/langguanApi/Common/StringHelper.cs
@@ -0,0 +1,32 @@
+using System.Security.Cryptography;
+using System.Text;
+
+namespace langguanApi.Common
+{
+    /// 
+    /// 字符串处理类
+    /// 
+    public static class StringHelper
+    {
+        /// 
+        /// MD5加密算法
+        /// 
+        /// 
+        /// 
+        public static string MD5Encrypt32(string password)
+        {
+            string cl = password;
+            string pwd = "";
+            MD5 md5 = MD5.Create(); //实例化一个md5对像
+                                    // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
+            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
+            // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
+            for (int i = 0; i < s.Length; i++)
+            {
+                // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 
+                pwd = pwd + s[i].ToString("X");
+            }
+            return pwd;
+        }
+    }
+}
diff --git a/langguanApi/Controllers/UserController.cs b/langguanApi/Controllers/UserController.cs
new file mode 100644
index 0000000..7085b2d
--- /dev/null
+++ b/langguanApi/Controllers/UserController.cs
@@ -0,0 +1,80 @@
+using langguanApi.Model;
+using langguanApi.Model.Dto;
+using langguanApi.Service;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+
+namespace langguanApi.Controllers
+{
+    [Route("api/[controller]")]
+    [ApiController]
+    public class UserController : ControllerBase
+    {
+        private UserService _userService;
+        public UserController(UserService userService)
+        {
+            _userService = userService;
+        }
+        /// 
+        /// 登陆
+        /// 
+        /// 
+        /// 
+        [HttpPost("login")]
+        public async Task Login([FromBody] UserLogin user)
+        {
+            var result = _userService.login(user.Username, user.Password);
+            if (result != null)
+            {
+                return Ok(result);
+            }
+            else
+            {
+                return BadRequest(result);
+            }
+        }
+        /// 
+        /// 注册
+        /// 
+        /// 
+        /// 
+        [HttpPost("Add")]
+        public async Task Register([FromBody] UserAdd input)
+        {
+            var result = await _userService.AddUser(input);
+            return Ok(result);
+        }
+        /// 
+        /// get user list
+        /// 
+        /// 
+        /// 
+        [HttpGet("List")]
+        public async Task List([FromQuery] reqpage input)
+        {
+            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 });
+        }
+    }
+}
diff --git a/langguanApi/Model/Dto/UserLogin.cs b/langguanApi/Model/Dto/UserLogin.cs
new file mode 100644
index 0000000..bde8309
--- /dev/null
+++ b/langguanApi/Model/Dto/UserLogin.cs
@@ -0,0 +1,37 @@
+namespace langguanApi.Model.Dto
+{
+    public class UserLogin
+    {
+        public string Username { get; set; }
+        public string Password { get; set; }
+    }
+    public class UserAdd
+    {
+        /// 
+        /// 用户名
+        /// 
+        public string Username { get; set; }
+        /// 
+        /// 密码 md5加密
+        /// 
+        public string Password { get; set; }
+        /// 
+        ///  角色id
+        /// 
+        public int roleId { get; set; }
+        /// 
+        /// 邮箱
+        /// 
+        public string Email { get; set; }
+    }
+    /// 
+    /// 用户更新
+    /// 
+    public class UserUpdate : UserAdd
+    {
+        /// 
+        /// id
+        /// 
+        public string Id { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/langguanApi/Model/Entity/UserEntity.cs b/langguanApi/Model/Entity/UserEntity.cs
new file mode 100644
index 0000000..350b96a
--- /dev/null
+++ b/langguanApi/Model/Entity/UserEntity.cs
@@ -0,0 +1,25 @@
+namespace langguanApi.Model.Entity
+{
+    /// 
+    /// 用户实体
+    /// 
+    public class UserEntity : BaseModel
+    {
+        /// 
+        /// 用户名
+        /// 
+        public string Username { get; set; }
+        /// 
+        /// 密码 md5加密
+        /// 
+        public string Password { get; set; }
+        /// 
+        ///  角色id
+        /// 
+        public int roleId { get; set; }
+        /// 
+        /// 邮箱
+        /// 
+        public string Email { get; set; }
+    }
+}
diff --git a/langguanApi/Model/ReqPaing.cs b/langguanApi/Model/ReqPaing.cs
index dccc6f7..40d145a 100644
--- a/langguanApi/Model/ReqPaing.cs
+++ b/langguanApi/Model/ReqPaing.cs
@@ -7,7 +7,6 @@
     }
     public class reqpage : ReqPaing
     {
-        public string key { get; set;
-        }
+        public string key { get; set; } = "";
     }
 }
diff --git a/langguanApi/Service/UserService.cs b/langguanApi/Service/UserService.cs
new file mode 100644
index 0000000..e4468a8
--- /dev/null
+++ b/langguanApi/Service/UserService.cs
@@ -0,0 +1,90 @@
+using langguanApi.Common;
+using langguanApi.Extensions.AutoDI;
+using langguanApi.Model;
+using langguanApi.Model.Dto;
+using langguanApi.Model.Entity;
+using Mapster;
+using System.Linq.Expressions;
+
+namespace langguanApi.Service
+{
+    [ServiceInjection(InjectionType.Transient)]
+    public class UserService : BaseService
+    {
+        public UserService(IConfiguration config) : base(config, nameof(UserEntity).Replace("Entity", ""))
+        {
+        }
+        /// 
+        /// 登录
+        /// 
+        /// 
+        /// 
+        /// 
+        public async Task login(string username, string password)
+        {
+            Expression> exp = filter =>
+            filter.Username == username && filter.Password == StringHelper.MD5Encrypt32(password);
+            var list = await base.GetListWithExp(exp);
+            return list.FirstOrDefault();
+        }
+        /// 
+        /// 根据用户名获取用户信息
+        /// 
+        /// 
+        /// 
+        public async Task GetByUsername(string username)
+        {
+            Expression> exp = filter =>
+            filter.Username == username;
+            var list = await base.GetListWithExp(exp);
+            return list.FirstOrDefault();
+        }
+        /// 
+        /// 根据用户ID获取用户信息
+        /// 
+        /// 
+        /// 
+        public async Task GetById(string id)
+        {
+            return await base.GetAsync(id);
+        }
+        ///新加用户
+        public async Task AddUser(UserAdd user)
+        {
+            var entity = user.Adapt();
+            entity.Password = StringHelper.MD5Encrypt32(user.Password);
+            var result = await base.CreateAsync(entity);
+            return new ApiResult()
+            {
+                code = 0,
+                data = result
+            };
+        }
+        /// 
+        /// 分页取数据
+        /// 
+        /// 
+        /// 
+        public async Task GetPage(reqpage input)
+        {
+            Expression> exp = filter => filter.Username.Contains(input.key) && filter.IsDelete == false;
+            return await base.GetPager(new ReqPaing()
+            {
+                pageSize = input.pageSize,
+                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);
+        }
+    }
+}