using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using New_College.AuthHelper.OverWrite; using New_College.Common.Helper; using New_College.Common.HttpContextUser; using New_College.IRepository.UnitOfWork; using New_College.IServices; using New_College.Model; using New_College.Model.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; namespace New_College.Controllers { /// /// 用户管理 /// [Route("api/[controller]/[action]")] [ApiController] [Authorize(Permissions.Name)] public class UserController : ControllerBase { private readonly IUnitOfWork _unitOfWork; readonly ISysUserInfoServices _sysUserInfoServices; readonly IUserRoleServices _userRoleServices; readonly IRoleServices _roleServices; private readonly IUser _user; private readonly ILogger _logger; /// /// 构造函数 /// /// /// /// /// /// /// public UserController(IUnitOfWork unitOfWork, ISysUserInfoServices sysUserInfoServices, IUserRoleServices userRoleServices, IRoleServices roleServices, IUser user, ILogger logger) { _unitOfWork = unitOfWork; _sysUserInfoServices = sysUserInfoServices; _userRoleServices = userRoleServices; _roleServices = roleServices; _user = user; _logger = logger; } /// /// 获取全部用户 /// /// /// /// // GET: api/User [HttpGet] public async Task>> Get(int page = 1, string key = "") { if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) { key = ""; } int intPageSize = 50; var data = await _sysUserInfoServices.QueryPage(a => a.tdIsDelete != true && a.uStatus >= 0 && ((a.uLoginName != null && a.uLoginName.Contains(key)) || (a.uRealName != null && a.uRealName.Contains(key))), page, intPageSize, " uID desc "); #region MyRegion // 这里可以封装到多表查询,此处简单处理 var allUserRoles = await _userRoleServices.Query(d => d.IsDeleted == false); var allRoles = await _roleServices.Query(d => d.IsDeleted == false); var sysUserInfos = data.data; foreach (var item in sysUserInfos) { var currentUserRoles = allUserRoles.Where(d => d.UserId == item.uID).Select(d => d.RoleId).ToList(); item.RIDs = currentUserRoles; item.RoleNames = allRoles.Where(d => currentUserRoles.Contains(d.Id)).Select(d => d.Name).ToList(); } data.data = sysUserInfos; #endregion return new MessageModel>() { msg = "获取成功", success = data.dataCount >= 0, response = data }; } // GET: api/User/5 [HttpGet("{id}")] [AllowAnonymous] public string Get(string id) { _logger.LogError("test wrong"); return "value"; } // GET: api/User/5 /// /// 获取用户详情根据token /// 【无权限】 /// /// 令牌 /// [HttpGet] [AllowAnonymous] public async Task> GetInfoByToken(string token) { var data = new MessageModel(); if (!string.IsNullOrEmpty(token)) { var tokenModel = JwtHelper.SerializeJwt(token); if (tokenModel != null && tokenModel.Uid > 0) { var userinfo = await _sysUserInfoServices.QueryById(tokenModel.Uid); if (userinfo != null) { data.response = userinfo; data.success = true; data.msg = "获取成功"; } } } return data; } /// /// 添加一个用户 /// /// /// // POST: api/User [HttpPost] public async Task> Post([FromBody] sysUserInfo sysUserInfo) { var data = new MessageModel(); sysUserInfo.uLoginPWD = MD5Helper.MD5Encrypt32(sysUserInfo.uLoginPWD); sysUserInfo.uRemark = _user.Name; var id = await _sysUserInfoServices.Add(sysUserInfo); data.success = id > 0; if (data.success) { data.response = id.ObjToString(); data.msg = "添加成功"; } return data; } /// /// 更新用户与角色 /// /// /// // PUT: api/User/5 [HttpPut] public async Task> Put([FromBody] sysUserInfo sysUserInfo) { // 这里使用事务处理 var data = new MessageModel(); try { _unitOfWork.BeginTran(); if (sysUserInfo != null && sysUserInfo.uID > 0) { if (sysUserInfo.RIDs.Count > 0) { // 无论 Update Or Add , 先删除当前用户的全部 U_R 关系 var usreroles = (await _userRoleServices.Query(d => d.UserId == sysUserInfo.uID)).Select(d => d.Id.ToString()).ToArray(); if (usreroles.Count() > 0) { var isAllDeleted = await _userRoleServices.DeleteByIds(usreroles); } // 然后再执行添加操作 var userRolsAdd = new List(); sysUserInfo.RIDs.ForEach(rid => { userRolsAdd.Add(new UserRole(sysUserInfo.uID, rid)); }); await _userRoleServices.Add(userRolsAdd); } data.success = await _sysUserInfoServices.Update(sysUserInfo); _unitOfWork.CommitTran(); if (data.success) { data.msg = "更新成功"; data.response = sysUserInfo?.uID.ObjToString(); } } } catch (Exception e) { _unitOfWork.RollbackTran(); _logger.LogError(e, e.Message); } return data; } /// /// 删除用户 /// /// /// // DELETE: api/ApiWithActions/5 [HttpDelete] public async Task> Delete(int id) { var data = new MessageModel(); if (id > 0) { var userDetail = await _sysUserInfoServices.QueryById(id); userDetail.tdIsDelete = true; data.success = await _sysUserInfoServices.Update(userDetail); if (data.success) { data.msg = "删除成功"; data.response = userDetail?.uID.ObjToString(); } } return data; } } }