using Microsoft.AspNetCore.Mvc; using QM.AuthServer.IRepository; using QM.AuthServer.Models.Menus; using QM.AuthServer.Models.Menus.Views; using QM.AuthServer.Models.Roles; using QM.AuthServer.Models.Users; using QM.OrmSqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using WS; using WS.AutoMapper; using WS.Orm; using WS.Security; using WS.Web.Auth; using WS.WebCore.Api; namespace QM.Gateway.Controllers { /// /// 用户 /// public class UserController : BaseApiController { private readonly ISysUserRepository _ISysUserRepository; public UserController( ISysUserRepository ISysUserRepository ) { _ISysUserRepository = ISysUserRepository; } #region 查询 /// /// 分页查询 /// /// 查询条件 /// [HttpGet] public async Task GetPage([FromQuery] UserPageDto input) { var query = _ISysUserRepository.Query(); if (!string.IsNullOrWhiteSpace(input.key)) query.Where(t => t.uid.Contains(input.key) || t.name.Contains(input.key)); var page = await query.OrderBy(t => t.name).ToPageAsync(input.page, input.limit); page.Data = (page.Data as List).MapTo(); return page; } /// /// 按编码获取 /// /// 用户编码 /// 返回菜单(-1不返回,0后台, 1前台) /// [HttpGet] public async Task GetById(string id, int menu = -1) { if (string.IsNullOrWhiteSpace(id)) id = AuthUser.Uid; var user = _ISysUserRepository.Get(t => t.uid == id); if (user == null) throw new UseMassageException("未找到匹配的数据"); var info = user.MapTo(); //info.posts = _ISysUserRepository.DbClient().Queryable().Where(t => t.uid == id).Select(t => t.gid).ToList(); info.departments = _ISysUserRepository.DbClient().Queryable().Where(t => t.bid == user.bid).First().name; //info.menus = (await _ISysUserRepository.GetUserMenu(new AuthoDto() { User = user.uid })).OrderBy(t => t.sort).OrderBy(t => t.lev).ToList().MapTo(); if(menu == 0 || menu == 1) info.menus = (await _ISysUserRepository.GetUserMenu(user.uid, menu)).MapTo(); return info; } /// /// 获取所有用户 /// /// [HttpGet] public async Task> GetAll() { var data = await _ISysUserRepository.GetListAsync(t => t.state == EnumState.Enable, new List>() { new OrderByModel(){order= t=>t.name} }); return data; } /// /// 获取当前用户 /// /// [HttpGet] public async Task GetUser() { var user = (await _ISysUserRepository.GetAsync(t => t.uid == AuthUser.Uid)).MapTo(); user.menus = (await _ISysUserRepository.GetUserMenu(AuthUser.Uid)).MapTo(); return user; } #endregion #region 添加或修改 /// /// 添加 /// /// [HttpPost] public async Task Create(UserInputDto input) { try { _ISysUserRepository.BeginTran(); SysUser user = input.MapTo(); var exi = _ISysUserRepository.Get(t => t.name == user.name); if (_ISysUserRepository.IsExist(t => t.uid == input.uid)) throw new UseArgumentException("登录账号已经存在"); user.cuser = AuthUser.Uid; user.pwd = Md5Crypt.Encrypt(user.pwd); // _ISysUserRepository.DbClient().Insertable(input.posts.Split(',').Select(t => new SysUserPost() { uid = user.uid, gid = t }).ToList()); _ISysUserRepository.CommitTran(); await _ISysUserRepository.InsertAsync(user); } catch (Exception ex) { _ISysUserRepository.RollbackTran(); throw ex; } return true; } /// /// 修改 /// /// [HttpPost] public async Task Update(UserInputDto input) { try { _ISysUserRepository.BeginTran(); SysUser user = input.MapTo(); var ouser = _ISysUserRepository.Get(t => t.uid == user.uid); user.pwd = ouser.pwd; await _ISysUserRepository.UpdateAsync(user); //角色 _ISysUserRepository.DbClient().Deleteable(t => t.uid == user.uid); _ISysUserRepository.DbClient().Insertable(input.posts.Split(',').Select(t => new SysUserPost() { uid = user.uid, gid = t }).ToList()); _ISysUserRepository.CommitTran(); } catch (Exception ex) { _ISysUserRepository.RollbackTran(); throw ex; } return true; } #endregion #region 删除 /// /// 删除 /// /// /// [HttpPost] public async Task Delete(string id) { if (string.IsNullOrWhiteSpace(id)) throw new UseMassageException("参数不能为空"); try { await _ISysUserRepository.DeleteAsync(t => t.uid == id); return true; } catch (Exception ex) { _ISysUserRepository.RollbackTran(); throw ex; } } /// /// 批量删除 /// /// 编码集(逗号分割) /// [HttpPost] public async Task Deletes(string ids) { if (string.IsNullOrWhiteSpace(ids)) throw new UseMassageException("参数不能为空"); var idArray = ids.Split(','); if (idArray.Contains(AuthUser.Uid)) throw new UseMassageException("不能自己删除自己"); var list = _ISysUserRepository.GetList(t => idArray.Contains(t.uid)); _ISysUserRepository.BeginTran(); try { foreach (var user in list) { user.is_delete = 0; user.dtime = DateTime.Now; user.duser = AuthUser.Uid; await _ISysUserRepository.UpdateAsync(user); } _ISysUserRepository.CommitTran(); return true; } catch (Exception ex) { _ISysUserRepository.RollbackTran(); throw ex; } } #endregion #region 修改密码 ///// ///// 修改密码 ///// ///// //[HttpPost] //public async Task UpdatePwd(EditPwd input) //{ // input.uid = AuthUser.Uid; // if (string.IsNullOrWhiteSpace(input.uid) || string.IsNullOrWhiteSpace(input.opwd) || string.IsNullOrWhiteSpace(input.npwd)) // throw new UseArgumentException("参数不能为空,请重新输入"); // if (input.opwd == input.npwd) // throw new UseArgumentException("新密码与旧密码相同"); // var entity = await _ISysUserRepository.GetAsync(t => t.uid == input.uid && t.state == EnumState.Enable && t.is_delete == EnumDelete.Normal); // if (entity == null) // throw new UseArgumentException("用户不存在或被禁用"); // if (entity.pwd != Md5Crypt.Encrypt(input.opwd)) // throw new UseArgumentException("原始密码错误,请确认后重新输入"); // entity.pwd = Md5Crypt.Encrypt(input.npwd); // var res = await _ISysUserRepository.UpdateAsync(entity); // return res; //} ///// ///// 重置密码 ///// ///// //[HttpPost] //public async Task ResPwd(EditPwd input) //{ // if (AuthUser.Uid != "admin") // throw new UseMassageException("您没有权限重置密码"); // if (string.IsNullOrWhiteSpace(input.uid) || string.IsNullOrWhiteSpace(input.npwd)) // throw new UseArgumentException("参数不能为空,请重新输入"); // var entity = await _ISysUserRepository.GetAsync(t => t.uid == input.uid && t.is_delete == EnumDelete.Normal); // if (entity == null) // throw new UseArgumentException("用户不存在或被删除"); // entity.pwd = Md5Crypt.Encrypt(input.npwd); // var res = await _ISysUserRepository.UpdateAsync(entity); // return res; //} #endregion } }