系统推送,系统菜单

This commit is contained in:
hy001 2026-04-27 15:09:51 +08:00
parent 82e8dc0bfe
commit 05fb11d4e7
3 changed files with 101 additions and 6 deletions

View File

@ -89,7 +89,7 @@ public class SysPushServiceImpl implements SysPushService {
createRecordParam.getTitle(), ex);
throw ex;
} finally {
ResponseAssert.isTrue(CommonErrorCode.OPERATING_FAILURE, !sysPushRecordLogService.save(pushLog));
ResponseAssert.isTrue(CommonErrorCode.OPERATING_FAILURE, sysPushRecordLogService.save(pushLog));
createRecordParam.setId(pushLog.getId());
}
}
@ -157,7 +157,7 @@ public class SysPushServiceImpl implements SysPushService {
ResponseAssert.notNull(ResponseErrorCode.REQUEST_PARAMETER_ERROR,
SysOriginPlatformEnum.toEnum(createRecordParam.getSysOrigin()));
ResponseAssert.isTrue(ResponseErrorCode.REQUEST_PARAMETER_ERROR,
!createRecordParam.isGoogleDevice());
createRecordParam.isGoogleDevice());
}
private void pushGoogle(CreateRecordCmd createRecordParam,
@ -176,7 +176,7 @@ public class SysPushServiceImpl implements SysPushService {
}
ResponseAssert.isTrue(ResponseErrorCode.REQUEST_PARAMETER_ERROR,
!pushCmd.isNotEmptyAndroidDevices() && !pushCmd.isNotEmptyIosDevices());
pushCmd.isNotEmptyAndroidDevices() || pushCmd.isNotEmptyIosDevices());
ResponseAssert.checkSuccess(googleFirebasePushClient.broadcast(pushCmd));
}

View File

@ -11,9 +11,12 @@ import com.red.circle.console.infra.database.rds.service.admin.MenuService;
import com.red.circle.console.infra.database.util.TreeUtils;
import com.red.circle.framework.mybatis.service.impl.BaseServiceImpl;
import com.red.circle.tool.core.collection.CollectionUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@ -101,12 +104,65 @@ public class MenuServiceImpl extends BaseServiceImpl<MenuDAO, Menu> implements M
@Override
public List<MenuTreeDTO> listUserPermMenu(Integer uid) {
List<MenuTreeDTO> menus = baseDAO.findUserPermMenus(uid, StatusEnum.NORMAL,
Arrays.asList(MenuTypeEnum.CATALOG, MenuTypeEnum.MENU));
List<MenuTreeDTO> menus = appendMissingAncestorMenus(
baseDAO.findUserPermMenus(uid, StatusEnum.NORMAL,
Arrays.asList(MenuTypeEnum.CATALOG, MenuTypeEnum.MENU)));
return menus.stream().filter(e -> !parentIdNotNull(e.getParentId()))
.map(e -> TreeUtils.findChildren(e, menus)).collect(Collectors.toList());
}
private List<MenuTreeDTO> appendMissingAncestorMenus(List<MenuTreeDTO> menus) {
if (CollectionUtils.isEmpty(menus)) {
return menus;
}
Map<Integer, MenuTreeDTO> menuMap = new LinkedHashMap<>();
menus.stream()
.filter(menu -> Objects.nonNull(menu.getId()))
.forEach(menu -> menuMap.put(menu.getId(), menu));
Set<Integer> missingParentIds = findMissingParentIds(menuMap);
while (CollectionUtils.isNotEmpty(missingParentIds)) {
List<Menu> parentMenus = query()
.eq(Menu::getStatus, StatusEnum.NORMAL)
.in(Menu::getMenuType, Arrays.asList(MenuTypeEnum.CATALOG, MenuTypeEnum.MENU))
.in(Menu::getId, missingParentIds)
.list();
if (CollectionUtils.isEmpty(parentMenus)) {
break;
}
parentMenus.stream()
.filter(menu -> Objects.nonNull(menu.getId()))
.filter(menu -> !menuMap.containsKey(menu.getId()))
.forEach(menu -> menuMap.put(menu.getId(), toMenuTreeDTO(menu)));
missingParentIds = findMissingParentIds(menuMap);
}
return new ArrayList<>(menuMap.values());
}
private Set<Integer> findMissingParentIds(Map<Integer, MenuTreeDTO> menuMap) {
return menuMap.values().stream()
.map(MenuTreeDTO::getParentId)
.filter(this::parentIdNotNull)
.filter(parentId -> !menuMap.containsKey(parentId))
.collect(Collectors.toSet());
}
private MenuTreeDTO toMenuTreeDTO(Menu menu) {
MenuTreeDTO dto = new MenuTreeDTO();
dto.setId(menu.getId());
dto.setParentId(menu.getParentId());
dto.setMenuName(menu.getMenuName());
dto.setMenuType(menu.menuTypeToInt());
dto.setRouter(menu.getRouter());
dto.setPath(menu.getPath());
dto.setIcon(menu.getIcon());
dto.setAlias(menu.getAlias());
return dto;
}
@Override
public Set<String> getUserPermButtonAliases(Integer uid) {
return baseDAO

View File

@ -1,14 +1,20 @@
package com.red.circle.console.infra.database.rds.service.admin.impl;
import com.red.circle.console.infra.database.rds.dao.admin.RoleMenuDAO;
import com.red.circle.console.infra.database.rds.entity.admin.Menu;
import com.red.circle.console.infra.database.rds.entity.admin.RoleMenu;
import com.red.circle.console.infra.database.rds.service.admin.MenuService;
import com.red.circle.console.infra.database.rds.service.admin.RoleMenuService;
import com.red.circle.framework.mybatis.service.impl.BaseServiceImpl;
import com.red.circle.tool.core.collection.CollectionUtils;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -20,14 +26,47 @@ import org.springframework.transaction.annotation.Transactional;
* @author pengliang
*/
@Service
@RequiredArgsConstructor
public class RoleMenuServiceImpl extends BaseServiceImpl<RoleMenuDAO, RoleMenu> implements
RoleMenuService {
private final MenuService menuService;
@Override
public void saveRoleMenu(Integer roleId, List<Integer> menuIds) {
delete().eq(RoleMenu::getRoleId, roleId).execute();
if (CollectionUtils.isEmpty(menuIds)) {
return;
}
Set<Integer> normalizedMenuIds = collectMenuIdsWithAncestors(menuIds);
saveBatch(
menuIds.stream().map(menuId -> new RoleMenu(roleId, menuId)).collect(Collectors.toList()));
normalizedMenuIds.stream()
.map(menuId -> new RoleMenu(roleId, menuId))
.collect(Collectors.toList()));
}
private Set<Integer> collectMenuIdsWithAncestors(List<Integer> menuIds) {
Set<Integer> result = menuIds.stream()
.filter(Objects::nonNull)
.collect(Collectors.toCollection(LinkedHashSet::new));
Set<Integer> pendingIds = new HashSet<>(result);
while (CollectionUtils.isNotEmpty(pendingIds)) {
List<Menu> menus = menuService.query()
.select(Menu::getId, Menu::getParentId)
.in(Menu::getId, pendingIds)
.list();
pendingIds.clear();
for (Menu menu : menus) {
Integer parentId = menu.getParentId();
if (parentId != null && parentId != 0 && result.add(parentId)) {
pendingIds.add(parentId);
}
}
}
return result;
}
@Override