From 1332cc511936d7dbe804921bc733c83d5e4d1400 Mon Sep 17 00:00:00 2001
From: zzw <228544128@qq.com>
Date: 星期二, 06 十月 2026 17:17:49 +0800
Subject: [PATCH] feat: add completion query and configurable system identity
---
emergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.java | 37 ++++++++++++++++++++++++++++---------
1 files changed, 28 insertions(+), 9 deletions(-)
diff --git a/emergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.java b/emergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.java
index 9f0cfd1..e06db50 100644
--- a/emergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.java
+++ b/emergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.java
@@ -108,11 +108,20 @@
menu.setMenuType(menu.getId() == null ? 1 : menu.getMenuType());
}
boolean isRoot = menu.getPid() == null || menu.getPid() == 0L;
- if (menu.getMenuType() == 2) {
- if (isRoot) {
- throw new BusinessException("鎸夐挳绫诲瀷鍙兘寤哄湪鑿滃崟绫诲瀷涓嬬骇");
+ if (menu.getId() != null && !isRoot && menu.getId().equals(menu.getPid())) {
+ throw new BusinessException("涓婄骇鑿滃崟涓嶈兘閫夋嫨褰撳墠鑿滃崟");
+ }
+ SysMenu parent = null;
+ if (!isRoot) {
+ parent = menuMapper.selectById(menu.getPid());
+ if (parent == null) {
+ throw new BusinessException("涓婄骇鑿滃崟涓嶅瓨鍦�");
}
- SysMenu parent = menuMapper.selectById(menu.getPid());
+ if (menu.getId() != null && isMenuDescendant(menu.getPid(), menu.getId())) {
+ throw new BusinessException("涓婄骇鑿滃崟涓嶈兘閫夋嫨褰撳墠鑿滃崟鐨勪笅绾�");
+ }
+ }
+ if (menu.getMenuType() == 2) {
if (parent == null || parent.getMenuType() == null || parent.getMenuType() != 1) {
throw new BusinessException("鎸夐挳绫诲瀷鍙兘寤哄湪鑿滃崟绫诲瀷涓嬬骇");
}
@@ -121,11 +130,8 @@
}
menu.setUrl(null);
menu.setIcon(null);
- } else if (!isRoot) {
- SysMenu parent = menuMapper.selectById(menu.getPid());
- if (parent != null && parent.getMenuType() != null && parent.getMenuType() == 2) {
- throw new BusinessException("鎸夐挳绫诲瀷涓嬬骇涓嶈兘鍐嶅缓鑿滃崟");
- }
+ } else if (parent != null && parent.getMenuType() != null && parent.getMenuType() == 2) {
+ throw new BusinessException("鎸夐挳绫诲瀷涓嬬骇涓嶈兘鍐嶅缓鑿滃崟");
}
LocalDateTime now = LocalDateTime.now();
menu.setUpdateTime(now);
@@ -144,6 +150,19 @@
return menuMapper.selectById(menu.getId());
}
+ private boolean isMenuDescendant(Long candidateId, Long ancestorId) {
+ Long cursor = candidateId;
+ int guard = 0;
+ while (cursor != null && cursor != 0L && guard++ < 64) {
+ if (cursor.equals(ancestorId)) {
+ return true;
+ }
+ SysMenu current = menuMapper.selectById(cursor);
+ cursor = current == null ? null : current.getPid();
+ }
+ return false;
+ }
+
@Transactional
public void deleteMenu(Long id) {
long children = menuMapper.selectCount(Wrappers.<SysMenu>lambdaQuery().eq(SysMenu::getPid, id));
--
Gitblit v1.9.1