人员管理新增用户和人员列表接口,辅助菜单查询和新增接口(后面会修改),辅角色色查询和新增接口(后面会修改)

This commit is contained in:
pangwenpeng 2024-05-28 18:33:30 +08:00
parent 5e3808fea1
commit 3c257f11c1
14 changed files with 670 additions and 63 deletions

View File

@ -0,0 +1,43 @@
using langguanApi.Model;
using langguanApi.Model.Dto.SystemConfigurationDto;
using langguanApi.Service;
using Microsoft.AspNetCore.Mvc;
namespace langguanApi.Controllers
{
/// <summary>
/// 菜单控制器
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class MeauController : ControllerBase
{
private MeauService _meuaService;
public MeauController(MeauService meauService)
{
_meuaService = meauService;
}
/// <summary>
/// 获取菜单列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("GetMenuList")]
public async Task<IActionResult> GetMenuList([FromQuery] reqpage input)
{
var result = await _meuaService.GetMeauList(input);
return Ok(result);
}
/// <summary>
/// 新增菜单
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("AddMeau")]
public async Task<IActionResult> AddMeau([FromBody] MeauDto input)
{
var result = await _meuaService.AddMeau(input);
return Ok(result);
}
}
}

View File

@ -0,0 +1,31 @@
using langguanApi.Model.Dto.SystemConfigurationDto;
using langguanApi.Service;
using Microsoft.AspNetCore.Mvc;
namespace langguanApi.Controllers
{
/// <summary>
/// 角色
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class RoleController : ControllerBase
{
private RoleService _roleService;
public RoleController(RoleService roleService)
{
_roleService = roleService;
}
/// <summary>
///新增角色
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("AddRole")]
public async Task<IActionResult> AddRole([FromBody] RoleDto input)
{
var result = await _roleService.AddRole(input);
return Ok(result);
}
}
}

View File

@ -1,5 +1,6 @@
using langguanApi.Model;
using langguanApi.Model.Dto;
using langguanApi.Model.Dto.SystemConfigurationDto;
using langguanApi.Service;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
@ -79,6 +80,30 @@ namespace langguanApi.Controllers
#region
/// <summary>
///新增用户
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("AddUser")]
public async Task<IActionResult> AddUser([FromBody] UserDto input)
{
var result = await _userService.AddUser(input);
return Ok(result);
}
//获取用户列表
/// <summary>
/// 获取用户列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("GetUserList")]
public async Task<IActionResult> GetUserList([FromQuery] UserQueryDto input)
{
var result = await _userService.GetUserList(input);
return Ok(result);
}
#endregion
}

View File

@ -1,57 +0,0 @@
namespace langguanApi.Model.Dto.SystemConfiguration
{
/// <summary>
/// 用于用户管理的Dto
/// </summary>
public class UserDto
{
/// <summary>
/// 用户名
/// </summary>
public string Username { get; set; }
/// <summary>
/// 角色id
/// </summary>
public int roleId { get; set; }
/// <summary>
/// 邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 学历
/// </summary>
public string Education { get; set; }
/// <summary>
/// 手机号
/// </summary>
public int Tel { get; set; }
/// <summary>
/// 性别 0表示男 1表示女
/// </summary>
public byte Sex { get; set; }
/// <summary>
/// 毕业院校
/// </summary>
public string University { get; set; }
/// <summary>
/// 出生日期
/// </summary>
public string Brithday { get; set; }
/// <summary>
/// 籍贯
/// </summary>
public string Native { get; set; }
/// <summary>
/// 居住地
/// </summary>
public string Address { get; set; }
/// <summary>
/// 是否管理员 0否 1是
/// </summary>
public byte IsAdmin { get; set; }
/// <summary>
/// 是否删除 0否 1是
/// </summary>
public byte IsDel { get; set; }
}
}

View File

@ -0,0 +1,30 @@
namespace langguanApi.Model.Dto.SystemConfigurationDto
{
public class MeauDto
{
/// <summary>
/// 父菜单ID 默认首页为1级有组织为2级无组织为2级下面的子菜单为3级
/// </summary>
public string ParentId { get; set; }
/// <summary>
/// 菜单编码
/// </summary>
public string MenuCode { get; set; }
/// <summary>
/// 菜单名称
/// </summary>
public string MenuName { get; set; }
/// <summary>
/// 可空,菜单跳转路径
/// </summary>
public string Url { get; set; }
/// <summary>
/// 排序
/// </summary>
public int Sort { get; set; }
/// <summary>
/// 是否激活
/// </summary>
public bool IsActive { get; set; }
}
}

View File

@ -0,0 +1,25 @@
namespace langguanApi.Model.Dto.SystemConfigurationDto
{
/// <summary>
/// 角色DTO
/// </summary>
public class RoleDto
{
/// <summary>
/// 角色名称
/// </summary>
public string RoleName { get; set; }
/// <summary>
/// 多个菜单用,隔开
/// </summary>
public string Meaus { get; set; }
/// <summary>
/// 是否管理员
/// </summary>
public bool IsAdmin { get; set; }
/// <summary>
/// 角色描述
/// </summary>
public string Description { get; set; }
}
}

View File

@ -0,0 +1,148 @@
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson;
namespace langguanApi.Model.Dto.SystemConfigurationDto
{
/// <summary>
/// 用于用户管理的Dto
/// </summary>
public class UserDto
{
/// <summary>
///用户ID
/// </summary>
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
/// <summary>
/// 用户名
/// </summary>
public string Username { get; set; }
/// <summary>
/// 角色id
/// </summary>
public string roleId { get; set; }
/// <summary>
/// 邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 学历
/// </summary>
public string Education { get; set; }
/// <summary>
/// 手机号
/// </summary>
public string Tel { get; set; }
/// <summary>
/// 性别 0表示男 1表示女
/// </summary>
public byte Sex { get; set; }
/// <summary>
/// 毕业院校
/// </summary>
public string University { get; set; }
/// <summary>
/// 出生日期
/// </summary>
public string BrithdayDateTime { get; set; }
public DateTime? Brithday { get; set; }
/// <summary>
/// 入职日期
/// </summary>
public string HiredateDateTime { get; set; } = DateTime.Now.ToString();
public DateTime? Hiredate { get; set; }
/// <summary>
/// 籍贯
/// </summary>
public string Native { get; set; }
/// <summary>
/// 居住地
/// </summary>
public string Address { get; set; }
/// <summary>
/// 是否管理员 0否 1是
/// </summary>
public byte IsAdmin { get; set; }
/// <summary>
/// 是否删除 0否 1是
/// </summary>
public byte IsDel { get; set; }
//是否启用 0表示未启用 1表示启用
public byte IsEnable { get; set; }
}
/// <summary>
///根据用户条件查询
/// </summary>
public class UserQueryDto
{
/// <summary>
/// 用户名
/// </summary>
public string Username { get; set; } = "";
/// <summary>
/// 手机号
/// </summary>
public string Tel { get; set; } = "";
//入职开始时间
public string HiredateStart { get; set; } = "";
//入职结束时间
public string HiredateEnd { get; set; } = "";
}
/// <summary>
/// 用户列表展示
/// </summary>
public class UserListDto
{
/// <summary>
/// 用户名
/// </summary>
public string Username { get; set; }
/// <summary>
/// 学历
/// </summary>
public string Education { get; set; }
/// <summary>
/// 邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 角色名称
/// </summary>
public string roleName{ get; set; }
/// <summary>
/// 性别
/// </summary>
public string Sex { get; set; }
/// <summary>
/// 毕业院校
/// </summary>
public string University { get; set; }
/// <summary>
/// 联系方式
/// </summary>
public string Tel { get; set; }
/// <summary>
/// 出生日期
/// </summary>
public string Brithday { get; set; }
/// <summary>
/// 籍贯
/// </summary>
public string Native { get; set; }
/// <summary>
/// 居住地
/// </summary>
public string Address { get; set; }
/// <summary>
/// 入职日期
/// </summary>
public string Hiredate { get; set; }
/// <summary>
/// 是否管理员 0否 1是
/// </summary>
public string IsAdmin { get; set; }
}
}

View File

@ -1,4 +1,7 @@
namespace langguanApi.Model.Entity
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson;
namespace langguanApi.Model.Entity
{
/// <summary>
/// 用户实体
@ -16,7 +19,8 @@
/// <summary>
/// 角色id
/// </summary>
public int roleId { get; set; }
[BsonRepresentation(BsonType.ObjectId)]
public string roleId { get; set; }
/// <summary>
/// 邮箱
/// </summary>
@ -28,7 +32,7 @@
/// <summary>
/// 手机号
/// </summary>
public int Tel { get; set; }
public string Tel { get; set; }
/// <summary>
/// 性别 0表示男 1表示女
/// </summary>
@ -40,7 +44,7 @@
/// <summary>
/// 出生日期
/// </summary>
public string Brithday { get; set; }
public DateTime? Brithday { get; set; }
/// <summary>
/// 籍贯
/// </summary>
@ -50,8 +54,16 @@
/// </summary>
public string Address { get; set; }
/// <summary>
/// 入职日期
/// </summary>
public DateTime? Hiredate { get; set; }
/// <summary>
/// 是否管理员 0否 1是
/// </summary>
public byte IsAdmin { get; set; }
/// <summary>
/// 是否启用 0禁用 1启用
/// </summary>
public byte IsEnable { get; set; }
}
}

View File

@ -1,4 +1,5 @@
namespace langguanApi.Model

namespace langguanApi.Model
{
public class ReqPaing
{

View File

@ -0,0 +1,32 @@
namespace langguanApi.Model.SystemConfigurationEntity
{
//菜单实体类
public class Meau : BaseModel
{
/// <summary>
/// 父菜单ID 默认首页为1级有组织为2级无组织为2级下面的子菜单为3级
/// </summary>
public string ParentId { get; set; }
/// <summary>
/// 菜单编码
/// </summary>
public string MenuCode { get; set; }
/// <summary>
/// 菜单名称
/// </summary>
public string MenuName { get; set; }
/// <summary>
/// 可空,菜单跳转路径
/// </summary>
public string Url { get; set; }
/// <summary>
/// 排序
/// </summary>
public int Sort { get; set; }
/// <summary>
/// 是否激活
/// </summary>
public bool IsActive { get; set; }
}
}

View File

@ -0,0 +1,25 @@
namespace langguanApi.Model.SystemConfigurationEntity
{
/// <summary>
/// 角色实体类
/// </summary>
public class UserRole : BaseModel
{
/// <summary>
/// 角色名称
/// </summary>
public string RoleName { get; set; }
/// <summary>
/// 多个菜单用,隔开
/// </summary>
public string Meaus { get; set; }
/// <summary>
/// 是否管理员
/// </summary>
public bool IsAdmin { get; set; }
/// <summary>
/// 角色描述
/// </summary>
public string Description { get; set; }
}
}

View File

@ -0,0 +1,73 @@
using langguanApi.Extensions.AutoDI;
using langguanApi.Model;
using langguanApi.Model.Dto.SystemConfigurationDto;
using langguanApi.Model.SystemConfigurationEntity;
using Mapster;
using System.Linq.Expressions;
namespace langguanApi.Service
{
/// <summary>
/// 菜单服务
/// </summary>
[ServiceInjection(InjectionType.Transient)]
public class MeauService : BaseService<Meau>
{
public MeauService(IConfiguration config) : base(config, nameof(Meau))
{
}
/// <summary>
/// 获取菜单列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<object> GetMeauList(reqpage input)
{
Expression<Func<Meau, bool>> exp = filter =>filter.IsDelete == false;
if (!string.IsNullOrEmpty(input.key))
{
exp=filter => filter.MenuName.Contains(input.key);
}
return await base.GetPager(new ReqPaing()
{
pageSize = input.pageSize,
current = input.current
}, exp);
}
/// <summary>
/// 新加
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<ApiResult> AddMeau(MeauDto input)
{
if (await Exist(input))
{
return new ApiResult { code = 1, msg = $"{input.MenuName}的菜单已存在" };
}
var entity = input.Adapt<Meau>();
if (entity != null)
{
await base.CreateAsync(entity);
return new ApiResult { code = 0, msg = "" };
}
return new ApiResult { code = 1, msg = "菜单添加失败" }; ;
}
/// <summary>
/// 是否存在
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<bool> Exist(MeauDto input)
{
var entity = input.Adapt<MeauDto>();
Expression<Func<Meau, bool>> exp = filter => filter.MenuName == entity.MenuName;
return await base.Exist(exp);
}
}
}

View File

@ -0,0 +1,63 @@
using langguanApi.Extensions.AutoDI;
using langguanApi.Model.Dto.SystemConfigurationDto;
using langguanApi.Model;
using langguanApi.Model.Entity;
using langguanApi.Model.SystemConfigurationEntity;
using StackExchange.Redis;
using Mapster;
using System.Linq.Expressions;
namespace langguanApi.Service
{
[ServiceInjection(InjectionType.Transient)]
public class RoleService : BaseService<Model.SystemConfigurationEntity.UserRole>
{
public RoleService(IConfiguration config) : base(config, nameof(Role))
{
}
/// <summary>
/// 用户是否存在
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<bool> Exist(RoleDto input)
{
var entity = input.Adapt<UserRole>();
Expression<Func<UserRole, bool>> exp = filter => filter.RoleName == entity.RoleName;
return await base.Exist(exp);
}
/// <summary>
/// 新加角色
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<ApiResult> AddRole(RoleDto input)
{
if (await Exist(input))
{
return new ApiResult { code = 1, msg = $"{input.RoleName}的角色已存在" };
}
var entity = input.Adapt<UserRole>();
if (entity != null)
{
await base.CreateAsync(entity);
return new ApiResult { code = 0, msg = "" };
}
return new ApiResult { code = 1, msg = "菜单添加失败" }; ;
}
/// <summary>
/// 根据Id,获取多个校色信息
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public async Task<List<UserRole>> GetRoleListByIds(IEnumerable<string> ids)
{
Expression<Func<UserRole, bool>> exp = filter => ids.Contains(filter.Id) && filter.IsDelete == false;
var list = (await base.GetListWithExp(exp)).ToList();
return list;
}
}
}

View File

@ -2,8 +2,13 @@
using langguanApi.Extensions.AutoDI;
using langguanApi.Model;
using langguanApi.Model.Dto;
using langguanApi.Model.Dto.SystemConfigurationDto;
using langguanApi.Model.Entity;
using Mapster;
using Microsoft.AspNetCore.Mvc.Filters;
using MongoDB.Bson.IO;
using MongoDB.Driver.Linq;
using Org.BouncyCastle.Asn1.Ocsp;
using System.Linq.Expressions;
namespace langguanApi.Service
@ -11,8 +16,12 @@ namespace langguanApi.Service
[ServiceInjection(InjectionType.Transient)]
public class UserService : BaseService<UserEntity>
{
public UserService(IConfiguration config) : base(config, nameof(UserEntity).Replace("Entity", ""))
private ILogger<UserService> _logger;
private RoleService _roleService;
public UserService(IConfiguration config, ILogger<UserService> logger, RoleService roleService) : base(config, nameof(UserEntity).Replace("Entity", ""))
{
_logger = logger;
_roleService = roleService;
}
/// <summary>
/// 登录
@ -86,5 +95,152 @@ namespace langguanApi.Service
{
await base.RemoveAsync(id);
}
#region
/// <summary>
/// 用户是否存在
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<bool> Exist(UserDto input)
{
var entity = input.Adapt<UserEntity>();
Expression<Func<UserEntity, bool>> exp = filter => filter.Id == entity.Id;
return await base.Exist(exp);
}
/// <summary>
///新增用户
/// </summary>
/// <param name="input">新增用户dto</param>
/// <returns></returns>
public async Task<ApiResult> AddUser(UserDto input)
{
try
{
#region
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
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<UserEntity>();
#endregion
#region
if (entity != null && string.IsNullOrEmpty(entity.Id))
{
await base.CreateAsync(entity);
}
#endregion
}
catch (Exception ex)
{
_logger.LogError($"新增用户出现异常,请求参数user:{Newtonsoft.Json.JsonConvert.SerializeObject(input)}," +
$"请求接口:'api/User/AddUser'" +
$"异常信息:{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 = "保存用户信息成功" };
}
/// <summary>
///
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<ApiResult> GetUserList(UserQueryDto input)
{
try
{
#region
Expression<Func<UserEntity, bool>> exp = filter => filter.IsDelete == false;
if (!string.IsNullOrEmpty(input.Username))
{
exp = filter => filter.Username.Contains(input.Username);
}
if (!string.IsNullOrEmpty(input.Tel))
{
exp = filter => filter.Tel.Contains(input.Tel);
}
if (!string.IsNullOrEmpty(input.HiredateStart))
{
exp = filter => filter.Hiredate.Value >= DateTime.Parse(input.HiredateStart);
}
if (!string.IsNullOrEmpty(input.HiredateEnd))
{
exp = filter => filter.Hiredate.Value <= DateTime.Parse(input.HiredateEnd);
}
#endregion
#region
var result = await base.GetListWithExp(exp);//获取人员信息
var roleList = await _roleService.GetRoleListByIds(result.Select(s => s.roleId).ToList());
#endregion
#region
List<UserListDto> list = new List<UserListDto>();
foreach (var item in result)
{
list.Add(new UserListDto
{
Username = item.Username,
Education = item.Education,
Tel = item.Tel,
Email = item.Email,
roleName = roleList.FirstOrDefault(s => s.Id == item.roleId)?.RoleName,
Sex = item.Sex == 0 ? "男" : "女",
Address = item.Address,
IsAdmin = item.IsAdmin == 0 ? "否" : "是",
Native = item.Native,
University = item.University,
Hiredate = item.Hiredate.HasValue == true ? item.Hiredate.Value.ToString("yyyy-MM-dd") : "",
Brithday = item.Brithday.HasValue == true ? item.Brithday.Value.ToString("yyyy-MM-dd") : "",
});
}
#endregion
return new ApiResult { code = 0, data = list };
}
catch (Exception ex)
{
_logger.LogError($"获取用户列表出现异常,请求参数userQuery:{Newtonsoft.Json.JsonConvert.SerializeObject(input)}," +
$"请求接口:'api/User/GetUserList'" +
$"异常信息:{ex.Message}," +
$"异常位置:{ex.StackTrace}"
);
return new ApiResult { code = 1, msg = "获取用户列表失败" };
}
finally
{
_logger.LogInformation($"获取用户列表参数userQuery:{Newtonsoft.Json.JsonConvert.SerializeObject(input)}");
}
}
#endregion
}
}