From f9114ffadfab1c01198dd980c3afb66d0c44a5ea Mon Sep 17 00:00:00 2001
From: zzw <228544128@qq.com>
Date: 星期二, 06 十月 2026 18:22:00 +0800
Subject: [PATCH] fix: limit equipment picker to selected X number
---
emergency-repair-server/src/main/java/com/emergencyrepair/system/service/SystemService.java | 58 +++++++++++++++++++++++++++++-----------------------------
1 files changed, 29 insertions(+), 29 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..1775f6e 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);
@@ -142,6 +148,19 @@
menuMapper.updateById(menu);
}
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
@@ -395,30 +414,11 @@
if (!StringUtils.hasText(xNo)) {
return productTreeRoots();
}
- List<ProductNode> rootNodes = productNodeMapper.selectList(Wrappers.<ProductNode>lambdaQuery()
- .and(wrapper -> wrapper.isNull(ProductNode::getParentId).or().eq(ProductNode::getParentId, 0L))
- .orderByAsc(ProductNode::getSortNo).orderByAsc(ProductNode::getId));
List<ProductNode> sideNodes = productNodeMapper.selectList(Wrappers.<ProductNode>lambdaQuery()
.in(ProductNode::getLayer, Arrays.asList("side", "SIDE"))
.eq(ProductNode::getName, xNo.trim())
.orderByAsc(ProductNode::getSortNo).orderByAsc(ProductNode::getId));
- Map<Long, ProductNode> roots = uniqueProductNodes(rootNodes);
- Map<Long, ProductNode> sides = uniqueProductNodes(sideNodes);
- Set<Long> branchIds = new HashSet<>();
- branchIds.addAll(roots.keySet());
- branchIds.addAll(sides.keySet());
- Map<Long, Map<String, Object>> rootRows = new LinkedHashMap<>();
- for (ProductNode root : sortProductNodes(roots.values())) {
- rootRows.put(root.getId(), mapProduct(root, branchIds));
- }
- for (ProductNode side : sortProductNodes(sides.values())) {
- ProductNode root = findProductRoot(side);
- Map<String, Object> rootRow = root == null ? null : rootRows.get(root.getId());
- if (rootRow != null) {
- children(rootRow).add(mapProduct(side, branchIds));
- }
- }
- return new ArrayList<>(rootRows.values());
+ return mapProductTreeNodes(sideNodes, Collections.emptySet());
}
public List<String> productXNumbers() {
--
Gitblit v1.9.1