SysUserService.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. using Infrastructure;
  2. using Infrastructure.Attribute;
  3. using Infrastructure.Extensions;
  4. using SqlSugar;
  5. using System;
  6. using System.Collections;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using ZR.Common;
  10. using ZR.Model;
  11. using ZR.Model.System;
  12. using ZR.Model.System.Dto;
  13. using ZR.Repository;
  14. using ZR.Service.System.IService;
  15. namespace ZR.Service
  16. {
  17. /// <summary>
  18. /// 系统用户
  19. /// </summary>
  20. [AppService(ServiceType = typeof(ISysUserService), ServiceLifetime = LifeTime.Transient)]
  21. public class SysUserService : BaseService<SysUser>, ISysUserService
  22. {
  23. private readonly ISysRoleService RoleService;
  24. private readonly ISysUserRoleService UserRoleService;
  25. private readonly ISysUserPostService UserPostService;
  26. public SysUserService(
  27. ISysRoleService sysRoleService,
  28. ISysUserRoleService userRoleService,
  29. ISysUserPostService userPostService)
  30. {
  31. RoleService = sysRoleService;
  32. UserRoleService = userRoleService;
  33. UserPostService = userPostService;
  34. }
  35. /// <summary>
  36. /// 根据条件分页查询用户列表
  37. /// </summary>
  38. /// <returns></returns>
  39. public PagedInfo<SysUser> SelectUserList(SysUser user, PagerInfo pager)
  40. {
  41. var exp = Expressionable.Create<SysUser>();
  42. exp.AndIF(!string.IsNullOrEmpty(user.UserName), u => u.UserName.Contains(user.UserName));
  43. exp.AndIF(!string.IsNullOrEmpty(user.Status), u => u.Status == user.Status);
  44. exp.AndIF(user.BeginTime != DateTime.MinValue && user.BeginTime != null, u => u.Create_time >= user.BeginTime);
  45. exp.AndIF(user.EndTime != DateTime.MinValue && user.EndTime != null, u => u.Create_time <= user.EndTime);
  46. exp.AndIF(!user.Phonenumber.IsEmpty(), u => u.Phonenumber == user.Phonenumber);
  47. exp.And(u => u.DelFlag == "0");
  48. if (user.DeptId != 0)
  49. {
  50. List<SysDept> depts = Context.Queryable<SysDept>().ToList();
  51. var newDepts = depts.FindAll(delegate (SysDept dept)
  52. {
  53. string[] parentDeptId = dept.Ancestors.Split(",", StringSplitOptions.RemoveEmptyEntries);
  54. return parentDeptId.Contains(user.DeptId.ToString());
  55. });
  56. string[] deptArr = newDepts.Select(x => x.DeptId.ToString()).ToArray();
  57. exp.AndIF(user.DeptId != 0, u => u.DeptId == user.DeptId || deptArr.Contains(u.DeptId.ToString()));
  58. }
  59. var query = Queryable()
  60. .LeftJoin<SysDept>((u, dept) => u.DeptId == dept.DeptId)
  61. .Where(exp.ToExpression())
  62. .Select((u, dept) => new SysUser
  63. {
  64. UserId = u.UserId.SelectAll(),
  65. DeptName = dept.DeptName,
  66. });
  67. return query.ToPage(pager);
  68. }
  69. /// <summary>
  70. /// 通过用户ID查询用户
  71. /// </summary>
  72. /// <param name="userId"></param>
  73. /// <returns></returns>
  74. public SysUser SelectUserById(long userId)
  75. {
  76. var user = Queryable().Filter(null, true).Where(f => f.UserId == userId).First();
  77. if (user != null && user.UserId > 0)
  78. {
  79. user.Roles = RoleService.SelectUserRoleListByUserId(userId);
  80. user.RoleIds = user.Roles.Select(x => x.RoleId).ToArray();
  81. }
  82. return user;
  83. }
  84. /// <summary>
  85. /// 校验用户名称是否唯一
  86. /// </summary>
  87. /// <param name="userName"></param>
  88. /// <returns></returns>
  89. public string CheckUserNameUnique(string userName)
  90. {
  91. int count = Count(it => it.UserName == userName);
  92. if (count > 0)
  93. {
  94. return UserConstants.NOT_UNIQUE;
  95. }
  96. return UserConstants.UNIQUE;
  97. }
  98. /// <summary>
  99. /// 新增保存用户信息
  100. /// </summary>
  101. /// <param name="sysUser"></param>
  102. /// <returns></returns>
  103. public long InsertUser(SysUser sysUser)
  104. {
  105. sysUser.Create_time = DateTime.Now;
  106. long userId = Insertable(sysUser).ExecuteReturnIdentity();
  107. sysUser.UserId = userId;
  108. //新增用户角色信息
  109. UserRoleService.InsertUserRole(sysUser);
  110. //新增用户岗位信息
  111. UserPostService.InsertUserPost(sysUser);
  112. return userId;
  113. }
  114. /// <summary>
  115. /// 修改用户信息
  116. /// </summary>
  117. /// <param name="sysUser"></param>
  118. /// <returns></returns>
  119. public int UpdateUser(SysUser user)
  120. {
  121. var roleIds = RoleService.SelectUserRoles(user.UserId);
  122. var diffArr = roleIds.Where(c => !((IList)user.RoleIds).Contains(c)).ToArray();
  123. var diffArr2 = user.RoleIds.Where(c => !((IList)roleIds).Contains(c)).ToArray();
  124. if (diffArr.Length > 0 || diffArr2.Length > 0)
  125. {
  126. //删除用户与角色关联
  127. UserRoleService.DeleteUserRoleByUserId((int)user.UserId);
  128. //新增用户与角色关联
  129. UserRoleService.InsertUserRole(user);
  130. }
  131. // 删除用户与岗位关联
  132. UserPostService.Delete(user.UserId);
  133. // 新增用户与岗位管理
  134. UserPostService.InsertUserPost(user);
  135. return ChangeUser(user);
  136. }
  137. public int ChangeUser(SysUser user)
  138. {
  139. user.Update_time = DateTime.Now;
  140. return Update(user, t => new
  141. {
  142. t.NickName,
  143. t.Email,
  144. t.Phonenumber,
  145. t.DeptId,
  146. t.Status,
  147. t.Sex,
  148. t.PostIds,
  149. t.Remark,
  150. t.Update_by,
  151. t.Update_time
  152. }, true);
  153. }
  154. /// <summary>
  155. /// 重置密码
  156. /// </summary>
  157. /// <param name="userid"></param>
  158. /// <param name="password"></param>
  159. /// <returns></returns>
  160. public int ResetPwd(long userid, string password)
  161. {
  162. return Update(new SysUser() { UserId = userid, Password = password }, it => new { it.Password }, f => f.UserId == userid);
  163. }
  164. /// <summary>
  165. /// 修改用户状态
  166. /// </summary>
  167. /// <param name="user"></param>
  168. /// <returns></returns>
  169. public int ChangeUserStatus(SysUser user)
  170. {
  171. return Update(user, it => new { it.Status }, f => f.UserId == user.UserId);
  172. }
  173. /// <summary>
  174. /// 删除用户
  175. /// </summary>
  176. /// <param name="userid"></param>
  177. /// <returns></returns>
  178. public int DeleteUser(long userid)
  179. {
  180. CheckUserAllowed(new SysUser() { UserId = userid});
  181. //删除用户与角色关联
  182. UserRoleService.DeleteUserRoleByUserId((int)userid);
  183. // 删除用户与岗位关联
  184. UserPostService.Delete(userid);
  185. return Update(new SysUser() { UserId = userid, DelFlag = "2" }, it => new { it.DelFlag }, f => f.UserId == userid);
  186. }
  187. /// <summary>
  188. /// 修改用户头像
  189. /// </summary>
  190. /// <param name="user"></param>
  191. /// <returns></returns>
  192. public int UpdatePhoto(SysUser user)
  193. {
  194. return Update(user, it => new { it.Avatar }, f => f.UserId == user.UserId); ;
  195. }
  196. /// <summary>
  197. /// 注册用户
  198. /// </summary>
  199. /// <param name="dto"></param>
  200. /// <returns></returns>
  201. public SysUser Register(RegisterDto dto)
  202. {
  203. //密码md5
  204. string password = NETCore.Encrypt.EncryptProvider.Md5(dto.Password);
  205. if (!Tools.PasswordStrength(dto.Password))
  206. {
  207. throw new CustomException("密码强度不符合要求");
  208. }
  209. SysUser user = new()
  210. {
  211. Create_time = DateTime.Now,
  212. UserName = dto.Username,
  213. NickName = dto.Username,
  214. Password = password,
  215. Status = "0",
  216. DeptId = 0,
  217. Remark = "用户注册"
  218. };
  219. user.UserId = Insertable(user).ExecuteReturnIdentity();
  220. return user;
  221. }
  222. /// <summary>
  223. /// 校验角色是否允许操作
  224. /// </summary>
  225. /// <param name="user"></param>
  226. public void CheckUserAllowed(SysUser user)
  227. {
  228. if (user.IsAdmin())
  229. {
  230. throw new CustomException("不允许操作超级管理员角色");
  231. }
  232. }
  233. /// <summary>
  234. /// 校验用户是否有数据权限
  235. /// </summary>
  236. /// <param name="userid"></param>
  237. /// <param name="loginUserId"></param>
  238. public void CheckUserDataScope(long userid, long loginUserId)
  239. {
  240. if (!SysUser.IsAdmin(loginUserId))
  241. {
  242. SysUser user = new SysUser() { UserId = userid};
  243. //TODO 判断用户是否有数据权限
  244. }
  245. }
  246. /// <summary>
  247. /// 导入数据
  248. /// </summary>
  249. /// <param name="users"></param>
  250. /// <returns></returns>
  251. public string ImportUsers(List<SysUser> users)
  252. {
  253. users.ForEach(x =>
  254. {
  255. x.Create_time = DateTime.Now;
  256. x.Status = "0";
  257. x.DelFlag = "0";
  258. x.Password = "E10ADC3949BA59ABBE56E057F20F883E";
  259. x.Remark = "数据导入";
  260. });
  261. var x = Context.Storageable(users)
  262. .SplitInsert(it => !it.Any())
  263. .SplitIgnore(it => it.Item.UserName == GlobalConstant.AdminRole)
  264. .SplitError(x => x.Item.UserName.IsEmpty(), "用户名不能为空")
  265. .SplitError(x => !Tools.CheckUserName(x.Item.UserName), "用户名不符合规范")
  266. .WhereColumns(it => it.UserName)//如果不是主键可以这样实现(多字段it=>new{it.x1,it.x2})
  267. .ToStorage();
  268. var result = x.AsInsertable.ExecuteCommand();//插入可插入部分;
  269. string msg = string.Format(" 插入{0} 更新{1} 错误数据{2} 不计算数据{3} 删除数据{4},总共{5}",
  270. x.InsertList.Count,
  271. x.UpdateList.Count,
  272. x.ErrorList.Count,
  273. x.IgnoreList.Count,
  274. x.DeleteList.Count,
  275. x.TotalList.Count);
  276. //输出统计
  277. Console.WriteLine(msg);
  278. //输出错误信息
  279. foreach (var item in x.ErrorList)
  280. {
  281. Console.WriteLine("userName为" + item.Item.UserName + " : " + item.StorageMessage);
  282. }
  283. return msg;
  284. }
  285. /// <summary>
  286. /// 登录
  287. /// </summary>
  288. /// <param name="user">登录实体</param>
  289. /// <returns></returns>
  290. public SysUser Login(LoginBodyDto user)
  291. {
  292. return GetFirst(it => it.UserName == user.Username && it.Password == user.Password);
  293. }
  294. /// <summary>
  295. /// 修改登录信息
  296. /// </summary>
  297. /// <param name="user"></param>
  298. /// <param name="userId"></param>
  299. /// <returns></returns>
  300. public void UpdateLoginInfo(LoginBodyDto user, long userId)
  301. {
  302. Update(new SysUser() { LoginIP = user.LoginIP, LoginDate = DateTime.Now, UserId = userId },it => new { it.LoginIP, it.LoginDate });
  303. }
  304. }
  305. }