UserRoleServiceImpl.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666
  1. package com.crm.manager.service.impl;
  2. import com.crm.manager.dao.repository.SysActionRepository;
  3. import com.crm.manager.dao.repository.UserRoleRepository;
  4. import com.crm.manager.service.AuthorityService;
  5. import com.crm.manager.service.UserRoleDetailService;
  6. import com.crm.manager.service.UserRoleNodeService;
  7. import com.crm.manager.service.UserRoleService;
  8. import com.crm.rely.backend.core.constant.Constants;
  9. import com.crm.rely.backend.core.constant.ManagerConstant;
  10. import com.crm.rely.backend.core.constant.RoleConstants;
  11. import com.crm.rely.backend.core.dto.base.PageDto;
  12. import com.crm.rely.backend.core.dto.base.ResultWithPagerDto;
  13. import com.crm.rely.backend.core.dto.user.role.UserActionDisplayDto;
  14. import com.crm.rely.backend.core.dto.user.role.UserAllRoleDto;
  15. import com.crm.rely.backend.core.dto.user.role.UserNodeDisplayDto;
  16. import com.crm.rely.backend.core.dto.user.role.UserRoleDto;
  17. import com.crm.rely.backend.core.pojo.table.SysActionTable;
  18. import com.crm.rely.backend.core.pojo.table.UserRoleDetailTable;
  19. import com.crm.rely.backend.core.pojo.table.UserRoleNodeTable;
  20. import com.crm.rely.backend.core.pojo.table.UserRoleTable;
  21. import com.crm.rely.backend.core.pojo.view.SysNodeView;
  22. import com.crm.rely.backend.core.exception.ServiceException;
  23. import com.crm.rely.backend.model.constant.ManagerConstants;
  24. import com.crm.rely.backend.model.entity.user.role.*;
  25. import com.crm.rely.backend.service.RedisService;
  26. import com.crm.rely.backend.util.FormatPage;
  27. import com.crm.rely.backend.util.GetRandom;
  28. import com.crm.rely.backend.util.ValidateUtil;
  29. import com.google.common.base.Strings;
  30. import org.springframework.beans.BeanUtils;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.data.domain.Page;
  33. import org.springframework.data.domain.Pageable;
  34. import org.springframework.data.jpa.domain.Specification;
  35. import org.springframework.stereotype.Service;
  36. import org.springframework.transaction.annotation.Transactional;
  37. import jakarta.persistence.criteria.Predicate;
  38. import java.util.*;
  39. /**
  40. * @author houn
  41. */
  42. @Service
  43. public class UserRoleServiceImpl implements UserRoleService {
  44. @Autowired
  45. private UserRoleRepository userRoleRepository;
  46. // @Autowired
  47. // private SellerInfoDao sellerInfoDao;
  48. @Autowired
  49. private UserRoleNodeService userRoleNodeService;
  50. @Autowired
  51. private UserRoleDetailService userRoleDetailService;
  52. @Autowired
  53. private SysActionRepository userActionRepository;
  54. @Autowired
  55. private RedisService redisService;
  56. @Autowired
  57. private AuthorityService authorityService;
  58. /**
  59. * 获取角色权限信息
  60. *
  61. * @param roleId
  62. * @return
  63. * @throws ServiceException
  64. */
  65. @Override
  66. public List<UserNodeDisplayDto> getUserNodeDisplay(Long roleId) throws ServiceException {
  67. /*
  68. * 查询服务器中是否已存在角色信息
  69. */
  70. String key = null;
  71. String roleUpdateRedisAuthorityIdentificationKey;
  72. if (roleId == null || roleId == 0) {
  73. key = RoleConstants.ROLE_USER_NODE + ManagerConstants.ROLE_USER_PREFIX + RoleConstants.ROLE_ADMIN;
  74. roleUpdateRedisAuthorityIdentificationKey = Constants.UPDATE_REDIS_AUTHORITY_IDENTIFICATION + "_" + RoleConstants.ROLE_ADMIN;
  75. } else {
  76. key = RoleConstants.ROLE_USER_NODE + ManagerConstants.ROLE_USER_PREFIX + roleId;
  77. roleUpdateRedisAuthorityIdentificationKey = Constants.UPDATE_REDIS_AUTHORITY_IDENTIFICATION + "_" + roleId;
  78. }
  79. //获取更新标识
  80. String updateRedisAuthorityIdentification = redisService.getObject(Constants.UPDATE_REDIS_AUTHORITY_IDENTIFICATION);
  81. if (Strings.isNullOrEmpty(updateRedisAuthorityIdentification)) {
  82. updateRedisAuthorityIdentification = authorityService.updateRedisAuthorityIdentification();
  83. }
  84. //获取角色更新标识
  85. String roleUpdateRedisAuthorityIdentification = redisService.getObject(roleUpdateRedisAuthorityIdentificationKey);
  86. //判断更新标识是否存在 如果不存在或者存在且和角色更新标识相同的话 直接从redis中获取权限
  87. if (!Strings.isNullOrEmpty(roleUpdateRedisAuthorityIdentification) && updateRedisAuthorityIdentification.equals(roleUpdateRedisAuthorityIdentification)) {
  88. if (redisService.hasKey(key)) {
  89. List<UserNodeDisplayDto> userNodeDisplayDtos = redisService.getObject(key);
  90. if (userNodeDisplayDtos.size() != 0) {
  91. return userNodeDisplayDtos;
  92. }
  93. }
  94. }
  95. List<UserNodeDisplayDto> result = updateUserNode(roleId);
  96. //更新角色更新标识
  97. redisService.saveObject(roleUpdateRedisAuthorityIdentificationKey, updateRedisAuthorityIdentification);
  98. return result;
  99. }
  100. /**
  101. * 判断角色是否存在
  102. *
  103. * @param roleId
  104. * @throws ServiceException
  105. */
  106. @Override
  107. public void existRole(Long roleId) throws ServiceException {
  108. boolean existRole = userRoleRepository.existsById(roleId);
  109. if (!existRole) {
  110. throw new ServiceException(ManagerConstant.ROLE_NOT_EXIST_ERROR);
  111. }
  112. }
  113. /**
  114. * 添加角色
  115. *
  116. * @param userRoleAddEntity
  117. * @throws ServiceException
  118. */
  119. @Override
  120. @Transactional(rollbackFor = Exception.class)
  121. public void addRoleInfo(UserRoleAddEntity userRoleAddEntity) throws ServiceException {
  122. if (userRoleRepository.existsByName(userRoleAddEntity.getName())) {
  123. throw new ServiceException("该角色名已存在");
  124. }
  125. UserRoleTable userRoleTable = new UserRoleTable();
  126. BeanUtils.copyProperties(userRoleAddEntity, userRoleTable);
  127. userRoleTable.setNumber(0);
  128. userRoleTable = userRoleRepository.saveAndFlush(userRoleTable);
  129. UserRoleOperateListEntity sellerRoleOperateListEntity = new UserRoleOperateListEntity();
  130. sellerRoleOperateListEntity.setModifyUser(userRoleAddEntity.getAddUser());
  131. sellerRoleOperateListEntity.setModifyTime(userRoleAddEntity.getAddTime());
  132. sellerRoleOperateListEntity.setModifyIp(userRoleAddEntity.getAddIp());
  133. sellerRoleOperateListEntity.setDepartmentId(userRoleAddEntity.getDepartmentId());
  134. sellerRoleOperateListEntity.setRoleId(userRoleTable.getId());
  135. sellerRoleOperateListEntity.setData(userRoleAddEntity.getData());
  136. updateRoleInfo(sellerRoleOperateListEntity);
  137. }
  138. /**
  139. * 修改角色信息
  140. *
  141. * @param userRoleUpdateEntity
  142. * @throws ServiceException
  143. */
  144. @Override
  145. @Transactional(rollbackFor = Exception.class)
  146. public void updateRoleInfo(UserRoleUpdateEntity userRoleUpdateEntity) throws ServiceException {
  147. UserRoleTable userRoleTable = userRoleRepository.findById(userRoleUpdateEntity.getId()).orElse(null);
  148. if (userRoleTable == null) {
  149. throw new ServiceException(Constants.INFO_NOT_FOUND);
  150. }
  151. if (!userRoleTable.getName().equals(userRoleUpdateEntity.getName())) {
  152. if (userRoleRepository.existsByName(userRoleUpdateEntity.getName())) {
  153. throw new ServiceException("该角色名已存在");
  154. }
  155. }
  156. BeanUtils.copyProperties(userRoleUpdateEntity, userRoleTable);
  157. userRoleRepository.save(userRoleTable);
  158. UserRoleOperateListEntity userRoleOperateListEntity = new UserRoleOperateListEntity();
  159. userRoleOperateListEntity.setModifyUser(userRoleUpdateEntity.getModifyUser());
  160. userRoleOperateListEntity.setModifyTime(userRoleUpdateEntity.getModifyTime());
  161. userRoleOperateListEntity.setModifyIp(userRoleUpdateEntity.getModifyIp());
  162. userRoleOperateListEntity.setRoleId(userRoleTable.getId());
  163. userRoleOperateListEntity.setData(userRoleUpdateEntity.getData());
  164. updateRoleInfo(userRoleOperateListEntity);
  165. }
  166. /**
  167. * 修改权限
  168. *
  169. * @param userRoleOperateListEntity
  170. * @throws ServiceException
  171. */
  172. @Override
  173. @Transactional(rollbackFor = Exception.class)
  174. public void updateRoleInfo(UserRoleOperateListEntity userRoleOperateListEntity) throws ServiceException {
  175. if (userRoleOperateListEntity == null) {
  176. return;
  177. }
  178. if (!userRoleRepository.existsById(userRoleOperateListEntity.getRoleId())) {
  179. throw new ServiceException("当前角色不可修改!!!");
  180. }
  181. Long roleId = userRoleOperateListEntity.getRoleId();
  182. List<UserRoleNodeTable> roleNodeTables = null;
  183. List<UserRoleDetailTable> roleDetailTables = null;
  184. List<UserRoleOperateEntity> userRoleOperateEntities = userRoleOperateListEntity.getData();
  185. if (userRoleOperateEntities != null && userRoleOperateEntities.size() > 0) {
  186. roleNodeTables = new ArrayList<>();
  187. roleDetailTables = new ArrayList<>();
  188. for (UserRoleOperateEntity userRoleOperateEntity : userRoleOperateEntities) {
  189. //节点
  190. if (userRoleOperateEntity.getType() == 0) {
  191. UserRoleNodeTable userRoleNodeTable = new UserRoleNodeTable();
  192. userRoleNodeTable.setNodeId(userRoleOperateEntity.getId());
  193. userRoleNodeTable.setRoleId(roleId);
  194. userRoleNodeTable.setAddIp(userRoleOperateListEntity.getModifyIp());
  195. userRoleNodeTable.setAddTime(userRoleOperateListEntity.getModifyTime());
  196. userRoleNodeTable.setAddUser(userRoleOperateListEntity.getModifyUser());
  197. roleNodeTables.add(userRoleNodeTable);
  198. }
  199. //按钮
  200. else if (userRoleOperateEntity.getType() == 1) {
  201. UserRoleDetailTable userRoleDetailTable = new UserRoleDetailTable();
  202. userRoleDetailTable.setActionId(userRoleOperateEntity.getId());
  203. userRoleDetailTable.setNodeId(userRoleOperateEntity.getPid());
  204. userRoleDetailTable.setRoleId(roleId);
  205. userRoleDetailTable.setAddIp(userRoleOperateListEntity.getModifyIp());
  206. userRoleDetailTable.setAddTime(userRoleOperateListEntity.getModifyTime());
  207. userRoleDetailTable.setAddUser(userRoleOperateListEntity.getModifyUser());
  208. roleDetailTables.add(userRoleDetailTable);
  209. }
  210. }
  211. for (UserRoleDetailTable pojo : roleDetailTables) {
  212. boolean exist = false;
  213. for (UserRoleNodeTable nodePojo : roleNodeTables) {
  214. if (pojo.getNodeId().equals(nodePojo.getId())) {
  215. exist = true;
  216. break;
  217. }
  218. }
  219. if (exist) {
  220. throw new RuntimeException(Constants.SYSTEM_ERROR);
  221. }
  222. }
  223. }
  224. /*
  225. * 修改原有的角色信息
  226. */
  227. userRoleNodeService.update(roleNodeTables, roleId);
  228. userRoleDetailService.update(roleDetailTables, roleId);
  229. /*
  230. * 更新内存中的角色信息
  231. */
  232. updateUserNode(roleId);
  233. }
  234. /**
  235. * 删除角色
  236. *
  237. * @param roleId
  238. * @throws ServiceException
  239. */
  240. @Override
  241. @Transactional(rollbackFor = Exception.class)
  242. public void deleteRoleInfo(Long roleId) throws ServiceException {
  243. UserRoleTable userRoleTable = userRoleRepository.findById(roleId).orElse(null);
  244. if (userRoleTable == null) {
  245. throw new ServiceException(Constants.INFO_NOT_FOUND);
  246. }
  247. /**
  248. * 检测当前角色下存在用户
  249. */
  250. // int count = sellerInfoDao.countByRoleIdAndShopId(roleId, shopId);
  251. int count = 0;
  252. if (count >= 1) {
  253. throw new SecurityException("角色下存在用户,不能删除!");
  254. }
  255. /*
  256. * 删除数据库数据信息
  257. */
  258. userRoleNodeService.deleteRoleNodeByRoleId(roleId);
  259. userRoleDetailService.deleteRoleDetailByRoleId(roleId);
  260. userRoleRepository.delete(userRoleTable);
  261. /**
  262. * 删除redis中数据
  263. */
  264. String requestId = GetRandom.getRandom(10);
  265. try {
  266. if (redisService.tryLock(RoleConstants.ROLE_LOCK + ManagerConstants.ROLE_USER_PREFIX + roleId, requestId,
  267. RoleConstants.ROLE_LOCK_ESPIRE_TIME)) {
  268. if (redisService.hasKey(RoleConstants.ROLE_USER_NODE + ManagerConstants.ROLE_USER_PREFIX + roleId)) {
  269. redisService.remove(RoleConstants.ROLE_USER_NODE + ManagerConstants.ROLE_USER_PREFIX + roleId);
  270. }
  271. if (redisService.hasKey(RoleConstants.ROLE_USER_ACTION + ManagerConstants.ROLE_USER_PREFIX + roleId)) {
  272. redisService.remove(RoleConstants.ROLE_USER_ACTION + ManagerConstants.ROLE_USER_PREFIX + roleId);
  273. }
  274. } else {
  275. throw new ServiceException("当前角色权限正在修改,请稍后重试!!!");
  276. }
  277. } finally {
  278. redisService.unlock(RoleConstants.ROLE_LOCK + ManagerConstants.ROLE_USER_PREFIX + roleId, requestId);
  279. }
  280. }
  281. /**
  282. * 获取单个角色信息
  283. *
  284. * @param roleId
  285. * @return
  286. * @throws ServiceException
  287. */
  288. @Override
  289. public UserRoleDto getRoleInfo(Long roleId) throws ServiceException {
  290. UserRoleTable userRoleTable = userRoleRepository.getFirstById(roleId);
  291. if (userRoleTable == null) {
  292. throw new ServiceException(Constants.INFO_NOT_FOUND);
  293. }
  294. return transform(userRoleTable);
  295. }
  296. /**
  297. * 拉取角色列表
  298. *
  299. * @param userRoleSearchEntity
  300. * @return
  301. * @throws ServiceException
  302. */
  303. @Override
  304. public ResultWithPagerDto<UserRoleDto> getListInfo(UserRoleSearchEntity userRoleSearchEntity) throws ServiceException {
  305. Map<String, String> map = new LinkedHashMap<>(1);
  306. map.put("addTime", "desc");
  307. Pageable pageable = FormatPage.formatPageable(userRoleSearchEntity.getPage());
  308. Specification<UserRoleTable> specification = (root, query, cb) -> {
  309. List<Predicate> predicates = new ArrayList<>();
  310. if (ValidateUtil.vStringNull(userRoleSearchEntity.getName())) {
  311. predicates.add(cb.like(root.get("name").as(String.class), "%" + userRoleSearchEntity.getName() + "%"));
  312. }
  313. if (userRoleSearchEntity.getStartDate() != null) {
  314. predicates.add(cb.greaterThan(root.get("addTime").as(Date.class), userRoleSearchEntity.getStartDate()));
  315. }
  316. if (userRoleSearchEntity.getStartDate() != null) {
  317. predicates.add(cb.lessThanOrEqualTo(root.get("addTime").as(Date.class), userRoleSearchEntity.getEndDate()));
  318. }
  319. if (ValidateUtil.vStringNull(userRoleSearchEntity.getName())) {
  320. predicates.add(cb.like(root.get("name").as(String.class), "%" + userRoleSearchEntity.getName() + "%"));
  321. }
  322. //创建一个条件的集合,长度为上面满足条件的个数
  323. Predicate[] pre = new Predicate[predicates.size()];
  324. //这句大概意思就是将上面拼接好的条件返回去
  325. return query.where(predicates.toArray(pre)).getRestriction();
  326. };
  327. Page<UserRoleTable> pageResult = userRoleRepository.findAll(specification, pageable);
  328. PageDto pageDto = FormatPage.format(userRoleSearchEntity.getPage(), (int) pageResult.getTotalElements());
  329. if (pageResult.getTotalElements() <= 0) {
  330. return new ResultWithPagerDto(Constants.SUCCESS_CODE, Constants.SEARCH_SUCCESS, null, pageDto);
  331. }
  332. List<UserRoleDto> dtos = new ArrayList<>();
  333. for (UserRoleTable userRoleTable : pageResult.getContent()) {
  334. dtos.add(transform(userRoleTable));
  335. }
  336. return new ResultWithPagerDto(Constants.SUCCESS_CODE, Constants.SEARCH_SUCCESS, dtos, pageDto);
  337. }
  338. /**
  339. * 获取所有店铺下角色信息列表
  340. *
  341. * @return
  342. * @throws ServiceException
  343. */
  344. @Override
  345. public List<UserAllRoleDto> getListInfo() throws ServiceException {
  346. List<UserRoleTable> roleTables = userRoleRepository.findAll();
  347. List<UserAllRoleDto> allRoleDtos = new ArrayList<>();
  348. for (UserRoleTable sellerRoleTable : roleTables) {
  349. UserAllRoleDto shellerAllRoleDto = new UserAllRoleDto();
  350. BeanUtils.copyProperties(sellerRoleTable, shellerAllRoleDto);
  351. allRoleDtos.add(shellerAllRoleDto);
  352. }
  353. return allRoleDtos;
  354. }
  355. /**
  356. * 更新挂靠用户的数量
  357. *
  358. * @param entitys
  359. * @throws ServiceException
  360. */
  361. @Override
  362. @Transactional(rollbackFor = Exception.class)
  363. public void updateNumber(List<UserRoleUpdateNumberEntity> entitys) throws ServiceException {
  364. if (entitys == null || entitys.size() <= 0) {
  365. return;
  366. }
  367. List<Long> ids = new ArrayList<>(entitys.size());
  368. Map<Long, UserRoleUpdateNumberEntity> map = new HashMap<>(entitys.size());
  369. entitys.forEach(value -> {
  370. ids.add(value.getId());
  371. map.put(value.getId(), value);
  372. });
  373. List<UserRoleTable> userRoleTables = userRoleRepository.findAllByIdIn(ids);
  374. if (userRoleTables == null || userRoleTables.size() <= 0) {
  375. return;
  376. }
  377. userRoleTables.forEach(userRoleTable -> {
  378. UserRoleUpdateNumberEntity userRoleUpdateNumberEntity = map.get(userRoleTable.getId());
  379. BeanUtils.copyProperties(userRoleUpdateNumberEntity, userRoleTable);
  380. int number = userRoleTable.getNumber() + userRoleUpdateNumberEntity.getChangeNumber();
  381. if (number < 0) {
  382. number = 0;
  383. }
  384. userRoleTable.setNumber(number);
  385. });
  386. userRoleRepository.saveAll(userRoleTables);
  387. }
  388. /**
  389. * 更新挂靠用户的数量
  390. *
  391. * @param entity
  392. * @throws ServiceException
  393. */
  394. @Override
  395. @Transactional(rollbackFor = Exception.class)
  396. public void updateNumber(UserRoleUpdateNumberEntity entity) throws ServiceException {
  397. UserRoleTable userRoleTable = userRoleRepository.findFirstById(entity.getId());
  398. if (userRoleTable == null) {
  399. throw new ServiceException(ManagerConstant.ROLE_NOT_EXIST_ERROR);
  400. }
  401. BeanUtils.copyProperties(entity, userRoleTable);
  402. userRoleRepository.save(userRoleTable);
  403. }
  404. private UserRoleDto transform(UserRoleTable sellerRoleTable) {
  405. UserRoleDto shellerRoleDto = new UserRoleDto();
  406. BeanUtils.copyProperties(sellerRoleTable, shellerRoleDto);
  407. return shellerRoleDto;
  408. }
  409. /**
  410. * 修改权限
  411. *
  412. * @param roleId
  413. * @return
  414. * @throws ServiceException
  415. */
  416. private List<UserNodeDisplayDto> updateUserNode(Long roleId) throws ServiceException {
  417. /*
  418. * 获取节点信息
  419. */
  420. List<SysNodeView> sysNodeViews = userRoleNodeService.getSysNodesByRoleId(roleId);
  421. /*
  422. * 获取按钮信息
  423. */
  424. List<SysActionTable> sysActionTables = userActionRepository.getAllByOrderByCode();
  425. // if (sysActionTables == null || sysActionTables.size() == 0) {
  426. // throw new RuntimeException("权限信息有误,请联系管理员");
  427. // }
  428. /*
  429. * 获取详细信息
  430. */
  431. List<UserRoleDetailTable> roleDetailTables = new ArrayList<UserRoleDetailTable>();
  432. if (sysActionTables != null || sysActionTables.size() >= 0) {
  433. if (roleId != null && roleId != 0 && roleId != -1) {
  434. roleDetailTables = userRoleDetailService.getUserRoleDetailsByRoleId(roleId);
  435. } else {
  436. if (roleId != -1) {
  437. for (SysActionTable sysActionTable : sysActionTables) {
  438. UserRoleDetailTable userRoleDetailTable = new UserRoleDetailTable();
  439. userRoleDetailTable.setActionId(sysActionTable.getId());
  440. userRoleDetailTable.setRoleId(null);
  441. userRoleDetailTable.setNodeId(sysActionTable.getNodeId());
  442. roleDetailTables.add(userRoleDetailTable);
  443. }
  444. }
  445. }
  446. }
  447. /*
  448. * 整合节点权限信息
  449. */
  450. List<UserNodeDisplayDto> userNodeDisplayEntities = new ArrayList<UserNodeDisplayDto>();
  451. if (sysNodeViews != null && sysNodeViews.size() > 0) {
  452. for (SysNodeView sysNodeTable : sysNodeViews) {
  453. if (sysNodeTable.getPid() == null || sysNodeTable.getPid() == 0) {
  454. UserNodeDisplayDto userNodeDisplayEntity = getUserNodeDisplayDto(sysNodeTable);
  455. recursion(sysNodeViews, sysActionTables, roleDetailTables, userNodeDisplayEntity);
  456. userNodeDisplayEntities.add(userNodeDisplayEntity);
  457. }
  458. }
  459. }
  460. /*
  461. * 将结果存入redis中 redis记录简单加锁方式
  462. */
  463. String key;
  464. if (roleId == null || roleId == 0) {
  465. key = RoleConstants.ROLE_ADMIN;
  466. } else {
  467. key = roleId + "";
  468. }
  469. String requestId = System.currentTimeMillis() + "";
  470. try {
  471. if (redisService.tryLock(RoleConstants.ROLE_LOCK + ManagerConstants.ROLE_USER_PREFIX + key, requestId, RoleConstants.ROLE_LOCK_ESPIRE_TIME)) {
  472. /*
  473. * 处理前端显示节点信息
  474. */
  475. List<UserNodeDisplayDto> nodeList = new ArrayList<UserNodeDisplayDto>();
  476. nodeList.addAll(userNodeDisplayEntities);
  477. redisService.saveObject(RoleConstants.ROLE_USER_NODE + ManagerConstants.ROLE_USER_PREFIX + key, userNodeDisplayEntities);
  478. /*
  479. * 处理后端角色判定信息
  480. */
  481. List<String> actionList = new ArrayList<>();
  482. for (UserRoleDetailTable userRoleDetailPojo : roleDetailTables) {
  483. for (SysActionTable sysActionPojo : sysActionTables) {
  484. if (userRoleDetailPojo.getActionId().equals(sysActionPojo.getId())) {
  485. actionList.add(sysActionPojo.getAction());
  486. }
  487. }
  488. }
  489. redisService.saveObject(RoleConstants.ROLE_USER_ACTION + ManagerConstants.ROLE_USER_PREFIX + key, actionList);
  490. } else {
  491. throw new ServiceException("当前角色权限正在修改,请稍后重试!!!");
  492. }
  493. } finally {
  494. redisService.unlock(RoleConstants.ROLE_LOCK + ManagerConstants.ROLE_USER_PREFIX + key, requestId);
  495. }
  496. return userNodeDisplayEntities;
  497. }
  498. /**
  499. * 递归节点信息,获取前台展示的节点数据
  500. *
  501. * @param sysNodeViews
  502. * @param sysActionTables
  503. * @param userRoleDetailTables
  504. * @param userNodeDisplayDto
  505. */
  506. private void recursion(List<SysNodeView> sysNodeViews, List<SysActionTable> sysActionTables,
  507. List<UserRoleDetailTable> userRoleDetailTables, UserNodeDisplayDto userNodeDisplayDto) {
  508. for (SysNodeView sysNodePojo : sysNodeViews) {
  509. if (userNodeDisplayDto.getId().equals(sysNodePojo.getPid())) {
  510. UserNodeDisplayDto child = getUserNodeDisplayDto(sysNodePojo);
  511. Map<String, UserActionDisplayDto> userActionDisplayDtos = getUserActionDisplayDtos(sysActionTables, userRoleDetailTables, child.getId());
  512. child.setBtns(userActionDisplayDtos);
  513. userNodeDisplayDto.getChildren().add(child);
  514. recursion(sysNodeViews, sysActionTables, userRoleDetailTables, child);
  515. } else {
  516. Map<String, UserActionDisplayDto> userActionDisplayDtos = getUserActionDisplayDtos(sysActionTables, userRoleDetailTables, userNodeDisplayDto.getId());
  517. userNodeDisplayDto.setBtns(userActionDisplayDtos);
  518. }
  519. }
  520. }
  521. private Map<String, UserActionDisplayDto> getUserActionDisplayDtos(List<SysActionTable> sysActionTables, List<UserRoleDetailTable> userRoleDetailTables, Long nodeId) {
  522. if (sysActionTables == null && sysActionTables.size() <= 0) {
  523. return new HashMap<>(0);
  524. }
  525. Map<String, UserActionDisplayDto> userActionDisplayDtos = new HashMap<>(sysActionTables.size());
  526. List<SysActionTable> removeSysActionTables = new ArrayList<>(sysActionTables.size());
  527. int size = sysActionTables.size();
  528. for (int i = 0; i < size; i++) {
  529. SysActionTable sysActionPojo = sysActionTables.get(i);
  530. if (sysActionPojo.getNodeId().equals(nodeId)) {
  531. UserActionDisplayDto userActionDisplayDto = getUserActionDisplayDto(sysActionPojo, userRoleDetailTables, nodeId);
  532. userActionDisplayDtos.put(userActionDisplayDto.getCode(), userActionDisplayDto);
  533. removeSysActionTables.add(sysActionPojo);
  534. }
  535. }
  536. if (removeSysActionTables.size() > 0) {
  537. userRoleDetailTables.removeAll(removeSysActionTables);
  538. }
  539. return userActionDisplayDtos;
  540. }
  541. private UserActionDisplayDto getUserActionDisplayDto(SysActionTable sysActionTable, List<UserRoleDetailTable> userRoleDetailTables, Long nodeId) {
  542. if (sysActionTable.getNodeId() != null && sysActionTable.getNodeId().equals(nodeId)) {
  543. UserActionDisplayDto userActionDisplayDto = new UserActionDisplayDto();
  544. userActionDisplayDto.setName(sysActionTable.getName());
  545. userActionDisplayDto.setCode(sysActionTable.getCode());
  546. userActionDisplayDto.setId(sysActionTable.getId());
  547. userActionDisplayDto.setPid(sysActionTable.getNodeId());
  548. userActionDisplayDto.setShow(false);
  549. userActionDisplayDto.setTId(userActionDisplayDto.getId() + "-" + userActionDisplayDto.getType());
  550. if (userRoleDetailTables != null && userRoleDetailTables.size() != 0) {
  551. Iterator<UserRoleDetailTable> userRoleDetailPojoIterator = userRoleDetailTables.iterator();
  552. while (userRoleDetailPojoIterator.hasNext()) {
  553. UserRoleDetailTable userRoleDetailPojo = userRoleDetailPojoIterator.next();
  554. if (userRoleDetailPojo.getNodeId().equals(nodeId)
  555. && userRoleDetailPojo.getActionId().equals(sysActionTable.getId())) {
  556. userActionDisplayDto.setShow(true);
  557. }
  558. }
  559. }
  560. return userActionDisplayDto;
  561. }
  562. return null;
  563. }
  564. private UserNodeDisplayDto getUserNodeDisplayDto(SysNodeView sysNodeTable) {
  565. UserNodeDisplayDto userNodeDisplayEntity = new UserNodeDisplayDto();
  566. userNodeDisplayEntity.setName(sysNodeTable.getName());
  567. userNodeDisplayEntity.setCode(sysNodeTable.getCode());
  568. userNodeDisplayEntity.setIcon(sysNodeTable.getIcon());
  569. userNodeDisplayEntity.setLink(sysNodeTable.getLink());
  570. userNodeDisplayEntity.setId(sysNodeTable.getId());
  571. userNodeDisplayEntity.setShow(sysNodeTable.getShow());
  572. userNodeDisplayEntity.setPid(sysNodeTable.getPid());
  573. userNodeDisplayEntity.setSubIndex(sysNodeTable.getSubIndex());
  574. userNodeDisplayEntity.setTId(sysNodeTable.getId() + "-" + userNodeDisplayEntity.getType());
  575. return userNodeDisplayEntity;
  576. }
  577. @Override
  578. public String getRoleCodeById(Long id) throws ServiceException {
  579. UserRoleTable userRoleTable = userRoleRepository.getOne(id);
  580. if (userRoleTable == null) {
  581. throw new ServiceException("info_not_found");
  582. }
  583. return userRoleTable.getCode();
  584. }
  585. }