This commit is contained in:
PQZ 2025-06-30 15:26:16 +08:00
parent 74ee7e5eb9
commit d82fe6407c

View File

@ -42,11 +42,11 @@ public class BusiCategoryServiceImpl extends ServiceImpl<BusiCategoryMapper, Bus
public List<BusiCategoryVO> treeCategory(BusiCategory category) {
//查询全部栏目
LambdaQueryWrapper<BusiCategory> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(DlBaseEntity::getDelFlag,0)
.eq(BusiCategory::getTenantId,category.getTenantId())
lambdaQueryWrapper.eq(DlBaseEntity::getDelFlag, 0)
.eq(BusiCategory::getTenantId, category.getTenantId())
.orderByAsc(DlBaseEntity::getCreateTime);
if (!StringUtils.isEmpty(category.getCatgName())) {
lambdaQueryWrapper.like(BusiCategory::getCatgName,category.getCatgName());
lambdaQueryWrapper.like(BusiCategory::getCatgName, category.getCatgName());
}
List<BusiCategory> list = list(lambdaQueryWrapper);
return buildCategoryTree(list);
@ -59,41 +59,115 @@ public class BusiCategoryServiceImpl extends ServiceImpl<BusiCategoryMapper, Bus
* @date 14:12 2025/6/30
**/
@Override
public void setCategoryAmount(List<ProdNewVO> list,String tenantId) {
public void setCategoryAmount(List<ProdNewVO> list, String tenantId) {
Map<String, Integer> idToProdsJunior = new HashMap<>();
list.forEach(item -> {
idToProdsJunior.put(item.getCatgId(),item.getAmount());
idToProdsJunior.put(item.getCatgId(), item.getAmount());
});
//查询全部栏目
LambdaQueryWrapper<BusiCategory> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(DlBaseEntity::getDelFlag,0)
.eq(BusiCategory::getTenantId,tenantId);
lambdaQueryWrapper.eq(DlBaseEntity::getDelFlag, 0)
.eq(BusiCategory::getTenantId, tenantId);
List<BusiCategory> categoryList = list(lambdaQueryWrapper);
//遍历赋值
categoryList.forEach(item->{
categoryList.forEach(item -> {
if (idToProdsJunior.containsKey(item.getId())) {
item.setProdsJunior(idToProdsJunior.get(item.getId()));
}
});
List<BusiCategory> saveResult = computeProdsAll(categoryList);
updateBatchById(saveResult);
}
/**
* 统计每个节点的递归产品数并返回更新后的列表
*
* @param categoryList List<BusiCategory>
* @return java.util.List<com.ruoyi.busi.domain.BusiCategory>
* @author PQZ
* @date 15:07 2025/6/30
**/
private List<BusiCategory> computeProdsAll(List<BusiCategory> categoryList) {
if (categoryList == null || categoryList.isEmpty()) {
return categoryList;
}
// 构建id到节点的映射便于查找
Map<String, BusiCategory> 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<BusiCategory> 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<com.ruoyi.busi.domain.BusiCategory>
* @author PQZ
* @date 15:24 2025/6/30
**/
private static List<BusiCategory> getChildren(BusiCategory parent, List<BusiCategory> categories) {
List<BusiCategory> 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<com.ruoyi.busi.vo.BusiCategoryVO>
**/
* @author PQZ
* @date 14:11 2025/6/23
**/
private List<BusiCategoryVO> buildCategoryTree(List<BusiCategory> list) {
// Map存放id到VO的映射
Map<String, BusiCategoryVO> idToNodeMap = new HashMap<>();
// 先将所有节点转换为VO并放入Map
for (BusiCategory category : list) {
BusiCategoryVO vo = new BusiCategoryVO();
BeanUtils.copyProperties(category,vo);
BeanUtils.copyProperties(category, vo);
vo.setValue(category.getId());
vo.setLabel(category.getCatgName());
idToNodeMap.put(vo.getId(), vo);