|
@@ -12,10 +12,11 @@ import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
|
|
|
-import static com.boman.common.core.utils.obj.ObjectUtils.isEmpty;
|
|
|
-import static com.boman.common.core.utils.obj.ObjectUtils.requireNonNull;
|
|
|
+import static com.boman.common.core.utils.obj.ObjectUtils.*;
|
|
|
|
|
|
/**
|
|
|
* @author shiqian
|
|
@@ -40,45 +41,85 @@ public class SysRoleMenuServiceImpl implements ISysRoleMenuService{
|
|
|
* @return int
|
|
|
*/
|
|
|
@Override
|
|
|
- public int saveList(RoleMenuDto dto) {
|
|
|
-// for (SysRoleMenu sysRoleMenu : roleMenuList) {
|
|
|
-// Long maxId = remoteObjService.getMaxId(TableNameConst.SYS_ROLE_MENU, TableNameConst.ID);
|
|
|
-// sysRoleMenu.setId(maxId);
|
|
|
-// }
|
|
|
-//
|
|
|
-// return mapper.batchRoleMenu(roleMenuList);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- Long menuId = dto.getMenuId();
|
|
|
- SysMenu menu = menuService.selectMenuById(menuId);
|
|
|
- requireNonNull(menu, "根据menuId = [" + menuId + "], 未找到菜单");
|
|
|
- String perms = menu.getPerms();
|
|
|
- requireNonNull(perms, "权限标识为空");
|
|
|
- List<String> head = dto.getHead();
|
|
|
- requireNonNull(head, "操作为空");
|
|
|
-
|
|
|
- String btn = RoleMenuDto.getBtnFromPerms(menu.getPerms());
|
|
|
- String tableName = RoleMenuDto.getTableNameFromPerms(menu.getPerms());
|
|
|
+ public int saveList(List<RoleMenuDto> dtos) {
|
|
|
+ int effective = 0;
|
|
|
+ for (RoleMenuDto dto : dtos) {
|
|
|
+ Long menuId = requireNonNull(dto.getMenuId(), "menuId is empty");
|
|
|
+ Long roleId = requireNonNull(dto.getRoleId(), "roleId is empty");
|
|
|
+ SysMenu menu = requireNonNull(menuService.selectMenuById(menuId), "根据menuId = [" + menuId + "], 未找到菜单");
|
|
|
+ List<String> head = dto.getHead();
|
|
|
+ requireNonNull(head, "操作为空");
|
|
|
+ List<SysMenu> allMenus = menuService.selectMenuListAll(new SysMenu());
|
|
|
+ List<SysMenu> childList = menuService.getChildList(allMenus, menu);
|
|
|
+ if (isEmpty(childList)) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 根据子菜单和前台传过来的head来判断包含AMD...中的哪些
|
|
|
+ childList = buildBtnByHead(head, childList);
|
|
|
+ List<SysRoleMenu> roleMenuList = buildRoleMenu(roleId, map(childList, SysMenu::getId));
|
|
|
+ // 先删除,再添加,防止联合索引报错
|
|
|
+ deleteByRoleIdList(Collections.singletonList(roleId));
|
|
|
+ effective += batchRoleMenu(roleMenuList);
|
|
|
+ }
|
|
|
+
|
|
|
+ return effective;
|
|
|
+ }
|
|
|
|
|
|
+ /**
|
|
|
+ * 功能描述: 根据前台传过来的head中判断是否包含childList中perms的btn,返回包含的
|
|
|
+ *
|
|
|
+ * @param head A M D......
|
|
|
+ * @param menuList menuList
|
|
|
+ * @return java.util.List<com.boman.system.api.domain.SysMenu>
|
|
|
+ */
|
|
|
+ private List<SysMenu> buildBtnByHead(List<String> head, List<SysMenu> menuList) {
|
|
|
+ return filter(menuList, menu -> head.contains(RoleMenuDto.getBtnFromPerms(menu.getPerms())));
|
|
|
+ }
|
|
|
|
|
|
+ /**
|
|
|
+ * 功能描述: 根据roleIdList删除
|
|
|
+ *
|
|
|
+ * @param roleIdList roleIdList
|
|
|
+ * @return int
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public int deleteByRoleIdList(List<Long> roleIdList) {
|
|
|
+ if (isEmpty(roleIdList)) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return mapper.deleteByRoleIdList(roleIdList);
|
|
|
+ }
|
|
|
|
|
|
+ /**
|
|
|
+ * 功能描述: 批量保存roleMenuList
|
|
|
+ *
|
|
|
+ * @param roleMenuList roleMenuList
|
|
|
+ * @return int
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public int batchRoleMenu(List<SysRoleMenu> roleMenuList) {
|
|
|
+ return mapper.batchRoleMenu(roleMenuList);
|
|
|
+ }
|
|
|
|
|
|
- return 0;
|
|
|
+ /**
|
|
|
+ * 功能描述: buildRoleMenu
|
|
|
+ *
|
|
|
+ * @param roleId roleId
|
|
|
+ * @param menuIdList menuIdList
|
|
|
+ * @return java.util.List<com.boman.system.domain.SysRoleMenu>
|
|
|
+ */
|
|
|
+ private List<SysRoleMenu> buildRoleMenu(Long roleId, List<Long> menuIdList) {
|
|
|
+ List<SysRoleMenu> result = new ArrayList<>(menuIdList.size());
|
|
|
+ for (Long menuId : menuIdList) {
|
|
|
+ SysRoleMenu roleMenu = new SysRoleMenu();
|
|
|
+ Long maxId = remoteObjService.getMaxId(TableNameConst.SYS_ROLE_MENU, TableNameConst.ID);
|
|
|
+ roleMenu.setId(maxId);
|
|
|
+ roleMenu.setRoleId(roleId);
|
|
|
+ roleMenu.setMenuId(menuId);
|
|
|
+ result.add(roleMenu);
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
}
|
|
|
}
|