|
@@ -1,19 +1,27 @@
|
|
package com.caimei365.manager.service.sys.impl;
|
|
package com.caimei365.manager.service.sys.impl;
|
|
|
|
|
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
import com.caimei365.manager.dao.SystemDao;
|
|
import com.caimei365.manager.dao.SystemDao;
|
|
import com.caimei365.manager.entity.PaginationVo;
|
|
import com.caimei365.manager.entity.PaginationVo;
|
|
import com.caimei365.manager.entity.ResponseJson;
|
|
import com.caimei365.manager.entity.ResponseJson;
|
|
import com.caimei365.manager.entity.sys.SysMenu;
|
|
import com.caimei365.manager.entity.sys.SysMenu;
|
|
|
|
+import com.caimei365.manager.entity.sys.SysMenuTree;
|
|
|
|
+import com.caimei365.manager.entity.sys.SysPermission;
|
|
import com.caimei365.manager.service.sys.SysMenuService;
|
|
import com.caimei365.manager.service.sys.SysMenuService;
|
|
import com.github.pagehelper.PageHelper;
|
|
import com.github.pagehelper.PageHelper;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.util.CollectionUtils;
|
|
import org.springframework.util.CollectionUtils;
|
|
import org.springframework.util.StringUtils;
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
|
+import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
|
|
|
+import static com.alibaba.fastjson.JSON.parseArray;
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Description
|
|
* Description
|
|
*
|
|
*
|
|
@@ -47,23 +55,30 @@ public class SysMenuServiceImpl implements SysMenuService {
|
|
* 获取所有启用的菜单列表(树状结构返回)
|
|
* 获取所有启用的菜单列表(树状结构返回)
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public ResponseJson<List<SysMenu>> getMenuTree() {
|
|
|
|
- List<SysMenu> menus = systemDao.getMenuList(0, 0);
|
|
|
|
|
|
+ public ResponseJson<List<SysMenuTree>> getMenuTree() {
|
|
|
|
+ List<SysMenuTree> menus = systemDao.getMenuTree("0");
|
|
// 递归设置子菜单
|
|
// 递归设置子菜单
|
|
setSubMenusData(menus);
|
|
setSubMenusData(menus);
|
|
return ResponseJson.success(menus);
|
|
return ResponseJson.success(menus);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 递归设置子菜单
|
|
|
|
|
|
+ * 递归设置子菜单(树状结构)
|
|
*/
|
|
*/
|
|
- private void setSubMenusData(List<SysMenu> menus) {
|
|
|
|
|
|
+ private void setSubMenusData(List<SysMenuTree> menus) {
|
|
if (!CollectionUtils.isEmpty(menus)) {
|
|
if (!CollectionUtils.isEmpty(menus)) {
|
|
- for (SysMenu menu : menus) {
|
|
|
|
- List<SysMenu> submenus = systemDao.getMenuList(menu.getId(), 0);
|
|
|
|
|
|
+ for (SysMenuTree menu : menus) {
|
|
|
|
+ // 获取子菜单
|
|
|
|
+ List<SysMenuTree> submenus = systemDao.getMenuTree(menu.getId());
|
|
if (!CollectionUtils.isEmpty(submenus)) {
|
|
if (!CollectionUtils.isEmpty(submenus)) {
|
|
setSubMenusData(submenus);
|
|
setSubMenusData(submenus);
|
|
menu.setSubMenus(submenus);
|
|
menu.setSubMenus(submenus);
|
|
|
|
+ } else {
|
|
|
|
+ // 获取当前菜单的按钮权限
|
|
|
|
+ List<SysMenuTree> permissions = systemDao.getTreePermissions(menu.getId());
|
|
|
|
+ if (!CollectionUtils.isEmpty(permissions)) {
|
|
|
|
+ menu.setSubMenus(permissions);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -75,23 +90,35 @@ public class SysMenuServiceImpl implements SysMenuService {
|
|
@Override
|
|
@Override
|
|
public ResponseJson<SysMenu> getMenu(Integer id) {
|
|
public ResponseJson<SysMenu> getMenu(Integer id) {
|
|
SysMenu menu = systemDao.getMenu(id);
|
|
SysMenu menu = systemDao.getMenu(id);
|
|
|
|
+ // 获取按钮权限
|
|
|
|
+ List<SysPermission> permissions = systemDao.getPermissionList(menu.getId());
|
|
|
|
+ if (!CollectionUtils.isEmpty(permissions)) {
|
|
|
|
+ menu.setPermissions(permissions);
|
|
|
|
+ }
|
|
return ResponseJson.success(menu);
|
|
return ResponseJson.success(menu);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 根据ID更新菜单
|
|
* 根据ID更新菜单
|
|
*/
|
|
*/
|
|
|
|
+ @Transactional(rollbackFor=Exception.class)
|
|
@Override
|
|
@Override
|
|
public ResponseJson<Void> updateMenu(Integer id, SysMenu menu) {
|
|
public ResponseJson<Void> updateMenu(Integer id, SysMenu menu) {
|
|
menu.setId(id);
|
|
menu.setId(id);
|
|
menu.setDelFlag(0);
|
|
menu.setDelFlag(0);
|
|
systemDao.updateMenu(menu);
|
|
systemDao.updateMenu(menu);
|
|
|
|
+ // 按钮权限JSON数据解析
|
|
|
|
+ ResponseJson<Void> error = parsePermissionJson(menu.getId(), menu.getPermissionJson());
|
|
|
|
+ if (error != null) {
|
|
|
|
+ return error;
|
|
|
|
+ }
|
|
return ResponseJson.success();
|
|
return ResponseJson.success();
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 根据ID(可选择的)更新菜单字段
|
|
* 根据ID(可选择的)更新菜单字段
|
|
*/
|
|
*/
|
|
|
|
+ @Transactional(rollbackFor=Exception.class)
|
|
@Override
|
|
@Override
|
|
public ResponseJson<Void> updateMenuSelective(Integer id, SysMenu menu) {
|
|
public ResponseJson<Void> updateMenuSelective(Integer id, SysMenu menu) {
|
|
SysMenu dbMenu = systemDao.getMenu(id);
|
|
SysMenu dbMenu = systemDao.getMenu(id);
|
|
@@ -117,12 +144,18 @@ public class SysMenuServiceImpl implements SysMenuService {
|
|
dbMenu.setStatus(menu.getStatus());
|
|
dbMenu.setStatus(menu.getStatus());
|
|
}
|
|
}
|
|
systemDao.updateMenu(dbMenu);
|
|
systemDao.updateMenu(dbMenu);
|
|
|
|
+ // 按钮权限JSON数据解析
|
|
|
|
+ ResponseJson<Void> error = parsePermissionJson(menu.getId(), menu.getPermissionJson());
|
|
|
|
+ if (error != null) {
|
|
|
|
+ return error;
|
|
|
|
+ }
|
|
return ResponseJson.success();
|
|
return ResponseJson.success();
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 添加菜单
|
|
* 添加菜单
|
|
*/
|
|
*/
|
|
|
|
+ @Transactional(rollbackFor=Exception.class)
|
|
@Override
|
|
@Override
|
|
public ResponseJson<Void> addMenu(SysMenu menu) {
|
|
public ResponseJson<Void> addMenu(SysMenu menu) {
|
|
if (null == menu.getParentId()) {
|
|
if (null == menu.getParentId()) {
|
|
@@ -138,6 +171,11 @@ public class SysMenuServiceImpl implements SysMenuService {
|
|
SysMenu dbMenu = systemDao.getMenuByName(menu.getName());
|
|
SysMenu dbMenu = systemDao.getMenuByName(menu.getName());
|
|
if (null == dbMenu) {
|
|
if (null == dbMenu) {
|
|
systemDao.insertMenu(menu);
|
|
systemDao.insertMenu(menu);
|
|
|
|
+ // 按钮权限JSON数据解析
|
|
|
|
+ ResponseJson<Void> error = parsePermissionJson(menu.getId(), menu.getPermissionJson());
|
|
|
|
+ if (error != null) {
|
|
|
|
+ return error;
|
|
|
|
+ }
|
|
} else if (!Integer.valueOf(0).equals(dbMenu.getDelFlag())){
|
|
} else if (!Integer.valueOf(0).equals(dbMenu.getDelFlag())){
|
|
// 更新已删除菜单
|
|
// 更新已删除菜单
|
|
return updateMenu(dbMenu.getId(), menu);
|
|
return updateMenu(dbMenu.getId(), menu);
|
|
@@ -150,9 +188,66 @@ public class SysMenuServiceImpl implements SysMenuService {
|
|
/**
|
|
/**
|
|
* 根据ID删除菜单
|
|
* 根据ID删除菜单
|
|
*/
|
|
*/
|
|
|
|
+ @Transactional(rollbackFor=Exception.class)
|
|
@Override
|
|
@Override
|
|
public ResponseJson<Void> deleteMenu(Integer id) {
|
|
public ResponseJson<Void> deleteMenu(Integer id) {
|
|
systemDao.deleteMenu(id);
|
|
systemDao.deleteMenu(id);
|
|
|
|
+ List<Integer> permissionIds = systemDao.getPermissionIds(id);
|
|
|
|
+ // 删除该菜单权限按钮
|
|
|
|
+ for (Integer permissionId : permissionIds) {
|
|
|
|
+ systemDao.deletePermission(permissionId);
|
|
|
|
+ }
|
|
return ResponseJson.success();
|
|
return ResponseJson.success();
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 按钮权限JSON数据解析
|
|
|
|
+ * @param menuId 菜单Id
|
|
|
|
+ * @param jsonStr 按钮权限JSON串
|
|
|
|
+ */
|
|
|
|
+ private ResponseJson<Void> parsePermissionJson(Integer menuId, String jsonStr) {
|
|
|
|
+ // 文章列表JSON数据解析
|
|
|
|
+ JSONArray permissionJson = null;
|
|
|
|
+ List<SysPermission> permissionList = new ArrayList<>();
|
|
|
|
+ try {
|
|
|
|
+ permissionJson = parseArray(jsonStr);
|
|
|
|
+ if (null == permissionJson || permissionJson.isEmpty()) {
|
|
|
|
+ return ResponseJson.error("按钮权限JSON数据异常!", null);
|
|
|
|
+ }
|
|
|
|
+ for (Object permissionObject : permissionJson) {
|
|
|
|
+ JSONObject detail = (JSONObject) permissionObject;
|
|
|
|
+ Integer permissionId = (Integer) detail.get("id");
|
|
|
|
+ String permissionName = (String) detail.get("name");
|
|
|
|
+ String permissionTitle = (String) detail.get("title");
|
|
|
|
+ SysPermission item = new SysPermission();
|
|
|
|
+ item.setId(permissionId);
|
|
|
|
+ item.setMenuId(menuId);
|
|
|
|
+ item.setName(permissionName);
|
|
|
|
+ item.setTitle(permissionTitle);
|
|
|
|
+ permissionList.add(item);
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("文章列表JSON数据解析异常try-catch:", e);
|
|
|
|
+ return ResponseJson.error("文章列表JSON数据解析异常!", null);
|
|
|
|
+ }
|
|
|
|
+ List<Integer> dbPermissionIds = systemDao.getPermissionIds(menuId);
|
|
|
|
+ List<Integer> permissionIds = new ArrayList<>();
|
|
|
|
+ for (SysPermission permission : permissionList) {
|
|
|
|
+ if (null != permission.getId() && permission.getId() > 0 && dbPermissionIds.contains(permission.getId())) {
|
|
|
|
+ systemDao.updatePermission(permission);
|
|
|
|
+ permissionIds.add(permission.getId());
|
|
|
|
+ } else {
|
|
|
|
+ systemDao.insertPermission(permission);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ for (Integer id : dbPermissionIds) {
|
|
|
|
+ if (!permissionIds.contains(id)){
|
|
|
|
+ systemDao.deletePermission(id);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
}
|
|
}
|