MenuController.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. package com.zhcs.dt.controller.system.menu;
  2. import java.util.HashMap;
  3. import java.util.List;
  4. import java.util.Map;
  5. import javax.annotation.Resource;
  6. import net.sf.json.JSONArray;
  7. import org.springframework.stereotype.Controller;
  8. import org.springframework.ui.Model;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.RequestParam;
  11. import org.springframework.web.bind.annotation.ResponseBody;
  12. import org.springframework.web.servlet.ModelAndView;
  13. import com.zhcs.dt.controller.base.BaseController;
  14. import com.zhcs.dt.entity.system.Menu;
  15. import com.zhcs.dt.service.system.fhlog.FHlogManager;
  16. import com.zhcs.dt.service.system.menu.MenuManager;
  17. import com.zhcs.dt.util.AppUtil;
  18. import com.zhcs.dt.util.Const;
  19. import com.zhcs.dt.util.Jurisdiction;
  20. import com.zhcs.dt.util.PageData;
  21. import com.zhcs.dt.util.RightsHelper;
  22. /**
  23. * 类名称:MenuController 菜单处理
  24. * 创建人:FH
  25. * 创建时间:2015年10月27日
  26. * @version
  27. */
  28. @Controller
  29. @RequestMapping(value="/menu")
  30. public class MenuController extends BaseController {
  31. String menuUrl = "menu.do"; //菜单地址(权限用)
  32. @Resource(name="menuService")
  33. private MenuManager menuService;
  34. @Resource(name="fhlogService")
  35. private FHlogManager FHLOG;
  36. /**
  37. * 显示菜单列表
  38. * @param model
  39. * @return
  40. */
  41. @RequestMapping
  42. public ModelAndView list()throws Exception{
  43. ModelAndView mv = this.getModelAndView();
  44. PageData pd = new PageData();
  45. pd = this.getPageData();
  46. try{
  47. String MENU_ID = (null == pd.get("MENU_ID") || "".equals(pd.get("MENU_ID").toString()))?"0":pd.get("MENU_ID").toString();
  48. List<Menu> menuList = menuService.listSubMenuByParentId(MENU_ID);
  49. mv.addObject("pd", menuService.getMenuById(pd)); //传入父菜单所有信息
  50. mv.addObject("MENU_ID", MENU_ID);
  51. mv.addObject("MSG", null == pd.get("MSG")?"list":pd.get("MSG").toString()); //MSG=change 则为编辑或删除后跳转过来的
  52. mv.addObject("menuList", menuList);
  53. mv.addObject("QX",Jurisdiction.getHC()); //按钮权限
  54. mv.setViewName("system/menu/menu_list");
  55. } catch(Exception e){
  56. logger.error(e.toString(), e);
  57. }
  58. return mv;
  59. }
  60. /**
  61. * 请求新增菜单页面
  62. * @param model
  63. * @return
  64. */
  65. @RequestMapping(value="/toAdd")
  66. public ModelAndView toAdd()throws Exception{
  67. ModelAndView mv = this.getModelAndView();
  68. try{
  69. PageData pd = new PageData();
  70. pd = this.getPageData();
  71. String MENU_ID = (null == pd.get("MENU_ID") || "".equals(pd.get("MENU_ID").toString()))?"0":pd.get("MENU_ID").toString();//接收传过来的上级菜单ID,如果上级为顶级就取值“0”
  72. pd.put("MENU_ID",MENU_ID);
  73. mv.addObject("pds", menuService.getMenuById(pd)); //传入父菜单所有信息
  74. mv.addObject("MENU_ID", MENU_ID); //传入菜单ID,作为子菜单的父菜单ID用
  75. mv.addObject("MSG", "add"); //执行状态 add 为添加
  76. mv.setViewName("system/menu/menu_edit");
  77. } catch(Exception e){
  78. logger.error(e.toString(), e);
  79. }
  80. return mv;
  81. }
  82. /**
  83. * 保存菜单信息
  84. * @param menu
  85. * @param model
  86. * @return
  87. */
  88. @RequestMapping(value="/add")
  89. public ModelAndView add(Menu menu)throws Exception{
  90. if(!Jurisdiction.buttonJurisdiction(menuUrl, "add")){return null;} //校验权限
  91. logBefore(logger, Jurisdiction.getUsername()+"保存菜单");
  92. ModelAndView mv = this.getModelAndView();
  93. PageData pd = new PageData();
  94. pd = this.getPageData();
  95. try{
  96. menu.setMENU_ID(String.valueOf(Integer.parseInt(menuService.findMaxId(pd).get("MID").toString())+1));
  97. menu.setMENU_ICON("menu-icon fa fa-leaf black");//默认菜单图标
  98. menuService.saveMenu(menu); //保存菜单
  99. FHLOG.save(Jurisdiction.getUsername(), "新增菜单"+menu.getMENU_NAME());
  100. } catch(Exception e){
  101. logger.error(e.toString(), e);
  102. mv.addObject("msg","failed");
  103. }
  104. mv.setViewName("redirect:/menu.do?MSG='change'&MENU_ID="+menu.getPARENT_ID()); //保存成功跳转到列表页面
  105. return mv;
  106. }
  107. /**
  108. * 删除菜单
  109. * @param MENU_ID
  110. * @param out
  111. */
  112. @RequestMapping(value="/delete")
  113. @ResponseBody
  114. public Object delete(@RequestParam String MENU_ID)throws Exception{
  115. if(!Jurisdiction.buttonJurisdiction(menuUrl, "del")){return null;} //校验权限
  116. logBefore(logger, Jurisdiction.getUsername()+"删除菜单");
  117. Map<String,String> map = new HashMap<String,String>();
  118. String errInfo = "";
  119. try{
  120. if(menuService.listSubMenuByParentId(MENU_ID).size() > 0){//判断是否有子菜单,是:不允许删除
  121. errInfo = "false";
  122. }else{
  123. menuService.deleteMenuById(MENU_ID);
  124. FHLOG.save(Jurisdiction.getUsername(), "删除菜单ID"+MENU_ID);
  125. errInfo = "success";
  126. }
  127. } catch(Exception e){
  128. logger.error(e.toString(), e);
  129. }
  130. map.put("result", errInfo);
  131. return AppUtil.returnObject(new PageData(), map);
  132. }
  133. /**
  134. * 请求编辑菜单页面
  135. * @param
  136. * @return
  137. */
  138. @RequestMapping(value="/toEdit")
  139. public ModelAndView toEdit(String id)throws Exception{
  140. ModelAndView mv = this.getModelAndView();
  141. PageData pd = new PageData();
  142. try{
  143. pd = this.getPageData();
  144. pd.put("MENU_ID",id); //接收过来的要修改的ID
  145. pd = menuService.getMenuById(pd); //读取此ID的菜单数据
  146. mv.addObject("pd", pd); //放入视图容器
  147. pd.put("MENU_ID",pd.get("PARENT_ID").toString()); //用作读取父菜单信息
  148. mv.addObject("pds", menuService.getMenuById(pd)); //传入父菜单所有信息
  149. mv.addObject("MENU_ID", pd.get("PARENT_ID").toString()); //传入父菜单ID,作为子菜单的父菜单ID用
  150. mv.addObject("MSG", "edit");
  151. pd.put("MENU_ID",id); //复原本菜单ID
  152. mv.addObject("QX",Jurisdiction.getHC()); //按钮权限
  153. mv.setViewName("system/menu/menu_edit");
  154. } catch(Exception e){
  155. logger.error(e.toString(), e);
  156. }
  157. return mv;
  158. }
  159. /**
  160. * 保存编辑
  161. * @param
  162. * @return
  163. */
  164. @RequestMapping(value="/edit")
  165. public ModelAndView edit(Menu menu)throws Exception{
  166. if(!Jurisdiction.buttonJurisdiction(menuUrl, "edit")){return null;} //校验权限
  167. logBefore(logger, Jurisdiction.getUsername()+"修改菜单");
  168. ModelAndView mv = this.getModelAndView();
  169. try{
  170. menuService.edit(menu);
  171. FHLOG.save(Jurisdiction.getUsername(), "修改菜单"+menu.getMENU_NAME());
  172. } catch(Exception e){
  173. logger.error(e.toString(), e);
  174. }
  175. mv.setViewName("redirect:/menu.do?MSG='change'&MENU_ID="+menu.getPARENT_ID()); //保存成功跳转到列表页面
  176. return mv;
  177. }
  178. /**
  179. * 请求编辑菜单图标页面
  180. * @param
  181. * @return
  182. */
  183. @RequestMapping(value="/toEditicon")
  184. public ModelAndView toEditicon(String MENU_ID)throws Exception{
  185. ModelAndView mv = this.getModelAndView();
  186. PageData pd = new PageData();
  187. try{
  188. pd = this.getPageData();
  189. pd.put("MENU_ID",MENU_ID);
  190. mv.addObject("pd", pd);
  191. mv.setViewName("system/menu/menu_icon");
  192. } catch(Exception e){
  193. logger.error(e.toString(), e);
  194. }
  195. return mv;
  196. }
  197. /**
  198. * 保存菜单图标
  199. * @param
  200. * @return
  201. */
  202. @RequestMapping(value="/editicon")
  203. public ModelAndView editicon()throws Exception{
  204. if(!Jurisdiction.buttonJurisdiction(menuUrl, "edit")){return null;} //校验权限
  205. logBefore(logger, Jurisdiction.getUsername()+"修改菜单图标");
  206. ModelAndView mv = this.getModelAndView();
  207. PageData pd = new PageData();
  208. try{
  209. pd = this.getPageData();
  210. pd = menuService.editicon(pd);
  211. mv.addObject("msg","success");
  212. } catch(Exception e){
  213. logger.error(e.toString(), e);
  214. mv.addObject("msg","failed");
  215. }
  216. mv.setViewName("save_result");
  217. return mv;
  218. }
  219. /**
  220. * 显示菜单列表ztree(菜单管理)
  221. * @param model
  222. * @return
  223. */
  224. @RequestMapping(value="/listAllMenu")
  225. public ModelAndView listAllMenu(Model model,String MENU_ID)throws Exception{
  226. ModelAndView mv = this.getModelAndView();
  227. try{
  228. JSONArray arr = JSONArray.fromObject(menuService.listAllMenu("0"));
  229. String json = arr.toString();
  230. json = json.replaceAll("MENU_ID", "id").replaceAll("PARENT_ID", "pId").replaceAll("MENU_NAME", "name").replaceAll("subMenu", "nodes").replaceAll("hasMenu", "checked").replaceAll("MENU_URL", "url");
  231. model.addAttribute("zTreeNodes", json);
  232. mv.addObject("MENU_ID",MENU_ID);
  233. mv.setViewName("system/menu/menu_ztree");
  234. } catch(Exception e){
  235. logger.error(e.toString(), e);
  236. }
  237. return mv;
  238. }
  239. /**
  240. * 显示菜单列表ztree(拓展左侧四级菜单)
  241. * @param model
  242. * @return
  243. */
  244. @RequestMapping(value="/otherlistMenu")
  245. public ModelAndView otherlistMenu(Model model,String MENU_ID)throws Exception{
  246. ModelAndView mv = this.getModelAndView();
  247. try{
  248. PageData pd = new PageData();
  249. pd.put("MENU_ID", MENU_ID);
  250. String MENU_URL = menuService.getMenuById(pd).getString("MENU_URL");
  251. if("#".equals(MENU_URL.trim()) || "".equals(MENU_URL.trim()) || null == MENU_URL){
  252. MENU_URL = "login_default.do";
  253. }
  254. String roleRights = Jurisdiction.getSession().getAttribute(Jurisdiction.getUsername() + Const.SESSION_ROLE_RIGHTS).toString(); //获取本角色菜单权限
  255. List<Menu> athmenuList = menuService.listAllMenuQx(MENU_ID); //获取某菜单下所有子菜单
  256. athmenuList = this.readMenu(athmenuList, roleRights); //根据权限分配菜单
  257. JSONArray arr = JSONArray.fromObject(athmenuList);
  258. String json = arr.toString();
  259. json = json.replaceAll("MENU_ID", "id").replaceAll("PARENT_ID", "pId").replaceAll("MENU_NAME", "name").replaceAll("subMenu", "nodes").replaceAll("hasMenu", "checked").replaceAll("MENU_URL", "url").replaceAll("#", "");
  260. model.addAttribute("zTreeNodes", json);
  261. mv.addObject("MENU_URL",MENU_URL); //本ID菜单链接
  262. mv.setViewName("system/menu/menu_ztree_other");
  263. } catch(Exception e){
  264. logger.error(e.toString(), e);
  265. }
  266. return mv;
  267. }
  268. /**根据角色权限获取本权限的菜单列表(递归处理)
  269. * @param menuList:传入的总菜单
  270. * @param roleRights:加密的权限字符串
  271. * @return
  272. */
  273. public List<Menu> readMenu(List<Menu> menuList,String roleRights){
  274. for(int i=0;i<menuList.size();i++){
  275. menuList.get(i).setHasMenu(RightsHelper.testRights(roleRights, menuList.get(i).getMENU_ID()));
  276. if(menuList.get(i).isHasMenu() && "1".equals(menuList.get(i).getMENU_STATE())){ //判断是否有此菜单权限并且是否隐藏
  277. this.readMenu(menuList.get(i).getSubMenu(), roleRights); //是:继续排查其子菜单
  278. }else{
  279. menuList.remove(i);
  280. i--;
  281. }
  282. }
  283. return menuList;
  284. }
  285. }