|
@@ -10,6 +10,7 @@ import com.caimei.model.po.SysPermission;
|
|
|
import com.caimei.model.po.SysRole;
|
|
|
import com.caimei.service.sys.SysMenuService;
|
|
|
import com.caimei.service.sys.SysRoleService;
|
|
|
+import com.caimei.utils.CommonUtil;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.github.pagehelper.PageInfo;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -112,43 +113,26 @@ public class SysMenuServiceImpl implements SysMenuService {
|
|
|
menu.setId(id);
|
|
|
menu.setDelFlag(0);
|
|
|
systemMapper.updateMenu(menu);
|
|
|
- // 移除菜单与供应商基础角色的关联
|
|
|
- removeShopRoleRelation(menu.getId());
|
|
|
- if (2 == menu.getMenuType() && 1 == menu.getBaseFlag() && 0 == menu.getParentId()) {
|
|
|
- // 供应商基础菜单
|
|
|
- addShopRoleRelation(menu.getId());
|
|
|
- } else if (2 == menu.getMenuType() && 0 == menu.getBaseFlag() && 0 == menu.getParentId()) {
|
|
|
- // 供应商会员菜单
|
|
|
- ResponseJson<Void> result = saveVipRole(menu);
|
|
|
- if (0 != result.getCode()) {
|
|
|
- return result;
|
|
|
- }
|
|
|
- }
|
|
|
// 按钮权限JSON数据解析
|
|
|
- ResponseJson<Void> error = parsePermissionJson(menu.getId(), menu.getPermissionJson());
|
|
|
- if (error != null) {
|
|
|
- return error;
|
|
|
+ ResponseJson<List<SysPermission>> result = parsePermissionJson(menu.getId(), menu.getPermissionJson());
|
|
|
+ if (-1 == result.getCode()) {
|
|
|
+ return ResponseJson.error(result.getMsg(), null);
|
|
|
}
|
|
|
- return ResponseJson.success();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 根据ID更新供应商菜单
|
|
|
- */
|
|
|
- @Transactional(rollbackFor=Exception.class)
|
|
|
- @Override
|
|
|
- public ResponseJson<Void> updateShopMenu(SysMenu menu) {
|
|
|
- systemMapper.updateShopMenu(menu);
|
|
|
- // 移除菜单与供应商基础角色的关联
|
|
|
- removeShopRoleRelation(menu.getId());
|
|
|
- if (1 == menu.getBaseFlag()) {
|
|
|
- // 供应商基础菜单
|
|
|
- addShopRoleRelation(menu.getId());
|
|
|
- } else if (0 == menu.getBaseFlag()) {
|
|
|
- // 供应商会员菜单
|
|
|
- ResponseJson<Void> result = saveVipRole(menu);
|
|
|
- if (0 != result.getCode()) {
|
|
|
- return result;
|
|
|
+ List<SysPermission> permissionList = result.getData();
|
|
|
+ Integer parentMenuId = getBaseParentId(menu.getId());
|
|
|
+ SysMenu baseParentMenu = systemMapper.getMenu(parentMenuId);
|
|
|
+ if (2 == menu.getMenuType()) {
|
|
|
+ // 移除菜单与供应商基础角色的关联
|
|
|
+ removeMenuRoleRelation(menu.getId());
|
|
|
+ if (1 == baseParentMenu.getBaseFlag()) {
|
|
|
+ // 供应商基础菜单
|
|
|
+ addShopRoleRelation(menu.getId(), permissionList);
|
|
|
+ } else {
|
|
|
+ // 供应商会员菜单
|
|
|
+ ResponseJson<Void> saveResult = saveVipRole(menu, permissionList);
|
|
|
+ if (0 != saveResult.getCode()) {
|
|
|
+ return saveResult;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
return ResponseJson.success();
|
|
@@ -184,9 +168,9 @@ public class SysMenuServiceImpl implements SysMenuService {
|
|
|
}
|
|
|
systemMapper.updateMenu(dbMenu);
|
|
|
// 按钮权限JSON数据解析
|
|
|
- ResponseJson<Void> error = parsePermissionJson(menu.getId(), menu.getPermissionJson());
|
|
|
- if (error != null) {
|
|
|
- return error;
|
|
|
+ ResponseJson<List<SysPermission>> error = parsePermissionJson(menu.getId(), menu.getPermissionJson());
|
|
|
+ if (-1 == error.getCode()) {
|
|
|
+ return ResponseJson.error(error.getMsg(), null);
|
|
|
}
|
|
|
return ResponseJson.success();
|
|
|
}
|
|
@@ -209,30 +193,27 @@ public class SysMenuServiceImpl implements SysMenuService {
|
|
|
// 根据路由名称查询菜单
|
|
|
SysMenu dbMenu = systemMapper.getMenuByName(menu.getName());
|
|
|
if (null == dbMenu) {
|
|
|
+ systemMapper.insertMenu(menu);
|
|
|
// 按钮权限JSON数据解析
|
|
|
- ResponseJson<Void> error = parsePermissionJson(menu.getId(), menu.getPermissionJson());
|
|
|
- if (error != null) {
|
|
|
- return error;
|
|
|
+ Integer menuId = menu.getId();
|
|
|
+ ResponseJson<List<SysPermission>> result = parsePermissionJson(menuId, menu.getPermissionJson());
|
|
|
+ if (-1 == result.getCode()) {
|
|
|
+ return ResponseJson.error(result.getMsg(), null);
|
|
|
}
|
|
|
- systemMapper.insertMenu(menu);
|
|
|
+ List<SysPermission> permissionList = result.getData();
|
|
|
if (2 == menu.getMenuType()) {
|
|
|
- if (0 == menu.getParentId()) {
|
|
|
- // 首层菜单
|
|
|
- if (1 == menu.getBaseFlag()) {
|
|
|
- // 会员基础菜单
|
|
|
- addShopRoleRelation(menu.getId());
|
|
|
- } else {
|
|
|
- // 会员订制菜单
|
|
|
- ResponseJson<Void> result = saveVipRole(menu);
|
|
|
- if (0 != result.getCode()) {
|
|
|
- systemMapper.deleteMenu(menu.getId());
|
|
|
- return result;
|
|
|
- }
|
|
|
- }
|
|
|
+ Integer parentMenuId = getBaseParentId(menuId);
|
|
|
+ SysMenu baseParentMenu = systemMapper.getMenu(parentMenuId);
|
|
|
+ if (1 == baseParentMenu.getBaseFlag()) {
|
|
|
+ // 会员基础菜单
|
|
|
+ addShopRoleRelation(menuId, permissionList);
|
|
|
} else {
|
|
|
- // 母菜单为会员基础菜单
|
|
|
-
|
|
|
- // 母菜单为会员订制菜单
|
|
|
+ // 会员订制菜单
|
|
|
+ ResponseJson<Void> saveResult = saveVipRole(menu, permissionList);
|
|
|
+ if (0 != saveResult.getCode()) {
|
|
|
+ systemMapper.deleteMenu(menuId);
|
|
|
+ return saveResult;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}else {
|
|
@@ -241,7 +222,24 @@ public class SysMenuServiceImpl implements SysMenuService {
|
|
|
return ResponseJson.success();
|
|
|
}
|
|
|
|
|
|
- private ResponseJson<Void> saveVipRole(SysMenu menu) {
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取子菜单顶层母菜单id
|
|
|
+ * @param menuId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private Integer getBaseParentId(Integer menuId) {
|
|
|
+ Integer parentId = systemMapper.getMenuParentId(menuId);
|
|
|
+ if (0 != parentId) {
|
|
|
+ return getBaseParentId(parentId);
|
|
|
+ } else {
|
|
|
+ return menuId;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResponseJson<Void> saveVipRole(SysMenu menu, List<SysPermission> permissionList) {
|
|
|
// 保存会员菜单角色
|
|
|
SysRole vipMenuRole = new SysRole();
|
|
|
vipMenuRole.setRoleName(menu.getTitle() + "会员菜单角色");
|
|
@@ -249,35 +247,58 @@ public class SysMenuServiceImpl implements SysMenuService {
|
|
|
vipMenuRole.setMenuIds(menu.getId().toString());
|
|
|
vipMenuRole.setRoleType(2);
|
|
|
Integer dbVipRoleId = systemMapper.getVipRoleIdByMenuId(menu.getId());
|
|
|
+ ResponseJson<Void> result = null;
|
|
|
if (null == dbVipRoleId) {
|
|
|
- return sysRoleService.addRole(vipMenuRole);
|
|
|
+ result = sysRoleService.addRole(vipMenuRole);
|
|
|
} else {
|
|
|
- return sysRoleService.updateRole(dbVipRoleId, vipMenuRole);
|
|
|
+ result = sysRoleService.updateRole(dbVipRoleId, vipMenuRole);
|
|
|
+ }
|
|
|
+ if (0 != result.getCode()) {
|
|
|
+ return result;
|
|
|
}
|
|
|
+ permissionList.forEach(permission->{
|
|
|
+ systemMapper.insertRolePermissionRelation(vipMenuRole.getId(), permission.getId());
|
|
|
+ });
|
|
|
+ return ResponseJson.success();
|
|
|
}
|
|
|
|
|
|
- private void addShopRoleRelation(Integer menuId) {
|
|
|
+ private void addShopRoleRelation(Integer menuId, List<SysPermission> permissionList) {
|
|
|
// 添加供应商基础菜单时将该菜单与供应商基础角色关联
|
|
|
- ResponseJson<SysRole> roleInfo = sysRoleService.getRoleInfo(2);
|
|
|
- SysRole vipBaseRole = roleInfo.getData();
|
|
|
- String menuIds = vipBaseRole.getMenuIds();
|
|
|
- if (!menuIds.contains(menuId.toString())) {
|
|
|
- menuIds += "," + menuId;
|
|
|
- vipBaseRole.setMenuIds(menuIds);
|
|
|
- sysRoleService.updateRole(2, vipBaseRole);
|
|
|
+ // 根据角色ID获取菜单Ids
|
|
|
+ List<Integer> menuIdList = systemMapper.getMenuIdsByRoleId(1);
|
|
|
+ if (!menuIdList.contains(menuId)) {
|
|
|
+ menuIdList.add(menuId);
|
|
|
+ SysRole sysRole = new SysRole();
|
|
|
+ String menuIds = CommonUtil.idListToString(menuIdList, ",");
|
|
|
+ sysRole.setMenuIds(menuIds);
|
|
|
+ sysRoleService.updateRole(1, sysRole);
|
|
|
+ sysRoleService.updateRole(2, sysRole);
|
|
|
}
|
|
|
+ // 添加权限关联
|
|
|
+ permissionList.forEach(permission->{
|
|
|
+ systemMapper.insertRolePermissionRelation(1,permission.getId());
|
|
|
+ systemMapper.insertRolePermissionRelation(2,permission.getId());
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
- private void removeShopRoleRelation(Integer menuId) {
|
|
|
- ResponseJson<SysRole> roleInfo = sysRoleService.getRoleInfo(2);
|
|
|
- SysRole vipBaseRole = roleInfo.getData();
|
|
|
- String menuIds = vipBaseRole.getMenuIds();
|
|
|
- if (menuIds.contains(menuId.toString())) {
|
|
|
- menuIds = menuIds.replace("," + menuId, "");
|
|
|
- menuIds = menuIds.replace(menuId.toString(), "");
|
|
|
- vipBaseRole.setMenuIds(menuIds);
|
|
|
- sysRoleService.updateRole(2, vipBaseRole);
|
|
|
+
|
|
|
+ private void removeMenuRoleRelation(Integer menuId) {
|
|
|
+ // 根据角色ID获取菜单Ids
|
|
|
+ List<Integer> menuIdList = systemMapper.getMenuIdsByRoleId(1);
|
|
|
+ if (menuIdList.contains(menuId)) {
|
|
|
+ menuIdList.remove(menuId);
|
|
|
+ String menuIds = CommonUtil.idListToString(menuIdList, ",");
|
|
|
+ SysRole sysRole = new SysRole();
|
|
|
+ sysRole.setMenuIds(menuIds);
|
|
|
+ sysRoleService.updateRole(1, sysRole);
|
|
|
+ sysRoleService.updateRole(2, sysRole);
|
|
|
+ } else {
|
|
|
+ Integer roleId = systemMapper.getVipRoleIdByMenuId(menuId);
|
|
|
+ systemMapper.deleteRole(roleId);
|
|
|
+ systemMapper.deleteRoleMenuRelation(roleId);
|
|
|
}
|
|
|
+ // 根据菜单ID获取权限关联信息
|
|
|
+ systemMapper.deleteRoleMenuPermission(menuId);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -305,8 +326,9 @@ public class SysMenuServiceImpl implements SysMenuService {
|
|
|
* 按钮权限JSON数据解析
|
|
|
* @param menuId 菜单Id
|
|
|
* @param jsonStr 按钮权限JSON串
|
|
|
+ * @return
|
|
|
*/
|
|
|
- private ResponseJson<Void> parsePermissionJson(Integer menuId, String jsonStr) {
|
|
|
+ private ResponseJson<List<SysPermission>> parsePermissionJson(Integer menuId, String jsonStr) {
|
|
|
// 按钮权限JSON数据解析
|
|
|
JSONArray permissionJson = null;
|
|
|
List<SysPermission> permissionList = new ArrayList<>();
|
|
@@ -348,7 +370,7 @@ public class SysMenuServiceImpl implements SysMenuService {
|
|
|
systemMapper.deletePermission(id);
|
|
|
}
|
|
|
}
|
|
|
- return null;
|
|
|
+ return ResponseJson.success(permissionList);
|
|
|
}
|
|
|
|
|
|
|