diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiCategoryServiceImpl.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiCategoryServiceImpl.java index 118ded4..7bd0dcc 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiCategoryServiceImpl.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/busi/service/impl/BusiCategoryServiceImpl.java @@ -47,10 +47,10 @@ public class BusiCategoryServiceImpl extends ServiceImpl list = list(lambdaQueryWrapper); return buildCategoryTree(list); } @@ -62,34 +62,108 @@ public class BusiCategoryServiceImpl extends ServiceImpl list,String tenantId) { + public void setCategoryAmount(List list, String tenantId) { Map idToProdsJunior = new HashMap<>(); list.forEach(item -> { - idToProdsJunior.put(item.getCatgId(),item.getAmount()); + idToProdsJunior.put(item.getCatgId(), item.getAmount()); }); //查询全部栏目 LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.eq(DlBaseEntity::getDelFlag,0) - .eq(BusiCategory::getTenantId,tenantId); + lambdaQueryWrapper.eq(DlBaseEntity::getDelFlag, 0) + .eq(BusiCategory::getTenantId, tenantId); List categoryList = list(lambdaQueryWrapper); //遍历赋值 - categoryList.forEach(item->{ + categoryList.forEach(item -> { if (idToProdsJunior.containsKey(item.getId())) { item.setProdsJunior(idToProdsJunior.get(item.getId())); } }); + List saveResult = computeProdsAll(categoryList); + updateBatchById(saveResult); + } + /** + * 统计每个节点的递归产品数,并返回更新后的列表 + * + * @param categoryList List + * @return java.util.List + * @author PQZ + * @date 15:07 2025/6/30 + **/ + private List computeProdsAll(List categoryList) { + if (categoryList == null || categoryList.isEmpty()) { + return categoryList; + } + // 构建id到节点的映射,便于查找 + Map idToCategory = new HashMap<>(); + for (BusiCategory category : categoryList) { + idToCategory.put(category.getId(), category); + } + // 构建树结构(找出根节点) + BusiCategory root = null; + for (BusiCategory category : categoryList) { + if (category.getParentId() == null) { + root = category; + } + } + // 递归统计 + calculateProdsAll(root, categoryList); + return categoryList; + } + + /** + * 递归计算子节点数据 + * + * @param node 根节点 + * @param categories 全部数据 + * @return java.lang.Integer + * @author PQZ + * @date 15:24 2025/6/30 + **/ + private static Integer calculateProdsAll(BusiCategory node, List categories) { + if (node == null) { + return 0; + } + Integer sum = 0; + for (BusiCategory child : getChildren(node, categories)) { + sum += calculateProdsAll(child, categories); + } + Integer currentProdsJunior = (node.getProdsJunior() != null) ? node.getProdsJunior() : 0; + node.setProdsAll(sum + currentProdsJunior); + ; + return node.getProdsAll(); + } + + /** + * 获取某节点的子节点 + * + * @param parent 父节点 + * @param categories 所有栏目 + * @return java.util.List + * @author PQZ + * @date 15:24 2025/6/30 + **/ + private static List getChildren(BusiCategory parent, List categories) { + List children = new ArrayList<>(); + for (BusiCategory cat : categories) { + if (parent.getId().equals(cat.getParentId())) { + children.add(cat); + } + } + return children; + } /** * 生成树结构 - * @author PQZ - * @date 14:11 2025/6/23 + * * @param list 网站栏目列表 * @return java.util.List - **/ + * @author PQZ + * @date 14:11 2025/6/23 + **/ private List buildCategoryTree(List list) { // Map存放id到VO的映射 Map idToNodeMap = new HashMap<>();