UserController.cs 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. using Microsoft.AspNetCore.Mvc;
  2. using QM.AuthServer.IRepository;
  3. using QM.AuthServer.Models.Menus;
  4. using QM.AuthServer.Models.Menus.Views;
  5. using QM.AuthServer.Models.Roles;
  6. using QM.AuthServer.Models.Users;
  7. using QM.OrmSqlSugar;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Threading.Tasks;
  12. using WS;
  13. using WS.AutoMapper;
  14. using WS.Orm;
  15. using WS.Security;
  16. using WS.Web.Auth;
  17. using WS.WebCore.Api;
  18. namespace QM.Gateway.Controllers
  19. {
  20. /// <summary>
  21. /// 用户
  22. /// </summary>
  23. public class UserController : BaseApiController
  24. {
  25. private readonly ISysUserRepository _ISysUserRepository;
  26. public UserController(
  27. ISysUserRepository ISysUserRepository
  28. )
  29. {
  30. _ISysUserRepository = ISysUserRepository;
  31. }
  32. #region 查询
  33. /// <summary>
  34. /// 分页查询
  35. /// </summary>
  36. /// <param name="input">查询条件</param>
  37. /// <returns></returns>
  38. [HttpGet]
  39. public async Task<PageData> GetPage([FromQuery] UserPageDto input)
  40. {
  41. var query = _ISysUserRepository.Query();
  42. if (!string.IsNullOrWhiteSpace(input.key))
  43. query.Where(t => t.uid.Contains(input.key) || t.name.Contains(input.key));
  44. var page = await query.OrderBy(t => t.name).ToPageAsync(input.page, input.limit);
  45. page.Data = (page.Data as List<SysUser>).MapTo<SysUser, SysUserListView>();
  46. return page;
  47. }
  48. /// <summary>
  49. /// 按编码获取
  50. /// </summary>
  51. /// <param name="id">用户编码</param>
  52. /// <param name="menu">返回菜单(-1不返回,0后台, 1前台)</param>
  53. /// <returns></returns>
  54. [HttpGet]
  55. public async Task<UserInfoView> GetById(string id, int menu = -1)
  56. {
  57. if (string.IsNullOrWhiteSpace(id))
  58. id = AuthUser.Uid;
  59. var user = _ISysUserRepository.Get(t => t.uid == id);
  60. if (user == null)
  61. throw new UseMassageException("未找到匹配的数据");
  62. var info = user.MapTo<UserInfoView>();
  63. //info.posts = _ISysUserRepository.DbClient().Queryable<SysUserPost>().Where(t => t.uid == id).Select(t => t.gid).ToList();
  64. info.departments = _ISysUserRepository.DbClient().Queryable<SysDepartment>().Where(t => t.bid == user.bid).First().name;
  65. //info.menus = (await _ISysUserRepository.GetUserMenu(new AuthoDto() { User = user.uid })).OrderBy(t => t.sort).OrderBy(t => t.lev).ToList().MapTo<SysMenu, MenuView>();
  66. if(menu == 0 || menu == 1)
  67. info.menus = (await _ISysUserRepository.GetUserMenu(user.uid, menu)).MapTo<SysMenu, MenuView>();
  68. return info;
  69. }
  70. /// <summary>
  71. /// 获取所有用户
  72. /// </summary>
  73. /// <returns></returns>
  74. [HttpGet]
  75. public async Task<List<SysUser>> GetAll()
  76. {
  77. var data = await _ISysUserRepository.GetListAsync(t => t.state == EnumState.Enable, new List<OrderByModel<SysUser>>() {
  78. new OrderByModel<SysUser>(){order= t=>t.name}
  79. });
  80. return data;
  81. }
  82. /// <summary>
  83. /// 获取当前用户
  84. /// </summary>
  85. /// <returns></returns>
  86. [HttpGet]
  87. public async Task<UserInfoView> GetUser()
  88. {
  89. var user = (await _ISysUserRepository.GetAsync(t => t.uid == AuthUser.Uid)).MapTo<SysUser, UserInfoView>();
  90. user.menus = (await _ISysUserRepository.GetUserMenu(AuthUser.Uid)).MapTo<SysMenu, MenuView>();
  91. return user;
  92. }
  93. #endregion
  94. #region 添加或修改
  95. /// <summary>
  96. /// 添加
  97. /// </summary>
  98. /// <returns></returns>
  99. [HttpPost]
  100. public async Task<bool> Create(UserInputDto input)
  101. {
  102. try
  103. {
  104. _ISysUserRepository.BeginTran();
  105. SysUser user = input.MapTo<SysUser>();
  106. var exi = _ISysUserRepository.Get(t => t.name == user.name);
  107. if (_ISysUserRepository.IsExist(t => t.uid == input.uid))
  108. throw new UseArgumentException("登录账号已经存在");
  109. user.cuser = AuthUser.Uid;
  110. user.pwd = Md5Crypt.Encrypt(user.pwd);
  111. //
  112. _ISysUserRepository.DbClient().Insertable(input.posts.Split(',').Select(t => new SysUserPost()
  113. {
  114. uid = user.uid,
  115. gid = t
  116. }).ToList());
  117. _ISysUserRepository.CommitTran();
  118. await _ISysUserRepository.InsertAsync(user);
  119. }
  120. catch (Exception ex)
  121. {
  122. _ISysUserRepository.RollbackTran();
  123. throw ex;
  124. }
  125. return true;
  126. }
  127. /// <summary>
  128. /// 修改
  129. /// </summary>
  130. /// <returns></returns>
  131. [HttpPost]
  132. public async Task<bool> Update(UserInputDto input)
  133. {
  134. try
  135. {
  136. _ISysUserRepository.BeginTran();
  137. SysUser user = input.MapTo<SysUser>();
  138. var ouser = _ISysUserRepository.Get(t => t.uid == user.uid);
  139. user.pwd = ouser.pwd;
  140. await _ISysUserRepository.UpdateAsync(user);
  141. //角色
  142. _ISysUserRepository.DbClient().Deleteable<SysUserPost>(t => t.uid == user.uid);
  143. _ISysUserRepository.DbClient().Insertable(input.posts.Split(',').Select(t => new SysUserPost()
  144. {
  145. uid = user.uid,
  146. gid = t
  147. }).ToList());
  148. _ISysUserRepository.CommitTran();
  149. }
  150. catch (Exception ex)
  151. {
  152. _ISysUserRepository.RollbackTran();
  153. throw ex;
  154. }
  155. return true;
  156. }
  157. #endregion
  158. #region 删除
  159. /// <summary>
  160. /// 删除
  161. /// </summary>
  162. /// <param name="id"></param>
  163. /// <returns></returns>
  164. [HttpPost]
  165. public async Task<bool> Delete(string id)
  166. {
  167. if (string.IsNullOrWhiteSpace(id))
  168. throw new UseMassageException("参数不能为空");
  169. try
  170. {
  171. await _ISysUserRepository.DeleteAsync(t => t.uid == id);
  172. return true;
  173. }
  174. catch (Exception ex)
  175. {
  176. _ISysUserRepository.RollbackTran();
  177. throw ex;
  178. }
  179. }
  180. /// <summary>
  181. /// 批量删除
  182. /// </summary>
  183. /// <param name="ids">编码集(逗号分割)</param>
  184. /// <returns></returns>
  185. [HttpPost]
  186. public async Task<bool> Deletes(string ids)
  187. {
  188. if (string.IsNullOrWhiteSpace(ids))
  189. throw new UseMassageException("参数不能为空");
  190. var idArray = ids.Split(',');
  191. if (idArray.Contains(AuthUser.Uid))
  192. throw new UseMassageException("不能自己删除自己");
  193. var list = _ISysUserRepository.GetList(t => idArray.Contains(t.uid));
  194. _ISysUserRepository.BeginTran();
  195. try
  196. {
  197. foreach (var user in list)
  198. {
  199. user.is_delete = 0;
  200. user.dtime = DateTime.Now;
  201. user.duser = AuthUser.Uid;
  202. await _ISysUserRepository.UpdateAsync(user);
  203. }
  204. _ISysUserRepository.CommitTran();
  205. return true;
  206. }
  207. catch (Exception ex)
  208. {
  209. _ISysUserRepository.RollbackTran();
  210. throw ex;
  211. }
  212. }
  213. #endregion
  214. #region 修改密码
  215. ///// <summary>
  216. ///// 修改密码
  217. ///// </summary>
  218. ///// <returns></returns>
  219. //[HttpPost]
  220. //public async Task<bool> UpdatePwd(EditPwd input)
  221. //{
  222. // input.uid = AuthUser.Uid;
  223. // if (string.IsNullOrWhiteSpace(input.uid) || string.IsNullOrWhiteSpace(input.opwd) || string.IsNullOrWhiteSpace(input.npwd))
  224. // throw new UseArgumentException("参数不能为空,请重新输入");
  225. // if (input.opwd == input.npwd)
  226. // throw new UseArgumentException("新密码与旧密码相同");
  227. // var entity = await _ISysUserRepository.GetAsync(t => t.uid == input.uid && t.state == EnumState.Enable && t.is_delete == EnumDelete.Normal);
  228. // if (entity == null)
  229. // throw new UseArgumentException("用户不存在或被禁用");
  230. // if (entity.pwd != Md5Crypt.Encrypt(input.opwd))
  231. // throw new UseArgumentException("原始密码错误,请确认后重新输入");
  232. // entity.pwd = Md5Crypt.Encrypt(input.npwd);
  233. // var res = await _ISysUserRepository.UpdateAsync(entity);
  234. // return res;
  235. //}
  236. ///// <summary>
  237. ///// 重置密码
  238. ///// </summary>
  239. ///// <returns></returns>
  240. //[HttpPost]
  241. //public async Task<bool> ResPwd(EditPwd input)
  242. //{
  243. // if (AuthUser.Uid != "admin")
  244. // throw new UseMassageException("您没有权限重置密码");
  245. // if (string.IsNullOrWhiteSpace(input.uid) || string.IsNullOrWhiteSpace(input.npwd))
  246. // throw new UseArgumentException("参数不能为空,请重新输入");
  247. // var entity = await _ISysUserRepository.GetAsync(t => t.uid == input.uid && t.is_delete == EnumDelete.Normal);
  248. // if (entity == null)
  249. // throw new UseArgumentException("用户不存在或被删除");
  250. // entity.pwd = Md5Crypt.Encrypt(input.npwd);
  251. // var res = await _ISysUserRepository.UpdateAsync(entity);
  252. // return res;
  253. //}
  254. #endregion
  255. }
  256. }