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.

290 lines
9.8 KiB

3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
3 years ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
1 year ago
3 years ago
  1. package com.spring.modules.sys.controller;
  2. import com.spring.common.annotation.SysLog;
  3. import com.spring.common.constant.SysMsgConstant;
  4. import com.spring.common.exception.XJException;
  5. import com.spring.common.utils.Constant;
  6. import com.spring.common.utils.R;
  7. import com.spring.modules.sys.entity.SysMenuEntity;
  8. import com.spring.modules.sys.entity.SysObjectLanguageMenu;
  9. import com.spring.modules.sys.entity.dto.SysMenuEntityDto;
  10. import com.spring.modules.sys.service.ShiroService;
  11. import com.spring.modules.sys.service.SysMenuService;
  12. import com.spring.modules.sys.service.SysObjectLanguageMenuService;
  13. import com.spring.modules.sys.service.SysRoleMenuService;
  14. import org.apache.commons.lang.StringUtils;
  15. import org.apache.shiro.authz.annotation.RequiresPermissions;
  16. import org.springframework.beans.BeanUtils;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.web.bind.annotation.*;
  19. import java.util.HashMap;
  20. import java.util.List;
  21. import java.util.Map;
  22. import java.util.Set;
  23. /**
  24. * 系统菜单
  25. */
  26. @RestController
  27. @RequestMapping("/sys/menu")
  28. public class SysMenuController extends AbstractController {
  29. @Autowired
  30. private SysMenuService sysMenuService;
  31. @Autowired
  32. private SysRoleMenuService sysRoleMenuService;
  33. @Autowired
  34. private ShiroService shiroService;
  35. @Autowired
  36. private SysObjectLanguageMenuService sysObjectLanguageMenuService;
  37. /**
  38. * 导航菜单
  39. */
  40. @GetMapping("/nav")
  41. public R nav(@RequestParam("l") String l, @RequestParam("menuType") String menuType) {
  42. List<SysMenuEntity> menuList = sysMenuService.getUserMenuList(getUserId(), l, menuType);
  43. Set<String> permissions = shiroService.getUserPermissions(getUserId());
  44. List<String> accessField=shiroService.getAccessFieldByUserId(getUserId());
  45. return R.ok().put("menuList", menuList).put("permissions", permissions).put("accessField", accessField);
  46. }
  47. /**
  48. * 所有菜单列表
  49. */
  50. @GetMapping("/list")
  51. @RequiresPermissions("sys:menu:list")
  52. public List<SysMenuEntity> list() {
  53. //sysMenuService.lambdaQuery().orderBy(true,true,SysMenuEntity::getOrderNum).list();
  54. List<SysMenuEntity> menuList = null;
  55. //判断是否是admin
  56. if (getUserId() == Constant.SUPER_ADMIN) {
  57. menuList = sysMenuService.list();
  58. }else {
  59. //查询当前用户的权限
  60. menuList = sysMenuService.getUserMenuListByUserId(getUserId());
  61. }
  62. //先转map
  63. Map<String,String> nameMap = new HashMap<>();
  64. for (SysMenuEntity sysMenuEntity : menuList){
  65. nameMap.put(sysMenuEntity.getMenuId(), sysMenuEntity.getName());
  66. }
  67. /* for (SysMenuEntity sysMenuEntity : menuList) {
  68. SysMenuEntity parentMenuEntity = sysMenuService.getById(sysMenuEntity.getParentId());
  69. if (parentMenuEntity != null) {
  70. sysMenuEntity.setParentName(parentMenuEntity.getName());
  71. }
  72. }*/
  73. for(SysMenuEntity sysMenuEntity : menuList){
  74. String parentId = sysMenuEntity.getParentId();
  75. //判断是否需要第二次查询数据
  76. if (nameMap.containsKey(parentId)){
  77. sysMenuEntity.setParentName(nameMap.get(parentId));
  78. }
  79. }
  80. return menuList;
  81. }
  82. /**
  83. * 所有菜单列表
  84. */
  85. @GetMapping("/list/{language}")
  86. @RequiresPermissions("sys:menu:list")
  87. public List<SysMenuEntity> listLanguage(@PathVariable String language) {
  88. List<SysMenuEntity> menuList = sysMenuService.listLanguage(language);
  89. //先转map
  90. Map<String,String> nameMap = new HashMap<>();
  91. for (SysMenuEntity sysMenuEntity : menuList){
  92. nameMap.put(sysMenuEntity.getMenuId(), sysMenuEntity.getName());
  93. }
  94. /*for (SysMenuEntity sysMenuEntity : menuList) {
  95. System.out.println(sysMenuEntity.getParentId());
  96. SysMenuEntity parentMenuEntity = sysMenuService.getByIdLanguage(sysMenuEntity.getParentId(), language);
  97. if (parentMenuEntity != null) {
  98. sysMenuEntity.setParentName(parentMenuEntity.getName());
  99. }
  100. }*/
  101. //优化查询次数
  102. for(SysMenuEntity sysMenuEntity : menuList){
  103. String parentId = sysMenuEntity.getParentId();
  104. //判断是否需要第二次查询数据
  105. if (nameMap.containsKey(parentId)){
  106. sysMenuEntity.setParentName(nameMap.get(parentId));
  107. }
  108. }
  109. return menuList;
  110. }
  111. /**
  112. * 选择菜单(添加修改菜单)
  113. */
  114. @GetMapping("/select")
  115. @RequiresPermissions("sys:menu:select")
  116. public R select() {
  117. //查询列表数据
  118. List<SysMenuEntity> menuList = sysMenuService.queryNotButtonList();
  119. //添加顶级菜单
  120. SysMenuEntity root = new SysMenuEntity();
  121. root.setMenuId("0");
  122. root.setName("一级菜单");
  123. root.setParentId("-1");
  124. root.setOpen(true);
  125. menuList.add(root);
  126. return R.ok().put("menuList", menuList);
  127. }
  128. /**
  129. * 菜单信息
  130. */
  131. @GetMapping("/info/{menuId}")
  132. @RequiresPermissions("sys:menu:info")
  133. public R info(@PathVariable("menuId") String menuId) {
  134. SysMenuEntity menu = sysMenuService.getById(menuId);
  135. return R.ok().put("menu", menu);
  136. }
  137. /**
  138. * 保存
  139. */
  140. @SysLog("保存菜单")
  141. @PostMapping("/save")
  142. @RequiresPermissions("sys:menu:save")
  143. public R save(@RequestBody SysMenuEntityDto menu) {
  144. //数据校验
  145. verifyForm(menu);
  146. SysMenuEntity sysMenuEntity = new SysMenuEntity();
  147. SysObjectLanguageMenu sysObjectLanguageMenu = new SysObjectLanguageMenu();
  148. sysObjectLanguageMenu.setLanguageCode(menu.getLanguageCode());
  149. sysObjectLanguageMenu.setLanguageValue(menu.getName());
  150. BeanUtils.copyProperties(menu, sysMenuEntity);
  151. sysMenuService.save(sysMenuEntity);
  152. // sysObjectLanguageMenu.setMenuId(sysMenuEntity.getMenuId());
  153. // sysObjectLanguageMenuService.saveSysObjectLanguageMenu(sysObjectLanguageMenu);
  154. return R.ok(getLanguageMsg(SysMsgConstant.OBJECT_ID_200000));
  155. }
  156. /**
  157. * 修改
  158. */
  159. @SysLog("修改菜单")
  160. @PostMapping("/update")
  161. @RequiresPermissions("sys:menu:update")
  162. public R update(@RequestBody SysMenuEntity menu) {
  163. //数据校验
  164. verifyForm(menu);
  165. sysMenuService.updateById(menu);
  166. return R.ok(getLanguageMsg(SysMsgConstant.OBJECT_ID_200000));
  167. }
  168. /**
  169. * 删除
  170. */
  171. @SysLog("删除菜单")
  172. @PostMapping("/delete/{menuId}")
  173. @RequiresPermissions("sys:menu:delete")
  174. public R delete(@PathVariable("menuId") String menuId) {
  175. // if(menuId <= 31){
  176. // return R.error("系统菜单,不能删除");
  177. // }
  178. //判断是否有子菜单或按钮
  179. List<SysMenuEntity> menuList = sysMenuService.queryListParentId(menuId);
  180. if (menuList.size() > 0) {
  181. return R.error(getLanguageMsg(SysMsgConstant.OBJECT_ID_200209));
  182. }
  183. sysMenuService.delete(menuId);
  184. return R.ok(getLanguageMsg(SysMsgConstant.OBJECT_ID_200000));
  185. }
  186. /**
  187. * 验证参数是否正确
  188. */
  189. private void verifyForm(SysMenuEntity menu) {
  190. if (StringUtils.isBlank(menu.getName())) {
  191. throw new XJException(getLanguageMsg(SysMsgConstant.OBJECT_ID_200210));
  192. }
  193. if (menu.getParentId() == null) {
  194. throw new XJException(getLanguageMsg(SysMsgConstant.OBJECT_ID_200211));
  195. }
  196. //菜单
  197. if (menu.getType() == Constant.MenuType.MENU.getValue()) {
  198. if (StringUtils.isBlank(menu.getUrl())) {
  199. throw new XJException(getLanguageMsg(SysMsgConstant.OBJECT_ID_200212));
  200. }
  201. }
  202. //上级菜单类型
  203. int parentType = Constant.MenuType.CATALOG.getValue();
  204. if (!"0".equals(menu.getParentId())) {
  205. SysMenuEntity parentMenu = sysMenuService.getById(menu.getParentId());
  206. parentType = parentMenu.getType();
  207. }
  208. //目录、菜单
  209. if (menu.getType() == Constant.MenuType.CATALOG.getValue() ||
  210. menu.getType() == Constant.MenuType.MENU.getValue()) {
  211. if (parentType != Constant.MenuType.CATALOG.getValue()) {
  212. throw new XJException(getLanguageMsg(SysMsgConstant.OBJECT_ID_200213));
  213. }
  214. return;
  215. }
  216. //按钮
  217. if (menu.getType() == Constant.MenuType.BUTTON.getValue()) {
  218. if (parentType != Constant.MenuType.MENU.getValue()) {
  219. throw new XJException(getLanguageMsg(SysMsgConstant.OBJECT_ID_200214));
  220. }
  221. return;
  222. }
  223. }
  224. /*
  225. * @Author li_she
  226. * @Description 获取菜单集合
  227. * @Date 2021/6/24 9:30
  228. **/
  229. @PostMapping("/searchMenuList")
  230. public R searchMenuList(@RequestBody SysMenuEntity menu) {
  231. List<SysMenuEntity> menuList = sysMenuService.searchMenuList(menu);
  232. return R.ok().put("menuList", menuList);
  233. }
  234. /*
  235. * @Author li_she
  236. * @Description 更具id获取单个菜单的多语言
  237. * @Date 2021/6/30 16:34
  238. **/
  239. @PostMapping("searchMenuLanguageById")
  240. public R searchMenuLanguageById(@RequestBody SysObjectLanguageMenu sysObjectLanguageMenu) {
  241. List<SysObjectLanguageMenu> list = sysMenuService.searchMenuLanguageById(sysObjectLanguageMenu);
  242. return R.ok().put("menuLanguageList", list);
  243. }
  244. /*
  245. * @Author li_she
  246. * @Description 保存菜单语言
  247. * @Date 2021/6/30 16:34
  248. **/
  249. @PostMapping("saveMenuLanguage")
  250. public R saveMenuLanguage(@RequestBody List<SysObjectLanguageMenu> sysObjectLanguageMenu) {
  251. if (sysMenuService.saveMenuLanguage(sysObjectLanguageMenu)) {
  252. return R.ok(getLanguageMsg(SysMsgConstant.OBJECT_ID_200000));
  253. }
  254. return R.error(getLanguageMsg(SysMsgConstant.OBJECT_ID_200215));
  255. }
  256. }