MenuService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. package com.huaxu.service;
  2. import com.baomidou.mybatisplus.core.metadata.IPage;
  3. import com.huaxu.dao.MenuMapper;
  4. import com.huaxu.dao.TenantMenuMapper;
  5. import com.huaxu.entity.MenuEntity;
  6. import com.huaxu.entity.TenantMenuEntity;
  7. import com.huaxu.model.LoginUser;
  8. import com.huaxu.util.UserUtil;
  9. import org.springframework.beans.BeanUtils;
  10. import org.springframework.stereotype.Service;
  11. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  12. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  13. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  14. import javax.annotation.Resource;
  15. import org.springframework.transaction.annotation.Transactional;
  16. import java.util.*;
  17. import java.util.stream.Collectors;
  18. import static com.google.common.collect.Lists.newArrayList;
  19. /**
  20. *
  21. * 菜单Service接口
  22. * @author: WYY
  23. * @date 2020-10-26 16:15
  24. */
  25. @Service
  26. public class MenuService extends ServiceImpl<MenuMapper,MenuEntity> {
  27. @Resource
  28. private MenuMapper menuMapper;
  29. @Resource
  30. private TenantMenuMapper tenantMenuMapper;
  31. /**
  32. * 自定义分页查询,含关联实体对像
  33. */
  34. public IPage<MenuEntity> findPage(IPage<MenuEntity> page, MenuEntity menuEntity) {
  35. Page<MenuEntity> ipage = menuMapper.findPage(page, menuEntity);
  36. return ipage;
  37. }
  38. /**
  39. * 查询权限标志
  40. */
  41. public List<String> getAuthCode() {
  42. List<String> list = new ArrayList<>();
  43. List<MenuEntity> menuEntities = findAllList(new MenuEntity());
  44. for (MenuEntity menuEntity : menuEntities) {
  45. if (menuEntity.getPermissionFlag() != null && menuEntity.getPermissionFlag() != ""&& menuEntity.getPermissionFlag().length()>0)
  46. list.add(menuEntity.getPermissionFlag());
  47. }
  48. return list;
  49. }
  50. /**
  51. * 查列表
  52. */
  53. public List<MenuEntity> findAllList(MenuEntity menuEntity) {
  54. LoginUser currentUser = UserUtil.getCurrentUser();
  55. Integer userId = currentUser.getId();
  56. //-999租户管理员 -9999超级管理员 2普通用户
  57. String userType = currentUser.getType();
  58. String tenantId = currentUser.getTenantId();
  59. String name = menuEntity.getName();
  60. menuEntity.setTenantId(tenantId);
  61. List<MenuEntity> menuEntities = new ArrayList<>();
  62. switch (userType) {
  63. case "-9999"://超级管理员查询所有系统菜单
  64. menuEntities = menuMapper.findList(menuEntity);
  65. break;
  66. case "-999"://租户管理员查询租户菜单
  67. menuEntities = menuMapper.findTenantList(menuEntity);
  68. break;
  69. default://普通用户按角色查询租户菜单
  70. menuEntities = menuMapper.findUserList(name,tenantId,userId);
  71. break;
  72. }
  73. return menuEntities;
  74. }
  75. /**
  76. * 查列表
  77. */
  78. public List<MenuEntity> findList(MenuEntity menuEntity) {
  79. LoginUser currentUser = UserUtil.getCurrentUser();
  80. Integer userId = currentUser.getId();
  81. //-999租户管理员 -9999超级管理员 2普通用户
  82. String userType = currentUser.getType();
  83. String tenantId = currentUser.getTenantId();
  84. String name = menuEntity.getName();
  85. menuEntity.setTenantId(tenantId);
  86. List<MenuEntity> menuEntities = new ArrayList<>();
  87. switch (userType) {
  88. case "-9999"://超级管理员查询所有系统菜单
  89. menuEntities = menuMapper.findList(menuEntity);
  90. break;
  91. case "-999"://租户管理员查询租户菜单
  92. menuEntities = menuMapper.findTenantList(menuEntity);
  93. break;
  94. default://普通用户按角色查询租户菜单
  95. menuEntities = menuMapper.findUserList(name,tenantId,userId);
  96. break;
  97. }
  98. List<MenuEntity> menuTree = getMenuTree(menuEntities, Long.valueOf(0), 1);
  99. return menuTree;
  100. }
  101. public static List<MenuEntity> getMenuTree(List<MenuEntity> list, Long id, Integer leve) {
  102. List<MenuEntity> temList = newArrayList();
  103. if (list != null) {
  104. for (MenuEntity menuEntity : list) {
  105. if (id.equals(menuEntity.getParentMenuId())) {
  106. List<MenuEntity> chidren = getMenuTree(list, menuEntity.getId(), ++leve);
  107. MenuEntity temMeanu = new MenuEntity();
  108. BeanUtils.copyProperties(menuEntity, temMeanu);
  109. temMeanu.setChildren(chidren);
  110. temList.add(temMeanu);
  111. leve--;
  112. }
  113. }
  114. }
  115. if (temList.size() > 0) {
  116. return temList;
  117. } else {
  118. return null;
  119. }
  120. }
  121. /**
  122. * 按父级节点查列表
  123. */
  124. public List<MenuEntity> findMenuByParentIds(List<Long> ids) {
  125. LoginUser currentUser = UserUtil.getCurrentUser();
  126. Integer userId = currentUser.getId();
  127. //-999租户管理员 -9999超级管理员 2普通用户
  128. String userType = currentUser.getType();
  129. List<MenuEntity> menuEntities = new ArrayList<>();
  130. switch (userType) {
  131. case "-9999"://超级管理员查询所有系统菜单
  132. menuEntities = menuMapper.findMenuByParentIds(ids);
  133. break;
  134. case "-999"://租户管理员查询租户菜单
  135. menuEntities = menuMapper.findTenantMenuByParentIds(currentUser.getTenantId(), ids);
  136. break;
  137. default://普通用户按角色查询租户菜单
  138. menuEntities = menuMapper.findTenantMenuByParentIds(currentUser.getTenantId(), ids);
  139. break;
  140. }
  141. return menuEntities;
  142. }
  143. /**
  144. * 批量删除
  145. */
  146. @Transactional(rollbackFor = Exception.class)
  147. public boolean delMenuByIds(Long[] ids) {
  148. LoginUser currentUser = UserUtil.getCurrentUser();
  149. Integer userId = currentUser.getId();
  150. //-999租户管理员 -9999超级管理员 2普通用户
  151. String userType = currentUser.getType();
  152. boolean isOk = false;
  153. for(Long id : ids) {
  154. switch (userType) {
  155. case "-9999"://超级管理员直接删除系统菜单
  156. isOk = this.removeById(id);
  157. break;
  158. case "-999"://租户管理员查询租户菜单
  159. isOk = menuMapper.updateState(id);
  160. break;
  161. default://普通用户按角色查询租户菜单
  162. isOk = menuMapper.updateState(id);
  163. break;
  164. }
  165. }
  166. return isOk;
  167. }
  168. /**
  169. * 单个删除
  170. */
  171. public boolean delMenuById(Long id) {
  172. LoginUser currentUser = UserUtil.getCurrentUser();
  173. Integer userId = currentUser.getId();
  174. //-999租户管理员 -9999超级管理员 2普通用户
  175. String userType = currentUser.getType();
  176. boolean isOk = false;
  177. switch (userType) {
  178. case "-9999"://超级管理员直接删除系统菜单
  179. isOk = this.removeById(id);
  180. break;
  181. case "-999"://租户管理员查询租户菜单
  182. isOk = menuMapper.updateState(id);
  183. break;
  184. default://普通用户按角色查询租户菜单
  185. isOk = menuMapper.updateState(id);
  186. break;
  187. }
  188. return isOk;
  189. }
  190. /**
  191. * 保存
  192. */
  193. public boolean addMenu(MenuEntity menu) {
  194. if (this.save(menu)) {
  195. return true;
  196. }
  197. return false;
  198. }
  199. /**
  200. * 修改根居ID
  201. */
  202. public boolean updateMenuById(MenuEntity menu) {
  203. LoginUser currentUser = UserUtil.getCurrentUser();
  204. Integer userId = currentUser.getId();
  205. //-999租户管理员 -9999超级管理员 2普通用户
  206. String userType = currentUser.getType();
  207. TenantMenuEntity tenantMenuEntity = new TenantMenuEntity();
  208. if(!userType.equals("-9999")) {
  209. MenuEntity menuEntity = menuMapper.findTenantByMenuId(currentUser.getTenantId(), menu.getId());
  210. tenantMenuEntity.setId(menuEntity.getId());
  211. tenantMenuEntity.setDateUpdate(new Date());
  212. tenantMenuEntity.setUpdateBy(currentUser.getUsername());
  213. tenantMenuEntity.setLinkPath(menu.getLinkPath());
  214. tenantMenuEntity.setMenuImage(menu.getMenuImage());
  215. tenantMenuEntity.setEnglishName(menu.getEnglishName());
  216. tenantMenuEntity.setMenuDynamicImage(menu.getMenuDynamicImage());
  217. tenantMenuEntity.setMenuName(menu.getName());
  218. tenantMenuEntity.setMenuSeq(menu.getSeq());
  219. tenantMenuEntity.setRemark(menu.getRemark());
  220. }
  221. boolean isOk = false;
  222. switch (userType) {
  223. case "-9999"://超级管理员查询所有系统菜单
  224. isOk = this.updateById(menu);
  225. break;
  226. case "-999"://租户管理员查询租户菜单
  227. isOk = tenantMenuMapper.updateById(tenantMenuEntity) > 0 ? true : false;
  228. break;
  229. default://普通用户按角色查询租户菜单
  230. isOk = tenantMenuMapper.updateById(tenantMenuEntity) > 0 ? true : false;
  231. break;
  232. }
  233. return isOk;
  234. }
  235. /**
  236. * 根居ID获取对象
  237. */
  238. public MenuEntity findMenuById(Long id) {
  239. LoginUser currentUser = UserUtil.getCurrentUser();
  240. Integer userId = currentUser.getId();
  241. //-999租户管理员 -9999超级管理员 2普通用户
  242. String userType = currentUser.getType();
  243. MenuEntity menuEntity = new MenuEntity();
  244. switch (userType) {
  245. case "-9999"://超级管理员查询所有系统菜单
  246. menuEntity = menuMapper.findMenuById(id);;
  247. break;
  248. case "-999"://租户管理员查询租户菜单
  249. menuEntity = menuMapper.findUserMenuById(currentUser.getTenantId(),id);
  250. break;
  251. default://普通用户按角色查询租户菜单
  252. menuEntity = menuMapper.findUserMenuById(currentUser.getTenantId(),id);
  253. break;
  254. }
  255. return menuEntity;
  256. }
  257. public List<MenuEntity> findUserFirstMenu() {
  258. LoginUser currentUser = UserUtil.getCurrentUser();
  259. Integer userId = currentUser.getId();
  260. //-999租户管理员 -9999超级管理员 2普通用户
  261. String userType = currentUser.getType();
  262. List<MenuEntity> menuEntities = new ArrayList<>();
  263. switch (userType) {
  264. case "-9999"://超级管理员查询所有系统菜单
  265. menuEntities = menuMapper.findAllFirstMenu();
  266. break;
  267. case "-999"://租户管理员查询租户菜单
  268. menuEntities = menuMapper.findTenantFirstMenu(currentUser.getTenantId());
  269. break;
  270. default: //其他租户用户暂时不区分类型
  271. menuEntities = menuMapper.findUserFirstMenu(currentUser.getTenantId(), userId);
  272. break;
  273. }
  274. List<MenuEntity> menuAllEntities = menuMapper.findAllFirstMenu();
  275. Map<Long, MenuEntity> map = menuAllEntities.stream().collect(Collectors.toMap(MenuEntity::getId, item -> item));
  276. if(!userType.equals("-9999")) {
  277. for (MenuEntity item : menuEntities) {
  278. item.setIsOwner(1);
  279. map.remove(item.getId());
  280. }
  281. for (MenuEntity item : map.values()) {
  282. item.setIsOwner(0);
  283. menuEntities.add(item);
  284. }
  285. }
  286. return menuEntities;
  287. }
  288. public List<MenuEntity> findUserMenu(String appId) {
  289. LoginUser currentUser = UserUtil.getCurrentUser();
  290. Integer userId = currentUser.getId();
  291. //-999租户管理员 -9999超级管理员 2普通用户
  292. String userType = currentUser.getType();
  293. List<MenuEntity> menuEntities= new ArrayList<>();
  294. switch (userType) {
  295. case "-9999"://超级管理员查询所有系统菜单
  296. menuEntities = menuMapper.findSystemUserMenu(appId);
  297. break;
  298. case "-999"://租户管理员查询租户菜单
  299. menuEntities = menuMapper.findTenantUserMenu(currentUser.getTenantId(),appId);
  300. break;
  301. default://普通用户按角色查询租户菜单
  302. menuEntities = menuMapper.findUserMenu(currentUser.getTenantId(),userId, appId);
  303. break;
  304. }
  305. List<MenuEntity> menuTree = getMenuTree(menuEntities, Long.valueOf(0), 1);
  306. return menuTree;
  307. }
  308. public List<MenuEntity> findTenantMenu() {
  309. List<MenuEntity> menuTree = getMenuTree(menuMapper.findSystemTenantMenu(), Long.valueOf(0), 1);
  310. return menuTree;
  311. }
  312. }