You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

274 lines
8.5 KiB

4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks ago
  1. package com.example.demo.serviceImpl;
  2. import com.example.demo.domain.entity.Role;
  3. import com.example.demo.domain.vo.ConsumeUser;
  4. import com.example.demo.domain.vo.MenuVo;
  5. import com.example.demo.domain.vo.Result;
  6. import com.example.demo.domain.vo.RoleVo;
  7. import com.example.demo.mapper.MenuMapper;
  8. import com.example.demo.mapper.RefundMapper;
  9. import com.example.demo.mapper.RoleMapper;
  10. import com.example.demo.service.AdminService;
  11. import com.example.demo.service.GeneralService;
  12. import com.example.demo.service.MenuService;
  13. import com.example.demo.service.RoleService;
  14. import com.github.pagehelper.PageHelper;
  15. import com.github.pagehelper.PageInfo;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.transaction.annotation.Transactional;
  19. import java.util.ArrayList;
  20. import java.util.HashSet;
  21. import java.util.List;
  22. import java.util.Set;
  23. /**
  24. * @program: gold-java
  25. * @ClassName RoleServiceImpl
  26. * @description:
  27. * @author: Double
  28. * @create: 202507-15 11:30
  29. * @Version 1.0
  30. **/
  31. @Service
  32. public class RoleServiceImpl implements RoleService {
  33. @Autowired
  34. private RoleMapper roleMapper;
  35. @Autowired
  36. private MenuService menuService;
  37. @Autowired
  38. private AdminService adminService;
  39. @Autowired
  40. private GeneralService generalService;
  41. @Autowired
  42. private MenuMapper menuMapper;
  43. //新增角色
  44. @Override
  45. @Transactional
  46. public Result addRole(RoleVo roleVo) {
  47. roleVo.setRoleName(roleVo.getRoleName().trim());
  48. // 对角色名进行去空格处理后判断是否为空
  49. if (roleVo.getRoleName() == null || roleVo.getRoleName().isEmpty()) {
  50. return Result.error("角色名为空");
  51. }
  52. // 新增校验:角色名长度需在 2 - 20 之间
  53. if (roleVo.getRoleName().length() < 2 || roleVo.getRoleName().length() > 20) {
  54. return Result.error("角色名长度需在2-20个字符之间");
  55. }
  56. if (roleMapper.selectByRoleName(roleVo.getRoleName()) != null) {
  57. return Result.error("角色名重复");
  58. }
  59. if (roleVo.getPriority() == null) {
  60. return Result.error("优先级为空");
  61. }
  62. if (roleVo.getPriority() <= 0 || roleVo.getPriority() > 999) {
  63. return Result.error("优先级不在1-999");
  64. }
  65. if (roleVo.getMenuIds() == null || roleVo.getMenuIds().isEmpty()) {
  66. return Result.error("权限为空");
  67. }
  68. if (roleVo.getMarket() == null || roleVo.getMarket().isEmpty()) {
  69. return Result.error("所属市场为空");
  70. }
  71. if (roleVo.getFatherId() != null) {
  72. if (roleVo.getFatherId() != 2) {
  73. for (Integer menuId : roleVo.getMenuIds()) {
  74. if (menuId == 9) {
  75. return Result.error("上级角色非管理员用户不能赋予权限管理");
  76. }
  77. }
  78. }
  79. }
  80. try {
  81. roleMapper.addRole(roleVo);
  82. Role role = roleMapper.selectByRoleName(roleVo.getRoleName());
  83. if (role == null) {
  84. return Result.error("角色添加失败");
  85. } else {
  86. roleVo.setId(role.getId());
  87. }
  88. menuService.addPermission(roleVo);
  89. } catch (Exception e) {
  90. return Result.error("添加失败");
  91. }
  92. return Result.success("创建成功");
  93. }
  94. //新增角色
  95. @Override
  96. @Transactional
  97. public Result addRole2(RoleVo roleVo) {
  98. //校验角色
  99. // 对角色名进行去空格处理后判断是否为空
  100. if (roleVo.getRoleName() == null || roleVo.getRoleName().trim().isEmpty()) {
  101. return Result.error("角色名为空");
  102. }
  103. // 新增校验:角色名长度需在 2 - 20 之间
  104. if (roleVo.getRoleName().length() < 2 || roleVo.getRoleName().length() > 20) {
  105. return Result.error("角色名长度需在2-20个字符之间");
  106. }
  107. if (roleMapper.selectByRoleName(roleVo.getRoleName()) != null) {
  108. return Result.error("角色名重复");
  109. }
  110. if (roleVo.getPriority() == null) {
  111. return Result.error("优先级为空");
  112. }
  113. if (roleVo.getPriority() <= 0 || roleVo.getPriority() > 999) {
  114. return Result.error("优先级不在1-999");
  115. }
  116. if (roleVo.getMenuIds() == null || roleVo.getMenuIds().isEmpty()) {
  117. return Result.error("权限为空");
  118. } else {
  119. List<Integer> menuIds = new ArrayList<>(roleVo.getMenuIds()); // 创建副本避免修改原始列表
  120. Set<Integer> processedIds = new HashSet<>(menuIds); // 使用Set快速检查存在性
  121. // 处理每个菜单ID及其所有父菜单
  122. for (int i = 0; i < menuIds.size(); i++) {
  123. Integer currentId = menuIds.get(i);
  124. // ID为1不处理
  125. if (currentId == 1) continue;
  126. // 获取父菜单ID
  127. Integer fatherId = menuMapper.selectFatherId(currentId);
  128. // 递归添加所有父菜单
  129. while (fatherId != null) {
  130. if (!processedIds.contains(fatherId)) {
  131. menuIds.add(fatherId);
  132. processedIds.add(fatherId);
  133. }
  134. // 继续向上查找父菜单的父菜单
  135. fatherId = menuMapper.selectFatherId(fatherId);
  136. }
  137. }
  138. roleVo.setMenuIds(menuIds);
  139. }
  140. if (roleVo.getMarket() == null || roleVo.getMarket().isEmpty()) {
  141. return Result.error("所属市场为空");
  142. }
  143. if (roleVo.getFatherId() != null) {
  144. if (roleVo.getFatherId() != 2) {
  145. for (Integer menuId : roleVo.getMenuIds()) {
  146. if (menuId == 9) {
  147. return Result.error("上级角色非管理员用户不能赋予权限管理");
  148. }
  149. }
  150. }
  151. }
  152. try {
  153. roleMapper.addRole(roleVo);
  154. Role role = roleMapper.selectByRoleName(roleVo.getRoleName());
  155. if (role == null) {
  156. return Result.error("角色添加失败");
  157. } else {
  158. roleVo.setId(role.getId());
  159. }
  160. menuService.addPermission(roleVo);
  161. System.out.println(roleVo.getMenuIds());
  162. } catch (Exception e) {
  163. return Result.error("添加失败");
  164. }
  165. return Result.success("创建成功");
  166. }
  167. //删除角色
  168. @Override
  169. @Transactional
  170. public Result deleteRole(RoleVo roleVo) {
  171. if (roleVo.getId() == null) {
  172. return Result.error("角色id为空");
  173. }
  174. if (roleVo.getId() == 2) {
  175. return Result.error("管理员不允许删除");
  176. }
  177. if (roleVo.getId() == 1) {
  178. return Result.error("无用户不允许删除");
  179. }
  180. try {
  181. roleMapper.deleteRoleMenu(roleVo);
  182. roleMapper.deleteRole(roleVo);
  183. } catch (Exception e) {
  184. e.printStackTrace();
  185. return Result.error("删除失败");
  186. }
  187. return Result.success("删除成功");
  188. }
  189. @Override
  190. public RoleVo selectFather(Integer id) {
  191. return roleMapper.selectFather(id);
  192. }
  193. //查找全部角色
  194. @Override
  195. public List<RoleVo> selectAllRole() {
  196. String account = adminService.getCurrentAdminAccount();
  197. List<String> markets = generalService.getAdminMarket(account);
  198. return roleMapper.selectAllRole(markets);
  199. }
  200. @Override
  201. public List<RoleVo> selectSubRole(Integer id) {
  202. return roleMapper.selectByFatherId(id);
  203. }
  204. //分页查找角色
  205. @Override
  206. public PageInfo<RoleVo> selectBy(Integer pageNum, Integer pageSize, RoleVo roleVo) {
  207. String account = adminService.getCurrentAdminAccount();
  208. List<String> markets = generalService.getAdminMarket(account);
  209. roleVo.setMarkets(markets);
  210. PageHelper.startPage(pageNum, pageSize);
  211. List<RoleVo> roleVos = roleMapper.selectBy(roleVo);
  212. // 遍历 roleVos 列表
  213. for (RoleVo role : roleVos) {
  214. // 获取每个角色的权限树
  215. List<MenuVo> permissionTree = menuService.getPermissionTree(role.getId());
  216. // 将权限树设置到角色对象中
  217. role.setTree(permissionTree);
  218. }
  219. return new PageInfo<>(roleVos);
  220. }
  221. }