Skip to content
This repository has been archived by the owner on Oct 7, 2019. It is now read-only.

Commit

Permalink
2016-1-14
Browse files Browse the repository at this point in the history
  • Loading branch information
fengjx committed Jan 13, 2016
1 parent 456fc89 commit f80f74e
Show file tree
Hide file tree
Showing 26 changed files with 184 additions and 140 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
package com.fengjx.modules.common.controller;

import com.fengjx.commons.plugin.db.Record;
import com.fengjx.commons.system.exception.MyRuntimeException;
import com.fengjx.modules.common.constants.AppConfig;
import com.fengjx.modules.sys.model.SysMenu;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

Expand All @@ -17,7 +17,7 @@
* @author fengjx. @date:2015/5/17 0017
*/
@Controller
public class ViewController {
public class ViewController extends MyController {

@Autowired
private SysMenu sysMenu;
Expand Down Expand Up @@ -48,11 +48,18 @@ public String view(@PathVariable("module") String module) {
* @return
*/
@RequestMapping(value = "${adminPath}/f/{menuId}")
public String forward(@PathVariable("menuId") String menuId) {
public String forward(@PathVariable("menuId") String menuId, Model model) {
Record menu = sysMenu.get(menuId);
if (StringUtils.isBlank(menu.getStr("url"))) {
throw new MyRuntimeException("无效访问路径");
return "forward:" + adminPath;
}
String pid = menu.getStr("id");
if (StringUtils.isNotBlank(menu.getStr("parents_ids"))) {
pid = StringUtils.split(menu.getStr("parents_ids"), ",")[0];
} else if (StringUtils.isNotBlank(menu.getStr("parent_id"))) {
pid = menu.getStr("parent_id");
}
model.addAttribute("admin_menu_pid", pid);
return "forward:" + menu.getStr("url");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,22 +82,11 @@ public String addOrUpdate(HttpServletRequest request) {
* @param id
* @return
*/
@RequestMapping(value = "/delete")
@RequestMapping(value = "delete")
@ResponseBody
public String delete(@RequestParam(required = true) String id) {
sysMenu.deleteMenuById(id);
return retSuccess("菜单成功删除");
}

/**
* 通过顶级ID加载菜单
*
* @param pid
* @return
*/
public Object loadMenu(String pid) {

return null;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import com.fengjx.commons.plugin.db.page.AdapterPage;
import com.fengjx.modules.common.controller.MyController;
import com.fengjx.modules.sys.model.SysUser;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
Expand Down Expand Up @@ -37,12 +36,7 @@ public String save(HttpServletRequest request) {
validateRequired("username", "用户名不能为空");
validateRequired("email", "邮箱不能为空");
Record record = getRecord(SysUser.class, request);
if (StringUtils.isBlank(record.getStr("id"))) {
record.set("pwd", "admin");
sysUser.register(record);
} else {
sysUser.update(record);
}
sysUser.saveOrUpdate(record);
return retSuccess();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,28 @@

package com.fengjx.modules.sys.controller.admin.interceptor;

import com.fengjx.commons.utils.CookieUtils;
import com.fengjx.commons.plugin.db.Record;
import com.fengjx.commons.utils.WebUtil;
import com.fengjx.modules.common.constants.AppConfig;
import com.fengjx.modules.sys.entity.SysUserEntity;
import com.fengjx.modules.sys.model.SysMenu;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class AdminInterceptor implements HandlerInterceptor {

private static final String LAST_URI = "last_uri";
/**
* 管理基础路径
*/
@Value("${adminPath}")
protected String adminPath;

@Autowired
private SysMenu sysMenu;

public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception e) throws Exception {
Expand All @@ -35,21 +43,19 @@ public void postHandle(HttpServletRequest request, HttpServletResponse response,
*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
HttpSession session = request.getSession();
SysUserEntity user = (SysUserEntity) session.getAttribute(AppConfig.LOGIN_FLAG);
// 登陆超时
if (null == user && !WebUtil.isAjax(request)) {
CookieUtils.setCookie(response, LAST_URI,
WebUtil.getUriWidthParam(request).replace(request.getContextPath(), ""), 60 * 60);
// 如果是ajax请求
if (WebUtil.isAjax(request)) {
request.getRequestDispatcher("/common/loginTimeoutAjax").forward(request, response);
} else {
request.getRequestDispatcher("/common/loginTimeout").forward(request, response);
if (!WebUtil.isAjax(request)) {
String url = StringUtils.replace(request.getRequestURI(), request.getContextPath(), "");
Record menu = sysMenu.findByUrl(url);
if (!menu.isEmpty()) {
String pid = menu.getStr("id");
if (StringUtils.isNotBlank(menu.getStr("parents_ids"))) {
pid = StringUtils.split(menu.getStr("parents_ids"), ",")[0];
} else if (StringUtils.isNotBlank(menu.getStr("parent_id"))) {
pid = menu.getStr("parent_id");
}
request.setAttribute("admin_menu_pid", pid);
}
return false;
}
return true;
}

}
102 changes: 67 additions & 35 deletions src/main/java/com/fengjx/modules/sys/model/SysMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
import com.fengjx.commons.plugin.db.Model;
import com.fengjx.commons.plugin.db.Record;
import com.fengjx.modules.common.constants.AppConfig;
import com.fengjx.modules.sys.utils.SysUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -29,7 +31,8 @@
public class SysMenu extends Model {

private static final String TREE_MENU_CACHE = "listTreeMenu";
private static final String MENU__ID_CACHE = "menu_id_";
private static final String MENU_ID_CACHE = "menu_id_";
private static final String MENU_URL_CACHE = "menu_url_";

private static final String ORDER_BY = "order by order_no , update_time desc";

Expand All @@ -43,21 +46,37 @@ public class SysMenu extends Model {
* @return
*/
public Record get(final String id) {
return EhCacheUtil.get(AppConfig.EhcacheName.SYS_CACHE, MENU__ID_CACHE + id, new IDataLoader<Record>() {
@Override
public Record load() {
if (StringUtils.isBlank(id)) {
return new Record();
}
Record record = findById(id);
if (!record.isEmpty() && StringUtils.isNotBlank(record.getStr("parent_id"))) {
Record parent = findById(record.getStr("parent_id"));
record.set("parent_name", parent.get("name"));
record.set("parent_level", parent.get("level"));
}
return record;
}
});
return EhCacheUtil.get(AppConfig.EhcacheName.SYS_CACHE, MENU_ID_CACHE + id,
new IDataLoader<Record>() {
@Override
public Record load() {
if (StringUtils.isBlank(id)) {
return new Record();
}
Record record = findById(id);
if (!record.isEmpty() && StringUtils.isNotBlank(record.getStr("parent_id"))) {
Record parent = findById(record.getStr("parent_id"));
record.set("parent_name", parent.get("name"));
record.set("parent_level", parent.get("level"));
}
return record;
}
});
}

public Record findByUrl(final String url) {
if (StringUtils.isBlank(url)) {
return new Record();
}
return EhCacheUtil.get(AppConfig.EhcacheName.SYS_CACHE, MENU_URL_CACHE + url,
new IDataLoader<Record>() {
@Override
public Record load() {
Map<String, Object> param = Maps.newHashMap();
param.put("url", url);
return findOne(param);
}
});
}

/**
Expand All @@ -78,14 +97,40 @@ public List<Map<String, Object>> load() {
/**
* 递归查询
*
* @param pid 父级ID
* @param pid
* @return
*/
private List<Map<String, Object>> recursive(String pid) {
return recursive(pid, null);
}

/**
* 递归查询用户菜单
*
* @param pid
* @param userId
* @return
*/
private List<Map<String, Object>> recursive(String pid, String userId) {
List<Map<String, Object>> resList = Lists.newArrayList();
List<Map<String, Object>> list;
StringBuilder sql = new StringBuilder(getSelectSql("a"));
StringBuilder sql = new StringBuilder(100);
sql.append("select ").append(getColumnsStr("a"));
sql.append(" from ").append(getTableName()).append(" a ");
if (StringUtils.isNotBlank(userId)) {
sql.append(" join ").append(getTableName(SysRoleMenu.class))
.append(" c ON a.id = c.menu_id ");
sql.append(" join ").append(getTableName(SysRole.class))
.append(" b ON c.role_id = b.id ");
sql.append(" join ").append(getTableName(SysUserRole.class))
.append(" d ON b.id = d.role_id ");
sql.append(" join ").append(getTableName(SysUser.class))
.append(" e ON d.user_id = e.id ");
}
sql.append(" where 1 = 1 ");
if (StringUtils.isNotBlank(userId)) {
sql.append("and e.id = ? and b.is_valid = '1' and c.is_valid = '1' and e.is_valid = '1' ");
}
if (StringUtils.isBlank(pid)) {
sql.append(" and (a.parent_id is null or a.parent_id = '') ").append(ORDER_BY);
list = findList(sql.toString());
Expand All @@ -99,7 +144,7 @@ private List<Map<String, Object>> recursive(String pid) {
// 如果存在子节点(不是叶子节点),则继续递归查询
resList.add(m);
if (!isLeef(_id)) {
List<Map<String, Object>> tmpList = recursive(_id);
List<Map<String, Object>> tmpList = recursive(_id, userId);
m.put("isLeef", false);
m.put("isParent", true);
resList.addAll(tmpList);
Expand All @@ -112,20 +157,15 @@ private List<Map<String, Object>> recursive(String pid) {
return resList;
}

// 删除菜单缓存数据
private void deleteMenuCache() {
EhCacheUtil.remove(AppConfig.EhcacheName.SYS_CACHE, TREE_MENU_CACHE);
}

public void saveOrUpdate(Map<String, Object> attrs) {
attrs.put("update_time", new Date());
insertOrUpdate(attrs);
deleteMenuCache();
SysUtil.deleteSysCache();
}

public void deleteMenuById(String id) {
deleteById(id);
deleteMenuCache();
SysUtil.deleteSysCache();
}

private static final String USER_MENU = "user_menu_";
Expand All @@ -144,17 +184,9 @@ public List<Map<String, Object>> findUserMenus(final String userId) {
new IDataLoader<List<Map<String, Object>>>() {
@Override
public List<Map<String, Object>> load() {
List<Map<String, Object>> menus = sysRoleMenu.findAllRoleMenus();
List<Map<String, Object>> res = Lists.newArrayList();
for (Map<String, Object> m : menus) {
if (userId.equals(m.get("user_id"))) {
res.add(m);
}
}
return res;
return recursive(null, userId);
}
});
}


}
6 changes: 6 additions & 0 deletions src/main/java/com/fengjx/modules/sys/model/SysRole.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.fengjx.commons.plugin.db.Model;
import com.fengjx.commons.plugin.db.Record;
import com.fengjx.commons.utils.CommonUtils;
import com.fengjx.modules.sys.utils.SysUtil;
import com.google.common.base.Joiner;
import com.google.common.collect.Maps;
import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -74,6 +75,7 @@ public void saveOrUpdate(Record record) {
String menuIds = record.getStr("menuIds");
String[] ids = StringUtils.split(menuIds, ",");
saveMenuRole(roleId, ids);
SysUtil.deleteSysCache();
}

/**
Expand All @@ -84,6 +86,7 @@ public void saveOrUpdate(Record record) {
public void deleteRole(String id) {
deleteMenuRole(id);
deleteById(id);
SysUtil.deleteSysCache();
}

/**
Expand Down Expand Up @@ -120,6 +123,7 @@ private void deleteMenuRole(String roleId) {
sql.append(getTableName(SysRoleMenu.class));
sql.append(" where role_id = ?");
execute(sql.toString(), roleId);
SysUtil.deleteSysCache();
}

/**
Expand All @@ -145,6 +149,7 @@ public int getBatchSize() {
return menuIds.length;
}
});
SysUtil.deleteSysCache();
}

/**
Expand Down Expand Up @@ -192,6 +197,7 @@ public int getBatchSize() {
}
});
}
SysUtil.deleteSysCache();
}

}
Loading

0 comments on commit f80f74e

Please sign in to comment.