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.

266 lines
8.3 KiB

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