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.

276 lines
8.4 KiB

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