AdminService.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. using AutoMapper;
  2. using ProductionLineMonitor.Application.Services.AdminService.Dtos;
  3. using ProductionLineMonitor.Core.Dtos;
  4. using ProductionLineMonitor.Core.IRepositories;
  5. using ProductionLineMonitor.Core.Models;
  6. using ProductionLineMonitor.Core.Utils;
  7. using ProductionLineMonitor.EntityFramework;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Text.RegularExpressions;
  13. using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
  14. namespace ProductionLineMonitor.Application.Services.AdminService
  15. {
  16. public class AdminService : IAdminService
  17. {
  18. protected readonly IUnitOfWork _unitOfWork;
  19. protected readonly IMapper _mapper;
  20. public AdminService(IUnitOfWork unitOfWork, IMapper mapper)
  21. {
  22. _unitOfWork = unitOfWork;
  23. _mapper = mapper;
  24. }
  25. public ResultDto<UserDto> CreateUser(UserCreateOrUpdateDto dto)
  26. {
  27. bool rev = _unitOfWork.UserRepository.Any(x => x.JobNo == dto.JobNo);
  28. if (rev)
  29. {
  30. return ResultDto<UserDto>.Fail("工号已存在!");
  31. }
  32. var user = _mapper.Map<User>(dto);
  33. user.CreateTime = DateTime.Now;
  34. user.Password = $"{dto.JobNo}&123456".To32MD5();
  35. _unitOfWork.UserRepository.Create(user);
  36. _unitOfWork.SaveChanges();
  37. var userDto = _mapper.Map<UserDto>(user);
  38. return ResultDto<UserDto>.Success(userDto);
  39. }
  40. public ResultDto ChangePassword(UserChangePasswordDto dto)
  41. {
  42. if (!Regex.IsMatch(dto.NewPassword, @"^(?:(?=.*[0-9].*)(?=.*[A-Za-z].*)(?=.*[^0-9A-Za-z].*)).{3,}"))
  43. {
  44. return ResultDto.Fail("密码请使用数字、字母、符号组成!");
  45. }
  46. if (dto.NewPassword != dto.AgainNewPassword)
  47. {
  48. return ResultDto.Fail("两次输入新密码不一致!");
  49. }
  50. var user = _unitOfWork.UserRepository.FirstOrDefault(x => x.JobNo == dto.JobNo);
  51. if (user == null)
  52. {
  53. return ResultDto.Fail("用户不存在!");
  54. }
  55. string passwordMD5 = $"{dto.JobNo}&{dto.Password}".To32MD5();
  56. if (user.Password != passwordMD5)
  57. {
  58. return ResultDto.Fail("原密码不正确!");
  59. }
  60. user.Password = $"{dto.JobNo}&{dto.NewPassword}".To32MD5();
  61. user.UpdateTime = DateTime.Now;
  62. _unitOfWork.UserRepository.Update(user);
  63. _unitOfWork.SaveChanges();
  64. return ResultDto.Success();
  65. }
  66. public UserLoginResultInfoDto? Login(string jobNo, string password)
  67. {
  68. var user = _unitOfWork.UserRepository.FirstOrDefault(
  69. x => x.JobNo == jobNo && x.Password == $"{jobNo}&{password}".To32MD5());
  70. if (user == null)
  71. return null;
  72. UserLoginResultInfoDto userLoginResultInfo = new UserLoginResultInfoDto
  73. {
  74. JobNo = user.JobNo,
  75. Name = user.Name,
  76. RoleId = user.RoleId,
  77. CreateTime = user.CreateTime
  78. };
  79. var role = _unitOfWork.RoleRepository.GetById(user.RoleId);
  80. if (role != null)
  81. {
  82. userLoginResultInfo.RoleName = role.Name;
  83. userLoginResultInfo.MenuDtos = GetPermissions(role.Id);
  84. }
  85. return userLoginResultInfo;
  86. }
  87. public ResultDto UpdateUser(string id, UserCreateOrUpdateDto dto)
  88. {
  89. var user = _unitOfWork.UserRepository.GetById(id);
  90. if (user == null)
  91. {
  92. return ResultDto.Fail("用户不存在!");
  93. }
  94. _mapper.Map(dto, user);
  95. _unitOfWork.UserRepository.Update(user);
  96. _unitOfWork.SaveChanges();
  97. return ResultDto.Success();
  98. }
  99. public ResultDto DeleteUser(string id)
  100. {
  101. var user = _unitOfWork.UserRepository.GetById(id);
  102. if (user == null)
  103. {
  104. return ResultDto.Fail("用户不存在!");
  105. }
  106. _unitOfWork.UserRepository.Delete(user);
  107. _unitOfWork.SaveChanges();
  108. return ResultDto.Success();
  109. }
  110. public ResultDto<IEnumerable<UserDto>> GetUserList(string? keyword = null)
  111. {
  112. var userDtos = new List<UserDto>();
  113. var users = _unitOfWork.UserRepository.GetList(x => x.Name.Contains(keyword) || x.JobNo.Contains(keyword));
  114. if (users == null)
  115. {
  116. return ResultDto<IEnumerable<UserDto>>.Success(userDtos);
  117. }
  118. foreach (var user in users)
  119. {
  120. var userDto = _mapper.Map<UserDto>(user);
  121. var role = _unitOfWork.RoleRepository.GetById(user.RoleId);
  122. if (role != null)
  123. {
  124. userDto.RoleName = role.Name;
  125. }
  126. userDtos.Add(userDto);
  127. }
  128. return ResultDto<IEnumerable<UserDto>>.Success(userDtos);
  129. }
  130. public PageDto<IEnumerable<UserDto>> GetUserPageList(int pageIndex, int pageSize, string? keyword = null)
  131. {
  132. var userDtos = new List<UserDto>();
  133. var users = _unitOfWork.UserRepository.GetPageList(
  134. out int total, pageIndex, pageSize, o => o.OrderByDescending(o => o.CreateTime),
  135. x => x.Name.Contains(keyword) || x.JobNo.Contains(keyword));
  136. if (users != null)
  137. {
  138. foreach (var user in users)
  139. {
  140. var userDto = _mapper.Map<UserDto>(user);
  141. var role = _unitOfWork.RoleRepository.GetById(user.RoleId);
  142. if (role != null)
  143. {
  144. userDto.RoleName = role.Name;
  145. }
  146. userDtos.Add(userDto);
  147. }
  148. }
  149. return new PageDto<IEnumerable<UserDto>>(total, userDtos);
  150. }
  151. public ResultDto<IEnumerable<Role>> GetAllRoles()
  152. {
  153. var roles = _unitOfWork.RoleRepository.GetList();
  154. return ResultDto<IEnumerable<Role>>.Success(roles);
  155. }
  156. public PageDto<IEnumerable<Role>> GetRolePageList(int pageIndex, int pageSize, string? keyword = null)
  157. {
  158. var roles = _unitOfWork.RoleRepository.GetPageList(out int total, pageIndex, pageSize,
  159. o => o.OrderByDescending(o => o.CreateTime),
  160. x => x.Name.Contains(keyword));
  161. return new PageDto<IEnumerable<Role>>(total, roles);
  162. }
  163. public ResultDto<UserDto> GetUserById(string id)
  164. {
  165. var user = _unitOfWork.UserRepository.GetById(id);
  166. if (user == null)
  167. {
  168. return ResultDto<UserDto>.Fail("资源不存在!");
  169. }
  170. var userDto = _mapper.Map<UserDto>(user);
  171. var role = _unitOfWork.RoleRepository.GetById(user.RoleId);
  172. if (role != null)
  173. {
  174. userDto.RoleName = role.Name;
  175. }
  176. return ResultDto<UserDto>.Success(userDto);
  177. }
  178. public ResultDto<Role> GetRoleById(string id)
  179. {
  180. var role = _unitOfWork.RoleRepository.GetById(id);
  181. return ResultDto<Role>.Success(role);
  182. }
  183. public ResultDto<Role> CreateRole(RoleCreateOrUpdateDto dto)
  184. {
  185. bool rev = _unitOfWork.RoleRepository.Any(x => x.Name == dto.Name);
  186. if (rev)
  187. {
  188. return ResultDto<Role>.Fail("角色名称已存在!");
  189. }
  190. var role = _mapper.Map<Role>(dto);
  191. role.CreateTime = DateTime.Now;
  192. _unitOfWork.RoleRepository.Create(role);
  193. _unitOfWork.SaveChanges();
  194. return ResultDto<Role>.Success(role);
  195. }
  196. public ResultDto UpdateRole(string id, RoleCreateOrUpdateDto dto)
  197. {
  198. var role = _unitOfWork.RoleRepository.GetById(id);
  199. if (role == null)
  200. {
  201. return ResultDto.Fail("角色不存在!");
  202. }
  203. _mapper.Map(dto, role);
  204. role.UpdateTime = DateTime.Now;
  205. _unitOfWork.RoleRepository.Update(role);
  206. _unitOfWork.SaveChanges();
  207. return ResultDto.Success();
  208. }
  209. public ResultDto DeleteRole(string id)
  210. {
  211. var role = _unitOfWork.RoleRepository.GetById(id);
  212. if (role == null)
  213. {
  214. return ResultDto.Fail("角色不存在!");
  215. }
  216. bool isUse = _unitOfWork.UserRepository.Any(x => x.RoleId == id);
  217. if (isUse)
  218. {
  219. return ResultDto.Fail("已有用户使用该角色,请先解除用户与角色绑定!");
  220. }
  221. _unitOfWork.RoleRepository.Delete(role);
  222. _unitOfWork.SaveChanges();
  223. return ResultDto.Success();
  224. }
  225. public TreeDto GetMenus()
  226. {
  227. TreeDto treeDto = new TreeDto();
  228. var menus = _unitOfWork.MenuRepository.GetList().OrderBy(o => o.Id);
  229. foreach (var menu in menus)
  230. {
  231. treeDto.Nodes.Add(new Node()
  232. {
  233. Id = menu.Id,
  234. Name = menu.Name
  235. });
  236. }
  237. return treeDto;
  238. }
  239. public virtual ResultDto SetPermissions(string roleId, IEnumerable<MenuDto> menuDtos)
  240. {
  241. var role = _unitOfWork.RoleRepository.GetById(roleId);
  242. if (role == null)
  243. {
  244. return ResultDto.Fail("角色不存在!");
  245. }
  246. var roleMenus = _unitOfWork.RoleMenuRepository.GetList(x => x.RoleId == roleId);
  247. _unitOfWork.RoleMenuRepository.Delete(roleMenus);
  248. foreach (var menu in menuDtos)
  249. {
  250. _unitOfWork.RoleMenuRepository.Create(new RoleMenu()
  251. {
  252. RoleId = roleId,
  253. MenuId = menu.Id
  254. });
  255. }
  256. _unitOfWork.SaveChanges();
  257. return ResultDto.Success();
  258. }
  259. public IList<MenuDto> GetPermissions(string roleId)
  260. {
  261. IList<MenuDto> menuDtos = new List<MenuDto>();
  262. var role = _unitOfWork.RoleRepository.GetById(roleId);
  263. if (role == null)
  264. {
  265. return menuDtos;
  266. }
  267. IList<Menu> menus = new List<Menu>();
  268. if (role.Name == "管理员")
  269. {
  270. menus = _unitOfWork.MenuRepository.GetList().OrderBy(o => o.Id).ToList();
  271. }
  272. else
  273. {
  274. var context = _unitOfWork.GetDbContext() as ProductionLineContext;
  275. if (context == null)
  276. {
  277. return menuDtos;
  278. }
  279. var query = from roleMenu in context.Set<RoleMenu>()
  280. join menu in context.Set<Menu>()
  281. on roleMenu.MenuId equals menu.Id
  282. where
  283. roleMenu.RoleId == roleId
  284. orderby
  285. menu.Id
  286. select new { roleMenu, menu };
  287. foreach (var item in query)
  288. {
  289. menus.Add(item.menu);
  290. }
  291. }
  292. foreach (var menu in menus)
  293. {
  294. if (menu.Level == 1)
  295. {
  296. menuDtos.Add(new MenuDto()
  297. {
  298. Id = menu.Id,
  299. Name = menu.Name,
  300. Icon = menu.Icon,
  301. Url = menu.Url,
  302. });
  303. }
  304. }
  305. foreach (var menuDto in menuDtos)
  306. {
  307. var temps = menus.Where(x => x.FatherId == menuDto.Id).OrderBy(o => o.Id);
  308. foreach (var item in temps)
  309. {
  310. menuDto.Items.Add(new MenuDto
  311. {
  312. Icon = item.Icon,
  313. Url = item.Url,
  314. Name = item.Name,
  315. Id = item.Id
  316. });
  317. }
  318. }
  319. return menuDtos;
  320. }
  321. public bool CheckIsInitialPassword(string jobNo)
  322. {
  323. var user = _unitOfWork.UserRepository.FirstOrDefault(x => x.JobNo == jobNo);
  324. if (user != null)
  325. {
  326. if (user.Password == $"{jobNo}&{123456}".To32MD5())
  327. {
  328. return true;
  329. }
  330. else
  331. {
  332. return false;
  333. }
  334. }
  335. else
  336. {
  337. return false;
  338. }
  339. }
  340. public IEnumerable<zNode> GetZNodes()
  341. {
  342. IList<zNode> zNodes = new List<zNode>();
  343. var menus = _unitOfWork.MenuRepository.GetList().OrderBy(o => o.Id);
  344. foreach (var menu in menus)
  345. {
  346. zNode zNode = new zNode
  347. {
  348. Id = menu.Id,
  349. Name = menu.Name,
  350. PId = menu.FatherId ?? "0"
  351. };
  352. int count = menus.Where(x => x.FatherId == menu.Id).Count();
  353. if (count > 0)
  354. zNode.Open = true;
  355. else
  356. zNode.Open = false;
  357. zNodes.Add(zNode);
  358. }
  359. return zNodes;
  360. }
  361. public UserLoginResultInfoDto? Login(string jobNo)
  362. {
  363. var user = _unitOfWork.UserRepository.FirstOrDefault(
  364. x => x.JobNo == jobNo);
  365. if (user == null)
  366. return null;
  367. UserLoginResultInfoDto userLoginResultInfo = new UserLoginResultInfoDto
  368. {
  369. JobNo = user.JobNo,
  370. Name = user.Name,
  371. RoleId = user.RoleId,
  372. CreateTime = user.CreateTime
  373. };
  374. var role = _unitOfWork.RoleRepository.GetById(user.RoleId);
  375. if (role != null)
  376. {
  377. userLoginResultInfo.RoleName = role.Name;
  378. userLoginResultInfo.MenuDtos = GetPermissions(role.Id);
  379. }
  380. return userLoginResultInfo;
  381. }
  382. }
  383. }